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,