1
0
Fork 0
mirror of https://git.jami.net/savoirfairelinux/jami-client-qt.git synced 2025-07-26 18:35:34 +02:00
jami-client-qt/src/MainApplicationWindow.qml

217 lines
6.4 KiB
QML
Raw Normal View History

/*
* Copyright (C) 2020-2022 Savoir-faire Linux Inc.
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
* Author: Albert Babí <albert.babi@savoirfairelinux.com>
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
* Author: Yang Wang <yang.wang@savoirfairelinux.com>
*
* This program 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.
*
* This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
import net.jami.Models 1.1
import net.jami.Adapters 1.1
import net.jami.Enums 1.1
import net.jami.Helpers 1.1
import net.jami.Constants 1.1
import "mainview"
import "wizardview"
import "commoncomponents"
ApplicationWindow {
id: root
enum LoadedSource {
WizardView = 0,
MainView,
AccountMigrationView,
None
}
property ApplicationWindow appWindow : root
function toggleFullScreen() {
if (visibility !== Window.FullScreen) {
showFullScreen()
} else {
showNormal()
}
}
function checkLoadedSource() {
var sourceString = mainApplicationLoader.source.toString()
if (sourceString === JamiQmlUtils.wizardViewLoadPath)
return MainApplicationWindow.LoadedSource.WizardView
else if (sourceString === JamiQmlUtils.mainViewLoadPath)
return MainApplicationWindow.LoadedSource.MainView
return MainApplicationWindow.LoadedSource.None
}
function startClient() {
if (UtilsAdapter.getAccountListSize() !== 0) {
mainApplicationLoader.setSource(JamiQmlUtils.mainViewLoadPath)
} else {
mainApplicationLoader.setSource(JamiQmlUtils.wizardViewLoadPath)
}
}
function startAccountMigration() {
mainApplicationLoader.setSource(JamiQmlUtils.accountMigrationViewLoadPath)
}
function close(force = false) {
// If we're in the onboarding wizard or 'MinimizeOnClose'
// is set, then we can quit
if (force || !UtilsAdapter.getAppValue(Settings.MinimizeOnClose) ||
!UtilsAdapter.getAccountListSize()) {
Qt.quit()
} else
hide()
}
title: JamiStrings.appTitle
width: {
if (checkLoadedSource() === MainApplicationWindow.LoadedSource.WizardView)
return JamiTheme.wizardViewMinWidth
return JamiTheme.mainViewPreferredWidth
}
height: {
if (checkLoadedSource() === MainApplicationWindow.LoadedSource.WizardView)
return JamiTheme.wizardViewMinHeight
return JamiTheme.mainViewPreferredHeight
}
minimumWidth: {
if (checkLoadedSource() === MainApplicationWindow.LoadedSource.WizardView)
return JamiTheme.wizardViewMinWidth
return JamiTheme.mainViewMinWidth
}
minimumHeight: {
if (checkLoadedSource() === MainApplicationWindow.LoadedSource.WizardView)
return JamiTheme.wizardViewMinHeight
return JamiTheme.mainViewMinHeight
}
visible: mainApplicationLoader.status === Loader.Ready
// To facilitate reparenting of the callview during
// fullscreen mode, we need QQuickItem based object.
Item {
id: appContainer
anchors.fill: parent
}
DaemonReconnectPopup {
id: daemonReconnectPopup
}
Loader {
id: mainApplicationLoader
anchors.fill: parent
z: -1
asynchronous: true
visible: status == Loader.Ready
source: ""
Connections {
target: mainApplicationLoader.item
function onLoaderSourceChangeRequested(sourceToLoad) {
if (sourceToLoad === MainApplicationWindow.LoadedSource.WizardView)
mainApplicationLoader.setSource(JamiQmlUtils.wizardViewLoadPath)
else
mainApplicationLoader.setSource(JamiQmlUtils.mainViewLoadPath)
}
}
onLoaded: {
if (UtilsAdapter.getAppValue(Settings.StartMinimized)) {
showMinimized()
}
// Quiet check for updates on start if set to.
if (UtilsAdapter.getAppValue(Settings.AutoUpdate)) {
UpdateManager.checkForUpdates(true)
UpdateManager.setAutoUpdateCheck(true)
}
}
}
Connections {
target: LRCInstance
function onRestoreAppRequested() {
requestActivate()
if (visibility === Window.Hidden || visibility === Window.Minimized) {
showNormal()
}
}
function onNotificationClicked() {
requestActivate()
raise()
if (visibility === Window.Hidden || visibility === Window.Minimized) {
showNormal()
}
}
}
Connections {
target: {
if (Qt.platform.os !== "windows" && Qt.platform.os !== "macos")
return DBusErrorHandler
return null
}
ignoreUnknownSignals: true
function onShowDaemonReconnectPopup(visible) {
if (visible)
daemonReconnectPopup.open()
else
daemonReconnectPopup.close()
}
function onDaemonReconnectFailed() {
daemonReconnectPopup.connectionFailed = true
}
}
onClosing: root.close()
onScreenChanged: JamiQmlUtils.mainApplicationScreen = root.screen
Component.onCompleted: {
if (CurrentAccountToMigrate.accountToMigrateListSize <= 0)
startClient()
else
startAccountMigration()
JamiQmlUtils.mainApplicationScreen = root.screen
if (Qt.platform.os !== "windows" && Qt.platform.os !== "macos")
DBusErrorHandler.setActive(true)
}
}