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 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_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 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 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: msg1 = u"Eintrag hinzugefügt" merkliste = py2_decode(merkliste) + merk + "\n" #item_cnt = item_cnt + 1 # Merkliste + Ordnerinfo + Ordner + Ordnerwahl: 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 else: PLog("xbmcvfs_fname: " + fname) f = xbmcvfs.File(fname, 'w') # extern - Share if PYTHON2: f = xbmcvfs.File(fname, 'w') 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 except Exception as exception: PLog(str(exception)) msg1 = u"Problem Merkliste" err_msg = str(exception) return msg1, err_msg, str(item_cnt) 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: 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: msg1 = u"Eintrag gelöscht" if '//' not in fname: err_msg = RSave(fname, merkliste, withcodec=True) # Merkliste speichern PLog(msg1) 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 except Exception as exception: PLog(str(exception)) msg1 = u"Problem Merkliste" err_msg = str(exception) return msg1, err_msg, str(item_cnt) 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)