forked from Erenzie/hexchat-banshee-script
-
Benachrichtigungen
You must be signed in to change notification settings - Fork 0
/
banshee_script.py
85 lines (69 loc) · 2.43 KB
/
banshee_script.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# shamelessly stolen from dom96's Exaile script
import xchat, dbus, os
__module_name__ = "Banshee"
__module_version__ = "1.0.1"
__module_description__ = "Banshee now playing script with some other cool features"
bus = dbus.SessionBus()
def getSongInfo():
try:
banshee = bus.get_object("org.bansheeproject.Banshee", "/org/bansheeproject/Banshee/PlayerEngine")
if banshee.GetCurrentState() == "playing":
npDict = banshee.GetCurrentTrack()
title = npDict['name'].encode('utf8')
try:
album = npDict['album'].encode('utf8')
except KeyError:
album = "Unknown Album".encode('utf8')
artist = npDict['artist'].encode('utf8')
secs = int(banshee.GetPosition() / 1000)
if secs > 0:
pos = '%d:%02d' % (float(secs) / 60, float(secs) % 60)
else:
pos = "0:00"
length = int(npDict['length'])
if length > 0:
length = '%d:%02d' % (float(length) / 60, float(length) % 60)
else:
length = "0:00"
return (artist, title, album, pos, length)
else:
return 0
except dbus.exceptions.DBusException:
return 1
def printSong(word, word_eol, userdata):
songInfo = getSongInfo()
if songInfo == 0:
xchat.prnt("Banshee is not playing")
elif songInfo == 1:
xchat.prnt("Banshee is not running")
else:
if not userdata:
xchat.command("me is listening to %s - %s [%s] (%s/%s)" % songInfo)
else:
xchat.command("me is listening to \x0303%s\x03 - \x0303%s\x03 [\x0303%s\x03] (\x0305%s\x03/\x0305%s\x03)" % songInfo)
return xchat.EAT_ALL
def chooseSong(word, word_eol, next):
if next:
if os.system("banshee-1 --next") == 0:
xchat.prnt("Song changed")
else:
xchat.prnt("Song changing failed")
else:
if os.system("banshee-1 --prev") == 0:
xchat.prnt("Song changed")
else:
xchat.prnt("Song changing failed")
def playPause(word, word_eol, ud):
try:
b = bus.get_object("org.bansheeproject.Banshee", "/org/bansheeproject/Banshee/PlayerEngine")
b.TogglePlaying()
xchat.prnt("Pause/play")
except dbus.exceptions.DBusException:
xchat.prnt("Pause/play failed")
xchat.prnt("Banshee script initialized")
xchat.prnt("Use /np to announce the currently played song")
xchat.hook_command("np", printSong, False)
xchat.hook_command("npc", printSong, True)
xchat.hook_command("bnext", chooseSong, True)
xchat.hook_command("bprev", chooseSong, False)
xchat.hook_command("pause", playPause)