def update_seek_status(self, position_sec, duration_sec): duration_str = convert_seconds_to_text(duration_sec) position_str = convert_seconds_to_text(position_sec) seek_text = position_str + " / " + duration_str seek_persent = (position_sec + 0.0) / (duration_sec) self.progresbar.set_text(seek_text) if 0 <= seek_persent <= 1: self.progresbar.set_fraction(seek_persent)
def update_seek_status(self, position_sec, duration_sec): duration_str = convert_seconds_to_text(duration_sec) position_str = convert_seconds_to_text(position_sec) seek_persent = (position_sec + 0.0) / (duration_sec) seek_text = position_str + " / " + duration_str if 0 <= seek_persent <= 1: self.progressbar.set_text(seek_text) gobject.idle_add(self.progressbar.set_fraction, seek_persent) if self.seek_bar_movie: self.seek_bar_movie.update_seek_status(position_sec, duration_sec)
def update_seek_status(self, position_sec, duration_sec): duration_str = convert_seconds_to_text(duration_sec) position_str = convert_seconds_to_text(position_sec) seek_text = position_str + " / " + duration_str seek_persent = (position_sec + 0.0) / (duration_sec) self.progresbar.set_text(seek_text) if 0 <= seek_persent <= 1: self.progresbar.set_fraction(seek_persent) if self.seek_bar_movie: self.seek_bar_movie.update_seek_status(position_sec, duration_sec)
def find_tracks_by_url(self, url): logging.debug("Search By URL") index = url.rfind("#") if index > 0: url = url[:index] index = url.find("id=") if index < 0: return None id = url[index + 3:] id = int(id) if id > 0: results = self.get_result('audio.get', "uid=" + str(id)) else: results = self.get_result('audio.get', "gid=" + str(abs(id))) childs = [] for line in results: bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'].replace("https://", "http://") bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid']) childs.append(bean) return childs
def find_tracks_by_query(self, query): def post(): self.find_tracks_by_query(self, query) if self.is_show_authorization(post): return logging.info("start search songs " + query) query = urllib.quote(query.encode("utf-8")) list = self.get_result("audio.search", "q=" + query) childs = [] if not list: return childs for line in list[1:]: bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] childs.append(bean) return childs
def find_tracks_by_url(self, url): logging.debug("Search By URL") index = url.rfind("#") if index > 0: url = url[:index] index = url.find("id=") if index < 0: return None id = url[index+3:] id = int(id) if id > 0: results = self.api.get('audio.get',uid=id) else: results = self.api.get('audio.get',gid=abs(id)) childs = [] for line in results: bean = FModel(line['artist']+' - '+line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] childs.append(bean) return childs
def update_seek_status(self, position_sec, duration_sec): if duration_sec == 0: seek_text = "00:00 / 00:00" seek_persent = 0.999 else: duration_str = convert_seconds_to_text(duration_sec) position_str = convert_seconds_to_text(position_sec) seek_persent = (position_sec + 0.0) / duration_sec seek_text = position_str + " / " + duration_str if 0 <= seek_persent <= 1: self.progressbar.set_text(seek_text) self.progressbar.set_fraction(seek_persent) if self.seek_bar_movie: self.seek_bar_movie.update_seek_status(position_sec, duration_sec)
def get_common_beans(self): beans = [] cue = self.parse() if not self.is_cue_valid(): return [] for i, track in enumerate(cue.tracks): bean = FModel(text=track.performer + " - " + track.title, path=track.path) bean.artist = track.performer bean.tracknumber = i + 1 bean.title = track.title bean.album = self.cue_file.title bean.name = bean.text bean.start_sec = track.get_start_time_sec() bean.duration_sec = track.duration bean.time = convert_seconds_to_text(track.duration) bean.is_file = True try: bean.info = foobnix.util.id3_util.normalized_info(get_mutagen_audio(track.path).info, bean) except Exception, e: logging.warn(str(e) + " " + bean.path) bean.info = "" if not bean.title or not bean.artist: bean = udpate_id3(bean) beans.append(bean)
def find_tracks_by_url(self, url): logging.debug("Search By URL") index = url.rfind("#") if index > 0: url = url[:index] index = url.find("id=") if index < 0: return None id = url[index + 3 :] id = int(id) if id > 0: results = self.get_result("audio.get", "uid=" + str(id)) else: results = self.get_result("audio.get", "gid=" + str(abs(id))) childs = [] for line in results: bean = FModel(line["artist"] + " - " + line["title"]) bean.aritst = line["artist"] bean.title = line["title"] bean.time = convert_seconds_to_text(line["duration"]) bean.path = line["url"] childs.append(bean) return childs
def find_tracks_by_url(self, url): logging.debug("Search By URL") index = url.rfind("#") if index > 0: url = url[:index] index = url.find("id=") if index < 0: return None id = url[index + 3:] id = int(id) if id > 0: results = self.get_result('audio.get', "uid=" + str(id)) else: results = self.get_result('audio.get', "gid=" + str(abs(id))) childs = [] for line in results: bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] childs.append(bean) return childs
def udpate_id3(bean): if bean and bean.path and os.path.isfile(bean.path): try: audio = get_mutagen_audio(bean.path) except Exception, e: logging.warn("ID3 NOT MP3" + str(e) + bean.path) return bean if audio: if isinstance(audio, MP4): if audio.has_key('\xa9ART'): bean.artist = audio["\xa9ART"][0] if audio.has_key('\xa9nam'): bean.title = audio["\xa9nam"][0] if audio.has_key('\xa9alb'): bean.album = audio["\xa9alb"][0] if audio.has_key('\xa9wrt'): bean.composer = audio["\xa9wrt"][0] if audio.has_key('trkn'): if not FC().numbering_by_order: bean.tracknumber = audio['trkn'][0] else: if audio.has_key('artist'): bean.artist = decode_cp866(audio["artist"][0]) if audio.has_key('title'): bean.title = decode_cp866(audio["title"][0]) if audio.has_key('album'): bean.album = decode_cp866(audio["album"][0]) if audio.has_key('composer'): bean.composer = decode_cp866(audio['composer'][0]) if audio.has_key('tracknumber'): if not FC().numbering_by_order: bean.tracknumber = audio["tracknumber"][0] bean.tracknumber duration_sec = bean.duration_sec if not bean.duration_sec and audio.info.length: duration_sec = int(audio.info.length) if audio.info.__dict__: bean.info = normalized_info(audio.info, bean) if bean.artist or bean.title: if bean.artist and bean.title: pass elif bean.artist: bean.title = _("Unknown title") elif bean.title: bean.artist = _("Unknown artist") bean.text = bean.artist + " - " + bean.title if bean.tracknumber: try: bean.tracknumber = int(bean.tracknumber) except: bean.tracknumber = "" bean = update_bean_from_normalized_text(bean) bean.time = convert_seconds_to_text(duration_sec)
def update_id3(bean): if bean and bean.path and os.path.isfile(bean.path): try: audio = get_mutagen_audio(bean.path) except Exception as e: logging.warn("ID3 NOT FOUND IN " + str(e) + " " + bean.path) return bean if audio: if isinstance(audio, MP4): if '\xa9ART' in audio: bean.artist = audio["\xa9ART"][0] if '\xa9nam' in audio: bean.title = audio["\xa9nam"][0] if '\xa9alb' in audio: bean.album = audio["\xa9alb"][0] if '\xa9wrt' in audio: bean.composer = audio["\xa9wrt"][0] if 'trkn' in audio: #if not FC().numbering_by_order: bean.tracknumber = audio['trkn'][0] else: if 'artist' in audio: bean.artist = correct_encoding(audio["artist"][0]) if 'title' in audio: bean.title = correct_encoding(audio["title"][0]) if 'album' in audio: bean.album = correct_encoding(audio["album"][0]) if 'composer' in audio: bean.composer = correct_encoding(audio['composer'][0]) if 'cuesheet' in audio: bean.cue = audio['cuesheet'][ 0] # correct_encoding is in cue parser if 'tracknumber' in audio: #if not FC().numbering_by_order: bean.tracknumber = audio["tracknumber"][0] if not bean.duration_sec and audio.info.length: bean.duration_sec = int(audio.info.length) if audio.info.__dict__: bean.info = normalized_info(audio.info, bean) if bean.artist or bean.title: if bean.artist and bean.title: pass elif bean.artist: bean.title = _("Unknown title") elif bean.title: bean.artist = _("Unknown artist") bean.text = bean.artist + " - " + bean.title ''' if bean.tracknumber: try: bean.tracknumber = int(bean.tracknumber) except: bean.tracknumber = "" ''' bean = update_bean_from_normalized_text(bean) bean.time = convert_seconds_to_text(bean.duration_sec) return bean
def find_track_by_id(self, id): result = self.get_result("audio.get", "audios=" + str(id)) if not result: return None line = result[0] bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid']) return bean
def on_pointer_motion(self, widget, event): width = self.progressbar.get_allocation().width x = event.x duration = self.controls.media_engine.duration_sec seek_percent = (x + 0.0) / width sec = int(duration * seek_percent) sec = convert_seconds_to_text(sec) self.tooltip_label.set_text(sec) self.tooltip.show_all() unknown_var, x, y, mask = Gdk.get_default_root_window().get_pointer() self.tooltip.move(x + 5, y - 15)
def on_pointer_motion(self, widget, event): width = self.progressbar.get_allocation().width x = event.x duration = self.controls.media_engine.duration_sec seek_percent = (x + 0.0) / width sec = int(duration * seek_percent) sec = convert_seconds_to_text(sec) self.tooltip_label.set_text(sec) self.tooltip.show_all() unknown_var, x, y, mask = Gdk.get_default_root_window().get_pointer() self.tooltip.move(x+5, y-15)
def on_pointer_motion(self, widget, event): width = widget.allocation.width x = event.x duration = self.controls.media_engine.duration_sec seek_percent = (x + 0.0) / width sec = int(duration * seek_percent) sec = convert_seconds_to_text(sec) self.tooltip_label.set_text(sec) self.tooltip.show_all() x, y, mask = gtk.gdk.get_default_root_window().get_pointer() #@UndefinedVariable @UnusedVariable self.tooltip.move(x+15, y+15)
def on_pointer_motion(self, widget, event): width = widget.allocation.width x = event.x duration = self.controls.media_engine.duration_sec seek_percent = (x + 0.0) / width sec = int(duration * seek_percent) sec = convert_seconds_to_text(sec) self.tooltip_label.set_text(sec) self.tooltip.show_all() x, y, mask = gtk.gdk.get_default_root_window().get_pointer( ) #@UndefinedVariable @UnusedVariable self.tooltip.move(x + 15, y + 15)
def task(): old_iters = self.get_child_iters_by_parent(self.model, self.get_iter_from_bean(parent)); childs = [] for line in self.controls.vk_service.api.get('audio.get',uid=parent.user_id): bean = FModel(line['artist']+' - '+line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] childs.append(bean) update_parent_for_beans(childs, parent) self.append_all(childs) gobject.idle_add(self.remove_iters,old_iters)
def task(): for line in self.controls.vk_service.get_result('audio.get',"uid="+parent.user_id): logging.debug(line); bean = FModel(line['artist']+' - '+line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] bean.is_file = True row = self.get_row_from_bean(bean); self.model.append(p_iter, row) for rem in old_iters: self.model.remove(rem)
def task(): old_iters = self.get_child_iters_by_parent( self.model, self.get_iter_from_bean(parent)) childs = [] for line in self.controls.vk_service.api.get('audio.get', uid=parent.user_id): bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] childs.append(bean) update_parent_for_beans(childs, parent) self.append_all(childs) gobject.idle_add(self.remove_iters, old_iters)
def task(): for line in self.controls.vk_service.get_result( 'audio.get', "uid=" + parent.user_id): logging.debug(line) bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] bean.is_file = True row = self.get_row_from_bean(bean) self.model.append(p_iter, row) for rem in old_iters: self.model.remove(rem)
def find_track_by_id(self, id): if id is not None: parts = id.split("_") result = self.get_result("audio.get", "owner_id=%s&audio_ids=%s" % (str(parts[0]), str(parts[1]))) line = result[1] else: result = self.get_result("audio.get", "audios=" + str(id)) line = result[0] if not result: return None bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'].replace("https://", "http://") bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid']) return bean
def get_user_tracks_as_beans(self, user_id): beans = [] result = self.controls.vk_service.get_result('audio.get', "uid=" + user_id) if not result: beans = [FDModel(_("No results found")).add_is_file(True)] else: for line in result: bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] bean.aid = line['aid'] bean.oid = line['owner_id'] bean.is_file = True bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid']) beans.append(bean) return beans
def get_common_beans(self): beans = [] cue = self.parse() if not self.is_cue_valid(): return [] for i, track in enumerate(cue.tracks): bean = FModel(text=track.performer + " - " + track.title, path=track.path) bean.artist = track.performer bean.tracknumber = i + 1 bean.title = track.title bean.name = bean.text bean.start_sec = track.get_start_time_sec() bean.duration_sec = track.duration bean.time = convert_seconds_to_text(track.duration) bean.is_file = True beans.append(bean) return beans
def find_track_by_id(self, id): if id is not None: parts = id.split("_") result = self.get_result( "audio.get", "owner_id=%s&audio_ids=%s" % (str(parts[0]), str(parts[1]))) line = result[1] else: result = self.get_result("audio.get", "audios=" + str(id)) line = result[0] if not result: return None bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'].replace("https://", "http://") bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid']) return bean
def find_tracks_by_query(self, query): logging.info("start search songs " + query) query = urllib.quote(query.encode("utf-8")) list = self.get_result("audio.search", "q=" + query) childs = [] if not list: return childs for line in list[1:]: bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'].replace("https://", "http://") bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid']) childs.append(bean) return childs
def find_tracks_by_query(self, query): logging.info("start search songs " + query) query = urllib.quote(query.encode("utf-8")) list = self.get_result("audio.search", "q=" + query) childs = [] if not list: return childs for line in list[1:]: bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid']) childs.append(bean) return childs
def normalized_info(info, bean): list = info.pprint().split(", ") new_list = [] bean.size = os.path.getsize(bean.path) new_list.append(list[0]) if info.__dict__.has_key('channels'): new_list.append('Ch: ' + str(info.channels)) if info.__dict__.has_key('bits_per_sample'): new_list.append(str(info.bits_per_sample) + ' bit') if info.__dict__.has_key('sample_rate'): new_list.append(str(info.sample_rate) + 'Hz') if info.__dict__.has_key('bitrate'): new_list.append(str(info.bitrate/1000) + ' kbps') else: kbps = int(round(bean.size*8/info.length/1000)) new_list.append(str(kbps+1 if kbps % 2 else kbps) + ' kbps') if info.__dict__.has_key('length'): new_list.append(convert_seconds_to_text(int(info.length))) size = '%.2f MB' % (float(bean.size)/1024/1024) new_list.append(size) return " | ".join(new_list)
def normalized_info(info, bean): list = info.pprint().split(", ") new_list = [] bean.size = os.path.getsize(bean.path) new_list.append(list[0]) if info.__dict__.has_key('channels'): new_list.append('Ch: ' + str(info.channels)) if info.__dict__.has_key('bits_per_sample'): new_list.append(str(info.bits_per_sample) + ' bit') if info.__dict__.has_key('sample_rate'): new_list.append(str(info.sample_rate) + 'Hz') if info.__dict__.has_key('bitrate'): new_list.append(str(info.bitrate / 1000) + ' kbps') else: kbps = int(round(bean.size * 8 / info.length / 1000)) new_list.append(str(kbps + 1 if kbps % 2 else kbps) + ' kbps') if info.__dict__.has_key('length'): new_list.append(convert_seconds_to_text(int(info.length))) size = '%.2f MB' % (float(bean.size) / 1024 / 1024) new_list.append(size) return " | ".join(new_list)
def udpate_id3(bean): if bean and bean.path and os.path.isfile(bean.path): try: audio = get_mutagen_audio(bean.path) except Exception, e: logging.warn("ID3 NOT MP3" + str(e) + bean.path) return bean if audio: if isinstance(audio, MP4): if audio.has_key('\xa9ART'): bean.artist = audio["\xa9ART"][0] if audio.has_key('\xa9nam'): bean.title = audio["\xa9nam"][0] if audio.has_key('\xa9alb'): bean.album = audio["\xa9alb"][0] else: if audio.has_key('artist'): bean.artist = decode_cp866(audio["artist"][0]) if audio.has_key('title'): bean.title = decode_cp866(audio["title"][0]) if audio.has_key('album'): bean.album = decode_cp866(audio["album"][0]) #if audio and audio.has_key('tracknumber'): bean.tracknumber = audio["tracknumber"][0] #else: #if audio and not audio.has_key('tracknumber'): duration_sec = bean.duration_sec if not bean.duration_sec: if audio and audio.info and audio.info.length: duration_sec = int(audio.info.length) if audio and audio.info: bean.info = audio.info.pprint() if bean.artist and bean.title: bean.text = bean.artist + " - " + bean.title if bean.tracknumber: try: bean.tracknumber = int(bean.tracknumber) except: bean.tracknumber = "" bean = update_bean_from_normalized_text(bean) bean.time = convert_seconds_to_text(duration_sec)
def find_tracks_by_query(self, query): if not self.is_connected(): return [] logging.info("start search songs" + query) page = self.search(query) if not page: return [] results = self.api.get('audio.search', q=query, count=50) childs = [] for i, line in enumerate(results): if i == 0: continue bean = FModel(line['artist'] + ' - ' + line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] childs.append(bean) return childs
def find_tracks_by_query(self, query): if not self.is_connected(): return [] logging.info("start search songs" + query) page = self.search(query) if not page: return [] results = self.api.get('audio.search',q=query, count=50) childs = [] for i, line in enumerate(results): if i ==0: continue bean = FModel(line['artist']+' - '+line['title']) bean.aritst = line['artist'] bean.title = line['title'] bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] childs.append(bean) return childs
def check(self, expected, argument): self.assertEquals(expected, convert_seconds_to_text(argument))