예제 #1
0
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
예제 #2
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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
예제 #8
0
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')
예제 #9
0
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
예제 #10
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
예제 #11
0
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
예제 #12
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('&', '&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(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)
예제 #13
0
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',
예제 #14
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)	
예제 #15
0
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
예제 #16
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)