Skocz do zawartości

Wywoływanie EPG z innych pluginów i keymap.xml


mickey

Rekomendowane odpowiedzi

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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 :)

 

Odnośnik do komentarza
Udostępnij na innych stronach

- 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.

Odnośnik do komentarza
Udostępnij na innych stronach

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 :-)

Odnośnik do komentarza
Udostępnij na innych stronach

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)

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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ą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...