Hallo
Wer kennt das nicht ?
Es gab ein Plugin-Update und dann kommt beim Öffnen des Plugins ständig ein GS weil der User-Skin plötzlich nicht mehr kompatibel ist.
Ich hätte da einen Vorschlag, wie man sowas zukünftig relativ einfach verhindern könnte.
Also keinen GS mehr nach einem Plugin-Update wegen eines veralteten, inkompatiblen User-Skin
In Ergänzung dieser Lösung für den PluginHider hab ich da folgenden aus meiner Sicht recht einfachen Vorschlag.
DMM müsste nur ein neues screen-Attribue "version" offiziell mit aufnehmen.
<screen name="..ScreenName.." version="3" position="center,120" size="820,520" ...>
(bisher erscheint im log noch "WARNING!!!!: unsupported skin attribute version=3")
Dann müsste es eine neue Standard-Funktion self.getSkinScreenVersion() geben (siehe unten), die die Version des zur Anwendung kommenden Skin-Screens ermittelt.
Hat man als Programmierer nun eine Skin-relevante Änderung am Code vorgenommen, die nicht mehr mit dem bisherigen Skin kompatibel ist, muss man nur die Screen-Version im internen Plugin-SkinScreen erhöhen und dann in __init__() mit der Funktion self.getSkinScreenVersion() noch gegenprüfen.
Stimmt die zurückgelieferte Version nicht mit der neuen Versions-Vorgabe im Plugin überein, wird der Plugin-interne Skin-Screen verwendet und nicht der veraltete, inkompatible User-SkinScreen.
Somit könnte man problemlos einen GS wegen eines veralteten, inkompatiblen SkinScreens verhindern
Der User kann das aktualisierte Plugin somit weiterhin nutzen und der Skinner hat Zeit zum Nachziehen des Skinupdates.
Das ganze funktioniert jetzt schon mit dem nachfolgenden Code.
Es wäre nur schöner, wenn DMM diese neue Funktionalität allgemeingültig in ihren Quellcode aufnimmt.
class Plugin...Name...(Screen):
skin = """<screen name="Plugin...Name..." version="3" position="center,170" size="1200,820" title="Plugin...Title...">
<ePixmap ...
...
</screen>"""
def __init__(self, session):
Screen.__init__(self, session)
skin_version = self.getSkinScreenVersion()
if skin_version != "3":
self.skinName = self.skinName + "_load_own_from_Plugin"
...
...
Alles anzeigen
Function self.getSkinScreenVersion():
def getSkinScreenVersion(self):
from skin import lookupScreen
try:
myscreen, path = lookupScreen(self.skinName, getDesktop(0).getStyleID())
skinScreen_version = None
if myscreen is not None:
print "=== userscreen found for:", self.skinName
for item in myscreen.items():
print "=== item:", item[0], item[1]
if item[0].lower() =="version":
skinScreen_version = item[1]
break
return skinScreen_version
except:
import traceback
traceback.print_exc()
Alles anzeigen