2017-08-29 09:19:28 +03:00
|
|
|
import std.stdio;
|
|
|
|
import std.net.curl;
|
2017-08-29 09:27:24 +03:00
|
|
|
import std.datetime;
|
|
|
|
import std.typecons;
|
|
|
|
import std.algorithm.searching : startsWith;
|
|
|
|
import std.conv : to;
|
|
|
|
import std.file;
|
|
|
|
import core.thread;
|
2017-08-29 09:19:28 +03:00
|
|
|
import aimpremote;
|
2017-08-29 09:27:24 +03:00
|
|
|
import variantconfig;
|
2017-08-29 09:19:28 +03:00
|
|
|
|
2017-08-29 09:27:24 +03:00
|
|
|
shared string login;
|
|
|
|
shared string token;
|
|
|
|
shared int update_time;
|
2017-08-29 09:19:28 +03:00
|
|
|
|
2017-08-29 09:27:24 +03:00
|
|
|
bool readConfig() {
|
|
|
|
if (!exists("config.properties")) {
|
|
|
|
writeln("Unable to open config.properties file");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
auto config = VariantConfig("config.properties");
|
|
|
|
login = config["login"].toStr;
|
|
|
|
if (login.length == 0) {
|
|
|
|
writeln("Unable to find login");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
token = config["token"].toStr;
|
|
|
|
if (token.length == 0) {
|
|
|
|
writeln("Unable to find token");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
update_time = config["update_time"].toInt;
|
|
|
|
if (update_time <= 0) {
|
|
|
|
update_time = 2;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void process() {
|
|
|
|
final switch (getPlayerState()) {
|
|
|
|
case PlayerState.Off:
|
|
|
|
case PlayerState.Stopped:
|
|
|
|
case PlayerState.Paused:
|
|
|
|
Thread.sleep(dur!"seconds"(10));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PlayerState.Playing:
|
|
|
|
auto track = getInfo();
|
|
|
|
if (!track.isNull) {
|
|
|
|
auto time = Clock.currTime();
|
|
|
|
writefln("[%02d:%02d] %s - %s",
|
|
|
|
time.hour, time.minute,
|
|
|
|
track.artist, track.title);
|
|
|
|
sendTrackInfo(track);
|
|
|
|
}
|
|
|
|
Thread.sleep(dur!"minutes"(update_time));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sendTrackInfo(Nullable!TrackInfo track) {
|
2017-08-29 09:19:28 +03:00
|
|
|
auto http = HTTP();
|
|
|
|
// http.caInfo("cacert.pem");
|
|
|
|
http.handle.set(CurlOption.ssl_verifypeer, 0);
|
|
|
|
|
|
|
|
auto content = post("https://annimon.com/json/nowplay", [
|
2017-08-29 09:27:24 +03:00
|
|
|
"login" : login,
|
|
|
|
"token" : token,
|
2017-08-29 09:19:28 +03:00
|
|
|
"artist" : to!string(track.artist),
|
|
|
|
"title" : to!string(track.title),
|
|
|
|
"genre" : to!string(track.genre)
|
|
|
|
], http);
|
2017-08-29 09:27:24 +03:00
|
|
|
if (content.startsWith("{\"error")) {
|
|
|
|
writeln(content);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
writeln("Starting aNMusic");
|
|
|
|
if (!readConfig()) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
new Thread({
|
|
|
|
while (true) {
|
|
|
|
process();
|
|
|
|
}
|
|
|
|
}).start();
|
|
|
|
return 0;
|
2017-08-29 09:19:28 +03:00
|
|
|
}
|