Example #1
0
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
Example #2
0
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
Example #3
0
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,&quot;%s&quot;,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(
                            '&', '&amp;')  # Anpassung an Favorit-Schema
                        merk = '<merk name="%s" ordner="%s" thumb="%s" Plot="%s">ActivateWindow(10025,&quot;%s&quot;,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)
Example #4
0
# 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
Example #5
0
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('&', '&amp;') # Anpassung an Favorit-Schema
		merk = '<merk name="%s" thumb="%s" Plot="%s">ActivateWindow(10025,&quot;%s&quot;,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)	
Example #6
0
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('&', '&amp;')  # Anpassung an Favorit-Schema
        merk = '<merk name="%s" ordner="%s" thumb="%s" Plot="%s">ActivateWindow(10025,&quot;%s&quot;,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(
                            '&', '&amp;')  # Anpassung an Favorit-Schema
                        merk = '<merk name="%s" ordner="%s" thumb="%s" Plot="%s">ActivateWindow(10025,&quot;%s&quot;,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)