Пример #1
0
    def _update_radio_tree(self):
        logging.info("in update radio")
        self.clear_tree()
        self.radio_folder = RadioFolder()
        files = self.radio_folder.get_radio_FPLs()

        def task():
            for fpl in files:
                parent = FModel(fpl.name).add_is_file(False)
                self.append(parent)
                for radio, urls in fpl.urls_dict.iteritems():
                    child = FModel(
                        radio, urls[0]).parent(parent).add_type(FTYPE_RADIO)
                    self.append(child)
            self.auto_add_user_station()
            FC().cache_radio_tree_beans = self.get_all_beans()
            self.is_radio_populated = True

        gobject.idle_add(task)
Пример #2
0
 def update_radio_tree(self):        
     print "in update radio"
     self.clear_tree()
     self.radio_folder = RadioFolder()
     files = self.radio_folder.get_radio_FPLs()        
     for fpl in files:
         parent = FModel(fpl.name).add_is_file(False)
         self.append(parent)
         for radio, urls in fpl.urls_dict.iteritems():
             child = FModel(radio, urls[0]).parent(parent).add_type(FTYPE_RADIO)
             self.append(child)
     self.is_radio_populated = True            
Пример #3
0
 def _update_radio_tree(self):
     logging.info("in update radio")
     self.clear_tree()
     self.radio_folder = RadioFolder()
     files = self.radio_folder.get_radio_FPLs()    
     def task():    
         for fpl in files:
             parent = FModel(fpl.name).add_is_file(False)
             self.append(parent)
             for radio, urls in fpl.urls_dict.iteritems():
                 child = FModel(radio, urls[0]).parent(parent).add_type(FTYPE_RADIO).add_is_file(True)
                 self.append(child)
         
         
     gobject.idle_add(task)            
Пример #4
0
 def _update_radio_tree(self):
     logging.info("in update radio")
     self.clear_tree()
     self.radio_folder = RadioFolder()
     files = self.radio_folder.get_radio_FPLs()    
     def task():    
         for fpl in files:
             parent = FModel(fpl.name).add_is_file(False)
             self.append(parent)
             for radio, urls in fpl.urls_dict.iteritems():
                 child = FModel(radio, urls[0]).parent(parent).add_type(FTYPE_RADIO)
                 self.append(child)
         self.auto_add_user_station()
         FC().cache_radio_tree_beans = self.get_all_beans()
         self.is_radio_populated = True
     gobject.idle_add(task)            
Пример #5
0
class RadioTreeControl(CommonTreeControl):
    def __init__(self, controls):
        CommonTreeControl.__init__(self, controls)
        self.set_reorderable(False)
        self.switcher_label = _("My channels")
        """column config"""
        column = gtk.TreeViewColumn(_("Radio Stations"), gtk.CellRendererText(), text=self.text[0], font=self.font[0])
        column.set_resizable(True)
        self.set_headers_visible(True)
        self.append_column(column)
        
        self.configure_send_drag()
        self.configure_recive_drag()
        self.set_type_tree()
        self.lazy_load()
        
    def activate_perspective(self):
        FC().left_perspective = LEFT_PERSPECTIVE_RADIO
    
    def on_button_press(self, w, e):
        if is_double_left_click(e):
            selected = self.get_selected_bean()
            beans = self.get_all_child_beans_by_selected()  
            self.controls.notetabs._append_tab(selected.text, [selected] + beans, optimization=True)
            "run radio channel"
            self.controls.play_first_file_in_playlist()
            
        if is_rigth_click(e): 
            right_click_optimization_for_trees(w, e)
            
            menu = Popup()
            bean = self.get_selected_bean()
            if bean:
                if self.get_selected_bean().is_file:
                    menu.add_item(_("Edit Station"), gtk.STOCK_EDIT, self.on_edit_radio, None)
                    menu.add_item(_("Delete Station"), gtk.STOCK_DELETE, self.delete_selected, None)
                else:
                    menu.add_item(_("Rename Group"), gtk.STOCK_EDIT, self.on_rename_group, None)
                    menu.add_item(_("Delete Group"), gtk.STOCK_DELETE, self.delete_selected, None)
                menu.add_separator()
            menu.add_item(_("Reload radio folder"), gtk.STOCK_REFRESH, self.update_radio_tree, None)            
            menu.show(e)
          
    def on_edit_radio(self):
        bean = self.get_selected_bean()
        name, url = two_line_dialog(_("Edit Radio"),
                                    parent = self.controls.main_window,
                                    message_text1 = _("Enter new name and URL"),
                                    message_text2 = None,
                                    entry_text1=bean.text, 
                                    entry_text2 = bean.path)
        if not name or not url:
            return
        bean.add_text(name)
        bean.add_path(url)
        
        rows = self.find_rows_by_element(self.UUID, bean.UUID)
        if rows:
            rows[0][self.text[0]] = name
            rows[0][self.path[0]] = url
    
    def on_rename_group(self):
        bean = self.get_selected_bean()
        name = one_line_dialog(_("Rename Group"), self.controls.main_window,
                               entry_text=bean.text, message_text1=_("Enter new group name"))
        if not name:
            return
        rows = self.find_rows_by_element(self.UUID, bean.UUID)
        if rows:
            rows[0][self.text[0]] = name
                
    def on_add_station(self):
        name, url = two_line_dialog(_("Add New Radio Station"),
                                    parent = self.controls.main_window,
                                    message_text1 = _("Enter station name and URL"),
                                    message_text2 = None,
                                    entry_text1 = None, 
                                    entry_text2 = "http://")
        if not name or not url:
            return
        bean = self.get_selected_bean()
        new_bean = FModel(name, url).add_type(FTYPE_RADIO).add_is_file(True)
        if bean:
            if bean.is_file:
                new_bean.add_parent(bean.parent_level)
            else:
                new_bean.add_parent(bean.level)
        self.append(new_bean)

    def on_save(self):
        pass
    
    def update_radio_tree(self):
        self.controls.in_thread.run_with_progressbar(self._update_radio_tree)
        
    def _update_radio_tree(self):
        logging.info("in update radio")
        self.clear_tree()
        self.radio_folder = RadioFolder()
        files = self.radio_folder.get_radio_FPLs()    
        def task():    
            for fpl in files:
                parent = FModel(fpl.name).add_is_file(False)
                self.append(parent)
                for radio, urls in fpl.urls_dict.iteritems():
                    child = FModel(radio, urls[0]).parent(parent).add_type(FTYPE_RADIO).add_is_file(True)
                    self.append(child)
            
            
        gobject.idle_add(task)            

    def auto_add_user_station(self):
        if os.path.isfile(CACHE_RADIO_FILE) and os.path.getsize(CACHE_RADIO_FILE) > 0:
            with open(CACHE_RADIO_FILE, 'r') as f:
                list = f.readlines()
                parent_level_for_depth = {}
                previous = {"bean": None, "depth": 0, "name": '', "url": ''} 
                for line in list:
                    depth = self.simbol_counter(line, '-')
                    try:
                        name = line[depth : line.index('#')]
                    except ValueError, e:
                        logging.warning('\'#\' ' + str(e) + ' in line \"' + line + '\"')
                        continue
                    url = line[line.index('#') + 1 : -1]
                    bean = FModel(name)
                    if url:
                        bean.add_is_file(True).add_path(url).add_type(FTYPE_RADIO)
                    if previous["depth"] < depth:
                        bean.add_parent(previous["bean"].level)
                    elif previous["depth"] > depth:
                        bean.add_parent(parent_level_for_depth[depth]) 
                    else:
                        if previous["bean"]:
                            bean.add_parent(previous["bean"].parent_level)
                        
                    self.append(bean)
                    parent_level_for_depth[depth] = bean.parent_level
                    previous = {"bean": bean, "depth": depth, "name": name, "url": url}
Пример #6
0
class RadioTreeControl(CommonTreeControl):
    def __init__(self, controls):
        CommonTreeControl.__init__(self, controls)
        self.set_reorderable(False)
        
        """column config"""
        column = gtk.TreeViewColumn(_("Radio Stations"), gtk.CellRendererText(), text=self.text[0], font=self.font[0])
        column.set_resizable(True)
        self.set_headers_visible(True)
        self.append_column(column)
        
        self.configure_send_drug()

        self.set_type_tree()
        self.is_lazy_load = False
    
    def activate_perspective(self):
        FC().left_perspective = LEFT_PERSPECTIVE_RADIO
    
    def on_button_press(self, w, e):
        if is_double_left_click(e):
            selected = self.get_selected_bean()
            beans = self.get_all_child_beans_by_selected()  
            self.controls.append_to_new_notebook(selected.text, [selected] + beans)
            "run radio channel"
            self.controls.play_first_file_in_playlist()
            
        if is_rigth_click(e): 
            menu = Popup()
            menu.add_item(_("Add Station"), gtk.STOCK_ADD, self.on_add_station, None)
            menu.add_item(_("Delete Station"), gtk.STOCK_DELETE, self.on_delete_station, None)
            menu.add_item(_("Edit Radio"), gtk.STOCK_EDIT, self.on_edit_radio, None)
            menu.add_separator()
            menu.add_item(_("Reload radio folder"), gtk.STOCK_REFRESH, self.update_radio_tree, None)            
            menu.show(e)
    
    def on_edit_radio(self):
        bean = self.get_selected_bean()
        text = two_line_dialog(_("Change Radio Station name and path"), _("Url"), bean.text, bean.path)
        if not text[0] or not text[1]:
            return
        bean.add_text(text[0])
        bean.add_path(text[1])
        self.update_bean(bean)
    
    def on_add_station(self):
        name, url = two_line_dialog("Add New Radio Station", "Enter Name and URL", "", "http://")
        bean = FModel(name, url).add_is_file(True)
        self.append(bean)
    
    def on_delete_station(self):
        self.delete_selected()
    
    def update_radio_tree(self):        
        print "in update radio"
        self.clear_tree()
        self.radio_folder = RadioFolder()
        files = self.radio_folder.get_radio_FPLs()        
        for fpl in files:
            parent = FModel(fpl.name).add_is_file(False)
            self.append(parent)
            for radio, urls in fpl.urls_dict.iteritems():
                child = FModel(radio, urls[0]).parent(parent).add_type(FTYPE_RADIO)
                self.append(child)
        self.is_radio_populated = True            
    
    def lazy_load(self):
        if not self.is_lazy_load:
            self.populate_all(FC().cache_radio_tree_beans)
            if not FC().cache_radio_tree_beans:
                self.update_radio_tree()
                FC().cache_radio_tree_beans = self.get_all_beans()
            self.is_lazy_load = True 
Пример #7
0
class RadioTreeControl(CommonTreeControl):
    def __init__(self, controls):
        CommonTreeControl.__init__(self, controls)
        self.set_reorderable(False)
        
        """column config"""
        column = gtk.TreeViewColumn(_("Radio Stations"), gtk.CellRendererText(), text=self.text[0], font=self.font[0])
        column.set_resizable(True)
        self.set_headers_visible(True)
        self.append_column(column)
        
        self.configure_send_drag()

        self.set_type_tree()
        #self.is_lazy_load = False
        thread.start_new_thread(self.lazy_load, ())
    
    def activate_perspective(self):
        FC().left_perspective = LEFT_PERSPECTIVE_RADIO
    
    def on_button_press(self, w, e):
        if is_double_left_click(e):
            selected = self.get_selected_bean()
            beans = self.get_all_child_beans_by_selected()  
            self.controls.notetabs._append_tab(selected.text, [selected] + beans, optimization=True)
            "run radio channel"
            self.controls.play_first_file_in_playlist()
            
        if is_rigth_click(e): 
            menu = Popup()
            menu.add_item(_("Add Station"), gtk.STOCK_ADD, self.on_add_station, None)
            menu.add_item(_("Delete Station"), gtk.STOCK_DELETE, self.on_delete_station, None)
            menu.add_item(_("Edit Radio"), gtk.STOCK_EDIT, self.on_edit_radio, None)
            menu.add_separator()
            menu.add_item(_("Reload radio folder"), gtk.STOCK_REFRESH, self.update_radio_tree, None)            
            menu.show(e)
    
    def on_edit_radio(self):
        bean = self.get_selected_bean()
        name, url = two_line_dialog(_("Change Radio Station name and path"), _("Url"), bean.text, bean.path)
        if not name or not url:
            return
        if os.path.isfile(CACHE_RADIO_FILE) and os.path.getsize(CACHE_RADIO_FILE)>0:
            with open(CACHE_RADIO_FILE, 'r') as f:
                list = f.readlines()
                for i, line in enumerate(list):
                    if line == "#" + bean.text + '\n' and list[i+1] == bean.path + '\n':
                        list[i] = "#" + name + '\n'
                        list[i+1] = url + '\n'
            with open(CACHE_RADIO_FILE, 'w') as f:
                f.writelines(list)

        bean.add_text(name)
        bean.add_path(url)
        
        rows = self.find_rows_by_element(self.UUID, bean.UUID)
        if rows:
            rows[0][self.text[0]] = name
            rows[0][self.path[0]] = url
                
    def on_add_station(self):
        name, url = two_line_dialog("Add New Radio Station", "Enter Name and URL", "", "http://")
        with open(CACHE_RADIO_FILE, 'a') as f:
            f.write('#' + name + '\n' + url + '\n')
        bean = FModel(name, url).add_is_file(True)
        bean.type=FTYPE_RADIO
        self.append(bean)
    
    def on_delete_station(self):
        bean = self.get_selected_bean()
        
        if os.path.isfile(CACHE_RADIO_FILE) and os.path.getsize(CACHE_RADIO_FILE) > 0:
            with open(CACHE_RADIO_FILE, 'r') as f:
                list = f.readlines()
                for i, line in enumerate(list):
                    if line == "#" + bean.text + '\n' and list[i+1] == bean.path + '\n':
                        del list[i+1]
                        del list[i]
                        
            with open(CACHE_RADIO_FILE, 'w') as f:
                f.writelines(list)
        
        self.delete_selected()
        
    def update_radio_tree(self):
        self.controls.in_thread.run_with_progressbar(self._update_radio_tree)
        
    def _update_radio_tree(self):
        logging.info("in update radio")
        self.clear_tree()
        self.radio_folder = RadioFolder()
        files = self.radio_folder.get_radio_FPLs()    
        def task():    
            for fpl in files:
                parent = FModel(fpl.name).add_is_file(False)
                self.append(parent)
                for radio, urls in fpl.urls_dict.iteritems():
                    child = FModel(radio, urls[0]).parent(parent).add_type(FTYPE_RADIO).add_is_file(True)
                    self.append(child)
            self.auto_add_user_station()
            FC().cache_radio_tree_beans = self.get_all_beans()
            self.is_radio_populated = True
        gobject.idle_add(task)            

    def auto_add_user_station(self):
        if os.path.isfile(CACHE_RADIO_FILE) and os.path.getsize(CACHE_RADIO_FILE) > 0:
            with open(CACHE_RADIO_FILE, 'r') as f:
                list = f.readlines()
                for i, line in enumerate(list):
                    if line.startswith("#"):
                        name = line[1:-1]
                        url = list[i+1][0:-1]
                        bean = FModel(name, url).add_is_file(True)
                        self.append(bean)
                        
    
    def lazy_load(self):
        
            logging.debug("radio Lazy loading")
            self.populate_all(FCache().cache_radio_tree_beans)
            if not FCache().cache_radio_tree_beans:
                logging.debug("populdate from file system")
                self.update_radio_tree()
                               
        
    def on_quit(self):
        FCache().cache_radio_tree_beans = self.get_all_beans()
Пример #8
0
class RadioTreeControl(CommonTreeControl):
    def __init__(self, controls):
        CommonTreeControl.__init__(self, controls)
        self.set_reorderable(False)
        """column config"""
        column = gtk.TreeViewColumn(_("Radio Stations"),
                                    gtk.CellRendererText(),
                                    text=self.text[0],
                                    font=self.font[0])
        column.set_resizable(True)
        self.set_headers_visible(True)
        self.append_column(column)

        self.configure_send_drag()

        self.set_type_tree()
        self.is_lazy_load = False

    def activate_perspective(self):
        FC().left_perspective = LEFT_PERSPECTIVE_RADIO

    def on_button_press(self, w, e):
        if is_double_left_click(e):
            selected = self.get_selected_bean()
            beans = self.get_all_child_beans_by_selected()
            self.controls.notetabs._append_tab(selected.text,
                                               [selected] + beans,
                                               optimization=True)
            "run radio channel"
            self.controls.play_first_file_in_playlist()

        if is_rigth_click(e):
            menu = Popup()
            menu.add_item(_("Add Station"), gtk.STOCK_ADD, self.on_add_station,
                          None)
            menu.add_item(_("Delete Station"), gtk.STOCK_DELETE,
                          self.on_delete_station, None)
            menu.add_item(_("Edit Radio"), gtk.STOCK_EDIT, self.on_edit_radio,
                          None)
            menu.add_separator()
            menu.add_item(_("Reload radio folder"), gtk.STOCK_REFRESH,
                          self.update_radio_tree, None)
            menu.show(e)

    def on_edit_radio(self):
        bean = self.get_selected_bean()
        name, url = two_line_dialog(_("Change Radio Station name and path"),
                                    _("Url"), bean.text, bean.path)
        if not name or not url:
            return

        if os.path.isfile(
                CACHE_RADIO_FILE) and os.path.getsize(CACHE_RADIO_FILE) > 0:
            with open(CACHE_RADIO_FILE, 'r') as f:
                list = f.readlines()
                for i, line in enumerate(list):
                    if line == "#" + bean.text + '\n' and list[
                            i + 1] == bean.path + '\n':
                        list[i] = "#" + name + '\n'
                        list[i + 1] = url + '\n'
            with open(CACHE_RADIO_FILE, 'w') as f:
                f.writelines(list)

        bean.add_text(name)
        bean.add_path(url)
        self.update_bean(bean)

    def on_add_station(self):
        name, url = two_line_dialog("Add New Radio Station",
                                    "Enter Name and URL", "", "http://")
        with open(CACHE_RADIO_FILE, 'a') as f:
            f.write('#' + name + '\n' + url + '\n')
        bean = FModel(name, url).add_is_file(True)
        bean.type = FTYPE_RADIO
        self.append(bean)

    def on_delete_station(self):
        bean = self.get_selected_bean()

        if os.path.isfile(
                CACHE_RADIO_FILE) and os.path.getsize(CACHE_RADIO_FILE) > 0:
            with open(CACHE_RADIO_FILE, 'r') as f:
                list = f.readlines()
                for i, line in enumerate(list):
                    if line == "#" + bean.text + '\n' and list[
                            i + 1] == bean.path + '\n':
                        del list[i + 1]
                        del list[i]

            with open(CACHE_RADIO_FILE, 'w') as f:
                f.writelines(list)

        self.delete_selected()

    def update_radio_tree(self):
        self.controls.in_thread.run_with_progressbar(self._update_radio_tree)

    def _update_radio_tree(self):
        logging.info("in update radio")
        self.clear_tree()
        self.radio_folder = RadioFolder()
        files = self.radio_folder.get_radio_FPLs()

        def task():
            for fpl in files:
                parent = FModel(fpl.name).add_is_file(False)
                self.append(parent)
                for radio, urls in fpl.urls_dict.iteritems():
                    child = FModel(
                        radio, urls[0]).parent(parent).add_type(FTYPE_RADIO)
                    self.append(child)
            self.auto_add_user_station()
            FC().cache_radio_tree_beans = self.get_all_beans()
            self.is_radio_populated = True

        gobject.idle_add(task)

    def auto_add_user_station(self):
        if os.path.isfile(
                CACHE_RADIO_FILE) and os.path.getsize(CACHE_RADIO_FILE) > 0:
            with open(CACHE_RADIO_FILE, 'r') as f:
                list = f.readlines()
                for i, line in enumerate(list):
                    if line.startswith("#"):
                        name = line[1:-1]
                        url = list[i + 1][0:-1]
                        bean = FModel(name, url).add_is_file(True)
                        self.append(bean)

    def lazy_load(self):
        if not self.is_lazy_load:
            logging.debug("radio Lazy loading")
            self.populate_all(FCache().cache_radio_tree_beans)
            if not FCache().cache_radio_tree_beans:
                logging.debug("populdate from file system")
                self.update_radio_tree()
            self.is_lazy_load = True

    def on_quit(self):
        FCache().cache_radio_tree_beans = self.get_all_beans()