diff options
author | 2009-05-02 01:14:31 -0400 | |
---|---|---|
committer | 2009-05-02 01:14:31 -0400 | |
commit | 62b8074a3692107274ea9a56e1cea8ed8f476ccb (patch) | |
tree | b1deba8140082b1bebbcba31fc547c058fff6e44 /main.js | |
download | PidginSong-master.tar.xz PidginSong-master.zip |
Diffstat (limited to 'main.js')
-rw-r--r-- | main.js | 81 |
1 files changed, 81 insertions, 0 deletions
@@ -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); |