diff --git a/data/interfaces/default/css/style.css b/data/interfaces/default/css/style.css index acdcc96f..54a2bc7c 100644 --- a/data/interfaces/default/css/style.css +++ b/data/interfaces/default/css/style.css @@ -1297,6 +1297,7 @@ div#artistheader h2 a { clear: both; } #album_table th#albumname, +#album_table th#artistname, #upcoming_table th#artistname, #wanted_table th#artistname { min-width: 150px; @@ -1319,6 +1320,7 @@ div#artistheader h2 a { vertical-align: middle; } #album_table td#albumname, +#album_table td#artistname, #album_table td#reldate, #album_table td#type, #track_table td#duration, diff --git a/data/interfaces/default/manage.html b/data/interfaces/default/manage.html index 3b13794a..ed62e445 100644 --- a/data/interfaces/default/manage.html +++ b/data/interfaces/default/manage.html @@ -6,6 +6,7 @@ <%def name="headerIncludes()">
+ Manage Albums Manage Artists %if not headphones.ADD_ARTISTS: Manage New Artists @@ -101,4 +102,4 @@ initThisPage(); }); - \ No newline at end of file + diff --git a/data/interfaces/default/managealbums.html b/data/interfaces/default/managealbums.html new file mode 100644 index 00000000..a30dde6a --- /dev/null +++ b/data/interfaces/default/managealbums.html @@ -0,0 +1,148 @@ +<%inherit file="base.html" /> +<%! + from headphones import db + import headphones +%> + +<%def name="headerIncludes()"> +
+   +
+ « Back to manage overview + + + +<%def name="body()"> +
+
+

manageManage Albums

+
+
+
Mark selected albums as + + +
+ + + + + + + + + + + + + + + + %for album in albums: + <% + if album['Status'] == 'Skipped': + grade = 'Z' + elif album['Status'] == 'Wanted': + grade = 'X' + elif album['Status'] == 'Snatched': + grade = 'C' + else: + grade = 'A' + + myDB = db.DBConnection() + totaltracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=?', [album['AlbumID']])) + havetracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=? AND Location IS NOT NULL', [album['AlbumID']])) + len(myDB.select('SELECT TrackTitle from have WHERE ArtistName like ? AND AlbumTitle LIKE ?', [album['ArtistName'], album['AlbumTitle']])) + + try: + percent = (havetracks*100.0)/totaltracks + if percent > 100: + percent = 100 + except (ZeroDivisionError, TypeError): + percent = 0 + totaltracks = '?' + + avgbitrate = myDB.action("SELECT AVG(BitRate) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0] + if avgbitrate: + bitrate = str(int(avgbitrate)/1000) + ' kbps' + else: + bitrate = '' + + albumformatcount = myDB.action("SELECT COUNT(DISTINCT Format) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0] + if albumformatcount == 1: + albumformat = myDB.action("SELECT DISTINCT Format FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0] + elif albumformatcount > 1: + albumformat = 'Mixed' + else: + albumformat = '' + + lossy_formats = [str.upper(fmt) for fmt in headphones.LOSSY_MEDIA_FORMATS] + + %> + + + + + + + + + + + + %endfor + +
AlbumArtistDateTypeStatusHaveBitrateFormat
${album['AlbumTitle']}${album['ArtistName']}${album['ReleaseDate']}${album['Type']}${album['Status']}
${havetracks}/${totaltracks}
${bitrate}${albumformat}
+
+
+ + +<%def name="headIncludes()"> + + + +<%def name="javascriptIncludes()"> + + + + diff --git a/headphones/webserve.py b/headphones/webserve.py index e2589ba1..dcdb3ad7 100644 --- a/headphones/webserve.py +++ b/headphones/webserve.py @@ -148,7 +148,7 @@ class WebInterface(object): def markAlbums(self, ArtistID=None, action=None, **args): myDB = db.DBConnection() - if action == 'WantedNew': + if action == 'WantedNew' or 'WantedLossless': newaction = 'Wanted' else: newaction = action @@ -160,6 +160,8 @@ class WebInterface(object): searcher.searchforalbum(mbid, new=False) if action == 'WantedNew': searcher.searchforalbum(mbid, new=True) + if action == 'WantedLossless': + searcher.searchforalbum(mbid, lossless=True) if ArtistID: raise cherrypy.HTTPRedirect("artistPage?ArtistID=%s" % ArtistID) else: @@ -223,7 +225,13 @@ class WebInterface(object): myDB = db.DBConnection() artists = myDB.select('SELECT * from artists order by ArtistSortName COLLATE NOCASE') return serve_template(templatename="manageartists.html", title="Manage Artists", artists=artists) - manageArtists.exposed = True + manageArtists.exposed = True + + def manageAlbums(self): + myDB = db.DBConnection() + albums = myDB.select('SELECT * from albums') + return serve_template(templatename="managealbums.html", title="Manage Albums", albums=albums) + manageAlbums.exposed = True def manageNew(self): return serve_template(templatename="managenew.html", title="Manage New Artists")