Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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()
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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()
Exemplo n.º 7
0
 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