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
|
/*
Copyright (C) 2009 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
*/
Importer.loadQtBinding("qt.core");
function modifyAllInfos(addition)
{
var accounts = getAccounts();
for(var i = 0; i < accounts.length; i++)
{
setInfo(accounts[i], modifyInfo(getInfo(accounts[i]), addition));
}
}
function modifyInfo(info, addition)
{
var line = "<br><br>Currently Playing: ";
var index = info.indexOf(line);
if(index != -1)
{
info = info.substring(0, index);
}
return info.replace("\n", "") + line + addition;
}
function getInfo(account)
{
return executeCommand("purple-remote", ["PurpleAccountGetUserInfo(" + account + ")"]);
}
function setInfo(account, info)
{
info = "string:" + info;
executeCommand("purple-send", ["PurpleAccountSetUserInfo", "int32:" + account, info]);
executeCommand("purple-send", ["ServSetInfo", "int32:" + executeCommand("purple-remote", ["PurpleAccountGetConnection(" + account + ")"]), info]);
}
function getAccounts()
{
var commandOutput = executeCommand("purple-remote", ["PurpleAccountsGetAllActive()"]);
var pattern = /Int32\((\d+)\)/g;
var match;
var accounts = new Array();
while((match = pattern.exec(commandOutput)) != null)
{
accounts.push(match[1]);
}
return accounts;
}
function executeCommand(command, args)
{
var process = new QProcess();
process.start(command, args);
if(process.waitForFinished())
{
return new QTextStream(process).readAll();
}
return false;
}
function onTrackPlayPause(paused)
{
if(paused)
{
onTrackFinished();
}
else
{
onTrackChange();
}
}
function onTrackChange()
{
var currentTrack = Amarok.Engine.currentTrack();
modifyAllInfos(currentTrack.artist + " - " + currentTrack.title);
}
function onTrackFinished()
{
modifyAllInfos("(none)");
}
Amarok.Engine.trackPlayPause.connect(onTrackPlayPause);
Amarok.Engine.trackChanged.connect(onTrackChange);
Amarok.Engine.trackFinished.connect(onTrackFinished);
|