diff --git a/platformcode/config.py b/platformcode/config.py index da864ace..f74cc09e 100644 --- a/platformcode/config.py +++ b/platformcode/config.py @@ -247,6 +247,12 @@ def open_settings(): elif settings_pre.get("videolibrary_kodi", None) and not settings_post.get("videolibrary_kodi", None): xbmc_videolibrary.clean(get_setting('videolibrarypath')) + if not settings_pre.get("library_move", None) and settings_post.get("library_move", None): + if settings_post.get("library_move", None) and not get_setting("videolibrary_kodi"): + from platformcode import platformtools + platformtools.dialog_ok(get_localized_string(20000), get_localized_string(80040)) + set_setting("library_move", False) + def get_setting(name, channel="", server="", default=None): """ diff --git a/platformcode/xbmc_videolibrary.py b/platformcode/xbmc_videolibrary.py index cd6d92b2..6fcd69a8 100644 --- a/platformcode/xbmc_videolibrary.py +++ b/platformcode/xbmc_videolibrary.py @@ -515,27 +515,6 @@ def update(folder_content=config.get_setting("folder_tvshows"), folder=""): xbmc.executebuiltin('XBMC.ReloadSkin()') -def clean(path=''): - """ - limpia la libreria de elementos que no existen - @param mostrar_dialogo: muestra el cuadro de progreso mientras se limpia la videoteca - @type mostrar_dialogo: bool - """ - logger.info() - - if path: - clean_db(path) - return True - payload = {"jsonrpc": "2.0", "method": "VideoLibrary.Clean", "id": 1, - "params": {"showdialogs": False}} - data = get_data(payload) - - if data.get('result', False) == 'OK': - return True - - return False - - def search_library_path(): sql = 'SELECT strPath FROM path WHERE strPath LIKE "special://%/plugin.video.kod/library/" AND idParentPath ISNULL' nun_records, records = execute_sql_kodi(sql) @@ -899,98 +878,143 @@ def update_db(old_path, new_path, old_movies_folder, new_movies_folder, old_tvsh xbmc.executebuiltin('XBMC.ReloadSkin()') -def clean_db(path=''): +def clean(path=''): + def sql_format(path): + if path.startswith("special://"): + path = path.replace('/profile/', '/%/').replace('/home/userdata/', '/%/') + sep = '/' + elif '://' in path: + sep = '/' + else: sep = os.sep + + if sep == '/': path = path.replace('\\','/') + else: path = path.replace('/','\\') + + return path, sep + logger.info() - if path.startswith("special://"): - path = path.replace('/profile/', '/%/').replace('/home/userdata/', '/%/') - sep = '/' - elif '://' in path: - sep = '/' - else: sep = os.sep - if not path.endswith(sep): - path += sep + idParentPath = 0 + sql_path = '' + sql_movies_path = '' + sql_tvshows_path = '' + sql_episodes_path = '' + + path, sep = sql_format(path) + movies_folder = config.get_setting("folder_movies") + tvshows_folder = config.get_setting("folder_tvshows") + + # delete episode/movie (downloads.py move_to_libray) + if path.endswith(".strm"): + if movies_folder in path: + sql_movies_path = path + else: + sql_episodes_path = path + # delete movie + elif movies_folder in path: + if not path.endswith(sep): path += sep + + sql_movies_path = path + '%' + # delete tvshow + elif tvshows_folder in path: + if not path.endswith(sep): path += sep + + sql_tvshows_path = path + '%' + + sql_episodes_path = sql_tvshows_path + # delete video library + else: + if not path.endswith(sep): path += sep + + sql_path = path + + sql_movies_path = sql_path + movies_folder + if not sql_movies_path.endswith(sep): sql_movies_path += sep + sql_movies_path += '%' + + sql_tvshows_path = sql_path + tvshows_folder + if not sql_tvshows_path.endswith(sep): sql_tvshows_path += sep + sql_tvshows_path += '%' + + sql_episodes_path = sql_tvshows_path progress = platformtools.dialog_progress_bg(config.get_localized_string(20000), config.get_localized_string(80025)) progress.update(0) - idParentPath = 0 - # search video library path in the DB - sql = 'SELECT idPath FROM path where strPath LIKE "%s"' % path - nun_records, records = execute_sql_kodi(sql) - # delete video library path - if records: - idPath = records[0][0] - idParentPath = idPath - if not config.get_setting("videolibrary_kodi"): - sql = 'DELETE from path WHERE idPath=%s' % idPath - nun_records, records = execute_sql_kodi(sql) + if sql_path: + # search video library path in the DB + sql = 'SELECT idPath FROM path where strPath LIKE "%s"' % sql_path + nun_records, records = execute_sql_kodi(sql) + # delete video library path + if records: + idPath = records[0][0] + idParentPath = idPath + if not config.get_setting("videolibrary_kodi"): + sql = 'DELETE from path WHERE idPath=%s' % idPath + nun_records, records = execute_sql_kodi(sql) progress.update(10) - movies_path = path + config.get_setting("folder_movies") - if not movies_path.endswith(sep): movies_path += sep - movies_path += '%' - - # search movies in the DB - sql = 'SELECT idMovie FROM movie where c22 LIKE "%s"' % movies_path - nun_records, records = execute_sql_kodi(sql) - # delete movies - if records: - for record in records: - idMovie = record[0] - sql = 'DELETE from movie WHERE idMovie=%s' % idMovie - nun_records, records = execute_sql_kodi(sql) + if sql_movies_path: + # search movies in the DB + sql = 'SELECT idMovie FROM movie where c22 LIKE "%s"' % sql_movies_path + nun_records, records = execute_sql_kodi(sql) + # delete movies + if records: + for record in records: + idMovie = record[0] + sql = 'DELETE from movie WHERE idMovie=%s' % idMovie + nun_records, records = execute_sql_kodi(sql) progress.update(28) - # search movies path and folders in the DB - sql = 'SELECT idPath, idParentPath FROM path where strPath LIKE "%s"' % movies_path - nun_records, records = execute_sql_kodi(sql) - # delete movies path and folders - if records: - for record in records: - if record[1] == idParentPath and config.get_setting("videolibrary_kodi"): - continue - idPath = record[0] - sql = 'DELETE from path WHERE idPath=%s' % idPath - nun_records, records = execute_sql_kodi(sql) + if sql_movies_path: + # search movies path and folders in the DB + sql = 'SELECT idPath, idParentPath FROM path where strPath LIKE "%s"' % sql_movies_path + nun_records, records = execute_sql_kodi(sql) + # delete movies path and folders + if records: + for record in records: + if record[1] == idParentPath and config.get_setting("videolibrary_kodi"): + continue + idPath = record[0] + sql = 'DELETE from path WHERE idPath=%s' % idPath + nun_records, records = execute_sql_kodi(sql) progress.update(46) - tvshows_path = path + config.get_setting("folder_tvshows") - if not tvshows_path.endswith(sep): tvshows_path += sep - tvshows_path += '%' - - # search TV shows in the DB - sql = 'SELECT idShow FROM tvshow_view where strPath LIKE "%s"' % tvshows_path - nun_records, records = execute_sql_kodi(sql) - # delete TV shows - if records: - for record in records: - idShow = record[0] - sql = 'DELETE from tvshow WHERE idShow=%s' % idShow - nun_records, records = execute_sql_kodi(sql) + if sql_tvshows_path: + # search TV shows in the DB + sql = 'SELECT idShow FROM tvshow_view where strPath LIKE "%s"' % sql_tvshows_path + nun_records, records = execute_sql_kodi(sql) + # delete TV shows + if records: + for record in records: + idShow = record[0] + sql = 'DELETE from tvshow WHERE idShow=%s' % idShow + nun_records, records = execute_sql_kodi(sql) progress.update(64) - # search episodes in the DB - sql = 'SELECT idEpisode FROM episode where c18 LIKE "%s"' % tvshows_path - nun_records, records = execute_sql_kodi(sql) - # delete episodes - if records: - for record in records: - idEpisode = record[0] - sql = 'DELETE from episode WHERE idEpisode=%s' % idEpisode - nun_records, records = execute_sql_kodi(sql) + if sql_episodes_path: + # search episodes in the DB + sql = 'SELECT idEpisode FROM episode where c18 LIKE "%s"' % sql_episodes_path + nun_records, records = execute_sql_kodi(sql) + # delete episodes + if records: + for record in records: + idEpisode = record[0] + sql = 'DELETE from episode WHERE idEpisode=%s' % idEpisode + nun_records, records = execute_sql_kodi(sql) progress.update(82) - # search TV shows path and folders in the DB - sql = 'SELECT idPath, idParentPath FROM path where strPath LIKE "%s"' % tvshows_path - nun_records, records = execute_sql_kodi(sql) - # delete tvshows path and folders - if records: - for record in records: - if record[1] == idParentPath and config.get_setting("videolibrary_kodi"): - continue - idPath = record[0] - sql = 'DELETE from path WHERE idPath=%s' % idPath - nun_records, records = execute_sql_kodi(sql) + if sql_tvshows_path: + # search TV shows path and folders in the DB + sql = 'SELECT idPath, idParentPath FROM path where strPath LIKE "%s"' % sql_tvshows_path + nun_records, records = execute_sql_kodi(sql) + # delete tvshows path and folders + if records: + for record in records: + if record[1] == idParentPath and config.get_setting("videolibrary_kodi"): + continue + idPath = record[0] + sql = 'DELETE from path WHERE idPath=%s' % idPath + nun_records, records = execute_sql_kodi(sql) progress.update(100) xbmc.sleep(1000) diff --git a/resources/language/English/strings.po b/resources/language/English/strings.po index 1130a1ef..df3de7c4 100644 --- a/resources/language/English/strings.po +++ b/resources/language/English/strings.po @@ -3277,7 +3277,7 @@ msgid "Movies folder*" msgstr "" msgctxt "#70120" -msgid "Add KoD content to Kodi video library*" +msgid "Add KoD contents to Kodi video library*" msgstr "" msgctxt "#70121" @@ -3717,7 +3717,7 @@ msgid "Add completed downloads to the video library " msgstr "" msgctxt "#70231" -msgid "Move the downloaded file to the video library" +msgid "Move downloaded files to the video library*" msgstr "" msgctxt "#70232" @@ -5924,7 +5924,7 @@ msgid "Logging" msgstr "" msgctxt "#70789" -msgid "* Change by opening the settings from the KoD main menu" +msgid "* Change by opening the settings from KoD main menu" msgstr "" @@ -6223,4 +6223,8 @@ msgstr "" msgctxt "#80039" msgid "The video library has been deleted" +msgstr "" + +msgctxt "#80040" +msgid "In order to watch the downloaded files that have been moved to the video library, you have first to enable the option to add KoD contents to Kodi video library" msgstr "" \ No newline at end of file diff --git a/resources/language/Italian/strings.po b/resources/language/Italian/strings.po index c5a06058..e9f3ff47 100644 --- a/resources/language/Italian/strings.po +++ b/resources/language/Italian/strings.po @@ -3276,8 +3276,8 @@ msgid "Movies folder*" msgstr "Cartella film*" msgctxt "#70120" -msgid "Add KoD content to Kodi video library*" -msgstr "Aggiungi i contenuti di KoD alla videoteca di Kodi*" +msgid "Add KoD contents to Kodi video library*" +msgstr "Aggiungi la videoteca di KoD alla libreria di Kodi*" msgctxt "#70121" msgid "Activate" @@ -3716,8 +3716,8 @@ msgid "Add completed downloads to the video library " msgstr "Aggiungi download completi alla videoteca" msgctxt "#70231" -msgid "Move the downloaded file to the video library" -msgstr "Sposta i files scaricati nella videoteca" +msgid "Move downloaded files to the video library*" +msgstr "Sposta i file scaricati nella videoteca*" msgctxt "#70232" msgid "View downloaded files" @@ -5924,7 +5924,7 @@ msgid "Logging" msgstr "Logging" msgctxt "#70789" -msgid "* Change by opening the settings from the KoD main menu" +msgid "* Change by opening the settings from KoD main menu" msgstr "* Cambia aprendo le impostazioni dal menu principale di KoD" @@ -6223,4 +6223,8 @@ msgstr "Eliminazione videoteca..." msgctxt "#80039" msgid "The video library has been deleted" -msgstr "La videoteca è stata eliminata" \ No newline at end of file +msgstr "La videoteca è stata eliminata" + +msgctxt "#80040" +msgid "In order to watch the downloaded files that have been moved to the video library, you have first to enable the option to add KoD contents to Kodi video library" +msgstr "Per guardare i file scaricati che sono stati spostati nella videoteca, devi prima abilitare l'opzione per aggiungere la videoteca di KoD alla libreria di Kodi" \ No newline at end of file diff --git a/resources/settings.xml b/resources/settings.xml index c922e203..808c2394 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -93,15 +93,16 @@ - - - - - - - - - + + + + + + + + + diff --git a/specials/downloads.py b/specials/downloads.py index ee6601bd..3535d91a 100644 --- a/specials/downloads.py +++ b/specials/downloads.py @@ -363,7 +363,44 @@ def move_to_libray(item): library_path = filetools.join(move_path, *filetools.split(item.downloadFilename)) final_path = download_path - if config.get_setting("library_add") == True and config.get_setting("library_move") == True: + if not filetools.isdir(filetools.dirname(library_path)): + filetools.mkdir(filetools.dirname(library_path)) + + if filetools.isfile(library_path) and filetools.isfile(download_path): + filetools.remove(library_path) + + if filetools.isfile(download_path): + if filetools.move(download_path, library_path): + final_path = library_path + + if len(filetools.listdir(filetools.dirname(download_path))) == 0: + filetools.rmdir(filetools.dirname(download_path)) + + logger.info('ITEM = ' + str(item)) + name = item.contentTitle if item.contentType == 'movie' else str(item.infoLabels['season']) + 'x' + str(item.infoLabels['episode']).zfill(2) + list_item = filetools.listdir(filetools.join(config.get_videolibrary_path(), FOLDER, path_title)) + + clean = False + for File in list_item: + filename = File.lower() + name = name.lower() + + if filename.startswith(name) and (filename.endswith('.strm') or filename.endswith('.json') or filename.endswith('.nfo')): + clean = True + file_path = filetools.join(config.get_videolibrary_path(), FOLDER, path_title, File) + logger.info('Delete File: ' + str(file_path)) + filetools.remove(file_path) + if file_path.endswith('.strm'): + file_strm_path = file_path + + if config.is_xbmc() and config.get_setting("videolibrary_kodi"): + from platformcode import xbmc_videolibrary + if clean == True: + import xbmc + xbmc_videolibrary.clean(file_strm_path) + xbmc_videolibrary.update(FOLDER, path_title) + + """if config.get_setting("library_add") == True and config.get_setting("library_move") == True: if not filetools.isdir(filetools.dirname(library_path)): filetools.mkdir(filetools.dirname(library_path)) @@ -413,7 +450,7 @@ def move_to_libray(item): action="findvideos", infoLabels=item.infoLabels, url=final_path) tvshow = Item(channel="downloads", contentType="tvshow", infoLabels={"tmdb_id": item.infoLabels["tmdb_id"]}) - videolibrarytools.save_tvshow(tvshow, [library_item]) + videolibrarytools.save_tvshow(tvshow, [library_item])""" def update_json(path, params): @@ -619,7 +656,7 @@ def download_from_url(url, item): save_server_statistics(item.server, d.speed[0], d.state != d.states.error) - if status == STATUS_CODES.completed: + if status == STATUS_CODES.completed and config.get_setting("library_move") == True: move_to_libray(item.clone(downloadFilename=file)) return {"downloadUrl": d.download_url, "downloadStatus": status, "downloadSize": d.size[0], diff --git a/specials/videolibrary.py b/specials/videolibrary.py index 16e97acb..c24066dd 100644 --- a/specials/videolibrary.py +++ b/specials/videolibrary.py @@ -1018,13 +1018,8 @@ def delete(item): filetools.rmdir(_item.path) if config.is_xbmc() and config.get_setting("videolibrary_kodi"): - import xbmc - # esperamos 5 segundos para dar tiempo a borrar los ficheros - xbmc.sleep(5000) - # TODO mirar por qué no funciona al limpiar en la videoteca de Kodi al añadirle un path - # limpiamos la videoteca de Kodi from platformcode import xbmc_videolibrary - xbmc_videolibrary.clean() + xbmc_videolibrary.clean(_item.path) logger.info("All links removed") platformtools.itemlist_refresh()