from sync.sync_statistics import SyncStatistics from sync.sync_task import SyncTask from sync.pull import Pull from sync.push import Push from sync.synchronize import Synchronize from datetime import datetime from plex import Plex from plex_activity import Activity import gc import threading import traceback import time import uuid L, LF = localization('sync.manager') log = Logger('sync.manager') HANDLERS = [Pull, Push, Synchronize] # Maps interval option labels to their minute values (argh..) INTERVAL_MAP = { 'Disabled': None, '15 Minutes': 15, '30 Minutes': 30, 'Hour': 60, '3 Hours': 180, '6 Hours': 360, '12 Hours': 720, 'Day': 1440, 'Week': 10080,
from core.helpers import timestamp, pad_title, plural, get_filter, normalize from core.localization import localization from core.logger import Logger from sync.sync_manager import SyncManager from plugin.core.constants import PLUGIN_PREFIX from ago import human from datetime import datetime from plex import Plex L, LF = localization('interface.sync_menu') log = Logger('interface.sync_menu') # NOTE: pad_title(...) is used as a "hack" to force the UI to use 'media-details-list' @route(PLUGIN_PREFIX + '/sync') def SyncMenu(refresh=None): oc = ObjectContainer(title2=L('sync_menu:title'), no_history=True, no_cache=True) all_keys = [] create_active_item(oc) oc.add(DirectoryObject( key=Callback(Synchronize), title=pad_title('Synchronize'), summary=get_task_status('synchronize'), thumb=R("icon-sync.png") ))
from core.localization import localization from core.logger import Logger from plugin.core.constants import PLUGIN_PREFIX from plugin.core.filters import Filters from plugin.core.helpers.variable import normalize from plugin.managers.account import AccountManager from plugin.models import Account, SyncResult from plugin.sync import SyncData, SyncMode from plugin.sync.main import Sync, QueueError from ago import human from datetime import datetime from plex import Plex L, LF = localization('interface.m_sync') log = Logger('interface.m_sync') # NOTE: pad_title(...) is used to force the UI to use 'media-details-list' @route(PLUGIN_PREFIX + '/sync/accounts') def AccountsMenu(refresh=None): oc = ObjectContainer( title2=L('accounts:title'), no_cache=True ) # Active sync status Active.create(