def remove_export(self, exportid, keep_local=True): export = self.exports_db.get(exportid) self.exports_db.remove(exportid) self.export_items_db.remove(exportid) path = os.path.join(export['destination_folder'], export['name'], '') if not keep_local: if KodiUtils.file_exists(path): Utils.remove_folder(path)
def remove_export(self, exportid, keep_local=True): self.load() export = self.exports[exportid] path = os.path.join(export['destination_folder'], export['name'], '') if not keep_local: if KodiUtils.file_exists(path): Utils.remove_folder(path) if self.get_items_info_path(exportid): KodiUtils.file_delete(self.get_items_info_path(exportid)) del self.exports[exportid] self.save()
def process_change_move(self, change, items_info): change_type = 'move' parent_id = Utils.get_safe_value(change, 'parent', '') parent_item_info = items_info[parent_id] parent_item_path = parent_item_info['full_local_path'] changed_item_id = change['id'] changed_item_name = Utils.get_safe_value(change, 'name', '') changed_item_extension = Utils.get_safe_value(change, 'name_extension', '') changed_item_mimetype = Utils.get_safe_value(change, 'mimetype', '') item_info = items_info[changed_item_id] item_type = item_info['type'] is_folder = item_type == 'folder' item_info_path = item_info['full_local_path'] new_path = os.path.join(Utils.unicode(parent_item_path), Utils.unicode(changed_item_name)) if is_folder: change_type += '_folder' new_path = os.path.join(new_path, '') else: change_type += '_file' if changed_item_extension in self._video_file_extensions or 'video' in changed_item_mimetype or 'video' in change: new_path += '.strm' Logger.debug('%s from: %s to: %s' % ( change_type, item_info_path, new_path, )) if KodiUtils.file_exists(new_path): Logger.debug('location already exists: %s. removing...' % (new_path, )) if is_folder: Utils.remove_folder(item_info_path, self._system_monitor) else: KodiUtils.file_delete(item_info_path) if not KodiUtils.file_rename(item_info_path, new_path): change_type += '_retry' ExportManager.add_item_info(items_info, changed_item_id, Utils.unicode(changed_item_name), new_path, parent_id, item_type) return change_type
def process_change_delete(self, items_info, item_id, is_folder): change_type = 'delete' item_info = items_info[item_id] item_info_path = item_info['full_local_path'] if KodiUtils.file_exists(item_info_path): if is_folder: Logger.debug('Change is delete folder: %s' % item_info_path) if not Utils.remove_folder(item_info_path, self._system_monitor): change_type = 'retry' else: Logger.debug('Change is delete file') if not KodiUtils.file_delete(item_info_path): change_type = 'retry' if change_type != 'retry': ExportManager.remove_item_info(items_info, item_id) return change_type
def process_change_delete(self, change, items_info): change_type = 'delete' changed_item_id = change['id'] item_info = items_info[changed_item_id] item_info_path = item_info['full_local_path'] item_type = item_info['type'] is_folder = item_type == 'folder' Logger.debug('deleting: %s' % item_info_path) if KodiUtils.file_exists(item_info_path): if is_folder: change_type += '_folder' if not Utils.remove_folder(item_info_path, self._system_monitor): change_type += '_retry' else: change_type += '_file' if not KodiUtils.file_delete(item_info_path): change_type += '_retry' else: Logger.debug('file already deleted: %s' % item_info_path) change_type += '_ignored' ExportManager.remove_item_info(items_info, changed_item_id) return change_type
def _run_export(self, driveid, item_id=None): self._export_manager = ExportManager(self._account_manager._addon_data_path) export = self._export_manager.load()[item_id] Logger.debug('Running export:') Logger.debug(export) if Utils.get_safe_value(export, 'exporting', False): self._dialog.ok(self._addon_name, self._common_addon.getLocalizedString(32059) + ' ' + self._common_addon.getLocalizedString(32038)) else: export['exporting'] = True self._export_manager.save() export_folder = export['destination_folder'] if xbmcvfs.exists(export_folder): self.get_provider().configure(self._account_manager, driveid) self._export_progress_dialog_bg.create(self._addon_name + ' ' + self._common_addon.getLocalizedString(32024), self._common_addon.getLocalizedString(32025)) self._export_progress_dialog_bg.update(0) item = self.get_provider().get_item(export['item_driveid'], item_id) if self.cancel_operation(): return if self._child_count_supported: self._exporting_target = int(item['folder']['child_count']) self._exporting_target += 1 folder_name = Utils.unicode(item['name']) folder_path = os.path.join(os.path.join(export_folder, folder_name), '') if self._addon.getSetting('clean_folder') != 'true' or not xbmcvfs.exists(folder_path) or Utils.remove_folder(folder_path): self._exporting = item_id export_items_info = {} ExportManager.add_item_info(export_items_info, item_id, folder_name, folder_path, None,'root') self.__export_folder(driveid, item, export_folder, export, export_items_info, item_id) self._export_manager.save_items_info(item_id, export_items_info) if Utils.get_safe_value(export, 'update_library', False) and self._content_type: database = self._content_type if database == 'audio': database = 'music' KodiUtils.update_library(database) else: error = self._common_addon.getLocalizedString(32066) % folder_path Logger.debug(error) self._dialog.ok(self._addon_name, error) self._export_progress_dialog_bg.close() else: error = self._common_addon.getLocalizedString(32026) % export_folder Logger.debug(error) self._dialog.ok(self._addon_name, error) export['exporting'] = False self._export_manager.save()
def process_change_create(self, change, items_info, export): content_type = export['content_type'] changed_item_id = change['id'] changed_item_name = Utils.get_safe_value(change, 'name', '') changed_item_extension = Utils.get_safe_value(change, 'name_extension', '') parent_id = Utils.get_safe_value(change, 'parent', '') is_folder = 'folder' in change item_type = 'folder' if is_folder else 'file' parent_item_info = Utils.get_safe_value(items_info, parent_id) if parent_item_info: parent_item_path = parent_item_info['full_local_path'] new_path = os.path.join(Utils.unicode(parent_item_path), Utils.unicode(changed_item_name)) change_type = 'create' if is_folder: change_type += '_folder' new_path = os.path.join(new_path, '') if parent_id == 'root-folder' and KodiUtils.get_addon_setting( 'clean_folder') == 'true' and KodiUtils.file_exists( new_path): if not Utils.remove_folder(new_path): error = self._common_addon.getLocalizedString( 32066) % new_path KodiUtils.show_notification(error) Logger.debug(error) if not KodiUtils.file_exists(new_path): Logger.debug('creating folder: %s' % (new_path, )) if not KodiUtils.mkdir(new_path): change_type += '_retry' Logger.debug('unable to create folder %s' % (new_path, )) else: change_type += '_ignored' Logger.debug('folder %s already exists' % (new_path, )) else: download_artwork = 'download_artwork' in export and export[ 'download_artwork'] is_download = changed_item_extension \ and ( changed_item_extension in ['strm', 'nomedia'] or ( download_artwork and ( changed_item_extension in ['nfo'] or ( changed_item_extension in ['jpg', 'png'] and ( any(s in changed_item_name for s in self._artwork_file_extensions) or parent_item_info['name'] in ['.actors', 'extrafanart'] ) ) ) ) ) if is_download: Logger.debug('downloading file: %s' % (new_path, )) change_type = 'download_file' cloud_size = Utils.get_safe_value(change, 'size', 0) local_size = KodiUtils.file(new_path).size() if cloud_size != local_size: Logger.debug( 'Download requested. File changed: Local file size (%s) - cloud file size (%s)' % ( Utils.str(local_size), Utils.str(cloud_size), )) if not ExportManager.download(change, new_path, self.provider): change_type += "_retry" Logger.debug('Unable to download file: %s' % (new_path, )) else: change_type += '_ignored' Logger.debug( 'Download ignored: Local file size (%s) is equal to cloud file size (%s)' % ( Utils.str(local_size), Utils.str(cloud_size), )) else: is_stream_file = (('video' in change or (changed_item_extension and changed_item_extension in self._video_file_extensions)) and content_type == 'video') \ or (('audio' in change or (changed_item_extension and changed_item_extension in self._audio_file_extensions)) and content_type == 'audio') if is_stream_file: change_type += '_file' if KodiUtils.get_addon_setting( 'no_extension_strm') == 'true': new_path = Utils.remove_extension(new_path) new_path += ExportManager._strm_extension strm_content = ExportManager.get_strm_link( export['driveid'], change, content_type, 'plugin://%s/' % self.addonid) Logger.debug('creating strm file: %s' % (new_path, )) if not KodiUtils.file_exists( new_path) or KodiUtils.file( new_path).size() != len(strm_content): if not ExportManager.create_text_file( new_path, strm_content): change_type += '_retry' else: change_type += '_ignored' Logger.debug( 'ignoring strm creation: %s, strm file already exists. same expected size.' % (new_path, )) else: change_type = None Logger.debug('ignoring file: %s' % (new_path, )) if change_type: ExportManager.add_item_info(items_info, changed_item_id, Utils.unicode(changed_item_name), new_path, parent_id, item_type) else: Logger.debug('invalid state. no parent info found') change_type = None return change_type