diff --git a/extra/beets-resolver/README.md b/extra/beets-resolver/README.md new file mode 100644 index 000000000..4683bd2b9 --- /dev/null +++ b/extra/beets-resolver/README.md @@ -0,0 +1,14 @@ +beets Tomahawk resolver +======================= + +This is a script resolver for [Tomahawk][tomahawk player] that hooks into +[beets][beets music manager]. It uses [beets' web plugin][] to access your +beets library remotely. + +To use it, just start ``beet web``, load this resolver, and start playing +music. Change the hostname and port at the top of the file if the server isn't +running on localhost (I'll make a real UI for this eventually). + +[beets' web plugin]: http://beets.readthedocs.org/en/latest/plugins/web.html +[beets music manager]: http://beets.radbox.org/ +[tomahawk player]: http://tomahawk-player.org/ diff --git a/extra/beets-resolver/beets.js b/extra/beets-resolver/beets.js new file mode 100644 index 000000000..c188158b5 --- /dev/null +++ b/extra/beets-resolver/beets.js @@ -0,0 +1,63 @@ +var BEETS_HOST = 'localhost'; +var BEETS_PORT = 8337; + +var BeetsResolver = Tomahawk.extend(TomahawkResolver, +{ + settings: + { + name: 'beets', + weight: 95, + timeout: 5 + }, + resolve: function( qid, artist, album, title ) + { + this.beetsQuery(qid, + ['artist:' + artist, 'album:' + album, 'title:' + title] + ); + }, + search: function( qid, searchString ) + { + this.beetsQuery(qid, searchString.split(' ')); + }, + beetsQuery: function( qid, queryParts ) + { + var url = 'http://' + BEETS_HOST + ':' + BEETS_PORT + '/item/query/'; + for (var i = 0; i < queryParts.length; ++i) { + url += encodeURIComponent(queryParts[i]); + url += '/'; + } + url = url.substring(0, url.length - 1); // Remove last /. + + Tomahawk.asyncRequest(url, function(xhr) { + var resp = JSON.parse(xhr.responseText); + var items = resp['results']; + + var searchResults = []; + for (var i = 0; i < items.length; ++i) { + item = items[i]; + searchResults.push({ + artist: item['artist'], + album: item['album'], + track: item['title'], + albumpos: item['track'], + source: "beets", + url: "http://" + BEETS_HOST + ':' + BEETS_PORT + '/item/' + item['id'] + '/file', + bitrate: Math.floor(item['bitrate'] / 1024), + duration: Math.floor(item['length']), + size: 83375, //! + score: 1.0, + extension: "mp3", //! + mimetype: "audio/mpeg", //! + year: item['year'] + }); + } + + Tomahawk.addTrackResults({ + qid: qid, + results: searchResults + }) + }); + } +}); + +Tomahawk.resolver.instance = BeetsResolver;