def save_merkliste(fname, merkliste, my_ordner): PLog('save_merkliste:') # Merkliste + Ordnerinfo + Ordner: err_msg = '' # gefüllt von Aufrufer my_ordner = " ".join(my_ordner) if my_ordner == '': my_ordner = ORDNER ordner_info = "\n".join(ORDNER_INFO) merkliste = "<merkliste>\n%s</merkliste>\n\n%s\n\n<ordnerliste>%s</ordnerliste>\n" %\ (merkliste, ordner_info, my_ordner) try: if '//' not in fname: err_msg = RSave(fname, merkliste, withcodec=True) # Merkliste speichern if err_msg: ret = False else: ret = True else: PLog("xbmcvfs_fname: " + fname) f = xbmcvfs.File(fname, 'w') # extern - Share ret = f.write(merkliste) f.close() PLog("xbmcvfs_ret: " + str(ret)) if ret: sync_list_intern(src_file=fname, dest_file=WATCHFILE) # Synchronisation return ret, err_msg except Exception as exception: ret = False PLog(str(exception)) err_msg = str(exception) return ret, err_msg
def get_plugin_url(url): PLog("get_plugin_url:") url_org = url # Base64-Kodierung wird nicht mehr verwendet (addDir in Modul util), Code verbleibt # hier bis auf Weiteres if 'plugin://plugin' not in url: # Base64-kodierte Plugin-Url in ActivateWindow b64_clean = convBase64( url) # Dekodierung mit oder ohne padding am Ende if b64_clean == False: # Fehler, Orig.-Url zurück return url try: b64_clean = unquote_plus(b64_clean) # unquote aus addDir-Call b64_clean = unquote_plus(b64_clean) # unquote aus Kontextmenü #PLog(b64_clean) CallFunction = stringextract("&dirID=", "&", b64_clean) PLog('CallFunction: ' + CallFunction) if CallFunction in CallFunctions: # Parameter Merk='true' anhängen new_url = b64_clean[:-1] # cut } am Ende fparams new_url = "%s, 'Merk': 'true'}" % new_url PLog("CallFunction_new_url: " + new_url) url = quote_plus(new_url) url = base64.b64encode(url) except Exception as exception: PLog(str(exception)) url = url_org return url
def check_ordner(my_ordner): PLog("check_ordner: %d" % len(my_ordner)) PLog(my_ordner) if SETTINGS.getSetting('pref_merkordner') == 'true': if len(my_ordner) == 0: heading = "Problem mit der Ordnerliste" msg1 = "Die Ordnerliste ist leer oder fehlerhaft." msg2 = "Es wird die Basis-Ordner-Liste verwendet." msg3 = u"Die Ordnerliste wird nach Einfügen oder Löschen erneuert." MyDialog(msg1, msg2, msg3, heading=heading) my_ordner = ORDNER my_ordner = sorted(my_ordner, key=str.lower) return my_ordner
def sync_list_intern(src_file, dest_file): PLog('sync_list_intern:') # 1. Vorprüfung: Setting Sync / externe Merkliste if SETTINGS.getSetting('pref_merksync') == 'false' or SETTINGS.getSetting( 'pref_merkextern') == 'false': PLog("Sync_OFF") return # 2. Vorprüfung: externe Merkliste ist gleichzeitig interne Merkliste? if src_file == WATCHFILE: PLog("Sync_Block_WATCHFILE") return f = xbmcvfs.File(src_file) s1 = f.size() f.close() ret1 = False ret2 = False if s1 > 100: # Mindestbreite bis dirID=, Eintrag immer > 100 Zeichen ret1 = xbmcvfs.delete(dest_file) PLog('xbmcvfs.delete: ' + str(ret1)) ret2 = xbmcvfs.copy(src_file, dest_file) PLog('xbmcvfs.copy: ' + str(ret2)) f = xbmcvfs.File(dest_file) s2 = f.size() f.close() # Größenvergleich PLog("s1: %d, s2: %d" % (s1, s2)) if ret1 and ret2 and s2 == s1: # ohne Rückgabe PLog("Sync_OK") else: PLog("Sync_Error, s1: %d" % s1) return
def convBase64(s): PLog('convBase64:') PLog(s[:80]) try: if len(s.strip()) % 4 == 0: if PYTHON2: s = base64.decodestring(s) else: s = base64.b64decode(s) s = s.decode("utf-8") return unquote_plus(s) except Exception as exception: PLog(str(exception)) return False
def sync_list_intern(src_file, dest_file): PLog('sync_list_intern:') # Vorprüfung Setting Sync / externe Merkliste if SETTINGS.getSetting('pref_merksync') == 'false' or SETTINGS.getSetting( 'pref_merkextern') == 'false': PLog("Sync_OFF") return f = xbmcvfs.File(src_file) s1 = f.size() f.close() if s1 > 100: # Mindestbreite bis dirID=, Eintrag immer größer ret1 = xbmcvfs.delete(dest_file) PLog('xbmcvfs.delete: ' + str(ret1)) ret2 = xbmcvfs.copy(src_file, dest_file) PLog('xbmcvfs.copy: ' + str(ret2)) f = xbmcvfs.File(dest_file) s2 = f.size() f.close() # Größenvergleich PLog("s1: %d, s2: %d" % (s1, s2)) if ret1 and ret2 and s2 == s1: # ohne Rückgabe PLog("Sync_OK") else: PLog("Sync_Error") return
def get_new_name(iname, add=''): PLog("get_new_name:") line = iname if add: line = iname + add new_name = get_keyboard_input(line=line, head=u'Merklisten-Eintrag umbenennen') if new_name.strip() != '': return new_name else: return iname
def watch_filter(delete=''): PLog("watch_filter:") if delete: icon = R(ICON_DIR_WATCH) PLog('watch_filter: entferne_Filter') msg1 = 'Filter entfernen:' if os.path.isfile(MERKFILTER): os.remove(MERKFILTER) if os.path.isfile(MERKACTIVE) == True: # Merkliste aktiv? xbmc.executebuiltin('Container.Refresh') msg2 = "Filter wurde entfernt" else: msg2 = "kein Filter gefunden" xbmcgui.Dialog().notification(msg1, msg2, icon, 5000) return my_items, my_ordner = ReadFavourites('Merk') # Ordnerliste holen my_ordner = check_ordner(my_ordner) my_ordner.insert(0, u"*ohne Zuordnung*") preselect = 0 # Vorauswahl if os.path.isfile(MERKFILTER) == True: myfilter = RLoad(MERKFILTER, abs_path=True) PLog('myfilter: ' + myfilter) if myfilter: # leer möglich preselect = my_ordner.index(myfilter) ret = xbmcgui.Dialog().select(u'Ordner wählen (Abbrechen = ohne Filter)', my_ordner, preselect=preselect) ordner = '' if ret >= 0: ordner = my_ordner[ret] PLog("ordner: " + ordner) # RunScript + RunPlugin hier fehlgeschlagen, daher # Filterung via Triggerdatei MERKFILTER err_msg = RSave(MERKFILTER, ordner, withcodec=True) xbmc.executebuiltin('Container.Refresh')
def clean_Plot(Plot): PLog("clean_Plot:") # PLog(Plot) # Debug if '[COLOR' in Plot: # Mark. hier immer fett+farbig items = blockextract('[B]', Plot, '[/B]') for item in items: if 'Ordner: ' in item or 'Modul: ' in item: Plot = Plot.replace(item, '') Plot = Plot.replace('||||||||', '') # LF-Ruinen entfernen (4 Zeilen-Mark.) Plot = Plot.replace('||||||', '') # LF-Ruinen entfernen (3 Zeilen-Mark.) # PLog(Plot) # Debug return Plot
def check_ordner(ordner, my_ordner_list, my_items): PLog("check_ordner:") exist=False; link_cnt=0 if ordner in my_ordner_list == False: # Ordner ist nicht vorh. + nicht verknüpft return exist, link_cnt else: exist=True; link_list=[] # link_list bisher nicht genutzt for item in my_items: oname = stringextract('ordner="', '"', item) if oname == ordner: iname = stringextract('name="', '"', item) link_cnt = link_cnt + 1 link_list.append(iname) # PLog(link_list) # Debug return exist, link_cnt
def save_merkliste(merkliste, my_ordner): PLog('save_merkliste:') fname = WATCHFILE if SETTINGS.getSetting( 'pref_merkextern') == 'true': # externe Merkliste gewählt? fname = SETTINGS.getSetting('pref_MerkDest_path') if fname == '' or xbmcvfs.exists(fname) == False: PLog("merkextern: %s, %d" % (fname, xbmcvfs.exists(fname))) msg1 = u"Merkliste nicht gefunden\nBitte Settings überprüfen" return False, err_msg PLog(fname) # Merkliste + Ordnerinfo + Ordner: err_msg = '' # gefüllt von Aufrufer if my_ordner == '' or my_ordner == []: # Fallback Basis-Ordner-Liste my_ordner = ORDNER my_ordner = " ".join(my_ordner) ordner_info = "\n".join(ORDNER_INFO) merkliste = "<merkliste>\n%s</merkliste>\n\n%s\n\n<ordnerliste>%s</ordnerliste>\n" %\ (merkliste, ordner_info, my_ordner) try: if '//' not in fname: err_msg = RSave(fname, merkliste, withcodec=True) # Merkliste speichern if err_msg: ret = False else: ret = True else: PLog("xbmcvfs_fname: " + fname) f = xbmcvfs.File(fname, 'w') if PYTHON2: ret = f.write(merkliste) f.close() else: # Python3: Bytearray buf = bytearray() buf.extend(merkliste.encode()) ret = f.write(buf) f.close() PLog("xbmcvfs_ret: " + str(ret)) if ret: sync_list_intern(src_file=fname, dest_file=WATCHFILE) # Synchronisation return ret, err_msg except Exception as exception: ret = False PLog(str(exception)) err_msg = str(exception) return ret, err_msg
def Watch_items(action, name, thumb='', Plot='', url=''): PLog('Watch: ' + action) url = unquote_plus(url) PLog(unquote_plus(url)[100:]) # url in fparams zusätzlich quotiert PLog(name) PLog(thumb) PLog(Plot) item_cnt = 0 err_msg = '' doppler = False fname = WATCHFILE if SETTINGS.getSetting( 'pref_merkextern') == 'true': # externe Merkliste gewählt? fname = SETTINGS.getSetting('pref_MerkDest_path') if fname == '' or xbmcvfs.exists(fname) == False: PLog("merkextern: %s, %d" % (fname, xbmcvfs.exists(fname))) msg1 = u"Merkliste nicht gefunden" err_msg = u"Bitte Settings überprüfen" return msg1, err_msg, str(item_cnt) #------------------ if action == 'add': url = get_plugin_url(url) # url aus ev. Base64-Kodierung my_items, my_ordner = ReadFavourites( 'Merk') # 'utf-8'-Decoding in ReadFavourites my_ordner = check_ordner(my_ordner) merkliste = '' if len(my_items): PLog('my_items: ' + my_items[0]) # 1. Eintrag for item in my_items: # Liste -> String iname = stringextract('name="', '"', item) PLog('Name: %s, IName: %s' % (py2_decode(name), py2_decode(iname))) if py2_decode(iname) == py2_decode(name): # Doppler vermeiden doppler = True PLog('Doppler') break merkliste = merkliste + item + "\n" item_cnt = item_cnt + 1 else: item = '' ordner = '' if SETTINGS.getSetting('pref_merkordner') == 'true': # Ordner-Auswahl if doppler == False: if len(my_ordner) == 0: # leer: Initialisierung my_ordner = ORDNER my_ordner.insert(0, u"*ohne Zuordnung*") ret = xbmcgui.Dialog().select(u'Ordner wählen', my_ordner, preselect=0) if ret > 0: ordner = my_ordner[ret] else: ordner = '' # ohne Zuordnung=leer del my_ordner[0] # Neuer Eintrag: url = url.replace('&', '&') # Anpassung an Favorit-Schema merk = '<merk name="%s" ordner="%s" thumb="%s" Plot="%s">ActivateWindow(10025,"%s",return)</merk>' \ % (name, ordner, thumb, Plot, url) PLog('merk: ' + merk) item_cnt = item_cnt + 1 if doppler == False: merkliste = py2_decode(merkliste) + merk + "\n" #item_cnt = item_cnt + 1 # Merkliste + Ordnerinfo + Ordner + Ordnerwahl: ret, err_msg = save_merkliste(fname, merkliste, my_ordner) msg1 = u"Eintrag hinzugefügt" if ret == False: PLog(err_msg) msg1 = u"Problem Merkliste" else: msg1 = u"Eintrag schon vorhanden" #------------------ if action == 'del': my_items, my_ordner = ReadFavourites( 'Merk') # 'utf-8'-Decoding in ReadFavourites my_ordner = check_ordner(my_ordner) if len(my_items): PLog('my_items: ' + my_items[-1]) merkliste = '' deleted = False for item in my_items: # Liste -> String iname = stringextract('name="', '"', item) # unicode iname = py2_decode(iname) name = py2_decode(name) PLog('Name: %s, IName: %s' % (name, iname)) if name == iname: deleted = True # skip Satz = löschen continue item_cnt = item_cnt + 1 merkliste = py2_decode(merkliste) + py2_decode(item) + "\n" if deleted: # Merkliste + Ordnerinfo + Ordner + Ordnerwahl: ret, err_msg = save_merkliste(fname, merkliste, my_ordner) msg1 = u"Eintrag gelöscht" if ret == False: PLog(err_msg) msg1 = u"Problem Merkliste" else: msg1 = "Eintrag nicht gefunden." err_msg = u"Merkliste unverändert." PLog(msg1) #------------------ if action == 'folder': # Ordner ändern my_items, my_ordner = ReadFavourites( 'Merk') # 'utf-8'-Decoding in ReadFavourites my_ordner = check_ordner(my_ordner) merkliste = '' ret = True for item in my_items: # Liste -> String iname = stringextract('name="', '"', item) # unicode iname = py2_decode(iname) name = py2_decode(name) PLog('Name: %s, IName: %s' % (name, iname)) if name == iname: if SETTINGS.getSetting( 'pref_merkordner') == 'true': # Ordner eingeschaltet? oldordner = stringextract('ordner="', '"', item) if len(my_ordner) == 0: # leer: Initialisierung my_ordner = ORDNER my_ordner.insert(0, u"*ohne Zuordnung*") ret = xbmcgui.Dialog().select(u'Ordner wählen', my_ordner, preselect=0) ordner = oldordner # Fallback: vorh. Ordner if ret >= 0: ordner = my_ordner[ret] if ret == 0: # ohne Zuordnung=leer ordner = '' oldordner = 'dummy' # dummy -> '' PLog("ordner: %s, oldordner: %s" % (ordner, oldordner)) del my_ordner[0] # "ohne Zuordnung" löschen if ordner != oldordner: # Ordner im Eintrag aktualisieren: PLog("url: " + url[:100]) url = get_plugin_url( url) # url aus ev. Base64-Kodierung PLog("url: " + url[:100]) url = url.replace( '&', '&') # Anpassung an Favorit-Schema merk = '<merk name="%s" ordner="%s" thumb="%s" Plot="%s">ActivateWindow(10025,"%s",return)</merk>' \ % (name, ordner, thumb, Plot, url) PLog('merk: ' + merk) item = merk item_cnt = item_cnt + 1 merkliste = py2_decode(merkliste) + py2_decode(item) + "\n" if ordner != oldordner: ret, err_msg = save_merkliste(fname, merkliste, my_ordner) if ret: # Merkliste gespeichert if ordner == oldordner: msg1 = u"Ordner unverändert" else: msg1 = u"Ordner geändert" err_msg = u"gewählter Ordner: %s" % ordner else: # Problem beim Speichern msg1 = "Problem Merkliste" # err_msg s. save_merkliste return msg1, err_msg, str(item_cnt)
USERDATA = xbmc.translatePath("special://userdata") ADDON_DATA = os.path.join("%sardundzdf_data") % USERDATA if check_AddonXml('"xbmc.python" version="3.0.0"'): ADDON_DATA = os.path.join("%s", "%s", "%s") % (USERDATA, "addon_data", ADDON_ID) WATCHFILE = os.path.join("%s/merkliste.xml") % ADDON_DATA DICTSTORE = os.path.join("%s/Dict") % ADDON_DATA # Marker: ShowFavs(Merkliste) ist aktiv, gesetzt in ShowFavs, # gelöscht bei jedem Start des Haupt-PRG's MERKACTIVE = os.path.join(DICTSTORE, 'MerkActive') MERKFILTER = os.path.join(DICTSTORE, 'Merkfilter') ICON = 'icon.png' # ARD + ZDF ICON_DIR_WATCH = "Dir-watch.png" PLog('Script merkliste.py geladen') # Basis-Ordner-Liste (wird in Merkliste eingefügt, falls noch ohne Ordnerliste, # einschl. ORDNER_INFO - Quelle ZDF-Rubriken +Audio+Talk): ORDNER = [ "Audio", "Bilderserien", "Comedy/Show", "Doku/Wissen", "Filme", "Geschichte", "Nachrichten", "Kinder/ZDFtivi", "Krimi", "Kultur" "TV-Livestreams", "Politik/Gesellschaft", "Serien", "Sport", "Talk", "Verbraucher" ] ORDNER_INFO = [ u"# die folgende Ordnerliste kann mit einem Editor geändert werden.", u'# Nutzung: in Settings "Ordner für Merkliste verwenden wählen."', u"# Regeln:", u"# Sie darf keine Kommentarzeichen (#) enthalten.", u"# Die einzelnen Begriffe sind mit einem Leerzeichen zu trennen.", u'# Für zusammengesetzte Begriffe ist das "&"- oder "/"-Zeichen zu verwenden',
def Watch(action, name, thumb='', Plot='', url=''): PLog('Watch: ' + action) # CallFunctions: Funktionen, die Videos direkt oder indirekt (isPlayable) aufrufen. # Ist eine der Funktionen in der Plugin-Url enthalten, wird der Parameter Merk='true' # für PlayVideo bzw. zum Durchreichen angehängt. # Funktioniert nicht mit Modul funk CallFunctions = ["PlayVideo", "ZDF_getVideoSources", "resources.lib.zdfmobile.ShowVideo", "resources.lib.zdfmobile.PlayVideo", "SingleSendung", "ARDStartVideoStreams", "ARDStartVideoMP4", "SenderLiveResolution", "resources.lib.phoenix.SingleBeitrag" ] url = unquote_plus(url) PLog(unquote_plus(url)[100:]) # url in fparams zusätzlich quotiert PLog(name); PLog(thumb); PLog(Plot); fname = WATCHFILE item_cnt = 0; err_msg = '' doppler = False if action == 'add': # Base64-Kodierung wird nicht mehr verwendet (addDir in Modul util), Code verbleibt # hier bis auf Weiteres if 'plugin://plugin' not in url: # Base64-kodierte Plugin-Url in ActivateWindow b64_clean= convBase64(url) # Dekodierung mit oder ohne padding am Ende b64_clean=unquote_plus(b64_clean) # unquote aus addDir-Call b64_clean=unquote_plus(b64_clean) # unquote aus Kontextmenü #PLog(b64_clean) CallFunction = stringextract("&dirID=", "&", b64_clean) PLog('CallFunction: ' + CallFunction) if CallFunction in CallFunctions: # Parameter Merk='true' anhängen new_url = b64_clean[:-1] # cut } am Ende fparams new_url = "%s, 'Merk': 'true'}" % new_url PLog("CallFunction_new_url: " + new_url) url = quote_plus(new_url) url = base64.b64encode(url) url = url.replace('&', '&') # Anpassung an Favorit-Schema merk = '<merk name="%s" thumb="%s" Plot="%s">ActivateWindow(10025,"%s",return)</merk>' \ % (name, thumb, Plot, url) PLog('merk: ' + merk) my_items = ReadFavourites('Merk') # 'utf-8'-Decoding in ReadFavourites merkliste = '' if len(my_items): PLog('my_items: ' + my_items[0]) for item in my_items: # Liste -> String iname = stringextract('name="', '"', item) PLog('Name: %s, IName: %s' % (py2_decode(name), py2_decode(iname))) if py2_decode(iname) == py2_decode(name):# Doppler vermeiden doppler = True PLog('Doppler') break merkliste = merkliste + item + "\n" item_cnt = item_cnt + 1 else: # 1. Eintrag pass item_cnt = item_cnt + 1 if doppler == False: msg1 = u"Eintrag hinzugefügt" PLog(type(merkliste)); PLog(type(merk)); merkliste = py2_decode(merkliste) + merk + "\n" #item_cnt = item_cnt + 1 merkliste = "<merkliste>\n%s</merkliste>" % merkliste err_msg = RSave(fname, merkliste, withcodec=True) # Merkliste speichern else: msg1 = u"Eintrag schon vorhanden" if action == 'del': my_items = ReadFavourites('Merk') # 'utf-8'-Decoding in ReadFavourites if len(my_items): PLog('my_items: ' + my_items[-1]) PLog(type(name)); merkliste = '' deleted = False for item in my_items: # Liste -> String iname = stringextract('name="', '"', item) # unicode iname = py2_decode(iname) name = py2_decode(name) PLog('Name: %s, IName: %s' % (name, iname)) if name == iname: deleted = True # skip Satz = löschen continue item_cnt = item_cnt + 1 merkliste = py2_decode(merkliste) + py2_decode(item) + "\n" if deleted: err_msg = RSave(fname, merkliste, withcodec=True) # Merkliste speichern msg1 = u"Eintrag gelöscht" PLog(msg1) else: msg1 = "Eintrag nicht gefunden." err_msg = u"Merkliste unverändert." PLog(msg1) return msg1, err_msg, str(item_cnt)
def do_folder(): PLog("do_folder:") dialog = xbmcgui.Dialog() head = 'Merklisten-Ordner bearbeiten' slist = [ u'INFO: aktuelle Liste der Merklisten-Ordner', u'INFO: Regeln für neue Merklisten-Ordner', u'Ordner entfernen (nur möglich, wenn nicht verknüpft)', u'Neuen Ordner hinzufügen (bitte die Regeln beachten - s.o.)', u'[COLOR red]RESET:[/COLOR] Basis-Ordnerliste wiederherstellen' ] while 1: # Dauerschleife bis Abbruch ret = xbmcgui.Dialog().select(head, slist) PLog("ret: %d" % ret) if ret == -1 or ret == None: break icon = R(ICON_DIR_WATCH) my_items, my_ordner_list = ReadFavourites('Merk') my_ordner_list = check_ordnerlist( my_ordner_list) # Fallback Basis-Ordner-Liste my_ordner_list = sorted(my_ordner_list) merkliste = " ".join(my_items) # speichern als String merkliste = py2_decode(merkliste) #----------------------------------------------------- # Ordner listen if ret == 0: my_ordner_list = "\n".join(my_ordner_list) ret1 = dialog.textviewer(slist[0], my_ordner_list) if ret1 == None: continue PLog("ret1: %d" % ret1) #----------------------------------------------------- # Regeln für neue Ordner listen if ret == 1: my_info_list = "\n".join(ORDNER_INFO) ret2 = dialog.textviewer(slist[1], my_info_list) if ret2 == None: continue PLog("ret2: %d" % ret2) #----------------------------------------------------- # Ordner entfernen if ret == 2: ret3 = xbmcgui.Dialog().select(slist[2], my_ordner_list) PLog("ret3: %d" % ret3) if ret3 == -1: # Abbruch, Esc continue ordner = '' ordner = my_ordner_list[ret3] PLog("ordner: " + ordner) msg1 = u"Ordner [COLOR red]%s[/COLOR] wirklich löschen?" % ordner ret4 = MyDialog(msg1=msg1, msg2='', msg3='', ok=False, cancel='Abbruch', yes='JA', heading=slist[1]) PLog("ret4: %d" % ret4) if ret4 == 1: exist, link_cnt = check_ordner( ordner, my_ordner_list, my_items) # Abgleich Ordner mit Ordnerliste if link_cnt > 0: msg2 = '' msg3 = '' msg1 = u"Ordner [COLOR red]%s[/COLOR] ist bereits verknüpft." % ordner if link_cnt: msg2 = u"Anzahl der Verknüpfungen: %d" % link_cnt msg3 = u"Ordner kann nicht entfernt werden." MyDialog(msg1, msg2, msg3) else: my_ordner_list.remove(ordner) ret, err_msg = save_merkliste(merkliste, my_ordner_list) # PLog(my_ordner_list) # Debug msg1 = u'Merklisten-Ordner:' msg2 = u"[COLOR red]%s[/COLOR] entfernt" % ordner if ret == False: msg2 = err_msg xbmcgui.Dialog().notification(msg1, msg2, icon, 5000) #----------------------------------------------------- # Ordner hinzufügen if ret == 3: new = get_keyboard_input('Neuen Ordner hinzufügen') # Modul util if new == None or new.strip() == '': continue new_org = py2_decode(new) PLog(new) # kein 100%iger Schutz erforderlich: no_chars = [ u'#', u' ', u'*', u'+', u'|', u',', u'!', u'"', u'$', u'%', u'(', u')', u'?', u'\\', u'~', u'\'', u';', u':', u'.', u'^', u'°' ] notsafe = False for char in no_chars: if char in new: if char == ' ': char = 'Leerzeichen' notsafe = True msg1 = u'unerlaubtes Zeichen: [COLOR red]%s[/COLOR]' % char MyDialog(msg1, '', '') break if notsafe: continue my_ordner_list.append(new) ret, err_msg = save_merkliste(merkliste, my_ordner_list) #PLog(my_ordner_list) # Debug msg1 = u'Merklisten-Ordner:' msg2 = u"[COLOR red]%s[/COLOR] hinzugefügt" % new if ret == False: msg2 = err_msg xbmcgui.Dialog().notification(msg1, msg2, icon, 5000) #----------------------------------------------------- # Basis-Ordnerliste wiederherstellen if ret == 4: msg1 = u"Basis-Ordnerliste wirklich wiederherstellen?" msg2 = u"Eigene Ordner und das Filtern damit entfallen." msg3 = u"Verknüpfungen mit diesen Ordnern bleiben aber erhalten." ret5 = MyDialog(msg1, msg2, msg3, ok=False, cancel='Abbruch', yes='JA', heading=slist[4]) PLog("ret5: %d" % ret5) if ret5 == 1: my_ordner_list = [] ret, err_msg = save_merkliste(merkliste, my_ordner_list) #PLog(my_ordner_list) # Debug msg1 = u'Merklisten-Ordner:' msg2 = u"Basis-Ordnerliste wiederhergestellt" if ret == False: msg2 = err_msg xbmcgui.Dialog().notification(msg1, msg2, icon, 5000) return
def Watch_items(action, name, thumb='', Plot='', url=''): PLog('Watch: ' + action) url = unquote_plus(url) PLog(unquote_plus(url)[100:]) # url in fparams zusätzlich quotiert PLog(name) PLog(thumb) PLog(Plot) item_cnt = 0 err_msg = '' doppler = False # Umschaltung intern/extern + Dateicheck auch in ReadFavourites + save_merkliste, # hier nur Dateicheck relevant: fname = WATCHFILE if SETTINGS.getSetting( 'pref_merkextern') == 'true': # externe Merkliste gewählt? fname = SETTINGS.getSetting('pref_MerkDest_path') if fname == '' or xbmcvfs.exists(fname) == False: PLog("merkextern: %s, %d" % (fname, xbmcvfs.exists(fname))) msg1 = u"Merkliste nicht gefunden" err_msg = u"Bitte Settings überprüfen" return msg1, err_msg, str(item_cnt) #------------------ if action == 'add': url = get_plugin_url(url) # url aus ev. Base64-Kodierung my_items, my_ordner = ReadFavourites( 'Merk') # 'utf-8'-Decoding in ReadFavourites my_ordner = check_ordnerlist(my_ordner) merkliste = '' if len(my_items): PLog('my_items: ' + my_items[0]) # 1. Eintrag for item in my_items: # Liste -> String iname = stringextract('name="', '"', item) name = py2_decode(name) iname = py2_decode(iname) PLog('Name: %s, IName: %s' % (name, iname)) if iname == name: # Doppler vermeiden doppler = True msg1 = u"Eintrag existiert bereits - neuen Eintrag umbenennen?" msg2 = u"Info:\nin der Merkliste lassen sich alle Einträge via" msg3 = u"Kontextmenü nachträglich umbenennen." head = "Merkliste: neuer Eintrag" ret = MyDialog(msg1=msg1, msg2=msg2, msg3=msg3, ok=False, cancel='Abbruch', yes='UMBENENNEN', heading=head) if ret == 1: new_name = get_new_name( iname, add='') # <- neue Bez. oder iname if new_name != iname: # alte -> neue Bez. name = new_name doppler = False if doppler == True: PLog('Doppler') break merkliste = merkliste + item + "\n" item_cnt = item_cnt + 1 else: item = '' ordner = '' if SETTINGS.getSetting('pref_merkordner') == 'true': # Ordner-Auswahl if doppler == False: if len(my_ordner) == 0: # leer: Initialisierung my_ordner = ORDNER my_ordner.insert(0, u"*ohne Zuordnung*") ret = xbmcgui.Dialog().select( u'Ordner wählen (Abbrechen: ohne Zuordnung)', my_ordner, preselect=0) if ret > 0: ordner = my_ordner[ret] else: ordner = '' # ohne Zuordnung=leer del my_ordner[0] # Neuer Eintrag: url = url.replace('&', '&') # Anpassung an Favorit-Schema merk = '<merk name="%s" ordner="%s" thumb="%s" Plot="%s">ActivateWindow(10025,"%s",return)</merk>' \ % (name, ordner, thumb, Plot, url) PLog('merk: ' + merk) item_cnt = item_cnt + 1 if doppler == False: merkliste = py2_decode(merkliste) + merk + "\n" #item_cnt = item_cnt + 1 # Merkliste + Ordnerinfo + Ordner + Ordnerwahl: ret, err_msg = save_merkliste(merkliste, my_ordner) msg1 = u"Eintrag hinzugefügt" if ret == False: PLog(err_msg) msg1 = u"Problem Merkliste" else: msg1 = u"Eintrag schon vorhanden" #------------------ if action == 'del': my_items, my_ordner = ReadFavourites( 'Merk') # 'utf-8'-Decoding in ReadFavourites my_ordner = check_ordnerlist(my_ordner) if len(my_items): PLog('my_items: ' + my_items[-1]) merkliste = '' deleted = False for item in my_items: # Liste -> String iname = stringextract('name="', '"', item) # unicode iname = py2_encode(iname) name = py2_encode(name) PLog('Name: %s, IName: %s' % (name, iname)) if name == iname: deleted = True # skip Satz = löschen continue item_cnt = item_cnt + 1 merkliste = py2_decode(merkliste) + py2_decode(item) + "\n" if deleted: # Merkliste + Ordnerinfo + Ordner + Ordnerwahl: ret, err_msg = save_merkliste(merkliste, my_ordner) msg1 = u"Eintrag gelöscht" if ret == False: PLog(err_msg) msg1 = u"Problem Merkliste" else: msg1 = "Eintrag nicht gefunden." err_msg = u"Merkliste unverändert." PLog(msg1) #------------------ if action == 'rename': my_items, my_ordner = ReadFavourites( 'Merk') # 'utf-8'-Decoding in ReadFavourites my_ordner = check_ordnerlist(my_ordner) if len(my_items): PLog('my_items: ' + my_items[-1]) merkliste = '' renamed = False for item in my_items: # Liste -> String iname = stringextract('name="', '"', item) # unicode iname = py2_decode(iname) name = py2_decode(name) PLog('Name: %s, IName: %s' % (name, iname)) if name == iname: new_name = get_new_name(iname, add='') # <- neue Bez. oder iname if new_name != iname: insert = 'name="%s"' % new_name if exist_in_list(insert, my_items) == False: item = item.replace('name="%s"' % iname, 'name="%s"' % new_name) renamed = True else: msg1 = ">%s< existiert bereits - Abbruch" % new_name MyDialog(msg1, '', '') item_cnt = item_cnt + 1 merkliste = py2_decode(merkliste) + py2_decode(item) + "\n" if renamed: # nur nach Ändern speichern # Merkliste + Ordnerinfo + Ordner + Ordnerwahl: ret, err_msg = save_merkliste(merkliste, my_ordner) msg1 = u"Eintrag umbenannt" if ret == False: PLog(err_msg) msg1 = u"Problem Merkliste" else: msg1 = u"Eintrag nicht geändert." err_msg = u"Merkliste unverändert." PLog(msg1) #------------------ if action == 'folder': # Ordner ändern my_items, my_ordner = ReadFavourites( 'Merk') # 'utf-8'-Decoding in ReadFavourites my_ordner = check_ordnerlist(my_ordner) merkliste = '' ret = True for item in my_items: # Liste -> String iname = stringextract('name="', '"', item) # unicode iname = py2_decode(iname) name = py2_decode(name) PLog('Name: %s, IName: %s' % (name, iname)) if name == iname: if SETTINGS.getSetting( 'pref_merkordner') == 'true': # Ordner eingeschaltet? oldordner = stringextract('ordner="', '"', item) if len(my_ordner) == 0: # leer: Initialisierung my_ordner = ORDNER my_ordner.insert(0, u"*ohne Zuordnung*") head = u'Ordner wählen für: %s' % (name) ret = xbmcgui.Dialog().select(head, my_ordner, preselect=0) ordner = oldordner # Fallback: vorh. Ordner if ret >= 0: ordner = my_ordner[ret] if ret == 0: # ohne Zuordnung=leer ordner = '' oldordner = 'dummy' # dummy -> '' PLog("ordner: %s, oldordner: %s" % (ordner, oldordner)) del my_ordner[0] # "ohne Zuordnung" löschen if ordner != oldordner: # Ordner im Eintrag aktualisieren: PLog("url: " + url[:100]) url = get_plugin_url( url) # url aus ev. Base64-Kodierung PLog("url: " + url[:100]) url = url.replace( '&', '&') # Anpassung an Favorit-Schema merk = '<merk name="%s" ordner="%s" thumb="%s" Plot="%s">ActivateWindow(10025,"%s",return)</merk>' \ % (name, ordner, thumb, Plot, url) PLog('merk: ' + merk) item = merk item_cnt = item_cnt + 1 merkliste = py2_decode(merkliste) + py2_decode(item) + "\n" if ordner != oldordner: ret, err_msg = save_merkliste(merkliste, my_ordner) if ret: # Merkliste gespeichert if ordner == oldordner: msg1 = u"Ordner unverändert" else: msg1 = u"Ordner geändert" err_msg = u"gewählter Ordner: %s" % ordner else: # Problem beim Speichern msg1 = "Problem Merkliste" # err_msg s. save_merkliste return msg1, err_msg, str(item_cnt)