Skip to content
Snippets Groups Projects
Select Git revision
  • 09995f27b6e4ab98684b46d687b6509f728b2de5
  • servant default protected
2 results

main.qml

Blame
  • Forked from The Kazv Project / kazv
    Source project has a limited visibility.
    main.qml 4.38 KiB
    /*
     * This file is part of kazv.
     * SPDX-FileCopyrightText: 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
     * SPDX-License-Identifier: AGPL-3.0-or-later
     */
    
    import QtQuick 2.1
    import org.kde.kirigami 2.4 as Kirigami
    import QtQuick.Controls 2.0 as Controls
    import moe.kazv.mxc.kazv 0.0 as MK
    
    import '.' as Kazv
    
    import 'l10n.js' as L10n
    
    Kirigami.ApplicationWindow {
      id: root
    
      property var matrixSdk: MK.MatrixSdk {
        onLoginSuccessful: {
          switchToMainPage();
          recordLastSession();
        }
        onLoginFailed: {
          console.log("Login Failed");
          showPassiveNotification(l10n.get('login-page-request-failed-prompt', { errorCode, errorMsg }));
        }
        onDiscoverFailed: {
          console.log("Discover Failed");
          showPassiveNotification(l10n.get('login-page-discover-failed-prompt', { errorCode, errorMsg }));
        }
        onSessionChanged: {
          console.log('session changed');
          reloadSdkVariables();
        }
      }
    
      property var sdkVars: QtObject {
        property var roomList: matrixSdk.roomList()
        property string currentRoomId: ''
      }
    
      property var l10nProvider: MK.L10nProvider {
      }
    
      property var kazvConfig: MK.KazvConfig {
      }
    
      function initializeL10n () {
        const availableLocales = l10nProvider.availableLocaleCodes();
        console.log('available locales:', availableLocales);
        const desiredLanguages = [Qt.uiLanguage];
        console.log('ui language is: ', desiredLanguages);
        const defaultLocale = 'en';
    
        const wantedLocales = L10n.negotiateLanguages(desiredLanguages, availableLocales, defaultLocale);
    
        console.log('wanted locales:', wantedLocales);
    
        const bundles = L10n.generateBundles(wantedLocales, l10nProvider.getFtlData(wantedLocales));
        const provider = new L10n.FluentProvider(bundles);
    
        return provider;
      }
    
      property var l10n: initializeL10n();
    
      title: l10n.get('app-title')
    
      globalDrawer: Kirigami.GlobalDrawer {
        title: l10n.get('global-drawer-title')
        titleIcon: "applications-graphics"
        actions: [
          Kirigami.Action {
            text: l10n.get('global-drawer-action-switch-account')
            iconName: 'system-switch-user'
            onTriggered: switchAccount()
          },
          Kirigami.Action {
            text: l10n.get('global-drawer-action-hard-logout')
    
            onTriggered: hardLogout()
          },
          Kirigami.Action {
            text: l10n.get('global-drawer-action-save-session')
            onTriggered: {
              recordLastSession()
              matrixSdk.serializeToFile()
            }
          }
        ]
      }
    
      contextDrawer: Kirigami.ContextDrawer {
        id: contextDrawer
      }
    
      pageStack.initialPage: Qt.resolvedUrl("LoginPage.qml")
    
      property var mainPage: Kazv.MainPage {
        id: mainPage
      }
    
      property var roomPage: Kazv.RoomPage {
        id: roomPage
      }
    
      property var emptyPage: Kirigami.Page {
        title: l10n.get('empty-room-page-title')
        Controls.Label {
          text: l10n.get('empty-room-page-description')
        }
      }
    
      function activateRoomPage() {
        roomPage.roomId = root.sdkVars.currentRoomId
        pageStack.push(roomPage)
      }
    
      function switchToMainPage() {
        pageStack.replace([mainPage, emptyPage])
        pageStack.currentIndex = 0
      }
    
      function switchToLoginPage() {
        pageStack.replace([Qt.resolvedUrl("LoginPage.qml")])
        pageStack.currentIndex = 0
      }
    
      function pushLoginPage() {
        pageStack.push(Qt.resolvedUrl("LoginPage.qml"), {
          isSwitchingAccount: true,
        });
      }
    
      function sessionNameFor(userId, deviceId) {
        return userId + '/' + deviceId;
      }
    
      function loadSession(sessionName) {
        const succ = matrixSdk.loadSession(sessionName);
    
        if (succ) {
          console.log('load session successful');
          switchToMainPage();
          recordLastSession();
        } else {
          console.log('load session failed');
        }
        return succ;
      }
    
      function loadLastSession() {
        console.log('last session is:', kazvConfig.lastSession);
    
        return loadSession(kazvConfig.lastSession);
      }
    
      function recordLastSession() {
        kazvConfig.lastSession = sessionNameFor(matrixSdk.userId, matrixSdk.deviceId);
      }
    
      function reloadSdkVariables() {
        sdkVars.roomList = matrixSdk.roomList();
        sdkVars.currentRoomId = '';
      }
    
      Connections {
        target: sdkVars
        function onCurrentRoomIdChanged() {
          if (sdkVars.currentRoomId.length) {
            activateRoomPage()
          }
        }
      }
    
      function switchAccount() {
        pushLoginPage();
      }
    
      function hardLogout() {
        matrixSdk.logout();
      }
    
      Component.onCompleted: {
        loadLastSession();
      }
    }