prepare changelog for 1.1.0
[enigma2-curlytx.git] / src / CurlyTxSettings.py
index 59d7b3a44acdbd90984c8672d98f737a10ff34e4..5d39725b9b40f3234daf05abc565ba7588f87437 100644 (file)
@@ -1,16 +1,24 @@
+# -*- coding: utf-8 -*-
+# CurlyTx configuration window
+# Copyright (C) 2011 Christian Weiske <cweiske@cweiske.de>
+# License: GPLv3 or later
+
+from . import _
+
 from Screens.Screen import Screen
 from Screens.HelpMenu import HelpableScreen
 from Components.ActionMap import ActionMap, NumberActionMap
 from Components.Sources.StaticText import StaticText
 from Screens.Screen import Screen
 from Screens.HelpMenu import HelpableScreen
 from Components.ActionMap import ActionMap, NumberActionMap
 from Components.Sources.StaticText import StaticText
+from Screens.MessageBox import MessageBox
 
 from . import config
 
 from . import config
-from config import createPage, loadDefaultPageOptions
+from config import createPage, loadDefaultPageOptions, feedPagesToConfig, feedSettingsToConfig, savePageConfig
 from Components.config import config, getConfigListEntry, ConfigSelection
 from Components.ConfigList import ConfigList, ConfigListScreen
 
 class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
     skin = """
 from Components.config import config, getConfigListEntry, ConfigSelection
 from Components.ConfigList import ConfigList, ConfigListScreen
 
 class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
     skin = """
-       <screen name="Setup" position="center,center" size="560,430" title="Setup">
+       <screen name="Setup" position="center,center" size="560,430" title="Settings">
          <ePixmap pixmap="skin_default/buttons/red.png"    position="0,0"   size="140,40" transparent="1" alphatest="on" />
          <ePixmap pixmap="skin_default/buttons/green.png"  position="140,0" size="140,40" transparent="1" alphatest="on" />
          <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" transparent="1" alphatest="on" />
          <ePixmap pixmap="skin_default/buttons/red.png"    position="0,0"   size="140,40" transparent="1" alphatest="on" />
          <ePixmap pixmap="skin_default/buttons/green.png"  position="140,0" size="140,40" transparent="1" alphatest="on" />
          <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" transparent="1" alphatest="on" />
@@ -46,20 +54,22 @@ class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
         ConfigListScreen.__init__(self, self.getConfigList(), session = self.session)
 
         self.loadHelp()
         ConfigListScreen.__init__(self, self.getConfigList(), session = self.session)
 
         self.loadHelp()
-        self.onClose.append(self.abort)
 
     def getConfigList(self):
         #reload titles
         loadDefaultPageOptions()
 
     def getConfigList(self):
         #reload titles
         loadDefaultPageOptions()
+        cfg = config.plugins.CurlyTx
 
         list = [
             getConfigListEntry(_("Page:") + " " + x.title.value, x.uri)
 
         list = [
             getConfigListEntry(_("Page:") + " " + x.title.value, x.uri)
-                for x in config.plugins.CurlyTx.pages
+                for x in cfg.pages
             ]
             ]
-        list.append(getConfigListEntry(_("Default page"), config.plugins.CurlyTx.defaultPage))
-        list.append(getConfigListEntry(_("Show in main menu"), config.plugins.CurlyTx.menuMain))
-        list.append(getConfigListEntry(_("Show in extensions menu"), config.plugins.CurlyTx.menuExtensions))
-        list.append(getConfigListEntry(_("Menu title"), config.plugins.CurlyTx.menuTitle))
+        if len(cfg.pages):
+            list.append(getConfigListEntry(_("Default page"), cfg.defaultPage))
+        list.append(getConfigListEntry(_("Show in main menu"), cfg.menuMain))
+        list.append(getConfigListEntry(_("Show in extensions menu"), cfg.menuExtensions))
+        list.append(getConfigListEntry(_("Menu title"), cfg.menuTitle))
+        list.append(getConfigListEntry(_("Page feed URL"), cfg.feedUrl))
         return list
 
     def loadHelp(self):
         return list
 
     def loadHelp(self):
@@ -72,6 +82,9 @@ class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
         self.helpList.append((
                 self["actions"], "SetupActions",
                 [("ok", _("Edit selected page"))]))
         self.helpList.append((
                 self["actions"], "SetupActions",
                 [("ok", _("Edit selected page"))]))
+        self.helpList.append((
+                self["actions"], "SetupActions",
+                [("ok", _("Load pages from feed"))]))
         self.helpList.append((
                 self["actions"], "ColorActions",
                 [("yellow", _("Add new page"))]))
         self.helpList.append((
                 self["actions"], "ColorActions",
                 [("yellow", _("Add new page"))]))
@@ -86,7 +99,8 @@ class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
         ConfigListScreen.keyRight(self)
 
     def deletePage(self):
         ConfigListScreen.keyRight(self)
 
     def deletePage(self):
-        if len(config.plugins.CurlyTx.pages) == 0:
+        pageCount = len(config.plugins.CurlyTx.pages)
+        if pageCount == 0 or self["config"].getCurrentIndex() >= pageCount:
             return
 
         from Screens.MessageBox import MessageBox
             return
 
         from Screens.MessageBox import MessageBox
@@ -118,6 +132,16 @@ class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
                 self.pageEdited, CurlyTxPageEdit,
                 config.plugins.CurlyTx.pages[id], False
                 )
                 self.pageEdited, CurlyTxPageEdit,
                 config.plugins.CurlyTx.pages[id], False
                 )
+        elif config.plugins.CurlyTx.feedUrl.value:
+            from AtomFeed import AtomFeed
+            AtomFeed(
+                config.plugins.CurlyTx.feedUrl.value,
+                self.feedPagesReceived, self.feedPagesFail
+                )
+        else:
+            self.session.open(
+                MessageBox, _("No page feed URL defined"), MessageBox.TYPE_ERROR
+                )
 
     def pageEdited(self, page, new):
         if not page:
 
     def pageEdited(self, page, new):
         if not page:
@@ -128,16 +152,40 @@ class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
 
         self["config"].setList(self.getConfigList())
 
 
         self["config"].setList(self.getConfigList())
 
+    def feedPagesReceived(self, pages, settings):
+        feedPagesToConfig(pages)
+        feedSettingsToConfig(settings)
+        self["config"].setList(self.getConfigList())
 
 
-    def keySave(self):
-        for i in range(0, len(config.plugins.CurlyTx.pages)):
-            config.plugins.CurlyTx.pages[i].save()
+    def feedPagesFail(self, errorMessage):
+        """ Downloading the page url feed failed somehow """
+        self.session.open(
+            MessageBox,
+            _("Error loading page feed:") + "\n\n" + str(errorMessage),
+            MessageBox.TYPE_ERROR
+            )
 
 
-        config.plugins.CurlyTx.pages.save()
+    def keySave(self):
+        savePageConfig()
         ConfigListScreen.keySave(self)
 
         ConfigListScreen.keySave(self)
 
-    def abort(self):
-        pass
+    def cancelConfirm(self, result):
+        """Overwriting ConfigListScreen.cancelConfirm to call cancelAll method"""
+        if not result:
+            return
+
+        self.cancelAll()
+        self.close()
+
+    def cancelAll(self):
+        for x in self["config"].list:
+            x[1].cancel()
+
+        #restore old page configuration
+        cfg = config.plugins.CurlyTx
+        del cfg.pages[:]
+        for i in cfg.pages.stored_values:
+            cfg.pages.append(createPage())
 
 
 
 
 
 
@@ -160,6 +208,7 @@ class CurlyTxPageEdit(Screen, ConfigListScreen):
         list = [
             getConfigListEntry(_("Page URL"), page.uri),
             getConfigListEntry(_("Title"), page.title),
         list = [
             getConfigListEntry(_("Page URL"), page.uri),
             getConfigListEntry(_("Title"), page.title),
+            getConfigListEntry(_("Font size"), page.fontSize),
             ]
         ConfigListScreen.__init__(self, list, session = self.session)
 
             ]
         ConfigListScreen.__init__(self, list, session = self.session)