diff -Nru syspeek-0.2~saucy/debian/changelog syspeek-0.3+bzr26/debian/changelog --- syspeek-0.2~saucy/debian/changelog 2013-07-30 16:49:00.000000000 +0000 +++ syspeek-0.3+bzr26/debian/changelog 2014-06-06 23:06:21.000000000 +0000 @@ -1,10 +1,21 @@ -syspeek (0.2~saucy) saucy; urgency=high +syspeek (0.3+bzr26-1~webupd8~trusty0) trusty; urgency=medium - * update from lp:syspeek to be working with saucy + * Ported to GTK3 (by Marco Trevisan): + - https://code.launchpad.net/~3v1n0/syspeek/gtk3-port - -- Amr Osman Tue, 30 Jul 2013 18:48:24 +0200 + -- Alin Andrei Fri, 06 Jun 2014 13:48:51 +0200 -syspeek (0.2~oneiric1) oneiric; urgency=low +syspeek (0.3~bzr12~webupd8~trusty3) trusty; urgency=medium + + * Latest bzr code + * Removed partition chooser in Preferences > Disk, it doesn't work + * Work-aroud for not being able to enable/disable cpu/memory/disk/network more than 2 times per session + * Fixed settings can't be opened with file-not-found error (thanks to DA) + * Fixed Syspeek KDE sysmon (thanks to DA) + + -- Alin Andrei Fri, 25 Apr 2014 19:24:12 +0200 + +syspeek (0.2~bzr12~oneiric1) oneiric; urgency=low * Oneiric build. diff -Nru syspeek-0.2~saucy/debian/control syspeek-0.3+bzr26/debian/control --- syspeek-0.2~saucy/debian/control 2011-10-15 16:13:27.000000000 +0000 +++ syspeek-0.3+bzr26/debian/control 2014-06-06 16:49:43.000000000 +0000 @@ -1,21 +1,28 @@ Source: syspeek Section: gnome Priority: extra -Maintainer: Georg Schmidl +Maintainer: Alin Andrei Build-Depends: debhelper (>= 7), - python (>=2.7), + python-all-dev (>=2.7), python-support, python-distutils-extra (>= 2.10) -Standards-Version: 3.9.1 +X-Python-Version: >= 2.7 +Standards-Version: 3.9.5 Homepage: https://launchpad.net/syspeek Package: syspeek Architecture: all Depends: ${misc:Depends}, ${python:Depends}, - python-gobject, - python-gtk2, - python-appindicator -Recommends: indicator-applet, gnome-system-monitor + python-gobject | python-gi, + python-pkg-resources, + libappindicator3-1, + libgtk-3-0, + gir1.2-gtk-3.0, + gir1.2-glib-2.0, + gir1.2-appindicator3-0.1 +Recommends: gnome-system-monitor Description: A system monitor indicator. - SysPeek is a system monitor indicator that displays CPU usage, memory usage, swap usage, disk usage and network traffic. + SysPeek is a system monitor indicator that displays + CPU usage, memory usage, swap usage, disk usage + and network traffic. diff -Nru syspeek-0.2~saucy/debian/copyright syspeek-0.3+bzr26/debian/copyright --- syspeek-0.2~saucy/debian/copyright 2011-10-15 16:13:27.000000000 +0000 +++ syspeek-0.3+bzr26/debian/copyright 2014-06-06 12:09:13.000000000 +0000 @@ -26,5 +26,3 @@ . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". - -and is licensed under the GPL version 3, see above. diff -Nru syspeek-0.2~saucy/debian/patches/fix-setup.patch syspeek-0.3+bzr26/debian/patches/fix-setup.patch --- syspeek-0.2~saucy/debian/patches/fix-setup.patch 1970-01-01 00:00:00.000000000 +0000 +++ syspeek-0.3+bzr26/debian/patches/fix-setup.patch 2014-06-06 13:44:08.000000000 +0000 @@ -0,0 +1,11 @@ +--- a/setup.py ++++ b/setup.py +@@ -41,6 +41,6 @@ + data_files=[ + ('/etc/xdg/autostart', [NAME+'.desktop',]), + ], +- package_data={NAME: ['ui/*.ui']}, ++ package_data={NAME: ['*.ui']}, + cmdclass={'install': Install}, + ) + diff -Nru syspeek-0.2~saucy/debian/patches/series syspeek-0.3+bzr26/debian/patches/series --- syspeek-0.2~saucy/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 +++ syspeek-0.3+bzr26/debian/patches/series 2014-06-06 13:34:21.000000000 +0000 @@ -0,0 +1 @@ +fix-setup.patch diff -Nru syspeek-0.2~saucy/debian/source/format syspeek-0.3+bzr26/debian/source/format --- syspeek-0.2~saucy/debian/source/format 2011-10-15 16:13:27.000000000 +0000 +++ syspeek-0.3+bzr26/debian/source/format 2014-06-05 11:14:36.000000000 +0000 @@ -1 +1 @@ -3.0 (native) +3.0 (quilt) diff -Nru syspeek-0.2~saucy/po/syspeek.pot syspeek-0.3+bzr26/po/syspeek.pot --- syspeek-0.2~saucy/po/syspeek.pot 2013-07-30 16:52:32.000000000 +0000 +++ syspeek-0.3+bzr26/po/syspeek.pot 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-07-30 18:52+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../syspeek/ui/PreferencesDialog.ui.h:1 -msgid "Update every" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:2 -msgid "seconds" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:3 -msgid "Display average CPU load" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:4 -msgid "Display CPU load for each core" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:5 ../syspeek/indicator.py:36 -#: ../syspeek/indicator.py:37 ../syspeek/indicator.py:38 -msgid "CPU" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:6 -msgid "Display memory usage" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:7 -msgid "Display Swap usage" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:8 ../syspeek/indicator.py:39 -msgid "Memory" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:9 -msgid "Display disk" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:10 -msgid "Disks/Partitions:" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:11 ../syspeek/indicator.py:377 -msgid "Disk" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:12 -msgid "Display network speed" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:13 -msgid "Display total network traffic" -msgstr "" - -#: ../syspeek/ui/PreferencesDialog.ui.h:14 -msgid "Network" -msgstr "" - -#: ../syspeek/indicator.py:39 ../syspeek/indicator.py:40 -#: ../syspeek/indicator.py:41 -msgid "of" -msgstr "" - -#: ../syspeek/indicator.py:40 -msgid "Swap" -msgstr "" - -#: ../syspeek/indicator.py:42 -msgid "Receiving" -msgstr "" - -#: ../syspeek/indicator.py:43 -msgid "Sending" -msgstr "" - -#: ../syspeek/indicator.py:44 -msgid "Total Received" -msgstr "" - -#: ../syspeek/indicator.py:45 -msgid "Total Sent" -msgstr "" - -#: ../syspeek/indicator.py:47 -msgid "Waiting for data" -msgstr "" - -#: ../syspeek/indicator.py:113 -msgid "System Monitor" -msgstr "" - -#: ../syspeek/indicator.py:189 ../syspeek/indicator.py:304 -msgid "Preferences" -msgstr "" - -#: ../syspeek/indicator.py:194 -msgid "About" -msgstr "" - -#: ../syspeek/indicator.py:199 -msgid "Quit" -msgstr "" diff -Nru syspeek-0.2~saucy/setup.py syspeek-0.3+bzr26/setup.py --- syspeek-0.2~saucy/setup.py 2013-07-30 16:41:22.000000000 +0000 +++ syspeek-0.3+bzr26/setup.py 2014-06-06 10:39:07.000000000 +0000 @@ -21,15 +21,17 @@ import shutil import DistUtilsExtra.auto +NAME='syspeek' + class Install(DistUtilsExtra.auto.install_auto): def run(self): - shutil.copy(os.path.join('data', 'syspeek.desktop.in'), 'syspeek.desktop') + shutil.copy(os.path.join('data', NAME+'.desktop.in'), NAME+'.desktop') DistUtilsExtra.auto.install_auto.run(self) - os.remove('syspeek.desktop') + os.remove(NAME+'.desktop') DistUtilsExtra.auto.setup( - name='syspeek', - version='0.2', + name=NAME, + version='0.3', license='GPL-3', author='Georg Schmidl', author_email='georg.schmidl@vicox.net', @@ -37,7 +39,8 @@ long_description='SysPeek is a system monitor indicator that displays CPU usage, memory usage, swap usage, disk usage and network traffic.', url='http://launchpad.net/syspeek', data_files=[ - ('/etc/xdg/autostart', ['syspeek.desktop',]), + ('/etc/xdg/autostart', [NAME+'.desktop',]), ], + package_data={NAME: ['ui/*.ui']}, cmdclass={'install': Install}, ) diff -Nru syspeek-0.2~saucy/syspeek/indicator.py syspeek-0.3+bzr26/syspeek/indicator.py --- syspeek-0.2~saucy/syspeek/indicator.py 2013-07-30 16:41:22.000000000 +0000 +++ syspeek-0.3+bzr26/syspeek/indicator.py 2014-06-06 10:39:07.000000000 +0000 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # # Copyright (C) 2011 Georg Schmidl # @@ -15,20 +16,25 @@ # along with this program. If not, see . # -import gtk -import gobject -import appindicator import os from gettext import gettext as _ -from UserDict import UserDict +from gi.repository import AppIndicator3 as appindicator +from gi.repository import Gtk as gtk +from gi.repository import GObject as gobject +from gi.repository import GLib import json import pkg_resources +try: + from UserDict import UserDict +except ImportError: + from collections import UserDict + from syspeek import * from syspeek.supplier import * from syspeek.helper import human_readable as _h -class SysPeekIndicator(appindicator.Indicator): +class SysPeekIndicator(): menu_items = {} suppliers = {} active_suppliers = [] @@ -44,11 +50,11 @@ LABEL_RECEIVED = _('Total Received') + ': {0}' LABEL_SENT = _('Total Sent') + ': {0}' - LABEL_WAITING = _('Waiting for data') + '...' + LABEL_WAITING = _('Waiting for data') + '…' def __init__(self): - appindicator.Indicator.__init__(self, NAME, NAME + '-0', - appindicator.CATEGORY_HARDWARE + self.indicator = appindicator.Indicator.new(NAME, NAME + '-0', + appindicator.IndicatorCategory.HARDWARE ) # in case app is running from local folder @@ -56,9 +62,9 @@ os.path.dirname(__file__), '../data/icons/22x22/status') ) if os.path.exists(icon_path): - self.set_icon_theme_path(icon_path) + self.indicator.set_icon_theme_path(icon_path) - self.set_status((appindicator.STATUS_ACTIVE)) + self.indicator.set_status((appindicator.IndicatorStatus.ACTIVE)) self.preferences = Preferences() self.preferences.load() @@ -80,45 +86,42 @@ if self.preferences['display_cpu_average'] or self.preferences['display_cpu_cores']: self.suppliers['cpu'].interval = self.preferences['update_interval_cpu'] - if not self.suppliers['cpu'].is_alive(): - self.suppliers['cpu'].start() + self.suppliers['cpu'].run() else: self.suppliers['cpu'].stop() - + if self.preferences['display_memory'] or self.preferences['display_swap']: self.suppliers['memswap'].interval = self.preferences['update_interval_memswap'] - if not self.suppliers['memswap'].is_alive(): - self.suppliers['memswap'].start() + self.suppliers['memswap'].run() else: self.suppliers['memswap'].stop() if self.preferences['display_disk'] and len(self.preferences['disks']) > 0: self.suppliers['disk'].interval = self.preferences['update_interval_disk'] self.suppliers['disk'].directories = self.preferences['disks'] - if not self.suppliers['disk'].is_alive(): - self.suppliers['disk'].start() + self.suppliers['disk'].run() else: self.suppliers['disk'].stop() if self.preferences['display_network_speed'] or self.preferences['display_network_total']: self.suppliers['network'].interval = self.preferences['update_interval_network'] - if not self.suppliers['network'].is_alive(): - self.suppliers['network'].start() + self.suppliers['network'].run() else: self.suppliers['network'].stop() def build_menu(self): menu = gtk.Menu() - system_monitor = gtk.MenuItem(_('System Monitor') + '...') + system_monitor = gtk.MenuItem(_('System Monitor') + '…') system_monitor.connect('activate', self.system_monitor) system_monitor.show() menu.append(system_monitor) + self.indicator.set_secondary_activate_target(system_monitor) system_monitor_separator = gtk.SeparatorMenuItem() menu.append(system_monitor_separator) system_monitor_separator.show() - + if self.preferences['display_cpu_average']: self.menu_items['cpu'] = gtk.MenuItem(self.LABEL_WAITING) menu.append(self.menu_items['cpu']) @@ -201,10 +204,10 @@ quit.show() menu.append(quit) - self.set_menu(menu) + self.indicator.set_menu(menu) def update_cpu(self, percentage): - self.set_icon(NAME + '-' + str(int(percentage / 10) * 10)) + self.indicator.set_icon(NAME + '-' + str(int(percentage / 10) * 10)) if self.preferences['display_cpu_average']: self.menu_items['cpu'].set_label( self.LABEL_CPU.format(percentage) @@ -259,8 +262,19 @@ ) def system_monitor(self, widget): - os.spawnlp(os.P_NOWAIT, 'gnome-system-monitor', 'gnome-system-monitor') - os.wait3(os.WNOHANG) + sysmonitors = ['gnome-system-monitor', 'ksysguard', 'htop'] + desktop = os.environ['XDG_CURRENT_DESKTOP'] + + if desktop == 'KDE' or len(desktop) == 0: + sysmonitors.remove('ksysguard') + sysmonitors.insert(0, 'ksysguard') + + for sysmonitor in sysmonitors: + try: + GLib.spawn_async([sysmonitor], flags=GLib.SpawnFlags.SEARCH_PATH) + break + except: + traceback.print_exc() def preferences_dialog(self, widget): preferences_dialog = PreferencesDialog(self) @@ -273,8 +287,9 @@ def about(self, widget): self.aboutdialog = gtk.AboutDialog() - self.aboutdialog.set_name(DISPLAY_NAME) + self.aboutdialog.set_program_name(DISPLAY_NAME) self.aboutdialog.set_version(VERSION) + self.aboutdialog.set_comments(COMMENTS) self.aboutdialog.set_copyright(COPYRIGHT) self.aboutdialog.set_website(WEBSITE) self.aboutdialog.set_authors(AUTHORS) @@ -299,8 +314,9 @@ def __init__(self, indicator): self.indicator = indicator self.builder = gtk.Builder() - self.builder.add_from_file(pkg_resources.resource_filename('syspeek.ui','PreferencesDialog.ui')) + self.builder.add_from_file(pkg_resources.resource_filename('syspeek','PreferencesDialog.ui')) self.dialog = self.builder.get_object('preferences_dialog') + self.disks = self.builder.get_object('liststore_disks') self.dialog.set_title(DISPLAY_NAME + ' ' + _('Preferences')) self.builder.connect_signals({ 'on_button_ok_clicked': self.ok, @@ -325,15 +341,77 @@ def cancel(self, widget): self.dialog.destroy() - def update_widgets(self): for preferences_key in self.indicator.preferences.keys(): self.update_widget(preferences_key) + self.update_disks_list() + + def update_disks_list(self): + for path, name in self.indicator.preferences['disks'].items(): + self.disks.append([name, path]) + + treeview_disks = self.builder.get_object('treeview_disks') + renderer = Gtk.CellRendererText() + renderer.set_property("editable", True) + renderer.connect("edited", self.on_disk_name_changed) + + column = Gtk.TreeViewColumn(_('Name'), renderer, text=0) + column.set_clickable(False) + treeview_disks.append_column(column) + + column = Gtk.TreeViewColumn(_('Path'), Gtk.CellRendererText(), text=1) + column.set_clickable(False) + treeview_disks.append_column(column) + + add_button = self.builder.get_object("add_disk") + add_button.connect("clicked", self.on_add_disk_button_clicked) + + rm_button = self.builder.get_object("rm_disk") + rm_button.connect("clicked", self.on_rm_disk_button_clicked) + + self.builder.get_object('display_disk').set_active(len(self.disks) != 0) + + def on_disk_name_changed(self, cell, widget_path, new_text): + iter = self.disks.get_iter(Gtk.TreePath.new_from_string(widget_path)) + self.disks.set_value(iter, 0, new_text) + + def on_add_disk_button_clicked(self, button): + file_chooser = Gtk.FileChooserDialog(_('Select Partition to Monitor'), + self.dialog, + Gtk.FileChooserAction.SELECT_FOLDER + ) + + file_chooser.add_button(_('_Cancel'), Gtk.ResponseType.CANCEL) + file_chooser.add_button(_('_Select'), Gtk.ResponseType.ACCEPT) + file_chooser.set_create_folders(False) + file_chooser.set_local_only(True) + + if file_chooser.run() == Gtk.ResponseType.ACCEPT: + path = file_chooser.get_filename() + name = os.path.basename(path) + self.disks.append([name if len(name) else _('Root'), path]) + self.builder.get_object('display_disk').set_active(len(self.disks) != 0) + + file_chooser.destroy() + + def on_rm_disk_button_clicked(self, button): + treeview_disks = self.builder.get_object('treeview_disks') + try: + (disks, item) = treeview_disks.get_selection().get_selected() + disks.remove(item) + self.builder.get_object('display_disk').set_active(len(disks) != 0) + except: + pass + def update_preferences(self): for preferences_key in self.indicator.preferences.keys(): self.update_preference(preferences_key) + self.indicator.preferences['disks'] = {} + for name, path in self.disks: + self.indicator.preferences['disks'][path] = name + def update_widget(self, preferences_key): self._update(preferences_key, self._update_widget) @@ -356,10 +434,11 @@ if widget is not None: method = getattr(widget, 'get' + widget_method) self.indicator.preferences[preferences_key] = method() - + class Preferences(UserDict): - FILENAME = os.path.join(os.getenv('HOME'), '.' + NAME, 'preferences.json') + FILENAME = os.path.join(GLib.get_user_config_dir(), NAME, 'preferences.json') + DEFAULT_PREFERENCES = { 'version': 1, 'update_interval_cpu': 1.0, @@ -374,7 +453,7 @@ 'display_network_total': False, 'display_disk': True, 'disks': { - '/home': _('Disk'), + GLib.get_home_dir(): _('Disk'), }, } @@ -391,6 +470,13 @@ if not os.path.exists(self.FILENAME): self.data = self.DEFAULT_PREFERENCES self.save() + + old_filename = os.path.join(GLib.get_user_config_dir(), '.' + NAME, os.path.basename(self.FILENAME)) + if os.path.exists(old_filename): + os.rename(old_filename, self.FILENAME) + os.removedirs(os.path.dirname(old_filename)) + self.load() + return try: @@ -398,7 +484,7 @@ self.data = json.loads(f.read()) f.close() except: - print "ERROR: Could not read preferences file. Loading default values." + print("ERROR: Could not read preferences file. Loading default values.") self.data = self.DEFAULT_PREFERENCES self.save() return @@ -420,13 +506,13 @@ for key in self.data: if (key in self.DEFAULT_PREFERENCES - and ((type(self.data[key]) is not type(self.DEFAULT_PREFERENCES[key])) or + and ((type(self.data[key]) is not type(self.DEFAULT_PREFERENCES[key])) or (key.startswith('update_interval_') and self.data[key] <= 0.0))): update = True - print "ERROR: Invalid value %s for key %s. Setting to default value %s" % \ - (self.data[key], key, self.DEFAULT_PREFERENCES[key]) + print("ERROR: Invalid value %s for key %s. Setting to default value %s" % \ + (self.data[key], key, self.DEFAULT_PREFERENCES[key])) self.data[key] = self.DEFAULT_PREFERENCES[key] - + if update: self.save() diff -Nru syspeek-0.2~saucy/syspeek/__init__.py syspeek-0.3+bzr26/syspeek/__init__.py --- syspeek-0.2~saucy/syspeek/__init__.py 2013-07-30 16:41:22.000000000 +0000 +++ syspeek-0.3+bzr26/syspeek/__init__.py 2014-06-06 10:39:07.000000000 +0000 @@ -17,13 +17,15 @@ NAME = 'syspeek' DISPLAY_NAME = 'SysPeek' -VERSION = '0.2' +COMMENTS = 'System Monitor Indicator' +VERSION = '0.3' LICENSE = 'GPL-3' COPYRIGHT = 'Copyright (C) 2011 Georg Schmidl' WEBSITE = 'https://launchpad.net/syspeek' AUTHORS = [ 'Georg Schmidl ', + 'Marco Trevisan ' ] LICENSE_TEXT = \ @@ -40,14 +42,13 @@ You should have received a copy of the GNU General Public License along with this program. If not, see .''' -import gtk +from gi.repository import Gtk from syspeek.indicator import * def main(): - gtk.gdk.threads_init() - gtk.gdk.threads_enter() + # Workaround to python gtk bug (#622084) causing Ctrl+C not to work + import signal + signal.signal(signal.SIGINT, signal.SIG_DFL) syspeek = SysPeekIndicator() - - gtk.main() - gtk.gdk.threads_leave() + Gtk.main() diff -Nru syspeek-0.2~saucy/syspeek/PreferencesDialog.ui syspeek-0.3+bzr26/syspeek/PreferencesDialog.ui --- syspeek-0.2~saucy/syspeek/PreferencesDialog.ui 1970-01-01 00:00:00.000000000 +0000 +++ syspeek-0.3+bzr26/syspeek/PreferencesDialog.ui 2014-06-06 10:39:07.000000000 +0000 @@ -0,0 +1,615 @@ + + + + + 0.25 + 3600 + 0.25 + 1 + + + 0.25 + 3600 + 0.25 + 1 + + + 0.25 + 3600 + 0.25 + 1 + + + 0.25 + 3600 + 0.25 + 1 + + + + + + + + + False + 12 + mouse + dialog + + + True + False + vertical + 2 + + + True + False + end + + + gtk-ok + False + True + True + True + True + + + + False + False + -1 + + + + + gtk-cancel + False + True + True + True + True + + + + False + False + 0 + + + + + gtk-apply + False + True + True + True + True + + + + False + False + 1 + + + + + False + True + end + 0 + + + + + True + True + + + True + False + 12 + vertical + 6 + + + True + False + 6 + + + True + False + Update every + + + False + True + 0 + + + + + True + True + + False + False + adjustment_update_interval_cpu + 2 + True + + + False + True + 1 + + + + + True + False + seconds + + + False + True + 2 + + + + + False + True + 0 + + + + + Display average CPU load + False + True + True + False + 0.5 + True + + + False + True + 1 + + + + + Display CPU load for each core + False + True + True + False + 0.5 + True + + + False + True + 2 + + + + + + + True + False + CPU + + + False + + + + + True + False + 12 + vertical + 6 + + + True + False + 6 + + + True + False + Update every + + + False + True + 0 + + + + + True + True + + False + False + adjustment_update_interval_memswap + 2 + True + + + False + True + 1 + + + + + True + False + seconds + + + False + True + 2 + + + + + False + True + 0 + + + + + Display memory usage + False + True + True + False + 0.5 + True + + + False + True + 1 + + + + + Display Swap usage + False + True + True + False + 0.5 + True + + + False + True + 2 + + + + + 1 + + + + + True + False + Memory + + + 1 + False + + + + + True + False + start + 12 + vertical + 6 + + + True + False + 6 + + + True + False + Update every + + + False + True + 0 + + + + + True + True + + False + False + adjustment_update_interval_disk + 2 + True + + + False + True + 1 + + + + + True + False + seconds + + + False + True + 2 + + + + + False + True + 0 + + + + + Display disk + False + True + True + False + 0.5 + True + + + True + True + 1 + + + + + True + False + 0 + Disks/Partitions: + + + False + True + 2 + + + + + 100 + True + True + in + + + True + True + liststore_disks + + + + + + + + True + True + 3 + + + + + True + False + 3 + end + + + gtk-add + True + True + True + True + + + False + True + 0 + + + + + gtk-delete + True + True + True + True + + + False + True + 1 + + + + + False + True + 4 + + + + + 2 + + + + + True + False + Disk + + + 2 + False + + + + + True + False + 12 + vertical + 6 + + + True + False + 6 + + + True + False + Update every + + + False + True + 0 + + + + + True + True + + False + False + adjustment_update_interval_network + 2 + True + + + False + True + 1 + + + + + True + False + seconds + + + False + True + 2 + + + + + False + True + 0 + + + + + Display network speed + False + True + True + False + 0.5 + True + + + False + True + 1 + + + + + Display total network traffic + False + True + True + False + 0.5 + True + + + False + True + 2 + + + + + 3 + + + + + True + False + Network + + + 3 + False + + + + + True + True + 1 + + + + + + button_ok + button_cancel + button_apply + + + diff -Nru syspeek-0.2~saucy/syspeek/supplier.py syspeek-0.3+bzr26/syspeek/supplier.py --- syspeek-0.2~saucy/syspeek/supplier.py 2013-07-30 16:41:22.000000000 +0000 +++ syspeek-0.3+bzr26/syspeek/supplier.py 2014-06-06 23:04:40.000000000 +0000 @@ -15,37 +15,66 @@ # along with this program. If not, see . # -import gobject import os -import threading -import time import traceback +from gi.repository import GLib from abc import ABCMeta, abstractmethod -class Supplier(threading.Thread): +class Supplier(): __metaclass__ = ABCMeta def __init__(self, display, interval=1): - threading.Thread.__init__(self) self.display = display - self.interval = interval - self._stop = threading.Event() - self.setDaemon(True) + self.__interval = interval + self.timeout = None + + def __start_timeout(self): + self.stop() + interval = int(self.interval * 1000) + glib240 = GLib.MAJOR_VERSION >= 2 and GLib.MINOR_VERSION >= 40 + + if glib240 and interval % 1000 == 0: + interval = interval / 1000 + self.timeout = GLib.timeout_source_new_seconds(interval) + else: + self.timeout = GLib.Timeout(interval) + + self.timeout.set_callback(self.__on_callback) + self.timeout.attach() + + def __on_callback(self, data = None): + try: + self.supply() + except: + traceback.print_exc() + return True def run(self): - self.running = True - while not self.stopped(): - try: - self.supply() - except: - traceback.print_exc() - time.sleep(self.interval) + if self.stopped(): + self.__start_timeout() + self.supply() def stop(self): - self._stop.set() + if self.timeout: + self.timeout.destroy() + self.timeout = None def stopped(self): - return self._stop.isSet() + return self.timeout == None or self.timeout.is_destroyed() + + @property + def interval(self): + return self.__interval; + + @interval.setter + def interval(self, val): + if self.__interval == val: + return + + self.__interval = val + + if not self.stopped(): + self.__start_timeout() @abstractmethod def supply(self): pass @@ -109,10 +138,10 @@ break if self.supply_average: - gobject.idle_add(self.display.update_cpu, percentages[0]) + self.display.update_cpu(percentages[0]) if self.supply_cores: - gobject.idle_add(self.display.update_cpu_cores, percentages[1:]) + self.display.update_cpu_cores(percentages[1:]) class MemSwapSupplier(Supplier): def supply(self): @@ -129,8 +158,8 @@ mem_used = meminfo['MemTotal'] - meminfo['MemFree'] - meminfo['Buffers'] - meminfo['Cached'] swap_used = meminfo['SwapTotal'] - meminfo['SwapFree'] - - gobject.idle_add(self.display.update_memswap, + + self.display.update_memswap( mem_used, meminfo['MemTotal'], swap_used, @@ -166,7 +195,7 @@ delta_receive = receive - self.last_receive delta_transmit = transmit - self.last_transmit - gobject.idle_add(self.display.update_network, + self.display.update_network( int(delta_receive / self.interval), int(delta_transmit / self.interval), receive, @@ -175,7 +204,6 @@ self.last_receive = receive self.last_transmit = transmit - def active_interface(self): f = open('/proc/net/route', 'r') @@ -201,7 +229,7 @@ values[directory]['total'] - (stat.f_bsize * stat.f_bfree) ) except: - print "ERROR: Could not get data for " + directory + print("ERROR: Could not get data for " + directory) - gobject.idle_add(self.display.update_disk, values) + self.display.update_disk(values) diff -Nru syspeek-0.2~saucy/syspeek/ui/PreferencesDialog.ui syspeek-0.3+bzr26/syspeek/ui/PreferencesDialog.ui --- syspeek-0.2~saucy/syspeek/ui/PreferencesDialog.ui 2013-07-30 16:41:22.000000000 +0000 +++ syspeek-0.3+bzr26/syspeek/ui/PreferencesDialog.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,566 +0,0 @@ - - - - - - 0.25 - 3600 - 0.25 - 1 - - - 0.25 - 3600 - 0.25 - 1 - - - 0.25 - 3600 - 0.25 - 1 - - - 0.25 - 3600 - 0.25 - 1 - - - - False - 12 - mouse - dialog - - - True - False - 2 - - - True - False - end - - - gtk-ok - True - True - True - False - True - - - - False - False - -1 - - - - - gtk-cancel - True - True - True - False - True - - - - False - False - 0 - - - - - gtk-apply - True - True - True - False - True - - - - False - False - 1 - - - - - False - True - end - 0 - - - - - True - True - - - True - False - 12 - 6 - - - True - False - 6 - - - True - False - Update every - - - False - True - 0 - - - - - True - True - - False - False - True - True - adjustment_update_interval_cpu - 2 - True - - - False - True - 1 - - - - - True - False - seconds - - - False - True - 2 - - - - - False - True - 0 - - - - - Display average CPU load - True - True - False - False - True - - - False - True - 1 - - - - - Display CPU load for each core - True - True - False - False - True - - - False - True - 2 - - - - - - - True - False - CPU - - - False - - - - - True - False - 12 - 6 - - - True - False - 6 - - - True - False - Update every - - - False - True - 0 - - - - - True - True - - True - False - False - True - True - adjustment_update_interval_memswap - 2 - True - - - False - True - 1 - - - - - True - False - seconds - - - False - True - 2 - - - - - False - True - 0 - - - - - Display memory usage - True - True - False - False - True - - - False - True - 1 - - - - - Display Swap usage - True - True - False - False - True - - - False - True - 2 - - - - - 1 - - - - - True - False - Memory - - - 1 - False - - - - - True - False - 12 - 6 - - - True - False - 6 - - - True - False - Update every - - - False - True - 0 - - - - - True - True - - True - False - False - True - True - adjustment_update_interval_disk - 2 - True - - - False - True - 1 - - - - - True - False - seconds - - - False - True - 2 - - - - - False - True - 0 - - - - - Display disk - True - True - False - False - True - - - True - True - 1 - - - - - True - False - 0 - Disks/Partitions: - - - False - True - 2 - - - - - True - True - automatic - automatic - in - - - True - True - liststore_disk - - - - - True - True - 3 - - - - - 2 - - - - - True - False - Disk - - - 2 - False - - - - - True - False - 12 - 6 - - - True - False - 6 - - - True - False - Update every - - - False - True - 0 - - - - - True - True - - True - False - False - True - True - adjustment_update_interval_network - 2 - True - - - False - True - 1 - - - - - True - False - seconds - - - False - True - 2 - - - - - False - True - 0 - - - - - Display network speed - True - True - False - False - True - - - False - True - 1 - - - - - Display total network traffic - True - True - False - False - True - - - False - True - 2 - - - - - 3 - - - - - True - False - Network - - - 3 - False - - - - - True - True - 1 - - - - - - button_cancel - button_apply - button_ok - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-0.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-0.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-0.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-0.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-100.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-100.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-100.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-100.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-10.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-10.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-10.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-10.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-20.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-20.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-20.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-20.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-30.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-30.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-30.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-30.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-40.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-40.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-40.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-40.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-50.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-50.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-50.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-50.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-60.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-60.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-60.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-60.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-70.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-70.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-70.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-70.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-80.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-80.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-80.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-80.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-90.svg syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-90.svg --- syspeek-0.2~saucy/ubuntu-mono-dark/status/22/syspeek-90.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-dark/status/22/syspeek-90.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-0.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-0.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-0.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-0.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-100.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-100.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-100.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-100.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-10.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-10.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-10.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-10.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-20.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-20.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-20.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-20.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-30.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-30.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-30.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-30.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-40.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-40.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-40.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-40.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-50.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-50.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-50.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-50.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-60.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-60.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-60.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-60.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-70.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-70.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-70.svg 2013-07-30 16:52:30.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-70.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-80.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-80.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-80.svg 2013-07-30 16:52:31.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-80.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff -Nru syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-90.svg syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-90.svg --- syspeek-0.2~saucy/ubuntu-mono-light/status/22/syspeek-90.svg 2013-07-30 16:52:31.000000000 +0000 +++ syspeek-0.3+bzr26/ubuntu-mono-light/status/22/syspeek-90.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - -