This repository has been archived by the owner on May 1, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathlastfm.js
123 lines (95 loc) · 2.65 KB
/
lastfm.js
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
const {BrowserWindow, ipcMain} = require('electron')
var http = require('http')
var url = require('url')
var LastFmApi = require('lastfmapi')
const settings = require('electron-settings')
var lfm = new LastFmApi({
api_key: "5d7acf24194765ce3944d02f9fa58fc3",
secret: "15fcf7b5578ede4ed6ab9180ca72f3c5"
});
var sessionData;
exports.api = lfm;
var server;
var lfmWindow;
var mainWindow;
var port = 4567;
var host = 'http://127.0.0.1';
var connect_url = () => host + ':' + port + '/auth';
exports.startServer = function(cb) {
if (server) return;
port++ // we don't want to fail if we did not stop previous server
server = http.createServer(function (req, res) {
var pathname = url.parse(req.url).pathname;
if (pathname === '/auth') {
var token = url.parse(req.url, true).query.token;
exports.stopServer();
cb(token);
}
res.writeHead(200, { 'Content-Type' : 'text/html' });
res.end('');
});
server.listen(port);
}
exports.stopServer = function() {
if (!server) return;
server.close();
server = null;
};
exports.init = function(mainWnd) {
mainWindow = mainWnd;
sessionData = settings.get('lastfm');
if (sessionData) {
lfm.setSessionCredentials(sessionData.username, sessionData.key);
}
return null;
}
exports.nowPlaying = function(track) {
if (!exports.isAuthorized()) return;
lfm.track.updateNowPlaying(track, function(...args) {
console.log("last.fm updateNowPlaying response:", args);
}) // we don't care about response
}
exports.scrobble = function(track) {
if (!exports.isAuthorized()) return;
lfm.track.scrobble([ track ]);
}
exports.isAuthorized = function() {
return !!sessionData;
}
exports.authorize = function(cb) {
if (lfmWindow) {
lfmWindow.focus();
return;
}
lfmWindow = new BrowserWindow({
width: 600,
height: 600,
parent: mainWindow,
modal: true,
})
lfmWindow.setMenu(null);
exports.startServer(function(token) {
exports.stopServer();
lfmWindow.destroy();
lfmWindow = null;
lfm.authenticate(token, function (err, session) {
if (err) { throw err; }
sessionData = session;
settings.set('lastfm', session);
cb();
});
});
lfmWindow.on('close', function(e){
lfmWindow = null;
exports.stopServer();
});
var url = lfm.getAuthenticationUrl({
cb: connect_url()
});
lfmWindow.loadURL(url);
}
exports.disconnect = function(cb) {
settings.sef('lastfm', null);
sessionData = null;
cb();
}