SDG Backup Drembox Enigma2
Ένα πρόσθετο ακόμα από την ομάδα μας.
Το SDGBackup δημιουργήθηκε αποκλειστικά από την ομάδα μας για τους dreambox enigma2, η δημιουργία ενός τέτοιου προσθετου χρειάζεται ειδικές γνώσεις και ο (athoik) έχει αρκετές από αυτές.
Η χρησιμότητα του προσθετου είναι να αποθηκεύεται το image σας με όλες τις ρυθμίσεις που θέλετε και να το επαναφέρεται όταν εσείς θέλετε,όπως επαναφέρουμε ένα κανονικό image
Για την λειτουργία του προσθετου χρειάζεται να έχουμε στον δεκτη σκληρό δίσκο η stick usb (η και τα δυο), η προσάρτηση τους πρέπει να είναι (/media/usb) (/media/hdd)
Το πρόσθετο διατίθεται στα image μας με αναβάθμιση του image και θα το βρείτε στο Panel+
Απ: SDG Backup Drembox Enigma2
Καλησπέρα, θέλω να κάνω κάποιες αλλαγές στο plugin, όπως να προσθέσω ελληνική μετάφραση, να βάλω τον τίτλο να εμφανίζεται αυτόματα στην οθόνη του, κτλ.
Η ερώτησή μου είναι γενική για την python και τα plugins, και όχι συγκεκριμένα για αυτό το plugin. Η προσθήκη του τίτλου στην οθόνη (screen στο skin) απ' ότι έχω δει σε άλλα plugins, μπορεί να γίνει με πολλούς διαφορετικούς τρόπους:
1.
Code:
def __init__(self, session):
...
self.title = _("SDGBackup Dreambox Enigma2")
...
2.
Code:
def __init__(self, session):
...
self.setup_title = = _("SDGBackup Dreambox Enigma2")
...
3.
Code:
def __init__(self, session):
...
self.setup_title = = _("SDGBackup Dreambox Enigma2")
Screen.setTitle(self, _(self.setup_title))
...
4.
Code:
def __init__(self, session):
...
self.setup_title = = _("SDGBackup Dreambox Enigma2")
self.onLayoutFinish.append(self.layoutFinished)
...
####################
def layoutFinished(self):
self.setTitle(self.setup_title)
Ποια ή διαφορά μεταξύ τους και ποιος είναι ο ενδεδειγμένος, αν υπάρχει; Απ' ό,τι φαίνεται ο τίλος εμφανίζεται στην οθόνη με όλους τους παραπάνω τρόπους.
Έχει διαφορά αν η οθόνη που θέλω να βάλω τον τίτλο είναι ενσωματωμένη στο enigma2 ή προέρχεται από plugin; Π.χ μήπως ο τρόπος 1 είναι μόνο ενσωματωμένες οθόνες, ενώ για plugins χρησιμοποιούνται όλοι;
Re: SDG Backup Drembox Enigma2
Δεν νομίζω να υπάρχει κάποια διαφορα την στιγμή που μεταφράζεται _(
Αν το πρόσθετο δεν έχει μετάφραση, και στο enigma επίσης για αυτό, απλά δεν θα μεταφράζεται
Απ: SDG Backup Drembox Enigma2
Εγώ ρωτάω από προγραμματιστική μεριά (σαν κώδικας python). Τι κάνουν όλοι αυτοί οι διαφορετικοί τρόποι; Για να μαθαίνουμε κιόλας...
Υ.Γ. Στους κώδικες πιο πάνω μου έχει φύγει σε κάποια σημεία και έχω γράψει δύο ίσον (= =), αντί για ένα.
Απ: SDG Backup Drembox Enigma2
Θα βοηθούσε στα παραπάνω να βάλεις και τις κλάσεις που κληρονομεί το κάθε παράδειγμα!
class A(Screen)
Πχ το παραπάνω, είναι κλάση που κληρονόμησε όλες τις ιδιότητες της κλάσης Screen.
Η setTitle πχ από πού την κληρονομούμε;
Η setTitle με την σειρά της, μπορεί να κάνει self.title = "xxxx" όπου το πεδίο title το κληρονομήσαμε.
Private μεταβλητές στην python αρχίζουν με _ (ψεύτικο private) και η title δεν είναι (ψευδο)private.
Το setup title μήπως είναι alias για το title, για backwards compatibility;
Απ: SDG Backup Drembox Enigma2
Στα παραδείγματα που αναφέρω πιο πάνω οι εν λόγω κλάσεις κληρονομούν την "Screen", είτε την "Screen" και "ConfigListScreen".
Το "setTitle(...)" προέρχεται από την κλάση "Screen", που είναι παιδί της κλάσης "GUISkin". Παραθέτω από το "GUISkin.py":
Code:
def setTitle(self, title):
path_text = ""
self.skin_title = title
if self.screenPathMode is not None and title and config.usage.menu_path.value != "off":
if self.screenPathMode and not screen.path or screen.path and screen.path[-1] != title:
self.onClose.append(self.removeScreenPath)
if screen.lastself != self:
screen.path.append(title)
screen.lastself = self
elif screen.path:
screen.path[-1] = title
if config.usage.menu_path.value == "small":
path_text = len(screen.path) > 1 and " > ".join(screen.path[:-1]) + " >" or ""
else:
title = screen.path and " > ".join(screen.path) or title
if self.instance:
self.instance.setTitle(title)
self["Title"].text = title
self["screen_path"].text = path_text
self.summaries.setTitle(title)
H "setTtile()" ορίζει το "skin_title" και το "title", όπως φαίνεται.
Ερώτηση: Όταν λέμε
Code:
class MyClassA(Screen):
def __init__(self, session):
Screen.__init__(self, session)
self.title = "blahblah"
Screen.title = "blahblah"
Οι δύο κόκκινες γραμμές είναι το ίδιο; Πρόκειται για το ίδιο property; Θυμίζω ότι η Screen περιέχει ήδη το property "title".
Re: SDG Backup Drembox Enigma2
Εδώ το εμφανίζεις σε όλες τις περιπτώσεις
Code:
self.setup_title = = _("SDGBackup Dreambox Enigma2")
self.onLayoutFinish.append(self.layoutFinished)
def layoutFinished(self):
self.setTitle(self.setup_title)
..................................................
Αυτό έτσι δουλεύει
Code:
class MyClassA(Screen):
Screen.setTitle(self, _("blablaaaa"))
Αν δεν έχει screen μάλλον δεν θα δουλέψει
Code:
class MyClassA(blabla):
Απ: SDG Backup Drembox Enigma2
Code:
# cat t.py
class Screen:
def __init__(self, session):
self.title = "__init__ %s" % self.__class__
def setTitle(self, title):
self.title = "setTitle %s" % title
class MyScreen(Screen):
def __init__(self, session):
self.title = self.__class__
class MyScreen2(Screen):
def __init__(self, session):
Screen.__init__(self, session)
class MyScreen3(Screen):
def __init__(self, session):
Screen.__init__(self, session)
Screen.setTitle(self, self.__class__)
class MyScreen4(Screen):
def __init__(self, session):
self.setTitle(self.__class__)
class MyScreen5(Screen):
pass
sess = None
x = MyScreen(session = sess)
print x.__class__, "having title:", x.title
x = MyScreen2(session = sess)
print x.__class__, "having title:", x.title
x = MyScreen3(session = sess)
print x.__class__, "having title:", x.title
x = MyScreen4(session = sess)
print x.__class__, "having title:", x.title
x = MyScreen5(session = sess)
print x.__class__, "having title:", x.title
Απ: Re: SDG Backup Drembox Enigma2
Code:
# python t.py
__main__.MyScreen having title: __main__.MyScreen
__main__.MyScreen2 having title: __init__ __main__.MyScreen2
__main__.MyScreen3 having title: setTitle __main__.MyScreen3
__main__.MyScreen4 having title: setTitle __main__.MyScreen4
__main__.MyScreen5 having title: __init__ __main__.MyScreen5
Απ: SDG Backup Drembox Enigma2
Απο τα παραπάνω λοιπόν μπορούμε να δούμε τους διαφορετικούς τρόπους για να αρχικοποιήσουμε την μεταβλητή title.
Υπάρχουν και άλλοι ... αλλά θα χαθούμε στα σκοτεινά μονοπάτια της python ;)
Λογικά ο λόγος που κάποια plugin κάνουν update απευθείας την μεταβλητή title και δεν κάνουν χρήση της setTitle είναι για να αποφύγουν να γράψουν κάτι στο "history" (Σε κάποιο PLi skin, νομίζω ότι κρατάει κάτι σαν ιστορικό τα screen names (κάτι που δείχνει να το κάνει η setTitle).
Στο onLayoutFinish να γράφεις τον τίτλο, δεν ξέρω αν αξίζει, δηλαδή να κάνεις χρήση ενός event για να γράψεις τον τίτλο, μια χαρά πρέπει να γίνεται και στην __init__.
Οπότε, μάλλον αν τώρα θα έπρεπε να διαλέξω έναν τρόπο, θα έλεγα self.setTitle("xxx") στο __init__.