Shared GUI for Bridge and Import/Export
This commit is contained in:
129
internal/frontend/qt-ie/error_list.go
Normal file
129
internal/frontend/qt-ie/error_list.go
Normal file
@ -0,0 +1,129 @@
|
||||
// Copyright (c) 2020 Proton Technologies AG
|
||||
//
|
||||
// This file is part of ProtonMail Bridge.
|
||||
//
|
||||
// ProtonMail Bridge is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// ProtonMail Bridge is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
// +build !nogui
|
||||
|
||||
package qtie
|
||||
|
||||
import (
|
||||
qtcommon "github.com/ProtonMail/proton-bridge/internal/frontend/qt-common"
|
||||
"github.com/therecipe/qt/core"
|
||||
)
|
||||
|
||||
// ErrorDetail stores information about email and error
|
||||
type ErrorDetail struct {
|
||||
MailSubject, MailDate, MailFrom, InputFolder, ErrorMessage string
|
||||
}
|
||||
|
||||
func init() {
|
||||
ErrorListModel_QRegisterMetaType()
|
||||
}
|
||||
|
||||
// ErrorListModel to sending error details to Qt
|
||||
type ErrorListModel struct {
|
||||
core.QAbstractListModel
|
||||
|
||||
// Qt list model
|
||||
_ func() `constructor:"init"`
|
||||
_ map[int]*core.QByteArray `property:"roles"`
|
||||
_ int `property:"count"`
|
||||
|
||||
Details []*ErrorDetail
|
||||
}
|
||||
|
||||
func (s *ErrorListModel) init() {
|
||||
s.SetRoles(map[int]*core.QByteArray{
|
||||
MailSubject: qtcommon.NewQByteArrayFromString("mailSubject"),
|
||||
MailDate: qtcommon.NewQByteArrayFromString("mailDate"),
|
||||
MailFrom: qtcommon.NewQByteArrayFromString("mailFrom"),
|
||||
InputFolder: qtcommon.NewQByteArrayFromString("inputFolder"),
|
||||
ErrorMessage: qtcommon.NewQByteArrayFromString("errorMessage"),
|
||||
})
|
||||
// basic QAbstractListModel mehods
|
||||
s.ConnectData(s.data)
|
||||
s.ConnectRowCount(s.rowCount)
|
||||
s.ConnectColumnCount(s.columnCount)
|
||||
s.ConnectRoleNames(s.roleNames)
|
||||
}
|
||||
|
||||
func (s *ErrorListModel) data(index *core.QModelIndex, role int) *core.QVariant {
|
||||
if !index.IsValid() {
|
||||
return core.NewQVariant()
|
||||
}
|
||||
|
||||
if index.Row() >= len(s.Details) {
|
||||
return core.NewQVariant()
|
||||
}
|
||||
|
||||
var p = s.Details[index.Row()]
|
||||
|
||||
switch role {
|
||||
case MailSubject:
|
||||
return qtcommon.NewQVariantString(p.MailSubject)
|
||||
case MailDate:
|
||||
return qtcommon.NewQVariantString(p.MailDate)
|
||||
case MailFrom:
|
||||
return qtcommon.NewQVariantString(p.MailFrom)
|
||||
case InputFolder:
|
||||
return qtcommon.NewQVariantString(p.InputFolder)
|
||||
case ErrorMessage:
|
||||
return qtcommon.NewQVariantString(p.ErrorMessage)
|
||||
default:
|
||||
return core.NewQVariant()
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ErrorListModel) rowCount(parent *core.QModelIndex) int { return len(s.Details) }
|
||||
func (s *ErrorListModel) columnCount(parent *core.QModelIndex) int { return 1 }
|
||||
func (s *ErrorListModel) roleNames() map[int]*core.QByteArray { return s.Roles() }
|
||||
|
||||
// Add more errors to list
|
||||
func (s *ErrorListModel) Add(more []*ErrorDetail) {
|
||||
s.BeginInsertRows(core.NewQModelIndex(), len(s.Details), len(s.Details))
|
||||
s.Details = append(s.Details, more...)
|
||||
s.SetCount(len(s.Details))
|
||||
s.EndInsertRows()
|
||||
}
|
||||
|
||||
// Clear removes all items in model
|
||||
func (s *ErrorListModel) Clear() {
|
||||
s.BeginRemoveRows(core.NewQModelIndex(), 0, len(s.Details))
|
||||
s.Details = s.Details[0:0]
|
||||
s.SetCount(len(s.Details))
|
||||
s.EndRemoveRows()
|
||||
}
|
||||
|
||||
func (s *ErrorListModel) load(importLogFileName string) {
|
||||
/*
|
||||
err := backend.LoopDetailsInFile(importLogFileName, func(d *backend.MessageDetails) {
|
||||
if d.MessageID != "" { // imported ok
|
||||
return
|
||||
}
|
||||
ed := &ErrorDetail{
|
||||
MailSubject: d.Subject,
|
||||
MailDate: d.Time,
|
||||
MailFrom: d.From,
|
||||
InputFolder: d.Folder,
|
||||
ErrorMessage: d.Error,
|
||||
}
|
||||
s.Add([]*ErrorDetail{ed})
|
||||
})
|
||||
if err != nil {
|
||||
log.Errorf("load import report from %q: %v", importLogFileName, err)
|
||||
}
|
||||
*/
|
||||
}
|
||||
Reference in New Issue
Block a user