Index: channels/favicon.py ================================================================== --- channels/favicon.py +++ channels/favicon.py @@ -1,11 +1,11 @@ # encoding: utf-8 # api: streamtuner2 # title: Favicons # description: Load and display station favicons/logos. # config: -# { name: load_favicon, type: bool, value: 1, description: "Load favicon instantly when ▸playing a station.", color: "#fff7cc" } +# { name: load_favicon, type: bool, value: 1, description: "Load favicon instantly when ▸playing a station." } # { name: favicon_google_first, type: bool, value: 1, description: "Use Google favicon-to-PNG conversion service (faster)." } # { name: favicon_delete_stub , type: bool, value: 1, description: "Don't accept any placeholder favicons." } # { name: google_homepage, type: bool, value: 0, description: "Google missing station homepages right away." } # type: feature # category: ui Index: channels/pluginmanager2.py ================================================================== --- channels/pluginmanager2.py +++ channels/pluginmanager2.py @@ -6,11 +6,11 @@ # type: hook # category: config # depends: uikit >= 1.9, config >= 2.7, streamtuner2 >= 2.1.8, pluginconf < 1.0 # config: # { name: plugin_repos, type: text, value: "http://fossil.include-once.org/repo.json/streamtuner2/contrib/*.py, http://fossil.include-once.org/repo.json/streamtuner2/channels/*.py", description: "Plugin repository JSON source references.", hidden: 1 } -# { name: plugin_auto, type: boolean, value: 1, description: Apply plugin activation/disabling without restart., color: "#fff7cc" } +# { name: plugin_auto, type: boolean, value: 1, description: Apply plugin activation/disabling without restart. } # priority: extra # png: # iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAJ1BMVEUAAABNYQVcdAx1iTB6mQ6KsQGUsTCUuxGmyDKvzEK51FnB13LP3pnSUwRYAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsT # AQCanBgAAAAHdElNRQffBQ4EMidI8LXfAAABGUlEQVQoz32NPU7DQBCFx4aOxosIIOzGlkWRiogGkBssRfQoK/cxRBwAaw6AhJcLoAwtlTdlKtiSMj4U++PIBiReM/O+mXkD0ImdMxhqp23bsyHINkp9/Qu8TLXBj5BMrfsp # 08rk2hT7KtIf2o1cmWJzIqU+pVVD9i6SW9Ev0BC9D0FDSzEExouyB0QkLGAQunMSL7IuwVNB+EZu/Bw/lLAnJ1fa6nOBT3CZQ0irDzsWiHo/gLFwqhFxbl6Me+/AiXhdmnUHfIBDMb+onccZnE7AXwTHncfH5CYHSGALeHGH Index: channels/timer.py ================================================================== --- channels/timer.py +++ channels/timer.py @@ -102,24 +102,26 @@ def hide(self, *w): return self.parent.timer_dialog.hide() # close dialog,get data def add_timer(self, *w): - self.parent.timer_dialog.hide() row = self.parent.row() row = copy.copy(row) - + + # basic check for consistency + if not re.match("^(\w{2,3}|\*|,)+\s+(\d+:\d+[-.\d+:]*)\s+(record|play)", row[self.timefield]): + self.parent.status("⛔ Danger, Will Robinson! → The given timer date/action is likely invalid. Entry not saved.", timeout=22) + return + + self.parent.timer_dialog.hide() + # add data row["listformat"] = "href" #self.parent.channel().listformat if row.get(self.timefield): row["title"] = row["title"] + " -- " + row[self.timefield] row[self.timefield] = self.parent.timer_value.get_text() - - # basic check for consistency - if not re.match("^(\w{2,3}|\*|,)+\s+(\d+:\d+[-.\d+:]*)\s+(record|play)", row[self.timefield]): - self.parent.status("⛔ Danger, Will Robinson! → The given timer date/action is likely invalid. This won't work.", timeout=22) - + # store self.save_timer(row) # store row in timer database