summaryrefslogtreecommitdiffstats
path: root/main.js
blob: 3e27b6e2145d6e304b896589e04226a0e89895d4 (plain) (blame)
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);