From 4a841766e88ed50c6cde772548e04b993ba62113 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Wed, 6 Nov 2013 01:33:21 +0400 Subject: [PATCH] Release 1.5.0 + added music player support + added copyright * edited README --- PKGBUILD | 15 ++- README | 36 ------ README.md | 89 ++++++++++++++ TODO | 6 - ext-sysmon-1.3.zip | Bin 0 -> 4291 bytes .../py-text-monitor-1.4.0.plasmoid | Bin py-text-monitor-1.5.0.plasmoid | Bin 0 -> 21692 bytes sources/contents/code/config.py | 16 +++ sources/contents/code/configdef.py | 26 +++- sources/contents/code/configwindow.py | 29 ++++- sources/contents/code/dataengine.py | 42 ++++++- sources/contents/code/main.py | 22 +++- .../code/plasma_applet_pytextmonitor.notifyrc | 5 + sources/contents/code/ptmnotify.py | 47 ++++++++ sources/contents/code/reinit.py | 30 +++++ sources/contents/code/util.py | 16 +++ sources/contents/ui/configwindow.ui | 114 ++++++++++++++++-- sources/metadata.desktop | 2 +- 18 files changed, 426 insertions(+), 69 deletions(-) delete mode 100644 README create mode 100644 README.md delete mode 100644 TODO create mode 100644 ext-sysmon-1.3.zip rename py-text-monitor-1.4.0.plasmoid => old_versions/py-text-monitor-1.4.0.plasmoid (100%) create mode 100644 py-text-monitor-1.5.0.plasmoid diff --git a/PKGBUILD b/PKGBUILD index 76cdd69..468ef20 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -3,24 +3,27 @@ pkgname=kdeplasma-applets-pytextmonitor _pkgname=py-text-monitor -pkgver=1.4.0 +pkgver=1.5.0 pkgrel=1 _dtengine=ext-sysmon -_dtver=1.2 +_dtver=1.3 pkgdesc="Minimalistic Plasmoid script written on Python2. It looks like widgets in awesome-wm" arch=('i686' 'x86_64') url="https://github.com/arcan1s/pytextmonitor" license=('GPL') -depends=('kdebase-workspace' 'kdebindings-python2' 'lm_sensors' 'net-tools') +depends=('kdebase-workspace' 'kdebindings-python2' 'lm_sensors' 'net-tools' 'sysstat') optdepends=("hddtemp: for HDD temperature monitor" "catalyst: for GPU monitor" - "nvidia-utils: for GPU monitor") + "nvidia-utils: for GPU monitor" + "amarok: for music player monitor" + "mpd: for music player monitor" + "qmmp: for music player monitor") makedepends=('automoc4' 'cmake') source=(https://github.com/arcan1s/pytextmonitor/releases/download/V.${pkgver}/${_pkgname}-${pkgver}.plasmoid https://github.com/arcan1s/pytextmonitor/releases/download/V.${pkgver}/${_dtengine}-${_dtver}.zip) install=${pkgname}.install -md5sums=('67f3e3b55992048bd519867a9e94da37' - '3182acdadb3b498be929b3cadad92206') +md5sums=('df8e9f6df8e7b3caee3a502315756d81' + 'f7fce53d5f616891b30beac1afd99728') build () { diff --git a/README b/README deleted file mode 100644 index 8b99435..0000000 --- a/README +++ /dev/null @@ -1,36 +0,0 @@ -py-text-monitor -============= - -PyTextMonitor is a minimalistic Plasmoid script written on Python2. It looks like widgets in awesome-wm. - -HOWTO -For edited output you must open Settings window and setup output format in lines: - label "$uptime" means uptime, ---d--h--m - label "$cpu" means total load cpu, % - label "$ccpu" means load CPU for each core, % - label "$cpucl" - average cpu clock, MHz - label "$ccpucl" - cpu clock for each core, MHz - label "$temp" - average temperature in system - label "$gpu" - GPU usage, %. `aticonfig` or `nvidia-smi` must be installed - label "$gputemp" - GPU temperature. `aticonfig` or `nvidia-smi` must be installed - label "$mem" - usage memory, % - label "$memmb" - usage memory, MB - label "$swap" - swap, % - label "$swapmb" - swap, MB - label "@@/@@" (in hdd label) - mount point ('/' in example) usage, %. Separator for mount points list is ';', for example "@@/;/home;/mnt/global@@". `hddtemp` must be installed - label "@@/dev/sda@@" (in hddtemp label) - HDD ('/dev/sda' in example) temperature - label "$net" - download and upload speed, KB/s. You may specify network device: something like @@eth0@@ - label "$netdev" - current network device - label "$bat" - battery charge, %. Battery device may be set below. File ("/sys/class/power_supply/BAT0/capacity" by default) must contain only battery charge in percent - label "$ac" - status AC device. Return (*) if AC device is online or ( ) if offline. AC device may be set below. FIle ("/sys/class/power_supply/AC/online" by default) must contain '1' if AC is online - -Label order will changed if you change slider position. HTML tags in label work normally. -Attention: you don't may set to show $cpu in swap label for example. $cpu will work only in cpu label. - - -Dependencies: - kdebindings-python2 - - ext-sysmon (for GPU, GPU temp and HDD temp labels) - lm_sensors (for definition temperature device) - net-tools (for definition network device) diff --git a/README.md b/README.md new file mode 100644 index 0000000..bcb305b --- /dev/null +++ b/README.md @@ -0,0 +1,89 @@ +py-text-monitor +============= + +Information +----------- +PyTextMonitor is a minimalistic Plasmoid script written on Python2. It looks like widgets in awesome-wm. + +Configuration +------------- +For edited output you must open Settings window and setup output format in lines: +* label "$uptime" means uptime, ---d--h--m +* label "$cpu" means total load cpu, % +* label "$ccpu" means load CPU for each core, % +* label "$cpucl" - average cpu clock, MHz +* label "$ccpucl" - cpu clock for each core, MHz +* label "$temp" - average temperature in system +* label "$gpu" - GPU usage, %. `aticonfig` or `nvidia-smi` must be installed +* label "$gputemp" - GPU temperature. `aticonfig` or `nvidia-smi` must be installed +* label "$mem" - usage memory, % +* label "$memmb" - usage memory, MB +* label "$swap" - swap, % +* label "$swapmb" - swap, MB +* label "@@/@@" (in hdd label) - mount point ('/' in example) usage, %. Separator for mount points list is ';', for example "@@/;/home;/mnt/global@@". `hddtemp` must be installed +* label "@@/dev/sda@@" (in hddtemp label) - HDD ('/dev/sda' in example) temperature +* label "$net" - download and upload speed, KB/s. You may specify network device: something like @@eth0@@ +* label "$netdev" - current network device +* label "$bat" - battery charge, %. Battery device may be set below. File ("/sys/class/power_supply/BAT0/capacity" by default) must contain only battery charge in percent +* label "$ac" - status AC device. Return (*) if AC device is online or ( ) if offline. AC device may be set below. FIle ("/sys/class/power_supply/AC/online" by default) must contain '1' if AC is online +* label "$artist" - current song artist. One of supported music players must be installed +* label "$title" - current song title. One of supported music players must be installed + +Label order will changed if you change slider position. HTML tags in label work normally. +**NOTE** you don't may set to show $cpu in swap label for example. $cpu will work only in cpu label. + +TODO (wish) list +---------------- +* Tooltip (graphical information): +* * cpu, % +* * cpuclock, mhz +* * memory, % +* * swap, % +* * network, % + +Instruction +=========== + +Dependencies +------------ +* kdebase-workspace +* kdebindings-python2 +* lm_sensors (for definition temperature device) +* net-tools (for definition network device) +* sysstat (for notification) + +Optional dependencies +--------------------- +* ext-sysmon (for GPU, GPU temp, HDD temp and player labels) +* * proprietary video driver +* * hddtemp +* * music player (amarok, mpd or qmmp) + +Make dependencies +----------------- +* automoc4 +* cmake + +Installation +------------ +* download sources +* install dataengine + mkdir build && cd build + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`kde4-config --localprefix` ../ + make && make install +Also you may install it to "/": + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ../ + make && sudo make install +* install plasmoid + plasmapkg -i py-text-monitor-1.5.0.plasmoid +Also you may install it to "/" too: + plasmapkg -g -i py-text-monitor-1.5.0.plasmoid + +Additional information +====================== + +Links +----- +* Plasmoid on [kde-look](http://kde-look.org/content/show.php/Py+Text+Monitor?content=157124) +* DataEngine on [kde-look](http://kde-look.org/content/show.php/Extended+Systemmonitor+DataEngine?content=158773) +* Archlinux [AUR](https://aur.archlinux.org/packages/kdeplasma-applets-pytextmonitor/) package diff --git a/TODO b/TODO deleted file mode 100644 index f46f42f..0000000 --- a/TODO +++ /dev/null @@ -1,6 +0,0 @@ -1. Tooltip (graphical information): - a) cpu, % - b) cpuclock, mhz - c) memory, % - d) swap, % - e) network, % diff --git a/ext-sysmon-1.3.zip b/ext-sysmon-1.3.zip new file mode 100644 index 0000000000000000000000000000000000000000..403e0f05915d8e1b1a62c660eea7ead2ba233d79 GIT binary patch literal 4291 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 literal 0 HcmV?d00001 diff --git a/sources/contents/code/config.py b/sources/contents/code/config.py index b2a2912..03ccc26 100644 --- a/sources/contents/code/config.py +++ b/sources/contents/code/config.py @@ -1,5 +1,21 @@ # -*- coding: utf-8 -*- +# Copyright 2012 Alex Oleshkevich +# +# 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 2 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + from util import * diff --git a/sources/contents/code/configdef.py b/sources/contents/code/configdef.py index fef6d46..e8d8caa 100644 --- a/sources/contents/code/configdef.py +++ b/sources/contents/code/configdef.py @@ -1,5 +1,21 @@ # -*- coding: utf-8 -*- +# Copyright 2013 Evgeniy Alekseev +# +# 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 2 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + from PyQt4.QtGui import * from PyKDE4.kdecore import * from PyKDE4.kdeui import * @@ -117,8 +133,11 @@ class ConfigDefinition: if (self.parent.batBool > 0): self.parent.label_bat.setText('') self.parent.layout.removeItem(self.parent.label_bat) + if (self.parent.playerBool > 0): + self.parent.label_player.setText('') + self.parent.layout.removeItem(self.parent.label_player) - self.parent.label_order = "------------" + self.parent.label_order = "-------------" for label in self.parent.dict_orders.keys(): exec ('self.parent.' + self.parent.dict_orders[label] + 'Bool = ' + str(self.configpage.checkboxes[self.parent.dict_orders[label]].checkState())) @@ -140,6 +159,9 @@ class ConfigDefinition: elif (self.parent.dict_orders[label] == 'temp'): self.parent.tempdev = str(self.configpage.ui.comboBox_temp.currentText()) settings.set('temp_device', self.parent.tempdev) + elif (self.parent.dict_orders[label] == 'player'): + self.parent.player_name = self.configpage.ui.comboBox_player.currentIndex() + settings.set('player_name', self.parent.player_name) self.parent.label_order = ''.join(self.parent.label_order.split('-')) settings.set('label_order', self.parent.label_order) @@ -186,6 +208,8 @@ class ConfigDefinition: self.configpage.ui.comboBox_temp.addItem(tempdev) except: pass + elif (self.parent.dict_orders[label] == 'player'): + self.configpage.ui.comboBox_player.setCurrentIndex(int(settings.get('player_name', 0))) # add config page page = parent.addPage(self.configpage, i18n(self.parent.name())) diff --git a/sources/contents/code/configwindow.py b/sources/contents/code/configwindow.py index e218dec..15e36d6 100644 --- a/sources/contents/code/configwindow.py +++ b/sources/contents/code/configwindow.py @@ -1,5 +1,21 @@ # -*- coding: utf-8 -*- +# Copyright 2013 Evgeniy Alekseev +# +# 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 2 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + from PyQt4.QtCore import * from PyQt4.QtGui import * from PyKDE4.plasma import * @@ -19,19 +35,22 @@ class ConfigWindow(QWidget): 'gputemp':self.ui.checkBox_gpuTemp, 'hdd':self.ui.checkBox_hdd, 'hddtemp':self.ui.checkBox_hddTemp, 'mem':self.ui.checkBox_mem, 'net':self.ui.checkBox_net, 'swap':self.ui.checkBox_swap, - 'temp':self.ui.checkBox_temp, 'uptime':self.ui.checkBox_uptime} + 'temp':self.ui.checkBox_temp, 'uptime':self.ui.checkBox_uptime, + 'player':self.ui.checkBox_player} self.sliders = {'bat':self.ui.slider_bat, 'cpu':self.ui.slider_cpu, 'cpuclock':self.ui.slider_cpuclock, 'gpu':self.ui.slider_gpu, 'gputemp':self.ui.slider_gpuTemp, 'hdd':self.ui.slider_hdd, 'hddtemp':self.ui.slider_hddTemp, 'mem':self.ui.slider_mem, 'net':self.ui.slider_net, 'swap':self.ui.slider_swap, - 'temp':self.ui.slider_temp, 'uptime':self.ui.slider_uptime} + 'temp':self.ui.slider_temp, 'uptime':self.ui.slider_uptime, + 'player':self.ui.slider_player} self.lineedits = {'bat':self.ui.lineEdit_bat, 'cpu':self.ui.lineEdit_cpu, 'cpuclock':self.ui.lineEdit_cpuclock, 'gpu':self.ui.lineEdit_gpu, 'gputemp':self.ui.lineEdit_gpuTemp, 'hdd':self.ui.lineEdit_hdd, 'hddtemp':self.ui.lineEdit_hddTemp, 'mem':self.ui.lineEdit_mem, 'net':self.ui.lineEdit_net, 'swap':self.ui.lineEdit_swap, - 'temp':self.ui.lineEdit_temp, 'uptime':self.ui.lineEdit_uptime} + 'temp':self.ui.lineEdit_temp, 'uptime':self.ui.lineEdit_uptime, + 'player':self.ui.lineEdit_player} for item in self.checkboxes.values(): QObject.connect(item, SIGNAL("stateChanged(int)"), self.setStatus) @@ -51,6 +70,8 @@ class ConfigWindow(QWidget): self.ui.lineEdit_batdev.setEnabled(True) elif (label == 'temp'): self.ui.comboBox_temp.setEnabled(True) + elif (label == 'player'): + self.ui.comboBox_player.setEnabled(True) slider_label = 0 for slider in self.sliders.values(): if (slider.isEnabled() == True): @@ -69,6 +90,8 @@ class ConfigWindow(QWidget): self.ui.lineEdit_batdev.setDisabled(True) elif (label == 'temp'): self.ui.comboBox_temp.setDisabled(True) + elif (label == 'player'): + self.ui.comboBox_player.setDisabled(True) for slider in self.sliders.values(): if ((slider.value() == slider.maximum()) and (slider != self.sliders[label])): slider.setValue(self.sliders[label].value()) diff --git a/sources/contents/code/dataengine.py b/sources/contents/code/dataengine.py index b4b4669..8f5e924 100644 --- a/sources/contents/code/dataengine.py +++ b/sources/contents/code/dataengine.py @@ -1,5 +1,21 @@ # -*- coding: utf-8 -*- +# Copyright 2013 Evgeniy Alekseev +# +# 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 2 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + from PyQt4.QtCore import * from PyQt4.QtGui import * from PyKDE4.plasma import Plasma @@ -16,7 +32,7 @@ class DataEngine: def connectToEngine(self): """function to initializate engine""" self.parent.systemmonitor = self.parent.dataEngine("systemmonitor") - if ((self.parent.gputempBool > 0) or (self.parent.gpuBool > 0) or (self.parent.hddtempBool > 0)): + if ((self.parent.gputempBool > 0) or (self.parent.gpuBool > 0) or (self.parent.hddtempBool > 0) or (self.parent.playerBool > 0)): self.parent.extsysmon = self.parent.dataEngine("ext-sysmon") if (self.parent.uptimeBool > 0): @@ -59,6 +75,8 @@ class DataEngine: self.parent.updateNetdev = 0 self.parent.systemmonitor.connectSource("network/interfaces/"+self.parent.netdev+"/transmitter/data", self.parent, self.parent.interval) self.parent.systemmonitor.connectSource("network/interfaces/"+self.parent.netdev+"/receiver/data", self.parent, self.parent.interval) + if (self.parent.playerBool > 0): + self.parent.extsysmon.connectSource("player", self.parent, self.parent.interval) def dataUpdated(self, sourceName, data): """function to update data""" @@ -231,6 +249,28 @@ class DataEngine: line = self.parent.hddtempFormat text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1] self.parent.label_hddtemp.setText(text) + elif (sourceName == "player"): + if (self.parent.player_name == 0): + title = str(data[QString(u'amarok_title')]) + artist = str(data[QString(u'amarok_artist')]) + elif (self.parent.player_name == 1): + title = str(data[QString(u'mpd_title')]) + artist = str(data[QString(u'mpd_artist')]) + elif (self.parent.player_name == 2): + title = str(data[QString(u'qmmp_title')]) + artist = str(data[QString(u'qmmp_artist')]) + if (self.parent.playerFormat.split('$artist')[0] != self.parent.playerFormat): + if ((len(artist) + len(title)) > 10): + line = self.parent.playerFormat.split('$artist')[0] + artist[:5] + u"…" + self.parent.playerFormat.split('$artist')[1] + else: + line = self.parent.playerFormat.split('$artist')[0] + artist + self.parent.playerFormat.split('$artist')[1] + else: + line = self.parent.playerFormat + if (line.split('$title') != line): + line = line.split('$title')[0] + title + line.split('$title')[1] + text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1] + self.parent.label_player.setText(text) + self.parent.update() except: diff --git a/sources/contents/code/main.py b/sources/contents/code/main.py index b7333d6..f5a2b8e 100644 --- a/sources/contents/code/main.py +++ b/sources/contents/code/main.py @@ -1,5 +1,21 @@ # -*- coding: utf-8 -*- +# Copyright 2013 Evgeniy Alekseev +# +# 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 2 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + from PyQt4.QtCore import * from PyQt4.QtGui import * from PyKDE4.kdecore import * @@ -103,13 +119,15 @@ class pyTextWidget(plasmascript.Applet): # create dictionaries self.dict_orders = {'6':'bat', '1':'cpu', '7':'cpuclock', '9':'gpu', 'a':'gputemp', - 'b':'hdd', 'c':'hddtemp', '3':'mem', '5':'net', '4':'swap', '2':'temp', '8':'uptime'} + 'b':'hdd', 'c':'hddtemp', '3':'mem', '5':'net', '4':'swap', '2':'temp', '8':'uptime', + 'd':'player'} self.dict_defFormat = {'bat':'[bat: $bat%$ac]', 'cpu':'[cpu: $cpu%]', 'cpuclock':'[mhz: $cpucl]', 'gpu':'[gpu: $gpu%]', 'gputemp':'[gpu temp: $gputemp°C]', 'hdd':'[hdd: @@/@@%]', 'hddtemp':'[hdd temp: @@/dev/sda@@°C]', 'mem':'[mem: $mem%]', 'net':'[$netdev: $netKB/s]', 'swap':'[swap: $swap%]', - 'temp':'[temp: $temp°C]', 'uptime':'[uptime: $uptime]'} + 'temp':'[temp: $temp°C]', 'uptime':'[uptime: $uptime]', + 'player':'[$artist - $title]'} def showConfigurationInterface(self): """function to show configuration window""" diff --git a/sources/contents/code/plasma_applet_pytextmonitor.notifyrc b/sources/contents/code/plasma_applet_pytextmonitor.notifyrc index a6530d8..f62ff3a 100644 --- a/sources/contents/code/plasma_applet_pytextmonitor.notifyrc +++ b/sources/contents/code/plasma_applet_pytextmonitor.notifyrc @@ -42,3 +42,8 @@ Action=Popup Name=Graphical Information Comment=Graphical Information Action=Popup + +[Event/musicplayer] +Name=Now playing +Comment=Now playing +Action=Popup diff --git a/sources/contents/code/ptmnotify.py b/sources/contents/code/ptmnotify.py index 991a199..ba980c7 100644 --- a/sources/contents/code/ptmnotify.py +++ b/sources/contents/code/ptmnotify.py @@ -1,5 +1,21 @@ # -*- coding: utf-8 -*- +# Copyright 2013 Evgeniy Alekseev +# +# 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 2 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + from PyKDE4.kdecore import KComponentData from PyKDE4.kdeui import KNotification import commands @@ -132,6 +148,31 @@ class PTMNotify: text = text + "%s" %(commands.getoutput("acpi -abi")) except: text = "Something wrong" + elif (type == "musicplayer"): + try: + artist = "N\\A" + album = "N\\A" + title = "N\\A" + if (self.parent.parent.player_name == 0): + artist = commands.getoutput("qdbus org.kde.amarok /Player GetMetadata 2> /dev/null | grep albumartist: | cut -c14-") + album = commands.getoutput("qdbus org.kde.amarok /Player GetMetadata 2> /dev/null | grep album: | cut -c8-") + title = commands.getoutput("qdbus org.kde.amarok /Player GetMetadata 2> /dev/null | grep title: | cut -c8-") + elif (self.parent.parent.player_name == 1): + output = commands.getoutput("echo 'currentsong\nclose' | curl --connect-timeout 1 -fsm 3 telnet://localhost:6600 2> /dev/null") + for line in output.split("\n"): + if (line.split(": ")[0] == "Artist"): + artist = line.split(": ")[1] + elif (line.split(": ")[0] == "Album"): + album = line.split(": ")[1] + elif (line.split(": ")[0] == "Title"): + title = line.split(": ")[1] + elif (self.parent.parent.player_name == 2): + artist = commands.getoutput("qmmp --nowplaying '%if(%p,%p,Unknown)' 2> /dev/null") + album = commands.getoutput("qmmp --nowplaying '%if(%a,%a,Unknown)' 2> /dev/null") + title = commands.getoutput("qmmp --nowplaying '%if(%t,%t,Unknown)' 2> /dev/null") + text = text + "Artist: %s\nAlbum: %s\nTitle: %s" %(artist, album, title) + except: + text = "Something wrong" content = [type, text] return content @@ -211,3 +252,9 @@ class PTMNotify: return content except: pass + try: + if (sender == self.parent.parent.label_player): + content = self.createText("musicplayer") + return content + except: + pass diff --git a/sources/contents/code/reinit.py b/sources/contents/code/reinit.py index 49bf25c..83aee8c 100644 --- a/sources/contents/code/reinit.py +++ b/sources/contents/code/reinit.py @@ -1,5 +1,21 @@ # -*- coding: utf-8 -*- +# Copyright 2013 Evgeniy Alekseev +# +# 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 2 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + from PyQt4.QtCore import * from PyQt4.QtGui import * from PyKDE4.plasma import Plasma @@ -277,6 +293,20 @@ class Reinit(): text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1] self.parent.label_hddtemp.setText(text) self.parent.layout.addItem(self.parent.label_hddtemp) + elif (order == "d"): + if (self.parent.playerBool > 0): + self.parent.playerFormat = str(settings.get('playerFormat', '[$artist - $title]')) + self.parent.player_name = settings.get('player_name', 0).toInt()[0] + self.parent.label_player = NewPlasmaLabel(self.parent.applet, self.parent) + if (self.parent.playerFormat.split('$artist')[0] != self.parent.playerFormat): + line = self.parent.playerFormat.split('$artist')[0] + '----------' + self.parent.playerFormat.split('$artist')[1] + else: + line = self.parent.playerFormat + if (line.split('$title') != line): + line = line.split('$title')[0] + '----------' + line.split('$title')[1] + text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1] + self.parent.label_player.setText(text) + self.parent.layout.addItem(self.parent.label_player) if not confAccept: self.parent.applet.setLayout(self.parent.layout) self.parent.theme = Plasma.Svg(self.parent) diff --git a/sources/contents/code/util.py b/sources/contents/code/util.py index c2ac27c..015af14 100644 --- a/sources/contents/code/util.py +++ b/sources/contents/code/util.py @@ -1,5 +1,21 @@ # -*- coding: utf-8 -*- +# Copyright 2012 Alex Oleshkevich +# +# 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 2 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + from shutil import copyfile from PyKDE4.kdecore import * import os diff --git a/sources/contents/ui/configwindow.ui b/sources/contents/ui/configwindow.ui index 968161b..62c6973 100644 --- a/sources/contents/ui/configwindow.ui +++ b/sources/contents/ui/configwindow.ui @@ -7,7 +7,7 @@ 0 0 575 - 500 + 530 @@ -82,7 +82,7 @@ 1 - 12 + 13 1 @@ -138,7 +138,7 @@ $ccpu - load CPU for each core, % 1 - 12 + 13 1 @@ -197,7 +197,7 @@ $ccpucl - CPU clock for each core, MHz 1 - 12 + 13 1 @@ -268,7 +268,7 @@ $ccpucl - CPU clock for each core, MHz 1 - 12 + 13 1 @@ -326,7 +326,7 @@ $ccpucl - CPU clock for each core, MHz 1 - 12 + 13 1 @@ -384,7 +384,7 @@ $ccpucl - CPU clock for each core, MHz 1 - 12 + 13 1 @@ -443,7 +443,7 @@ $memmb - RAM usage, MB 1 - 12 + 13 1 @@ -502,7 +502,7 @@ $swapmb - swap usage, MB 1 - 12 + 13 1 @@ -560,7 +560,7 @@ $swapmb - swap usage, MB 1 - 12 + 13 1 @@ -618,7 +618,7 @@ $swapmb - swap usage, MB 1 - 12 + 13 1 @@ -678,7 +678,7 @@ $netdev - current network device 1 - 12 + 13 1 @@ -737,7 +737,7 @@ $ac - AC status 1 - 12 + 13 1 @@ -841,6 +841,90 @@ $ac - AC status + + + + + + + 120 + 0 + + + + Music player + + + true + + + + + + + + 100 + 0 + + + + + amarok + + + + + mpd + + + + + qmmp + + + + + + + + $title - song title +$artist - song artist + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 120 + 16777215 + + + + 1 + + + 13 + + + 1 + + + 13 + + + Qt::Horizontal + + + QSlider::TicksAbove + + + + + @@ -1223,6 +1307,10 @@ $ac - AC status slider_bat lineEdit_batdev lineEdit_acdev + checkBox_player + comboBox_player + lineEdit_player + slider_player spinBox_interval fontComboBox spinBox_fontSize diff --git a/sources/metadata.desktop b/sources/metadata.desktop index 6b64ef9..6af43e4 100644 --- a/sources/metadata.desktop +++ b/sources/metadata.desktop @@ -12,7 +12,7 @@ X-Plasma-RequiredExtensions=LaunchApp,LocalIO,FileDialog X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis X-KDE-PluginInfo-Email=esalexeev@gmail.com X-KDE-PluginInfo-Name=py-text-monitor -X-KDE-PluginInfo-Version=1.4.0 +X-KDE-PluginInfo-Version=1.5.0 X-KDE-PluginInfo-Website=http://kde-look.org/ X-KDE-PluginInfo-Category=System Information X-KDE-PluginInfo-Depends=