+ def prevPage(self):
+ if self.currentPage == None:
+ return
+
+ pageId = self.currentPage - 1
+ if pageId < 0:
+ pageId = len(config.plugins.CurlyTx.pages) - 1
+ self.loadUrl(pageId)
+
+ def nextPage(self):
+ if self.currentPage == None:
+ return
+
+ pageId = self.currentPage + 1
+ if pageId > len(config.plugins.CurlyTx.pages) - 1:
+ pageId = 0
+ self.loadUrl(pageId)
+
+ def reload(self):
+ if self.currentPage == None:
+ return
+
+ self.loadUrl(self.currentPage)
+
+ def loadUrl(self, pageId):
+ self.httpGetterFactory = None
+ if pageId == None:
+ self.loadNoPage()
+ return
+
+ cfg = config.plugins.CurlyTx
+ pageCount = len(cfg.pages)
+ pageId = int(pageId)
+ if pageId > (pageCount - 1):
+ if len(cfg.pages) == 0:
+ self.loadNoPage()
+ else:
+ self["text"].setText(_("Invalid page") + " " + pageId);
+ return
+
+ url = cfg.pages[pageId].uri.value
+ title = cfg.pages[pageId].title.value
+
+ if pageCount > 1:
+ title = "{0} [{1}/{2}]".format(title, pageId + 1, pageCount)
+
+ self.currentPage = pageId
+ self.currentUrl = url
+ self.currentFontSize = cfg.pages[pageId].fontSize.value
+
+ self.setTitle(title)
+ self.setTextFont()
+ self["text"].setText(_("Loading ...") + "\n" + url);
+
+ if (url.startswith('file://')):
+ self.loadLocalFile(url)
+ else:
+ self.getPageWebClient(url).addCallback(self.urlLoaded).addErrback(self.urlFailed, url)
+
+ def loadLocalFile(self, url):
+ file = url[7:]
+ if not os.path.exists(file):
+ self.showFail('File does not exist', file)
+ return
+
+ with open(file, 'r') as f:
+ self.urlLoaded(f.read())
+
+ def setTextFont(self):
+ if self["text"].long_text is not None:
+ self["text"].long_text.setFont(gFont("Console", self.currentFontSize))
+
+ def urlLoaded(self, html):
+ self["text"].setText(html)
+
+ def urlFailed(self, error, url):
+ self.showFail(error.getErrorMessage(), url)
+
+ def showFail(self, message, url):
+ self["text"].setText(
+ _("Error fetching URL:") + "\n " + message
+ + "\n\nURL: " + url
+ )
+
+ def loadNoPage(self):
+ self["text"].setText(_("Go and add a page in the settings"));
+
+ def showHeader(self):
+ if not self.httpGetterFactory:
+ return
+
+ if self.showingHeaders:
+ self["text"].setText(self.pageContent)
+ self.pageContent = None
+ self.showingHeaders = False
+ elif self.httpGetterFactory.response_headers:
+ headers = _("HTTP response headers for") + "\n" + self.currentUrl + "\n\n"
+ for (k, v) in self.httpGetterFactory.response_headers.items():
+ headers += k + ": " + ("\n" + k + ": ").join(v) + "\n"
+ self.pageContent = self["text"].getText()
+ self["text"].setText(headers)
+ self.showingHeaders = True
+
+ def showSettings(self):
+ from CurlyTxSettings import CurlyTxSettings
+ self.session.openWithCallback(self.onSettingsChanged, CurlyTxSettings)
+
+ def onSettingsChanged(self):
+ self.loadButtons()
+ if len(config.plugins.CurlyTx.pages) == 0:
+ self.currentPage = None
+ self.loadUrl(self.currentPage)
+ elif self.currentPage == None:
+ self.currentPage = 0
+ self.loadUrl(self.currentPage)
+
+
+ def getPageWebClient(self, url, contextFactory=None, *args, **kwargs):
+ """
+ Download a web page as a string.
+
+ COPY OF twisted.web.client.getPage to store the factory
+
+ Download a page. Return a deferred, which will callback with a
+ page (as a string) or errback with a description of the error.
+
+ See L{HTTPClientFactory} to see what extra arguments can be passed.
+ """
+ self.httpGetterFactory = _makeGetterFactory(
+ url,
+ HTTPClientFactory,
+ contextFactory=contextFactory,
+ *args, **kwargs)
+ return self.httpGetterFactory.deferred
+
+ def loadStaticConfig(self):
+ """
+ Always try to load the static config file from
+ /etc/enigma2/curlytx-pagefeed.xml
+ """
+ staticFeedPath = Directories.resolveFilename(Directories.SCOPE_CONFIG, self.staticPageFeedFile)
+ if not os.path.exists(staticFeedPath):
+ return
+
+ from AtomFeed import AtomFeed
+ AtomFeed(
+ 'file://' + staticFeedPath,
+ self.saveStaticConfig, self.loadStaticConfigFail
+ )
+
+ def loadStaticConfigFail(self, errorMessage):
+ """ Loading the page url feed failed somehow """
+ from Screens.MessageBox import MessageBox
+ self.session.open(
+ MessageBox,
+ _("Error loading page feed:") + "\n\n" + str(errorMessage),
+ type = MessageBox.TYPE_ERROR
+ )