diff --git a/Headphones.py b/Headphones.py index e4506797..5ad2454d 100755 --- a/Headphones.py +++ b/Headphones.py @@ -54,7 +54,10 @@ def main(): try: locale.setlocale(locale.LC_ALL, "") - headphones.SYS_ENCODING = locale.getpreferredencoding() + if headphones.SYS_PLATFORM == 'win32': + headphones.SYS_ENCODING = sys.getdefaultencoding().upper() + else: + headphones.SYS_ENCODING = locale.getpreferredencoding() except (locale.Error, IOError): pass diff --git a/data/interfaces/default/config.html b/data/interfaces/default/config.html index 28888cae..383db39a 100644 --- a/data/interfaces/default/config.html +++ b/data/interfaces/default/config.html @@ -133,6 +133,12 @@ days +
+ + +
@@ -2601,9 +2607,9 @@ initConfigCheckbox("#api_enabled"); initConfigCheckbox("#enable_https"); initConfigCheckbox("#customauth"); + initConfigCheckbox("#mb_ignore_age_missing"); initConfigCheckbox("#use_tquattrecentonze"); - $('#twitterStep1').click(function () { $.get("/twitterStep1", function (data) {window.open(data); }) .done(function () { $('#ajaxMsg').html("
Confirm Authorization. Check pop-up blocker if no response.
"); }); diff --git a/headphones/__init__.py b/headphones/__init__.py index c6acc763..2d622766 100644 --- a/headphones/__init__.py +++ b/headphones/__init__.py @@ -417,6 +417,8 @@ def dbcheck(): 'CREATE INDEX IF NOT EXISTS tracks_Location ON tracks(Location ASC)') c.execute( 'CREATE INDEX IF NOT EXISTS alltracks_Location ON alltracks(Location ASC)') + c.execute( + 'CREATE INDEX IF NOT EXISTS tracks_artistid ON tracks(ArtistID ASC)') try: c.execute('SELECT IncludeExtras from artists') diff --git a/headphones/albumswitcher.py b/headphones/albumswitcher.py index 74f1077f..89325ed7 100644 --- a/headphones/albumswitcher.py +++ b/headphones/albumswitcher.py @@ -85,8 +85,8 @@ def switch(AlbumID, ReleaseID): # Update have track counts on index totaltracks = len(myDB.select( - 'SELECT TrackTitle from tracks WHERE ArtistID=? AND AlbumID IN (SELECT AlbumID FROM albums WHERE Status != "Ignored")', - [newalbumdata['ArtistID']])) + 'SELECT TrackTitle from tracks AS tr INNER JOIN albums AS al ON al.AlbumID = tr.AlbumID WHERE al.ArtistID=? ' + 'AND al.Status != "Ignored"', [newalbumdata['ArtistID']])) havetracks = len(myDB.select( 'SELECT TrackTitle from tracks WHERE ArtistID=? AND Location IS NOT NULL', [newalbumdata['ArtistID']])) diff --git a/headphones/config.py b/headphones/config.py index 83c73415..30591769 100644 --- a/headphones/config.py +++ b/headphones/config.py @@ -167,6 +167,7 @@ _CONFIG_DEFINITIONS = { 'LOSSLESS_BITRATE_TO': (int, 'General', 0), 'LOSSLESS_DESTINATION_DIR': (path, 'General', ''), 'MB_IGNORE_AGE': (int, 'General', 365), + 'MB_IGNORE_AGE_MISSING': (int, 'General', 0), 'MININOVA': (int, 'Mininova', 0), 'MININOVA_RATIO': (str, 'Mininova', ''), 'MIRROR': (str, 'General', 'musicbrainz.org'), diff --git a/headphones/importer.py b/headphones/importer.py index 3b92ca11..0426004d 100644 --- a/headphones/importer.py +++ b/headphones/importer.py @@ -262,8 +262,12 @@ def addArtisttoDB(artistid, extrasonly=False, forcefull=False, type="artist"): else: if check_release_date is None or check_release_date == u"None": - logger.info("[%s] Now updating: %s (No Release Date)" % (artist['artist_name'], rg['title'])) - new_releases = mb.get_new_releases(rgid, includeExtras, True) + if headphones.CONFIG.MB_IGNORE_AGE_MISSING is not 1: + logger.info("[%s] Now updating: %s (No Release Date)" % (artist['artist_name'], rg['title'])) + new_releases = mb.get_new_releases(rgid, includeExtras, True) + else: + logger.info("[%s] Skipping update of: %s (No Release Date)" % (artist['artist_name'], rg['title'])) + new_releases = 0 else: if len(check_release_date) == 10: release_date = check_release_date diff --git a/headphones/searcher.py b/headphones/searcher.py index 2fc5e78d..74cad281 100644 --- a/headphones/searcher.py +++ b/headphones/searcher.py @@ -1292,10 +1292,13 @@ def searchTorrent(album, new=False, losslessOnly=False, albumlength=None, if headphones.CONFIG.PREFERRED_QUALITY == 3 or losslessOnly: categories = "3040" + maxsize = 10000000000 elif headphones.CONFIG.PREFERRED_QUALITY == 1 or allow_lossless: categories = "3040,3010,3050" + maxsize = 10000000000 else: categories = "3010,3050" + maxsize = 300000000 if album['Type'] == 'Other': categories = "3030" @@ -1321,20 +1324,22 @@ def searchTorrent(album, new=False, losslessOnly=False, albumlength=None, "q": term } - data = request.request_feed( + data = request.request_soup( url=torznab_host[0], params=params, headers=headers ) # Process feed if data: - if not len(data.entries): + items = data.find_all('item') + if not items: logger.info(u"No results found from %s for %s", provider, term) else: - for item in data.entries: + for item in items: try: - url = item.link - title = item.title + title = item.title.get_text() + url = item.find("link").next_sibling.strip() + seeders = int(item.find("torznab:attr", attrs={"name": "seeders"}).get('value')) # Torrentech hack - size currently not returned, make it up if 'torrentech' in torznab_host[0]: @@ -1349,12 +1354,17 @@ def searchTorrent(album, new=False, losslessOnly=False, albumlength=None, logger.info('Skipping %s, could not determine size' % title) continue else: - size = int(item.links[1]['length']) + size = int(item.size.string) if all(word.lower() in title.lower() for word in term.split()): - logger.info( - 'Found %s. Size: %s' % (title, helpers.bytes_to_mb(size))) - resultlist.append((title, size, url, provider, 'torrent', True)) + if size < maxsize and minimumseeders < seeders: + logger.info('Found %s. Size: %s' % (title, helpers.bytes_to_mb(size))) + resultlist.append((title, size, url, provider, 'torrent', True)) + else: + logger.info( + '%s is larger than the maxsize or has too little seeders for this category, ' + 'skipping. (Size: %i bytes, Seeders: %d)', + title, size, seeders) else: logger.info('Skipping %s, not all search term words found' % title) diff --git a/headphones/webserve.py b/headphones/webserve.py index 9d703a5c..30ed209e 100644 --- a/headphones/webserve.py +++ b/headphones/webserve.py @@ -1160,6 +1160,7 @@ class WebInterface(object): "download_scan_interval": headphones.CONFIG.DOWNLOAD_SCAN_INTERVAL, "update_db_interval": headphones.CONFIG.UPDATE_DB_INTERVAL, "mb_ignore_age": headphones.CONFIG.MB_IGNORE_AGE, + "mb_ignore_age_missing": headphones.CONFIG.MB_IGNORE_AGE_MISSING, "search_interval": headphones.CONFIG.SEARCH_INTERVAL, "libraryscan_interval": headphones.CONFIG.LIBRARYSCAN_INTERVAL, "sab_host": headphones.CONFIG.SAB_HOST,