diff --git a/data/interfaces/bookstrap/config.html b/data/interfaces/bookstrap/config.html index b0276658..589fffe3 100644 --- a/data/interfaces/bookstrap/config.html +++ b/data/interfaces/bookstrap/config.html @@ -922,7 +922,7 @@
- +
@@ -1238,6 +1238,8 @@
Priority + Types + @@ -1281,6 +1283,8 @@
Priority + Types + @@ -1324,6 +1328,8 @@
${label} + Types + @@ -1353,6 +1359,8 @@
Priority + Types + @@ -1375,6 +1383,8 @@
Priority + Types + @@ -1397,6 +1407,8 @@
Priority + Types + @@ -1419,6 +1431,8 @@
Priority + Types + @@ -1441,6 +1455,8 @@
Priority + Types + @@ -1463,6 +1479,8 @@
Priority + Types + @@ -1497,6 +1515,8 @@
Priority + Types + @@ -1525,6 +1545,8 @@
Priority + Types + diff --git a/lazylibrarian/__init__.py b/lazylibrarian/__init__.py index e533545a..643a4311 100644 --- a/lazylibrarian/__init__.py +++ b/lazylibrarian/__init__.py @@ -168,7 +168,7 @@ CONFIG_GIT = ['GIT_REPO', 'GIT_USER', 'GIT_BRANCH', 'LATEST_VERSION', 'GIT_UPDAT CONFIG_NONWEB = ['NAME_POSTFIX', 'DIR_PERM', 'FILE_PERM', 'BLOCKLIST_TIMER', 'DISPLAYLENGTH', 'ISBN_LOOKUP', 'WALL_COLUMNS', 'ADMIN_EMAIL', 'HTTP_TIMEOUT', 'PROXY_LOCAL', 'SKIPPED_EXT', 'CHERRYPYLOG', 'SYS_ENCODING', 'LT_DEVKEY', 'HIST_REFRESH', 'HTTP_EXT_TIMEOUT', 'CALIBRE_RENAME', - 'NAME_RATIO', 'NAME_PARTIAL', 'NAME_PARTNAME', 'DIRECT_EBOOK', 'DIRECT_AUDIO', 'DIRECT_MAG'] + 'NAME_RATIO', 'NAME_PARTIAL', 'NAME_PARTNAME'] # default interface does not know about these items, so leaves them unchanged CONFIG_NONDEFAULT = ['BOOKSTRAP_THEME', 'AUDIOBOOK_TYPE', 'AUDIO_DIR', 'AUDIO_TAB', 'REJECT_AUDIO', 'REJECT_MAXAUDIO', 'REJECT_MINAUDIO', 'NEWAUDIO_STATUS', 'TOGGLES', 'FOUND_STATUS', @@ -357,35 +357,40 @@ CONFIG_DEFINITIONS = { 'KAT_HOST': ('str', 'KAT', 'kickass.cd'), 'KAT': ('bool', 'KAT', 0), 'KAT_DLPRIORITY': ('int', 'KAT', 0), + 'KAT_DLTYPES': ('str', 'KAT', 'AEM'), 'WWT_HOST': ('str', 'WWT', 'https://worldwidetorrents.me'), 'WWT': ('bool', 'WWT', 0), 'WWT_DLPRIORITY': ('int', 'WWT', 0), + 'WWT_DLTYPES': ('str', 'WWT', 'AEM'), 'TPB_HOST': ('str', 'TPB', 'https://pirateproxy.cc'), 'TPB': ('bool', 'TPB', 0), 'TPB_DLPRIORITY': ('int', 'TPB', 0), + 'TPB_DLTYPES': ('str', 'TPB', 'AEM'), 'ZOO_HOST': ('str', 'ZOO', 'https://zooqle.com'), 'ZOO': ('bool', 'ZOO', 0), 'ZOO_DLPRIORITY': ('int', 'ZOO', 0), + 'ZOO_DLTYPES': ('str', 'ZOO', 'AEM'), # 'EXTRA_HOST': ('str', 'EXTRA', 'extratorrent.cc'), # 'EXTRA': ('bool', 'EXTRA', 0), # 'EXTRA_DLPRIORITY': ('int', 'EXTRA', 0), 'TDL_HOST': ('str', 'TDL', 'torrentdownloads.me'), 'TDL': ('bool', 'TDL', 0), 'TDL_DLPRIORITY': ('int', 'TDL', 0), + 'TDL_DLTYPES': ('str', 'TDL', 'AEM'), 'GEN_HOST': ('str', 'GEN', 'libgen.io'), 'GEN_SEARCH': ('str', 'GEN', 'search.php'), 'GEN': ('bool', 'GEN', 0), 'GEN_DLPRIORITY': ('int', 'GEN', 0), + 'GEN_DLTYPES': ('str', 'GEN', 'EM'), 'GEN2_HOST': ('str', 'GEN', 'libgen.io'), 'GEN2_SEARCH': ('str', 'GEN', 'foreignfiction/index.php'), 'GEN2': ('bool', 'GEN', 0), 'GEN2_DLPRIORITY': ('int', 'GEN', 0), - 'DIRECT_EBOOK': ('bool', 'GEN', 1), - 'DIRECT_AUDIO': ('bool', 'GEN', 0), - 'DIRECT_MAG': ('bool', 'GEN', 1), + 'GEN2_DLTYPES': ('str', 'GEN2', 'EM'), 'LIME_HOST': ('str', 'LIME', 'https://www.limetorrents.cc'), 'LIME': ('bool', 'LIME', 0), 'LIME_DLPRIORITY': ('int', 'LIME', 0), + 'LIME_DLTYPES': ('str', 'LIME', 'AEM'), 'NEWZBIN_UID': ('str', 'Newzbin', ''), 'NEWZBIN_PASS': ('str', 'Newzbin', ''), 'NEWZBIN': ('bool', 'Newzbin', 0), @@ -789,7 +794,8 @@ def config_read(reloaded=False): "MANUAL": check_setting('bool', newz_name, 'manual', 0), "APILIMIT": check_setting('int', newz_name, 'apilimit', 0), "APICOUNT": 0, - "DLPRIORITY": check_setting('int', newz_name, 'dlpriority', 0) + "DLPRIORITY": check_setting('int', newz_name, 'dlpriority', 0), + "DLTYPES": check_setting('str', newz_name, 'dltypes', 'AEM'), }) count += 1 # if the last slot is full, add an empty one on the end @@ -829,7 +835,8 @@ def config_read(reloaded=False): "MANUAL": check_setting('bool', torz_name, 'manual', 0), "APILIMIT": check_setting('int', torz_name, 'apilimit', 0), "APICOUNT": 0, - "DLPRIORITY": check_setting('int', torz_name, 'dlpriority', 0) + "DLPRIORITY": check_setting('int', torz_name, 'dlpriority', 0), + "DLTYPES": check_setting('str', torz_name, 'dltypes', 'AEM'), }) count += 1 # if the last slot is full, add an empty one on the end @@ -861,7 +868,8 @@ def config_read(reloaded=False): "DISPNAME": disp_name, "ENABLED": check_setting('bool', rss_name, 'ENABLED', 0), "HOST": check_setting('str', rss_name, 'HOST', ''), - "DLPRIORITY": check_setting('int', rss_name, 'DLPRIORITY', 0) + "DLPRIORITY": check_setting('int', rss_name, 'DLPRIORITY', 0), + "DLTYPES": check_setting('str', rss_name, 'dltypes', 'E'), }) count += 1 # if the last slot is full, add an empty one on the end @@ -980,6 +988,11 @@ def config_write(part=None): logger.debug("Unable to convert value of %s (%s) to SYS_ENCODING" % (key, repr(value))) value = unaccented_str(value) value = value.strip() + if 'DLTYPES' in key: + value = ''.join(sorted(set([i for i in value.upper() if i in 'AEM']))) + if not value: + value = 'E' + CONFIG[key] = value if key in ['SEARCH_BOOKINTERVAL', 'SEARCH_MAGINTERVAL', 'SCAN_INTERVAL', 'VERSIONCHECK_INTERVAL', 'SEARCHRSS_INTERVAL', 'GOODREADS_INTERVAL', 'WISHLIST_INTERVAL']: @@ -1008,8 +1021,9 @@ def config_write(part=None): logger.warn('Unsaved/invalid config key: %s' % key) if not part or part.startswith('Newznab') or part.startswith('Torznab'): - NAB_ITEMS = ['ENABLED', 'DISPNAME', 'HOST', 'API', 'GENERALSEARCH', 'BOOKSEARCH', 'MAGSEARCH', 'AUDIOSEARCH', - 'BOOKCAT', 'MAGCAT', 'AUDIOCAT', 'EXTENDED', 'DLPRIORITY', 'UPDATED', 'MANUAL', 'APILIMIT'] + NAB_ITEMS = ['ENABLED', 'DISPNAME', 'HOST', 'API', 'GENERALSEARCH', 'BOOKSEARCH', 'MAGSEARCH', + 'AUDIOSEARCH', 'BOOKCAT', 'MAGCAT', 'AUDIOCAT', 'EXTENDED', 'DLPRIORITY', 'DLTYPES', + 'UPDATED', 'MANUAL', 'APILIMIT'] for entry in [[NEWZNAB_PROV, 'Newznab'], [TORZNAB_PROV, 'Torznab']]: new_list = [] # strip out any empty slots @@ -1041,6 +1055,11 @@ def config_write(part=None): value = provider[item] if isinstance(value, text_type): value = value.strip() + if item == 'DLTYPES': + value = ''.join(sorted(set([i for i in value.upper() if i in 'AEM']))) + if not value: + value = 'E' + provider['DLTYPES'] = value CFG.set(provider['NAME'], item, value) if entry[1] == 'Newznab': @@ -1051,7 +1070,7 @@ def config_write(part=None): add_torz_slot() if not part or part.startswith('rss_'): - RSS_ITEMS = ['ENABLED', 'DISPNAME', 'HOST', 'DLPRIORITY'] + RSS_ITEMS = ['ENABLED', 'DISPNAME', 'HOST', 'DLPRIORITY', 'DLTYPES'] new_list = [] # strip out any empty slots for provider in RSS_PROV: @@ -1082,6 +1101,11 @@ def config_write(part=None): value = provider[item] if isinstance(value, text_type): value = value.strip() + if item == 'DLTYPES': + value = ''.join(sorted(set([i for i in value.upper() if i in 'AEM']))) + if not value: + value = 'E' + provider['DLTYPES'] = value CFG.set(provider['NAME'], item, value) RSS_PROV = new_list @@ -1167,7 +1191,8 @@ def add_newz_slot(): "MANUAL": 0, "APILIMIT": 0, "APICOUNT": 0, - "DLPRIORITY": 0 + "DLPRIORITY": 0, + "DLTYPES": 'AEM' } NEWZNAB_PROV.append(empty) @@ -1199,7 +1224,8 @@ def add_torz_slot(): "MANUAL": 0, "APILIMIT": 0, "APICOUNT": 0, - "DLPRIORITY": 0 + "DLPRIORITY": 0, + "DLTYPES": 'AEM' } TORZNAB_PROV.append(empty) @@ -1258,7 +1284,8 @@ def add_rss_slot(): "DISPNAME": rss_name, "ENABLED": 0, "HOST": '', - "DLPRIORITY": 0 + "DLPRIORITY": 0, + "DLTYPES": 'E' }) diff --git a/lazylibrarian/downloadmethods.py b/lazylibrarian/downloadmethods.py index e44a93d6..db5c948c 100644 --- a/lazylibrarian/downloadmethods.py +++ b/lazylibrarian/downloadmethods.py @@ -120,12 +120,6 @@ def NZBDownloadMethod(bookid=None, nzbtitle=None, nzburl=None, library='eBook'): def DirectDownloadMethod(bookid=None, dl_title=None, dl_url=None, library='eBook'): - if (library == 'eBook' and not lazylibrarian.CONFIG['DIRECT_EBOOK']) or ( - library == 'AudioBook' and not lazylibrarian.CONFIG['DIRECT_AUDIO']) or ( - library == 'magazine' and not lazylibrarian.CONFIG['DIRECT_MAG']): - res = "Unsupported DIRECT download type %s for [%s]" % (library, dl_title) - logger.warn(res) - return False, res myDB = database.DBConnection() Source = "DIRECT" logger.debug("Starting Direct Download for [%s]" % dl_title) diff --git a/lazylibrarian/librarysync.py b/lazylibrarian/librarysync.py index 796b3ee9..ca3bfd8c 100644 --- a/lazylibrarian/librarysync.py +++ b/lazylibrarian/librarysync.py @@ -237,7 +237,7 @@ def find_book_in_db(author, book, ignored=None): # - Strict prefix match with a ()ed remainder is allowed # But the leading : is removed by has_clean_subtitle, so we allow all non (): subtitles has_clean_subtitle = re.search(r"^\s+([^:()]+|\([^)]+\))$", book_sub) is not None - + logger.debug('Searching %s %sbook%s by [%s] in database for [%s]' % (len(books), ign, plural(len(books)), author, book)) if lazylibrarian.LOGLEVEL & lazylibrarian.log_libsync: diff --git a/lazylibrarian/manualbook.py b/lazylibrarian/manualbook.py index 6faf4ffc..dc95ce72 100644 --- a/lazylibrarian/manualbook.py +++ b/lazylibrarian/manualbook.py @@ -68,13 +68,9 @@ def searchItem(item=None, bookid=None, cat=None): if nprov: results += resultlist if lazylibrarian.USE_DIRECT(): - if (cat == 'book' and not lazylibrarian.CONFIG['DIRECT_EBOOK']) or ( - cat == 'audio' and not lazylibrarian.CONFIG['DIRECT_AUDIO']): - logger.debug("Ignoring direct providers for %s" % cat) - else: - resultlist, nprov = IterateOverDirectSites(book, cat) - if nprov: - results += resultlist + resultlist, nprov = IterateOverDirectSites(book, cat) + if nprov: + results += resultlist if lazylibrarian.USE_RSS(): resultlist, nprov = IterateOverRSSSites() if nprov: diff --git a/lazylibrarian/providers.py b/lazylibrarian/providers.py index 1f6035e6..44ff992f 100644 --- a/lazylibrarian/providers.py +++ b/lazylibrarian/providers.py @@ -414,6 +414,12 @@ def IterateOverNewzNabSites(book=None, searchType=None): if provider['ENABLED']: if ProviderIsBlocked(provider['HOST']): logger.debug('[IterateOverNewzNabSites] - %s is BLOCKED' % provider['HOST']) + elif searchType in ['book', 'shortbook'] and 'E' not in provider['DLTYPES']: + logger.debug("Ignoring %s for eBook" % provider['HOST']) + elif "audio" in searchType and 'A' not in provider['DLTYPES']: + logger.debug("Ignoring %s for AudioBook" % provider['HOST']) + elif "mag" in searchType and 'M' not in provider['DLTYPES']: + logger.debug("Ignoring %s for Magazine" % provider['HOST']) else: if check_int(provider['APILIMIT'], 0): if 'APICOUNT' in provider: @@ -426,16 +432,22 @@ def IterateOverNewzNabSites(book=None, searchType=None): else: provider['APICOUNT'] = res + 1 - if not ProviderIsBlocked(provider['HOST']): - provider = get_capabilities(provider) - providers += 1 - logger.debug('[IterateOverNewzNabSites] - %s' % provider['HOST']) - resultslist += NewzNabPlus(book, provider, searchType, "nzb") + if not ProviderIsBlocked(provider['HOST']): + provider = get_capabilities(provider) + providers += 1 + logger.debug('[IterateOverNewzNabSites] - %s' % provider['HOST']) + resultslist += NewzNabPlus(book, provider, searchType, "nzb") for provider in lazylibrarian.TORZNAB_PROV: if provider['ENABLED']: if ProviderIsBlocked(provider['HOST']): logger.debug('[IterateOverNewzNabSites] - %s is BLOCKED' % provider['HOST']) + elif searchType in ['book', 'shortbook'] and 'E' not in provider['DLTYPES']: + logger.debug("Ignoring %s for eBook" % provider['HOST']) + elif "audio" in searchType and 'A' not in provider['DLTYPES']: + logger.debug("Ignoring %s for AudioBook" % provider['HOST']) + elif "mag" in searchType and 'M' not in provider['DLTYPES']: + logger.debug("Ignoring %s for Magazine" % provider['HOST']) else: if check_int(provider['APILIMIT'], 0): if 'APICOUNT' in provider: @@ -448,11 +460,11 @@ def IterateOverNewzNabSites(book=None, searchType=None): else: provider['APICOUNT'] = res + 1 - if not ProviderIsBlocked(provider['HOST']): - provider = get_capabilities(provider) - providers += 1 - logger.debug('[IterateOverTorzNabSites] - %s' % provider['HOST']) - resultslist += NewzNabPlus(book, provider, searchType, "torznab") + if not ProviderIsBlocked(provider['HOST']): + provider = get_capabilities(provider) + providers += 1 + logger.debug('[IterateOverTorzNabSites] - %s' % provider['HOST']) + resultslist += NewzNabPlus(book, provider, searchType, "torznab") return resultslist, providers @@ -468,6 +480,12 @@ def IterateOverTorrentSites(book=None, searchType=None): if lazylibrarian.CONFIG[prov]: if ProviderIsBlocked(prov): logger.debug('[IterateOverTorrentSites] - %s is BLOCKED' % lazylibrarian.CONFIG[prov + '_HOST']) + elif searchType in ['book', 'shortbook'] and 'E' not in lazylibrarian.CONFIG[prov + '_DLTYPES']: + logger.debug("Ignoring %s for eBook" % prov) + elif "audio" in searchType and 'A' not in lazylibrarian.CONFIG[prov + '_DLTYPES']: + logger.debug("Ignoring %s for AudioBook" % prov) + elif "mag" in searchType and 'M' not in lazylibrarian.CONFIG[prov + '_DLTYPES']: + logger.debug("Ignoring %s for Magazine" % prov) else: logger.debug('[IterateOverTorrentSites] - %s' % lazylibrarian.CONFIG[prov + '_HOST']) if prov == 'KAT': @@ -510,6 +528,12 @@ def IterateOverDirectSites(book=None, searchType=None): if ProviderIsBlocked(prov): logger.debug('[IterateOverDirectSites] - %s %s is BLOCKED' % (lazylibrarian.CONFIG[prov + '_HOST'], lazylibrarian.CONFIG[prov + '_SEARCH'])) + elif searchType in ['book', 'shortbook'] and 'E' not in lazylibrarian.CONFIG[prov + '_DLTYPES']: + logger.debug("Ignoring %s for eBook" % prov) + elif "audio" in searchType and 'A' not in lazylibrarian.CONFIG[prov + '_DLTYPES']: + logger.debug("Ignoring %s for AudioBook" % prov) + elif "mag" in searchType and 'M' not in lazylibrarian.CONFIG[prov + '_DLTYPES']: + logger.debug("Ignoring %s for Magazine" % prov) else: logger.debug('[IterateOverDirectSites] - %s %s' % (lazylibrarian.CONFIG[prov + '_HOST'], lazylibrarian.CONFIG[prov + '_SEARCH'])) @@ -533,7 +557,8 @@ def IterateOverRSSSites(): else: providers += 1 logger.debug('[IterateOverRSSSites] - %s' % provider['HOST']) - resultslist += RSS(provider['HOST'], provider['NAME'], provider['DLPRIORITY'], provider['DISPNAME']) + resultslist += RSS(provider['HOST'], provider['NAME'], provider['DLPRIORITY'], provider['DISPNAME'], + provider['DLTYPES']) return resultslist, providers @@ -551,7 +576,7 @@ def IterateOverWishLists(): providers += 1 logger.debug('[IterateOverWishLists] - %s' % provider['HOST']) resultslist += GOODREADS(provider['HOST'], provider['NAME'], - provider['DLPRIORITY'], provider['DISPNAME']) + provider['DLPRIORITY'], provider['DISPNAME'], provider['DLTYPES']) elif wishtype == 'LISTOPIA': if ProviderIsBlocked(provider['HOST']): logger.debug('[IterateOverWishLists] - %s is BLOCKED' % provider['HOST']) @@ -559,7 +584,7 @@ def IterateOverWishLists(): providers += 1 logger.debug('[IterateOverWishLists] - %s' % provider['HOST']) resultslist += LISTOPIA(provider['HOST'], provider['NAME'], - provider['DLPRIORITY'], provider['DISPNAME']) + provider['DLPRIORITY'], provider['DISPNAME'], provider['DLTYPES']) elif wishtype == 'NYTIMES': if ProviderIsBlocked(provider['HOST']): logger.debug('[IterateOverWishLists] - %s is BLOCKED' % provider['HOST']) @@ -567,12 +592,12 @@ def IterateOverWishLists(): providers += 1 logger.debug('[IterateOverWishLists] - %s' % provider['HOST']) resultslist += NYTIMES(provider['HOST'], provider['NAME'], - provider['DLPRIORITY'], provider['DISPNAME']) + provider['DLPRIORITY'], provider['DISPNAME'], provider['DLTYPES']) return resultslist, providers -def NYTIMES(host=None, feednr=None, priority=0, dispname=None, test=False): +def NYTIMES(host=None, feednr=None, priority=0, dispname=None, types='E', test=False): """ NYTIMES best-sellers query function, return all the results in a list """ @@ -615,7 +640,8 @@ def NYTIMES(host=None, feednr=None, priority=0, dispname=None, test=False): 'rss_bookid': '', 'rss_isbn': '', 'priority': priority, - 'dispname': dispname + 'dispname': dispname, + 'types': types, }) except IndexError: pass @@ -626,7 +652,7 @@ def NYTIMES(host=None, feednr=None, priority=0, dispname=None, test=False): return results -def LISTOPIA(host=None, feednr=None, priority=0, dispname=None, test=False): +def LISTOPIA(host=None, feednr=None, priority=0, dispname=None, types='E', test=False): """ Goodreads Listopia query function, return all the results in a list """ @@ -675,7 +701,8 @@ def LISTOPIA(host=None, feednr=None, priority=0, dispname=None, test=False): 'rss_bookid': book_id, 'rss_isbn': '', 'priority': priority, - 'dispname': dispname + 'dispname': dispname, + 'types': types, }) next_page = True except IndexError: @@ -693,7 +720,7 @@ def LISTOPIA(host=None, feednr=None, priority=0, dispname=None, test=False): return results -def GOODREADS(host=None, feednr=None, priority=0, dispname=None, test=False): +def GOODREADS(host=None, feednr=None, priority=0, dispname=None, types='E', test=False): """ Goodreads RSS query function, return all the results in a list, can handle multiple wishlists but expects goodreads format (looks for goodreads category names) @@ -745,14 +772,15 @@ def GOODREADS(host=None, feednr=None, priority=0, dispname=None, test=False): 'rss_bookid': book_id, 'rss_isbn': isbn, 'priority': priority, - 'dispname': dispname + 'dispname': dispname, + 'types': types, }) else: logger.debug('No data returned from %s' % host) return results -def RSS(host=None, feednr=None, priority=0, dispname=None, test=False): +def RSS(host=None, feednr=None, priority=0, dispname=None, types='E', test=False): """ Generic RSS query function, just return all the results from the RSS feed in a list """ @@ -840,7 +868,8 @@ def RSS(host=None, feednr=None, priority=0, dispname=None, test=False): 'tor_feed': feednr, 'tor_type': tortype, 'priority': priority, - 'dispname': dispname + 'dispname': dispname, + 'types': types, }) else: logger.debug('No data returned from %s' % host) diff --git a/lazylibrarian/resultlist.py b/lazylibrarian/resultlist.py index 0e16986c..62bb61c9 100644 --- a/lazylibrarian/resultlist.py +++ b/lazylibrarian/resultlist.py @@ -136,6 +136,17 @@ def findBestResult(resultlist, book, searchtype, source): (resultTitle, blacklisted['Status'], blacklisted['NZBprov'])) rejected = True + if not rejected and source == 'rss': + if searchtype in ['book', 'shortbook'] and 'E' not in res['types']: + rejected = True + logger.debug("Ignoring %s for eBook" % res[prefix + 'prov']) + if 'audio' in searchtype and 'A' not in res['types']: + rejected = True + logger.debug("Ignoring %s for AudioBook" % res[prefix + 'prov']) + if 'mag' in searchtype and 'M' not in res['types']: + rejected = True + logger.debug("Ignoring %s for Magazine" % res[prefix + 'prov']) + if not rejected and not url.startswith('http') and not url.startswith('magnet'): rejected = True logger.debug("Rejecting %s, invalid URL [%s]" % (resultTitle, url)) diff --git a/lazylibrarian/searchbook.py b/lazylibrarian/searchbook.py index 28c09f1b..33d1b67d 100644 --- a/lazylibrarian/searchbook.py +++ b/lazylibrarian/searchbook.py @@ -216,17 +216,14 @@ def search_book(books=None, library=None): lazylibrarian.NO_TOR_MSG = timenow modelist.remove('tor') elif mode == 'direct' and 'direct' in modelist: - if searchtype == 'audio' and not lazylibrarian.CONFIG['DIRECT_AUDIO']: - logger.debug("Ignoring direct providers for audio") - else: - resultlist, nprov = IterateOverDirectSites(book, searchtype) - if not nprov: - # don't nag. Show warning message no more than every 20 mins - timenow = int(time.time()) - if check_int(lazylibrarian.NO_DIRECT_MSG, 0) + 1200 < timenow: - logger.warn('No direct providers are available. Check config and blocklist') - lazylibrarian.NO_DIRECT_MSG = timenow - modelist.remove('direct') + resultlist, nprov = IterateOverDirectSites(book, searchtype) + if not nprov: + # don't nag. Show warning message no more than every 20 mins + timenow = int(time.time()) + if check_int(lazylibrarian.NO_DIRECT_MSG, 0) + 1200 < timenow: + logger.warn('No direct providers are available. Check config and blocklist') + lazylibrarian.NO_DIRECT_MSG = timenow + modelist.remove('direct') elif mode == 'rss' and 'rss' in modelist: if rss_resultlist: resultlist = rss_resultlist @@ -261,18 +258,14 @@ def search_book(books=None, library=None): lazylibrarian.NO_TOR_MSG = timenow modelist.remove('tor') elif mode == 'direct' and 'direct' in modelist: - if (searchtype == 'book' and not lazylibrarian.CONFIG['DIRECT_EBOOK']) or ( - searchtype == 'audio' and not lazylibrarian.CONFIG['DIRECT_AUDIO']): - logger.debug("Ignoring direct providers for %s" % searchtype) - else: - resultlist, nprov = IterateOverDirectSites(book, searchtype) - if not nprov: - # don't nag. Show warning message no more than every 20 mins - timenow = int(time.time()) - if check_int(lazylibrarian.NO_DIRECT_MSG, 0) + 1200 < timenow: - logger.warn('No direct providers are available. Check config and blocklist') - lazylibrarian.NO_DIRECT_MSG = timenow - modelist.remove('direct') + resultlist, nprov = IterateOverDirectSites(book, searchtype) + if not nprov: + # don't nag. Show warning message no more than every 20 mins + timenow = int(time.time()) + if check_int(lazylibrarian.NO_DIRECT_MSG, 0) + 1200 < timenow: + logger.warn('No direct providers are available. Check config and blocklist') + lazylibrarian.NO_DIRECT_MSG = timenow + modelist.remove('direct') elif mode == 'rss' and 'rss' in modelist: resultlist = rss_resultlist diff --git a/lazylibrarian/searchmag.py b/lazylibrarian/searchmag.py index c964a009..9869a501 100644 --- a/lazylibrarian/searchmag.py +++ b/lazylibrarian/searchmag.py @@ -110,28 +110,25 @@ def search_magazines(mags=None, reset=False): lazylibrarian.NO_NZB_MSG = timenow if lazylibrarian.USE_DIRECT(): - if not lazylibrarian.CONFIG['DIRECT_MAG']: - logger.debug("Ignoring direct providers for magazines") - else: - dir_resultlist, nproviders = IterateOverDirectSites(book, 'mag') - if not nproviders: - # don't nag. Show warning message no more than every 20 mins - timenow = int(time.time()) - if check_int(lazylibrarian.NO_DIRECT_MSG, 0) + 1200 < timenow: - logger.warn('No direct providers are available. Check config and blocklist') - lazylibrarian.NO_DIRECT_MSG = timenow + dir_resultlist, nproviders = IterateOverDirectSites(book, 'mag') + if not nproviders: + # don't nag. Show warning message no more than every 20 mins + timenow = int(time.time()) + if check_int(lazylibrarian.NO_DIRECT_MSG, 0) + 1200 < timenow: + logger.warn('No direct providers are available. Check config and blocklist') + lazylibrarian.NO_DIRECT_MSG = timenow - if dir_resultlist: - for item in dir_resultlist: # reformat the results so they look like nzbs - resultlist.append({ - 'bookid': item['bookid'], - 'nzbprov': item['tor_prov'], - 'nzbtitle': item['tor_title'], - 'nzburl': item['tor_url'], - 'nzbdate': 'Fri, 01 Jan 1970 00:00:00 +0100', # fake date as none returned - 'nzbsize': item['tor_size'], - 'nzbmode': 'torrent' - }) + if dir_resultlist: + for item in dir_resultlist: # reformat the results so they look like nzbs + resultlist.append({ + 'bookid': item['bookid'], + 'nzbprov': item['tor_prov'], + 'nzbtitle': item['tor_title'], + 'nzburl': item['tor_url'], + 'nzbdate': 'Fri, 01 Jan 1970 00:00:00 +0100', # fake date as none returned + 'nzbsize': item['tor_size'], + 'nzbmode': 'direct' + }) if lazylibrarian.USE_TOR(): tor_resultlist, nproviders = IterateOverTorrentSites(book, 'mag') @@ -165,16 +162,16 @@ def search_magazines(mags=None, reset=False): if rss_resultlist: for item in rss_resultlist: # reformat the rss results so they look like nzbs - resultlist.append({ - 'bookid': book['bookid'], - 'nzbprov': item['tor_prov'], - 'nzbtitle': item['tor_title'], - 'nzburl': item['tor_url'], - 'nzbdate': - item['tor_date'], # may be fake date as none returned from rss torrents, only rss nzb - 'nzbsize': item['tor_size'], - 'nzbmode': item['tor_type'] - }) + if 'M' in item['types']: + resultlist.append({ + 'bookid': book['bookid'], + 'nzbprov': item['tor_prov'], + 'nzbtitle': item['tor_title'], + 'nzburl': item['tor_url'], + 'nzbdate': item['tor_date'], # may be fake date as none returned from rss torrents + 'nzbsize': item['tor_size'], + 'nzbmode': item['tor_type'] + }) if not resultlist: logger.debug("No results for magazine %s" % book['searchterm']) diff --git a/lazylibrarian/searchrss.py b/lazylibrarian/searchrss.py index aa06ac02..a61cb939 100644 --- a/lazylibrarian/searchrss.py +++ b/lazylibrarian/searchrss.py @@ -58,8 +58,8 @@ def search_wishlist(): logger.debug('Processing %s item%s in wishlists' % (len(resultlist), plural(len(resultlist)))) for book in resultlist: # we get rss_author, rss_title, maybe rss_isbn, rss_bookid (goodreads bookid) - # we can just use bookid if goodreads, or try isbn and name matching on author/title if googlebooks - # not sure if anyone would use a goodreads wishlist if not using goodreads interface... + # we can just use bookid if goodreads, or try isbn and name matching on author/title if not + # eg NYTimes wishlist if lazylibrarian.CONFIG['BOOK_API'] == "GoodReads" and book['rss_bookid']: bookmatch = myDB.match('select Status,BookName from books where bookid=?', (book['rss_bookid'],)) if bookmatch: