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}
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()
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
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()