diff -Nru foobnix-2.6.11q/.settings/org.eclipse.core.resources.prefs foobnix-2.6.10quantal/.settings/org.eclipse.core.resources.prefs --- foobnix-2.6.11q/.settings/org.eclipse.core.resources.prefs 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/.settings/org.eclipse.core.resources.prefs 2013-05-04 14:58:13.000000000 +0000 @@ -1,4 +1,3 @@ -#Tue Nov 27 22:14:44 EET 2012 eclipse.preferences.version=1 encoding//foobnix/eq/eq_controller.py=utf-8 encoding//foobnix/eq/eq_gui.py=utf-8 @@ -30,6 +29,7 @@ encoding//foobnix/regui/perspectives.py=utf-8 encoding//foobnix/regui/service/lastfm_service.py=utf-8 encoding//foobnix/regui/service/music_service.py=utf-8 +encoding//foobnix/regui/service/path_service.py=utf-8 encoding//foobnix/regui/service/vk_service.py=utf-8 encoding//foobnix/regui/top.py=utf-8 encoding//foobnix/regui/treeview/common_tree.py=utf-8 diff -Nru foobnix-2.6.11q/.settings/org.eclipse.ltk.core.refactoring.prefs foobnix-2.6.10quantal/.settings/org.eclipse.ltk.core.refactoring.prefs --- foobnix-2.6.11q/.settings/org.eclipse.ltk.core.refactoring.prefs 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/.settings/org.eclipse.ltk.core.refactoring.prefs 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff -Nru foobnix-2.6.11q/1.py foobnix-2.6.10quantal/1.py --- foobnix-2.6.11q/1.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/1.py 2013-05-04 14:58:13.000000000 +0000 @@ -1,168 +1,111 @@ +"""import sys +import gtk +import keybinder -from gi.repository import Gtk -from gi.repository import Gdk -def motion_cb(wid, context, x, y, time): - Gdk.drag_status(context, Gdk.DragAction.COPY, time) - return True -def drop_cb(wid, context, x, y, time): - l.set_text('\n'.join([str(t) for t in context.list_targets()])) - context.finish(True, False, time) - return True -w = Gtk.Window() -w.set_size_request(200, 150) -w.drag_dest_set(0, [], 0) -w.connect('drag_motion', motion_cb) -w.connect('drag_drop', drop_cb) -w.connect('destroy', lambda w: Gtk.main_quit()) -l = Gtk.Label() -w.add(l) -w.show_all() -Gtk.main() -'''from gi.repository import Gtk, Gdk, GdkPixbuf - -(TARGET_ENTRY_TEXT, TARGET_ENTRY_PIXBUF) = range(2) -(COLUMN_TEXT, COLUMN_PIXBUF) = range(2) - -DRAG_ACTION = Gdk.DragAction.COPY - -class DragDropWindow(Gtk.Window): - +def works(): + print 'works - pressed' + sys.stdout.flush() + +def broken(): + print 'broken - pressed' + sys.stdout.flush() + +keybinder.bind('m', works) +keybinder.bind('M', works) +keybinder.bind('exclam', works) + +keybinder.bind('z', broken) +keybinder.bind('Z', broken) + +gtk.main() +from foobnix.fc.fc import FC + +''' +Created on Sep 2, 2010 + +@author: ivan +''' +import gst +import gtk +class Player(): + + def __init__1(self): + self.player = gst.element_factory_make("playbin", "player") + #mad = gst.element_factory_make("mad", "mad") + #source = gst.element_factory_make("souphttpsrc", "source") + + #self.player.add(source,mad) + #gst.element_link_many(source,mad) + bus = self.player.get_bus() + bus.connect("message", self.on_message) + def __init__(self): - Gtk.Window.__init__(self, title="Drag and Drop Demo") - - vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) - self.add(vbox) - - hbox = Gtk.Box(spacing=12) - vbox.pack_start(hbox, True, True, 0) - - self.iconview = DragSourceIconView() - self.drop_area = DropArea() - - hbox.pack_start(self.iconview, True, True, 0) - hbox.pack_start(self.drop_area, True, True, 0) - - button_box = Gtk.Box(spacing=6) - vbox.pack_start(button_box, True, False, 0) - - image_button = Gtk.RadioButton.new_with_label_from_widget(None, - "Images") - image_button.connect("toggled", self.add_image_targets) - button_box.pack_start(image_button, True, False, 0) - - text_button = Gtk.RadioButton.new_with_label_from_widget(image_button, - "Text") - text_button.connect("toggled", self.add_text_targets) - button_box.pack_start(text_button, True, False, 0) + self.player = gst.Pipeline("player") + source = gst.element_factory_make("souphttpsrc", "source") + volume = gst.element_factory_make("volume", "volume") + mad = gst.element_factory_make("mad", "mad") + audioconvert = gst.element_factory_make("audioconvert", "audioconvert") + audioresample = gst.element_factory_make("audioresample", "audioresample") + alsasink = gst.element_factory_make("alsasink", "alsasink") + #alsasink = gst.element_factory_make("audiotestsrc", "audiotestsrc") + + self.player.add(source, mad,volume, audioconvert, audioresample, alsasink) + gst.element_link_many(source, mad, volume,audioconvert, audioresample, alsasink) + + bus = self.player.get_bus() + bus.add_signal_watch() + bus.connect("message", self.on_message) + + def on_message(self, bus, message): + print message + + + def play(self,filepath): + source = self.player.get_by_name("source") + if source: + print "PLAY PROXY" + source.set_property("user-agent", "Fooobnix music player") + source.set_property("automatic-redirect", "false") + #self.player.get_by_name("source").set_property("proxy", "195.114.128.12:3128") + source.set_property("proxy", "127.0.0.1:3128") + source.set_property("proxy-id", "dimitry") + print 5 + source.set_property("proxy-pw", "123") + source.set_property("location", filepath) + else: + print "PLAY LOCAL" + self.player.set_property("uri", filepath) + + self.player.get_by_name("volume").set_property('volume', 0.4) + + self.player.set_state(gst.STATE_PLAYING) + + +player = Player() +player.play("http://cs5000.vkontakte.ru/u251278/audio/afe15baa961c.mp3") +#player.play("http://92.243.94.52:8000/intv_russian_hits-128.mp3") +#player.play("http://217.20.164.163:8014") +print "running" + +gtk.main()""" + +import gtk, webkit + +# Create a GTK+ window +w = gtk.Window() +w.set_title("Example Editor") +# Terminate the program when the window is closed +w.connect("destroy", gtk.main_quit) + +# Instantiate the WebKit renderer +editor = webkit.WebView() +# Load an HTML string into the renderer +editor.load_html_string("

This is a test", "file:///") - self.add_image_targets() - - def add_image_targets(self, button=None): - targets = Gtk.TargetList.new([]) - targets.add_image_targets(TARGET_ENTRY_PIXBUF, True) - - self.drop_area.drag_dest_set_target_list(targets) - self.iconview.drag_source_set_target_list(targets) - - def add_text_targets(self, button=None): - self.drop_area.drag_dest_set_target_list(None) - self.iconview.drag_source_set_target_list(None) - - self.drop_area.drag_dest_add_text_targets() - self.iconview.drag_source_add_text_targets() - -class DragSourceIconView(Gtk.IconView): - - def __init__(self): - Gtk.IconView.__init__(self) - self.set_text_column(COLUMN_TEXT) - self.set_pixbuf_column(COLUMN_PIXBUF) - - model = Gtk.ListStore(str, GdkPixbuf.Pixbuf) - model = model.filter_new() - self.set_model(model) - #self.add_item("Item 1", "image") - #self.add_item("Item 2", "gtk-about") - self.add_item("Item 3", "edit-copy") - - self.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [], DRAG_ACTION) - - self.connect("drag-data-get", self.on_drag_data_get) - - - - - def on_drag_data_get(self, widget, drag_context, data, info, time): - print "on_drag_data_get", int(Gtk.TargetFlags.OTHER_APP), int(Gtk.TargetFlags.OTHER_WIDGET) - selected_path = self.get_selected_items()[0] - selected_iter = self.get_model().get_iter(selected_path) - - if info == TARGET_ENTRY_TEXT: - text = self.get_model().get_value(selected_iter, COLUMN_TEXT) - data.set_text(text, -1) - elif info == TARGET_ENTRY_PIXBUF: - pixbuf = self.get_model().get_value(selected_iter, COLUMN_PIXBUF) - data.set_pixbuf(pixbuf) - - def add_item(self, text, icon_name): - pixbuf = Gtk.IconTheme.get_default().load_icon(icon_name, 16, 0) - self.get_model().get_model().append([text, pixbuf]) - - -class DropArea(Gtk.IconView): +# Add the renderer to the window +w.add(editor) +w.show_all() - def __init__(self): - Gtk.IconView.__init__(self) - self.set_text_column(COLUMN_TEXT) - self.set_pixbuf_column(COLUMN_PIXBUF) - - model = Gtk.ListStore(str, GdkPixbuf.Pixbuf) - model = model.filter_new() - self.set_model(model) - #self.add_item("Item 1", "image") - #self.add_item("Item 2", "gtk-about") - self.add_item("Item 3", "edit-copy") - - self.drag_dest_set(Gtk.DestDefaults.ALL, [], DRAG_ACTION) - - self.connect("drag-data-received", self.on_drag_data_received) - - - - - def on_drag_data_get(self, widget, drag_context, data, info, time): - print "on_drag_data_get", int(Gtk.TargetFlags.OTHER_APP), int(Gtk.TargetFlags.OTHER_WIDGET) - selected_path = self.get_selected_items()[0] - selected_iter = self.get_model().get_iter(selected_path) - - if info == TARGET_ENTRY_TEXT: - text = self.get_model().get_value(selected_iter, COLUMN_TEXT) - data.set_text(text, -1) - elif info == TARGET_ENTRY_PIXBUF: - pixbuf = self.get_model().get_value(selected_iter, COLUMN_PIXBUF) - data.set_pixbuf(pixbuf) - - def add_item(self, text, icon_name): - pixbuf = Gtk.IconTheme.get_default().load_icon(icon_name, 16, 0) - self.get_model().get_model().append([text, pixbuf]) - def on_drag_drop(self, w, c, x, y, t): - print "on_drag_drop" - def on_drag_data_received(self, widget, drag_context, x, y, data, info, time): - print "on_drag_data_received" - if info == TARGET_ENTRY_TEXT: - text = data.get_text() - print "Received text: %s" % text - - elif info == TARGET_ENTRY_PIXBUF: - pixbuf = data.get_pixbuf() - width = pixbuf.get_width() - height = pixbuf.get_height() - - print "Received pixbuf with width %spx and height %spx" % (width, height) - -win = DragDropWindow() -win.connect("delete-event", Gtk.main_quit) -win.show_all() -Gtk.main() -''' \ No newline at end of file +# Turn over control to the GTK+ main loop +gtk.main() \ No newline at end of file diff -Nru foobnix-2.6.11q/README foobnix-2.6.10quantal/README --- foobnix-2.6.11q/README 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/README 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,24 @@ +Foobnix music player. + +To install from deb: +http://code.google.com/p/foobnix/downloads/list + +To install from PPA: +deb http://ppa.launchpad.net/foobnix-player/foobnix/ubuntu maverick main + + +To install from sources: +sudo python setup.py install +or +sudo make install +or +./install + +To uninstall: +sudo make uninstall +or +./uninstall + +To Restore default settings: +Need to remove +rm -rf ~$USER/.config/foobnix/foobnix_conf.pkl \ No newline at end of file diff -Nru foobnix-2.6.11q/debian/changelog foobnix-2.6.10quantal/debian/changelog --- foobnix-2.6.11q/debian/changelog 2013-05-04 12:27:38.000000000 +0000 +++ foobnix-2.6.10quantal/debian/changelog 2013-05-04 14:58:47.000000000 +0000 @@ -1,5 +1,5 @@ -foobnix (2.6.11q) quantal; urgency=low +foobnix (2.6.10quantal) quantal; urgency=low - * Initial release (Closes: #10002.6.11q) Upload new release 2.6.11q + * Initial release (Closes: #10002.6.10quantal) Upload new release 2.6.10quantal - -- Ivan Ivanenko Sat, 04 May 2013 16:27:38 +0200 + -- Ivan Ivanenko Sat, 04 May 2013 18:58:47 +0200 diff -Nru foobnix-2.6.11q/debian/control foobnix-2.6.10quantal/debian/control --- foobnix-2.6.11q/debian/control 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/debian/control 2013-05-04 14:58:13.000000000 +0000 @@ -9,8 +9,8 @@ Package: foobnix Architecture: any -Depends: ${python:Depends},${misc:Depends}, python-chardet, python-gtk2, python-simplejson, gstreamer0.10-plugins-good, python-gst0.10, gettext -Recommends: gstreamer0.10-plugins-bad, gstreamer0.10-alsa, python-setuptools, fuseiso, python-notify, libmp3lame0, libfaac0, gstreamer0.10-plugins-ugly, python-webkit, python-keybinder, gstreamer0.10-ffmpeg, ffmpeg +Depends: ${python:Depends},${misc:Depends}, python-chardet, python-gtk2, python-simplejson, gstreamer0.10-plugins-good, python-gst0.10, gettext, ffmpeg, python-webkit, python-keybinder +Recommends: gstreamer0.10-plugins-bad, gstreamer0.10-alsa, python-setuptools, fuseiso, python-notify, libmp3lame0, libfaac0, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg Description: Simple and Powerful music player for Linux All best features in one player. Foobnix small, fast, customizable, powerful music player with user-friendly interface. diff -Nru foobnix-2.6.11q/debian/debian/changelog foobnix-2.6.10quantal/debian/debian/changelog --- foobnix-2.6.11q/debian/debian/changelog 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/debian/debian/changelog 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,15 @@ +foobnix (2.5.13.1-0ubuntu1~natty0) natty; urgency=low + + * debian/control: added debhelper, removed cdbs + * debian/rules: + - Switched to debhelper + - Used the Makefile file (and not directly setup.py) + - Added the Upstream's ChangeLog + + -- Matthieu Baerts (matttbe) Wed, 04 May 2011 22:26:07 +0200 + +foobnix (0.2.2-5) maverick; urgency=low + + * Initial release (Closes: #5) Localization, Debian Integration + + -- Ivan Ivanenko Thu, 25 Nov 2010 17:01:57 +0200 diff -Nru foobnix-2.6.11q/debian/debian/compat foobnix-2.6.10quantal/debian/debian/compat --- foobnix-2.6.11q/debian/debian/compat 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/debian/debian/compat 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1 @@ +7 diff -Nru foobnix-2.6.11q/debian/debian/control foobnix-2.6.10quantal/debian/debian/control --- foobnix-2.6.11q/debian/debian/control 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/debian/debian/control 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,16 @@ +Source: foobnix +Section: sound +Priority: extra +Maintainer: Ivan Ivanenko +Build-Depends: debhelper (>= 7), python (>= 2.5) +XS-Python-Version: >= 2.5 +Standards-Version: 3.9.2 +Homepage: http://www.foobnix.com + +Package: foobnix +Architecture: any +Depends: ${python:Depends},${misc:Depends}, python-chardet, python-gtk2, python-simplejson, gstreamer0.10-plugins-good, python-gst0.10, gettext, ffmpeg, python-webkit, python-keybinder +Recommends: gstreamer0.10-plugins-bad, gstreamer0.10-alsa, python-setuptools, fuseiso, python-notify, libmp3lame0, libfaac0, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg +Description: Simple and Powerful music player for Linux + All best features in one player. Foobnix small, fast, customizable, powerful + music player with user-friendly interface. diff -Nru foobnix-2.6.11q/debian/debian/copyright foobnix-2.6.10quantal/debian/debian/copyright --- foobnix-2.6.11q/debian/debian/copyright 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/debian/debian/copyright 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,39 @@ +This package was debianized by: + + Ivan Ivanenko on Thu, 18 Nov 2010 16:57:35 +0200 + +It was downloaded from: + + http://www.foobnix.com + +Upstream Author: + + Ivan Ivanenko + +Copyright: + + Ivan Ivanenko + +License: + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +On Debian systems, the complete text of the GNU General +Public License version 3 can be found in `/usr/share/common-licenses/GPL-3'. + +The Debian packaging is: + + Copyright (C) 2010 Ivan Ivanenko + +and is licensed under the GPL version 3, see above. \ No newline at end of file diff -Nru foobnix-2.6.11q/debian/debian/docs foobnix-2.6.10quantal/debian/debian/docs --- foobnix-2.6.11q/debian/debian/docs 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/debian/debian/docs 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1 @@ +README diff -Nru foobnix-2.6.11q/debian/debian/rules foobnix-2.6.10quantal/debian/debian/rules --- foobnix-2.6.11q/debian/debian/rules 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/debian/debian/rules 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,17 @@ +#!/usr/bin/make -f + +%: + dh $@ + +override_dh_auto_build: + dh_auto_build -- all + +override_dh_auto_install: + dh_auto_install -Spython_distutils + +override_dh_auto_clean: + dh_auto_clean -Spython_distutils + $(MAKE) clean + +override_dh_installchangelogs: + dh_installchangelogs CHANGELOG diff -Nru foobnix-2.6.11q/debian/rules_ubuntu foobnix-2.6.10quantal/debian/rules_ubuntu --- foobnix-2.6.11q/debian/rules_ubuntu 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/debian/rules_ubuntu 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -#!/usr/bin/make -f - -%: - dh $@ - -override_dh_auto_build: - dh_auto_build -- all - -override_dh_auto_install: - dh_auto_install -- PREFIX=/opt/extras.ubuntu.com/foobnix - -override_dh_auto_clean: - dh_auto_clean -- PREFIX=/opt/extras.ubuntu.com/foobnix - $(MAKE) clean - -override_dh_installchangelogs: - dh_installchangelogs CHANGELOG diff -Nru foobnix-2.6.11q/foobnix/fc/fc.py foobnix-2.6.10quantal/foobnix/fc/fc.py --- foobnix-2.6.11q/foobnix/fc/fc.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/fc/fc.py 2013-05-04 14:58:13.000000000 +0000 @@ -68,14 +68,8 @@ self.nav_selected_paths = [] self.radio_selected_paths = [] self.virtual_selected_paths = [] - - """selected tabs""" - self.nav_selected_tab = 0 - self.pl_selected_tab = 0 - - #"""selected perpective""" - #self.selected_perspective = None - + + self.agent_line = get_ranmom_agent() """main window controls""" @@ -95,7 +89,7 @@ self.menu_style = "new" """main window action""" - self.on_close_window = const.ON_CLOSE_MINIMIZE + self.on_close_window = const.ON_CLOSE_CLOSE """support file formats""" audio_container = [".cue", ".iso.wv"] @@ -132,7 +126,6 @@ self.amount_dm_threads = 3 self.online_save_to_folder = "/tmp" self.automatic_online_save = False - self.nosubfolder = False self.is_save_online = True """info panel""" diff -Nru foobnix-2.6.11q/foobnix/fc/fc_base.py foobnix-2.6.10quantal/foobnix/fc/fc_base.py --- foobnix-2.6.11q/foobnix/fc/fc_base.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/fc/fc_base.py 2013-05-04 14:58:13.000000000 +0000 @@ -29,10 +29,6 @@ """last fm""" self.lfm_login = self.LASTFM_USER self.lfm_password = self.LASTFM_PASSWORD - - self.vk_login = None - self.vk_password = None - self.vk_remember_password = True self.uuid = uuid.uuid4().hex diff -Nru foobnix-2.6.11q/foobnix/fc/fc_cache.py foobnix-2.6.10quantal/foobnix/fc/fc_cache.py --- foobnix-2.6.11q/foobnix/fc/fc_cache.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/fc/fc_cache.py 2013-05-04 14:58:13.000000000 +0000 @@ -9,7 +9,6 @@ import os import shutil -import threading from foobnix.util.singleton import Singleton from foobnix.fc.fc_helper import CONFIG_DIR, FCStates @@ -22,8 +21,6 @@ CACHE_ALBUM_FILE = os.path.join(CONFIG_DIR, 'albums_cache') CACHE_RADIO_FILE = os.path.join(CONFIG_DIR, 'radio_cache') -fcache_save_lock = threading.Lock() - """Foobnix cache""" class FCache: __metaclass__ = Singleton @@ -45,11 +42,8 @@ self.load() def save(self): - fcache_save_lock.acquire() FCStates().save(self, CACHE_FILE) shutil.copy2(CACHE_FILE, CACHE_FILE + "_backup") - if fcache_save_lock.locked(): - fcache_save_lock.release() def load(self): FCStates().load(self, CACHE_FILE) diff -Nru foobnix-2.6.11q/foobnix/helpers/textarea.py foobnix-2.6.10quantal/foobnix/helpers/textarea.py --- foobnix-2.6.11q/foobnix/helpers/textarea.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/helpers/textarea.py 2013-05-04 14:58:13.000000000 +0000 @@ -44,11 +44,6 @@ gobject.idle_add(safe_task) def set_text(self, text="", bold_text=""): - if not text: - text = "" - if not bold_text: - bold_text = "" - def safe_task(): full_text = bold_text + "\n\n" + text + "\n" self.buffer.set_text(full_text) @@ -60,15 +55,15 @@ gobject.idle_add(safe_task) - def clear_tags(self, text): + def clear_tags (self, text): start_index = 0 text_length = len(unicode(text)) - while start_index != -1: + while (start_index != -1): buf_text = self.buffer.get_text(self.buffer.get_iter_at_offset(0), self.buffer.get_iter_at_offset(text_length)) - start_index = buf_text.find("<") + start_index = buf_text.find ("<") if start_index != -1: - end_index = buf_text.find(">", start_index) + end_index = buf_text.find (">", start_index) if end_index != -1: start = self.buffer.get_iter_at_offset(start_index) end = self.buffer.get_iter_at_offset(end_index + 1) Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/foobnix/pixmaps/empty.png and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/foobnix/pixmaps/empty.png differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/foobnix/pixmaps/vk-small.png and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/foobnix/pixmaps/vk-small.png differ diff -Nru foobnix-2.6.11q/foobnix/preferences/configs/hotkey_conf.py foobnix-2.6.10quantal/foobnix/preferences/configs/hotkey_conf.py --- foobnix-2.6.11q/foobnix/preferences/configs/hotkey_conf.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/preferences/configs/hotkey_conf.py 2013-05-04 14:58:13.000000000 +0000 @@ -208,8 +208,7 @@ menu.add_item(_("Volume down"), gtk.STOCK_GO_DOWN, self.set_action_text, "--volume-down") menu.add_item(_("Show-Hide"), gtk.STOCK_FULLSCREEN, self.set_action_text, "--show-hide") menu.add_item(_("Play-Pause"), gtk.STOCK_MEDIA_RECORD, self.set_action_text, "--play-pause") - menu.add_item(_('Download'), gtk.STOCK_ADD, self.set_action_text, "--download") - menu.show(event) + menu.show(event) def on_load(self): if FC().media_keys_enabled == False: @@ -277,4 +276,4 @@ if not HotKeysConfig.binded: self.fill_hotkey_list() bind_all() - + \ No newline at end of file diff -Nru foobnix-2.6.11q/foobnix/preferences/configs/network_conf.py foobnix-2.6.10quantal/foobnix/preferences/configs/network_conf.py --- foobnix-2.6.11q/foobnix/preferences/configs/network_conf.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/preferences/configs/network_conf.py 2013-05-04 14:58:13.000000000 +0000 @@ -14,6 +14,7 @@ from foobnix.preferences.config_plugin import ConfigPlugin from foobnix.util.proxy_connect import set_proxy_settings from foobnix.regui.service.lastfm_service import LastFmService +from foobnix.regui.service.vk_service import VKAuthorizationWindow import gobject @@ -221,5 +222,6 @@ set_proxy_settings() def set_new_vk_window(): - pass + self.controls.vk_service.vk_window = VKAuthorizationWindow(self.controls.vk_service) + gobject.idle_add(set_new_vk_window) diff -Nru foobnix-2.6.11q/foobnix/preferences/configs/other_conf.py foobnix-2.6.10quantal/foobnix/preferences/configs/other_conf.py --- foobnix-2.6.11q/foobnix/preferences/configs/other_conf.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/preferences/configs/other_conf.py 2013-05-04 14:58:13.000000000 +0000 @@ -38,10 +38,7 @@ """automatic save""" self.automatic_save_checkbutton = gtk.CheckButton(label=_("Automatic online music save"), use_underline=True) - - """automatic save""" - self.nosubfolder_checkbutton = gtk.CheckButton(label=_("Save to one folder (no subfolders)"), use_underline=True) - + """download threads""" thbox = gtk.HBox(False, 5) @@ -72,7 +69,7 @@ """notification""" self.check_new_version = gtk.CheckButton(label=_("Check for new foobnix release on start"), use_underline=True) self.check_new_version.show() - + demo = gtk.Button(_("Show new foobnix release avaliable demo dialog")) demo.connect("clicked", lambda * a:info_dialog_with_link_and_donate("foobnix [version]")) demo.show() @@ -140,7 +137,6 @@ """packaging""" box.pack_start(hbox, False, True, 0) box.pack_start(self.automatic_save_checkbutton, False, True, 0) - box.pack_start(self.nosubfolder_checkbutton, False, True, 0) box.pack_start(thbox, False, True, 0) box.pack_start(cbox, False, True, 0) box.pack_start(self.check_new_version, False, True, 0) @@ -189,10 +185,7 @@ if FC().automatic_online_save: self.automatic_save_checkbutton.set_active(True) - - if FC().nosubfolder: - self.nosubfolder_checkbutton.set_active(True) - + """menu style""" if FC().menu_style == "new": self.new_style.set_active(True) @@ -228,7 +221,6 @@ FC().check_new_version = self.check_new_version.get_active() FC().automatic_online_save = self.automatic_save_checkbutton.get_active() - FC().nosubfolder = self.nosubfolder_checkbutton.get_active() if self.is_background_image != FC().background_image: self.controls.change_backgound() diff -Nru foobnix-2.6.11q/foobnix/preferences/configs/tabs.py foobnix-2.6.10quantal/foobnix/preferences/configs/tabs.py --- foobnix-2.6.11q/foobnix/preferences/configs/tabs.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/preferences/configs/tabs.py 2013-05-04 14:58:13.000000000 +0000 @@ -106,10 +106,11 @@ def removing_of_extra_tabs(self, number_of_tabs): - overage = self.controls.notetabs.get_n_pages() - number_of_tabs - while overage > 0: - self.controls.notetabs.remove_page(self.controls.notetabs.get_n_pages() - 1) - overage -= 1 + overage = (self.controls.notetabs.get_n_pages() - 1) - number_of_tabs + counter = 0 + while counter < overage: + self.controls.notetabs.remove_page(self.controls.notetabs.get_n_pages() - 1) + counter += 1 def on_load(self): self.tabs_count.set_value(FC().count_of_tabs) @@ -135,7 +136,7 @@ def on_save(self): FC().count_of_tabs = self.tabs_count.get_value_as_int() - if self.controls.notetabs.get_n_pages() > FC().count_of_tabs: + if self.controls.notetabs.get_n_pages() - 1 > FC().count_of_tabs: self.removing_of_extra_tabs(FC().count_of_tabs) FC().len_of_tab = self.tab_len.get_value_as_int() diff -Nru foobnix-2.6.11q/foobnix/regui/about/about.py foobnix-2.6.10quantal/foobnix/regui/about/about.py --- foobnix-2.6.11q/foobnix/regui/about/about.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/about/about.py 2013-05-04 14:58:13.000000000 +0000 @@ -19,7 +19,7 @@ self.set_copyright("(c) Ivan Ivanenko ") self.set_comments(_("Simple and Powerful player")) self.set_website("http://www.foobnix.com") - self.set_authors(["Dmitry Kozhura (zavlab1) ", "Pietro Campagnano ", "Viktor Suprun "]) + self.set_authors(["Dmitry Kozhura (zavlab1) ", "Pietro Campagnano "]) self.set_translator_credits("""Bernardo Miguel Savone Sérgio Marques diff -Nru foobnix-2.6.11q/foobnix/regui/base_controls.py foobnix-2.6.10quantal/foobnix/regui/base_controls.py --- foobnix-2.6.11q/foobnix/regui/base_controls.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/base_controls.py 2013-05-04 14:58:13.000000000 +0000 @@ -49,7 +49,8 @@ self.chache_text = None self.play_lock = Lock() - + + def check_for_media(self, args): dirs = [] files = [] @@ -71,7 +72,8 @@ map(self.lastfm_service.love, beans) def show_google_results(self, query): - beans = [FModel('"%s" not found trying Google search' % query)] + beans = [] + beans.append(FModel('"%s" not found trying Google search' % query)) g_results = google_search_results(query) for line in g_results: beans.append(FModel(line).add_is_file(True)) @@ -107,8 +109,8 @@ return True else: try: - u = urlopen(path, timeout=5) # @UnusedVariable - if "u" not in vars(): + u = urlopen(path, timeout = 5) #@UnusedVariable + if not vars().has_key("u"): return False return True except: @@ -119,9 +121,7 @@ return None def on_chage_player_state(self, state, bean): - logging.debug("bean state %s" % state) - - self.set_dbus_state(state, bean) + logging.debug("bean state %s" % (state)) if not FC().system_icons_dinamic: return None @@ -136,17 +136,7 @@ if bean and bean.type: logging.debug("bean state and type %s %s" % (state, bean.type)) if bean.type == FTYPE_RADIO: - return self.trayicon.set_image_from_path(FC().radio_icon_entry) - - def set_dbus_state(self, state, bean): - if self.dbus: - self.dbus._update_info(bean) - if state is STATE_PLAY: - self.dbus._set_state_play() - elif state is STATE_PAUSE: - self.dbus._set_state_pause() - else: - self.dbus._set_state_stop() + return self.trayicon.set_image_from_path(FC().radio_icon_entry) def on_add_folders(self, paths=None): if not paths: @@ -160,7 +150,8 @@ parent = FModel(name) self.append_to_new_notebook(name, []) - all_beans = [parent] + all_beans = [] + all_beans.append(parent) for bean in get_all_music_by_paths(paths, self): if not bean.is_file: bean.parent(parent).add_is_file(False) @@ -225,8 +216,6 @@ bean = FModel(path, path).parent(parent).add_is_file(True) if text: bean.text = text - if "://" in bean.path: - bean.type = FTYPE_RADIO beans.append(bean) if not beans: self.append_to_current_notebook([FModel(_("Nothing found to play in the file(s)") + paths[0])]) @@ -264,7 +253,7 @@ def update_music_tree(self, tree, number_of_page=0): logging.info("Update music tree" + str(FCache().music_paths[number_of_page])) - tree.clear_tree() # safe method + tree.clear_tree() #safe method FCache().cache_music_tree_beans[number_of_page] = [] all = [] @@ -283,9 +272,9 @@ self.perspective.show_add_button() except AttributeError: logging.warn("Object perspective not exists yet") - tree.append_all(all) # safe method + tree.append_all(all) #safe method tree.ext_width = tree.ext_column.get_width() - gobject.idle_add(self.tabhelper.on_save_tabs) # for true order + gobject.idle_add(self.tabhelper.on_save_tabs) #for true order def set_visible_video_panel(self, flag): FC().is_view_video_panel = flag @@ -386,7 +375,6 @@ self.statusbar.set_text(bean.info) self.trayicon.set_text(bean.text) self.movie_window.set_text(bean.text) - def task(): if bean.type == FTYPE_RADIO: self.record.show() @@ -399,13 +387,14 @@ gobject.idle_add(task) thread.start_new_thread(self._one_thread_play, (bean,)) - def _one_thread_play(self, bean): + def _one_thread_play(self,bean): try: self._play(bean) finally: if self.play_lock.locked(): self.play_lock.release() - + + def _play(self, bean): if not bean.path: bean.path = get_bean_posible_paths(bean) @@ -433,6 +422,7 @@ self.next() else: self.seek_bar.set_text(_("Stopped. No resources found")) + return elif os.path.isdir(bean.path): @@ -453,19 +443,23 @@ sec = int(sec) if sec > 10 and sec % 11 == 0: + self.net_wrapper.execute(self.lastfm_service.report_now_playing, bean) if not self.start_time: self.start_time = str(int(time.time())) - if not self.is_scrobbled: + if not self.is_scrobbled: + if sec > dur_sec / 2 or sec > 60: + self.is_scrobbled = True self.net_wrapper.execute(self.lastfm_service.report_scrobbled, bean, self.start_time, dur_sec) """download music""" if FC().automatic_online_save and bean.path and bean.path.startswith("http://"): self.dm.append_task(bean) + def notify_title(self, bean, text): logging.debug("Notify title" + text) @@ -474,7 +468,6 @@ self.seek_bar.set_text(text) t_bean = bean.create_from_text(text) self.update_info_panel(t_bean) - self.set_dbus_state(STATE_PLAY, t_bean) if FC().enable_radio_scrobbler: start_time = str(int(time.time())) self.net_wrapper.execute(self.lastfm_service.report_now_playing, t_bean) @@ -482,6 +475,7 @@ if " - " in text and self.chache_text != text: text = self.chache_text self.net_wrapper.execute(self.lastfm_service.report_scrobbled, t_bean, start_time, 200) + def notify_error(self, msg): logging.error("notify error " + msg) @@ -528,7 +522,7 @@ def search_all_tracks(self, query): def search_all_tracks_task(): - analytics.action("SEARCH_search_all_tracks") + analytics.action("SEARCH_search_all_tracks"); results = self.vk_service.find_tracks_by_query(query) if not results: results = [] @@ -548,7 +542,7 @@ def search_top_tracks(self, query): def search_top_tracks_task(query): - analytics.action("SEARCH_search_top_tracks") + analytics.action("SEARCH_search_top_tracks"); results = self.lastfm_service.search_top_tracks(query) if not results: results = [] @@ -564,12 +558,15 @@ all = self.show_google_results(query) self.notetabs.append_tab(query, all) - + + self.in_thread.run_with_progressbar(search_top_tracks_task, query) + def search_top_albums(self, query): + def search_top_albums_task(query): - analytics.action("SEARCH_search_top_albums") + analytics.action("SEARCH_search_top_albums"); results = self.lastfm_service.search_top_albums(query) if not results: results = [] @@ -577,7 +574,7 @@ albums_already_inserted = [] for album in results[:15]: all = [] - if album.album.lower() in albums_already_inserted: + if (album.album.lower() in albums_already_inserted): continue album.is_file = False tracks = self.lastfm_service.search_album_tracks(album.artist, album.album) @@ -586,7 +583,7 @@ track.album = album.album track.parent(album).add_is_file(True) all.append(track) - if len(all) > 0: + if (len(all) > 0): all = [album] + all albums_already_inserted.append(album.album.lower()) self.notetabs.append_all(all) @@ -600,7 +597,7 @@ def search_top_similar(self, query): def search_top_similar_task(query): - analytics.action("SEARCH_search_top_similar") + analytics.action("SEARCH_search_top_similar"); results = self.lastfm_service.search_top_similar_artist(query) if not results: results = [] @@ -619,14 +616,15 @@ if not results: all = self.show_google_results(query) - + + #inline(query) self.in_thread.run_with_progressbar(search_top_similar_task, query) def search_top_tags(self, query): def search_top_tags_task(query): - analytics.action("SEARCH_search_top_tags") + analytics.action("SEARCH_search_top_tags"); results = self.lastfm_service.search_top_tags(query) if not results: logging.debug("tag result not found") @@ -719,22 +717,26 @@ try: from socket import gethostname - f = urlopen("http://www.foobnix.com/version?uuid=" + uuid + "&host=" + gethostname() - + "&version=" + current_version + "&platform=" + system, timeout=7) + f = urlopen("http://www.foobnix.com/version?uuid=" + uuid + "&host=" + gethostname() + "&version=" + current_version + "&platform=" + system, timeout=7) #f = urllib2.urlopen("http://localhost:8080/version?uuid=" + uuid + "&host=" + gethostname() + "&v=" + current_version) except Exception, e: logging.error("Check version error: " + str(e)) return None new_version_line = f.read() - + + logging.info("version " + current_version + "|" + new_version_line + "|" + str(uuid)) f.close() if FC().check_new_version and compare_versions(current_version, new_version_line) == 1: info_dialog_with_link_and_donate(new_version_line) + + + def on_load(self): + """load controls""" for element in self.__dict__: if isinstance(self.__dict__[element], LoadSave): @@ -768,14 +770,16 @@ img = get_foobnix_resourse_path_by_name(FC().background_image) if not img: return None - pixbuf = gtk.gdk.pixbuf_new_from_file(img) # @UndefinedVariable - pixmap, mask = pixbuf.render_pixmap_and_mask() # @UnusedVariable + pixbuf = gtk.gdk.pixbuf_new_from_file(img) #@UndefinedVariable + pixmap, mask = pixbuf.render_pixmap_and_mask() #@UnusedVariable win.set_app_paintable(True) win.window.set_back_pixmap(pixmap, False) else: win.set_app_paintable(False) win.window.set_back_pixmap(None, False) - + + + def play_first_file_in_playlist(self): active_playlist_tree = self.notetabs.get_current_tree() filter_model = active_playlist_tree.get_model() @@ -795,7 +799,8 @@ else: iter = current_model.iter_next(iter) play_item(iter, active_playlist_tree, filter_model, current_model) - + + iter = current_model.get_iter_first() play_item(iter, active_playlist_tree, filter_model, current_model) @@ -804,3 +809,5 @@ if isinstance(self.__dict__[element], LoadSave): logging.debug("SAVE " + str(self.__dict__[element])) self.__dict__[element].on_save() + + diff -Nru foobnix-2.6.11q/foobnix/regui/controls/dbus_manager.py foobnix-2.6.10quantal/foobnix/regui/controls/dbus_manager.py --- foobnix-2.6.11q/foobnix/regui/controls/dbus_manager.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/controls/dbus_manager.py 2013-05-04 14:58:13.000000000 +0000 @@ -4,17 +4,12 @@ @author: anton.komolov ''' -from curses.ascii import SO -import logging -import gobject import dbus.service -from foobnix.fc.fc import FC -from foobnix.version import FOOBNIX_VERSION from dbus.mainloop.glib import DBusGMainLoop from foobnix.regui.model.signal import FControl -from foobnix.regui.service.path_service import get_foobnix_resourse_path_by_name -from foobnix.thirdparty.sound_menu import SoundMenuControls -from foobnix.util.const import STATE_PLAY, ICON_FOOBNIX +from foobnix.version import FOOBNIX_VERSION +import logging +from foobnix.fc.fc import FC DBusGMainLoop(set_as_default=True) @@ -24,7 +19,51 @@ MPRIS_TRACKLIST_PATH = "/TrackList" DBUS_MEDIAPLAYER_INTERFACE = 'org.freedesktop.MediaPlayer' +class MprisPlayer(dbus.service.Object, FControl): + def __init__(self, controls, object_path=MPRIS_PLAYER_PATH): + dbus.service.Object.__init__(self, dbus.SessionBus(), object_path) + FControl.__init__(self, controls) + + #Next ( ) + @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='') + def Next(self): + self.controls.next() + + #Prev ( ) + @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='') + def Prev(self): + self.controls.prev() + + #Pause ( ) + @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='') + def Pause(self): + self.controls.state_pause() + + #Stop ( ) + @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='') + def Stop(self): + self.controls.state_stop() + + #Play ( ) + @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='') + def Play(self): + self.controls.state_play() + + #PlayPause for test + @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='') + def PlayPause(self): + self.controls.state_play_pause() + + #SeekUp ( ) + @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='') + def SeekUp(self): + self.controls.seek_up() + #SeekDown ( ) + @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='') + def SeekDown(self): + self.controls.seek_down() + class DBusManager(dbus.service.Object, FControl): def __init__(self, controls, object_path=MPRIS_ROOT_PATH): FControl.__init__(self, controls) @@ -33,7 +72,7 @@ bus_name = dbus.service.BusName(DBUS_NAME, bus=bus) dbus.service.Object.__init__(self, bus_name, object_path) - #self._player = MprisPlayer(controls) + self._player = MprisPlayer(controls) #dbus_interface = dbus_interface = 'org.gnome.SettingsDaemon.MediaKeys' mm_object = bus.get_object('org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/MediaKeys') @@ -41,66 +80,8 @@ mm_object.GrabMediaPlayerKeys("MyMultimediaThingy", 0, dbus_interface=dbus_interface) mm_object.connect_to_signal('MediaPlayerKeyPressed', self.on_mediakey) #mm_object.ReleaseMediaPlayerKeys("MyMultimediaThingy", dbus_interface=dbus_interface) - - self.sound_menu = SoundMenuControls("foobnix") - self.sound_menu._sound_menu_next = self._sound_menu_next - self.sound_menu._sound_menu_previous = self._sound_menu_previous - self.sound_menu._sound_menu_is_playing = self._sound_menu_is_playing - self.sound_menu._sound_menu_play = self._sound_menu_play - self.sound_menu._sound_menu_pause = self._sound_menu_pause - self.sound_menu._sound_menu_raise = self._sound_menu_raise except Exception, e: - self.sound_menu = None logging.error("DBUS Initialization Error" + str(e)) - - def _sound_menu_next(self): - self.controls.next() - - def _sound_menu_previous(self): - self.controls.prev() - - def _sound_menu_is_playing(self): - return self.controls.media_engine.current_state is STATE_PLAY - - def _sound_menu_play(self): - self.controls.state_play() - - def _sound_menu_pause(self): - self.controls.state_pause() - - def _sound_menu_raise(self): - gobject.idle_add(self.controls.main_window.show) - - def _set_state_play(self): - if self.sound_menu: - self.sound_menu.signal_playing() - - def _set_state_pause(self): - if self.sound_menu: - self.sound_menu.signal_paused() - - def _set_state_stop(self): - if self.sound_menu: - self.sound_menu.signal_stopped() - - def _update_info(self, bean): - if not bean: - return - if not self.sound_menu: # if dbus initialization can't be finished - return - image = "file:///" + get_foobnix_resourse_path_by_name(ICON_FOOBNIX) - if bean.image: - if bean.image.startswith("/"): - image = "file:///" + bean.image - else: - image = bean.image - artists = None - if bean.artist: - artists = [bean.artist] - self.sound_menu.song_changed(artists=artists, - title=bean.title or bean.text, - album=bean.album, - cover=image) def check_for_commands(self, args): if len(args) == 1: @@ -135,8 +116,6 @@ self.controls.hide() elif "--play-pause" == command: self.controls.play_pause() - elif "--download" == command: - self.controls.dm.append_task(bean=self.controls.notetabs.get_current_tree().get_current_bean_by_UUID()) elif "--version" == command: return FOOBNIX_VERSION elif "--state" == command: @@ -159,7 +138,8 @@ if type(result).__name__ == 'str': return result return "Other copy of player is run" - + + def on_mediakey(self, comes_from, what): if not FC().media_keys_enabled: return @@ -183,21 +163,18 @@ def Identity(self): return "foobnix %s" % FOOBNIX_VERSION - @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='(qq)') - def MprisVersion(self): - return 1, 0 + @dbus.service.method (DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='(qq)') + def MprisVersion (self): + return (1, 0) @dbus.service.method(DBUS_MEDIAPLAYER_INTERFACE, in_signature='', out_signature='') def Quit(self): self.controls.quit() - def foobnix_dbus_interface(): try: bus = dbus.SessionBus() - dbus_objects = dbus.Interface(bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus'), - 'org.freedesktop.DBus').ListNames() - + dbus_objects = dbus.Interface(bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus'), 'org.freedesktop.DBus').ListNames() if not DBUS_NAME in dbus_objects: return None else: diff -Nru foobnix-2.6.11q/foobnix/regui/controls/seach_progress.py foobnix-2.6.10quantal/foobnix/regui/controls/seach_progress.py --- foobnix-2.6.11q/foobnix/regui/controls/seach_progress.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/controls/seach_progress.py 2013-05-04 14:58:13.000000000 +0000 @@ -66,9 +66,10 @@ self.spinner_popup.connect_after('map', self.configure_popup, self.controls.main_window) def start(self, text=None): + + if not text: text = _("Process...") - def safe_task(): try: """to avoid bugs in Unity and GnomeFallback""" @@ -90,8 +91,8 @@ def background_spinner_wrapper(self, task, in_graphic_thread, *args): self.start() - def thread_task(*args): + def safe_task(*args): try: task(*args) @@ -100,14 +101,12 @@ if in_graphic_thread: gobject.idle_add(safe_task, *args) else: - gtk.threads_init() - gtk.threads_enter() safe_task(*args) - gtk.threads_leave() t = threading.Thread(target=thread_task, args=(args)) t.start() - + + def create_spinner_popup(self): self.main_window.connect("configure-event", self.move_to_coord) hbox = gtk.HBox() diff -Nru foobnix-2.6.11q/foobnix/regui/infopanel.py foobnix-2.6.10quantal/foobnix/regui/infopanel.py --- foobnix-2.6.11q/foobnix/regui/infopanel.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/infopanel.py 2013-05-04 14:58:13.000000000 +0000 @@ -93,7 +93,8 @@ dm_line = HBoxDecoratorTrue(self.exua_label, self.rutracker_label) dm_frame.add(dm_line) - + + self.wiki = TextArea() self.wiki.set_text("", wiki_title) @@ -107,9 +108,11 @@ """image and similar artists""" ibox = gtk.HBox(False, 0) self.image = ImageBase(ICON_BLANK_DISK, FC().info_panel_image_size) - + + lbox = gtk.VBox(False, 0) - + + self.left_widget = [wBox, self.artists, self.tracks, self.tags, self.lyrics, self.best_songs] for l_widget in self.left_widget: @@ -141,7 +144,7 @@ def show_current(self, widget): if not self.controls.net_wrapper.is_internet(): - return + return; def safe_task(): self.empty.hide() @@ -171,7 +174,7 @@ def update_info_panel(self): if not self.controls.net_wrapper.is_internet(): - return + return; if not self.bean: return None bean = copy.copy(self.bean) @@ -191,7 +194,7 @@ def update(self, bean): if not self.controls.net_wrapper.is_internet(): - return + return; if bean.type == FTYPE_NOT_UPDATE_INFO_PANEL: return False @@ -215,7 +218,8 @@ self.bean = bean self.update_info_panel() - + + def show_album_title(self, bean=None): if not bean: bean = self.bean @@ -267,7 +271,7 @@ if bean.text in list: bean.image = os.path.join(COVERS_DIR, key + ".jpg") break - + if not bean.image: '''get image url''' bean.image = self.controls.lastfm_service.get_album_image_url(bean.artist, bean.title) @@ -278,7 +282,7 @@ '''make .jpg image and store it in cache''' if bean.image and bean.image.startswith("http://"): url_basename = os.path.splitext(os.path.basename(bean.image))[0] - if url_basename in dict: + if dict.has_key(url_basename): dict[url_basename].append(bean.text) else: dict[url_basename] = [bean.text] @@ -288,7 +292,8 @@ self.image.update_info_from(bean) self.controls.trayicon.update_info_from(bean) self.controls.coverlyrics.set_cover() - + + def show_similar_lyrics(self, bean=None): if not bean: bean = self.bean @@ -303,17 +308,11 @@ if not os.path.isdir(LYRICS_DIR): os.mkdir(LYRICS_DIR) lyrics_list = os.listdir(LYRICS_DIR) - cache_name = lyrics_title = "%s - %s" % (bean.artist, bean.title) - - illegal_chars = ["/", "#", ";", ":", "%", "*", "&", "\\"] - for char in illegal_chars: - cache_name = cache_name.replace(char, "_") - cache_name = cache_name.lower().strip() - + lyrics_title = "%s - %s" % (bean.artist, bean.title) text = None - if cache_name in lyrics_list: - text = "".join(open(os.path.join(LYRICS_DIR, cache_name), 'r').readlines()) + if lyrics_title.lower().strip() in lyrics_list: + text = "".join(open(os.path.join(LYRICS_DIR, lyrics_title.lower().strip()), 'r').readlines()) else: try: logging.debug("Try to get lyrics from lyrics.wikia.com") @@ -323,7 +322,7 @@ if not text: text = get_lyrics_by_parsing(bean.artist, bean.title) if text: - open(os.path.join(LYRICS_DIR, cache_name), 'w').write(text) + open(os.path.join(LYRICS_DIR, lyrics_title.lower().strip()), 'w').write(text) else: logging.info("The text not found") text = "The text not found" @@ -337,8 +336,9 @@ if self.info_cache.wiki_artist == self.bean.artist: return None self.info_cache.wiki_artist = self.bean.artist - - self.wiki_label.set_uri("http://%s.wikipedia.org/w/index.php?&search=%s" % (SITE_LOCALE, self.bean.artist)) + + + self.wiki_label.set_uri("http://%s.wikipedia.org/w/index.php?&search=%s" %(SITE_LOCALE, self.bean.artist)) self.last_fm_label.set_uri("http://www.last.fm/search?q=%s" % self.bean.artist) self.exua_label.set_uri("http://www.ex.ua/search?s=%s" % self.bean.artist) diff -Nru foobnix-2.6.11q/foobnix/regui/model/signal.py foobnix-2.6.10quantal/foobnix/regui/model/signal.py --- foobnix-2.6.11q/foobnix/regui/model/signal.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/model/signal.py 2013-05-04 14:58:13.000000000 +0000 @@ -5,8 +5,6 @@ @author: ivan ''' """base class to comunicate beatween all controls""" - - class FControl(): def __init__(self, controls): self.controls = controls diff -Nru foobnix-2.6.11q/foobnix/regui/notetab/__init__.py foobnix-2.6.10quantal/foobnix/regui/notetab/__init__.py --- foobnix-2.6.11q/foobnix/regui/notetab/__init__.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/notetab/__init__.py 2013-05-04 14:58:13.000000000 +0000 @@ -220,11 +220,11 @@ if not self.navig: if self.get_n_pages() > FC().count_of_tabs: self.remove_page(self.get_n_pages() - 1) - + + def on_delete_tab(self, child): n = self.page_num(child) - if self.get_n_pages() == 1: - return + if self.get_n_pages() == 1: return self.remove_page(n) if self.navig: del FCache().tab_names[n] @@ -239,22 +239,16 @@ return tab_child.get_child() def on_save_tabs(self): - def task(): - self.save_lock.acquire() - try: - self.save_tabs() - FCache().save() - finally: - if self.save_lock.locked(): - self.save_lock.release() + self.save_lock.acquire() try: - threading.Thread(target=task, args=()).start() - except Exception, e: - print "Exception: %s" % str(e) + self.save_tabs() + FCache().save() + finally: + if self.save_lock.locked(): + self.save_lock.release() TARGET_TYPE_URI_LIST = 80 -dnd_list = [('text/uri-list', 0, TARGET_TYPE_URI_LIST)] - +dnd_list = [ ('text/uri-list', 0, TARGET_TYPE_URI_LIST) ] class NoteTabControl(TabGeneral): def __init__(self, controls): @@ -264,7 +258,6 @@ self.active_tree = None self.set_show_border(True) self.stop_handling = False - self.loaded = False self.connect("button-press-event", self.on_button_press) self.connect('drag-data-received', self.on_system_drag_data_received) @@ -297,7 +290,6 @@ if type(w) == gtk.EventBox: self.stop_handling = True #add delay in the background - def start_handling(): self.stop_handling = False threading.Timer(0.3, start_handling).start() @@ -332,7 +324,8 @@ if type(w) == gtk.EventBox: w.menu.show_all() w.menu.popup(None, None, None, e.button, e.time) - + + def tab_menu_creator(self, widget, tab_child): widget.menu = Popup() widget.menu.add_item(_("Rename tab"), "", lambda: self.on_rename_tab(tab_child, self.default_angle), None) @@ -398,12 +391,15 @@ def set_tab_no(self): logging.info("Set tabs no") self.set_show_tabs(False) + + + + def on_save_playlist(self, tab_child): name = self.get_text_label_from_tab(tab_child) current_name = name.strip() + ".m3u" tree = tab_child.get_child() - def func(filename, folder): beans = tree.get_all_beans() if beans: @@ -420,7 +416,8 @@ m3u_writer(filename, folder, paths) FileSavingDialog(_("Choose folder to save playlist"), func, current_folder=FCache().last_music_path, current_name = current_name) - + + def on_load(self): if FC().tab_position == "no": self.set_tab_no() @@ -444,11 +441,9 @@ elif model_len < cache_len: for i in xrange(abs(model_len - cache_len)): del row[-1] - + + self.get_current_tree().model.append(None, row) - - self.set_current_page(FC().pl_selected_tab) - self.loaded = True def on_save(self): pass @@ -458,9 +453,9 @@ FCache().cache_pl_tab_contents = [] FCache().tab_pl_names = [] if number_music_tabs > 0: - for tab_number in xrange(self.get_n_pages() - 1, -1, -1): + for tab_number in xrange(self.get_n_pages() -1, -1, -1): self.save_nth_tab(tab_number) - + def save_nth_tab(self, tab_number): tab = self.get_nth_page(tab_number) pl_tree = tab.get_child() @@ -470,15 +465,13 @@ FC().columns[column.key][1] = i if column.get_width() > 1: #to avoid recording of zero width in config FC().columns[column.key][2] = column.get_width() - + def on_quit(self): self.on_save_tabs() def equalize_columns_size(self, notebook, page_pointer, page_num): - if self.loaded: #because the "switch-page" event is fired after every tab's addtion - FC().pl_selected_tab = page_num try: - old_pl_tree_columns = self.get_current_tree().get_columns() + old_pl_tree_columns = self.get_current_tree().get_columns() new_pl_tree_columns = self.get_nth_page(page_num).get_child().get_columns() for old_pl_tree_column, new_pl_tree_column in zip(old_pl_tree_columns, new_pl_tree_columns): gobject.idle_add(new_pl_tree_column.set_fixed_width,old_pl_tree_column.get_width()) diff -Nru foobnix-2.6.11q/foobnix/regui/notetab/tab_library.py foobnix-2.6.10quantal/foobnix/regui/notetab/tab_library.py --- foobnix-2.6.11q/foobnix/regui/notetab/tab_library.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/notetab/tab_library.py 2013-05-04 14:58:13.000000000 +0000 @@ -22,13 +22,6 @@ """the only signal lets get the previous number of moved page""" self.connect("button-release-event", self.get_page_number) - self.connect('switch-page', self.save_selected_tab) - self.loaded = False - - def save_selected_tab(self, notebook, page, page_num, *args): - if not self.loaded: #bbecause the "switch-page" event is fired after every tab's addtion - return - FC().nav_selected_tab = page_num def on_add_button_click(self): self._append_tab() @@ -80,8 +73,6 @@ self.set_show_tabs(False) self.controls.load_music_tree() - self.set_current_page(FC().nav_selected_tab) - self.loaded = True def save_tabs(self): '''need for one_thread_save method''' diff -Nru foobnix-2.6.11q/foobnix/regui/perspectives.py foobnix-2.6.10quantal/foobnix/regui/perspectives.py --- foobnix-2.6.11q/foobnix/regui/perspectives.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/perspectives.py 2013-05-04 14:58:13.000000000 +0000 @@ -26,27 +26,29 @@ FControl.__init__(self, controls) gtk.VBox.__init__(self, False, 0) - self.perspectives = {LEFT_PERSPECTIVE_NAVIGATION: controls.tabhelper, - LEFT_PERSPECTIVE_RADIO: controls.radio.scroll, - LEFT_PERSPECTIVE_MY_RADIO: controls.my_radio.scroll, - LEFT_PERSPECTIVE_VIRTUAL: controls.virtual.scroll, - LEFT_PERSPECTIVE_INFO: controls.info_panel, - LEFT_PERSPECTIVE_LASTFM: controls.lastfm_integration.scroll, - LEFT_PERSPECTIVE_VK: controls.vk_integration.scroll} + self.perspectivs = { + LEFT_PERSPECTIVE_NAVIGATION:controls.tabhelper, + LEFT_PERSPECTIVE_RADIO:controls.radio.scroll, + LEFT_PERSPECTIVE_MY_RADIO:controls.my_radio.scroll, + LEFT_PERSPECTIVE_VIRTUAL:controls.virtual.scroll, + LEFT_PERSPECTIVE_INFO:controls.info_panel, + LEFT_PERSPECTIVE_LASTFM:controls.lastfm_integration.scroll, + LEFT_PERSPECTIVE_VK:controls.vk_integration.scroll + } self.switch_radio_button = gtk.Button() self.switch_radio_button.connect("clicked", lambda *a: self.on_radio_buttons_click()) self.buttons = PerspectiveButtonControlls(self.activate_perspective, controls) self.buttons.show_all() self.add_button = ButtonStockText(_(" Add Folder(s) in tree"), gtk.STOCK_ADD) - self.add_button.connect("clicked", lambda * a: controls.tabhelper.get_current_tree().add_folder()) + self.add_button.connect("clicked", lambda * a :controls.tabhelper.get_current_tree().add_folder()) self.switch_radio_button = gtk.Button() self.switch_radio_button.connect("clicked", lambda *a: self.on_radio_buttons_click()) self.pack_start(self.add_button, False, False) - for widget in self.perspectives.values(): + for widget in self.perspectivs.values(): self.pack_start(widget, True, True) self.pack_start(self.switch_radio_button, False, False) self.pack_start(controls.filter, False, False) @@ -59,29 +61,28 @@ gobject.idle_add(self.add_button.hide) def activate_perspective(self, name): - for widget in self.perspectives.values(): + for widget in self.perspectivs.values(): widget.hide() FC().left_perspective = name - self.perspectives[name].show() + self.perspectivs[name].show() - if name in (LEFT_PERSPECTIVE_INFO, LEFT_PERSPECTIVE_LASTFM): + if name in (LEFT_PERSPECTIVE_INFO,LEFT_PERSPECTIVE_LASTFM): self.controls.filter.hide() else: self.controls.filter.show() - if name in (LEFT_PERSPECTIVE_RADIO, LEFT_PERSPECTIVE_MY_RADIO): - self.switch_radio_button.set_label(self.perspectives[name] + if name in (LEFT_PERSPECTIVE_RADIO,LEFT_PERSPECTIVE_MY_RADIO): + self.switch_radio_button.set_label(self.perspectivs[name] .get_child().switcher_label) self.switch_radio_button.show() else: self.switch_radio_button.hide() - analytics.action("PERSPECTIVE_" + name) + analytics.action("PERSPECTIVE_"+name); def on_radio_buttons_click(self): - perspective_name = None - for name in self.perspectives.keys(): - if self.perspectives[name].get_visible(): + for name in self.perspectivs.keys(): + if self.perspectivs[name].get_visible(): if name == LEFT_PERSPECTIVE_RADIO: perspective_name = LEFT_PERSPECTIVE_MY_RADIO FC().is_my_radio_active = True @@ -89,10 +90,9 @@ perspective_name = LEFT_PERSPECTIVE_RADIO FC().is_my_radio_active = False break - if perspective_name: - self.activate_perspective(perspective_name) - self.switch_radio_button.set_label(self.perspectives[perspective_name] - .get_child().switcher_label) + self.activate_perspective(perspective_name) + self.switch_radio_button.set_label(self.perspectivs[perspective_name] + .get_child().switcher_label) def activate_perspective_key(self, name): self.buttons.activate_button(name) @@ -103,54 +103,52 @@ else: self.activate_perspective(LEFT_PERSPECTIVE_RADIO) - def on_load(self): + def on_load(self): self.activate_perspective(LEFT_PERSPECTIVE_NAVIGATION) - + + def on_save(self): pass - class PerspectiveButtonControlls(gtk.HBox): def __init__(self, activate_perspective, controls): gtk.HBox.__init__(self, False, 0) self.controls = controls self.active = None - - def toggle_handler(btn, handler, *args): - if btn.get_active(): - handler() musics = PespectiveToogledButton(_("Music"), gtk.STOCK_HARDDISK, _("Music Navigation (Alt+1)")) - musics.connect("toggled", toggle_handler, lambda * a: activate_perspective(LEFT_PERSPECTIVE_NAVIGATION)) + musics.connect("button-press-event", lambda * a: activate_perspective(LEFT_PERSPECTIVE_NAVIGATION)) musics.set_active(True) - + + radios = PespectiveToogledButton(_("Radio"), gtk.STOCK_NETWORK, _("Radio Stantions (Alt+2)")) - radios.connect("toggled", toggle_handler, lambda * a: + radios.connect("button-press-event", lambda * a: controls.perspective.activate_radio_perspective()) virtuals = PespectiveToogledButton(_("Storage"), gtk.STOCK_INDEX, _("Storage (Alt+3)")) - virtuals.connect("toggled", toggle_handler, lambda * a: activate_perspective(LEFT_PERSPECTIVE_VIRTUAL)) + virtuals.connect("button-press-event", lambda * a:activate_perspective(LEFT_PERSPECTIVE_VIRTUAL)) + info = PespectiveToogledButton(_("Info"), gtk.STOCK_INFO, _("Info Panel (Alt+4)")) - info.connect("toggled", toggle_handler, lambda * a: activate_perspective(LEFT_PERSPECTIVE_INFO)) + info.connect("button-press-event", lambda * a: activate_perspective(LEFT_PERSPECTIVE_INFO)) lastfm = PespectiveToogledButton(_("Last.Fm"), gtk.STOCK_CONNECT, _("Last.fm Panel (Alt+5)")) - lastfm.connect("toggled", toggle_handler, lambda * a: activate_perspective(LEFT_PERSPECTIVE_LASTFM)) - - def vk_toggled_handler(): - self.on_vk_click() - activate_perspective(LEFT_PERSPECTIVE_VK) - + lastfm.connect("button-press-event", lambda * a: activate_perspective(LEFT_PERSPECTIVE_LASTFM)) + vk = PespectiveToogledButton(_("VK"), gtk.STOCK_UNINDENT, _("VK Panel (Alt+6)")) - vk.connect("toggled", toggle_handler, vk_toggled_handler) - - self.button_list = {LEFT_PERSPECTIVE_NAVIGATION: musics, - LEFT_PERSPECTIVE_RADIO: radios, - LEFT_PERSPECTIVE_VIRTUAL: virtuals, - LEFT_PERSPECTIVE_LASTFM: lastfm, - LEFT_PERSPECTIVE_VK: vk, - LEFT_PERSPECTIVE_INFO: info} + vk.connect("button-press-event", lambda * a: self.on_vk_click()) + vk.connect("button-press-event", lambda * a: activate_perspective(LEFT_PERSPECTIVE_VK)) + + + self.button_list = { + LEFT_PERSPECTIVE_NAVIGATION:musics, + LEFT_PERSPECTIVE_RADIO:radios, + LEFT_PERSPECTIVE_VIRTUAL:virtuals, + LEFT_PERSPECTIVE_LASTFM:lastfm, + LEFT_PERSPECTIVE_VK:vk, + LEFT_PERSPECTIVE_INFO:info + } OneActiveToggledButton(self.button_list.values()) diff -Nru foobnix-2.6.11q/foobnix/regui/service/lyrics_parsing_service.py foobnix-2.6.10quantal/foobnix/regui/service/lyrics_parsing_service.py --- foobnix-2.6.11q/foobnix/regui/service/lyrics_parsing_service.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/service/lyrics_parsing_service.py 2013-05-04 14:58:13.000000000 +0000 @@ -23,9 +23,9 @@ self.tagname = 'div' self.attr = 'id' self.attr_value = 'songlyrics_h' - title = title.encode('utf-8').strip().replace(" ", "_").replace("/", "-") + title = title.encode('utf-8').strip().replace(" ", "_") title = urllib.quote(title) - artist = artist.encode('utf-8').strip().replace(" ", "_").replace("/", "-") + artist = artist.encode('utf-8').strip().replace(" ", "_") artist = urllib.quote(artist) result = urllib.urlopen(base + title + "_lyrics_" + artist + ".html").read() result = result.replace(''', '!apostrophe!') @@ -37,9 +37,9 @@ self.tagname = 'pre' self.attr = 'class' self.attr_value = 'lyric' - title = title.replace(" ", "-").replace("/", "-") + title = title.replace(" ", "-") title = urllib.quote(title) - artist = artist.replace(" ", "-").replace("/", "-") + artist = artist.replace(" ", "-") artist = urllib.quote(artist) result = urllib.urlopen(base + artist + "/" + title + ".html").read() result = result.replace(''', '!apostrophe!').replace('

', '
\n
') @@ -88,4 +88,5 @@ if __name__ == '__main__': - print get_lyrics_by_parsing("aBBA", " honey, Honey ") \ No newline at end of file + print get_lyrics_by_parsing("aBBA", " honey, Honey ") + diff -Nru foobnix-2.6.11q/foobnix/regui/service/vk_service.py foobnix-2.6.10quantal/foobnix/regui/service/vk_service.py --- foobnix-2.6.11q/foobnix/regui/service/vk_service.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/service/vk_service.py 2013-05-04 14:58:13.000000000 +0000 @@ -8,7 +8,6 @@ import os import gtk -import threading import time import thread import urllib @@ -16,12 +15,9 @@ import logging import urllib2 import simplejson -import cookielib -import tempfile -from HTMLParser import HTMLParser -from urlparse import urlparse -from foobnix.fc.fc import FC, FCBase +from HTMLParser import HTMLParser +from foobnix.fc.fc import FC from foobnix.regui.model import FModel from foobnix.fc.fc_helper import CONFIG_DIR from foobnix.util.const import ICON_FOOBNIX @@ -30,265 +26,178 @@ from foobnix.util.time_utils import convert_seconds_to_text from foobnix.regui.service.path_service import get_foobnix_resourse_path_by_name -cookiefile = os.path.join(CONFIG_DIR, "vk_cooky") +class VKAuthorizationWindow(gtk.Dialog): + REDIRECT_URL = "http://www.foobnix.com/welcome/vk-token-user-id" + API_URL = "http://api.vk.com/oauth/authorize?client_id=2234333&scope=audio,friends&redirect_uri=" + REDIRECT_URL + "&display=touch&response_type=token" + + def get_web_url(self): + return "https://api.vk.com/oauth/authorize?client_id=2234333&scope=audio,friends&redirect_uri=http://api.vk.com/blank.html&display=page&response_type=token" + + def show(self): + super(VKAuthorizationWindow, self).show() + + def __init__(self, service): + self.service = service + gtk.Dialog.__init__(self, _("VKontakte Authorization (is required for music search)")) + self.set_resizable(True) + self.access_token = None + try: + self.set_icon_from_file(get_foobnix_resourse_path_by_name(ICON_FOOBNIX)) + except TypeError: pass -class FormParser(HTMLParser): - def __init__(self): - HTMLParser.__init__(self) - self.url = None - self.params = {} - self.in_form = False - self.in_warn = False - self.form_parsed = False - self.method = "GET" - self.captcha_image = None - self.auth_error = None - - """Magic below""" - def handle_starttag(self, tag, attrs): - tag = tag.lower() - attrs = dict((name.lower(), value) for name, value in attrs) - if tag == "div" and "class" in attrs and "warn" in attrs["class"]: - self.in_warn = True - return - - if tag == "form": - if self.form_parsed: - raise RuntimeError("Second form on page") - if self.in_form: - raise RuntimeError("Already in form") - self.in_form = True - if not self.in_form: - return - if tag == "form": - self.url = attrs["action"] - if "method" in attrs: - self.method = attrs["method"] - elif tag == "input" and "type" in attrs and "name" in attrs: - if attrs["type"] in ["hidden", "text", "password"]: - self.params[attrs["name"]] = attrs["value"] if "value" in attrs else "" - elif tag == "img" and "src" in attrs and "captcha.php" in attrs["src"]: - self.captcha_image = attrs["src"] - - def handle_endtag(self, tag): - tag = tag.lower() - if tag == "div" and self.in_warn: - self.in_warn = False - elif tag == "form": - if not self.in_form: - raise RuntimeError("Unexpected end of

") - self.in_form = False - self.form_parsed = True - - def handle_data(self, data): - if self.in_warn: - self.auth_error = data - - -class VKAuth(gtk.Dialog): - - SCOPE = ["audio", "friends", "wall"] - CLIENT_ID = "2234333" - - def __init__(self): - super(VKAuth, self).__init__(_("vk.com authorization"), None, gtk.DIALOG_MODAL, - (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) - - """INIT GUI""" - self.hwparrer = gtk.HBox(False, 0) - self.vwrapper = gtk.VBox(False, 0) - self.lhbox = gtk.HBox(False, 5) - self.phbox = gtk.HBox(False, 5) - self.rhbox = gtk.HBox(False, 5) - self.chbox = gtk.HBox() - - self.error_label = gtk.Label() - - self.login = gtk.Entry() - self.password = gtk.Entry() - self.captcha_image = gtk.Image() - self.vkimage = gtk.Image() - self.captcha = gtk.Entry() - self.remember = gtk.CheckButton() - - self.vkimage.set_from_file(get_foobnix_resourse_path_by_name("vk-small.png")) - - self.password.set_visibility(False) - self.password.set_invisible_char("*") - - login_label = gtk.Label(_("Email")) - self.lhbox.pack_start(login_label, False, False, 0) - self.lhbox.pack_start(self.login, True, True, 0) - - password_label = gtk.Label(_("Password")) - self.phbox.pack_start(password_label, False, False, 0) - self.phbox.pack_start(self.password, True, True, 0) - - self.rhbox.pack_start(gtk.Label(_("Remember password")), False, False, 0) - self.rhbox.pack_start(self.remember, False, False, 0) - - self.chbox.pack_start(self.captcha_image, False, False, 0) - self.chbox.pack_start(self.captcha, True, True, 0) - - self.vwrapper.pack_start(self.lhbox, False, False, 4) - self.vwrapper.pack_start(self.phbox, False, False, 4) - self.vwrapper.pack_start(self.chbox, False, False, 4) - - self.hwparrer.pack_start(self.vkimage, True, True, 0) - self.hwparrer.pack_start(self.vwrapper, False, True, 0) - - self.vbox.pack_start(self.error_label, False, False, 4) - self.vbox.pack_start(self.hwparrer, False, False, 0) - self.vbox.pack_start(self.rhbox, False, False, 4) - self.vbox.show_all() - - """SET DEFAULT SIZES AND VISIBILITY""" - [node.set_size_request(80, -1) for node in [login_label, password_label]] - [node.hide() for node in [self.error_label, self.chbox]] - - self.login.set_text(FCBase().vk_login or "") - self.password.set_text(FCBase().vk_password or "") - self.remember.set_active(FCBase().vk_remember_password) - - """Build opener""" - self.opener = self.build_opener() - self.auth_url = "http://oauth.vk.com/oauth/authorize?" + \ - "redirect_uri=http://oauth.vk.com/blank.html&response_type=token&" + \ - "client_id=%s&scope=%s&display=wap" % (self.CLIENT_ID, ",".join(self.SCOPE)) - - def do_save(self): - if self.remember.get_active(): - FCBase().vk_login = self.login.get_text() - FCBase().vk_password = self.password.get_text() - else: - FCBase().vk_login = None - FCBase().vk_password = None - FCBase().vk_remember_password = self.remember.get_active() - - def build_opener(self): - cookiejar = cookielib.FileCookieJar(cookiefile) - cookie_handler = urllib2.HTTPCookieProcessor(cookiejar) - redirect_handler = urllib2.HTTPRedirectHandler() - #proxy_handler = urllib2.ProxyHandler() - #proxy_auth_handker = urllib2.ProxyBasicAuthHandler() - return urllib2.build_opener(cookie_handler, redirect_handler) - - def extract_answer(self, url): - def split_key_value(kv_pair): - kv = kv_pair.split("=") - if len(kv) == 2: - return kv[0], kv[1] # ["key", "val"], e.g. key=val + + def web_kit_token(): + import webkit + import ctypes + + self.web_view = webkit.WebView() + self.web_view.set_size_request(640, -1) + + libgobject = ctypes.CDLL('libgobject-2.0.so.0') + libsoup = ctypes.CDLL('libsoup-2.4.so.1') + self.libwebkit = ctypes.CDLL('libwebkitgtk-1.0.so.0') + self.session = self.libwebkit.webkit_get_default_session() + + if FC().proxy_enable and FC().proxy_url: + libgobject = ctypes.CDLL('libgobject-2.0.so.0') + libsoup = ctypes.CDLL('libsoup-2.4.so.1') + self.libwebkit = ctypes.CDLL('libwebkitgtk-1.0.so.0') + if FC().proxy_user and FC().proxy_password: + full_proxy = "http://%s:%s@%s" % (FC().proxy_user, FC().proxy_password, FC().proxy_url) + else: + full_proxy = "http://%s" % FC().proxy_url + proxy_uri = libsoup.soup_uri_new(full_proxy) # set your proxy url + libgobject.g_object_set(self.session, "proxy-uri", proxy_uri, None) else: - return kv[0], None # ["key"], e.g. key= or key - return dict(split_key_value(kv_pair) for kv_pair in urlparse(url).fragment.split("&")) - - def get_page_by_url(self, url, params=None): - if params: - params = urllib.urlencode(params) - response = self.opener.open(url, params) - page = response.read() - parser = FormParser() - parser.feed(page) - parser.close() - return response, parser - - def auth_user(self, check_only=False): - res, parser = self.get_page_by_url(self.auth_url) - parsedurl = urlparse(res.geturl()) - if parsedurl.path == "/blank.html": - """user already authorized or error""" - answer = self.extract_answer(res.geturl()) - if "access_token" in answer and "user_id" in answer: - return answer["access_token"], answer["user_id"] - elif parsedurl.path == "/oauth/authorize" and "grant_access" in parser.url: - logging.debug("Grant access page without authorization") - return - elif parsedurl.path != "/oauth/authorize": - logging.debug("Someting wrong") - logging.debug(parsedurl.path) - return - if check_only: - return - """Full auth""" - return self.do_full_auth(res, parser) - - def do_full_auth(self, res, parser): - logging.debug("do full auth") - if parser.captcha_image: - logging.debug("captcha enabled, %s" % parser.captcha_image) - cres = self.opener.open(parser.captcha_image) - blob = cres.read() - unknwn, image = tempfile.mkstemp() - fd = os.open(image, os.O_RDWR) - os.write(fd, blob) - self.captcha_image.set_from_file(image) - self.chbox.show() - else: - self.chbox.hide() - if parser.auth_error: - logging.debug(parser.auth_error) - self.error_label.set_text(parser.auth_error) - self.error_label.show() + libgobject.g_object_set(self.session, "proxy-uri", None, None) + #'''remove all cookiejars''' + #generic_cookiejar_type = libgobject.g_type_from_name('SoupCookieJar') + #libsoup.soup_session_remove_feature_by_type(session, generic_cookiejar_type) + + '''and replace with a new persistent jar''' + self.cooky_file = os.path.join(CONFIG_DIR, "vk_cooky") + cookiejar = libsoup.soup_cookie_jar_text_new(self.cooky_file, False) + libsoup.soup_session_add_feature(self.session, cookiejar) + + self.web_view.load_uri(self.get_web_url()) + self.web_view.connect("navigation-policy-decision-requested", self._nav_request_policy_decision_cb) + self.web_view.connect("load-finished", self.load_finished) + + self.web_view.show() + self.vbox.pack_start(self.web_view, True, True) + + + def dialog_token(): + self.set_keep_above(True) + self.token = gtk.Entry() + self.set_size_request(550, -1) + self.user_id = gtk.Entry() + if FC().user_id: + self.user_id.set_text(FC().user_id) + + edit = gtk.Entry() + edit.set_text(self.API_URL) + link = gtk.LinkButton(self.API_URL,_("Open")) + + line = gtk.HBox(False, 0) + line.pack_start(edit, True, True) + line.pack_start(link, False, False) + + apply = gtk.Button(_("2: Apply Token")) + apply.connect("clicked", self.on_dt_apply) + + self.info_line = gtk.Label(_("Please generate token...")) + + self.vbox.pack_start(ImageBase("vk.png"), False, False) + self.vbox.pack_start(line, False, False) + + self.vbox.pack_start(HBoxLableEntry(gtk.Label(_("Token:")) , self.token)) + self.vbox.pack_start(HBoxLableEntry(gtk.Label(_("User ID:")) , self.user_id)) + + self.vbox.pack_start(apply, False, False) + self.vbox.pack_start(self.info_line, False, False) + + if os.name == 'nt': + dialog_token() else: - self.error_label.hide() - login, passw = FCBase().vk_login, FCBase().vk_password - if not login or not passw or parser.captcha_image or parser.auth_error: - dialog_result = self.run() - self.captcha_image.clear() - self.do_save() - self.hide() - if dialog_result is gtk.RESPONSE_ACCEPT.real: - login = self.login.get_text() - passw = self.password.get_text() + try: + web_kit_token() + except Exception, e: + logging.error(str(e)) + dialog_token() + pass + + def get_response(self, line): + id = line.find("#") + fragment = line[id + 1:] + res = {} + for line in fragment.split("&"): + key = line.split('=')[0] + val = line.split('=')[1] + res[key] = val + + return res + + def on_dt_apply(self, *a): + token, user_id = self.token.get_text(), self.user_id.get_text() + token = token.strip() + user_id = user_id.strip() + if token and user_id: + if self.service.is_authentified(token, user_id): + self.apply(token, user_id) + self.hide() else: - return - parser.params["email"] = login - parser.params["pass"] = passw - """send auth params""" - new_res, new_parser = self.get_page_by_url(parser.url, parser.params) - if new_parser.captcha_image or new_parser.auth_error: - return self.do_full_auth(new_res, new_parser) + self.info_line.set_text(_("Token incorrect or expired")) else: - """if access without confirmation""" - answer = self.extract_answer(new_res.geturl()) - if "access_token" in answer and "user_id" in answer: - return answer["access_token"], answer["user_id"] - """do grant access""" - new_res, new_parser = self.get_page_by_url(new_parser.url, new_parser.params) - answer = self.extract_answer(new_res.geturl()) - if "access_token" in answer and "user_id" in answer: - return answer["access_token"], answer["user_id"] - logging.debug("something wrong...") - return - + self.info_line.set_text(_("Token or user is empty")); + + + + def apply(self, access_token, user_id): + FC().access_token = access_token + FC().user_id= user_id + self.service.set_token_user(access_token, user_id) + + thread.start_new_thread(FC().save, ()) + self.hide() + self.response(gtk.RESPONSE_APPLY) + + def load_finished(self, *a): + pass + + + def _nav_request_policy_decision_cb(self, view, frame, net_req, nav_act, pol_dec): + uri = net_req.get_uri() + if "access_token" in uri: + token = self.get_response(uri)["access_token"] + userid= self.get_response(uri)["user_id"] + self.apply(token, userid) + elif "error" in uri: + logging.error("error in response: " + uri) + self.service.reset_vk() + zavlab_string = "

There was an error when entering the service vkontakte
Your authorization data have been reset
Try to enter again

" + self.web_view.load_html_string(zavlab_string, "file:///") + elif "login?act=blocked" in uri: + logging.warning("blocked in response: " + uri) + self.service.reset_vk() + zavlab_string = "

The login is blocked

" + self.web_view.load_html_string(zavlab_string, "file:///") + return False + class VKService: def __init__(self, token, user_id): self.set_token_user(token, user_id) + self.vk_window=VKAuthorizationWindow(self) self.connected = None - self.authorized_lock = threading.Lock() - - def auth(self, check_only=False): - self.connected = None - auth_provider = VKAuth() - res = auth_provider.auth_user(check_only) - auth_provider.destroy() - if res: - FC().access_token = res[0] - FC().user_id = res[1] - #thread.start_new_thread(FC().save, ()) - self.set_token_user(res[0], res[1]) - self.connected = True - return True - return False def set_token_user(self, token, user_id): self.token = token self.user_id = user_id def get_result(self, method, data, attempt_count=0): - result = self.get(method, data) + result = self.get(method, data) if not result: return logging.debug("result " + result) @@ -296,11 +205,8 @@ if attempt_count: return logging.info("Try to get new access token and search again") - # fix for incorrect behaviour when token has been expired - # if user has been connected and token is expired - show auth window - # else - check only - if not self.auth(not self.connected): - return + self.vk_window.libwebkit.soup_session_abort(self.vk_window.session) + gobject.idle_add(self.vk_window.web_view.load_uri, self.vk_window.get_web_url()) time.sleep(3) attempt_count += 1 return self.get_result(method, data, attempt_count) @@ -309,28 +215,27 @@ except simplejson.JSONDecodeError, e: logging.error(e) return - if "response" in object: + if object.has_key("response"): return object["response"] def reset_vk(self): - if os.path.isfile(cookiefile): - os.remove(cookiefile) + if os.path.isfile(self.vk_window.cooky_file): + os.remove(self.vk_window.cooky_file) FC().access_token = None FC().user_id = None - FCBase().vk_login = None - FCBase().vk_password = None self.token = None self.user_id = None - self.connected = False + self.connected = False def get(self, method, data): + time.sleep(0.6) url = "https://api.vk.com/method/%(METHOD_NAME)s?%(PARAMETERS)s&access_token=%(ACCESS_TOKEN)s" % {'METHOD_NAME':method, 'PARAMETERS':data, 'ACCESS_TOKEN':self.token } #logging.debug("GET " + url) logging.debug("Try to get response from vkontakte") try: response = urllib2.urlopen(url, timeout=7) - if "response" not in vars(): + if not vars().has_key("response"): logging.error("Can't get response from vkontakte") return except IOError: @@ -346,57 +251,62 @@ return simplejson.loads(json) def is_authorized(self): - self.authorized_lock.acquire() self.result = None def task_is_authorized(): if self.is_connected(): self.result = True - elif self.auth(): + return + self.vk_window = VKAuthorizationWindow(self) + response = self.vk_window.run() + if response == gtk.RESPONSE_APPLY: + self.vk_window.destroy() self.result = True else: + self.vk_window.destroy() self.result = False gobject.idle_add(task_is_authorized) - while self.result is None: - time.sleep(0.1) - if self.authorized_lock.locked(): - self.authorized_lock.release() + while self.result == None: + time.sleep(0.3) return self.result def show_vk(self): - self.auth() + self.vk_window.show() def is_connected(self): + if self.connected: return True if not self.token or not self.user_id: return False - res = self.get("getProfiles", "uid=" + self.user_id) + res = self.get("getProfiles", "uid="+self.user_id) if not res: - self.connected = False + self.connected = False return False elif "error" in res: - self.connected = False + self.connected = False return False else: - self.connected = True + self.connected = True return True def get_profile(self): - return self.get_result("getProfiles", "uid=" + str(self.user_id)) - - def is_authentified(self, token, user_id): + return self.get_result("getProfiles", "uid="+str(self.user_id)) + + + def is_authentified(self, token,user_id): self.token = token self.user_id = user_id - res = self.get("getProfiles", "uid=" + self.user_id) + res = self.get("getProfiles", "uid="+self.user_id) if "error" in res: return False else: return True - + + def find_tracks_by_query(self, query): def post(): self.find_tracks_by_query(self, query) @@ -436,9 +346,9 @@ id = url[index + 3:] id = int(id) if id > 0: - results = self.get_result('audio.get', "uid=" + str(id)) + results = self.get_result('audio.get', "uid="+str(id)) else: - results = self.get_result('audio.get', "gid=" + str(abs(id))) + results = self.get_result('audio.get', "gid="+str(abs(id))) childs = [] for line in results: @@ -448,6 +358,7 @@ bean.time = convert_seconds_to_text(line['duration']) bean.path = line['url'] childs.append(bean) + return childs @@ -460,7 +371,7 @@ for song in vkSongs: time = song.time if time in times_count: - times_count[time] += 1 + times_count[time] = times_count[time] + 1 else: times_count[time] = 1 #get most relatives times time @@ -480,3 +391,8 @@ if times_count[i] == r_count: return i return None + +if __name__ == '__main__': + vk = VKAuthorizationWindow(None) + vk.show() + gtk.main() diff -Nru foobnix-2.6.11q/foobnix/regui/treeview/dragdrop_tree.py foobnix-2.6.10quantal/foobnix/regui/treeview/dragdrop_tree.py --- foobnix-2.6.11q/foobnix/regui/treeview/dragdrop_tree.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/treeview/dragdrop_tree.py 2013-05-04 14:58:13.000000000 +0000 @@ -28,10 +28,10 @@ from foobnix.regui.model import FModel, FTreeModel + VIEW_PLAIN = 0 VIEW_TREE = 1 - class DragDropTree(gtk.TreeView): def __init__(self, controls): self.controls = controls @@ -42,18 +42,18 @@ self.copy = False """init values""" - self.hash = {None: None} + self.hash = {None:None} self.current_view = None def on_drag_begin(self, widget, drag_context): - ff_model, ff_paths = widget.get_selection().get_selected_rows() # @UnusedVariable + ff_model, ff_paths = widget.get_selection().get_selected_rows() #@UnusedVariable if len(ff_paths) > 1: self.drag_source_set_icon_stock('gtk-dnd-multiple') else: self.drag_source_set_icon_stock('gtk-dnd') def configure_recive_drag(self): - self.enable_model_drag_dest([("text/uri-list", 0, 0)], gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE) # @UndefinedVariable + self.enable_model_drag_dest([("text/uri-list", 0, 0)], gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE) #@UndefinedVariable def configure_send_drag(self): #self.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, [("text/uri-list", 0, 0)], gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE) #@UndefinedVariable @@ -148,8 +148,7 @@ from_tree = drag_context.get_source_widget() - if not from_tree: - return None + if not from_tree: return None ff_model, ff_paths = from_tree.get_selection().get_selected_rows() @@ -161,21 +160,9 @@ if not to_model.get_iter_root(): self.controls.notetabs.rename_tab(to_tree.scroll, "Foobnix") all_rows = [] - logging.debug("Receive dnd items from %s" % str(from_tree)) for ff_path in ff_paths: ff_iter = ff_model.get_iter(ff_path) - if "VKIntegrationControls" in str(from_tree): - bean = self.get_bean_from_model_iter(ff_model, ff_iter) - beans = [bean] - logging.debug("selected bean") - logging.debug(bean) - if bean and isinstance(bean, FModel) and bean.user_id and not bean.path: - beans += from_tree.get_user_tracks_as_beans(bean.user_id) - else: - logging.debug("Bean is None, or not is FDModel or has no contains user_id") - beans = self.get_all_beans_by_parent(ff_model, ff_iter) - else: - beans = self.get_all_beans_by_parent(ff_model, ff_iter) + beans = self.get_all_beans_by_parent(ff_model, ff_iter) all_rows += self.fill_beans_and_get_rows(beans, self.simple_content_filter) for i, row in enumerate(all_rows): @@ -210,11 +197,11 @@ AFTER): info_dialog(_("Attention!!!"), _("When you release the mouse button the mouse" + - " pointer must be over the folder exactly." + - " Please retry!")) + " pointer must be over the folder exactly." + + " Please retry!")) return if files and copy_move_files_dialog(files, dest_folder, self.copy): - text = _("Copying:") if self.copy == gtk.gdk.ACTION_COPY else _("Replacing:") # @UndefinedVariable + text = _("Copying:") if self.copy == gtk.gdk.ACTION_COPY else _("Replacing:") #@UndefinedVariable self.pr_window = CopyProgressWindow(_("Progress"), files, 300, 100) self.pr_window.label_from.set_text(text) self.pr_window.label_to.set_text(_("To: ") + dest_folder + "\n") @@ -245,11 +232,11 @@ child_row[self.path[0]] = os.path.join(row[self.path[0]], os.path.basename(child_row[self.path[0]])) self.tree_insert_row(child_row) task(child_row) - if self.copy == gtk.gdk.ACTION_MOVE: # @UndefinedVariable - self.row_to_remove.append(self.get_row_reference_from_iter(ff_model, - ff_model.convert_child_iter_to_iter(child_row.iter))) + if self.copy == gtk.gdk.ACTION_MOVE: #@UndefinedVariable + self.row_to_remove.append(self.get_row_reference_from_iter(ff_model, + ff_model.convert_child_iter_to_iter(child_row.iter))) task(row) - if self.copy == gtk.gdk.ACTION_MOVE: # @UndefinedVariable + if self.copy == gtk.gdk.ACTION_MOVE: #@UndefinedVariable self.row_to_remove.append(ff_row_ref) self.remove_replaced(ff_model) @@ -258,8 +245,9 @@ return for ff_row_ref in ff_row_refs: - new_iter = self.one_row_replacing(ff_row_ref, ff_path, ff_model, from_tree, to_tree, - to_model, to_iter, to_filter_pos, to_filter_path, new_iter) + new_iter = self.one_row_replacing(ff_row_ref, ff_path, ff_model, from_tree, + to_tree, to_model, to_iter, to_filter_pos, to_filter_path, + new_iter) if from_tree == to_tree: self.remove_replaced(ff_model) @@ -268,8 +256,9 @@ self.rebuild_tree(to_tree) - def one_row_replacing(self, ff_row_ref, ff_path, ff_model, from_tree, to_tree, to_model, - to_iter, to_filter_pos, to_filter_path, new_iter, new_path=None, is_copy_move=False): + def one_row_replacing(self, ff_row_ref, ff_path, ff_model, from_tree, + to_tree, to_model, to_iter, to_filter_pos, to_filter_path, + new_iter, new_path=None, is_copy_move=False): ff_iter = self.get_iter_from_row_reference(ff_row_ref) @@ -321,7 +310,8 @@ if not next_iter: break return new_iter - + + def rebuild_tree(self, tree): if tree.current_view == VIEW_TREE: self.updates_tree_structure() @@ -338,7 +328,9 @@ filter_iter = self.get_iter_from_row_reference(ref) iter = ff_model.convert_iter_to_child_iter(filter_iter) ff_model.get_model().remove(iter) - + + + def add_m3u(self, from_model=None, from_iter=None, to_tree=None, to_model=None, to_iter=None, pos=None, row=None): if row: @@ -383,7 +375,7 @@ from_iter = self.get_iter_from_row_reference(ref) from_model = ref.get_model() row = self.get_row_from_model_iter(from_model, from_iter) - if not child and self.copy == gtk.gdk.ACTION_MOVE: # @UndefinedVariable + if not child and self.copy == gtk.gdk.ACTION_MOVE: #@UndefinedVariable self.row_to_remove.append(ref) if (to_tree and hasattr(to_tree, "current_view") @@ -395,9 +387,9 @@ if to_iter: if (to_model.get_value(to_iter, self.is_file[0]) and - pos in (INTO_OR_BEFORE, INTO_OR_AFTER)): + pos in (INTO_OR_BEFORE,INTO_OR_AFTER)): pos = AFTER - if pos in (INTO_OR_BEFORE, INTO_OR_AFTER): + if pos in (INTO_OR_BEFORE,INTO_OR_AFTER): if child: new_iter = to_model.append(to_iter, row) else: @@ -430,7 +422,7 @@ """Iters have already changed. Redefine""" iter = self.get_iter_from_row_reference(ref) - if ff_model.iter_n_children(iter): + if ff_model.iter_n_children(iter): to_child_iter = self.iter_is_parent(ref, ff_model, to_tree, to_model, to_child_iter) if to_tree.current_view == VIEW_PLAIN: to_parent_iter = to_child_iter @@ -462,12 +454,11 @@ checked_cue_beans = [] checked_m3u_beans = [] m3u_beans_for_delete = [] - def task(beans): for bean in beans: path = bean.path if path and (get_file_extension(path) in [".m3u", ".m3u8"] - and bean not in checked_m3u_beans): + and bean not in checked_m3u_beans): checked_m3u_beans.append(bean) for b in beans: if (os.path.dirname(b.path) == os.path.dirname(path) and os.path.isfile(b.path) @@ -476,8 +467,8 @@ break return task(beans) - if path and (get_file_extension(path) == ".cue" - and bean not in checked_cue_beans): + if path and (get_file_extension(path) == ".cue" + and bean not in checked_cue_beans): checked_cue_beans.append(bean) filtered_beans = [b for b in beans if (os.path.dirname(b.path) != os.path.dirname(path) @@ -496,7 +487,6 @@ if old_path != new_path: logging.debug('old file: ' + old_path) logging.debug('new file: ' + new_path) - def task(): if self.copy == gtk.gdk.ACTION_MOVE: #@UndefinedVariable copy_move_with_progressbar(self.pr_window, old_path, dest_folder, move=True) @@ -527,8 +517,8 @@ if not parent_iter: logging.debug("no parent iter found") if to_filter_path[-1] > 0: - previous_iter = to_f_model.get_iter((to_filter_path[-1] - 1,)) - previous_path = to_f_model.get_value(previous_iter, self.path[0]) + previous_iter = to_f_model.get_iter( (to_filter_path[-1] -1,) ) + previous_path = to_f_model.get_value(previous_iter , self.path[0]) dest_folder = os.path.dirname(previous_path) else: logging.debug("item is top in tree") @@ -620,7 +610,8 @@ def remove_iters(self, allIters): for iter in allIters: self.model.remove(iter) - + + def get_child_iters_by_parent(self, model, iter): list = [] if model.iter_has_child(iter): @@ -638,7 +629,6 @@ def get_child_beans_by_parent(self, model, iter): list = [] - def add_to_list(beans): for i, bean in enumerate(beans): if i: bean.parent(parent) @@ -715,8 +705,7 @@ logging.debug("Plain append task: " + str(bean.text) + " " + str(bean.path)) if not bean: return - - if bean.is_file: + if bean.is_file == True: bean.font = "normal" else: bean.font = "bold" @@ -745,7 +734,7 @@ def tree_append(self, bean): if not bean: return - if bean.is_file: + if bean.is_file == True: bean.font = "normal" else: bean.font = "bold" diff -Nru foobnix-2.6.11q/foobnix/regui/treeview/navigation_tree.py foobnix-2.6.10quantal/foobnix/regui/treeview/navigation_tree.py --- foobnix-2.6.11q/foobnix/regui/treeview/navigation_tree.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/treeview/navigation_tree.py 2013-05-04 14:58:13.000000000 +0000 @@ -26,6 +26,7 @@ from foobnix.util.m3u_utils import is_m3u + class NavigationTreeControl(CommonTreeControl, LoadSave): def __init__(self, controls): CommonTreeControl.__init__(self, controls) @@ -78,7 +79,6 @@ '''to force the ext_column to take the minimum size''' self.name_column.set_fixed_width(2000) - def task(*a): self.on_click_header(None, None, on_start=True) gobject.idle_add(task) @@ -94,7 +94,7 @@ # on left click add selected items to current tab """to select item under cursor""" try: - path, col, cellx, celly = self.get_path_at_pos(int(e.x), int(e.y)) # @UnusedVariable + path, col, cellx, celly = self.get_path_at_pos(int(e.x), int(e.y)) #@UnusedVariable self.get_selection().select_path(path) except TypeError: pass @@ -200,7 +200,7 @@ if not i and not current: name = row[0] self.controls.notetabs._append_tab(name) - to_tree = self.controls.notetabs.get_current_tree() # because to_tree has changed + to_tree = self.controls.notetabs.get_current_tree() # because to_tree has changed to_model = to_tree.get_model().get_model() if is_m3u(from_model.get_value(from_iter, self.path[0])): @@ -219,12 +219,13 @@ if not current: '''gobject because rebuild_as_plain use it too''' gobject.idle_add(self.controls.play_first_file_in_playlist) - - self.controls.notetabs.on_save_tabs() # because save process already wrapped with thread - # thread.start_new_thread(self.controls.notetabs.on_save_tabs, ()) - - #gobject.idle_add(task, to_tree, to_model) + + thread.start_new_thread(self.controls.notetabs.on_save_tabs, ()) + self.controls.search_progress.background_spinner_wrapper(task, False, to_tree, to_model) + + + def add_folder(self, in_new_tab=False): chooser = gtk.FileChooserDialog(title=_("Choose directory with music"), @@ -240,7 +241,6 @@ paths = chooser.get_filenames() chooser.destroy() self.controls.main_window.present() - def task(): path = paths[0] FCache().last_music_path = path[:path.rfind("/")] @@ -317,7 +317,7 @@ else: task(self) self.normalize_columns_width() - + def on_load(self): #self.controls.load_music_tree() self.restore_expand(FC().nav_expand_paths) diff -Nru foobnix-2.6.11q/foobnix/regui/treeview/playlist_tree.py foobnix-2.6.10quantal/foobnix/regui/treeview/playlist_tree.py --- foobnix-2.6.11q/foobnix/regui/treeview/playlist_tree.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/treeview/playlist_tree.py 2013-05-04 14:58:13.000000000 +0000 @@ -27,7 +27,6 @@ FLAG = False - class PlaylistTreeControl(CommonTreeControl): def __init__(self, controls): @@ -40,7 +39,8 @@ self.set_headers_visible(True) self.set_headers_clickable(True) self.set_reorderable(True) - + + """Column icon""" self.icon_col = gtk.TreeViewColumn(None, gtk.CellRendererPixbuf(), stock_id=self.play_icon[0]) self.icon_col.key = "*" @@ -96,8 +96,9 @@ """column album""" self.album_col = gtk.TreeViewColumn(None, gtk.CellRendererText(), text=self.album[0]) self.album_col.key = "Album" - - if self.album_col.key not in FC().columns: + + + if not FC().columns.has_key(self.album_col.key): FC().columns[self.album_col.key] = [False, 7, 90] self.album_col.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) self.album_col.set_resizable(True) @@ -146,11 +147,12 @@ if row[self.play_icon[0]]: bean = self.get_bean_from_row(row) return bean - + + def common_single_random(self): logging.debug("Repeat state " + str(FC().repeat_state)) if FC().repeat_state == const.REPEAT_SINGLE: - return self.get_current_bean_by_UUID() + return self.get_current_bean_by_UUID(); if FC().is_order_random: bean = self.get_random_bean() @@ -170,6 +172,7 @@ return self.set_play_icon_to_bean(bean) + self.scroll_follow_play_icon() logging.debug("Next bean " + str(bean) + bean.text) @@ -185,8 +188,10 @@ if not bean: self.controls.state_stop() return - + + self.set_play_icon_to_bean(bean) + self.scroll_follow_play_icon() return bean @@ -254,7 +259,7 @@ def on_click_header(self, w, e): if is_rigth_click(e): - if "menu" in w.__dict__: + if w.__dict__.has_key("menu"): w.menu.show(e) else: self.menu.show(e) @@ -336,7 +341,7 @@ number_music_tabs = self.controls.notetabs.get_n_pages() - 1 for i, column in enumerate(self.get_columns()): FC().columns[column.key][1] = i - if column.get_width() > 1: # to avoid recording of zero width in config + if column.get_width() > 1: #to avoid recording of zero width in config FC().columns[column.key][2] = column.get_width() for page in xrange(number_music_tabs, 0, -1): @@ -363,13 +368,13 @@ column.set_reorderable(True) if FC().columns[column.key][0]: self.move_column_after(column, None) - if "item" in column.__dict__: + if column.__dict__.has_key("item"): column.item.connect("button-press-event", self.on_toggle, column) self.menu.append(column.item) column.item.set_active(True) visible_columns.append(column) else: - if "item" in column.__dict__: + if column.__dict__.has_key("item"): column.item.connect("button-press-event", self.on_toggle, column) self.menu.append(column.item) column.item.set_active(False) diff -Nru foobnix-2.6.11q/foobnix/regui/treeview/vk_integration_tree.py foobnix-2.6.10quantal/foobnix/regui/treeview/vk_integration_tree.py --- foobnix-2.6.11q/foobnix/regui/treeview/vk_integration_tree.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/regui/treeview/vk_integration_tree.py 2013-05-04 14:58:13.000000000 +0000 @@ -34,7 +34,7 @@ self.set_type_tree() self.lazy = False - self.cache = [] + self.cache =[] def lazy_load(self): if not self.controls.vk_service.is_authorized(): @@ -44,9 +44,9 @@ def _lazy_load(self): def get_users_by_uuid(uuidd): - for user in self.controls.vk_service.get_result('getProfiles', 'uids=' + uuidd): + for user in self.controls.vk_service.get_result('getProfiles','uids='+uuidd): logging.debug(user) - name = user['first_name'] + " " + user['last_name'] + name = user['first_name']+ " "+ user['last_name'] parent = FModel(name) parent.user_id = user['uid'] @@ -57,9 +57,9 @@ get_users_by_uuid(FC().user_id) - uids = self.controls.vk_service.get_result('friends.get', 'uid=' + FC().user_id) + uids = self.controls.vk_service.get_result('friends.get','uid='+FC().user_id) if uids: - get_users_by_uuid(",".join(["%s" % i for i in uids])) + get_users_by_uuid(",".join(["%s" % (i) for i in uids ])) self.lazy = True @@ -74,8 +74,7 @@ active = self.get_selected_bean() if active: menu = Popup() - if isinstance(active, FModel) and active.path: - menu.add_item(_('Play'), gtk.STOCK_MEDIA_PLAY, self.controls.play, active) + menu.add_item(_('Play'), gtk.STOCK_MEDIA_PLAY, self.controls.play, active) menu.add_item(_('Copy to Search Line'), gtk.STOCK_COPY, self.controls.searchPanel.set_search_text, active.text) menu.show(e) @@ -83,36 +82,14 @@ selected = self.get_selected_bean() if not selected: return - - def task(): - if selected.user_id not in self.cache: - beans = self.get_user_tracks_as_beans(selected.user_id) - else: - 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() - - self.controls.in_thread.run_with_progressbar(task) + 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() def on_row_expanded(self, widget, iter, path): self.on_bean_expanded(iter) - - 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.is_file = True - beans.append(bean) - return beans + def on_bean_expanded(self, parent_iter): logging.debug("expanded %s" % parent_iter) @@ -125,14 +102,28 @@ self.cache.append(parent.user_id) - old_iters = self.get_child_iters_by_parent(self.model, p_iter) - + old_iters = self.get_child_iters_by_parent(self.model, p_iter); + + def task(): - beans = self.get_user_tracks_as_beans(parent.user_id) - for bean in beans: - bean.parent(parent) - row = self.get_row_from_bean(bean) + result = self.controls.vk_service.get_result('audio.get',"uid="+parent.user_id) + if not result: + bean = FDModel(_("No results found")).parent(parent).add_is_file(True) + row = self.get_row_from_bean(bean); self.model.append(p_iter, row) + else: + for line in result: + 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) @@ -141,3 +132,4 @@ gobject.idle_add(task) self.controls.in_thread.run_with_progressbar(g_task) + diff -Nru foobnix-2.6.11q/foobnix/thirdparty/sound_menu.py foobnix-2.6.10quantal/foobnix/thirdparty/sound_menu.py --- foobnix-2.6.11q/foobnix/thirdparty/sound_menu.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/thirdparty/sound_menu.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,446 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -### BEGIN LICENSE -# Copyright (C) 2011 Rick Spencer -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 3, as published -# by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranties of -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -### END LICENSE - -"""Contains SoundMenuControls, A class to make it easy to integrate with the Ubuntu Sound Menu. - -In order for a media player to appear in the sonud menu, it must have -a desktop file in /usr/share/applications. For example, for a media player -named "simple" player, there must be desktop file /usr/share/applications/simple-player.desktop - -The desktop file must specify that it is indeed a media player. For example, simple-player.desktop -might look like the follwing: -[Desktop Entry] -Name=Simple Player -Comment=SimplePlayer application -Categories=GNOME;Audio;Music;Player;AudioVideo; -Exec=simple-player -Icon=simple-player -Terminal=false -Type=Application -MimeType=application/x-ogg;application/ogg;audio/x-vorbis+ogg;audio/x-scpls;audio/x-mp3;audio/x-mpeg;audio/mpeg;audio/x-mpegurl;audio/x-flac; - -In order for the sound menu to run, a dbus loop must be running before -the player is created and before the gtk. mainloop is run. you can add -DBusGMainLoop(set_as_default=True) to your application's __main__ function. - -The Ubuntu Sound Menu integrates with applications via the MPRIS2 dbus api, -which is specified here: http://www.mpris.org/2.1/spec/ - -This module does strive to provide an MPRIS2 implementation, but rather -focuses on the subset of functionality required by the Sound Menu. - -The SoundMenuControls class can be ininstatiated, but does not provide any -default functionality. In order to provide the required functionality, -implementations must be provided for the functions starting with -"_sound_menu", such as "_sound_menu_play", etc... - -Functions and properties starting with capitalize letters, such as -"Next" and "Previous" are called by the Ubuntu Sound Menu. These -functions and properties are not designed to be called directly -or overriden by application code, only the Sound Menu. - -Other functions are designed to be called as needed by the -implementation to inform the Sound Menu of changes. Thse functions -include signal_playing, signal_paused, and song_changed. - -Using -#create the sound menu object and reassign functions -sound_menu = SoundMenuControls(desktop_name) -sound_menu._sound_menu_next = _sound_menu_next -sound_menu._sound_menu_previous = _sound_menu_previous -sound_menu._sound_menu_is_playing = _sound_menu_is_playing -sound_menu._sound_menu_play = _sound_menu_play -sound_menu._sound_menu_pause = _sound_menu_play -sound_menu._sound_menu_raise = _sound_menu_raise - -#when the song in the player changes, it should inform -the sond menu -sound_menu.song_changed(artist,album,title) - -#when the player changes to/from the playing, it should inform the sound menu -sound_menu.signal_playing() -sound_menu.signal_paused() - -#whent the song is changed from the application, -#use song_changed to inform the Ubuntu Sound Menu -sound_menu.song_changed(artist, album, song_title) - -Configuring -SoundMenuControls does not come with any stock behaviors, so it -cannot be configured - -Extending -SoundMenuControls can be used as a base class with single or multiple inheritance. - -_sound_menu_next -_sound_menu_previous -_sound_menu_is_playing -_sound_menu_play -_sound_menu_pause - -""" - -import dbus -import dbus.service - -class SoundMenuControls(dbus.service.Object): - """ - SoundMenuControls - A class to make it easy to integrate with the Ubuntu Sound Menu. - - """ - - def __init__(self, desktop_name): - """ - Creates a SoundMenuControls object. - - Requires a dbus loop to be created before the gtk mainloop, - typically by calling DBusGMainLoop(set_as_default=True). - - arguments: - desktop_name: The name of the desktop file for the application, - such as, "simple-player" to refer to the file: simple-player.desktop. - - """ - - self.desktop_name = desktop_name - bus_str = """org.mpris.MediaPlayer2.%s""" % desktop_name - bus_name = dbus.service.BusName(bus_str, bus=dbus.SessionBus()) - dbus.service.Object.__init__(self, bus_name, "/org/mpris/MediaPlayer2") - self.__playback_status = "Stopped" - - self.song_changed() - - def song_changed(self, artists = None, album = None, title = None, cover = None): - """song_changed - sets the info for the current song. - - This method is not typically overriden. It should be called - by implementations of this class when the player has changed - songs. - - named arguments: - artists - a list of strings representing the artists" - album - a string for the name of the album - title - a string for the title of the song - - """ - - if artists is None: - artists = ["Artist Unknown"] - if album is None: - album = "Album Uknown" - if title is None: - title = "Title Uknown" - data = {"xesam:album": album, - "xesam:title": title, - "xesam:artist": artists - } - if cover: - data["mpris:artUrl"] = cover - self.__meta_data = dbus.Dictionary(data, "sv", variant_level=1) - - - @dbus.service.method('org.mpris.MediaPlayer2') - def Raise(self): - """Raise - - A dbus signal handler for the Raise signal. Do no override this - function directly. rather, overrise _sound_menu_raise. This - function is typically only called by the Sound, not directly - from code. - - """ - - self._sound_menu_raise() - - def _sound_menu_raise(self): - """ _sound_menu_raise - - - Override this function to bring the media player to the front - when selected by the sound menu. For example, by calling - app_window.get_window().show() - - """ - - raise NotImplementedError("""@dbus.service.method('org.mpris.MediaPlayer2') Raise - is not implemented by this player.""") - - - @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v') - def Get(self, interface, prop): - """Get - - A function necessary to implement dbus properties. - - This function is only called by the Sound Menu, and should not - be overriden or called directly. - - """ - - my_prop = self.__getattribute__(prop) - return my_prop - - @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='ssv') - def Set(self, interface, prop, value): - """Set - - A function necessary to implement dbus properties. - - This function is only called by the Sound Menu, and should not - be overriden or called directly. - - """ - my_prop = self.__getattribute__(prop) - my_prop = value - - @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}') - def GetAll(self, interface): - """GetAll - - A function necessary to implement dbus properties. - - This function is only called by the Sound Menu, and should not - be overriden or called directly. - - """ - - return [DesktopEntry, PlaybackStatus, MetaData] - - @property - def DesktopEntry(self): - """DesktopEntry - - The name of the desktop file. - - This propert is only used by the Sound Menu, and should not - be overriden or called directly. - - """ - - return self.desktop_name - - @property - def PlaybackStatus(self): - """PlaybackStatus - - Current status "Playing", "Paused", or "Stopped" - - This property is only used by the Sound Menu, and should not - be overriden or called directly. - - """ - - return self.__playback_status - - @property - def MetaData(self): - """MetaData - - The info for the current song. - - This property is only used by the Sound Menu, and should not - be overriden or called directly. - - """ - - return self.__meta_data - - @dbus.service.method('org.mpris.MediaPlayer2.Player') - def Next(self): - """Next - - A dbus signal handler for the Next signal. Do no override this - function directly. Rather, overide _sound_menu_next. This - function is typically only called by the Sound, not directly - from code. - - """ - - self._sound_menu_next() - - def _sound_menu_next(self): - """_sound_menu_next - - This function is called when the user has clicked - the next button in the Sound Indicator. Implementations - should overrirde this function in order to a function to - advance to the next track. Implementations should call - song_changed() and sound_menu.signal_playing() in order to - keep the song information in the sound menu in sync. - - The default implementation of this function has no effect. - - """ - pass - - @dbus.service.method('org.mpris.MediaPlayer2.Player') - def Previous(self): - """Previous - - A dbus signal handler for the Previous signal. Do no override this - function directly. Rather, overide _sound_menu_previous. This - function is typically only called by the Sound Menu, not directly - from code. - - """ - - - self._sound_menu_previous() - - def _sound_menu_previous(self): - """_sound_menu_previous - - This function is called when the user has clicked - the previous button in the Sound Indicator. Implementations - should overrirde this function in order to a function to - advance to the next track. Implementations should call - song_changed() and sound_menu.signal_playing() in order to - keep the song information in sync. - - The default implementation of this function has no effect. - - - """ - pass - - @dbus.service.method('org.mpris.MediaPlayer2.Player') - def PlayPause(self): - """Next - - A dbus signal handler for the Next signal. Do no override this - function directly. Rather, overide _sound_menu_next. This - function is typically only called by the Sound, not directly - from code. - - """ - - if not self._sound_menu_is_playing(): - self._sound_menu_play() - self.signal_playing() - else: - self._sound_menu_pause() - self.signal_paused() - - def signal_playing(self): - """signal_playing - Tell the Sound Menu that the player has - started playing. Implementations many need to call this function in order - to keep the Sound Menu in synch. - - arguments: - none - - """ - self.__playback_status = "Playing" - d = dbus.Dictionary({"PlaybackStatus":self.__playback_status, "Metadata":self.__meta_data}, - "sv",variant_level=1) - self.PropertiesChanged("org.mpris.MediaPlayer2.Player",d,[]) - - def signal_paused(self): - """signal_paused - Tell the Sound Menu that the player has - been paused. Implementations many need to call this function in order - to keep the Sound Menu in synch. - - arguments: - none - - """ - - self.__playback_status = "Paused" - d = dbus.Dictionary({"PlaybackStatus":self.__playback_status}, - "sv",variant_level=1) - self.PropertiesChanged("org.mpris.MediaPlayer2.Player",d,[]) - - def signal_stopped(self): - self.__playback_status = "Stopped" - d = dbus.Dictionary({"PlaybackStatus": self.__playback_status}, - "sv", variant_level=1) - self.PropertiesChanged("org.mpris.MediaPlayer2.Player", d, []) - - def _sound_menu_is_playing(self): - """_sound_menu_is_playing - - Check if the the player is playing,. - Implementations should overrirde this function - so that the Sound Menu can check whether to display - Play or Pause functionality. - - The default implementation of this function always - returns False. - - arguments: - none - - returns: - returns True if the player is playing, otherwise - returns False if the player is stopped or paused. - """ - - return False - - def _sound_menu_pause(self): - """_sound_menu_pause - - Reponds to the Sound Menu when the user has click the - Pause button. - - Implementations should overrirde this function - to pause playback when called. - - The default implementation of this function does nothing - - arguments: - none - - returns: - None - - """ - - pass - - def _sound_menu_play(self): - """_sound_menu_play - - Reponds to the Sound Menu when the user has click the - Play button. - - Implementations should overrirde this function - to play playback when called. - - The default implementation of this function does nothing - - arguments: - none - - returns: - None - - """ - - pass - - @dbus.service.signal(dbus.PROPERTIES_IFACE, signature='sa{sv}as') - def PropertiesChanged(self, interface_name, changed_properties, - invalidated_properties): - """PropertiesChanged - - A function necessary to implement dbus properties. - - Typically, this function is not overriden or called directly. - - """ - - pass \ No newline at end of file diff -Nru foobnix-2.6.11q/foobnix/util/bean_utils.py foobnix-2.6.10quantal/foobnix/util/bean_utils.py --- foobnix-2.6.11q/foobnix/util/bean_utils.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/util/bean_utils.py 2013-05-04 14:58:13.000000000 +0000 @@ -45,16 +45,11 @@ return None -def get_bean_download_path(bean, path=FC().online_save_to_folder, nosubfolder = FC().nosubfolder): +def get_bean_download_path(bean, path=FC().online_save_to_folder): ext = ".mp3" - if nosubfolder: - name = bean.get_display_name() - name = name.replace("/", "-") - name = name.replace("\\", "-") - path = os.path.join(path, name + ext) - return path - elif bean.artist: + + if bean.artist: bean.artist = bean.artist.replace("/", "-") bean.artist = bean.artist.replace("\\", "-") path = os.path.join(path, bean.artist, bean.get_display_name() + ext) diff -Nru foobnix-2.6.11q/foobnix/util/id3_file.py foobnix-2.6.10quantal/foobnix/util/id3_file.py --- foobnix-2.6.11q/foobnix/util/id3_file.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/util/id3_file.py 2013-05-04 14:58:13.000000000 +0000 @@ -1,12 +1,12 @@ from foobnix.util.id3_util import get_support_music_beans_from_all,\ - udpate_id3_for_beans, add_update_image_paths + udpate_id3_for_beans, add_upadte_image_paths from foobnix.cue.cue_reader import update_id3_for_cue def update_id3_wind_filtering(beans): beans = get_support_music_beans_from_all(beans) beans = udpate_id3_for_beans(beans) beans = update_id3_for_cue(beans) - beans = add_update_image_paths(beans) + beans = add_upadte_image_paths(beans) result = [] for bean in beans: result.append(bean) diff -Nru foobnix-2.6.11q/foobnix/util/id3_util.py foobnix-2.6.10quantal/foobnix/util/id3_util.py --- foobnix-2.6.11q/foobnix/util/id3_util.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/util/id3_util.py 2013-05-04 14:58:13.000000000 +0000 @@ -4,45 +4,34 @@ @author: ivan ''' -from _bsddb import api -import chardet import os import re import logging from foobnix.thirdparty.mutagen.mp4 import MP4 -from foobnix.thirdparty.mutagen.id3 import ID3 -from foobnix.thirdparty.mutagen.flac import FLAC -from foobnix.fc.fc import FC, FCache -from foobnix.fc.fc_cache import COVERS_DIR +from foobnix.fc.fc import FC from foobnix.util.image_util import get_image_by_path from foobnix.util.time_utils import convert_seconds_to_text from foobnix.util.bean_utils import update_bean_from_normalized_text from foobnix.util.file_utils import file_extension, get_file_extension from foobnix.util.audio import get_mutagen_audio from subprocess import Popen, PIPE -from zlib import crc32 -from gtk.gdk import pixbuf_new_from_file -from tempfile import NamedTemporaryFile RUS_ALPHABITE = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" def decode_cp866(text): - """ - Deprecated - """ try: for i in text: if i.lower() in RUS_ALPHABITE: return text - + if not is_cp866(text): return text - + decode_text = text.decode('cp866') - - if u"├" in decode_text: + + if u"├" in decode_text: decode_text = decode_text.replace( u"\u252c", u'ё').replace( u"├", "").replace( @@ -68,30 +57,17 @@ pass return text - def is_cp866(text): - """ - Deprecated - """ - """del figures, punctuation marks and unrecognized text (so as cp866)""" + '''del figures, punctuation marks and unrecognized text (so as cp866)''' only_alphabite = re.sub('[\d\W]', '', text) - + '''del only figures and punctuation marks''' without_punctuation = re.sub('[\d.,/_\-\^#$%&*()+=<>;:\'\"|]', '', text) - + """if unrecognized characters are more half of all alphabetic characters, very likely code text is cp866""" return len(only_alphabite) <= len(without_punctuation)/2 - -def correct_encoding(text): - try: - text = text.encode('cp1252').decode('cp1251') - except: - pass - return text - - def udpate_id3_for_beans(beans): for bean in beans: if get_file_extension(bean.text) in FC().audio_formats: @@ -111,11 +87,10 @@ bean.text = os.path.basename(bean.text) return beans - def udpate_id3(bean): if bean and bean.path and os.path.isfile(bean.path): try: - audio = get_mutagen_audio(bean.path) + audio = get_mutagen_audio(bean.path) except Exception, e: logging.warn("ID3 NOT MP3" + str(e) + bean.path) return bean @@ -125,26 +100,27 @@ 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 audio.has_key('trkn'): if not FC().numbering_by_order: bean.tracknumber = audio['trkn'][0] else: - if audio.has_key('artist'): bean.artist = correct_encoding(audio["artist"][0]) - if audio.has_key('title'): bean.title = correct_encoding(audio["title"][0]) - if audio.has_key('album'): bean.album = correct_encoding(audio["album"][0]) - if audio.has_key('composer'): bean.composer = correct_encoding(audio['composer'][0]) + 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 @@ -153,19 +129,19 @@ 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) - + return bean - def normalized_info(info, bean): list = info.pprint().split(", ") new_list = [] @@ -178,17 +154,16 @@ 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') + 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') + 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) + size = '%.2f MB' % (float(bean.size)/1024/1024) new_list.append(size) return " | ".join(new_list) - def get_support_music_beans_from_all(beans): result = [] for bean in beans: @@ -200,70 +175,14 @@ result.append(bean) else: result.append(bean) - + return result -def add_update_image_paths(beans): +def add_upadte_image_paths(beans): for bean in beans: if bean.path and bean.is_file: - set_cover_from_tags(bean) - if not bean.image: - bean.image = get_image_by_path(bean.path) + bean.image = get_image_by_path(bean.path) return beans -def _get_extension_by_mime(mime): - if mime == "image/jpeg" or mime == "image/jpg": - return ".jpg" - elif mime == "image/png": - return ".png" - logging.warning("Unknown cover mime-type: %s" % mime) - return None - - -def _get_pic_from_mp3(audio): - apics = [k for k in audio.keys() if k.startswith("APIC:")] - if apics: - return audio[apics[0]] - return None - - -def _get_pic_from_flac(audio): - if audio.pictures: - return audio.pictures[0] - return None - - -def set_cover_from_tags(bean): - try: - ext = get_file_extension(bean.path) - if ext == ".mp3": - data = _get_pic_from_mp3(ID3(bean.path)) - elif ext == ".flac": - data = _get_pic_from_flac(FLAC(bean.path)) - else: - return None - if data: - filename = os.path.join(COVERS_DIR, str(crc32(bean.path)) + '.jpg') - fd = NamedTemporaryFile() - fd.write(data.data) - pixbuf = pixbuf_new_from_file(fd.name) - pixbuf.save(filename, "jpeg", {"quality":"90"}) - fd.close() - bean.image = filename - basename = os.path.splitext(os.path.basename(filename))[0] - cache_dict = FCache().covers - if basename in cache_dict: - cache_dict[basename].append(bean.text) - else: - cache_dict[basename] = [bean.text] - return filename - else: - print "data not found" - except Exception, e: - print e - pass - return None - - diff -Nru foobnix-2.6.11q/foobnix/version.py foobnix-2.6.10quantal/foobnix/version.py --- foobnix-2.6.11q/foobnix/version.py 2013-05-04 12:27:39.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix/version.py 2013-05-04 14:58:48.000000000 +0000 @@ -1 +1 @@ -FOOBNIX_VERSION='2.6.11' \ No newline at end of file +FOOBNIX_VERSION='2.6.10' \ No newline at end of file diff -Nru foobnix-2.6.11q/foobnix.desktop foobnix-2.6.10quantal/foobnix.desktop --- foobnix-2.6.11q/foobnix.desktop 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix.desktop 2013-05-04 14:58:13.000000000 +0000 @@ -1,6 +1,5 @@ [Desktop Entry] Name=Foobnix -Comment=Short description GenericName=Music Player GenericName[ru]=Плеер музыки X-GNOME-FullName=Foobnix Music Player @@ -16,20 +15,3 @@ StartupNotify=true X-Ubuntu-Gettext-Domain=foobnix -Actions=Play;Pause;Next;Previous - -[Desktop Action Play] -Name=Play -Exec=foobnix --play - -[Desktop Action Pause] -Name=Pause -Exec=foobnix --pause - -[Desktop Action Next] -Name=Next -Exec=foobnix --next - -[Desktop Action Previous] -Name=Previous -Exec=foobnix --prev \ No newline at end of file diff -Nru foobnix-2.6.11q/foobnix.py foobnix-2.6.10quantal/foobnix.py --- foobnix-2.6.11q/foobnix.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/foobnix.py 2013-05-04 14:58:13.000000000 +0000 @@ -13,15 +13,6 @@ from foobnix.fc.fc_helper import CONFIG_DIR -def except_hook(exc_t, exc_v, traceback): - print "*** Uncaught exception ***" - print exc_t - print exc_v - print traceback - -sys.excepthook = except_hook - - def foobnix(): if "--debug" in sys.argv: diff -Nru foobnix-2.6.11q/po/.bzr/branch/last-revision foobnix-2.6.10quantal/po/.bzr/branch/last-revision --- foobnix-2.6.11q/po/.bzr/branch/last-revision 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/.bzr/branch/last-revision 2013-05-04 14:58:13.000000000 +0000 @@ -1 +1 @@ -150 launchpad_translations_on_behalf_of_foobnix-team-20130407051704-e263c4twyh56to45 +147 launchpad_translations_on_behalf_of_foobnix-team-20130205044950-jw0now13chikpziy Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/checkout/dirstate and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/checkout/dirstate differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.cix and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.cix differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.iix and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.iix differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.rix and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.rix differ diff -Nru foobnix-2.6.11q/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.six foobnix-2.6.10quantal/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.six --- foobnix-2.6.11q/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.six 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.six 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,5 @@ +B+Tree Graph Index 2 +node_ref_lists=0 +key_elements=1 +len=0 +row_lengths= Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.tix and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/indices/73e83cc5b31f71a28d73e51d3f4b2b12.tix differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.cix and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.cix differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.iix and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.iix differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.rix and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.rix differ diff -Nru foobnix-2.6.11q/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.six foobnix-2.6.10quantal/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.six --- foobnix-2.6.11q/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.six 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.six 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -B+Tree Graph Index 2 -node_ref_lists=0 -key_elements=1 -len=0 -row_lengths= Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.tix and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/indices/e00194a3b8238b7b8a041a20f6efeabf.tix differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/pack-names and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/pack-names differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/packs/73e83cc5b31f71a28d73e51d3f4b2b12.pack and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/packs/73e83cc5b31f71a28d73e51d3f4b2b12.pack differ Binary files /tmp/CkxvWU7fSC/foobnix-2.6.11q/po/.bzr/repository/packs/e00194a3b8238b7b8a041a20f6efeabf.pack and /tmp/qEYn2KotQ5/foobnix-2.6.10quantal/po/.bzr/repository/packs/e00194a3b8238b7b8a041a20f6efeabf.pack differ diff -Nru foobnix-2.6.11q/po/bg.po foobnix-2.6.10quantal/po/bg.po --- foobnix-2.6.11q/po/bg.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/bg.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" "PO-Revision-Date: 2011-10-12 20:53+0000\n" "Last-Translator: Svetoslav Stefanov \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:50+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 #: .././foobnix/regui/menu.py:54 .././foobnix/regui/top.py:44 @@ -44,40 +44,40 @@ msgid "Equalizer" msgstr "Тонкоректор" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Изключен" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Включване на тонкоректора" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Включен" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Изключване на еквалайзера" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Тонкоректор %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Автоматично" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Запазване" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "" @@ -390,11 +390,11 @@ msgstr "" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" +msgid "Save music to folder:" msgstr "" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" +msgid "Automatic music save" msgstr "" #: .././foobnix/preferences/configs/other_conf.py:45 @@ -599,7 +599,7 @@ msgid "About Artist" msgstr "" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "" @@ -703,52 +703,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "" @@ -903,35 +903,35 @@ msgid "Clear Music Tree" msgstr "" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "" -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "" @@ -1383,11 +1383,11 @@ msgid "Unknown artist" msgstr "" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/ca.po foobnix-2.6.10quantal/po/ca.po --- foobnix-2.6.11q/po/ca.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/ca.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" "PO-Revision-Date: 2011-12-18 18:55+0000\n" "Last-Translator: Ramon Cuñat \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:50+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 #: .././foobnix/regui/menu.py:54 .././foobnix/regui/top.py:44 @@ -44,40 +44,40 @@ msgid "Equalizer" msgstr "Equalitzador" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Deshabilitat" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Habilitar EQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Habilitat" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Deshabilitar EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Equalitzador %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Per activar l'EQ marqui ON" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Automàtic" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Desa" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Restaura preferències predeterminades" @@ -390,12 +390,12 @@ msgstr "" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Guarda la música a la carpeta:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Guarda la música automàticament" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -599,7 +599,7 @@ msgid "About Artist" msgstr "" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "" @@ -703,52 +703,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "" @@ -903,35 +903,35 @@ msgid "Clear Music Tree" msgstr "" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "" -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "" @@ -1383,11 +1383,11 @@ msgid "Unknown artist" msgstr "" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/cs.po foobnix-2.6.10quantal/po/cs.po --- foobnix-2.6.11q/po/cs.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/cs.po 2013-05-04 14:58:13.000000000 +0000 @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" -"PO-Revision-Date: 2013-03-25 20:34+0000\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" +"PO-Revision-Date: 2013-01-06 22:04+0000\n" "Last-Translator: fri \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-26 04:48+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-07 05:12+0000\n" +"X-Generator: Launchpad (build 16402)\n" "Language: de\n" "X-Language: cs_CZ\n" "X-Source-Language: C\n" @@ -48,40 +48,40 @@ msgid "Equalizer" msgstr "Ekvalizér" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Zakázáno" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Zapnout ekvalizér" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Zapnuto" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Vypnout ekvalizér" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Ekvalizér %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Pro povolení ekvalizéru zapnout" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Automaticky" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Uložit" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Obnovit výchozí přednastavení" @@ -394,12 +394,12 @@ msgstr "Ukázat ukázkový dialog »Je dostupná nová verze«" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "Uložit internetovou hudbu do složky:" +msgid "Save music to folder:" +msgstr "Uložit hudbu do složky:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "Automatické uložení internetové hudby" +msgid "Automatic music save" +msgstr "Uložit hudbu automaticky" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -603,7 +603,7 @@ msgid "About Artist" msgstr "Informace o umělci" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Informace" @@ -707,52 +707,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate/eng" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr " Přidat složku(y) do stromu" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Hudba" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Pohyb v hudbě (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Rádio" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Radiostanice (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "Úložiště" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "Úložiště (Alt+3)" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Informační panel (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Panel Last.fm (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "Panel VK (Alt+6)" @@ -907,35 +907,35 @@ msgid "Clear Music Tree" msgstr "Vyprázdnit hudební strom" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "Autorizace VKontakte (je vyžadována pro vyhledávání hudby)" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Otevřít" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "2: Použít oprávnění" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "Vytvořte, prosím, oprávnění…" -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "Oprávnění:" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "Uživatelovo ID:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "Oprávnění je nesprávné nebo vypršelo" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "Oprávnění není zadáno nebo uživatel není zadán" @@ -1390,11 +1390,11 @@ msgid "Unknown artist" msgstr "Neznámý umělec" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Vybrat okno" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/de.po foobnix-2.6.10quantal/po/de.po --- foobnix-2.6.11q/po/de.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/de.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" -"PO-Revision-Date: 2013-03-23 22:19+0000\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" +"PO-Revision-Date: 2012-12-31 15:21+0000\n" "Last-Translator: Dmitry-Kogura \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:50+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: de\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 @@ -45,40 +45,40 @@ msgid "Equalizer" msgstr "Equalizer" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Deaktiviert" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "EQ aktivieren" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Aktiviert" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "EQ deaktivieren" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Equalizer %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Zum Aktivieren des EQ einschalten" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Auto" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Speichern" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Standardeinstellungen wiederherstellen" @@ -393,12 +393,12 @@ msgstr "Beispieldialog »Neue Version verfügbar« anzeigen" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Musik speichern in Ordner:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Musik automatisch speichern" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -602,7 +602,7 @@ msgid "About Artist" msgstr "Info zum Künstler" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Info" @@ -706,52 +706,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate/eng" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Musik" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Musiknavigation (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Radio" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Radiosender (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Infobereich (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Last.fm-Bereich (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "VK-Feld (Alt+6)" @@ -907,35 +907,35 @@ msgid "Clear Music Tree" msgstr "Musikordnerbaum leeren" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Öffnen" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "2: Berechtigung anwenden" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "Bitte Berechtigung erzeugen …" -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "Berechtigung:" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "Benutzerkennung:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "Berechtigung ist ungültig oder abgelaufen" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "Berechtigung oder Benutzer nicht angegeben" @@ -1391,11 +1391,11 @@ msgid "Unknown artist" msgstr "Unbekannter Künstler" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Fenster wählen" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/en_GB.po foobnix-2.6.10quantal/po/en_GB.po --- foobnix-2.6.11q/po/en_GB.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/en_GB.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" "PO-Revision-Date: 2011-02-27 20:27+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:51+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: \n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 @@ -45,40 +45,40 @@ msgid "Equalizer" msgstr "" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "" @@ -391,11 +391,11 @@ msgstr "" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" +msgid "Save music to folder:" msgstr "" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" +msgid "Automatic music save" msgstr "" #: .././foobnix/preferences/configs/other_conf.py:45 @@ -600,7 +600,7 @@ msgid "About Artist" msgstr "" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "" @@ -704,52 +704,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "" @@ -904,35 +904,35 @@ msgid "Clear Music Tree" msgstr "" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "" -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "" @@ -1384,11 +1384,11 @@ msgid "Unknown artist" msgstr "" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/es.po foobnix-2.6.10quantal/po/es.po --- foobnix-2.6.11q/po/es.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/es.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: Foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" -"PO-Revision-Date: 2013-04-06 09:21+0000\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" +"PO-Revision-Date: 2012-12-31 15:27+0000\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: SPANISH \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-07 05:17+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" "X-Poedit-Country: SPAIN\n" "Language: \n" "X-Poedit-Language: Spanish\n" @@ -48,40 +48,40 @@ msgid "Equalizer" msgstr "Ecualizador" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Desactivado" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Activar EQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Activado" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Desactivar EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Ecualizador %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Para activar EQ marque ON" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Auto" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Guarda" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Restaurar ajustes predeterminados" @@ -395,12 +395,12 @@ "Muestra demo de ventana de dialogo para nueva versión de foobnix disponible" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Guardar música en la carpeta:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Guardar música automaticamente" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -604,7 +604,7 @@ msgid "About Artist" msgstr "Acerca del artista" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Info" @@ -708,52 +708,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate/eng" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Música" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Explorar Música (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Radio" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Emisoras de Radio (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "Almacenamiento" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "Almacenamiento (Alt+3)" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Panel Info (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.Fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Panel Last.fm (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "Panel VK (Alt+6)" @@ -908,35 +908,35 @@ msgid "Clear Music Tree" msgstr "Limpiar Árbol de Música" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" -msgstr "Autorización de VKontakte (necesaria para buscar música)" +msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Abrir" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "2: Aplicar token" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "Por favor, generar token..." -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "Token:" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "ID del usuario:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "Token incorrecto o ha expirado" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "Token o usuario está vacío" @@ -1390,11 +1390,11 @@ msgid "Unknown artist" msgstr "Artista desconocido" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Seleccionar ventana" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/et.po foobnix-2.6.10quantal/po/et.po --- foobnix-2.6.11q/po/et.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/et.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" "PO-Revision-Date: 2012-07-23 13:13+0000\n" "Last-Translator: spil \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:50+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 #: .././foobnix/regui/menu.py:54 .././foobnix/regui/top.py:44 @@ -44,40 +44,40 @@ msgid "Equalizer" msgstr "Ekvalaiser" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Keelatud" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Luba EQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Lubatud" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Keela EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Ekvalaiser %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Auto" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Salvesta" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Taasta algseis" @@ -390,11 +390,11 @@ msgstr "" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Salvesta muusika kausta:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" +msgid "Automatic music save" msgstr "" #: .././foobnix/preferences/configs/other_conf.py:45 @@ -599,7 +599,7 @@ msgid "About Artist" msgstr "Esitajast" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Info" @@ -703,52 +703,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Muusika" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Muusika sirvimine (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Raadio" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Raadiojaamad (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Infopaneel (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.Fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Last.fm paneel (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "VK paneel (Alt+6)" @@ -903,35 +903,35 @@ msgid "Clear Music Tree" msgstr "" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Ava" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "" -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "Kasutaja ID:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "" @@ -1386,11 +1386,11 @@ msgid "Unknown artist" msgstr "Tundmatu esitaja" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Vali aken" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/fr.po foobnix-2.6.10quantal/po/fr.po --- foobnix-2.6.11q/po/fr.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/fr.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" "PO-Revision-Date: 2013-01-26 13:06+0000\n" "Last-Translator: Hélion du Mas des Bourboux \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:50+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-27 04:41+0000\n" +"X-Generator: Launchpad (build 16451)\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 #: .././foobnix/regui/menu.py:54 .././foobnix/regui/top.py:44 @@ -44,40 +44,40 @@ msgid "Equalizer" msgstr "Équaliseur" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Désactivé" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Activer EQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Activé" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Désactiver EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Équaliseur %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Activer/Désactiver EQ" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Automatique" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Sauvegarder" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Restaurer les paramètres par défaut" @@ -392,12 +392,12 @@ msgstr "Afficher la fenêtre de disponibilité de nouvelle version de Foobnix" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Sauvegarder la musique dans le répertoire:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Sauvegarde automatique de la musique" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -601,7 +601,7 @@ msgid "About Artist" msgstr "A propos de l'artiste" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Informations" @@ -705,52 +705,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/support" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr " Ajouter un(des) dossier(s) à l'arborescence" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Musique" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Panneau de musique (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Radio" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Panneau des stations de radios (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "Stockage" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "Stockage (alt+3)" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Panneau d'informations (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Panneau d'intégration Last.fm (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "Panneau d'intégration VKontakte (Alt+6)" @@ -905,35 +905,35 @@ msgid "Clear Music Tree" msgstr "Effacer l'arborescence Musique" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Ouvrir" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "2: Appliquer le token" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "Géréner le token, s'il vous plaît..." -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "Token:" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "Identifiant de l'utilisateur :" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "Token incorrect ou expiré" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "Token ou utilisateur est vide" @@ -1388,11 +1388,11 @@ msgid "Unknown artist" msgstr "Artiste inconnu" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Choisissez la fenêtre" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/it.po foobnix-2.6.10quantal/po/it.po --- foobnix-2.6.11q/po/it.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/it.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: Foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" -"PO-Revision-Date: 2013-03-23 22:19+0000\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" +"PO-Revision-Date: 2012-12-31 15:26+0000\n" "Last-Translator: Dmitry-Kogura \n" "Language-Team: ITALIAN \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:50+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" "X-Poedit-Country: ITALY\n" "Language: \n" "X-Poedit-Language: Italian\n" @@ -48,40 +48,40 @@ msgid "Equalizer" msgstr "Equalizzatore" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Disabilitato" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Abilita EQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Abilitato" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Disabilita EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Equalizzatore %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Per abilitare EQ spunta ON" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Automatico" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Salva" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Ripristina impostazioni predefinite" @@ -394,12 +394,12 @@ msgstr "Prova finestra notifiche per nuova versione di foobnix disponibile" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Salva musica nella cartella:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Salva musica automaticamente" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -603,7 +603,7 @@ msgid "About Artist" msgstr "Info Artista" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Info" @@ -707,52 +707,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate/eng" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Musica" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Navigazione Musica (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Radio" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Radio Stantions (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Info Panel (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.Fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Pannello Last.fm (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "Panello VK (Alt+6)" @@ -907,35 +907,35 @@ msgid "Clear Music Tree" msgstr "Pulisci albero musica" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Aperto" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "2: Applica Token" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "Per favore generare token..." -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "Token:" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "User ID:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "Token non corretto o scaduto" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "Token o utente è vuoto" @@ -1391,11 +1391,11 @@ msgid "Unknown artist" msgstr "Artista sconosciuto" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Seleziona finestra" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/pl.po foobnix-2.6.10quantal/po/pl.po --- foobnix-2.6.11q/po/pl.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/pl.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" -"PO-Revision-Date: 2013-03-23 22:19+0000\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" +"PO-Revision-Date: 2012-12-31 15:24+0000\n" "Last-Translator: Dmitry-Kogura \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:51+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: pl\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 @@ -45,40 +45,40 @@ msgid "Equalizer" msgstr "Korektor dźwięku" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Wyłączony" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Włączony korektor" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Włączony" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Wyłączony korektor" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Korektor dźwięku %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Aby włączyć korektor kliknij wł." -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Automatycznie" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Zapisz" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Przywróć domyślne ustawienia" @@ -391,12 +391,12 @@ msgstr "Pokaż okno z nowym wydaniem foobnix" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Zapisz muzykę do folderu:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Automatycznie zapisuj muzykę" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -600,7 +600,7 @@ msgid "About Artist" msgstr "O wykonawcy" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Informacje" @@ -704,52 +704,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate/eng" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr " Dodaj folder(y) do drzewa" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Muzyka" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Nawigacja w muzyce (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Radio" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Stacja radiowe (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Panel informacyjny (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Last.fm panel (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "VK Panel (Alt+6)" @@ -904,35 +904,35 @@ msgid "Clear Music Tree" msgstr "Wyczyść listę muzyki" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "Autoryzacja Vk.com (potrzebna do wyszukiwania muzyki)" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Otwórz" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "2: Zatwierdź znak" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "Proszę wygenerować znak..." -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "Znak:" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "ID użytkownika:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "Znak jest nieprawidłowy lub przedawniony" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "Znak lub użytkownik jest pusty" @@ -1386,11 +1386,11 @@ msgid "Unknown artist" msgstr "Nieznany artysta" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Wybierz okno" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/pt.po foobnix-2.6.10quantal/po/pt.po --- foobnix-2.6.11q/po/pt.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/pt.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" -"PO-Revision-Date: 2013-03-23 22:20+0000\n" -"Last-Translator: Dmitry-Kogura \n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" +"PO-Revision-Date: 2013-01-06 21:53+0000\n" +"Last-Translator: Sérgio Marques \n" "Language-Team: Portuguese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:51+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-07 05:12+0000\n" +"X-Generator: Launchpad (build 16402)\n" "Language: Portuguese\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 @@ -45,40 +45,40 @@ msgid "Equalizer" msgstr "Equalizador" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Inativo" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Ativar EQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Ativo" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Desativar EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Equalizador %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Prima o botão para ativar o equalizador" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Automático" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Gravar" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Restaurar predefinições" @@ -391,12 +391,12 @@ msgstr "Mostrar janela de disponibilização de uma nova versão" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Gravar músicas na pasta:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Gravar automaticamente" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -600,7 +600,7 @@ msgid "About Artist" msgstr "Sobre o artista" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Informações" @@ -704,52 +704,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate/eng" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr " Adicionar pastas em árvore" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Música" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Navegação nas músicas (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Rádio" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Estações de rádio (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "Armazenamento" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "Armazenamento (Alt+3)" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Painel de informações (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.Fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Painel Last.fm (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "Painel VK (Alt+6)" @@ -904,35 +904,35 @@ msgid "Clear Music Tree" msgstr "Limpar coleção de faixas" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "Autorização VKontakte (para a procura de músicas)" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Abrir" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "2: Aplicar \"token\"" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "Gerar \"token\"..." -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "\"Token\":" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "ID de utilizador:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "\"Token\" inválido ou expirado" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "Sem \"token\" ou utilizador" @@ -1386,11 +1386,11 @@ msgid "Unknown artist" msgstr "Artista desconhecido" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Escolha a janela" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/pt_BR.po foobnix-2.6.10quantal/po/pt_BR.po --- foobnix-2.6.11q/po/pt_BR.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/pt_BR.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" "PO-Revision-Date: 2012-09-20 19:17+0000\n" "Last-Translator: Felipe G. Wozniak \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:51+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 #: .././foobnix/regui/menu.py:54 .././foobnix/regui/top.py:44 @@ -44,40 +44,40 @@ msgid "Equalizer" msgstr "Equalizador" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Desabilitado" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Ativar EQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Habilitado" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Desabilitar EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Equalizador %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Auto" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Salvar" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Restaurar definições padrão" @@ -390,11 +390,11 @@ msgstr "" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Salvar música na pasta:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" +msgid "Automatic music save" msgstr "" #: .././foobnix/preferences/configs/other_conf.py:45 @@ -599,7 +599,7 @@ msgid "About Artist" msgstr "Sobre o Artista" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Informações" @@ -703,52 +703,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate/eng" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Música" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Rádio" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Estações de Rádio (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Painel de informações (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.Fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Painel da Last.fm (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "Panel do VK (Alt+6)" @@ -903,35 +903,35 @@ msgid "Clear Music Tree" msgstr "" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Abrir" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "" -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "ID do usuário:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "" @@ -1385,11 +1385,11 @@ msgid "Unknown artist" msgstr "Artista desconhecido" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/ru.po foobnix-2.6.10quantal/po/ru.po --- foobnix-2.6.11q/po/ru.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/ru.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: Foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" -"PO-Revision-Date: 2013-03-23 22:19+0000\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" +"PO-Revision-Date: 2013-01-09 18:37+0000\n" "Last-Translator: Dmitry-Kogura \n" "Language-Team: Ivan Ivanenko \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:51+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-10 04:54+0000\n" +"X-Generator: Launchpad (build 16412)\n" "Language: \n" "X-Poedit-Language: Russian\n" "X-Poedit-SourceCharset: utf-8\n" @@ -47,40 +47,40 @@ msgid "Equalizer" msgstr "Эквалайзер" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Отключено" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Включить EQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Включено" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Отключить EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Эквалайзер %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Для включения эквалайзера" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Авто" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Сохранить" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Восстановить настройки по умолчанию" @@ -395,12 +395,12 @@ msgstr "Показать диалог наличия новой версии" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Сохранить музыку в папку" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Автоматическое сохранение музыки" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -604,7 +604,7 @@ msgid "About Artist" msgstr "Сведения о исполнителе" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Сведения" @@ -708,52 +708,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr " Добавить папку(и) в дерево" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Музыка" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Дерево музыки (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Радио" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Радиостанции (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "Архив" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "Архив (Alt+3)" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Информационная панель (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.Fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Last.fm панель (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "ВКонтакте" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "VK панель (Alt+6)" @@ -908,35 +908,35 @@ msgid "Clear Music Tree" msgstr "Очистить список" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "Авторизация Вконтакте" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Открыть" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "Применить код" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "Пожалуйста, сгенерируйте токен..." -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "Токен:" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "Идентификатор пользователя:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "Недопустимый токен или срок действия истёк" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "Токен или логин пустой" @@ -1391,11 +1391,11 @@ msgid "Unknown artist" msgstr "Неизвестный исполнитель" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Окно выбора" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/tr.po foobnix-2.6.10quantal/po/tr.po --- foobnix-2.6.11q/po/tr.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/tr.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" "PO-Revision-Date: 2013-02-04 11:24+0000\n" "Last-Translator: Irmak Bıçakçıgil \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:51+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-02-05 04:49+0000\n" +"X-Generator: Launchpad (build 16468)\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 #: .././foobnix/regui/menu.py:54 .././foobnix/regui/top.py:44 @@ -44,40 +44,40 @@ msgid "Equalizer" msgstr "Ekolayzer" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Devre dışı" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "EQ etkinleştir" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Etkinleştirildi" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Ekolayzeri kapat" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Ekolayzer %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Ekolayzeri açmak için tıklayın" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Otomatik" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Kaydet" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Varsayılan ön ayarları geri yükle" @@ -391,12 +391,12 @@ msgstr "Kullanılabilir yeni foobnix sürümünü iletişim kutusunda göster" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Müziği bu klasöre kaydet:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Otomatik müzik kaydet" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -600,7 +600,7 @@ msgid "About Artist" msgstr "Sanatçı Hakkında" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Bilgi" @@ -704,52 +704,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate/eng" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Müzik" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Müzik Navigasyon (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Radyo" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Radyo İstasyonları (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "Depolama" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "Depolama (Alt+3)" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Bilgi Paneli (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.Fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Last.fm Paneli (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "VK Paneli (Alt+6)" @@ -904,35 +904,35 @@ msgid "Clear Music Tree" msgstr "Ağaç Görünümünü Temizle" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Aç" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "2: Simgeyi Uygula" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "Lütfen simge oluşturun..." -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "Simge:" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "Kullanıcı Kimliği:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "Simge yanlış ya da süresi dolmuş" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "Simge ya da kullanıcı boş" @@ -1387,11 +1387,11 @@ msgid "Unknown artist" msgstr "Bilinmeyen sanatçı" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Pencere seç" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/uk.po foobnix-2.6.10quantal/po/uk.po --- foobnix-2.6.11q/po/uk.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/uk.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" -"PO-Revision-Date: 2013-03-23 22:18+0000\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" +"PO-Revision-Date: 2012-12-31 15:26+0000\n" "Last-Translator: Dmitry-Kogura \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:51+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: uk\n" #: .././foobnix/dm/dm.py:32 .././foobnix/preferences/preferences_window.py:59 @@ -45,40 +45,40 @@ msgid "Equalizer" msgstr "Еквалайзер" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "Вимк." -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "Увімк. ЕQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "Увімк." -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "Відключити EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "Еквалайзер %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "Щоб увімк. EQ натисніть ON" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "Авто" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "Зберегти" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "Відновити установки за замовчуванням" @@ -391,12 +391,12 @@ msgstr "Показувати діалог наявності нової версії" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "Зберігати музику до:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "Автозбереження музики" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -600,7 +600,7 @@ msgid "About Artist" msgstr "Про виконавця" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "Інфо" @@ -704,52 +704,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr "" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "Музика" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "Дерево музики (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "Радіо" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "Радіостанції (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "Інформаційна панель (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.Fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Last.fm панель (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "Панель VK (Alt+6)" @@ -904,35 +904,35 @@ msgid "Clear Music Tree" msgstr "Очистити дерево музики" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "Відкрити" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "" -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "ID користувача:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "" @@ -1387,11 +1387,11 @@ msgid "Unknown artist" msgstr "Невідомий виконавець" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "Оберіть вікно" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/po/zh_CN.po foobnix-2.6.10quantal/po/zh_CN.po --- foobnix-2.6.11q/po/zh_CN.po 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/po/zh_CN.po 2013-05-04 14:58:13.000000000 +0000 @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: foobnix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-23 19:36+0400\n" -"PO-Revision-Date: 2013-03-23 22:18+0000\n" +"POT-Creation-Date: 2012-12-31 11:36+0400\n" +"PO-Revision-Date: 2012-12-31 15:26+0000\n" "Last-Translator: XsLiDian \n" "Language-Team: Chinese Simplified \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-24 04:51+0000\n" -"X-Generator: Launchpad (build 16540)\n" +"X-Launchpad-Export-Date: 2013-01-01 04:51+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: \n" "X-Poedit-Language: Chinese\n" @@ -46,40 +46,40 @@ msgid "Equalizer" msgstr "均衡器" -#: .././foobnix/eq/eq_gui.py:85 +#: .././foobnix/eq/eq_gui.py:83 msgid "Disabled" msgstr "已禁用" -#: .././foobnix/eq/eq_gui.py:86 .././foobnix/eq/eq_gui.py:167 +#: .././foobnix/eq/eq_gui.py:84 .././foobnix/eq/eq_gui.py:166 msgid "Enable EQ" msgstr "启用 EQ" -#: .././foobnix/eq/eq_gui.py:88 +#: .././foobnix/eq/eq_gui.py:86 msgid "Enabled" msgstr "已启用" -#: .././foobnix/eq/eq_gui.py:89 .././foobnix/eq/eq_gui.py:280 +#: .././foobnix/eq/eq_gui.py:87 .././foobnix/eq/eq_gui.py:279 msgid "Disable EQ" msgstr "禁用 EQ" -#: .././foobnix/eq/eq_gui.py:90 +#: .././foobnix/eq/eq_gui.py:88 #, python-format msgid "Equalizer %s" msgstr "均衡器 %s" -#: .././foobnix/eq/eq_gui.py:168 +#: .././foobnix/eq/eq_gui.py:167 msgid "To enable EQ set ON" msgstr "启用 EQ 设置" -#: .././foobnix/eq/eq_gui.py:173 +#: .././foobnix/eq/eq_gui.py:172 msgid "Auto" msgstr "自动" -#: .././foobnix/eq/eq_gui.py:185 +#: .././foobnix/eq/eq_gui.py:184 msgid "Save" msgstr "保存" -#: .././foobnix/eq/eq_gui.py:192 +#: .././foobnix/eq/eq_gui.py:191 msgid "Restore defaults presets" msgstr "恢复默认设置" @@ -392,12 +392,12 @@ msgstr "显示“foobnix 有新版可用”演示对话框" #: .././foobnix/preferences/configs/other_conf.py:36 -msgid "Save online music to folder:" -msgstr "" +msgid "Save music to folder:" +msgstr "将音乐保存到文件夹:" #: .././foobnix/preferences/configs/other_conf.py:40 -msgid "Automatic online music save" -msgstr "" +msgid "Automatic music save" +msgstr "自动保存音乐" #: .././foobnix/preferences/configs/other_conf.py:45 msgid "Download in threads" @@ -601,7 +601,7 @@ msgid "About Artist" msgstr "关于歌手" -#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/infopanel.py:80 .././foobnix/regui/perspectives.py:134 msgid "Info" msgstr "信息" @@ -705,52 +705,52 @@ msgid "http://www.foobnix.com/donate/eng" msgstr "http://www.foobnix.com/donate/eng" -#: .././foobnix/regui/perspectives.py:43 +#: .././foobnix/regui/perspectives.py:44 msgid " Add Folder(s) in tree" msgstr " 树形添加文件夹" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music" msgstr "音乐" -#: .././foobnix/regui/perspectives.py:120 +#: .././foobnix/regui/perspectives.py:121 msgid "Music Navigation (Alt+1)" msgstr "音乐导航 (Alt+1)" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio" msgstr "广播" -#: .././foobnix/regui/perspectives.py:125 +#: .././foobnix/regui/perspectives.py:126 msgid "Radio Stantions (Alt+2)" msgstr "广播电台 (Alt+2)" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 #: .././foobnix/regui/treeview/virtual_tree.py:25 msgid "Storage" msgstr "" -#: .././foobnix/regui/perspectives.py:129 +#: .././foobnix/regui/perspectives.py:130 msgid "Storage (Alt+3)" msgstr "" -#: .././foobnix/regui/perspectives.py:133 +#: .././foobnix/regui/perspectives.py:134 msgid "Info Panel (Alt+4)" msgstr "信息面板 (Alt+4)" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.Fm" msgstr "Last.Fm" -#: .././foobnix/regui/perspectives.py:136 +#: .././foobnix/regui/perspectives.py:137 msgid "Last.fm Panel (Alt+5)" msgstr "Last.fm 面板 (Alt+5)" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK" msgstr "VK" -#: .././foobnix/regui/perspectives.py:139 +#: .././foobnix/regui/perspectives.py:140 msgid "VK Panel (Alt+6)" msgstr "VK 面板 (Alt+6)" @@ -905,35 +905,35 @@ msgid "Clear Music Tree" msgstr "清空音乐树" -#: .././foobnix/regui/service/vk_service.py:42 +#: .././foobnix/regui/service/vk_service.py:41 msgid "VKontakte Authorization (is required for music search)" msgstr "VKontakte 授权 (搜索音乐必需)" -#: .././foobnix/regui/service/vk_service.py:101 +#: .././foobnix/regui/service/vk_service.py:100 msgid "Open" msgstr "打开" -#: .././foobnix/regui/service/vk_service.py:107 +#: .././foobnix/regui/service/vk_service.py:106 msgid "2: Apply Token" msgstr "2: 应用令牌" -#: .././foobnix/regui/service/vk_service.py:110 +#: .././foobnix/regui/service/vk_service.py:109 msgid "Please generate token..." msgstr "请生成令牌..." -#: .././foobnix/regui/service/vk_service.py:115 +#: .././foobnix/regui/service/vk_service.py:114 msgid "Token:" msgstr "令牌:" -#: .././foobnix/regui/service/vk_service.py:116 +#: .././foobnix/regui/service/vk_service.py:115 msgid "User ID:" msgstr "用户 ID:" -#: .././foobnix/regui/service/vk_service.py:151 +#: .././foobnix/regui/service/vk_service.py:150 msgid "Token incorrect or expired" msgstr "令牌不正确或已过期" -#: .././foobnix/regui/service/vk_service.py:153 +#: .././foobnix/regui/service/vk_service.py:152 msgid "Token or user is empty" msgstr "令牌或用户为空" @@ -1387,11 +1387,11 @@ msgid "Unknown artist" msgstr "未知歌手" -#: .././foobnix/util/m3u_utils.py:85 +#: .././foobnix/util/m3u_utils.py:84 msgid "Choose window" msgstr "选择窗口" -#: .././foobnix/util/m3u_utils.py:89 +#: .././foobnix/util/m3u_utils.py:88 msgid "" "\t\t\t\t\t\t\t\tAttention!\n" "\tThe relative location of the playlist and music files allows you " diff -Nru foobnix-2.6.11q/scripts/build_deb.sh foobnix-2.6.10quantal/scripts/build_deb.sh --- foobnix-2.6.11q/scripts/build_deb.sh 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/scripts/build_deb.sh 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,6 @@ +#!/bin/bash + +#debuild -us -uc +debuild -S -sd -kD2628E50 +#dh_make -c gpl -s -b -p foobnix-0.2.2-3 +dput ppa:foobnix-player/foobnix foobnix_0.2.2-3_source.changes diff -Nru foobnix-2.6.11q/scripts/debian/control foobnix-2.6.10quantal/scripts/debian/control --- foobnix-2.6.11q/scripts/debian/control 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/scripts/debian/control 2013-05-04 14:58:13.000000000 +0000 @@ -9,8 +9,8 @@ Package: foobnix Architecture: any -Depends: ${python:Depends},${misc:Depends}, python-chardet, python-gtk2, python-simplejson, gstreamer0.10-plugins-good, python-gst0.10, gettext -Recommends: gstreamer0.10-plugins-bad, gstreamer0.10-alsa, python-setuptools, fuseiso, python-notify, libmp3lame0, libfaac0, gstreamer0.10-plugins-ugly, python-webkit, python-keybinder, gstreamer0.10-ffmpeg, ffmpeg +Depends: ${python:Depends},${misc:Depends}, python-chardet, python-gtk2, python-simplejson, gstreamer0.10-plugins-good, python-gst0.10, gettext, ffmpeg, python-webkit, python-keybinder +Recommends: gstreamer0.10-plugins-bad, gstreamer0.10-alsa, python-setuptools, fuseiso, python-notify, libmp3lame0, libfaac0, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg Description: Simple and Powerful music player for Linux All best features in one player. Foobnix small, fast, customizable, powerful music player with user-friendly interface. diff -Nru foobnix-2.6.11q/scripts/debian/rules_ubuntu foobnix-2.6.10quantal/scripts/debian/rules_ubuntu --- foobnix-2.6.11q/scripts/debian/rules_ubuntu 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/scripts/debian/rules_ubuntu 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -#!/usr/bin/make -f - -%: - dh $@ - -override_dh_auto_build: - dh_auto_build -- all - -override_dh_auto_install: - dh_auto_install -- PREFIX=/opt/extras.ubuntu.com/foobnix - -override_dh_auto_clean: - dh_auto_clean -- PREFIX=/opt/extras.ubuntu.com/foobnix - $(MAKE) clean - -override_dh_installchangelogs: - dh_installchangelogs CHANGELOG diff -Nru foobnix-2.6.11q/scripts/launchpad_upload.sh foobnix-2.6.10quantal/scripts/launchpad_upload.sh --- foobnix-2.6.11q/scripts/launchpad_upload.sh 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/scripts/launchpad_upload.sh 2013-05-04 14:58:13.000000000 +0000 @@ -27,11 +27,11 @@ cd ../build -LIST=("oneiric" "natty" "maverick" "precise" "quantal" "raring") +LIST=("oneiric" "natty" "precise" "quantal" "raring") for UBUNTU in ${LIST[@]} do - V_RELEASE=${RELEASE}${UBUNTU:0:1} + V_RELEASE=${RELEASE}${UBUNTU} echo "Deleting content of the folder", $UBUNTU pwd rm -rf foobnix_*_* @@ -39,7 +39,7 @@ rm -rf foobnix*.tar.gz rm -rf foobnix_$FOOBNIX_VERSION/debian/changelog cd foobnix_$FOOBNIX_VERSION/debian/ - python ../../../src/scripts/changelog_gen.py ${FOOBNIX_VERSION}${UBUNTU:0:1} $UBUNTU + python ../../../src/scripts/changelog_gen.py ${FOOBNIX_VERSION}${UBUNTU} $UBUNTU cd ../ #dch -e @@ -53,7 +53,7 @@ cd ../ #dput ppa:foobnix-player/foobnix foobnix_${FOOBNIX_VERSION}${UBUNTU:0:1}_source.changes - dput ppa:foobnix-team/foobnix-player foobnix_${FOOBNIX_VERSION}${UBUNTU:0:1}_source.changes + dput -f ppa:foobnix-team/foobnix-player foobnix_${FOOBNIX_VERSION}${UBUNTU}_source.changes #read text done diff -Nru foobnix-2.6.11q/scripts/launchpad_upload_ubuntu.sh foobnix-2.6.10quantal/scripts/launchpad_upload_ubuntu.sh --- foobnix-2.6.11q/scripts/launchpad_upload_ubuntu.sh 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/scripts/launchpad_upload_ubuntu.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -#!/bin/bash -#debuild -us -uc -#debuild -S -sd -kD2628E50 -#dh_make -c gpl -s -b -p foobnix-0.2.2-3 -#dput ppa:foobnix-player/foobnix foobnix_0.2.2-3_source.changes - -pwd -rm -rf ../../build/*.* -mkdir ../../build -cd ../ - -python setup.py build -#python setup.py test - -echo -n "Tests finished > " -read text - -pwd -source foobnix/version.py -echo $FOOBNIX_VERSION - -echo "Create folder" ../build/foobnix_$FOOBNIX_VERSION -cp -r . ../build/foobnix_$FOOBNIX_VERSION - -export DEBFULLNAME="Ivan Ivanenko" -export DEBEMAIL="ivan.ivanenko@gmail.com" - -#export DEBFULLNAME="Dmitry Kogura" -#export DEBEMAIL="zavlab1@gmail.com" - -cp -r scripts/debian ../build/foobnix_$FOOBNIX_VERSION/debian - -cd ../build - -#LIST=("oneiric" "natty" "maverick" "precise" "quantal") -LIST=("quantal") - -for UBUNTU in ${LIST[@]} -do - V_RELEASE=${RELEASE}${UBUNTU:0:1} - echo "Deleting content of the folder", $UBUNTU - pwd - rm -rf foobnix_*_* - rm -rf foobnix*.dsc - rm -rf foobnix*.tar.gz - rm -rf foobnix_$FOOBNIX_VERSION/debian/changelog - cd foobnix_$FOOBNIX_VERSION/debian/ - python ../../../src/scripts/changelog_gen.py ${FOOBNIX_VERSION}${UBUNTU:0:1} $UBUNTU - cd ../ - - #dch -e - - #debuild -S -sd -kB8C27E00 # Ivan Ivanenko - old - debuild -S -sd -k316EC1F3 # Ivan Ivanenko - #debuild -S -sd -k707844CC # Dmitry Kogura - - - #debuild -us -uc - - cd ../ - #dput ppa:foobnix-player/foobnix foobnix_${FOOBNIX_VERSION}${UBUNTU:0:1}_source.changes - #dput ppa:foobnix-team/foobnix-player foobnix_${FOOBNIX_VERSION}${UBUNTU:0:1}_source.changes - dput ppa:foobnix-team/foobnix-ubuntu foobnix_${FOOBNIX_VERSION}${UBUNTU:0:1}_source.changes - #read text -done - -rm -rf foobnix_* -rm -rf foobnix*.dsc -rm -rf foobnix*.tar.gz -rm -rf foobnix_$FOOBNIX_VERSION/debian/changelog diff -Nru foobnix-2.6.11q/scripts/to-upload-current.sh foobnix-2.6.10quantal/scripts/to-upload-current.sh --- foobnix-2.6.11q/scripts/to-upload-current.sh 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/scripts/to-upload-current.sh 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,29 @@ +#!/bin/bash +source /home/ivan/password +cd ../ +pwd +LANG=en +#REV=$(svnversion 2>/dev/null) +REV='today' +echo "REVISION" +echo $REV +svn info > svn_info.txt +date >> svn_info.txt + + +rm -rf ../deb/*.* + +cp -r . ../foobnix_$REV +tar cvzf ../deb/foobnix_$REV.tar.gz ../foobnix_$REV --exclude=.svn --exclude=*.pyc +rm -rf ../foobnix_$REV + + +#python scripts/upload.py --summary=foobnix_$REV.tar.gz --project=foobnix --user=ivan.ivanenko@gmail.com --password=$PASSWORD ../deb/foobnix_$REV.tar.gz +#rm -rf ../deb/foobnix_$REV.tar.gz + +rm svn_info.txt + +cd ../deb +svn commit ../deb/foobnix_$REV.tar.gz -m "today build" + + diff -Nru foobnix-2.6.11q/scripts/to-upload.sh foobnix-2.6.10quantal/scripts/to-upload.sh --- foobnix-2.6.11q/scripts/to-upload.sh 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/scripts/to-upload.sh 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,27 @@ +#!/bin/bash +pwd +source ../version +source /home/ivan/password + + +FILE_PATH=../../deb/ + +FILE_TAR_GZ=foobnix_$VERSION-$RELEASE.tar.gz +FILE_DEB_32=foobnix_$VERSION-${RELEASE}_i386.deb +FILE_DEB_64=foobnix_$VERSION-${RELEASE}_amd64.deb + +LIST=($FILE_TAR_GZ $FILE_DEB_32 $FILE_DEB_64) + +#wget http://www.foobnix.com/set_version?version=$VERSION-${RELEASE} -O /tmp/out.txt + + +for FILE_NAME in ${LIST[@]} +do + if [ -f ${FILE_PATH}${FILE_NAME} ] + then + echo file exists ${FILE_PATH}${FILE_NAME} + echo ./upload.py --summary=${FILE_NAME} --project=foobnix --user=ivan.ivanenko@gmail.com --password=$PASSWORD --labels=Featured ${FILE_PATH}${FILE_NAME} + ./upload.py --summary=${FILE_NAME} --project=foobnix --user=ivan.ivanenko@gmail.com --password=$PASSWORD --labels=Featured ${FILE_PATH}${FILE_NAME} + fi +done + diff -Nru foobnix-2.6.11q/scripts/upload.py foobnix-2.6.10quantal/scripts/upload.py --- foobnix-2.6.11q/scripts/upload.py 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/scripts/upload.py 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,248 @@ +#!/usr/bin/env python +# +# Copyright 2006, 2007 Google Inc. All Rights Reserved. +# Author: danderson@google.com (David Anderson) +# +# Script for uploading files to a Google Code project. +# +# This is intended to be both a useful script for people who want to +# streamline project uploads and a reference implementation for +# uploading files to Google Code projects. +# +# To upload a file to Google Code, you need to provide a path to the +# file on your local machine, a small summary of what the file is, a +# project name, and a valid account that is a member or owner of that +# project. You can optionally provide a list of labels that apply to +# the file. The file will be uploaded under the same name that it has +# in your local filesystem (that is, the "basename" or last path +# component). Run the script with '--help' to get the exact syntax +# and available options. +# +# Note that the upload script requests that you enter your +# googlecode.com password. This is NOT your Gmail account password! +# This is the password you use on googlecode.com for committing to +# Subversion and uploading files. You can find your password by going +# to http://code.google.com/hosting/settings when logged in with your +# Gmail account. If you have already committed to your project's +# Subversion repository, the script will automatically retrieve your +# credentials from there (unless disabled, see the output of '--help' +# for details). +# +# If you are looking at this script as a reference for implementing +# your own Google Code file uploader, then you should take a look at +# the upload() function, which is the meat of the uploader. You +# basically need to build a multipart/form-data POST request with the +# right fields and send it to https://PROJECT.googlecode.com/files . +# Authenticate the request using HTTP Basic authentication, as is +# shown below. +# +# Licensed under the terms of the Apache Software License 2.0: +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Questions, comments, feature requests and patches are most welcome. +# Please direct all of these to the Google Code users group: +# http://groups.google.com/group/google-code-hosting + +"""Google Code file uploader script. +""" + +__author__ = 'danderson@google.com (David Anderson)' + +import httplib +import os.path +import optparse +import getpass +import base64 +import sys + + +def upload(file, project_name, user_name, password, summary, labels=None): + """Upload a file to a Google Code project's file server. + + Args: + file: The local path to the file. + project_name: The name of your project on Google Code. + user_name: Your Google account name. + password: The googlecode.com password for your account. + Note that this is NOT your global Google Account password! + summary: A small description for the file. + labels: an optional list of label strings with which to tag the file. + + Returns: a tuple: + http_status: 201 if the upload succeeded, something else if an + error occured. + http_reason: The human-readable string associated with http_status + file_url: If the upload succeeded, the URL of the file on Google + Code, None otherwise. + """ + # The login is the user part of user@gmail.com. If the login provided + # is in the full user@domain form, strip it down. + if user_name.endswith('@gmail.com'): + user_name = user_name[:user_name.index('@gmail.com')] + + form_fields = [('summary', summary)] + if labels is not None: + form_fields.extend([('label', l.strip()) for l in labels]) + + content_type, body = encode_upload_request(form_fields, file) + + upload_host = '%s.googlecode.com' % project_name + upload_uri = '/files' + auth_token = base64.b64encode('%s:%s' % (user_name, password)) + headers = { + 'Authorization': 'Basic %s' % auth_token, + 'User-Agent': 'Googlecode.com uploader v0.9.4', + 'Content-Type': content_type, + } + + server = httplib.HTTPSConnection(upload_host) + server.request('POST', upload_uri, body, headers) + resp = server.getresponse() + server.close() + + if resp.status == 201: + location = resp.getheader('Location', None) + else: + location = None + return resp.status, resp.reason, location + + +def encode_upload_request(fields, file_path): + """Encode the given fields and file into a multipart form body. + + fields is a sequence of (name, value) pairs. file is the path of + the file to upload. The file will be uploaded to Google Code with + the same file name. + + Returns: (content_type, body) ready for httplib.HTTP instance + """ + BOUNDARY = '----------Googlecode_boundary_reindeer_flotilla' + CRLF = '\r\n' + + body = [] + + # Add the metadata about the upload first + for key, value in fields: + body.extend( + ['--' + BOUNDARY, + 'Content-Disposition: form-data; name="%s"' % key, + '', + value, + ]) + + # Now add the file itself + file_name = os.path.basename(file_path) + f = open(file_path, 'rb') + file_content = f.read() + f.close() + + body.extend( + ['--' + BOUNDARY, + 'Content-Disposition: form-data; name="filename"; filename="%s"' + % file_name, + # The upload server determines the mime-type, no need to set it. + 'Content-Type: application/octet-stream', + '', + file_content, + ]) + + # Finalize the form body + body.extend(['--' + BOUNDARY + '--', '']) + + return 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body) + + +def upload_find_auth(file_path, project_name, summary, labels=None, + user_name=None, password=None, tries=3): + """Find credentials and upload a file to a Google Code project's file server. + + file_path, project_name, summary, and labels are passed as-is to upload. + + Args: + file_path: The local path to the file. + project_name: The name of your project on Google Code. + summary: A small description for the file. + labels: an optional list of label strings with which to tag the file. + config_dir: Path to Subversion configuration directory, 'none', or None. + user_name: Your Google account name. + tries: How many attempts to make. + """ + + while tries > 0: + if user_name is None: + # Read username if not specified or loaded from svn config, or on + # subsequent tries. + sys.stdout.write('Please enter your googlecode.com username: ') + sys.stdout.flush() + user_name = sys.stdin.readline().rstrip() + if password is None: + # Read password if not loaded from svn config, or on subsequent tries. + print 'Please enter your googlecode.com password.' + print '** Note that this is NOT your Gmail account password! **' + print 'It is the password you use to access Subversion repositories,' + print 'and can be found here: http://code.google.com/hosting/settings' + password = getpass.getpass() + + status, reason, url = upload(file_path, project_name, user_name, password, + summary, labels) + # Returns 403 Forbidden instead of 401 Unauthorized for bad + # credentials as of 2007-07-17. + if status in [httplib.FORBIDDEN, httplib.UNAUTHORIZED]: + # Rest for another try. + user_name = password = None + tries = tries - 1 + else: + # We're done. + break + + return status, reason, url + + +def main(): + parser = optparse.OptionParser(usage='googlecode-upload.py -s SUMMARY ' + '-p PROJECT [options] FILE') + parser.add_option('-s', '--summary', dest='summary', + help='Short description of the file') + parser.add_option('-p', '--project', dest='project', + help='Google Code project name') + parser.add_option('-u', '--user', dest='user', + help='Your Google Code username') + parser.add_option('-w', '--password', dest='password', + help='Your Google Code password') + parser.add_option('-l', '--labels', dest='labels', + help='An optional list of comma-separated labels to attach ' + 'to the file') + + options, args = parser.parse_args() + + if not options.summary: + parser.error('File summary is missing.') + elif not options.project: + parser.error('Project name is missing.') + elif len(args) < 1: + parser.error('File to upload not provided.') + elif len(args) > 1: + parser.error('Only one file may be specified.') + + file_path = args[0] + + if options.labels: + labels = options.labels.split(',') + else: + labels = None + + status, reason, url = upload_find_auth(file_path, options.project, + options.summary, labels, + options.user, options.password) + if url: + print 'The file was uploaded successfully.' + print 'URL: %s' % url + return 0 + else: + print 'An error occurred. Your file was not uploaded.' + print 'Google Code upload server said: %s (%s)' % (reason, status) + return 1 + + +if __name__ == '__main__': + sys.exit(main()) diff -Nru foobnix-2.6.11q/scripts/win_installer.nsi foobnix-2.6.10quantal/scripts/win_installer.nsi --- foobnix-2.6.11q/scripts/win_installer.nsi 1970-01-01 00:00:00.000000000 +0000 +++ foobnix-2.6.10quantal/scripts/win_installer.nsi 2013-05-04 14:58:13.000000000 +0000 @@ -0,0 +1,107 @@ +;Foobnix +;Modified by Steven Robertson +;Based on the NSIS Modern User Interface Start Menu Folder Example Script +;Written by Joost Verburg + +;-------------------------------- +;Include Modern UI + + !include "MUI2.nsh" + +;-------------------------------- +;General + + ;Name and file + SetCompressor /SOLID lzma + Name "Foobnix" + OutFile "foobnix-LATEST.exe" + Icon "share\pixmaps\foobnix.ico" + + ;Default installation folder + InstallDir "$PROGRAMFILES\Foobnix" + + ;Get installation folder from registry if available + InstallDirRegKey HKCU "Software\Foobnix" "" + + ;Request application privileges for Windows Vista + RequestExecutionLevel admin + +;-------------------------------- +;Variables + + Var StartMenuFolder + +;-------------------------------- +;Interface Settings + + !define MUI_ABORTWARNING + +;-------------------------------- +;Pages + + ;!insertmacro MUI_PAGE_LICENSE "..\foobnix\COPYING" + !insertmacro MUI_PAGE_DIRECTORY + + ;Start Menu Folder Page Configuration + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Foobnix" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + + !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder + + !insertmacro MUI_PAGE_INSTFILES + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +;Installer Sections + +Section "Dummy Section" SecDummy + + SetOutPath "$INSTDIR" + + File /r "*.*" + + ;Store installation folder + WriteRegStr HKCU "Software\Foobnix" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$StartMenuFolder" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Foobnix.lnk" "$INSTDIR\foobnix.exe" + + !insertmacro MUI_STARTMENU_WRITE_END + +SectionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + Delete "$INSTDIR\Uninstall.exe" + + RMDir /r "$INSTDIR" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder + + Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" + Delete "$SMPROGRAMS\$StartMenuFolder\Foobnix.lnk" + RMDir "$SMPROGRAMS\$StartMenuFolder" + + DeleteRegKey /ifempty HKCU "Software\Foobnix" + +SectionEnd + + diff -Nru foobnix-2.6.11q/setup.py foobnix-2.6.10quantal/setup.py --- foobnix-2.6.11q/setup.py 2013-05-04 12:26:42.000000000 +0000 +++ foobnix-2.6.10quantal/setup.py 2013-05-04 14:58:13.000000000 +0000 @@ -9,7 +9,7 @@ if os.name == 'nt': import py2exe #@UnresolvedImport @UnusedImport -VERSION = "2.6.11" +VERSION = "2.6.10" data_files = [ ('share/applications', ['foobnix.desktop']),