From afd3a817af2ab6307cfa021df3b79843f5d9c74f Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Fri, 3 Aug 2012 18:32:15 -0700 Subject: [PATCH] add beets Tomahawk resolver to extra/ directory I'm not sure why this was a separate repository to begin with. It's now versioned with beets. --- extra/beets-resolver/README.md | 14 ++++++++ extra/beets-resolver/beets.js | 63 ++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 extra/beets-resolver/README.md create mode 100644 extra/beets-resolver/beets.js 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;