Warning, /system/plasma-pk-updates/src/plasma/contents/ui/main.qml is written in an unsupported language. File is not indexed.

0001 /***************************************************************************
0002  *   Copyright (C) 2014 by Aleix Pol Gonzalez <aleixpol@blue-systems.com>  *
0003  *   Copyright (C) 2015 by Lukáš Tinkl <lukas@kde.org>                     *
0004  *   Copyright (C) 2015 by Jan Grulich <jgrulich@redhat.com>               *
0005  *                                                                         *
0006  *   This program is free software; you can redistribute it and/or modify  *
0007  *   it under the terms of the GNU General Public License as published by  *
0008  *   the Free Software Foundation; either version 2 of the License, or     *
0009  *   (at your option) any later version.                                   *
0010  *                                                                         *
0011  *   This program is distributed in the hope that it will be useful,       *
0012  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0013  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0014  *   GNU General Public License for more details.                          *
0015  *                                                                         *
0016  *   You should have received a copy of the GNU General Public License     *
0017  *   along with this program; if not, write to the                         *
0018  *   Free Software Foundation, Inc.,                                       *
0019  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
0020  ***************************************************************************/
0021 
0022 import QtQuick 2.2
0023 import org.kde.plasma.plasmoid 2.0
0024 import org.kde.plasma.core 2.0 as PlasmaCore
0025 import org.kde.plasma.PackageKit 1.0
0026 
0027 Item
0028 {
0029     Plasmoid.fullRepresentation: Full {}
0030     Plasmoid.toolTipSubText: PkUpdates.message
0031     Plasmoid.icon: PkUpdates.iconName
0032 
0033     Plasmoid.switchWidth: units.gridUnit * 10;
0034     Plasmoid.switchHeight: units.gridUnit * 10;
0035 
0036     property bool checkDaily: plasmoid.configuration.daily
0037     property bool checkWeekly: plasmoid.configuration.weekly
0038     property bool checkMonthly: plasmoid.configuration.monthly
0039 
0040     property bool checkOnMobile: plasmoid.configuration.check_on_mobile
0041     property bool checkOnBattery: plasmoid.configuration.check_on_battery
0042 
0043     property double lastCheckAttempt: PkUpdates.lastRefreshTimestamp()
0044     readonly property int secsAutoCheckLimit: 10 * 60
0045 
0046     readonly property int secsInDay: 60 * 60 * 24;
0047     readonly property int secsInWeek: secsInDay * 7;
0048     readonly property int secsInMonth: secsInDay * 30;
0049 
0050     readonly property bool networkAllowed: PkUpdates.isNetworkMobile ? checkOnMobile : PkUpdates.isNetworkOnline
0051     readonly property bool batteryAllowed: PkUpdates.isOnBattery ? checkOnBattery : true
0052 
0053     Timer {
0054         id: timer
0055         repeat: true
0056         triggeredOnStart: true
0057         interval: 1000 * 60 * 60; // 1 hour
0058         onTriggered: {
0059             if (needsForcedUpdate() && networkAllowed && batteryAllowed) {
0060                 lastCheckAttempt = Date.now();
0061                 PkUpdates.checkUpdates(false /* manual */);
0062             }
0063         }
0064     }
0065 
0066     Binding {
0067         target: plasmoid
0068         property: "status"
0069         value: PkUpdates.isActive || !PkUpdates.isSystemUpToDate ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.PassiveStatus;
0070     }
0071 
0072     Plasmoid.compactRepresentation: PlasmaCore.IconItem {
0073         source: PkUpdates.iconName
0074         anchors.fill: parent
0075         MouseArea {
0076             anchors.fill: parent
0077             onClicked: plasmoid.expanded = !plasmoid.expanded
0078         }
0079     }
0080 
0081     function needsForcedUpdate() {
0082         if ((Date.now() - lastCheckAttempt)/1000 < secsAutoCheckLimit) {
0083             return false;
0084         }
0085 
0086         var secs = (Date.now() - PkUpdates.lastRefreshTimestamp())/1000; // compare with the saved timestamp
0087         if (secs < 0) { // never checked before
0088             return true;
0089         } else if (checkDaily) {
0090             return secs >= secsInDay;
0091         } else if (checkWeekly) {
0092             return secs >= secsInWeek;
0093         } else if (checkMonthly) {
0094             return secs >= secsInMonth;
0095         }
0096         return false;
0097     }
0098 
0099     Connections {
0100         target: PkUpdates
0101         onNetworkStateChanged: timer.restart()
0102         onIsOnBatteryChanged: timer.restart()
0103     }
0104 
0105     Component.onCompleted: {
0106         timer.start()
0107     }
0108 }