if remove is not None: self._database.add_action_item_categorie( google_id=self._google_id_by_position[position], action_type='del', categorie_name=remove, categorie_shortname=self.get_shortname(remove), ) self._database.stop_add_session() class RssReaderInfoGoogleCache(RssReaderInfo): names = ['GoogleCache', 'db'] priority = 70 def get_rss_reader(self): return GoogleCache(self._config) def get_doc(self): return "" register_key('database', str, doc='The database name for GoogleCache mode', default='reader.sqlite3') register_key('database-debug', bool, doc='Database will log every sql query if true. Developers only.', default=0, advanced=True)
from pyrfeed.rss_reader.info import RssReaderInfo from pyrfeed.tools.info_list import ElementInfoList from pyrfeed.config import register_key class _RssReaderInfoList(ElementInfoList) : BaseClass = RssReaderInfo def get_rss_reader(self,config) : self._auto_register() name = config['rssreader'] if name is None : name = self.get_default_info_name() if (name is not None) and (name in self) : rss_reader = self[name](config).get_rss_reader() else : raise ValueError("Don't know RssReader type [%s]" % name) return rss_reader rssreader_info_list = _RssReaderInfoList() register_key( 'rssreader', str, doc='The RssReader to use', default=None, advanced=True )
if name in gui_info_list : self._config['gui/next'] = name self._need_quit = True else : self._print("Don't know [%s] as an interface name\n" % name) else : for ui_name,name in gui_info_list.get_ui_names() : self._print(" %s - %s\n" % (name,ui_name)) def do_HELP(self,command_name,*args) : self._print(self._commands.get_help()) class GuiInfoTTY(GuiInfo) : names = ['tty','BasicTTY','cl'] priority = 10 ui_name = 'TTY interface' def _start_application(self) : commandline = BasicTTY(self._config) commandline.set_rss_reader(self._rss_reader) commandline.main_loop() def get_doc(self) : return "" register_key( 'tty/encoding', str, doc='TTY Encoding', default='iso-8859-1', advanced=True ) register_key( 'tty/screensize', int, doc='Width of the TTY', default=80, advanced=True ) # 'gui/next' will be handled elsewere for registration
from pyrfeed.rss_reader.info import RssReaderInfo from pyrfeed.tools.info_list import ElementInfoList from pyrfeed.config import register_key class _RssReaderInfoList(ElementInfoList): BaseClass = RssReaderInfo def get_rss_reader(self, config): self._auto_register() name = config["rssreader"] if name is None: name = self.get_default_info_name() if (name is not None) and (name in self): rss_reader = self[name](config).get_rss_reader() else: raise ValueError("Don't know RssReader type [%s]" % name) return rss_reader rssreader_info_list = _RssReaderInfoList() register_key("rssreader", str, doc="The RssReader to use", default=None, advanced=True)
self._database.start_add_session() for position in positions : if position in self._google_id_by_position : if add is not None : self._database.add_action_item_categorie( google_id=self._google_id_by_position[position], action_type='add', categorie_name=add, categorie_shortname=self.get_shortname(add), ) if remove is not None : self._database.add_action_item_categorie( google_id=self._google_id_by_position[position], action_type='del', categorie_name=remove, categorie_shortname=self.get_shortname(remove), ) self._database.stop_add_session() class RssReaderInfoGoogleCache(RssReaderInfo) : names = ['GoogleCache','db'] priority = 70 def get_rss_reader(self) : return GoogleCache(self._config) def get_doc(self) : return "" register_key( 'database', str, doc='The database name for GoogleCache mode', default='reader.sqlite3' ) register_key( 'database-debug', bool, doc='Database will log every sql query if true. Developers only.', default=0, advanced=True )
get_feed_args = {} max_count = self._config['google/max_count'] if not(self._config['google/include_read']) : get_feed_args['exclude_target'] = CONST.ATOM_STATE_READ if self._config['url'] : get_feed_args['url'] = self._config['url'] if self._config['label'] : get_feed_args['feed'] = CONST.ATOM_PREFIXE_LABEL + self._config['label'] elif self._config['feed'] : get_feed_args['feed'] = self._config['feed'] get_feed_args['count'] = max_count return get_feed_args register_key( 'google/max_count', int, doc='The size of the feed to fetch from google', default=200 ) register_key( 'google/include_read', bool, doc='If true, will fetch all items, otherwise will fetch only unread ones', default=True, advanced=True ) register_key( 'url', str, doc='The url of the google feed to fetch', default=None, advanced=True ) register_key( 'label', str, doc='The label of google reader to fetch', default=None, advanced=True ) register_key( 'feed', str, doc='The feed to fetch on google', default=None, advanced=True ) register_key( 'filter', str, doc='the filter at start to search items', default='', advanced=True ) register_key( 'login', str, doc='Google login', default=None ) register_key( 'passwd', str, doc='Google password', default=None ) register_key( 'datefmt', str, doc='the strftime format for date', default='%Y-%m-%d %H:%M:%S', advanced=True ) register_key( 'proxy_host', str, doc='Host for proxy', default='' ) register_key( 'proxy_port', int, doc='Port for proxy', default=3128 )
get_feed_args['exclude_target'] = CONST.ATOM_STATE_READ if self._config['url']: get_feed_args['url'] = self._config['url'] if self._config['label']: get_feed_args[ 'feed'] = CONST.ATOM_PREFIXE_LABEL + self._config['label'] elif self._config['feed']: get_feed_args['feed'] = self._config['feed'] get_feed_args['count'] = max_count return get_feed_args register_key('google/max_count', int, doc='The size of the feed to fetch from google', default=200) register_key( 'google/include_read', bool, doc='If true, will fetch all items, otherwise will fetch only unread ones', default=True, advanced=True) register_key('url', str, doc='The url of the google feed to fetch', default=None, advanced=True) register_key('label', str, doc='The label of google reader to fetch',
if 0 <= position < self.__items_count : self.__cursor_position = position def set_local_cursor_position(self,position) : '''Set the current local cursor position (start with 0)''' if 0 <= position < self.__config['pagesize'] : self.__cursor_position = position + self.get_page_number()*self.__config['pagesize'] def set_items(self,items) : '''Set the items''' self.__items = items self.__items_count = len(self.__items) self.__selected_items = [False] * self.__items_count self.__selected_item_count = 0 if self.__cursor_position >= self.__items_count : self.__cursor_position = self.__items_count-1 if self.__cursor_position < 0 : self.__cursor_position = 0 def get_page(self) : """Get the current page (which consist of a tuple of 'a global position', 'a boolean which is True if selected', 'a title')""" current_position = self.get_page_number()*self.__config['pagesize'] page = [] for title in self.__items[current_position:current_position+self.__config['pagesize']] : page.append((current_position,self.__selected_items[current_position],self.__items[current_position])) current_position += 1 return page register_key( 'pagesize', int, doc='Size of a page of items', default=30 )
if 0 <= position < self.__config['pagesize']: self.__cursor_position = position + self.get_page_number( ) * self.__config['pagesize'] def set_items(self, items): '''Set the items''' self.__items = items self.__items_count = len(self.__items) self.__selected_items = [False] * self.__items_count self.__selected_item_count = 0 if self.__cursor_position >= self.__items_count: self.__cursor_position = self.__items_count - 1 if self.__cursor_position < 0: self.__cursor_position = 0 def get_page(self): """Get the current page (which consist of a tuple of 'a global position', 'a boolean which is True if selected', 'a title')""" current_position = self.get_page_number() * self.__config['pagesize'] page = [] for title in self.__items[current_position:current_position + self.__config['pagesize']]: page.append( (current_position, self.__selected_items[current_position], self.__items[current_position])) current_position += 1 return page register_key('pagesize', int, doc='Size of a page of items', default=30)
class GuiInfoWx(GuiInfo): names = [] priority = 50 RSSReaderFrameClass = None def _start_application(self): app = get_simple_app() rss_reader_frame = self.RSSReaderFrameClass(self._config, None) rss_reader_frame.SetRssReader(self._rss_reader) app.SetTopWindow(rss_reader_frame) rss_reader_frame.Show() rss_reader_frame.Load() app.MainLoop() def get_doc(self): return "" register_key('wx/sashposition', int, doc='Position of the Sash seperation in pixels', default=200) register_key('wx/htmlwindow', str, doc='HTML Window component to use (simple/complex/best)', default='best', advanced=True) # 'gui/next' will be handled elsewere for registration
self._selected_items.remove(self.GetSelection()) self.RefreshAll() def SelectItemNext(self,event=None) : item_selected = self._frame.SelectItem(self.GetSelection()) if item_selected : self._selected_items.add(self.GetSelection()) else : self._selected_items.remove(self.GetSelection()) self.Next(event) self.RefreshAll() def Prev(self,event=None) : self._frame.OnPrevItem() def Next(self,event=None) : self._frame.OnNextItem() def GetSelectedItems(self) : if len(self._selected_items) == 0 : self.SelectItem() return list(self._selected_items) def OnDClick(self,event=None) : self.SelectItem() register_key( 'wx/htmllistbox/useimage', bool, doc='Use image for check/uncheck', default=True, advanced=True ) register_key( 'wx/htmllistbox/usebold', bool, doc='Use bold for check', default=True, advanced=True )
return get_simple_app._simple_app get_simple_app._simple_app = wx.PySimpleApp(0) wx.InitAllImageHandlers() return get_simple_app._simple_app class GuiInfoWx(GuiInfo): names = [] priority = 50 RSSReaderFrameClass = None def _start_application(self): app = get_simple_app() rss_reader_frame = self.RSSReaderFrameClass(self._config, None) rss_reader_frame.SetRssReader(self._rss_reader) app.SetTopWindow(rss_reader_frame) rss_reader_frame.Show() rss_reader_frame.Load() app.MainLoop() def get_doc(self): return "" register_key("wx/sashposition", int, doc="Position of the Sash seperation in pixels", default=200) register_key( "wx/htmlwindow", str, doc="HTML Window component to use (simple/complex/best)", default="best", advanced=True ) # 'gui/next' will be handled elsewere for registration
if binname is None: if len(sys.argv) > 0: binname = sys.argv[0] else: binname = '.' if argv is None: argv = sys.argv[1:] config.process_argv(binname, argv) if config['profile']: cProfile.run(pyrfeed_main.func_code) else: pyrfeed_main() register_key('help', bool, doc='Show help') register_key('help-advanced', bool, doc='Show help for advanced options') register_key('save', bool, doc='Save the options in command line into configuration file', advanced=True) register_key('forcesynchro', bool, doc='Force synchronisation and stop without interactive GUI.', advanced=True) register_key('profile', bool, doc='Profile the current application. Developer only.', advanced=True) if __name__ == '__main__':
class _GuiInfoList(ElementInfoList) : BaseClass = GuiInfo def mainloop(self,config,rss_reader) : self._auto_register() name = config['gui'] if name is None : name = self.get_default_info_name() while (name is not None) and (name in self) : # by default, there is no next gui. del config['gui/next'] gui_info = self[name](config) gui_info.set_rss_reader(rss_reader) gui_info.start_application() gui_info = None name = config['gui/next'] if name is not None : raise ValueError("Don't know Gui type [%s]" % name) gui_info_list = _GuiInfoList() register_key( 'gui', str, doc='The Gui name to use', default=None, advanced=True ) register_key( 'gui/next', str, doc='Next gui to launch when exiting', default=None, internal=True, advanced=True )