mickey Opublikowano 16 Czerwca 2014 Udostępnij Opublikowano 16 Czerwca 2014 W sprawie EPG: Sygnalizowałem tutaj http://forum.xunil.pl/index.php/topic,828.msg16096.html#msg16096, że: W InfoBar.py i InfoBarGenerics.py jest bałagan jak chodzi o domyślne funkcje na "ButtonInfo" i "ButtonEPG". Jeżeli to kiedyś zostanie uporządkowane, to trzeba będzie może poprawić lekko wtyczkę :/ Dokładniej chodzi o funkcje: EPGButtonPressed, EPGButtonPressedLong, InfoButtonPressed, InfoButtonPressedLong. Ogólnie Longi pozwalają wybrać tryb EPG (u mnie wyświetla się to samo menu dla guzików Info i dla EPG) a funkcje bez Longa aktuwują wybór. Ale w źródłach jest straszny bałagan, szczególnie jak używa się obydwu fukncji i do tego w trybie odtwarzania nagranie. Opcja druga: Kompletnie nie zrozumiałem intencji autorów :( W keymapie dla AB mam: <map context="MoviePlayerActions"> <key id="KEY_OK" mapto="EPGButtonPressed" flags="b" /> <key id="KEY_OK" mapto="EPGButtonPressedLong" flags="l" /> <key id="KEY_EPG" mapto="InfoButtonPressed" flags="b" /> <key id="KEY_EPG" mapto="InfoButtonPressedLong" flags="l" /> </map> A w samym AB: if pname == _("List EPG functions..."): from Screens.InfoBarGenerics import InfoBarEPG if isinstance(self, InfoBarEPG): self.showEventInfoPlugins() no_plugin = False elif pname == _("Show EPG..."): from Screens.InfoBarGenerics import InfoBarEPG if isinstance(self, InfoBarEPG): self.showDefaultEPG() no_plugin = False I w miarę poprawnie mi działa... Znaczy się funkcja showDefaultEPG wywołuje to co jest ustawione fukncją showEventInfoPlugins. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość herpoi Opublikowano 16 Czerwca 2014 Udostępnij Opublikowano 16 Czerwca 2014 Ale czego nie rozumiesz? Chcieli wprowadzić opcję na wyświetlanie EPG z poziomu MoviePlayera. Czyli oglądasz nagranie i w tym czasie przeglądasz EPG. Umożliwiają to klawisze EPGButtonPressed oraz InfoButtonPressed, zaś programują klawisze EPGButtonPressedLong oraz InfoButtonPressedLong. W GOS standardowo wykorzystujemy jedynie EPGButtonPressed pod KEY_EPG oraz EPGButtonPressedLong pod KEY_TEXT, bo pod 1xINFO mamy wyświetlenie infobara, a pod 2xINFO mamy wyświetlenie opisu nagranej audycji. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mickey Opublikowano 16 Czerwca 2014 Autor Udostępnij Opublikowano 16 Czerwca 2014 Ale czego nie rozumiesz? Oki, spróbuję opisać w czym mam problem. Może mi się uda :) W sumie problem dotyczy chyba tylko (?) Assignbuttona, w którym musiałbym coś przedefiniować ... tylko nie wiem jak. No to po kolei: W InfoBar.py (bazuję na tym: http://sourceforge.net/p/openpli/enigma2/ci/master/tree/lib/python/Screens/InfoBar.py) jest raczej OK: self["actions"] = HelpableActionMap(self, "MoviePlayerActions", { "InfoButtonPressed": (self.openEventView, _("open Info...")), "EPGButtonPressed": (self.showDefaultEPG, _("open EPG...")), "InfoButtonPressedLong": (self.showEventInfoPlugins, _("select Info...")), "EPGButtonPressedLong": (self.showEventGuidePlugins, _("select EPG...")), "leavePlayer": (self.leavePlayer, _("leave movie player...")), "leavePlayerOnExit": (self.leavePlayerOnExit, _("leave movie player...")) }) Ten fragment kodu jest w klasie MoviePlayer. Jest ok, bo Używając EPGButtonPressedLong definiujemy funkcję dla EPGButtonPressed a używając InfoButtonPressedLong dla InfoButtonPressed. No dobra idźmy dalej. W InfoBarGenerics.py natomiast jest taki fragment: self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions", { "showEventInfo": (self.showDefaultEPG, _("Show EPG...")), "showEventInfoSingleEPG": (self.showSingleEPG, _("Show single service EPG")), "showEventInfoMultiEPG": (self.showMultiEPG, _("Show multi channel EPG")), "showEventInfoPlugin": (self.showEventInfoPlugins, _("List EPG functions...")), "showEventGuidePlugin": (self.showEventGuidePlugins, _("List EPG functions...")), "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible, }) I tu też wydaje się ok, bo funckja showEventInfo zwraca to co zdefiniowaliśmy używając showEventInfoPlugin. Tylko definicja jak widać odwołuje się do self.showDefaultEPG. Czyli, bazując na funkcjach a nie zewnętrznych nazwach do keymap.xml mamy: - w InfoBar.py: -> używając self.showEventInfoPlugins definiujemy funckję dla self.openEventView -> używając self.showEventGuidePlugins definiujemy funckję dla self.showDefaultEPG - w InfoBarGenerics.py natomiast: -> używając self.showEventInfoPlugins definiujemy funckję dla self.showDefaultEPG -> używając self.showEventGuidePlugins definiujemy funckję dla ??? I skracając mojego posta do jednego krótkiego pytania: Jeżeli wywołam z InfoBarGenerics self.showEventGuidePlugins to jak wywołać zdefiniowaną tam domyślna funkcję? Tego własnie nie rozumiem :) Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość herpoi Opublikowano 16 Czerwca 2014 Udostępnij Opublikowano 16 Czerwca 2014 - w InfoBarGenerics.py natomiast: -> używając self.showEventInfoPlugins definiujemy funckję dla self.showDefaultEPG -> używając self.showEventGuidePlugins definiujemy funckję dla ??? I skracając mojego posta do jednego krótkiego pytania: Jeżeli wywołam z InfoBarGenerics self.showEventGuidePlugins to jak wywołać zdefiniowaną tam domyślna funkcję? Tego własnie nie rozumiem :) Używając self.showEventGuidePlugins definiujemy funkcję dla self.showSingleEPG, więc z InfoBarGenerics powinieneś wywołać właśnie self.showSingleEPG. self.showSingleEPG wywołuje w pierwszej kolejności EventGuidePlugin jeśli został zdefiniowany, a jeśli nie został zdefiniowany to wywołuje SingleEPG. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mickey Opublikowano 17 Czerwca 2014 Autor Udostępnij Opublikowano 17 Czerwca 2014 Dzięki za wskazówki. Po ich przeanalizowaniu wyszło mi, że: def showSingleEPG(self): if self.defaultGuideType is not None: self.defaultGuideType() return pluginlist = self.getEPGPluginList() self.openSingleServiceEPG() def showMultiEPG(self): if self.defaultGuideType is not None: self.defaultGuideType() return pluginlist = self.getEPGPluginList() self.openMultiServiceEPG() Czyli self.showMultiEPG robi to samo co self.showSingleEPG jeżeli tylko jest zdefiniowany self.defaultGuideType. Zgadza się? Więc jak juz zdefiniujemy self.defaultGuideType to nie da się z keymap.xml wywołać ani self.openSingleServiceEPG() ani self.openMultiServiceEPG()? Widzę, że w keymap.xml można bezpośrednio wywołać openSingleServiceEPG i openMultiServiceEPG... Assignbuttona sobie poprawię, ale nadal się upieram, że albo jest w InfoBarGeneric.py bałagan albo nie rozumiem intencji autorów :-) Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość herpoi Opublikowano 17 Czerwca 2014 Udostępnij Opublikowano 17 Czerwca 2014 EDIT: Widzę, że już doszedłeś co i jak, ale posta już napisałem, więc niech będzie dla potomnych. ========================= Zgadza się, self.showMultiEPG robi to samo co self.showSingleEPG, czyli dokładnie to co zdefiniuje self.defaultGuideType. Jednakże z poziomu AssignButton nadal możesz bez problemu wywoływać self.openSingleServiceEPG() i self.openMultiServiceEPG(). Z poziomu keymap.xml : - self.openSingleServiceEPG() wywołujesz przy użyciu showSingleEPG - self.openMultiServiceEPG() wywołujesz przy użyciu showMultiEPG Co i w jaki sposób możesz wywołać z keymap.xml (w tym konkretnym przypadku) masz tutaj: ========================= self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions", { "showEventInfo": (self.showDefaultEPG, _("Show EPG...")), "showEventInfoSingleEPG": (self.showSingleEPG, _("Show single service EPG")), "showEventInfoMultiEPG": (self.showMultiEPG, _("Show multi channel EPG")), "showEventInfoPlugin": (self.showEventInfoPlugins, _("List EPG functions...")), "showEventGuidePlugin": (self.showEventGuidePlugins, _("List EPG functions...")), "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible, "showSingleEPG": self.openSingleServiceEPG, "showMultiEPG": self.openMultiServiceEPG, }) ========================= I jeszcze krótkie wyjaśnienie do tego co najprawdopodobniej powoduje u ciebie ból głowy. W powyższym przykładzie self.showSingleEPG to nie to samo co showSingleEPG. self.showSingleEPG jest wywoływane z keymap.xml przy pomocy showEventInfoSingleEPG i odnosi się do: def showSingleEPG(self): if self.defaultGuideType is not None: self.defaultGuideType() return pluginlist = self.getEPGPluginList() self.openSingleServiceEPG() showSingleEPG jest definicją jaką używasz w keymap.xml i wywołuje self.openSingleServiceEPG, czyli: def openSingleServiceEPG(self): from Components.ServiceEventTracker import InfoBarCount if InfoBarCount > 1: self.openMultiServiceEPG(False) else: ref = self.session.nav.getCurrentlyPlayingServiceOrGroup() if ref: if self.servicelist.getMutableList() is not None: # bouquet in channellist current_path = self.servicelist.getRoot() services = self.getBouquetServices(current_path) self.serviceSel = SimpleServicelist(services) if self.serviceSel.selectService(ref): self.epg_bouquet = current_path self.session.openWithCallback(self.SingleServiceEPGClosed, EPGSelection, ref, self.zapToService, serviceChangeCB = self.changeServiceCB) else: self.session.openWithCallback(self.SingleServiceEPGClosed, EPGSelection, ref) else: self.session.open(EPGSelection, ref) Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mickey Opublikowano 17 Czerwca 2014 Autor Udostępnij Opublikowano 17 Czerwca 2014 Gdzie znajdę źródła tego InfoBarGenerics, z którego powyższy fragment wyciagnąłeś? W której paczce w repozytorium GOS są? Tutaj nie ma dwóch ostatnich pozycji: http://sourceforge.net/p/openpli/enigma2/ci/master/tree/lib/python/Screens/InfoBarGenerics.py#l749 :) Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość herpoi Opublikowano 17 Czerwca 2014 Udostępnij Opublikowano 17 Czerwca 2014 Ha, tu mnie masz, faktycznie w oryginale tego nie ma. /Wygląda na to, że musiałem to dopisać lub zostawić (podczas scalania z OpenPLi) na nasze potrzeby :) W wersji takiej jak proponuje to OpenPLi faktycznie może być kłopot z wywołaniem obu tych funkcji niezależnie z keymap.xml, ale wiesz, oni tam na mpisach mają trochę inną filozofię klawiszologii pilota niż użytkownicy sh4. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tux Opublikowano 17 Czerwca 2014 Udostępnij Opublikowano 17 Czerwca 2014 Moge sie mylic ale chyba enigma2-data-src Zerknij co masz na liscie. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.