summaryrefslogtreecommitdiff
path: root/scripts/python/amarok.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/python/amarok.py')
-rw-r--r--scripts/python/amarok.py231
1 files changed, 0 insertions, 231 deletions
diff --git a/scripts/python/amarok.py b/scripts/python/amarok.py
deleted file mode 100644
index 79827185b..000000000
--- a/scripts/python/amarok.py
+++ /dev/null
@@ -1,231 +0,0 @@
-#
-# Copyright (c) 2006 by Eric Gach <eric.gach@gmail.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 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 St, Fifth Floor, Boston, MA 02110-1301 USA
-#
-
-import weechat
-import os
-import subprocess
-import traceback
-
-__desc__ = 'Amarok control and now playing script for Weechat.'
-__version__ = '1.0.2'
-__author__ = 'Eric Gach <eric.gach@gmail.com>'
-# With changes by Leonid Evdokimov (weechat at darkk dot net another dot ru):
-# http://darkk.net.ru/weechat/amarok.py
-# v 1.0.1 - added %year%
-# v 1.0.2 - fixed bug with dead zombie-childs
-# fixed bug when loading second instance of the script
-# added better default for dcop_user setting
-
-dcop = {}
-debug = {}
-infobar = {}
-output = {}
-ssh = {}
-
-class amarokException(Exception):
- pass
-
-def amarokCommand(server, args):
- try:
- args = args.split(' ')
- if args[0] == 'infobar':
- if infobar['enabled']:
- infobar['enabled'] = False
- weechat.set_plugin_config('infobar_enabled', '0')
- weechat.remove_timer_handler('amarokInfobarUpdate')
- weechat.remove_infobar(0)
- weechat.prnt('Infobar disabled')
- else:
- infobar['enabled'] = True
- weechat.set_plugin_config('infobar_enabled', '1')
- amarokInfobarUpdate()
- weechat.add_timer_handler(infobar['update'], 'amarokInfobarUpdate')
- weechat.prnt('Infobar enabled')
- return weechat.PLUGIN_RC_OK
- elif args[0] == 'next':
- __executeCommand('next')
- weechat.prnt('Amarok: Playing next song.')
- return weechat.PLUGIN_RC_OK
- elif args[0] == 'np':
- return amarokNowPlaying(server)
- elif args[0] == 'pause':
- __executeCommand('pause')
- weechat.prnt('Amarok: Song paused.')
- return weechat.PLUGIN_RC_OK
- elif args[0] == 'play':
- __executeCommand('play')
- weechat.prnt('Amarok: Started playing.')
- return weechat.PLUGIN_RC_OK
- elif args[0] == 'prev':
- __executeCommand('prev')
- weechat.prnt('Amarok: Playing previous song.')
- return weechat.PLUGIN_RC_OK
- elif args[0] == 'stop':
- __executeCommand('stop')
- weechat.prnt('Amarok: Stop playing.')
- return weechat.PLUGIN_RC_OK
- elif args[0] == '':
- return amarokDisplayHelp(server)
- else:
- weechat.prnt('Amarok: Unknown command %s' % (args[0]), '', server)
- return weechat.PLUGIN_RC_OK
- except amarokException, ex:
- return weechat.PLUGIN_RC_KO
- except:
- file = open(debug['file'], 'w')
- traceback.print_exc(None, file)
- weechat.prnt('Unknown Exception encountered. Stack dumped to %s' % (debug['file']), '', server)
- return weechat.PLUGIN_RC_KO
-
-def amarokDisplayHelp(server):
- weechat.prnt('%s - Version: %s' % (__desc__, __version__), '', server)
- weechat.prnt('Author: %s' % (__author__), '', server)
- weechat.prnt('', '', server)
- weechat.prnt('Commands Available', '', server)
- weechat.prnt(' /amarok next - Move to the next song in the playlist.', '', server)
- weechat.prnt(' /amarok np - Display currently playing song.', '', server)
- weechat.prnt(' /amarok play - Start playing music.', '', server)
- weechat.prnt(' /amarok pause - Toggle between pause/playing.', '', server)
- weechat.prnt(' /amarok prev - Move to the previous song in the playlist.', '', server)
- weechat.prnt(' /amarok stop - Stop playing music.', '', server)
- weechat.prnt(' /amarok infobar - Toggle the infobar display.', '', server)
- weechat.prnt('', '', server)
- weechat.prnt('Formatting', '', server)
- weechat.prnt(' %artist% - Replaced with the song artist.', '', server)
- weechat.prnt(' %title% - Replaced with the song title.', '', server)
- weechat.prnt(' %album% - Replaced with the song album.', '', server)
- weechat.prnt(' %year% - Replaced with the song year tag.', '', server)
- weechat.prnt(' %cTime% - Replaced with how long the song has been playing.', '', server)
- weechat.prnt(' %tTime% - Replaced with the length of the song.', '', server)
- weechat.prnt(' %bitrate% - Replaced with the bitrate of the song.', '', server)
- return weechat.PLUGIN_RC_OK
-
-def amarokInfobarUpdate():
- __loadSettings()
- if infobar['enabled'] == False:
- return weechat.PLUGIN_RC_OK
-
- isPlaying = __executeCommands((__dcopCommand('isPlaying'),))
- if isPlaying.strip() == 'false':
- weechat.print_infobar(infobar['update'], 'Amarok is not currently playing')
- return weechat.PLUGIN_RC_OK
- else:
- song = __getSongInfo()
- format = __formatNP(infobar['format'], song)
- weechat.print_infobar(infobar['update'], format)
- return weechat.PLUGIN_RC_OK
-
-
-def amarokNowPlaying(server):
- __loadSettings()
- isPlaying = __executeCommands((__dcopCommand('isPlaying'),))
- if isPlaying.strip() == 'false':
- weechat.prnt('Amarok is not playing.', '', server)
- return weechat.PLUGIN_RC_KO
- else:
- song = __getSongInfo()
- format = __formatNP(output['format'], song)
- weechat.command(format)
- return weechat.PLUGIN_RC_OK
-
-def amarokUnload():
- """Unload the plugin from weechat"""
- if infobar['enabled']:
- weechat.remove_infobar(0)
- weechat.remove_timer_handler('amarokInfobarUpdate')
- return weechat.PLUGIN_RC_OK
-
-def __formatNP(template, song):
- np = template.replace('%artist%', song['artist'])
- np = np.replace('%title%', song['title'])
- np = np.replace('%album%', song['album'])
- np = np.replace('%cTime%', song['cTime'])
- np = np.replace('%tTime%', song['tTime'])
- np = np.replace('%bitrate%', song['bitrate'])
- np = np.replace('%year%', song['year'])
- return np
-
-def __dcopCommand(cmd):
- if dcop['user'] == ':':
- return 'dcop amarok player %s' % (cmd)
- else:
- return 'dcop --user %s amarok player %s' % (dcop['user'], cmd)
-
-def __executeCommands(cmds):
- from subprocess import PIPE
- cmds = " && ".join(cmds)
- if ssh['enabled']:
- cmds = 'ssh -p %d %s@%s "%s"' % (ssh['port'], ssh['user'], ssh['host'], cmds)
- proc = subprocess.Popen(cmds, shell = True, stderr = PIPE, stdout = PIPE, close_fds = True)
- error = proc.stderr.read()
- if error != '':
- weechat.prnt(error)
- output = proc.stdout.read()
- proc.wait()
- return output
-
-def __getSongInfo():
- """Get the song information from amarok"""
- song = {}
- songs = __executeCommands(
- (
- __dcopCommand('artist'),
- __dcopCommand('title'),
- __dcopCommand('album'),
- __dcopCommand('currentTime'),
- __dcopCommand('totalTime'),
- __dcopCommand('bitrate'),
- __dcopCommand('year')
- )
- )
-
- song['artist'], song['title'], song['album'], song['cTime'], song['tTime'], song['bitrate'], song['year'], empty = songs.split("\n")
- return song
-
-def __loadSettings():
- dcop['user'] = __loadSetting('dcop_user', ':')
- debug['file'] = os.path.expanduser(__loadSetting('debug_file', '~/amarok_debug.txt'))
- infobar['enabled'] = __loadSetting('infobar_enabled', '0', 'bool')
- infobar['format'] = __loadSetting('infobar_format', 'Now Playing: %title% by %artist%')
- infobar['update'] = __loadSetting('infobar_update', '10', 'int')
- output['format'] = __loadSetting('output_format', '/me is listening to %C04%title%%C by %C03%artist%%C from %C12%album%%C [%cTime% of %tTime% @ %bitrate%kbps]')
- ssh['enabled'] = __loadSetting('ssh_enabled', '0', 'bool')
- ssh['host'] = __loadSetting('ssh_host', 'localhost')
- ssh['port'] = __loadSetting('ssh_port', '22', 'int')
- ssh['user'] = __loadSetting('ssh_user', 'user')
-
-def __loadSetting(setting, default=None, type=None):
- value = weechat.get_plugin_config(setting)
- if value == '' and default != None:
- weechat.set_plugin_config(setting, default)
- value = default
-
- if type == 'int' or type == 'bool':
- value = int(value)
- if type == 'bool':
- value = bool(value)
-
- return value
-
-if weechat.register('amarok', __version__, 'amarokUnload', __desc__):
- __loadSettings()
- if infobar['enabled']:
- amarokInfobarUpdate()
- weechat.add_timer_handler(infobar['update'], 'amarokInfobarUpdate')
- weechat.add_command_handler('amarok', 'amarokCommand', 'Manage amarok or display now playing information.', 'next|np|play|pause|prev|stop|infobar')
-