mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-15 14:56:42 +00:00
Shared GUI for Bridge and Import/Export
This commit is contained in:
130
internal/frontend/qt-common/common.go
Normal file
130
internal/frontend/qt-common/common.go
Normal file
@ -0,0 +1,130 @@
|
||||
// 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 qtcommon
|
||||
|
||||
//#include "common.h"
|
||||
import "C"
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/therecipe/qt/core"
|
||||
)
|
||||
|
||||
var log = logrus.WithField("pkg", "frontend/qt-common")
|
||||
var logQML = logrus.WithField("pkg", "frontend/qml")
|
||||
|
||||
// RegisterTypes for vector of ints
|
||||
func RegisterTypes() { // need to fix test message
|
||||
C.RegisterTypes()
|
||||
}
|
||||
|
||||
func installMessageHandler() {
|
||||
C.InstallMessageHandler()
|
||||
}
|
||||
|
||||
//export logMsgPacked
|
||||
func logMsgPacked(data *C.char, len C.int) {
|
||||
logQML.Warn(C.GoStringN(data, len))
|
||||
}
|
||||
|
||||
// QtSetupCoreAndControls hanldes global setup of Qt.
|
||||
// Should be called once per program. Probably once per thread is fine.
|
||||
func QtSetupCoreAndControls(programName, programVersion string) {
|
||||
installMessageHandler()
|
||||
// Core setup.
|
||||
core.QCoreApplication_SetApplicationName(programName)
|
||||
core.QCoreApplication_SetApplicationVersion(programVersion)
|
||||
// High DPI scaling for windows.
|
||||
core.QCoreApplication_SetAttribute(core.Qt__AA_EnableHighDpiScaling, false)
|
||||
// Software OpenGL: to avoid dedicated GPU.
|
||||
core.QCoreApplication_SetAttribute(core.Qt__AA_UseSoftwareOpenGL, true)
|
||||
// Basic style for QuickControls2 objects.
|
||||
//quickcontrols2.QQuickStyle_SetStyle("material")
|
||||
}
|
||||
|
||||
// NewQByteArrayFromString is wrapper for new QByteArray from string
|
||||
func NewQByteArrayFromString(name string) *core.QByteArray {
|
||||
return core.NewQByteArray2(name, -1)
|
||||
}
|
||||
|
||||
// NewQVariantString is wrapper for QVariant alocator String
|
||||
func NewQVariantString(data string) *core.QVariant {
|
||||
return core.NewQVariant1(data)
|
||||
}
|
||||
|
||||
// NewQVariantStringArray is wrapper for QVariant alocator String Array
|
||||
func NewQVariantStringArray(data []string) *core.QVariant {
|
||||
return core.NewQVariant1(data)
|
||||
}
|
||||
|
||||
// NewQVariantBool is wrapper for QVariant alocator Bool
|
||||
func NewQVariantBool(data bool) *core.QVariant {
|
||||
return core.NewQVariant1(data)
|
||||
}
|
||||
|
||||
// NewQVariantInt is wrapper for QVariant alocator Int
|
||||
func NewQVariantInt(data int) *core.QVariant {
|
||||
return core.NewQVariant1(data)
|
||||
}
|
||||
|
||||
// NewQVariantLong is wrapper for QVariant alocator Int64
|
||||
func NewQVariantLong(data int64) *core.QVariant {
|
||||
return core.NewQVariant1(data)
|
||||
}
|
||||
|
||||
// Pause used to show GUI tests
|
||||
func Pause() {
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
}
|
||||
|
||||
// Longer pause used to diplay GUI tests
|
||||
func PauseLong() {
|
||||
time.Sleep(3 * time.Second)
|
||||
}
|
||||
|
||||
func ParsePMAPIError(err error, code int) error {
|
||||
/*
|
||||
if err == pmapi.ErrAPINotReachable {
|
||||
code = ErrNoInternet
|
||||
}
|
||||
return errors.NewFromError(code, err)
|
||||
*/
|
||||
return nil
|
||||
}
|
||||
|
||||
// FIXME: Not working in test...
|
||||
func WaitForEnter() {
|
||||
log.Print("Press 'Enter' to continue...")
|
||||
bufio.NewReader(os.Stdin).ReadBytes('\n')
|
||||
}
|
||||
|
||||
type Listener interface {
|
||||
Add(string, chan<- string)
|
||||
}
|
||||
|
||||
func MakeAndRegisterEvent(eventListener Listener, event string) <-chan string {
|
||||
ch := make(chan string)
|
||||
eventListener.Add(event, ch)
|
||||
return ch
|
||||
}
|
||||
Reference in New Issue
Block a user