summaryrefslogtreecommitdiffstats
path: root/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'main.js')
-rw-r--r--main.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..3e27b6e
--- /dev/null
+++ b/main.js
@@ -0,0 +1,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);