5e58e72f3747b9803ca6d68c23b10ab1ca3ffd28
[enigma2-curlytx.git] / src / CurlyTx.py
1 from Screens.Screen import Screen
2 from Screens.HelpMenu import HelpableScreen
3 from Screens.MessageBox import MessageBox
4 from Components.Label import Label
5 from Components.ScrollLabel import ScrollLabel
6 from Components.ActionMap import NumberActionMap
7 from Components.Sources.StaticText import StaticText
8 from twisted.web import client
9
10 from . import config
11 from Components.config import config
12
13 class CurlyTx(Screen,HelpableScreen):
14     skin = """
15         <screen name="CurlyTx" position="center,center" size="560,400" title="CurlyTx" >
16           <ePixmap position="0,0" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
17           <ePixmap position="140,0" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
18           <ePixmap position="280,0" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
19           <ePixmap position="420,0" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
20           <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
21           <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
22           <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
23           <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
24           <widget name="text" position="5,45" size="550,350" font="Console;20" />
25         </screen>"""
26
27     currentUrl = None
28     currentPage = None
29
30     def __init__(self, session, args = None):
31         #self.skin = CurlyTx.skin
32         Screen.__init__(self, session)
33         HelpableScreen.__init__(self)
34         #self.skinName = [ "CurlyTx", "Setup" ]
35
36         self["text"] = ScrollLabel("foo")
37
38         self["key_red"]    = StaticText(_("Settings"))
39         self["key_green"]  = StaticText(_("Reload"))
40         self["key_yellow"] = StaticText(_("Prev"))
41         self["key_blue"]   = StaticText(_("Next"))
42
43
44         self["actions"] = NumberActionMap(
45             ["WizardActions", "ColorActions", "InputActions", "HelpActions"], {
46                 "ok":   self.close,
47                 "back": self.close,
48                 "up":   self.pageUp,
49                 "down": self.pageDown,
50
51                 "red":    self.showSettings,
52                 "green":  self.reload,
53                 "yellow": self.prevPage,
54                 "blue":   self.nextPage
55             }, -1)
56
57         self.loadHelp()
58         self.loadUrl(config.plugins.CurlyTx.defaultPage.value)
59
60     def loadHelp(self):
61         self.helpList.append((
62                 self["actions"], "WizardActions",
63                 [("up", _("Scroll page contents up"))]))
64         self.helpList.append((
65                 self["actions"], "WizardActions",
66                 [("down", _("Scroll page contents down"))]))
67         self.helpList.append((
68                 self["actions"], "ColorActions",
69                 [("red", _("Show program settings"))]))
70         self.helpList.append((
71                 self["actions"], "ColorActions",
72                 [("green", _("Reload current page URL"))]))
73         self.helpList.append((
74                 self["actions"], "ColorActions",
75                 [("yellow", _("Switch to next configured page URL"))]))
76         self.helpList.append((
77                 self["actions"], "ColorActions",
78                 [("blue", _("Switch to previous configured page URL"))]))
79         self.helpList.append((
80                 self["actions"], "WizardActions",
81                 [("ok", _("Close window"))]))
82         self.helpList.append((
83                 self["actions"], "WizardActions",
84                 [("back", _("Close window"))]))
85         self.helpList.append((
86                 self["actions"], "HelpActions",
87                 [("displayHelp", _("Show this help screen"))]))
88
89     def pageUp(self):
90         self["text"].pageUp()
91
92     def pageDown(self):
93         self["text"].pageDown()
94
95     def prevPage(self):
96         if self.currentPage == None:
97             return
98
99         pageId = self.currentPage - 1
100         if pageId < 0:
101             pageId = len(config.plugins.CurlyTx.pages) - 1
102         self.loadUrl(pageId)
103
104     def nextPage(self):
105         if self.currentPage == None:
106             return
107
108         pageId = self.currentPage + 1
109         if pageId > len(config.plugins.CurlyTx.pages) - 1:
110             pageId = 0
111         self.loadUrl(pageId)
112
113     def reload(self):
114         if self.currentPage == None:
115             return
116
117         self.loadUrl(self.currentPage)
118
119     def loadUrl(self, pageId):
120         if pageId == None:
121             self.loadNoPage()
122             return
123
124         pageId = int(pageId)
125         if pageId > (len(config.plugins.CurlyTx.pages) - 1):
126             if len(config.plugins.CurlyTx.pages) == 0:
127                 self.loadNoPage()
128             else:
129                 self["text"].setText("Invalid page " + pageId);
130             return
131
132         url   = config.plugins.CurlyTx.pages[pageId].uri.value
133         title = config.plugins.CurlyTx.pages[pageId].title.value
134         self.currentPage = pageId
135         self.currentUrl = url
136
137         self.setTitle(title)
138         self["text"].setText("Loading ...\n" + url);
139
140         client.getPage(url).addCallback(self.urlLoaded).addErrback(self.urlFailed, url)
141
142     def urlLoaded(self, html):
143         self["text"].setText(html)
144
145     def urlFailed(self, error, url):
146         self["text"].setText(
147             "Error fetching URL:\n " + error.getErrorMessage()
148             + "\n\nURL: " + url
149             )
150
151     def loadNoPage(self):
152         self["text"].setText("Go and add a page in the settings");
153
154     def showSettings(self):
155         from CurlyTxSettings import CurlyTxSettings
156         self.session.openWithCallback(self.onSettingsChanged, CurlyTxSettings)
157
158     def onSettingsChanged(self):
159         if len(config.plugins.CurlyTx.pages) == 0:
160             self.currentPage = None
161             self.loadUrl(self.currentPage)
162         elif self.currentPage == None:
163             self.currentPage = 0
164             self.loadUrl(self.currentPage)