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(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 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)
# Beim Menü Favoriten (add) endet json.loads in exception PLog(str(sys.argv)) PLog(sys.argv[2]) paramstring = unquote_plus(sys.argv[2]) # PLog('params: ' + paramstring) params = dict(parse_qs(paramstring[1:])) PLog('merk_params_dict: ' + str(params)) PLog('action: ' + params['action'][0]) # hier immer action="dirList" PLog('dirID: ' + params['dirID'][0]) # PLog('fparams: ' + params['fparams'][0]) func_pars = params['fparams'][0] PLog("func_pars: " + func_pars) name = stringextract("'name': ", ',', func_pars) # für exceptions s.u. name = name.replace("'", "") try: func_pars = func_pars.replace("'", "\"") # json.loads-kompatible string-Rahmen func_pars = func_pars.replace( '\\', '\\\\') # json.loads-kompatible Windows-Pfade mydict = json.loads(func_pars) except Exception as exception: # Bsp. Hinzufügen von Favoriten err_msg = str(exception) msg3 = '' if name: msg3 = "Eintrag >%s<" % name msg1 = "dieser Eintrag kann nicht verarbeitet werden." msg2 = "Fehler: %s" % err_msg
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 # 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)