mirror of
https://github.com/rembo10/headphones.git
synced 2026-07-19 23:44:01 +01:00
Added getUpcoming, getWanted, getSimilar, getHistory, addArtist, delArtist, pauseArtist, resumeArtist, refreshArtist, queueAlbum, unqueueAlbum
This commit is contained in:
+31
-5
@@ -5,10 +5,36 @@ http://localhost:8181 + HTTP_ROOT + /api?apikey=$apikey&cmd=$command
|
|||||||
Data returned in json format
|
Data returned in json format
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
&getIndex (fetch data from index page. Returns: ArtistName, ArtistSortName, ArtistID, Status, DateAdded,
|
getIndex (fetch data from index page. Returns: ArtistName, ArtistSortName, ArtistID, Status, DateAdded,
|
||||||
[LatestAlbum, ReleaseDate, AlbumID], HaveTracks, TotalTracks,
|
[LatestAlbum, ReleaseDate, AlbumID], HaveTracks, TotalTracks,
|
||||||
IncludeExtras)
|
IncludeExtras)
|
||||||
&getArtist&id=$artistid (fetch artist data. returns the artist object (see above) and album info: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type)
|
|
||||||
&getAlbum&id=$albumid (fetch data from album page. Returns the album object, a description object and a tracks object. Tracks contain: AlbumASIN, AlbumTitle, TrackID, Format, TrackDuration (ms), ArtistName, TrackTitle, AlbumID, ArtistID, Location, TrackNumber, CleanName (stripped of punctuation /styling), BitRate)
|
getArtist&id=$artistid (fetch artist data. returns the artist object (see above) and album info: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type)
|
||||||
&findArtist&name=$artistname[&limit=$limit] (perform artist query on musicbrainz. Returns: url, score, name, uniquename (contains disambiguation info), id)
|
|
||||||
&findAlbum&name=$albumname[&limit=$limit] (perform album query on musicbrainz. Returns: title, url (artist), id (artist), albumurl, albumid, score, uniquename (artist - with disambiguation)
|
getAlbum&id=$albumid (fetch data from album page. Returns the album object, a description object and a tracks object. Tracks contain: AlbumASIN, AlbumTitle, TrackID, Format, TrackDuration (ms), ArtistName, TrackTitle, AlbumID, ArtistID, Location, TrackNumber, CleanName (stripped of punctuation /styling), BitRate)
|
||||||
|
|
||||||
|
getUpcoming (Returns: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type)
|
||||||
|
|
||||||
|
getWanted (Returns: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type)
|
||||||
|
|
||||||
|
getSimilar (Returns similar artists with a higher "Count" being more likely to be similar. Returns: Count, ArtistName, ArtistID)
|
||||||
|
|
||||||
|
getHistory (Returns: Status, DateAdded, Title, URL (nzb), FolderName, AlbumID, Size (bytes))
|
||||||
|
|
||||||
|
getLogs (not working yet)
|
||||||
|
|
||||||
|
findArtist&name=$artistname[&limit=$limit] (perform artist query on musicbrainz. Returns: url, score, name, uniquename (contains disambiguation info), id)
|
||||||
|
|
||||||
|
findAlbum&name=$albumname[&limit=$limit] (perform album query on musicbrainz. Returns: title, url (artist), id (artist), albumurl, albumid, score, uniquename (artist - with disambiguation)
|
||||||
|
|
||||||
|
addArtist&id=$artistid (add an artist to the db by artistid)
|
||||||
|
|
||||||
|
delArtist&id=$artistid (delete artist from db by artistid)
|
||||||
|
|
||||||
|
pauseArtist&id=$artistid (pause an artist in db)
|
||||||
|
resumeArtist&id=$artistid (resume an artist in db)
|
||||||
|
|
||||||
|
refreshArtist&id=$artistid (refresh info for artist in db from musicbrainz)
|
||||||
|
|
||||||
|
queueAlbum&id=$albumid[&new=True&lossless=True] (Mark an album as wanted and start the searcher. Optional paramters: 'new' looks for new versions, 'lossless' looks only for lossless versions)
|
||||||
|
unqueueAlbum&id=$albumid (Unmark album as wanted / i.e. mark as skipped)
|
||||||
|
|||||||
+130
-4
@@ -1,12 +1,13 @@
|
|||||||
import headphones
|
import headphones
|
||||||
|
|
||||||
from headphones import db, mb, logger
|
from headphones import db, mb, importer, searcher, logger
|
||||||
|
|
||||||
import lib.simplejson as simplejson
|
import lib.simplejson as simplejson
|
||||||
from xml.dom.minidom import Document
|
from xml.dom.minidom import Document
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
cmd_list = [ 'getIndex', 'getArtist', 'getAlbum', 'findArtist', 'findAlbum']
|
cmd_list = [ 'getIndex', 'getArtist', 'getAlbum', 'getUpcoming', 'getWanted', 'getSimilar', 'getHistory', 'getLogs',
|
||||||
|
'findArtist', 'findAlbum', 'addArtist', 'delArtist', 'pauseArtist', 'resumeArtist', 'refreshArtist']
|
||||||
|
|
||||||
class Api(object):
|
class Api(object):
|
||||||
|
|
||||||
@@ -61,7 +62,10 @@ class Api(object):
|
|||||||
methodToCall = getattr(self, "_" + self.cmd)
|
methodToCall = getattr(self, "_" + self.cmd)
|
||||||
result = methodToCall(**self.kwargs)
|
result = methodToCall(**self.kwargs)
|
||||||
|
|
||||||
return simplejson.dumps(self.data)
|
if type(self.data) == type(''):
|
||||||
|
return self.data
|
||||||
|
else:
|
||||||
|
return simplejson.dumps(self.data)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return self.data
|
return self.data
|
||||||
@@ -114,6 +118,25 @@ class Api(object):
|
|||||||
self.data = { 'album' : album, 'tracks' : tracks, 'description' : description }
|
self.data = { 'album' : album, 'tracks' : tracks, 'description' : description }
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def _getHistory(self):
|
||||||
|
self.data = self._dic_from_query('SELECT * from snatched order by DateAdded DESC')
|
||||||
|
return
|
||||||
|
|
||||||
|
def _getUpcoming(self):
|
||||||
|
self.data = self._dic_from_query("SELECT * from albums WHERE ReleaseDate > date('now') order by ReleaseDate DESC")
|
||||||
|
return
|
||||||
|
|
||||||
|
def _getWanted(self):
|
||||||
|
self.data = self._dic_from_query("SELECT * from albums WHERE Status='Wanted'")
|
||||||
|
return
|
||||||
|
|
||||||
|
def _getSimilar(self):
|
||||||
|
self.data = self._dic_from_query('SELECT * from lastfmcloud')
|
||||||
|
return
|
||||||
|
|
||||||
|
def _getLogs(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def _findArtist(self, **kwargs):
|
def _findArtist(self, **kwargs):
|
||||||
if 'name' not in kwargs:
|
if 'name' not in kwargs:
|
||||||
@@ -136,4 +159,107 @@ class Api(object):
|
|||||||
limit=50
|
limit=50
|
||||||
|
|
||||||
self.data = mb.findRelease(kwargs['name'], limit)
|
self.data = mb.findRelease(kwargs['name'], limit)
|
||||||
|
|
||||||
|
def _addArtist(self, **kwargs):
|
||||||
|
if 'id' not in kwargs:
|
||||||
|
self.data = 'Missing parameter: id'
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.id = kwargs['id']
|
||||||
|
|
||||||
|
try:
|
||||||
|
importer.addArtisttoDB(self.id)
|
||||||
|
except Exception, e:
|
||||||
|
self.data = e
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
def _delArtist(self, **kwargs):
|
||||||
|
if 'id' not in kwargs:
|
||||||
|
self.data = 'Missing parameter: id'
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.id = kwargs['id']
|
||||||
|
|
||||||
|
myDB = db.DBConnection()
|
||||||
|
myDB.action('DELETE from artists WHERE ArtistID="' + self.id + '"')
|
||||||
|
myDB.action('DELETE from albums WHERE ArtistID="' + self.id + '"')
|
||||||
|
myDB.action('DELETE from tracks WHERE ArtistID="' + self.id + '"')
|
||||||
|
|
||||||
|
def _pauseArtist(self, **kwargs):
|
||||||
|
if 'id' not in kwargs:
|
||||||
|
self.data = 'Missing parameter: id'
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.id = kwargs['id']
|
||||||
|
|
||||||
|
myDB = db.DBConnection()
|
||||||
|
controlValueDict = {'ArtistID': ArtistID}
|
||||||
|
newValueDict = {'Status': 'Paused'}
|
||||||
|
myDB.upsert("artists", newValueDict, controlValueDict)
|
||||||
|
|
||||||
|
def _resumeArtist(self, **kwargs):
|
||||||
|
if 'id' not in kwargs:
|
||||||
|
self.data = 'Missing parameter: id'
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.id = kwargs['id']
|
||||||
|
|
||||||
|
myDB = db.DBConnection()
|
||||||
|
controlValueDict = {'ArtistID': ArtistID}
|
||||||
|
newValueDict = {'Status': 'Active'}
|
||||||
|
myDB.upsert("artists", newValueDict, controlValueDict)
|
||||||
|
|
||||||
|
def _refreshArtist(self, **kwargs):
|
||||||
|
if 'id' not in kwargs:
|
||||||
|
self.data = 'Missing parameter: id'
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.id = kwargs['id']
|
||||||
|
|
||||||
|
try:
|
||||||
|
importer.addArtisttoDB(self.id)
|
||||||
|
except Exception, e:
|
||||||
|
self.data = e
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
def _queueAlbum(self, **kwargs):
|
||||||
|
|
||||||
|
if 'id' not in kwargs:
|
||||||
|
self.data = 'Missing parameter: id'
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.id = kwargs['id']
|
||||||
|
|
||||||
|
if 'new' in kwargs:
|
||||||
|
new = kwargs['new']
|
||||||
|
else:
|
||||||
|
new = False
|
||||||
|
|
||||||
|
if 'lossless' in kwargs:
|
||||||
|
lossless = kwargs['lossless']
|
||||||
|
else:
|
||||||
|
lossless = False
|
||||||
|
|
||||||
|
myDB = db.DBConnection()
|
||||||
|
controlValueDict = {'AlbumID': self.id}
|
||||||
|
if lossless:
|
||||||
|
newValueDict = {'Status': 'Wanted Lossless'}
|
||||||
|
else:
|
||||||
|
newValueDict = {'Status': 'Wanted'}
|
||||||
|
myDB.upsert("albums", newValueDict, controlValueDict)
|
||||||
|
searcher.searchforalbum(AlbumID, new)
|
||||||
|
|
||||||
|
def _unqueueAlbum(self, **kwargs):
|
||||||
|
|
||||||
|
if 'id' not in kwargs:
|
||||||
|
self.data = 'Missing parameter: id'
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.id = kwargs['id']
|
||||||
|
|
||||||
|
myDB = db.DBConnection()
|
||||||
|
controlValueDict = {'AlbumID': self.id}
|
||||||
|
newValueDict = {'Status': 'Skipped'}
|
||||||
|
myDB.upsert("albums", newValueDict, controlValueDict)
|
||||||
Reference in New Issue
Block a user