1 diff --git a/browser-plugin/totem-plugin-viewer.c b/browser-plugin/totem-plugin-viewer.c
2 index 2b5b92c..3bfafd1 100644
3 --- a/browser-plugin/totem-plugin-viewer.c
4 +++ b/browser-plugin/totem-plugin-viewer.c
5 @@ -104,7 +104,6 @@ typedef struct _TotemEmbedded {
8 GtkBuilder *menuxml, *xml;
11 GtkWidget *pp_fs_button;
12 TotemStatusbar *statusbar;
13 @@ -187,7 +186,6 @@ static void totem_embedded_update_menu (TotemEmbedded *emb);
14 static void on_open1_activate (GtkButton *button, TotemEmbedded *emb);
15 static void totem_embedded_toggle_fullscreen (TotemEmbedded *emb);
17 -void on_about1_activate (GtkButton *button, TotemEmbedded *emb);
18 void on_preferences1_activate (GtkButton *button, TotemEmbedded *emb);
19 void on_copy_location1_activate (GtkButton *button, TotemEmbedded *emb);
20 void on_fullscreen1_activate (GtkMenuItem *menuitem, TotemEmbedded *emb);
21 @@ -348,7 +346,7 @@ totem_embedded_set_state (TotemEmbedded *emb, TotemStates state)
24 case TOTEM_STATE_STOPPED:
25 - id = GTK_STOCK_MEDIA_PLAY;
26 + id = "media-playback-start-symbolic";
27 totem_statusbar_set_text (emb->statusbar, _("Stopped"));
28 totem_statusbar_set_time_and_length (emb->statusbar, 0, 0);
29 totem_time_label_set_time
30 @@ -360,11 +358,11 @@ totem_embedded_set_state (TotemEmbedded *emb, TotemStates state)
33 case TOTEM_STATE_PAUSED:
34 - id = GTK_STOCK_MEDIA_PLAY;
35 + id = "media-playback-start-symbolic";
36 totem_statusbar_set_text (emb->statusbar, _("Paused"));
38 case TOTEM_STATE_PLAYING:
39 - id = GTK_STOCK_MEDIA_PAUSE;
40 + id = "media-playback-pause-symbolic";
41 totem_statusbar_set_text (emb->statusbar, _("Playing"));
42 if (emb->href_uri == NULL && emb->hidden == FALSE) {
44 @@ -380,8 +378,8 @@ totem_embedded_set_state (TotemEmbedded *emb, TotemStates state)
46 if (emb->scrsaver != NULL)
47 totem_scrsaver_set_state (emb->scrsaver, (state == TOTEM_STATE_PLAYING) ? FALSE : TRUE);
48 - gtk_image_set_from_stock (GTK_IMAGE (image), id, GTK_ICON_SIZE_MENU);
49 - gtk_tool_button_set_stock_id (GTK_TOOL_BUTTON (emb->pp_fs_button), id);
50 + gtk_image_set_from_icon_name (GTK_IMAGE (image), id, GTK_ICON_SIZE_MENU);
51 + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (emb->pp_fs_button), id);
55 @@ -773,6 +771,7 @@ totem_embedded_set_fullscreen (TotemEmbedded *emb,
56 gdk_screen_get_monitor_geometry (gtk_widget_get_screen (GTK_WIDGET (emb->bvw)),
58 gtk_window_move (GTK_WINDOW (emb->fs_window), rect.x, rect.y);
59 + totem_interface_set_transient_for (GTK_WINDOW (emb->fs_window), GTK_WINDOW (emb->window));
61 gtk_widget_reparent (GTK_WIDGET (emb->bvw), emb->fs_window);
62 bacon_video_widget_set_fullscreen (emb->bvw, TRUE);
63 @@ -1129,61 +1128,6 @@ on_fullscreen1_activate (GtkMenuItem *menuitem, TotemEmbedded *emb)
67 -on_about1_activate (GtkButton *button, TotemEmbedded *emb)
69 - char *backend_version, *description, *license;
72 - const char *authors[] =
74 - "Bastien Nocera <hadess@hadess.net>",
75 - "Ronald Bultje <rbultje@ronald.bitfreak.net>",
76 - "Christian Persch" " <" "chpe" "@" "gnome" "." "org" ">",
80 - if (emb->about != NULL)
82 - gtk_window_present (GTK_WINDOW (emb->about));
86 - backend_version = bacon_video_widget_get_backend_name (emb->bvw);
87 - description = g_strdup_printf (_("Browser Plugin using %s"),
89 - license = totem_interface_get_license ();
91 - emb->about = g_object_new (GTK_TYPE_ABOUT_DIALOG,
92 - "program-name", _("Totem Browser Plugin"),
94 - "copyright", "Copyright © 2002-2007 Bastien Nocera\n"
95 - "Copyright © 2006, 2007, 2008 Christian Persch",
96 - "comments", description,
98 - "translator-credits", _("translator-credits"),
99 - "logo-icon-name", "totem",
100 - "license", license,
101 - "wrap-license", TRUE,
104 - g_free (backend_version);
105 - g_free (description);
108 - totem_interface_set_transient_for (GTK_WINDOW (emb->about),
109 - GTK_WINDOW (emb->window));
111 - about = &emb->about;
112 - g_object_add_weak_pointer (G_OBJECT (emb->about),
113 - (gpointer *) about);
115 - g_signal_connect (G_OBJECT (emb->about), "response",
116 - G_CALLBACK (gtk_widget_destroy), NULL);
118 - gtk_widget_show (emb->about);
122 on_copy_location1_activate (GtkButton *button, TotemEmbedded *emb)
125 @@ -1867,7 +1811,7 @@ totem_embedded_construct (TotemEmbedded *emb,
126 G_CALLBACK (totem_embedded_on_fullscreen_exit), emb);
128 emb->pp_fs_button = GTK_WIDGET (gtk_tool_button_new_from_stock
129 - (GTK_STOCK_MEDIA_PLAY));
130 + ("media-playback-start-symbolic"));
131 g_signal_connect (G_OBJECT (emb->pp_fs_button), "clicked",
132 G_CALLBACK (on_play_pause), emb);
133 gtk_container_add (GTK_CONTAINER (emb->fs->buttons_box), emb->pp_fs_button);
134 @@ -1933,7 +1877,7 @@ totem_embedded_construct (TotemEmbedded *emb,
135 G_CALLBACK (cb_on_seek), emb);
137 emb->pp_button = GTK_WIDGET (gtk_builder_get_object (emb->xml, "pp_button"));
138 - image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_MENU);
139 + image = gtk_image_new_from_icon_name ("media-playback-start-symbolic", GTK_ICON_SIZE_MENU);
140 gtk_button_set_image (GTK_BUTTON (emb->pp_button), image);
141 g_signal_connect (G_OBJECT (emb->pp_button), "clicked",
142 G_CALLBACK (on_play_pause), emb);
143 @@ -1994,6 +1938,7 @@ totem_embedded_construct (TotemEmbedded *emb,
145 /* Success! Apply the styling to various widgets */
146 GtkStyleContext *context;
149 context = gtk_widget_get_style_context (emb->pp_button);
150 gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
151 @@ -2003,6 +1948,10 @@ totem_embedded_construct (TotemEmbedded *emb,
153 context = gtk_widget_get_style_context (emb->volume);
154 gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
156 + widget = GTK_WIDGET (gtk_builder_get_object (emb->xml, "popup_button"));
157 + context = gtk_widget_get_style_context (widget);
158 + gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
161 g_object_unref (provider);
162 @@ -2276,6 +2225,7 @@ int main (int argc, char **argv)
166 + GtkSettings *gtk_settings;
168 bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
169 bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
170 @@ -2391,6 +2341,9 @@ int main (int argc, char **argv)
174 + gtk_settings = gtk_settings_get_default ();
175 + g_object_set (G_OBJECT (gtk_settings), "gtk-application-prefer-dark-theme", TRUE, NULL);
177 emb = g_object_new (TOTEM_TYPE_EMBEDDED, NULL);
179 emb->state = TOTEM_STATE_INVALID;
180 diff --git a/browser-plugin/totemPlugin.cpp b/browser-plugin/totemPlugin.cpp
181 index 9bacbf9..3eaab64 100644
182 --- a/browser-plugin/totemPlugin.cpp
183 +++ b/browser-plugin/totemPlugin.cpp
184 @@ -105,6 +105,7 @@ static const totemPluginMimeEntry kMimeTypes[] = {
185 { "image/x-macpaint", "pntg", NULL },
186 { "image/x-quicktime", "pict, pict1, pict2", "image/x-pict" },
187 { "video/x-m4v", "m4v", NULL },
188 + { "application/vnd.apple.mpegurl", "m3u8", NULL },
189 #elif defined(TOTEM_MULLY_PLUGIN)
190 { "video/divx", "divx", "video/x-msvideo" },
191 #elif defined(TOTEM_CONE_PLUGIN)
192 diff --git a/configure.in b/configure.in
193 index 797c8fc..997c2ca 100644
196 @@ -48,9 +48,9 @@ TOTEM_PLPARSER_REQS=2.32.4
197 GNOMEICON_REQS=2.15.90
203 -PYGOBJECT_REQS=2.27.0
204 +PYGOBJECT_REQS=2.90.3
208 @@ -68,7 +68,7 @@ AC_SUBST(TOTEM_API_VERSION)
209 AC_DEFINE_UNQUOTED(TOTEM_API_VERSION, ["$TOTEM_API_VERSION"], [Define to the Totem plugin API version])
211 # The full list of plugins
212 -allowed_plugins="bemused brasero-disc-recorder chapters coherence_upnp dbus-service im-status gromit iplayer jamendo lirc media-player-keys ontop opensubtitles properties publish pythonconsole save-file sample-python sample-vala screensaver screenshot sidebar-test skipto thumbnail tracker youtube zeitgeist-dp"
213 +allowed_plugins="bemused brasero-disc-recorder chapters dbusservice im-status gromit iplayer lirc media-player-keys ontop opensubtitles properties publish pythonconsole save-file samplepython sample-vala screensaver screenshot sidebar-test skipto thumbnail youtube zeitgeist-dp grilo"
215 PLUGINDIR='${libdir}/totem/plugins'
217 @@ -300,16 +300,16 @@ if test "x$enable_python" != "xno"; then
221 - PKG_CHECK_MODULES([PYGOBJECT],[pygobject-2.0 >= $PYGOBJECT_REQS],[have_pygobject=yes],[have_pygobject=no])
222 + PKG_CHECK_MODULES([PYGOBJECT],[pygobject-3.0 >= $PYGOBJECT_REQS],[have_pygobject=yes],[have_pygobject=no])
225 # Output the results of the Python checks
226 if test "x$have_python" != "xyes" -o "x$have_pygobject" != "xyes"; then
227 if test "x$enable_python" = "xyes"; then
228 - AC_MSG_ERROR([python >= $PYTHON_REQS or pygobject-2.0 >= $PYGOBJECT_REQS not found])
229 + AC_MSG_ERROR([python >= $PYTHON_REQS or pygobject-3.0 >= $PYGOBJECT_REQS not found])
230 elif test "x$enable_python" = "xautodetect"; then
232 - AC_MSG_WARN([python >= $PYTHON_REQS or pygobject-2.0 >= $PYGOBJECT_REQS not found; disabling Python support])
233 + AC_MSG_WARN([python >= $PYTHON_REQS or pygobject-3.0 >= $PYGOBJECT_REQS not found; disabling Python support])
235 elif test "x$enable_python" != "xno"; then
237 @@ -394,11 +394,6 @@ for plugin in ${used_plugins}; do
242 - # The Coherence framework still uses PyGTK, and thus conflicts with the new pygobject introspected bindings
243 - plugin_error_or_ignore "the coherence_upnp plugin uses PyGTK and conflicts with the new pygobject bindings"
247 if test "${have_x11}" != "yes" ; then
248 plugin_error_or_ignore "the gromit plugin is not supported on non-X11 targets"
249 @@ -406,10 +401,10 @@ for plugin in ${used_plugins}; do
253 - PKG_CHECK_MODULES(MEDIA_PLAYER_KEYS, dbus-glib-1,
254 + PKG_CHECK_MODULES(MEDIA_PLAYER_KEYS, gio-2.0 >= 2.24,
255 [HAVE_MEDIA_PLAYER_KEYS=yes], [HAVE_MEDIA_PLAYER_KEYS=no])
256 if test "${HAVE_MEDIA_PLAYER_KEYS}" != "yes" ; then
257 - plugin_error_or_ignore "you need dbus-glib-1 installed for the media-player-keys plugin"
258 + plugin_error_or_ignore "you need gio >= 2.24 installed for the media-player-keys plugin"
262 @@ -436,19 +431,12 @@ for plugin in ${used_plugins}; do
266 - PKG_CHECK_MODULES(LIBEPC, libepc-ui-1.0 >= 0.3.0, [HAVE_LIBEPC=yes], [HAVE_LIBEPC=no])
267 + PKG_CHECK_MODULES(LIBEPC, libepc-ui-1.0 > 0.4.0, [HAVE_LIBEPC=yes], [HAVE_LIBEPC=no])
268 if test "${HAVE_LIBEPC}" != "yes" ; then
269 plugin_error_or_ignore "you need the easy-publish-and-consume library installed for the publish plugin"
274 - PKG_CHECK_MODULES(TRACKER, tracker-sparql-0.10 >= 0.9.34, [HAVE_TRACKER=yes], [HAVE_TRACKER=no])
275 - if test "${HAVE_TRACKER}" != "yes" ; then
276 - plugin_error_or_ignore "you need the tracker development headers installed for the tracker plugin"
281 if test "${with_vala}" != "yes" ; then
282 plugin_error_or_ignore "you need vala installed to use the sample-vala plugin"
283 @@ -499,6 +487,13 @@ for plugin in ${used_plugins}; do
284 AC_DEFINE([HAVE_LIBGDATA_0_7],[1],[Define if libgdata >= 0.7.0 is available])
287 + # For the API breaks in libgdata 0.9. Remove this once we depend on libgdata >= 0.9.1
288 + PKG_CHECK_MODULES(LIBGDATA_0_9, libgdata >= 0.9.1,
289 + [HAVE_LIBGDATA_0_9=yes], [HAVE_LIBGDATA_0_9=no])
290 + if test "${HAVE_LIBGDATA_0_9}" = "yes" ; then
291 + AC_DEFINE([HAVE_LIBGDATA_0_9],[1],[Define if libgdata >= 0.9.1 is available])
294 PKG_CHECK_MODULES(LIBSOUP, libsoup-2.4,
295 [HAVE_LIBSOUP=yes], [HAVE_LIBSOUP=no])
296 if test "${HAVE_LIBSOUP}" != "yes" ; then
297 @@ -537,6 +532,14 @@ for plugin in ${used_plugins}; do
302 + PKG_CHECK_MODULES(LIBGRILO, grilo-0.1 >= 0.1.16,
303 + [HAVE_LIBGRILO=yes], [HAVE_LIBGRILO=no])
304 + if test "${HAVE_LIBGRILO}" != "yes" ; then
305 + plugin_error_or_ignore "you need libgrilo >= 0.1.16 installed for the Grilo plugin"
311 # Add the specified plugin
312 @@ -692,25 +695,6 @@ if test x$HAVE_NAUTILUS = "xyes"; then
314 AM_CONDITIONAL(HAVE_NAUTILUS, test x$HAVE_NAUTILUS = "xyes")
316 -dnl ***************************
317 -dnl D-Bus for gnome-screensaver
318 -dnl ***************************
320 - AC_HELP_STRING([--with-dbus],
321 - [Enable D-BUS support]),,
323 -if test "x$with_dbus" != "xno"; then
324 - PKG_CHECK_MODULES(DBUS, dbus-glib-1 >= $DBUS_REQS, enable_dbus=yes, enable_dbus=no)
325 - if test "x$with_dbus" = xyes && test "x$enable_dbus" = xno; then
326 - AC_MSG_ERROR([D-BUS explicitly requested but no support found])
328 - if test "x$enable_dbus" = xyes; then
329 - AC_DEFINE(WITH_DBUS, 1, [Define if D-BUS is enabled])
330 - AC_DEFINE(ENABLE_DBUS, 1, [Define if D-BUS is enabled])
333 -AM_CONDITIONAL(WITH_DBUS, test "x$enable_dbus" = "xyes")
338 @@ -773,8 +757,7 @@ src/Makefile
339 src/properties/Makefile
341 src/plugins/bemused/Makefile
342 -src/plugins/coherence_upnp/Makefile
343 -src/plugins/dbus-service/Makefile
344 +src/plugins/dbusservice/Makefile
345 src/plugins/screensaver/Makefile
346 src/plugins/screenshot/Makefile
347 src/plugins/ontop/Makefile
348 @@ -789,20 +772,18 @@ src/plugins/properties/Makefile
349 src/plugins/save-file/Makefile
350 src/plugins/sidebar-test/Makefile
351 src/plugins/skipto/Makefile
352 -src/plugins/sample-python/Makefile
353 +src/plugins/samplepython/Makefile
354 src/plugins/sample-vala/Makefile
355 src/plugins/thumbnail/Makefile
356 -src/plugins/tracker/Makefile
357 src/plugins/youtube/Makefile
358 src/plugins/pythonconsole/Makefile
359 src/plugins/pythonconsole/org.gnome.totem.plugins.pythonconsole.gschema.xml.in
360 src/plugins/publish/Makefile
361 src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in
362 -src/plugins/jamendo/Makefile
363 -src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in
364 src/plugins/brasero-disc-recorder/Makefile
365 src/plugins/chapters/Makefile
366 src/plugins/zeitgeist-dp/Makefile
367 +src/plugins/grilo/Makefile
369 browser-plugin/Makefile
371 @@ -892,11 +873,6 @@ if test x$enable_xtest = xyes ; then
373 AC_MSG_NOTICE([ XTest (legacy screensaver) support disabled])
375 -if test x$enable_dbus = xyes ; then
376 - AC_MSG_NOTICE([** D-Bus (gnome-screensaver) support enabled])
378 - AC_MSG_NOTICE([ D-Bus (gnome-screensaver) support disabled])
380 if test x$have_xvidmode = xyes ; then
381 AC_MSG_NOTICE([** XVidmode support enabled])
383 diff --git a/data/Makefile.am b/data/Makefile.am
384 index a4dc0d7..6dcab81 100644
385 --- a/data/Makefile.am
386 +++ b/data/Makefile.am
387 @@ -56,7 +56,7 @@ desktopdir = $(datadir)/applications
388 desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
389 @INTLTOOL_DESKTOP_RULE@
391 -totem.desktop.in: totem.desktop.in.in mime-type-list.txt desktop.sh
392 +totem.desktop.in: totem.desktop.in.in mime-type-list.txt uri-schemes-list.txt desktop.sh
393 $(AM_V_GEN) cat totem.desktop.in.in | sed 's,@FULL_LIBEXECDIR@,$(FULL_LIBEXECDIR),' > $@ &&\
394 $(SHELL) $(srcdir)/desktop.sh $(srcdir)/mime-type-list.txt $(srcdir)/uri-schemes-list.txt >> $@
396 @@ -82,20 +82,25 @@ CLEANFILES += \
399 # Content type handling
400 -nodist_noinst_HEADERS = totem-mime-types.h nautilus-audio-mime-types.h
401 +nodist_noinst_HEADERS = totem-mime-types.h nautilus-audio-mime-types.h totem-uri-schemes.h
402 totem-mime-types.h: mime-type-include.sh mime-type-list.txt mime-functions.sh
403 $(AM_V_GEN) $(srcdir)/mime-type-include.sh $(srcdir)/mime-type-list.txt > $@
404 nautilus-audio-mime-types.h: mime-type-include.sh mime-type-list.txt mime-functions.sh
405 $(AM_V_GEN) $(srcdir)/mime-type-include.sh --nautilus $(srcdir)/mime-type-list.txt > $@
406 +totem-uri-schemes.h: mime-type-include.sh mime-type-list.txt mime-functions.sh
407 + $(AM_V_GEN) $(srcdir)/uri-scheme-include.sh $(srcdir)/uri-schemes-list.txt > $@
410 mime-type-include.sh \
412 + uri-scheme-include.sh \
413 uri-schemes-list.txt \
417 - nautilus-audio-mime-types.h
418 + totem-uri-schemes.h \
419 + nautilus-audio-mime-types.h \
420 + totem-uri-schemes.h
422 # GSettings schemas, enum files and conversion file
423 gsettings_ENUM_NAMESPACE = org.gnome.totem
424 diff --git a/data/fullscreen.ui b/data/fullscreen.ui
425 index 19e0bf5..8f26f65 100644
426 --- a/data/fullscreen.ui
427 +++ b/data/fullscreen.ui
429 <object class="GtkImage" id="tefw_image">
430 <property name="visible">True</property>
431 <property name="icon_size">4</property>
432 - <property name="icon_name">view-restore</property>
433 + <property name="icon_name">view-restore-symbolic</property>
434 <property name="xalign">0.5</property>
435 <property name="yalign">0.5</property>
436 <property name="xpad">0</property>
437 diff --git a/data/mime-type-include.sh b/data/mime-type-include.sh
438 index 3560839..e03c2a1 100755
439 --- a/data/mime-type-include.sh
440 +++ b/data/mime-type-include.sh
442 MIMETYPES=`grep -v '^#' $1 | grep -v x-content/ | grep -v x-scheme-handler/`
444 echo "/* generated with mime-types-include.sh, don't edit */"
445 -echo "const char *mime_types[] = {"
446 +echo "static const gchar *mime_types[] = {"
448 for i in $MIMETYPES ; do
450 @@ -35,7 +35,7 @@ echo "};"
452 get_audio_mimetypes $1;
454 -echo "const char *audio_mime_types[] = {"
455 +echo "static const gchar *audio_mime_types[] = {"
456 for i in $MIMETYPES ; do
459 @@ -44,7 +44,7 @@ echo "};"
461 get_video_mimetypes $1;
463 -echo "const char *video_mime_types[] = {"
464 +echo "static const gchar *video_mime_types[] = {"
465 for i in $MIMETYPES ; do
468 diff --git a/data/mime-type-list.txt b/data/mime-type-list.txt
469 index 0d298c9..acb242e 100644
470 --- a/data/mime-type-list.txt
471 +++ b/data/mime-type-list.txt
472 @@ -4,6 +4,7 @@ application/ram
476 +application/vnd.apple.mpegurl
477 application/vnd.ms-wpl
478 application/vnd.rn-realmedia
479 application/x-extension-m4a
480 @@ -55,9 +56,11 @@ audio/x-pn-wav
481 audio/x-pn-windows-acm
492 @@ -69,8 +72,10 @@ image/x-pict
494 text/google-video-pointer
495 text/x-google-video-pointer
503 @@ -82,6 +87,7 @@ video/ogg
508 video/vnd.rn-realvideo
511 @@ -94,6 +100,7 @@ video/x-flv
519 diff --git a/data/mozilla-viewer.css b/data/mozilla-viewer.css
520 index 7048a36..dc48309 100644
521 --- a/data/mozilla-viewer.css
522 +++ b/data/mozilla-viewer.css
524 /* Style to attempt to reduce the size of the browser plugin */
534 + border-style: none;
535 + border-image: none;
537 diff --git a/data/mozilla-viewer.ui b/data/mozilla-viewer.ui
538 index ea88369..ba0d8ce 100644
539 --- a/data/mozilla-viewer.ui
540 +++ b/data/mozilla-viewer.ui
542 <signal handler="on_fullscreen1_activate" name="activate"/>
546 - <object class="GtkAction" id="about1">
547 - <property name="stock_id">gtk-about</property>
548 - <property name="name">about1</property>
549 - <signal handler="on_about1_activate" name="activate"/>
556 <menuitem action="copy_location1"/>
557 <menuitem action="preferences1"/>
558 <menuitem action="fullscreen1"/>
560 - <menuitem action="about1"/>
564 diff --git a/data/playlist.ui b/data/playlist.ui
565 index fe52e7a..c012a3c 100644
566 --- a/data/playlist.ui
567 +++ b/data/playlist.ui
569 <property name="visible">True</property>
570 <property name="can_focus">False</property>
571 <property name="icon_size">1</property>
572 + <property name="toolbar-style">icons</property>
574 <class name="inline-toolbar"/>
577 <property name="use_underline">True</property>
578 <property name="icon_name">document-save-symbolic</property>
579 <property name="tooltip-text" translatable="yes">Save Playlist...</property>
580 + <signal name="clicked" handler="totem_playlist_save_files"/>
583 <property name="expand">False</property>
584 diff --git a/data/totem-bugreport.py b/data/totem-bugreport.py
585 index bd6207d..d324884 100644
586 --- a/data/totem-bugreport.py
587 +++ b/data/totem-bugreport.py
592 from datetime import datetime
593 +from gi.repository import Gtk
595 # Get the GStreamer version
596 if os.system ('gst-typefind-0.10 --version') == 0:
597 # List the formats of the last files played
599 - recent_manager = gtk.recent_manager_get_default ()
600 + recent_manager = Gtk.RecentManager.get_default ()
601 for recent in recent_manager.get_items ():
602 if recent.has_group ("Totem"):
603 if recent.get_visited () > last_visited:
604 diff --git a/data/uri-scheme-include.sh b/data/uri-scheme-include.sh
606 index 0000000..645b139
608 +++ b/data/uri-scheme-include.sh
612 +. `dirname $0`/mime-functions.sh
618 +SCHEMES=`grep -v '^#' $1`
620 +echo "/* generated with uri-scheme-include.sh, don't edit */"
621 +echo "static const gchar *uri_schemes[] = {"
623 +for i in $SCHEMES ; do
628 diff --git a/data/uri-schemes-list.txt b/data/uri-schemes-list.txt
629 index 68ec833..56ea8ff 100644
630 --- a/data/uri-schemes-list.txt
631 +++ b/data/uri-schemes-list.txt
640 diff --git a/lib/totem-scrsaver.c b/lib/totem-scrsaver.c
641 index aaa74bd..0572610 100644
642 --- a/lib/totem-scrsaver.c
643 +++ b/lib/totem-scrsaver.c
644 @@ -227,7 +227,7 @@ static void
645 screensaver_init_dbus (TotemScrsaver *scr)
647 g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
648 - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
649 + G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
653 @@ -273,6 +273,13 @@ fake_event (TotemScrsaver *scr)
655 if (scr->priv->disabled)
657 + /* If the video window isn't focused, don't send out the
658 + * events. Note that it probably breaks when popups are used
659 + * but we can't do much about that... */
660 + if (scr->priv->window != NULL &&
661 + gtk_window_has_toplevel_focus (scr->priv->window) == FALSE)
664 XLockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
665 XTestFakeKeyEvent (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), *scr->priv->keycode,
667 diff --git a/po/POTFILES.in b/po/POTFILES.in
668 index 93771c5..091f1c3 100644
671 @@ -46,9 +46,8 @@ src/plugins/brasero-disc-recorder/totem-disc-recorder.c
672 [type: gettext/glade]src/plugins/chapters/chapters-list.ui
673 src/plugins/chapters/totem-chapters.c
674 src/plugins/chapters/totem-cmml-parser.c
675 -src/plugins/coherence_upnp/coherence_upnp.py
676 -[type: gettext/ini]src/plugins/coherence_upnp/coherence_upnp.plugin.in
677 -[type: gettext/ini]src/plugins/dbus-service/dbus-service.plugin.in
678 +[type: gettext/ini]src/plugins/dbusservice/dbusservice.plugin.in
679 +src/plugins/dbusservice/dbusservice.py
680 [type: gettext/ini]src/plugins/im-status/totem-im-status.plugin.in
681 src/plugins/im-status/totem-im-status.c
682 [type: gettext/ini]src/plugins/gromit/gromit.plugin.in
683 @@ -57,10 +56,6 @@ src/plugins/gromit/totem-gromit.c
684 src/plugins/iplayer/iplayer.py
685 src/plugins/iplayer/iplayer2.py
686 [type: gettext/glade]src/plugins/iplayer/iplayer.ui
687 -[type: gettext/glade]src/plugins/jamendo/jamendo.ui
688 -[type: gettext/ini]src/plugins/jamendo/jamendo.plugin.in
689 -src/plugins/jamendo/jamendo.py
690 -src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in
691 [type: gettext/ini]src/plugins/lirc/lirc.plugin.in
692 src/plugins/lirc/totem-lirc.c
693 [type: gettext/ini]src/plugins/media-player-keys/media-player-keys.plugin.in
694 @@ -90,14 +85,14 @@ src/plugins/screenshot/totem-screenshot-plugin.c
695 [type: gettext/ini]src/plugins/skipto/skipto.plugin.in
696 src/plugins/skipto/totem-skipto.c
697 src/plugins/skipto/totem-skipto-plugin.c
698 +src/plugins/skipto/totem-time-entry.c
699 [type: gettext/glade]src/plugins/skipto/skipto.ui
700 -src/plugins/tracker/totem-tracker-widget.c
701 -src/plugins/tracker/totem-tracker.c
702 [type: gettext/ini]src/plugins/thumbnail/thumbnail.plugin.in
703 -[type: gettext/ini]src/plugins/tracker/tracker.plugin.in
704 [type: gettext/ini]src/plugins/youtube/youtube.plugin.in
705 [type: gettext/glade]src/plugins/youtube/youtube.ui
706 src/plugins/youtube/totem-youtube.c
707 browser-plugin/totem-plugin-viewer.c
708 [type: gettext/ini]src/plugins/pythonconsole/pythonconsole.plugin.in
709 src/plugins/pythonconsole/pythonconsole.py
710 +[type: gettext/ini]src/plugins/grilo/grilo.plugin.in
711 +src/plugins/grilo/totem-grilo.c
712 diff --git a/po/ca@valencia.po b/po/ca@valencia.po
713 index 11a343f..c7308a8 100644
714 --- a/po/ca@valencia.po
715 +++ b/po/ca@valencia.po
717 # Copyright © 2002-2008 Free Software Foundation, Inc.
718 # This file is distributed under the same license as the totem package.
719 # Jordi Mallach <jordi@sindominio.net>, 2002, 2003, 2004, 2005, 2006, 2007.
720 -# Gil Forcada <gilforcada@guifi.net>, 2006, 2007, 2008, 2009, 2010.
721 +# Gil Forcada <gilforcada@guifi.net>, 2006, 2007, 2008, 2009, 2010, 2011.
725 "Project-Id-Version: totem 2.14\n"
726 "Report-Msgid-Bugs-To: \n"
727 -"POT-Creation-Date: 2010-10-29 21:55+0100\n"
728 -"PO-Revision-Date: 2010-08-29 16:16+0200\n"
729 +"POT-Creation-Date: 2011-05-29 19:08+0200\n"
730 +"PO-Revision-Date: 2011-04-05 22:59+0200\n"
731 "Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
732 "Language-Team: Catalan <tradgnome@softcatala.org>\n"
734 @@ -26,7 +26,7 @@ msgstr "Ix de la pantalla completa"
738 -#: ../data/playlist.ui.h:1 ../src/plugins/chapters/chapters-list.ui.h:1
739 +#: ../data/playlist.ui.h:1
743 @@ -42,7 +42,7 @@ msgstr "Mou avall"
747 -#: ../data/playlist.ui.h:5 ../src/plugins/chapters/chapters-list.ui.h:8
748 +#: ../data/playlist.ui.h:5
752 @@ -62,7 +62,7 @@ msgstr "Seleccioneu el fitxer que conté els subtítols"
753 msgid "_Copy Location"
754 msgstr "_Copia la ubicació"
756 -#: ../data/playlist.ui.h:10 ../src/plugins/chapters/chapters-list.ui.h:12
757 +#: ../data/playlist.ui.h:10
761 @@ -70,35 +70,15 @@ msgstr "_Suprimeix"
762 msgid "_Select Text Subtitles..."
763 msgstr "_Seleccioneu els subtítols de text..."
765 -#: ../data/plugins.ui.h:1
769 -#: ../data/plugins.ui.h:2
770 -msgid "C_onfigure..."
771 -msgstr "C_onfigura..."
773 -#: ../data/plugins.ui.h:3
777 -#: ../data/plugins.ui.h:4
778 -msgid "Description:"
779 -msgstr "Descripció:"
781 -#: ../data/plugins.ui.h:5
786 #: ../data/properties.ui.h:1
787 -#: ../src/plugins/properties/bacon-video-widget-properties.c:173
788 +#: ../src/properties/bacon-video-widget-properties.c:175
793 #: ../data/properties.ui.h:2
794 -#: ../src/plugins/properties/bacon-video-widget-properties.c:171
795 +#: ../src/properties/bacon-video-widget-properties.c:173
799 @@ -108,7 +88,7 @@ msgstr "0 quadres per segon"
801 #: ../data/properties.ui.h:4
807 #: ../data/properties.ui.h:5 ../src/backend/video-utils.c:158
808 @@ -127,60 +107,50 @@ msgstr "Àlbum:"
812 -#: ../data/properties.ui.h:9 ../data/totem.ui.h:22
813 +#: ../data/properties.ui.h:9 ../data/totem.ui.h:23
814 #: ../src/totem-properties-view.c:89
819 #: ../data/properties.ui.h:10
820 +#: ../src/properties/bacon-video-widget-properties.c:171
821 +msgctxt "Audio codec"
825 +#: ../data/properties.ui.h:11
827 msgstr "Velocitat de transmissió:"
829 -#: ../data/properties.ui.h:11
830 +#: ../data/properties.ui.h:12
834 -#: ../data/properties.ui.h:12
835 +#: ../data/properties.ui.h:13
839 -#: ../data/properties.ui.h:13
840 +#: ../data/properties.ui.h:14
844 -#: ../data/properties.ui.h:14
845 +#: ../data/properties.ui.h:15
849 -#: ../data/properties.ui.h:15
850 +#: ../data/properties.ui.h:16
854 -#: ../data/properties.ui.h:16
855 +#: ../data/properties.ui.h:17
857 msgstr "Imatges per segon:"
859 -#: ../data/properties.ui.h:17 ../data/totem.ui.h:41
860 +#: ../data/properties.ui.h:18 ../data/totem.ui.h:41
867 -#: ../data/properties.ui.h:18
868 -#: ../src/plugins/properties/bacon-video-widget-properties.c:156
869 -#: ../src/plugins/properties/bacon-video-widget-properties.c:158
870 -#: ../src/plugins/properties/bacon-video-widget-properties.c:161
871 -#: ../src/plugins/properties/bacon-video-widget-properties.c:164
872 -#: ../src/plugins/properties/bacon-video-widget-properties.c:167
873 -#: ../src/plugins/properties/bacon-video-widget-properties.c:169
874 -#: ../src/plugins/properties/bacon-video-widget-properties.c:238
875 -#: ../src/plugins/properties/bacon-video-widget-properties.c:248
876 -#: ../src/plugins/properties/bacon-video-widget-properties.c:271
877 -#: ../src/plugins/properties/bacon-video-widget-properties.c:274
881 #: ../data/properties.ui.h:19
883 msgstr "Freqüència de mostratge:"
884 @@ -194,10 +164,10 @@ msgstr "Títol:"
887 #: ../data/properties.ui.h:21
888 -#: ../src/plugins/properties/bacon-video-widget-properties.c:143
889 -#: ../src/plugins/properties/bacon-video-widget-properties.c:145
890 -#: ../src/plugins/properties/bacon-video-widget-properties.c:147
891 -#: ../src/plugins/properties/bacon-video-widget-properties.c:149
892 +#: ../src/properties/bacon-video-widget-properties.c:145
893 +#: ../src/properties/bacon-video-widget-properties.c:147
894 +#: ../src/properties/bacon-video-widget-properties.c:149
895 +#: ../src/properties/bacon-video-widget-properties.c:151
899 @@ -206,7 +176,14 @@ msgstr "Desconegut"
904 #: ../data/properties.ui.h:23
905 +#: ../src/properties/bacon-video-widget-properties.c:160
906 +msgctxt "Video codec"
910 +#: ../data/properties.ui.h:24
914 @@ -215,13 +192,13 @@ msgid "Add the video to the playlist"
915 msgstr "Afig el vídeo a la llista de reproducció"
917 #: ../data/video-list.ui.h:3 ../src/totem-dnd-menu.c:97
918 -#: ../src/plugins/jamendo/jamendo.ui.h:10
919 +#: ../src/plugins/jamendo/jamendo.ui.h:9
920 msgid "_Add to Playlist"
921 msgstr "_Afig a la llista de reproducció"
924 #: ../data/totem.desktop.in.in.in.h:1 ../data/totem.ui.h:53
925 -#: ../src/totem-object.c:1620
926 +#: ../src/totem-object.c:1666
928 msgstr "Reproductor de pel·lícules"
930 @@ -313,15 +290,15 @@ msgstr "Menú d'à_udio"
931 msgid "About this application"
932 msgstr "Quant a esta aplicació"
934 -#: ../data/totem.ui.h:23
935 -msgid "Audio Output"
936 -msgstr "Eixida d'àudio"
938 -#. Translators: an entry in the "Languages" menu, used to choose the audio language of a DVD
939 -#: ../data/totem.ui.h:24 ../src/totem-menu.c:197
940 +#: ../data/totem.ui.h:22
941 +msgctxt "Aspect ratio"
945 +#: ../data/totem.ui.h:24
946 +msgid "Audio Output"
947 +msgstr "Eixida d'àudio"
949 #: ../data/totem.ui.h:25
950 msgid "Clear the playlist"
951 msgstr "Neteja la llista de reproducció"
952 @@ -582,7 +559,7 @@ msgstr "Quadrat"
953 msgid "Start playing files from last position"
954 msgstr "Inicia la reproducció dels fitxers des de l'última posició"
956 -#: ../data/totem.ui.h:96 ../src/backend/bacon-video-widget-gst-0.10.c:5919
957 +#: ../data/totem.ui.h:96 ../src/backend/bacon-video-widget-gst-0.10.c:6012
961 @@ -788,12 +765,24 @@ msgstr "_Tipus de visualització:"
965 -#: ../data/totem.schemas.in.h:1
966 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:1
968 +"A list of the names of the plugins which are currently active (loaded and "
971 +"Una llista dels noms dels connectors que estan actius actualment (carregats "
972 +"i en funcionament)."
974 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:2
975 +msgid "Active plugins list"
976 +msgstr "Llista dels connectors actius"
978 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:3
979 msgid "Allow the screensaver to activate when playing audio"
981 "Permet que s'active l'estalvi de pantalla quan s'estiga reproduint àudio"
983 -#: ../data/totem.schemas.in.h:2
984 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:4
986 "Allow the screensaver to activate when playing audio. Disable if you have "
987 "monitor-powered speakers."
988 @@ -801,197 +790,161 @@ msgstr ""
989 "Permet que s'active l'estalvi de pantalla quan s'estiga reproduint àudio. No "
990 "ho habiliteu si teniu un monitor amb altaveus."
992 -#: ../data/totem.schemas.in.h:3
993 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:5
995 "Amount of data to buffer for network streams before starting to display the "
996 -"stream (in seconds)"
997 +"stream (in seconds)."
999 "Quantitat de dades (en segons) a emmagatzemar a la memòria intermèdia per "
1000 -"als fluxos de la xarxa abans de començar-los a mostrar"
1001 +"als fluxos de la xarxa abans de començar-los a mostrar."
1003 -#: ../data/totem.schemas.in.h:4
1004 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:6
1006 "Approximate network connection speed, used to select quality on media over "
1007 -"the network: \"0\" for 14.4 Kbps Modem, \"1\" for 19.2 Kbps Modem, \"2\" for "
1008 -"28.8 Kbps Modem, \"3\" for 33.6 Kbps Modem, \"4\" for 34.4 Kbps Modem, \"5\" "
1009 -"for 56 Kbps Modem/ISDN, \"6\" for 112 Kbps Dual ISDN/DSL, \"7\" for 256 Kbps "
1010 -"DSL/Cable, \"8\" for 384 Kbps DSL/Cable, \"9\" for 512 Kbps DSL/Cable, "
1011 -"\"10\" for 1.5 Mbps T1/Intranet/LAN, \"11\" for Intranet/LAN."
1014 -"Velocitat de connexió a la xarxa aproximada, s'utilitza per seleccionar la "
1015 -"qualitat dels recursos obtinguts a través de la xarxa: «0» mòdem de 14.4 "
1016 -"Kbps, «1» mòdem de 19.2 Kbps, «2» mòdem de 28.8 Kbps, «3» mòdem de 33.6 "
1017 -"Kbps, «4» mòdem de 34.4 Kbps, «5» mòdem/XDSI de 56 Kbps, «6» XDSI dual/ADSL "
1018 -"de 112 Kbps, «7» ADSL/Cable de 256 Kbps, «8» ADSL/cable de 384 Kbps, «9» "
1019 -"ADSL/cable de 512 Kbps, «10»T1/intranet/LAN de 1.5 Mbps i «11» intranet/LAN."
1021 -#: ../data/totem.schemas.in.h:5
1022 +"Velocitat estimada de la connexió a la xarxa. S'utilitza per seleccionar la "
1023 +"qualitat dels fitxers multimèdia a través de la xarxa."
1025 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:7
1026 msgid "Default location for the \"Open...\" dialogs"
1027 msgstr "Ubicació predeterminada per als diàlegs «Obri...»"
1029 -#: ../data/totem.schemas.in.h:6
1030 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:8
1032 -"Default location for the \"Open...\" dialogs, default is the current "
1034 +"Default location for the \"Open...\" dialogs. Default is the current "
1037 -"Ubicació predeterminada per als diàlegs «Obri...»; la predeterminada és el "
1039 +"Ubicació predeterminada per als diàlegs «Obri...». La predeterminada és el "
1040 +"directori actual."
1042 -#: ../data/totem.schemas.in.h:7
1043 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:9
1044 msgid "Default location for the \"Take Screenshot\" dialogs"
1045 msgstr "Ubicació predeterminada per als diàlegs «Feu una captura de pantalla»"
1047 -#: ../data/totem.schemas.in.h:8
1048 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:10
1050 -"Default location for the \"Take Screenshot\" dialogs, default is the "
1051 -"Pictures directory"
1052 +"Default location for the \"Take Screenshot\" dialogs. Default is the "
1053 +"Pictures directory."
1055 -"Ubicació predeterminada per als diàlegs «Feu una captura de pantalla»; la "
1056 -"predeterminada és el directori d'imatges"
1057 +"Ubicació predeterminada per als diàlegs «Feu una captura de pantalla». La "
1058 +"predeterminada és el directori d'imatges."
1060 -#: ../data/totem.schemas.in.h:9
1061 -msgid "Encoding charset for subtitle"
1062 -msgstr "Codificació del joc de caràcters dels subtítols"
1063 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:11
1064 +msgid "Encoding character set for subtitle."
1065 +msgstr "Codificació del joc de caràcters dels subtítols."
1067 -#: ../data/totem.schemas.in.h:10
1068 -msgid "Name of the visual effects plugins"
1069 -msgstr "Nom dels connectors d'efectes visuals"
1070 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:12
1071 +msgid "Name of the visual effects plugin"
1072 +msgstr "Nom del connector d'efectes visuals"
1074 -#: ../data/totem.schemas.in.h:11
1075 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:13
1076 msgid "Network buffering threshold"
1077 msgstr "Llindar d'utilització de la memòria intermèdia de xarxa"
1079 -#: ../data/totem.schemas.in.h:12
1080 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:14
1081 msgid "Network connection speed"
1082 msgstr "Velocitat de connexió a la xarxa"
1084 -#: ../data/totem.schemas.in.h:13
1085 -msgid "Pango font description for subtitle rendering"
1086 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:15
1087 +msgid "Pango font description for subtitle rendering."
1089 -"Descripció del tipus de lletra Pango per a la representació dels subtítols"
1090 +"Descripció del tipus de lletra Pango per a la representació dels subtítols."
1092 -#: ../data/totem.schemas.in.h:14
1094 -"Quality settings for the audio visualization: \"0\" for small, \"1\" for "
1095 -"normal, \"2\" for large, \"3\" for extra large."
1097 -"Paràmetres de la qualitat per a la visualització de l'àudio: «0» per a "
1098 -"petita, «1» per a normal, «2» per a gran i «3» per a extra gran."
1099 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:16
1100 +msgid "Quality setting for the audio visualization."
1101 +msgstr "Paràmetre de qualitat per a la visualització d'àudio."
1103 -#: ../data/totem.schemas.in.h:15
1104 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:17
1106 msgstr "Mode de repetició"
1108 # FIXME: "canvas" (josep)
1109 -#: ../data/totem.schemas.in.h:16
1110 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:18
1111 msgid "Resize the canvas automatically on file load"
1112 msgstr "Redimensiona el llenç automàticament en carregar un fitxer"
1114 -#: ../data/totem.schemas.in.h:17
1115 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:19
1116 msgid "Show visual effects when no video is displayed"
1117 msgstr "Mostra efectes visuals quan no es mostre cap vídeo"
1119 -#: ../data/totem.schemas.in.h:18
1120 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:20
1121 msgid "Show visual effects when playing an audio only file."
1122 msgstr "Mostra efectes visuals quan es reproduïsca un fitxer d'àudio."
1124 -#: ../data/totem.schemas.in.h:19
1125 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:21
1126 msgid "Shuffle mode"
1127 msgstr "Mode aleatori"
1129 -#: ../data/totem.schemas.in.h:20
1130 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:22
1131 msgid "Subtitle encoding"
1132 msgstr "Codificació dels subtítols"
1134 -#: ../data/totem.schemas.in.h:21
1135 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:23
1136 msgid "Subtitle font"
1137 msgstr "Tipus de lletra dels subtítols"
1139 -#: ../data/totem.schemas.in.h:22
1140 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:24
1141 msgid "The brightness of the video"
1142 msgstr "La brillantor del vídeo"
1144 -#: ../data/totem.schemas.in.h:23
1145 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:25
1146 msgid "The contrast of the video"
1147 msgstr "El contrast del vídeo"
1149 -#: ../data/totem.schemas.in.h:24
1150 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:26
1151 msgid "The hue of the video"
1152 msgstr "El to del vídeo"
1154 -#: ../data/totem.schemas.in.h:25
1155 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:27
1156 msgid "The saturation of the video"
1157 msgstr "La saturació del vídeo"
1159 -#: ../data/totem.schemas.in.h:26
1160 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:28
1161 msgid "Type of audio output to use"
1162 msgstr "Tipus d'eixida d'àudio a utilitzar"
1164 -#: ../data/totem.schemas.in.h:27
1166 -"Type of audio output to use: \"0\" for stereo, \"1\" for 4-channel output, "
1167 -"\"2\" for 5.0 channel output, \"3\" for 5.1 channel output, \"4\" for AC3 "
1170 -"Tipus d'eixida d'àudio a utilitzar: «0» per a estèreo, «1» per a eixida a 4 "
1171 -"canals, «2» per a eixida amb canals 5.0, «3» per a eixida amb canals 5.1, "
1172 -"«4» per a AC3 directe a la targeta de so."
1174 -#. Translators: This is default subtitle encoding
1175 -#. character set. You can change this to be the most common
1176 -#. encoding for fansub subtitles in your language. File a bug
1177 -#. against Totem, and leave UTF-8 as the default if in doubt.
1178 -#: ../data/totem.schemas.in.h:32
1182 -#: ../data/totem.schemas.in.h:33
1183 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:29
1184 msgid "Visualization quality setting"
1185 msgstr "Paràmetre de la qualitat de la visualització"
1187 -#: ../data/totem.schemas.in.h:34
1188 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:30
1189 msgid "Whether to autoload external chapter files when a movie is loaded"
1191 "Si s'han de carregar automàticament els fitxers de capítols externs quan es "
1192 "carrega una pel·lícula"
1194 -#: ../data/totem.schemas.in.h:35
1195 -msgid "Whether to autoload external chapter files when a movie is loaded."
1197 -"Si s'han de carregar automàticament els fitxers de capítols externs quan es "
1198 -"carrega una pel·lícula."
1200 -#: ../data/totem.schemas.in.h:36
1201 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:31
1202 msgid "Whether to autoload text subtitle files when a movie is loaded"
1204 "Si s'han de carregar automàticament els fitxers de subtítols quan es "
1205 "reproduïsca una pel·lícula"
1207 -#: ../data/totem.schemas.in.h:37
1208 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:32
1209 msgid "Whether to disable deinterlacing for interlaced movies"
1211 "Si s'ha d'inhabilitar el desentrallaçat de les pel·lícules entrellaçades"
1213 -#: ../data/totem.schemas.in.h:38
1214 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:33
1215 msgid "Whether to disable the keyboard shortcuts"
1216 msgstr "Si s'han d'inhabilitar les dreceres de teclat"
1218 -#: ../data/totem.schemas.in.h:39
1219 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:34
1220 msgid "Whether to disable the plugins in the user's home directory"
1222 "Si s'han d'inhabilitar els connectors del directori d'inici de l'usuari"
1224 -#: ../data/totem.schemas.in.h:40
1225 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:35
1226 msgid "Whether to enable debug for the playback engine"
1227 msgstr "Si s'ha d'habilitar la depuració per al motor de reproducció"
1229 -#: ../data/totem.schemas.in.h:41
1230 +#: ../data/org.gnome.totem.gschema.xml.in.in.h:36
1232 "Whether to remember the position of played audio/video files when pausing or "
1236 "Si s'ha de recordar la posició dels fitxers d'àudio/vídeo quan s'hi faça una "
1237 -"pausa o es tanquen."
1238 +"pausa o es tanquen"
1240 #: ../data/uri.ui.h:1
1241 msgid "Enter the _address of the file you would like to open:"
1242 @@ -1007,60 +960,60 @@ msgstr "El fitxer no és un fitxer .desktop vàlid"
1243 msgid "Unrecognized desktop file Version '%s'"
1244 msgstr "Es desconeix la versió «%s» del fitxer d'escriptori"
1246 -#: ../src/eggdesktopfile.c:958
1247 +#: ../src/eggdesktopfile.c:968
1250 msgstr "S'està iniciant %s"
1252 -#: ../src/eggdesktopfile.c:1100
1253 +#: ../src/eggdesktopfile.c:1110
1255 msgid "Application does not accept documents on command line"
1256 msgstr "L'aplicació no accepta documents des de la línia d'ordes"
1258 -#: ../src/eggdesktopfile.c:1168
1259 +#: ../src/eggdesktopfile.c:1178
1261 msgid "Unrecognized launch option: %d"
1262 msgstr "Es desconeix l'orde d'execució: %d"
1264 -#: ../src/eggdesktopfile.c:1373
1265 +#: ../src/eggdesktopfile.c:1383
1267 msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
1269 "No s'ha pogut transformar l'URI del document a una entrada d'escriptori "
1272 -#: ../src/eggdesktopfile.c:1394
1273 +#: ../src/eggdesktopfile.c:1404
1275 msgid "Not a launchable item"
1276 msgstr "No és un element executable"
1278 -#: ../src/eggfileformatchooser.c:235
1279 +#: ../src/eggfileformatchooser.c:240
1281 msgid "File _Format: %s"
1282 msgstr "_Format del fitxer: %s"
1284 -#: ../src/eggfileformatchooser.c:374
1285 +#: ../src/eggfileformatchooser.c:379
1287 msgstr "Tots els fitxers"
1289 -#: ../src/eggfileformatchooser.c:375
1290 +#: ../src/eggfileformatchooser.c:380
1291 msgid "All Supported Files"
1292 msgstr "Tots els fitxers reconeguts"
1294 -#: ../src/eggfileformatchooser.c:384
1295 +#: ../src/eggfileformatchooser.c:389
1296 msgid "By Extension"
1297 msgstr "Per extensió"
1299 -#: ../src/eggfileformatchooser.c:399
1300 +#: ../src/eggfileformatchooser.c:404
1302 msgstr "Format del fitxer"
1304 -#: ../src/eggfileformatchooser.c:417
1305 +#: ../src/eggfileformatchooser.c:422
1306 msgid "Extension(s)"
1309 #. Translators: the parameter is a filename
1310 -#: ../src/eggfileformatchooser.c:652
1311 +#: ../src/eggfileformatchooser.c:657
1314 "The program was not able to find out the file format you want to use for `"
1315 @@ -1068,41 +1021,93 @@ msgid ""
1316 "choose a file format from the list below."
1318 "No s'ha pogut descobrir el format de fitxer que voleu utilitzar per a «%s». "
1319 -"Hauríeu d'assegureu-vos que utilitzeu una extensió coneguda per al fitxer o "
1320 -"escolliu-ne una de la llista de sota."
1321 +"Hauríeu d'assegurar-vos que utilitzeu una extensió coneguda per al fitxer o "
1322 +"trieu-ne una de la llista de sota."
1324 -#: ../src/eggfileformatchooser.c:659
1325 +#: ../src/eggfileformatchooser.c:664
1326 msgid "File format not recognized"
1327 msgstr "No s'ha reconegut el format del fitxer"
1329 -#: ../src/eggsmclient.c:225
1330 +#: ../src/eggsmclient.c:226
1331 msgid "Disable connection to session manager"
1332 msgstr "Inhabilita la connexió al gestor de la sessió"
1334 -#: ../src/eggsmclient.c:228
1335 +#: ../src/eggsmclient.c:229
1336 msgid "Specify file containing saved configuration"
1337 msgstr "Especifica el fitxer que conté la configuració alçada"
1339 -#: ../src/eggsmclient.c:228
1340 +#: ../src/eggsmclient.c:229
1344 -#: ../src/eggsmclient.c:231
1345 +#: ../src/eggsmclient.c:232
1346 msgid "Specify session management ID"
1347 msgstr "Especifica l'identificador de la gestió de la sessió"
1349 -#: ../src/eggsmclient.c:231
1350 +#: ../src/eggsmclient.c:232
1352 msgstr "Identificador"
1354 -#: ../src/eggsmclient.c:252
1355 +#: ../src/eggsmclient.c:253
1356 msgid "Session management options:"
1357 msgstr "Opcions de la gestió de la sessió:"
1359 -#: ../src/eggsmclient.c:253
1360 +#: ../src/eggsmclient.c:254
1361 msgid "Show session management options"
1362 msgstr "Mostra les opcions de la gestió de la sessió"
1365 +#: ../src/properties/bacon-video-widget-properties.c:158
1366 +msgctxt "Dimensions"
1370 +#: ../src/properties/bacon-video-widget-properties.c:163
1371 +#: ../src/properties/bacon-video-widget-properties.c:240
1372 +msgctxt "Video bit rate"
1376 +#: ../src/properties/bacon-video-widget-properties.c:166
1377 +#: ../src/properties/bacon-video-widget-properties.c:250
1378 +msgctxt "Frame rate"
1382 +#: ../src/properties/bacon-video-widget-properties.c:169
1383 +#: ../src/properties/bacon-video-widget-properties.c:273
1384 +msgctxt "Audio bit rate"
1388 +#: ../src/properties/bacon-video-widget-properties.c:237
1393 +#: ../src/properties/bacon-video-widget-properties.c:240
1394 +#: ../src/properties/bacon-video-widget-properties.c:273
1399 +#: ../src/properties/bacon-video-widget-properties.c:247
1401 +msgid "%d frame per second"
1402 +msgid_plural "%d frames per second"
1403 +msgstr[0] "%d quadre per segon"
1404 +msgstr[1] "%d quadres per segon"
1406 +#: ../src/properties/bacon-video-widget-properties.c:276
1411 +#: ../src/properties/bacon-video-widget-properties.c:276
1412 +msgctxt "Sample rate"
1416 #: ../src/totem-audio-preview.c:82
1417 msgid "Audio Preview"
1418 msgstr "Previsualització d'àudio"
1419 @@ -1119,25 +1124,25 @@ msgstr "_Reprodueix"
1423 -#: ../src/totem-fullscreen.c:595
1424 +#: ../src/totem-fullscreen.c:619
1428 -#: ../src/totem-interface.c:172 ../src/totem-interface.c:204
1429 +#: ../src/totem-interface.c:180 ../src/totem-interface.c:223
1431 msgid "Couldn't load the '%s' interface. %s"
1432 msgstr "No s'ha pogut carregar la interfície «%s». %s"
1434 -#: ../src/totem-interface.c:172
1435 +#: ../src/totem-interface.c:180
1436 msgid "The file does not exist."
1437 msgstr "No existeix el fitxer."
1439 -#: ../src/totem-interface.c:174 ../src/totem-interface.c:176
1440 -#: ../src/totem-interface.c:206 ../src/totem-interface.c:208
1441 +#: ../src/totem-interface.c:182 ../src/totem-interface.c:184
1442 +#: ../src/totem-interface.c:225 ../src/totem-interface.c:227
1443 msgid "Make sure that Totem is properly installed."
1444 msgstr "Assegureu-vos que el Totem està instal·lat correctament."
1446 -#: ../src/totem-interface.c:319
1447 +#: ../src/totem-interface.c:346
1449 "Totem is free software; you can redistribute it and/or modify it under the "
1450 "terms of the GNU General Public License as published by the Free Software "
1451 @@ -1149,7 +1154,7 @@ msgstr ""
1452 "per la Free Software Foundation; ja siga la versió 2 de la llicència o bé "
1453 "(si ho preferiu) qualsevol altra versió posterior."
1455 -#: ../src/totem-interface.c:323
1456 +#: ../src/totem-interface.c:350
1458 "Totem is distributed in the hope that it will be useful, but WITHOUT ANY "
1459 "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
1460 @@ -1161,7 +1166,7 @@ msgstr ""
1461 "PER UN PROPÒSIT PARTICULAR. Vegeu la Llicència Pública General de GNU per "
1462 "obtindre'n més detalls."
1464 -#: ../src/totem-interface.c:327
1465 +#: ../src/totem-interface.c:354
1467 "You should have received a copy of the GNU General Public License along with "
1468 "Totem; if not, write to the Free Software Foundation, Inc., 59 Temple Place, "
1469 @@ -1171,7 +1176,7 @@ msgstr ""
1470 "juntament amb el Totem; en cas contrari, escriviu a la Free Software "
1471 "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
1473 -#: ../src/totem-interface.c:330
1474 +#: ../src/totem-interface.c:357
1476 "Totem contains an exception to allow the use of proprietary GStreamer "
1478 @@ -1184,87 +1189,93 @@ msgstr ""
1482 +#. Translators: an entry in the "Languages" menu, used to choose the audio language of a DVD
1483 +#: ../src/totem-menu.c:197
1489 #. * This is not a JPEG image, but a disc image, for example,
1491 -#: ../src/totem-menu.c:739
1492 +#: ../src/totem-menu.c:767
1494 msgid "Play Image '%s'"
1495 msgstr "Reprodueix la imatge «%s»"
1497 -#: ../src/totem-menu.c:742 ../src/totem-menu.c:824
1498 +#: ../src/totem-menu.c:770 ../src/totem-menu.c:853
1501 msgstr "dispositiu%d"
1503 -#: ../src/totem-menu.c:821
1504 +#: ../src/totem-menu.c:850
1506 msgid "Play Disc '%s'"
1507 msgstr "Reprodueix el disc «%s»"
1509 #. This lists the back-end type and version, such as
1510 #. * Movie Player using GStreamer 0.10.1
1511 -#: ../src/totem-menu.c:1172
1512 +#: ../src/totem-menu.c:1201
1514 msgid "Movie Player using %s"
1515 msgstr "Reproductor de vídeo que utilitza el %s"
1517 -#: ../src/totem-menu.c:1176
1518 +#: ../src/totem-menu.c:1205
1519 msgid "Copyright © 2002-2009 Bastien Nocera"
1520 msgstr "Copyright © 2002-2009 Bastien Nocera"
1522 -#: ../src/totem-menu.c:1181 ../browser-plugin/totem-plugin-viewer.c:1166
1523 +#: ../src/totem-menu.c:1210 ../browser-plugin/totem-plugin-viewer.c:1163
1524 msgid "translator-credits"
1526 "Jordi Mallach <jordi@sindominio.net>\n"
1527 "Gil Forcada <gilforcada@guifi.net>"
1529 -#: ../src/totem-menu.c:1185
1530 +#: ../src/totem-menu.c:1214
1531 msgid "Totem Website"
1532 msgstr "Pàgina web del Totem"
1534 -#: ../src/totem-menu.c:1220
1535 +#: ../src/totem-menu.c:1248
1536 msgid "Configure Plugins"
1537 msgstr "Configura els connectors"
1539 #. Translators: %s is the totem version number
1540 -#: ../src/totem-object.c:429
1541 +#: ../src/totem-object.c:473
1546 -#: ../src/totem-object.c:999 ../browser-plugin/totem-plugin-viewer.c:369
1547 +#: ../src/totem-object.c:1046 ../browser-plugin/totem-plugin-viewer.c:368
1549 msgstr "S'està reproduint"
1551 -#: ../src/totem-object.c:1001 ../src/totem-options.c:51
1552 +#: ../src/totem-object.c:1048 ../src/totem-options.c:52
1554 msgstr "Fes una pausa"
1556 -#: ../src/totem-object.c:1006 ../browser-plugin/totem-plugin-viewer.c:365
1557 +#: ../src/totem-object.c:1053 ../browser-plugin/totem-plugin-viewer.c:364
1561 #. Translators: this refers to a media file
1562 -#: ../src/totem-object.c:1008 ../src/totem-object.c:1018
1563 -#: ../src/totem-options.c:50
1564 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:76
1565 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:88
1566 +#: ../src/totem-object.c:1055 ../src/totem-object.c:1065
1567 +#: ../src/totem-options.c:51
1568 +#: ../src/plugins/coherence_upnp/coherence_upnp.py:84
1569 +#: ../src/plugins/coherence_upnp/coherence_upnp.py:96
1573 -#: ../src/totem-object.c:1013 ../src/totem-object.c:1612
1574 -#: ../src/totem-statusbar.c:96 ../browser-plugin/totem-plugin-viewer.c:353
1575 +#: ../src/totem-object.c:1060 ../src/totem-object.c:1658
1576 +#: ../src/totem-statusbar.c:115 ../browser-plugin/totem-plugin-viewer.c:352
1581 -#: ../src/totem-object.c:1094 ../src/totem-object.c:1121
1582 -#: ../src/totem-object.c:1742 ../src/totem-object.c:1905
1583 +#: ../src/totem-object.c:1141 ../src/totem-object.c:1168
1584 +#: ../src/totem-object.c:1798 ../src/totem-object.c:1962
1586 msgid "Totem could not play '%s'."
1587 msgstr "El Totem no ha pogut reproduir «%s»."
1589 -#: ../src/totem-object.c:1198
1590 +#: ../src/totem-object.c:1245
1593 "Totem could not play this media (%s) although a plugin is present to handle "
1594 @@ -1273,7 +1284,7 @@ msgstr ""
1595 "El Totem no ha pogut reproduir este medi (%s) encara que hi ha un connector "
1598 -#: ../src/totem-object.c:1199
1599 +#: ../src/totem-object.c:1246
1601 "You might want to check that a disc is present in the drive and that it is "
1602 "correctly configured."
1603 @@ -1281,11 +1292,11 @@ msgstr ""
1604 "Hauríeu de comprovar que hi ha un disc en la unitat i que està correctament "
1607 -#: ../src/totem-object.c:1207
1608 +#: ../src/totem-object.c:1254
1609 msgid "More information about media plugins"
1610 msgstr "Més informació sobre els connectors de medi"
1612 -#: ../src/totem-object.c:1208
1613 +#: ../src/totem-object.c:1255
1615 "Please install the necessary plugins and restart Totem to be able to play "
1617 @@ -1293,7 +1304,7 @@ msgstr ""
1618 "Instal·leu els connectors necessaris i reinicieu el Totem per poder "
1619 "reproduir este medi."
1621 -#: ../src/totem-object.c:1210
1622 +#: ../src/totem-object.c:1257
1625 "Totem cannot play this type of media (%s) because it does not have the "
1626 @@ -1302,7 +1313,7 @@ msgstr ""
1627 "El Totem no pot reproduir este tipus de medi (%s) perquè no té els "
1628 "connectors adequats per poder llegir-lo del disc."
1630 -#: ../src/totem-object.c:1212
1631 +#: ../src/totem-object.c:1259
1634 "Totem cannot play this type of media (%s) because you do not have the "
1635 @@ -1311,139 +1322,137 @@ msgstr ""
1636 "El Totem no pot reproduir este tipus de medi (%s) perquè no teniu el "
1637 "connector adequat per gestionar-lo."
1639 -#: ../src/totem-object.c:1215
1640 +#: ../src/totem-object.c:1262
1642 msgid "Totem cannot play this type of media (%s) because it is not supported."
1644 "El Totem no pot reproduir este tipus de medi (%s) perquè no el sap utilitzar."
1646 -#: ../src/totem-object.c:1216
1647 +#: ../src/totem-object.c:1263
1648 msgid "Please insert another disc to play back."
1649 msgstr "Inseriu un altre disc a reproduir."
1651 -#: ../src/totem-object.c:1251
1652 +#: ../src/totem-object.c:1299
1653 msgid "Totem was not able to play this disc."
1654 msgstr "El Totem no pot reproduir este disc."
1656 -#: ../src/totem-object.c:1252 ../src/totem-object.c:4186
1657 +#: ../src/totem-object.c:1300 ../src/totem-object.c:4280
1659 msgstr "Sense motiu."
1661 -#: ../src/totem-object.c:1266
1662 +#: ../src/totem-object.c:1314
1663 msgid "Totem does not support playback of Audio CDs"
1664 msgstr "El Totem no sap reproduir els CD d'àudio"
1666 -#: ../src/totem-object.c:1267
1667 +#: ../src/totem-object.c:1315
1668 msgid "Please consider using a music player or a CD extractor to play this CD"
1670 "Podeu utilitzar un reproductor de música o un extractor de CD per reproduir-"
1673 -#: ../src/totem-object.c:1748
1674 +#: ../src/totem-object.c:1804
1675 msgid "No error message"
1676 msgstr "No hi ha cap missatge d'error"
1678 -#: ../src/totem-object.c:2134
1679 +#: ../src/totem-object.c:2197
1680 msgid "Totem could not display the help contents."
1681 msgstr "El Totem no ha pogut mostrar els continguts de l'ajuda."
1683 -#: ../src/totem-object.c:2489 ../src/totem-object.c:2491
1684 -#: ../browser-plugin/totem-plugin-viewer.c:1469
1685 +#: ../src/totem-object.c:2535 ../src/totem-object.c:2537
1686 +#: ../browser-plugin/totem-plugin-viewer.c:1466
1687 msgid "An error occurred"
1688 msgstr "S'ha produït un error"
1690 -#: ../src/totem-object.c:4028 ../src/totem-object.c:4030
1691 +#: ../src/totem-object.c:4114 ../src/totem-object.c:4116
1692 msgid "Previous Chapter/Movie"
1693 msgstr "Capítol/pel·lícula anterior"
1695 -#: ../src/totem-object.c:4037 ../src/totem-object.c:4039
1696 +#: ../src/totem-object.c:4123 ../src/totem-object.c:4125
1697 msgid "Play / Pause"
1698 msgstr "Reprodueix / Fes una pausa"
1700 -#: ../src/totem-object.c:4047 ../src/totem-object.c:4049
1701 +#: ../src/totem-object.c:4133 ../src/totem-object.c:4135
1702 msgid "Next Chapter/Movie"
1703 msgstr "Capítol/pel·lícula següent"
1705 -#: ../src/totem-object.c:4061 ../src/totem-object.c:4063
1706 +#. Translators: this is the tooltip text for the fullscreen button in the controls box in Totem's main window.
1707 +#. Translators: this is the accessibility text for the fullscreen button in the controls box in Totem's main window.
1708 +#: ../src/totem-object.c:4147 ../src/totem-object.c:4149
1710 msgstr "Pantalla completa"
1712 -#: ../src/totem-object.c:4186
1713 +#: ../src/totem-object.c:4280
1714 msgid "Totem could not startup."
1715 msgstr "No s'ha pogut executar el Totem."
1717 -#: ../src/totem-open-location.c:179
1718 +#: ../src/totem-open-location.c:182
1719 msgid "Open Location..."
1720 msgstr "Obri una ubicació..."
1722 -#: ../src/totem-options.c:48
1723 +#: ../src/totem-options.c:49
1724 msgid "Enable debug"
1725 msgstr "Habilita la depuració"
1727 -#: ../src/totem-options.c:49
1728 +#: ../src/totem-options.c:50
1730 msgstr "Reprodueix/Fes una pausa"
1732 -#: ../src/totem-options.c:52
1733 +#: ../src/totem-options.c:53
1737 -#: ../src/totem-options.c:53
1738 +#: ../src/totem-options.c:54
1742 -#: ../src/totem-options.c:54
1743 +#: ../src/totem-options.c:55
1744 msgid "Seek Forwards"
1745 msgstr "Cerca avant"
1747 -#: ../src/totem-options.c:55
1748 +#: ../src/totem-options.c:56
1749 msgid "Seek Backwards"
1750 msgstr "Cerca cap arrere"
1752 -#: ../src/totem-options.c:56
1753 +#: ../src/totem-options.c:57
1755 msgstr "Apuja el volum"
1757 -#: ../src/totem-options.c:57
1758 +#: ../src/totem-options.c:58
1760 msgstr "Abaixa el volum"
1762 -#: ../src/totem-options.c:58
1763 +#: ../src/totem-options.c:59
1765 msgstr "Silencia el so"
1767 -#: ../src/totem-options.c:59
1768 +#: ../src/totem-options.c:60
1769 msgid "Toggle Fullscreen"
1770 msgstr "Commuta a pantalla completa"
1772 -#: ../src/totem-options.c:60
1773 +#: ../src/totem-options.c:61
1774 msgid "Show/Hide Controls"
1775 msgstr "Mostra/amaga els controls"
1777 -#: ../src/totem-options.c:61
1778 +#: ../src/totem-options.c:62
1782 #. Translators: this refers to a media file
1783 -#: ../src/totem-options.c:62
1784 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:79
1785 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:91
1786 +#: ../src/totem-options.c:63
1787 +#: ../src/plugins/coherence_upnp/coherence_upnp.py:87
1788 +#: ../src/plugins/coherence_upnp/coherence_upnp.py:99
1790 msgstr "Afig a la cua"
1792 -#: ../src/totem-options.c:63
1793 +#: ../src/totem-options.c:64
1797 -#: ../src/totem-options.c:64
1798 -msgid "Don't connect to an already-running instance"
1799 -msgstr "No et connectes a una instància que ja estiga funcionant"
1801 #: ../src/totem-options.c:65
1805 -#. Translators: help for a (hidden) command line option to specify a playlist entry to start playing on load
1806 +#. Translators: help for a (hidden) command line option to specify (the zero-based index of) a playlist entry to start playing once Totem's finished loading
1807 #: ../src/totem-options.c:67
1808 msgid "Playlist index"
1809 msgstr "Índex de la llista de reproducció"
1810 @@ -1452,84 +1461,63 @@ msgstr "Índex de la llista de reproducció"
1811 msgid "Movies to play"
1812 msgstr "Pel·lícules a reproduir"
1814 +#: ../src/totem-options.c:117
1815 +msgid "Can't enqueue and replace at the same time"
1816 +msgstr "No es pot enviar a la cua i reemplaçar alhora"
1818 #. By extension entry
1819 -#: ../src/totem-playlist.c:157
1820 +#: ../src/totem-playlist.c:161
1821 msgid "MP3 ShoutCast playlist"
1822 msgstr "Llista de reproducció MP3 ShoutCast"
1824 -#: ../src/totem-playlist.c:158
1825 +#: ../src/totem-playlist.c:162
1826 msgid "MP3 audio (streamed)"
1827 msgstr "Àudio MP3 (en flux)"
1829 -#: ../src/totem-playlist.c:159
1830 +#: ../src/totem-playlist.c:163
1831 msgid "MP3 audio (streamed, DOS format)"
1832 msgstr "Àudio MP3 (en flux, format DOS)"
1834 -#: ../src/totem-playlist.c:160
1835 +#: ../src/totem-playlist.c:164
1836 msgid "XML Shareable Playlist"
1837 msgstr "Llista de reproducció XML per compartir"
1839 #. This is "Title 3", where title is a DVD title
1840 #. * Note: NOT a DVD chapter
1841 -#: ../src/totem-playlist.c:359
1842 +#: ../src/totem-playlist.c:363
1847 -#: ../src/totem-playlist.c:458
1848 +#: ../src/totem-playlist.c:462
1849 msgid "Could not save the playlist"
1850 msgstr "No s'ha pogut alçar la llista de reproducció"
1852 -#: ../src/totem-playlist.c:1029
1853 +#: ../src/totem-playlist.c:1037
1854 msgid "Save Playlist"
1855 msgstr "Alça la llista de reproducció"
1857 #. translators: Playlist is the default saved playlist filename,
1858 #. * without the suffix
1859 -#: ../src/totem-playlist.c:1041 ../src/totem-sidebar.c:145
1860 +#: ../src/totem-playlist.c:1049 ../src/totem-sidebar.c:140
1862 msgstr "Llista de reproducció"
1864 -#: ../src/totem-playlist.c:1863
1865 +#: ../src/totem-playlist.c:1869
1867 msgid "The playlist '%s' could not be parsed. It might be damaged."
1869 "No s'ha pogut analitzar la llista de reproducció «%s», pot estar malmesa."
1871 -#: ../src/totem-playlist.c:1864
1872 +#: ../src/totem-playlist.c:1870
1873 msgid "Playlist error"
1874 msgstr "S'ha produït un error de la llista de reproducció"
1876 -#: ../src/totem-preferences.c:108
1877 -msgid "Enable visual effects?"
1878 -msgstr "Voleu habilitar els efectes visuals?"
1880 -#: ../src/totem-preferences.c:110
1882 -"It seems you are running Totem remotely.\n"
1883 -"Are you sure you want to enable the visual effects?"
1885 -"Pareix que esteu executant el Totem remotament.\n"
1886 -"Esteu segur que voleu habilitar els efectes visuals?"
1888 -#: ../src/totem-preferences.c:405
1889 -msgid "Changing the visuals effect type will require a restart to take effect."
1891 -"Si canvieu els tipus d'efectes visuals, haureu de reiniciar perquè els "
1892 -"canvis siguen efectius."
1894 -#: ../src/totem-preferences.c:489
1896 -"The change of audio output type will only take effect when Totem is "
1899 -"El canvi del tipus d'eixida d'àudio serà efectiu quan es reinicie el Totem."
1901 -#: ../src/totem-preferences.c:593
1902 +#: ../src/totem-preferences.c:295
1904 msgstr "Preferències"
1906 -#: ../src/totem-preferences.c:766
1907 +#: ../src/totem-preferences.c:451
1908 msgid "Select Subtitle Font"
1909 msgstr "Seleccioneu el tipus de lletra per als subtítols"
1911 @@ -1539,45 +1527,45 @@ msgstr "Seleccioneu el tipus de lletra per als subtítols"
1913 msgstr "Àudio/Vídeo"
1915 -#: ../src/totem-statusbar.c:91
1916 +#: ../src/totem-statusbar.c:110
1918 msgstr "0:00 / 0:00"
1920 -#: ../src/totem-statusbar.c:113
1921 +#: ../src/totem-statusbar.c:133
1923 msgid "%s (Streaming)"
1924 msgstr "%s (en flux)"
1926 #. Elapsed / Total Length
1927 -#: ../src/totem-statusbar.c:120 ../src/totem-time-label.c:64
1928 +#: ../src/totem-statusbar.c:140 ../src/totem-time-label.c:64
1933 #. Seeking to Time / Total Length
1934 -#: ../src/totem-statusbar.c:123 ../src/totem-time-label.c:67
1935 +#: ../src/totem-statusbar.c:143 ../src/totem-time-label.c:67
1937 msgid "Seek to %s / %s"
1938 msgstr "Salta a %s / %s"
1940 -#: ../src/totem-statusbar.c:217
1941 +#: ../src/totem-statusbar.c:239
1943 msgstr "S'està omplint la memòria intermèdia"
1946 -#: ../src/totem-statusbar.c:228
1947 +#: ../src/totem-statusbar.c:250
1952 #. eg: Paused, 0:32 / 1:05
1953 -#: ../src/totem-statusbar.c:303
1954 +#: ../src/totem-statusbar.c:325
1959 #. eg: Buffering, 75 %
1960 -#: ../src/totem-statusbar.c:308
1961 +#: ../src/totem-statusbar.c:330
1965 @@ -1724,14 +1712,14 @@ msgstr "Occidental"
1969 -#: ../src/totem-video-list.c:305
1970 +#: ../src/totem-video-list.c:329
1971 msgid "No video URI"
1972 msgstr "No hi ha cap URI de vídeo"
1974 #. Translators: The first string is "Filename" (as translated); the second is an actual filename.
1975 #. The third string is "Resolution" (as translated); the fourth and fifth are screenshot height and width, respectively.
1976 #. The sixth string is "Duration" (as translated); the seventh is the movie duration in words.
1977 -#: ../src/totem-video-thumbnailer.c:675
1978 +#: ../src/totem-video-thumbnailer.c:689
1982 @@ -1742,70 +1730,52 @@ msgstr ""
1983 "<b>%s</b>: %d×%d\n"
1986 -#: ../src/totem-video-thumbnailer.c:676
1987 +#: ../src/totem-video-thumbnailer.c:690
1989 msgstr "Nom del fitxer"
1991 -#: ../src/totem-video-thumbnailer.c:678
1992 +#: ../src/totem-video-thumbnailer.c:692
1996 -#: ../src/totem-video-thumbnailer.c:681
1997 +#: ../src/totem-video-thumbnailer.c:695
2001 -#: ../src/totem-uri.c:502 ../src/plugins/chapters/totem-chapters.c:1045
2002 +#: ../src/totem-uri.c:504 ../src/plugins/chapters/totem-chapters.c:998
2004 msgstr "Tots els fitxers"
2006 -#: ../src/totem-uri.c:507 ../src/plugins/chapters/totem-chapters.c:1042
2007 +#: ../src/totem-uri.c:509 ../src/plugins/chapters/totem-chapters.c:995
2008 msgid "Supported files"
2009 msgstr "Fitxers permesos"
2011 -#: ../src/totem-uri.c:519
2012 +#: ../src/totem-uri.c:521
2014 msgstr "Fitxers d'àudio"
2016 -#: ../src/totem-uri.c:527
2017 +#: ../src/totem-uri.c:529
2019 msgstr "Fitxers de vídeo"
2021 -#: ../src/totem-uri.c:537
2022 +#: ../src/totem-uri.c:539
2023 msgid "Subtitle files"
2024 msgstr "Fitxers de subtítols"
2026 -#: ../src/totem-uri.c:589
2027 +#: ../src/totem-uri.c:591
2028 msgid "Select Text Subtitles"
2029 msgstr "Seleccioneu els subtítols"
2031 -#: ../src/totem-uri.c:651
2032 +#: ../src/totem-uri.c:654
2033 msgid "Select Movies or Playlists"
2034 msgstr "Seleccioneu pel·lícules o llistes de reproducció"
2036 -#: ../src/totem.c:93
2037 -msgid "Could not open link"
2038 -msgstr "No s'ha pogut obrir l'enllaç"
2040 -#: ../src/totem.c:151 ../src/totem.c:177
2041 -#: ../browser-plugin/totem-plugin-viewer.c:666
2042 -#: ../browser-plugin/totem-plugin-viewer.c:1863
2043 -msgid "Totem Movie Player"
2044 -msgstr "Reproductor de vídeo Totem"
2046 -#: ../src/totem.c:152 ../browser-plugin/totem-plugin-viewer.c:2286
2047 -msgid "Could not initialize the thread-safe libraries."
2048 -msgstr "No s'han pogut inicialitzar les biblioteques que permeten fils segurs."
2050 -#: ../src/totem.c:152
2051 -msgid "Verify your system installation. Totem will now exit."
2052 -msgstr "Verifiqueu la instal·lació del sistema. El Totem eixirà ara."
2054 -#. Handle command line arguments
2055 -#: ../src/totem.c:160
2057 +#: ../src/totem.c:201
2058 msgid "- Play movies and songs"
2059 msgstr "- Reproduïu vídeos i cançons"
2061 -#: ../src/totem.c:169
2062 +#: ../src/totem.c:212
2066 @@ -1815,76 +1785,82 @@ msgstr ""
2067 "Executeu «%s --help» per veure una llista completa de les opcions de la "
2070 -#: ../src/totem.c:186
2071 -msgid "Totem could not initialize the configuration engine."
2072 -msgstr "El Totem no ha pogut inicialitzar el motor de configuració."
2073 +#: ../src/totem.c:254 ../src/totem.c:263
2074 +#: ../browser-plugin/totem-plugin-viewer.c:663
2075 +#: ../browser-plugin/totem-plugin-viewer.c:1861
2076 +msgid "Totem Movie Player"
2077 +msgstr "Reproductor de vídeo Totem"
2079 +#: ../src/totem.c:255 ../browser-plugin/totem-plugin-viewer.c:2302
2080 +msgid "Could not initialize the thread-safe libraries."
2081 +msgstr "No s'han pogut inicialitzar les biblioteques que permeten fils segurs."
2083 -#: ../src/totem.c:186
2084 -msgid "Make sure that GNOME is properly installed."
2085 -msgstr "Assegureu-vos que el GNOME està instal·lat correctament."
2086 +#: ../src/totem.c:255
2087 +msgid "Verify your system installation. Totem will now exit."
2088 +msgstr "Verifiqueu la instal·lació del sistema. El Totem eixirà ara."
2090 -#: ../src/backend/bacon-video-widget-gst-0.10.c:1772
2091 +#: ../src/backend/bacon-video-widget-gst-0.10.c:1850
2092 msgid "Password requested for RTSP server"
2093 msgstr "El servidor de RTSP sol·licita la contrasenya"
2095 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3019
2096 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3023
2097 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3124
2098 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3128
2100 msgid "Audio Track #%d"
2101 msgstr "Pista d'àudio #%d"
2103 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3051
2104 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3055
2105 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3156
2106 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3160
2108 msgid "Subtitle #%d"
2109 msgstr "Subtítol #%d"
2111 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3464
2112 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3569
2114 "The requested audio output was not found. Please select another audio output "
2115 "in the Multimedia Systems Selector."
2117 -"No s'ha trobat la eixida d'àudio demanada. Seleccioneu una altra eixida "
2118 +"No s'ha trobat l'eixida d'àudio demanada. Seleccioneu una altra eixida "
2119 "d'àudio en el selector de sistemes multimèdia."
2121 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3469
2122 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3574
2123 msgid "Location not found."
2124 msgstr "No s'ha trobat la ubicació."
2126 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3473
2127 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3578
2129 "Could not open location; you might not have permission to open the file."
2131 "No s'ha pogut obrir la ubicació. Potser no teniu permís per obrir el fitxer."
2133 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3484
2134 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3589
2136 "The video output is in use by another application. Please close other video "
2137 "applications, or select another video output in the Multimedia Systems "
2140 -"Una altra aplicació ja utilitza la eixida de vídeo. Tanqueu les altres "
2141 +"Una altra aplicació ja utilitza l'eixida de vídeo. Tanqueu les altres "
2142 "aplicacions de vídeo, o seleccioneu una altra eixida de vídeo al selector de "
2143 "sistemes multimèdia."
2145 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3490
2146 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3595
2148 "The audio output is in use by another application. Please select another "
2149 "audio output in the Multimedia Systems Selector. You may want to consider "
2150 "using a sound server."
2152 -"Una altra aplicació ja utilitza la eixida d'àudio. Seleccioneu una altra "
2153 +"Una altra aplicació ja utilitza l'eixida d'àudio. Seleccioneu una altra "
2154 "eixida d'àudio al selector de sistemes multimèdia. Potser hauríeu de "
2155 "considerar utilitzar un servidor de so."
2157 #. should be exactly one missing thing (source or converter)
2158 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3508
2159 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3514
2160 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3613
2161 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3619
2163 msgid "The playback of this movie requires a %s plugin which is not installed."
2164 msgstr "Hauríeu d'instal·lar el connector %s per reproduir esta pel·lícula."
2166 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3515
2167 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3620
2170 "The playback of this movie requires the following decoders which are not "
2171 @@ -1897,34 +1873,34 @@ msgstr ""
2175 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3540
2176 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3645
2178 "Cannot play this file over the network. Try downloading it to disk first."
2180 "No es pot reproduir este fitxer a través de la xarxa. Proveu de baixar-lo al "
2183 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3612
2184 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3717
2185 msgid "Media file could not be played."
2186 msgstr "No s'ha pogut reproduir el fitxer multimèdia."
2188 -#: ../src/backend/bacon-video-widget-gst-0.10.c:5915
2189 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6008
2193 -#: ../src/backend/bacon-video-widget-gst-0.10.c:5917
2194 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6010
2198 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6264
2199 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6357
2200 msgid "Too old version of GStreamer installed."
2201 msgstr "La versió del GStreamer instal·lada és massa antiga."
2203 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6271
2204 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6364
2205 msgid "Media contains no supported video streams."
2206 msgstr "El medi no conté cap flux de vídeo conegut."
2208 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6784
2209 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6847
2211 "Failed to create a GStreamer play object. Please check your GStreamer "
2213 @@ -1932,42 +1908,42 @@ msgstr ""
2214 "No s'ha pogut crear un objecte de reproducció del GStreamer. Comproveu la "
2215 "instal·lació del GStreamer."
2217 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6898
2218 -#: ../src/backend/bacon-video-widget-gst-0.10.c:7033
2219 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6958
2220 +#: ../src/backend/bacon-video-widget-gst-0.10.c:7093
2222 "Failed to open video output. It may not be available. Please select another "
2223 "video output in the Multimedia Systems Selector."
2225 -"No s'ha pogut obrir la eixida de vídeo. Potser no està disponible. "
2226 +"No s'ha pogut obrir l'eixida de vídeo. Potser no està disponible. "
2227 "Seleccioneu una altra eixida de vídeo al selector de sistemes multimèdia."
2229 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6910
2230 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6970
2232 "Could not find the video output. You may need to install additional "
2233 "GStreamer plugins, or select another video output in the Multimedia Systems "
2236 -"No s'ha trobat la eixida de vídeo. Pot ser que hàgeu d'instal·lar connectors "
2237 +"No s'ha trobat l'eixida de vídeo. Pot ser que hàgeu d'instal·lar connectors "
2238 "del GStreamer, o bé seleccionar una altra eixida de vídeo al selector de "
2239 "sistemes multimèdia."
2241 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6945
2242 +#: ../src/backend/bacon-video-widget-gst-0.10.c:7005
2244 "Failed to open audio output. You may not have permission to open the sound "
2245 "device, or the sound server may not be running. Please select another audio "
2246 "output in the Multimedia Systems Selector."
2248 -"No s'ha pogut obrir la eixida d'àudio. Pot ser que no tingueu permís per "
2249 +"No s'ha pogut obrir l'eixida d'àudio. Pot ser que no tingueu permís per "
2250 "obrir el dispositiu d'àudio, o que el servidor de so no s'estiga executant. "
2251 "Seleccioneu una altra eixida de so al selector de sistemes multimèdia."
2253 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6965
2254 +#: ../src/backend/bacon-video-widget-gst-0.10.c:7025
2256 "Could not find the audio output. You may need to install additional "
2257 "GStreamer plugins, or select another audio output in the Multimedia Systems "
2260 -"No s'ha trobat la eixida d'àudio. Pot ser que hàgeu d'instal·lar connectors "
2261 +"No s'ha trobat l'eixida d'àudio. Pot ser que hàgeu d'instal·lar connectors "
2262 "del GStreamer addicionals, o bé seleccionar una altra eixida d'àudio al "
2263 "selector de sistemes multimèdia."
2265 @@ -2034,150 +2010,140 @@ msgstr "%s %s"
2269 -#: ../src/plugins/totem-plugin-manager.c:51
2273 -#: ../src/plugins/totem-plugin-manager.c:52
2277 -#: ../src/plugins/totem-plugins-engine.c:603
2280 -"Unable to activate plugin %s.\n"
2283 -"No s'ha pogut activar el connector %s.\n"
2286 -#: ../src/plugins/totem-plugins-engine.c:606
2288 -msgid "Unable to activate plugin %s"
2289 -msgstr "No s'ha pogut activar el connector %s"
2291 -#: ../src/plugins/totem-plugins-engine.c:608
2292 -msgid "Plugin Error"
2293 -msgstr "Error del connector"
2295 -#: ../src/plugins/bemused/bemused.totem-plugin.in.h:1
2296 +#: ../src/plugins/bemused/bemused.plugin.in.h:1
2300 -#: ../src/plugins/bemused/bemused.totem-plugin.in.h:2
2301 +#: ../src/plugins/bemused/bemused.plugin.in.h:2
2302 msgid "Control Totem through a mobile phone with a Bemused client"
2303 msgstr "Controleu el Totem a través d'un telèfon mòbil amb un client Bemused"
2305 #. Translators: the parameter is a number used to identify this playlist entry
2306 -#: ../src/plugins/bemused/totem-bemused.c:186
2307 +#: ../src/plugins/bemused/totem-bemused.c:171
2310 msgstr "%d desconegut"
2312 -#: ../src/plugins/bemused/totem-bemused.c:609
2313 +#: ../src/plugins/bemused/totem-bemused.c:597
2314 msgid "Totem Bemused Server"
2315 msgstr "Servidor Bemused del Totem"
2318 -#: ../src/plugins/bemused/totem-bemused.c:611
2319 +#: ../src/plugins/bemused/totem-bemused.c:599
2320 msgid "Totem Bemused Server version 1.0"
2321 msgstr "Servidor Bemused del Totem (versió 1.0)"
2323 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:77
2324 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:65
2325 msgid "_Create Video Disc..."
2326 msgstr "_Crea un disc de vídeo..."
2328 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:78
2329 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:66
2330 msgid "Create a video DVD or a (S)VCD from the currently opened movie"
2331 msgstr "Crea un DVD de vídeo o un (S)VCD a partir de la pel·lícula actual"
2333 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:80
2334 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:68
2335 msgid "Copy Vide_o DVD..."
2336 msgstr "C_opia un DVD de vídeo..."
2338 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:81
2339 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:69
2340 msgid "Copy the currently playing video DVD"
2341 msgstr "Copia el DVD que s'està reproduint"
2343 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:83
2344 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:71
2345 msgid "Copy (S)VCD..."
2346 msgstr "Copia un (S)VCD..."
2348 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:84
2349 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:72
2350 msgid "Copy the currently playing (S)VCD"
2351 msgstr "Copia el (S)VCD que s'està reproduint"
2353 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:124
2354 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:129
2355 msgid "The video disc could not be duplicated."
2356 msgstr "No s'ha pogut duplicar el disc de vídeo."
2358 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:128
2359 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:279
2360 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:131
2361 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:276
2362 msgid "The movie could not be recorded."
2363 msgstr "No s'ha pogut enregistrar la pel·lícula."
2365 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:160
2366 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:170
2367 -#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:266
2368 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:157
2369 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:167
2370 +#: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:263
2371 msgid "Unable to write a project."
2372 msgstr "No s'ha pogut escriure un projecte."
2374 -#: ../src/plugins/brasero-disc-recorder/brasero-disc-recorder.totem-plugin.in.h:1
2375 +#: ../src/plugins/brasero-disc-recorder/brasero-disc-recorder.plugin.in.h:1
2376 msgid "Records (S)VCDs or video DVDs"
2377 msgstr "Enregistra (S)VCD o DVD de vídeo"
2379 -#: ../src/plugins/brasero-disc-recorder/brasero-disc-recorder.totem-plugin.in.h:2
2380 +#: ../src/plugins/brasero-disc-recorder/brasero-disc-recorder.plugin.in.h:2
2381 msgid "Video Disc Recorder"
2382 msgstr "Enregistrador de discs de vídeo"
2384 -#: ../src/plugins/chapters/chapters.totem-plugin.in.h:1
2385 -#: ../src/plugins/chapters/totem-chapters.c:1193
2386 +#: ../src/plugins/chapters/chapters.plugin.in.h:1
2387 +#: ../src/plugins/chapters/totem-chapters.c:1137
2391 -#: ../src/plugins/chapters/chapters.totem-plugin.in.h:2
2392 -msgid "Chapters support"
2393 -msgstr "Permet l'ús de capítols"
2394 +#: ../src/plugins/chapters/chapters.plugin.in.h:2
2395 +msgid "Support chapter markers in movies."
2396 +msgstr "Permet posar marcadors de capítols a les pel·lícules."
2398 #: ../src/plugins/chapters/chapters-edit.ui.h:1
2399 -msgid "Enter new name for a chapter:"
2400 -msgstr "Introduïu el nom per al capítol:"
2401 +msgid "Name for new chapter:"
2402 +msgstr "El nom del capítol nou:"
2404 +#: ../src/plugins/chapters/chapters-list.ui.h:1
2405 +msgid "Add Chapter..."
2406 +msgstr "Afig un capítol..."
2408 #: ../src/plugins/chapters/chapters-list.ui.h:2
2409 -msgid "Continue to watch movie without loaded chapters"
2410 -msgstr "Continua reproduint la pel·lícula sense carregar els capítols"
2411 +msgid "Add New Chapters"
2412 +msgstr "Afig capítols nous"
2414 #: ../src/plugins/chapters/chapters-list.ui.h:3
2415 -msgid "Continue without"
2416 -msgstr "Continua sense"
2417 +msgid "Create a new chapter list for the movie"
2418 +msgstr "Crea una llista de capítols nova per a la pel·lícula"
2420 #: ../src/plugins/chapters/chapters-list.ui.h:4
2421 -msgid "Go to chapter"
2422 +msgid "Go to Chapter"
2423 msgstr "Vés al capítol"
2425 #: ../src/plugins/chapters/chapters-list.ui.h:5
2426 -msgid "Load chapters from external file"
2427 -msgstr "Carrega els capítols des d'un fitxer extern"
2428 +msgid "Go to the chapter in the movie"
2429 +msgstr "Vés al capítol de la pel·lícula"
2431 #: ../src/plugins/chapters/chapters-list.ui.h:6
2432 -msgid "Load chapters..."
2433 +msgid "Load Chapters..."
2434 msgstr "Carrega els capítols..."
2436 #: ../src/plugins/chapters/chapters-list.ui.h:7
2437 -msgid "No chapters data"
2438 -msgstr "No hi ha informació sobre capítols"
2439 +msgid "Load chapters from an external CMML file"
2440 +msgstr "Carrega els capítols des d'un fitxer CMML extern"
2442 +#: ../src/plugins/chapters/chapters-list.ui.h:8
2443 +msgid "No chapter data"
2444 +msgstr "No hi ha informació del capítol"
2446 #: ../src/plugins/chapters/chapters-list.ui.h:9
2447 -msgid "Remove chapter from the list"
2448 -msgstr "Suprimeix el capítol de la llista"
2449 +msgid "Remove Chapter"
2450 +msgstr "Suprimeix el capítol"
2452 #: ../src/plugins/chapters/chapters-list.ui.h:10
2453 +msgid "Remove the chapter from the list"
2454 +msgstr "Suprimeix el capítol de la llista"
2456 +#: ../src/plugins/chapters/chapters-list.ui.h:11
2457 msgid "Save Changes"
2458 msgstr "Alça els canvis"
2460 -#: ../src/plugins/chapters/chapters-list.ui.h:11
2463 +#: ../src/plugins/chapters/chapters-list.ui.h:12
2464 +msgid "_Go to Chapter"
2465 +msgstr "_Vés al capítol"
2467 +#: ../src/plugins/chapters/chapters-list.ui.h:13
2468 +msgid "_Remove Chapter"
2469 +msgstr "_Suprimeix el capítol"
2471 #: ../src/plugins/chapters/totem-chapters.c:56
2473 @@ -2188,57 +2154,86 @@ msgstr ""
2474 "<b>Títol: </b>%s\n"
2477 -#: ../src/plugins/chapters/totem-chapters.c:370
2478 +#: ../src/plugins/chapters/totem-chapters.c:328
2479 msgid "Error while reading file with chapters"
2480 msgstr "S'ha produït un error en llegir el fitxer de capítols"
2482 -#: ../src/plugins/chapters/totem-chapters.c:585
2483 +#: ../src/plugins/chapters/totem-chapters.c:543
2484 msgid "Chapter with the same time already exists"
2485 msgstr "Ja existeix un capítol que comença al mateix moment"
2487 -#: ../src/plugins/chapters/totem-chapters.c:586
2488 -msgid "Try another name or remove an existing chapter"
2489 -msgstr "Canvieu-li el nom o suprimiu un capítol ja existent"
2490 +#: ../src/plugins/chapters/totem-chapters.c:544
2491 +msgid "Try another name or remove an existing chapter."
2492 +msgstr "Canvieu-li el nom o suprimiu un capítol ja existent."
2494 -#: ../src/plugins/chapters/totem-chapters.c:763
2495 +#: ../src/plugins/chapters/totem-chapters.c:717
2496 msgid "Error while writing file with chapters"
2497 msgstr "S'ha produït un error en escriure el fitxer dels capítols"
2499 -#: ../src/plugins/chapters/totem-chapters.c:888
2500 +#: ../src/plugins/chapters/totem-chapters.c:842
2501 msgid "Error occurred while saving chapters"
2502 msgstr "S'ha produït un error en alçar els capítols"
2504 -#: ../src/plugins/chapters/totem-chapters.c:889
2505 -msgid "Please check you rights and free space"
2506 -msgstr "Comproveu que teniu permisos i teniu espai lliure"
2507 +#: ../src/plugins/chapters/totem-chapters.c:843
2509 +"Please check you have permission to write to the folder containing the movie."
2511 +"Assegureu-vos que teniu permisos d'escriptura al directori que conté la "
2514 -#: ../src/plugins/chapters/totem-chapters.c:1023
2515 -msgid "Open Chapters File"
2516 +#: ../src/plugins/chapters/totem-chapters.c:976
2517 +msgid "Open Chapter File"
2518 msgstr "Obri un fitxer de capítols"
2520 -#: ../src/plugins/chapters/totem-cmml-parser.c:559
2521 +#: ../src/plugins/chapters/totem-chapters.c:1093
2522 +msgid "Chapter Screenshot"
2523 +msgstr "Captura de pantalla del capítol"
2525 +#: ../src/plugins/chapters/totem-chapters.c:1104
2526 +msgid "Chapter Title"
2527 +msgstr "Títol del capítol"
2529 +#: ../src/plugins/chapters/totem-chapters.c:1182
2530 +msgid "Save changes to chapter list before closing?"
2531 +msgstr "Voleu alçar els canvis a la llista de capítols abans de tancar?"
2533 +#. Translators: close Totem without saving changes to the chapter list of the current movie.
2534 +#: ../src/plugins/chapters/totem-chapters.c:1187
2535 +msgid "Close without Saving"
2536 +msgstr "Tanca sense alçar"
2538 +#. Translators: save changes to the chapter list of the current movie before closing Totem.
2539 +#: ../src/plugins/chapters/totem-chapters.c:1189
2543 +#: ../src/plugins/chapters/totem-chapters.c:1192
2544 +msgid "If you don't save, changes to the chapter list will be lost."
2545 +msgstr "Si no alceu es perdran els canvis a la llista de capítols."
2547 +#: ../src/plugins/chapters/totem-cmml-parser.c:651
2548 msgid "Failed to parse CMML file"
2549 msgstr "No s'ha pogut analitzar el fitxer CMML"
2551 #. Translators: this refers to a media file
2552 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:97
2553 +#: ../src/plugins/coherence_upnp/coherence_upnp.py:105
2557 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:108
2558 -#: ../src/plugins/coherence_upnp/coherence_upnp.totem-plugin.in.h:2
2559 +#: ../src/plugins/coherence_upnp/coherence_upnp.py:117
2560 +#: ../src/plugins/coherence_upnp/coherence_upnp.plugin.in.h:2
2561 msgid "Coherence DLNA/UPnP Client"
2562 msgstr "Client DLNA/UPnP de Coherence"
2564 -#: ../src/plugins/coherence_upnp/coherence_upnp.totem-plugin.in.h:1
2565 +#: ../src/plugins/coherence_upnp/coherence_upnp.plugin.in.h:1
2566 msgid "A DLNA/UPnP client for Totem powered by Coherence"
2567 msgstr "Un client DLNA/UPnP per al Totem que utilitza el Coherence"
2569 -#: ../src/plugins/dbus-service/dbus-service.totem-plugin.in.h:1
2570 +#: ../src/plugins/dbus-service/dbus-service.plugin.in.h:1
2571 msgid "D-Bus Service"
2572 msgstr "Servei D-Bus"
2574 -#: ../src/plugins/dbus-service/dbus-service.totem-plugin.in.h:2
2575 +#: ../src/plugins/dbus-service/dbus-service.plugin.in.h:2
2577 "Plugin for sending notifications of currently playing movies to the D-Bus "
2579 @@ -2246,49 +2241,45 @@ msgstr ""
2580 "Connector per enviar notificacions al subsistema D-Bus sobre les pel·lícules "
2581 "que s'estan reproduint."
2583 -#: ../src/plugins/galago/galago.totem-plugin.in.h:1
2584 +#: ../src/plugins/im-status/totem-im-status.plugin.in.h:1
2585 msgid "Instant Messenger status"
2586 msgstr "Estat en la missatgeria instantània"
2588 -#: ../src/plugins/galago/galago.totem-plugin.in.h:2
2589 +#: ../src/plugins/im-status/totem-im-status.plugin.in.h:2
2590 msgid "Set your Instant Messenger status to away when a movie is playing"
2592 "Estableix l'estat d'absència en la missatgeria instantània quan s'estiga "
2593 "reproduint una pel·lícula"
2595 -#: ../src/plugins/galago/totem-galago.c:171
2596 -msgid "Could not connect to the Galago daemon."
2597 -msgstr "No s'ha pogut connectar amb el dimoni del Galago."
2599 -#: ../src/plugins/gromit/gromit.totem-plugin.in.h:1
2600 +#: ../src/plugins/gromit/gromit.plugin.in.h:1
2601 msgid "Gromit Annotations"
2602 msgstr "Anotacions del Gromit"
2604 -#: ../src/plugins/gromit/gromit.totem-plugin.in.h:2
2605 +#: ../src/plugins/gromit/gromit.plugin.in.h:2
2606 msgid "Presentation helper to make annotations on screen"
2607 msgstr "Ajudant de presentacions per poder fer anotacions a la pantalla"
2609 -#: ../src/plugins/gromit/totem-gromit.c:272
2610 +#: ../src/plugins/gromit/totem-gromit.c:231
2611 msgid "The gromit binary was not found."
2612 msgstr "No s'ha trobat el fitxer binari del Gromit."
2614 #. Add the interface to Totem's sidebar
2615 -#: ../src/plugins/iplayer/iplayer.totem-plugin.in.h:1
2616 -#: ../src/plugins/iplayer/iplayer.py:32
2617 +#: ../src/plugins/iplayer/iplayer.plugin.in.h:1
2618 +#: ../src/plugins/iplayer/iplayer.py:42
2620 msgstr "iPlayer de la BBC"
2622 -#: ../src/plugins/iplayer/iplayer.totem-plugin.in.h:2
2623 +#: ../src/plugins/iplayer/iplayer.plugin.in.h:2
2624 msgid "Stream BBC programs from the last 7 days from the BBC iPlayer service."
2626 "Reprodueix els programes de la BBC dels últims 7 dies des del servei iPlayer "
2629 -#: ../src/plugins/iplayer/iplayer.py:57
2630 +#: ../src/plugins/iplayer/iplayer.py:67
2631 msgid "Error listing channel categories"
2632 msgstr "S'ha produït un error en llistar les categories dels canals"
2634 -#: ../src/plugins/iplayer/iplayer.py:57
2635 +#: ../src/plugins/iplayer/iplayer.py:67
2637 "There was an unknown error getting the list of television channels available "
2639 @@ -2298,15 +2289,16 @@ msgstr ""
2641 #. Append a dummy child row so that the expander's visible; we can
2642 #. then queue off the expander to load the programme listing for this category
2643 -#: ../src/plugins/iplayer/iplayer.py:65
2644 +#: ../src/plugins/iplayer/iplayer.py:75
2646 msgstr "S'està carregant…"
2648 -#: ../src/plugins/iplayer/iplayer.py:106
2649 +#. Translators: the "programme feed" is the list of TV shows available to watch online
2650 +#: ../src/plugins/iplayer/iplayer.py:120
2651 msgid "Error getting programme feed"
2652 msgstr "S'ha produït un error en obtindre la programació del canal"
2654 -#: ../src/plugins/iplayer/iplayer.py:106
2655 +#: ../src/plugins/iplayer/iplayer.py:120
2657 "There was an error getting the list of programmes for this channel and "
2658 "category combination."
2659 @@ -2314,7 +2306,11 @@ msgstr ""
2660 "S'ha produït un error en obtindre la llista de programes per esta combinació "
2661 "de canal i categoria."
2663 -#: ../src/plugins/iplayer/iplayer2.py:295
2664 +#: ../src/plugins/iplayer/iplayer2.py:299
2665 +msgid "<no reason given>"
2666 +msgstr "<no s'ha donat cap motiu>"
2668 +#: ../src/plugins/iplayer/iplayer2.py:300
2670 msgid "Programme unavailable (\"%s\")"
2671 msgstr "El programa no és disponible («%s»)"
2672 @@ -2332,79 +2328,75 @@ msgid "Jamendo Album Page"
2673 msgstr "Pàgina a Jamendo de l'àlbum"
2675 #: ../src/plugins/jamendo/jamendo.ui.h:4
2676 -msgid "Jamendo Plugin Configuration"
2677 -msgstr "Configuració del connector Jamendo"
2679 -#: ../src/plugins/jamendo/jamendo.ui.h:5
2680 msgid "Latest Releases"
2681 msgstr "Últimes versions"
2683 -#: ../src/plugins/jamendo/jamendo.ui.h:6
2684 +#: ../src/plugins/jamendo/jamendo.ui.h:5
2685 msgid "Number of albums to _retrieve:"
2686 msgstr "Nombre d'àlbums a _recuperar:"
2688 -#: ../src/plugins/jamendo/jamendo.ui.h:7
2689 +#: ../src/plugins/jamendo/jamendo.ui.h:6
2693 -#: ../src/plugins/jamendo/jamendo.ui.h:8
2694 +#: ../src/plugins/jamendo/jamendo.ui.h:7
2695 msgid "Preferred audio _format:"
2696 msgstr "_Format d'àudio preferit:"
2698 -#: ../src/plugins/jamendo/jamendo.ui.h:9
2699 -#: ../src/plugins/tracker/totem-tracker-widget.c:521
2700 +#: ../src/plugins/jamendo/jamendo.ui.h:8
2701 +#: ../src/plugins/tracker/totem-tracker-widget.c:761
2702 #: ../src/plugins/youtube/youtube.ui.h:2
2703 msgid "Search Results"
2704 msgstr "Resultats de la cerca"
2706 -#: ../src/plugins/jamendo/jamendo.ui.h:11
2707 +#: ../src/plugins/jamendo/jamendo.ui.h:10
2708 msgid "_Open Jamendo Album Page in Browser"
2709 msgstr "_Obri la pàgina de l'àlbum a Jamendo en el navegador"
2711 -#: ../src/plugins/jamendo/jamendo.totem-plugin.in.h:1
2712 -#: ../src/plugins/jamendo/jamendo.py:127
2713 +#: ../src/plugins/jamendo/jamendo.plugin.in.h:1
2714 +#: ../src/plugins/jamendo/jamendo.py:128
2718 -#: ../src/plugins/jamendo/jamendo.totem-plugin.in.h:2
2719 +#: ../src/plugins/jamendo/jamendo.plugin.in.h:2
2721 "Listen to the large collection of Creative Commons licensed music on Jamendo."
2723 "Escolteu la gran col·lecció de música llicenciada sota Creative Commons de "
2726 -#: ../src/plugins/jamendo/jamendo.py:55
2727 +#: ../src/plugins/jamendo/jamendo.py:58
2728 msgid "You need to install the Python simplejson module."
2729 msgstr "Heu d'instal·lar el mòdul simplejson del Python."
2731 -#: ../src/plugins/jamendo/jamendo.py:245 ../src/plugins/jamendo/jamendo.py:258
2732 -#: ../src/plugins/jamendo/jamendo.py:281
2733 +#: ../src/plugins/jamendo/jamendo.py:261 ../src/plugins/jamendo/jamendo.py:274
2734 +#: ../src/plugins/jamendo/jamendo.py:298
2737 msgstr "Artista: %s"
2739 #. Translators: this is the release date of an album in Python strptime format
2740 -#: ../src/plugins/jamendo/jamendo.py:251
2741 +#: ../src/plugins/jamendo/jamendo.py:267
2745 #. Translators: this is the release time of an album in Python strftime format
2746 -#: ../src/plugins/jamendo/jamendo.py:253
2747 +#: ../src/plugins/jamendo/jamendo.py:269
2752 -#: ../src/plugins/jamendo/jamendo.py:259
2753 +#: ../src/plugins/jamendo/jamendo.py:275
2758 -#: ../src/plugins/jamendo/jamendo.py:260
2759 +#: ../src/plugins/jamendo/jamendo.py:276
2761 msgid "Released on: %s"
2762 msgstr "Publicat al: %s"
2764 -#: ../src/plugins/jamendo/jamendo.py:261
2765 +#: ../src/plugins/jamendo/jamendo.py:277
2768 msgstr "Llicència: %s"
2769 @@ -2412,30 +2404,26 @@ msgstr "Llicència: %s"
2771 #. Translators: this is the title of a track in Python format
2772 #. (first argument is the track number, second is the track title)
2773 -#: ../src/plugins/jamendo/jamendo.py:273
2774 +#: ../src/plugins/jamendo/jamendo.py:290
2779 -#: ../src/plugins/jamendo/jamendo.py:280
2780 +#: ../src/plugins/jamendo/jamendo.py:297
2785 -#: ../src/plugins/jamendo/jamendo.py:282
2786 +#: ../src/plugins/jamendo/jamendo.py:299
2788 msgid "Duration: %s"
2791 -#: ../src/plugins/jamendo/jamendo.py:339
2792 -msgid "Fetching albums, please wait..."
2793 -msgstr "S'estan obtenint els àlbums..."
2795 -#: ../src/plugins/jamendo/jamendo.py:388
2796 -msgid "An error occurred while fetching albums."
2797 -msgstr "S'ha produït un error mentre s'obtenien els àlbums."
2798 +#: ../src/plugins/jamendo/jamendo.py:356
2799 +msgid "Fetching albums, please wait…"
2800 +msgstr "S'estan obtenint els àlbums, espereu…"
2802 -#: ../src/plugins/jamendo/jamendo.py:400
2803 +#: ../src/plugins/jamendo/jamendo.py:411
2806 "Failed to connect to Jamendo server.\n"
2807 @@ -2444,20 +2432,24 @@ msgstr ""
2808 "No s'ha pogut connectar al servidor de Jamendo.\n"
2811 -#: ../src/plugins/jamendo/jamendo.py:402
2812 +#: ../src/plugins/jamendo/jamendo.py:413
2814 msgid "The Jamendo server returned code %s."
2815 msgstr "El servidor de Jamendo ha retornat el codi %s."
2817 +#: ../src/plugins/jamendo/jamendo.py:417
2818 +msgid "An error occurred while fetching albums."
2819 +msgstr "S'ha produït un error mentre s'obtenien els àlbums."
2821 #. Translators: time formatting (in Python strftime format) for the Jamendo plugin
2822 #. for times longer than an hour
2823 -#: ../src/plugins/jamendo/jamendo.py:634
2824 +#: ../src/plugins/jamendo/jamendo.py:620
2828 #. Translators: time formatting (in Python strftime format) for the Jamendo plugin
2829 #. for times shorter than an hour
2830 -#: ../src/plugins/jamendo/jamendo.py:637
2831 +#: ../src/plugins/jamendo/jamendo.py:623
2835 @@ -2468,38 +2460,45 @@ msgstr "%M:%S"
2837 #. http://www.jamendo.com/en/album/4818
2838 #. If Jamendo doesn't support your language, *do not translate this string*!
2839 -#: ../src/plugins/jamendo/jamendo.py:687
2840 +#: ../src/plugins/jamendo/jamendo.py:673
2844 -#: ../src/plugins/lirc/lirc.totem-plugin.in.h:1
2845 +#: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:1
2846 +msgid "Audio format to download from Jamendo"
2847 +msgstr "Format de l'àudio que es baixarà des de Jamendo"
2849 +#: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:2
2850 +msgid "Number of results per page"
2851 +msgstr "Nombre de resultats per pàgina"
2853 +#: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:3
2855 +"The number of Jamendo search results to display in each page of results."
2857 +"La quantitat de resultats de la cerca a Jamendo que es mostraran a cada "
2858 +"pàgina de resultats."
2860 +#: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:4
2861 +msgid "The preferred audio format to download tracks from Jamendo in."
2862 +msgstr "El format d'àudio preferit per baixar les peces de Jamendo."
2864 +#: ../src/plugins/lirc/lirc.plugin.in.h:1
2865 msgid "Infrared Remote Control"
2866 msgstr "Control remot per infraroigs"
2868 -#: ../src/plugins/lirc/lirc.totem-plugin.in.h:2
2869 +#: ../src/plugins/lirc/lirc.plugin.in.h:2
2870 msgid "Support infrared remote control"
2871 msgstr "Permet el control remot per infraroigs"
2873 -#: ../src/plugins/lirc/totem-lirc.c:281
2874 +#: ../src/plugins/lirc/totem-lirc.c:242
2875 msgid "Couldn't initialize lirc."
2876 msgstr "No s'ha pogut inicialitzar el lirc."
2878 -#: ../src/plugins/lirc/totem-lirc.c:290
2879 +#: ../src/plugins/lirc/totem-lirc.c:254
2880 msgid "Couldn't read lirc configuration."
2881 msgstr "No s'ha pogut llegir la configuració del lirc."
2883 -#: ../src/plugins/mythtv/totem-mythtv.c:198
2885 -msgstr "Enregistraments"
2887 -#: ../src/plugins/mythtv/totem-mythtv.c:521
2888 -msgid "MythTV Recordings"
2889 -msgstr "Enregistraments del MythTV"
2891 -#: ../src/plugins/mythtv/totem-mythtv.c:522
2892 -msgid "MythTV LiveTV"
2893 -msgstr "LiveTV del MythTV"
2895 #: ../src/plugins/opensubtitles/opensubtitles.ui.h:1
2896 msgid "Download Movie Subtitles"
2897 msgstr "Baixa els subtítols de la pel·lícula"
2898 @@ -2516,108 +2515,124 @@ msgstr "_Llengua dels subtítols:"
2899 msgid "_Play with Subtitle"
2900 msgstr "_Reprodueix amb subtítols"
2902 -#: ../src/plugins/opensubtitles/opensubtitles.totem-plugin.in.h:1
2903 +#: ../src/plugins/opensubtitles/opensubtitles.plugin.in.h:1
2904 msgid "Look for subtitles for the currently playing movie."
2905 msgstr "Cerca subtítols per a la pel·lícula que s'està reproduint."
2907 -#: ../src/plugins/opensubtitles/opensubtitles.totem-plugin.in.h:2
2908 +#: ../src/plugins/opensubtitles/opensubtitles.plugin.in.h:2
2909 msgid "Subtitle Downloader"
2910 msgstr "Baixador de subtítols"
2912 -#: ../src/plugins/opensubtitles/opensubtitles.py:35
2913 +#: ../src/plugins/opensubtitles/opensubtitles.py:44
2914 msgid "Brasilian Portuguese"
2917 -#: ../src/plugins/opensubtitles/opensubtitles.py:238
2918 -#: ../src/plugins/opensubtitles/opensubtitles.py:254
2919 -#: ../src/plugins/opensubtitles/opensubtitles.py:271
2920 -#: ../src/plugins/opensubtitles/opensubtitles.py:277
2921 +#: ../src/plugins/opensubtitles/opensubtitles.py:247
2922 +#: ../src/plugins/opensubtitles/opensubtitles.py:263
2923 +#: ../src/plugins/opensubtitles/opensubtitles.py:280
2924 +#: ../src/plugins/opensubtitles/opensubtitles.py:286
2925 msgid "Could not contact the OpenSubtitles website"
2926 msgstr "No s'ha pogut contactar amb el lloc web de l'OpenSubtitles"
2928 -#: ../src/plugins/opensubtitles/opensubtitles.py:259
2929 +#: ../src/plugins/opensubtitles/opensubtitles.py:268
2930 msgid "No results found"
2931 msgstr "No s'ha trobat cap resultat"
2933 -#: ../src/plugins/opensubtitles/opensubtitles.py:368
2934 +#: ../src/plugins/opensubtitles/opensubtitles.py:376
2938 #. translators comment:
2939 #. This is the file-type of the subtitle file detected
2940 -#: ../src/plugins/opensubtitles/opensubtitles.py:374
2941 +#: ../src/plugins/opensubtitles/opensubtitles.py:382
2945 #. translators comment:
2946 #. This is a rating of the quality of the subtitle
2947 -#: ../src/plugins/opensubtitles/opensubtitles.py:379
2948 +#: ../src/plugins/opensubtitles/opensubtitles.py:387
2952 -#: ../src/plugins/opensubtitles/opensubtitles.py:420
2953 -msgid "_Download Movie Subtitles..."
2954 -msgstr "_Baixa subtítols de pel·lícules..."
2955 +#: ../src/plugins/opensubtitles/opensubtitles.py:428
2956 +msgid "_Download Movie Subtitles…"
2957 +msgstr "_Baixa els subtítols de la pel·lícula…"
2959 -#: ../src/plugins/opensubtitles/opensubtitles.py:421
2960 +#: ../src/plugins/opensubtitles/opensubtitles.py:429
2961 msgid "Download movie subtitles from OpenSubtitles"
2962 msgstr "Baixa subtítols de pel·lícules de l'OpenSubtitles"
2964 -#: ../src/plugins/opensubtitles/opensubtitles.py:480
2965 -msgid "Searching subtitles..."
2966 -msgstr "S'estan cercant subtítols..."
2967 +#: ../src/plugins/opensubtitles/opensubtitles.py:488
2968 +msgid "Searching subtitles…"
2969 +msgstr "S'estan cercant subtítols…"
2971 +#: ../src/plugins/opensubtitles/opensubtitles.py:546
2972 +msgid "Downloading the subtitles…"
2973 +msgstr "S'estan baixant els subtítols…"
2975 +#: ../src/plugins/opensubtitles/org.gnome.totem.plugins.opensubtitles.gschema.xml.in.in.h:1
2976 +msgid "Subtitle language"
2977 +msgstr "Llengua dels subtítols"
2979 -#: ../src/plugins/opensubtitles/opensubtitles.py:538
2980 -msgid "Downloading the subtitles..."
2981 -msgstr "S'estan baixant els subtítols..."
2982 +#: ../src/plugins/opensubtitles/org.gnome.totem.plugins.opensubtitles.gschema.xml.in.in.h:2
2983 +msgid "The language to search for subtitles for movies in."
2984 +msgstr "La llengua a la qual cercar subtítols de la pel·lícula."
2986 -#: ../src/plugins/ontop/ontop.totem-plugin.in.h:1
2987 +#: ../src/plugins/ontop/ontop.plugin.in.h:1
2988 msgid "Always On Top"
2989 msgstr "Sempre per damunt"
2991 -#: ../src/plugins/ontop/ontop.totem-plugin.in.h:2
2992 +#: ../src/plugins/ontop/ontop.plugin.in.h:2
2993 msgid "Keep the main window on top when playing a movie"
2995 "Mantingues la finestra principal per sobre de les altres quan s'estiga "
2996 "reproduint una pel·lícula"
2998 -#: ../src/plugins/properties/totem-movie-properties.c:152
2999 +#: ../src/plugins/properties/totem-movie-properties.c:128
3003 -#: ../src/plugins/properties/bacon-video-widget-properties.c:235
3008 -#: ../src/plugins/properties/bacon-video-widget-properties.c:238
3009 -#: ../src/plugins/properties/bacon-video-widget-properties.c:271
3014 -#: ../src/plugins/properties/bacon-video-widget-properties.c:245
3016 -msgid "%d frame per second"
3017 -msgid_plural "%d frames per second"
3018 -msgstr[0] "%d quadre per segon"
3019 -msgstr[1] "%d quadres per segon"
3021 -#: ../src/plugins/properties/bacon-video-widget-properties.c:274
3025 +#: ../src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in.in.h:2
3028 +"A format string used to build the network service name used when publishing "
3029 +"playlists over the network. The following format placeholders can be used: • "
3030 +"%a: the program name as returned by g_get_application_name() • %h: the "
3031 +"machine's host name in title case • %u: the user's login name in title case "
3032 +"• %U: the user's real name • %%: the percent sign"
3034 +"Una cadena de format per construir el nom del servei de xarxa per la "
3035 +"publicació de llistes de reproducció a través de la xarxa. Es poden "
3036 +"utilitzar les variables següents: %a - el nom del programa que retorna "
3037 +"g_get_application_name(); %h - el nom de l'ordinador; %u - el nom "
3038 +"d'identificació de l'usuari; %U el nom real de l'usuari; %% - el símbol de "
3041 +#: ../src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in.in.h:3
3042 +msgid "Format for network service name"
3043 +msgstr "Format pel nom del servei de xarxa"
3045 +#: ../src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in.in.h:4
3046 +msgid "Publisher protocol to use"
3047 +msgstr "Protocol de publicació que s'utilitza"
3049 +#: ../src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in.in.h:5
3051 +"The transport protocol to use when publishing playlists over the network."
3053 +"El protocol de transport per la publicació de llistes de reproducció a "
3054 +"través de la xarxa."
3056 #. Translators: computers on the local network which are publishing their playlists over the network
3057 -#: ../src/plugins/publish/totem-publish.c:589
3058 +#: ../src/plugins/publish/totem-publish.c:552
3062 -#: ../src/plugins/publish/publish.totem-plugin.in.h:1
3063 +#: ../src/plugins/publish/publish.plugin.in.h:1
3064 msgid "Publish Playlist"
3065 msgstr "Publica la llista de reproducció"
3067 -#: ../src/plugins/publish/publish.totem-plugin.in.h:2
3068 +#: ../src/plugins/publish/publish.plugin.in.h:2
3069 msgid "Share the current playlist via HTTP"
3070 msgstr "Comparteix la llista de reproducció actual a través d'HTTP"
3072 @@ -2641,8 +2656,43 @@ msgstr ""
3073 msgid "Use _encrypted transport protocol (HTTPS)"
3074 msgstr "Utilitza un protocol de transport _xifrat (HTTPS)"
3076 -#: ../src/plugins/screensaver/totem-screensaver.c:94
3077 -#: ../browser-plugin/totem-plugin-viewer.c:1964
3078 +#: ../src/plugins/pythonconsole/org.gnome.totem.plugins.pythonconsole.gschema.xml.in.in.h:1
3080 +"A password to protect the rpdb2 server for debugging Totem from unauthorized "
3081 +"remote access. If this is empty, a default of 'totem' will be used."
3083 +"Una contrasenya per protegir el servidor rpdb2 d'accessos remots no "
3084 +"autoritzats a la depuració del Totem. Si es deixa buida la contrasenya serà "
3087 +#: ../src/plugins/pythonconsole/org.gnome.totem.plugins.pythonconsole.gschema.xml.in.in.h:2
3088 +msgid "rpdb2 password"
3089 +msgstr "contrasenya rpdb2"
3091 +#: ../src/plugins/save-file/totem-save-file.c:63
3092 +msgid "Save a Copy..."
3093 +msgstr "Alça'n una còpia..."
3095 +#: ../src/plugins/save-file/totem-save-file.c:64
3096 +msgid "Save a copy of the movie"
3097 +msgstr "Alça una còpia de la pel·lícula"
3099 +#: ../src/plugins/save-file/totem-save-file.c:129
3100 +msgid "Save a Copy"
3101 +msgstr "Alça'n una còpia"
3103 +#. translators: Movie is the default saved movie filename,
3104 +#. * without the suffix
3105 +#: ../src/plugins/save-file/totem-save-file.c:161
3107 +msgstr "Pel·lícula"
3109 +#: ../src/plugins/save-file/totem-save-file.c:183
3110 +msgid "Movie stream"
3111 +msgstr "Flux de la pel·lícula"
3113 +#: ../src/plugins/screensaver/totem-screensaver.c:116
3114 +#: ../browser-plugin/totem-plugin-viewer.c:1961
3115 msgid "Playing a movie"
3116 msgstr "S'està reproduint una pel·lícula"
3118 @@ -2671,12 +2721,12 @@ msgid "_Name:"
3121 #. Write the screenshot to the temporary file
3122 -#: ../src/plugins/screenshot/gnome-screenshot-widget.c:389
3123 -#: ../src/plugins/screenshot/totem-screenshot.c:63
3124 +#: ../src/plugins/screenshot/gnome-screenshot-widget.c:387
3125 +#: ../src/plugins/screenshot/totem-screenshot.c:64
3126 msgid "Screenshot.png"
3127 msgstr "Captura.png"
3129 -#: ../src/plugins/screenshot/totem-gallery.c:90
3130 +#: ../src/plugins/screenshot/totem-gallery.c:91
3131 msgid "Save Gallery"
3132 msgstr "Alça la galeria"
3134 @@ -2684,7 +2734,7 @@ msgstr "Alça la galeria"
3135 #. * argument is a number which is used to prevent overwriting files.
3136 #. * Just translate "Gallery", and not the ".jpg". Example:
3137 #. * "Galerie-%s-%d.jpg".
3138 -#: ../src/plugins/screenshot/totem-gallery.c:114
3139 +#: ../src/plugins/screenshot/totem-gallery.c:115
3141 msgid "Gallery-%s-%d.jpg"
3142 msgstr "Galeria-%s-%d.jpg"
3143 @@ -2698,142 +2748,139 @@ msgstr "S'està creant la galeria..."
3144 #: ../src/plugins/screenshot/totem-gallery-progress.c:107
3146 msgid "Saving gallery as \"%s\""
3147 -msgstr "S'està desant la galeria com a «%s»"
3148 +msgstr "S'està alçant la galeria com a «%s»"
3150 -#: ../src/plugins/screenshot/totem-screenshot.c:112
3151 +#: ../src/plugins/screenshot/totem-screenshot.c:113
3152 msgid "There was an error saving the screenshot."
3153 msgstr "S'ha produït un error en alçar la captura de pantalla."
3155 -#: ../src/plugins/screenshot/totem-screenshot.c:138
3156 +#: ../src/plugins/screenshot/totem-screenshot.c:139
3157 msgid "Save Screenshot"
3158 msgstr "Alça la captura de pantalla"
3160 #. Create the screenshot widget
3161 #. Translators: %s is the movie title and %d is an auto-incrementing number to make filename unique
3162 -#: ../src/plugins/screenshot/totem-screenshot.c:159
3163 +#: ../src/plugins/screenshot/totem-screenshot.c:160
3165 msgid "Screenshot-%s-%d.png"
3166 msgstr "Captura-%s-%d.png"
3168 -#: ../src/plugins/screenshot/totem-screenshot-plugin.c:98
3169 -#: ../src/plugins/screenshot/totem-screenshot-plugin.c:105
3170 +#: ../src/plugins/screenshot/totem-screenshot-plugin.c:88
3171 +#: ../src/plugins/screenshot/totem-screenshot-plugin.c:95
3172 msgid "Totem could not get a screenshot of the video."
3174 "El Totem no ha pogut obtindre una captura de pantalla d'esta pel·lícula."
3176 -#: ../src/plugins/screenshot/totem-screenshot-plugin.c:105
3177 +#: ../src/plugins/screenshot/totem-screenshot-plugin.c:95
3178 msgid "This is not supposed to happen; please file a bug report."
3179 msgstr "Això no hauria de passar. Envieu un informe d'error."
3181 -#: ../src/plugins/screenshot/totem-screenshot-plugin.c:208
3182 +#: ../src/plugins/screenshot/totem-screenshot-plugin.c:197
3183 msgid "Take _Screenshot..."
3184 msgstr "Fes una _captura de pantalla..."
3186 -#: ../src/plugins/screenshot/totem-screenshot-plugin.c:208
3187 +#: ../src/plugins/screenshot/totem-screenshot-plugin.c:197
3188 msgid "Take a screenshot"
3189 msgstr "Fes una captura de pantalla"
3191 -#: ../src/plugins/screenshot/totem-screenshot-plugin.c:209
3192 +#: ../src/plugins/screenshot/totem-screenshot-plugin.c:198
3193 msgid "Create Screenshot _Gallery..."
3194 msgstr "Crea una _galeria de captures de pantalla..."
3196 -#: ../src/plugins/screenshot/totem-screenshot-plugin.c:209
3197 +#: ../src/plugins/screenshot/totem-screenshot-plugin.c:198
3198 msgid "Create a gallery of screenshots"
3199 msgstr "Crea una galeria de captures de pantalla"
3201 #. Update the "seconds" label so that it always has the correct singular/plural form
3202 #. Translators: label for the seconds selector in the "Skip to" dialogue
3203 -#. Fix the label width at the maximum necessary for the plural labels, to prevent it changing size when we change the spinner value
3204 -#: ../src/plugins/skipto/totem-skipto.c:158
3205 -#: ../src/plugins/skipto/totem-skipto.c:184
3206 +#: ../src/plugins/skipto/totem-skipto.c:160
3208 msgid_plural "seconds"
3212 -#: ../src/plugins/skipto/totem-skipto.c:184
3216 +#. Fix the label width at the maximum necessary for the plural labels, to prevent it changing size when we change the spinner value
3217 +#. Translators: you should translate this string to a number (written in digits) which corresponds to the longer character length of the
3218 +#. * translations for "second" and "seconds", as translated elsewhere in this file. For example, in English, "second" is 6 characters long and
3219 +#. * "seconds" is 7 characters long, so this string should be translated to "7". See: bgo#639398
3220 #: ../src/plugins/skipto/totem-skipto.c:190
3222 +msgctxt "Skip To label length"
3226 +#: ../src/plugins/skipto/totem-skipto.c:197
3230 -#: ../src/plugins/skipto/totem-skipto-plugin.c:216
3231 -msgid "_Skip to..."
3232 +#: ../src/plugins/skipto/totem-skipto-plugin.c:182
3233 +msgid "_Skip To..."
3234 msgstr "Sa_lta a..."
3236 -#: ../src/plugins/skipto/totem-skipto-plugin.c:216
3237 +#: ../src/plugins/skipto/totem-skipto-plugin.c:182
3238 msgid "Skip to a specific time"
3239 msgstr "Salta a un moment en concret"
3241 -#: ../src/plugins/skipto/totem-skipto-plugin.c:222
3242 -msgid "Could not load the \"Skip to\" dialog interface."
3243 -msgstr "No s'ha pogut carregar la interfície de diàleg de «Salta a»."
3245 #: ../src/plugins/skipto/skipto.ui.h:1
3249 -#. Display an error
3250 -#: ../src/plugins/tracker/totem-tracker-widget.c:173
3252 -msgid "Could not get name and thumbnail for %s: %s"
3253 -msgstr "No s'han pogut obtindre el nom i la miniatura per a %s: %s"
3255 -#: ../src/plugins/tracker/totem-tracker-widget.c:174
3257 -msgstr "Error en el fitxer"
3259 -#: ../src/plugins/tracker/totem-tracker-widget.c:251
3260 -#: ../src/plugins/tracker/totem-tracker-widget.c:368
3261 +#: ../src/plugins/tracker/totem-tracker-widget.c:587
3262 +#: ../src/plugins/tracker/totem-tracker-widget.c:676
3263 msgid "Could not connect to Tracker"
3264 msgstr "No s'ha pogut connectar amb el Tracker"
3266 -#: ../src/plugins/tracker/totem-tracker-widget.c:258
3267 +#: ../src/plugins/tracker/totem-tracker-widget.c:594
3269 msgstr "Cap resultat"
3272 -#. * This is used to show which items are listed in the list view, for example:
3273 -#. * Showing 10-20 of 128 matches
3274 -#. * This is similar to what web searches use, eg. Google on the top-right of their search results page show:
3275 -#. * Personalized Results 1 - 10 of about 4,130,000 for foobar
3276 -#: ../src/plugins/tracker/totem-tracker-widget.c:283
3277 +#. * This is used to show which items are listed in the
3278 +#. * list view, for example:
3280 +#. * Showing 10-20 of 128 matches
3282 +#. * This is similar to what web searches use, eg.
3283 +#. * Google on the top-right of their search results
3286 +#. * Personalized Results 1 - 10 of about 4,130,000 for foobar
3289 +#: ../src/plugins/tracker/totem-tracker-widget.c:618
3291 msgid "Showing %i - %i of %i match"
3292 msgid_plural "Showing %i - %i of %i matches"
3293 msgstr[0] "Es mostra %i - %i de %i coincidència"
3294 msgstr[1] "Es mostren %i - %i de %i coincidències"
3296 -#: ../src/plugins/tracker/totem-tracker-widget.c:581
3297 +#: ../src/plugins/tracker/totem-tracker-widget.c:823
3301 -#: ../src/plugins/tracker/totem-tracker.c:91
3302 -#: ../src/plugins/tracker/tracker.totem-plugin.in.h:1
3303 +#: ../src/plugins/tracker/totem-tracker.c:65
3304 +#: ../src/plugins/tracker/tracker.plugin.in.h:1
3305 msgid "Local Search"
3306 msgstr "Cerca local"
3308 -#: ../src/plugins/thumbnail/thumbnail.totem-plugin.in.h:1
3309 +#: ../src/plugins/thumbnail/thumbnail.plugin.in.h:1
3310 msgid "Set the window icon to the thumbnail of the playing movie"
3312 "Fes que la icona de la finestra siga la miniatura de la pel·lícula que "
3313 "s'estiga reproduint"
3315 -#: ../src/plugins/thumbnail/thumbnail.totem-plugin.in.h:2
3316 +#: ../src/plugins/thumbnail/thumbnail.plugin.in.h:2
3320 -#: ../src/plugins/tracker/tracker.totem-plugin.in.h:2
3321 +#: ../src/plugins/tracker/tracker.plugin.in.h:2
3322 msgid "Search for local videos using Tracker"
3323 msgstr "Cerca vídeos a l'ordinador amb el Tracker"
3325 -#: ../src/plugins/youtube/youtube.totem-plugin.in.h:1
3326 +#: ../src/plugins/youtube/youtube.plugin.in.h:1
3327 msgid "A plugin to let you browse YouTube videos."
3328 msgstr "Un connector que vos permet navegar per vídeos del YouTube."
3330 -#: ../src/plugins/youtube/youtube.totem-plugin.in.h:2
3331 +#: ../src/plugins/youtube/youtube.plugin.in.h:2
3332 msgid "YouTube Browser"
3333 msgstr "Navegador del YouTube"
3335 @@ -2845,36 +2892,33 @@ msgstr "Vídeos relacionats"
3339 -#: ../src/plugins/youtube/totem-youtube.c:316
3340 +#: ../src/plugins/youtube/totem-youtube.c:144
3341 +#: ../src/plugins/youtube/totem-youtube.c:803
3342 msgid "_Open in Web Browser"
3343 msgstr "_Obri en el navegador web"
3345 -#: ../src/plugins/youtube/totem-youtube.c:316
3346 +#: ../src/plugins/youtube/totem-youtube.c:144
3347 msgid "Open the video in your web browser"
3348 msgstr "Obri el vídeo en el navegador web"
3350 #. Add the sidebar page
3351 -#: ../src/plugins/youtube/totem-youtube.c:366
3352 +#: ../src/plugins/youtube/totem-youtube.c:195
3356 -#: ../src/plugins/youtube/totem-youtube.c:452
3357 +#: ../src/plugins/youtube/totem-youtube.c:279
3358 msgid "Cancelling query…"
3359 msgstr "S'està cancel·lant la consulta…"
3361 -#: ../src/plugins/youtube/totem-youtube.c:513
3362 -msgid "Error Looking Up Video URI"
3363 -msgstr "S'ha produït un error en consultar l'URI del vídeo"
3365 #. Hide the ugly technical message libgdata gives behind a nice one telling them it's out of date (which it likely is
3366 #. * if we're receiving a protocol error).
3367 #. Spew out the error message as provided
3368 -#: ../src/plugins/youtube/totem-youtube.c:797
3369 -#: ../src/plugins/youtube/totem-youtube.c:802
3370 +#: ../src/plugins/youtube/totem-youtube.c:424
3371 +#: ../src/plugins/youtube/totem-youtube.c:429
3372 msgid "Error Searching for Videos"
3373 msgstr "S'ha produït un error en cercar vídeos"
3375 -#: ../src/plugins/youtube/totem-youtube.c:798
3376 +#: ../src/plugins/youtube/totem-youtube.c:425
3378 "The response from the server could not be understood. Please check you are "
3379 "running the latest version of libgdata."
3380 @@ -2883,23 +2927,35 @@ msgstr ""
3381 "l'última versió de la libgdata."
3384 -#: ../src/plugins/youtube/totem-youtube.c:972
3385 +#: ../src/plugins/youtube/totem-youtube.c:618
3386 msgid "Fetching search results…"
3387 msgstr "S'estan obtenint els resultats de la cerca…"
3390 -#: ../src/plugins/youtube/totem-youtube.c:1037
3391 +#: ../src/plugins/youtube/totem-youtube.c:680
3392 msgid "Fetching related videos…"
3393 msgstr "S'estan obtenint els vídeos relacionats…"
3395 -#: ../src/plugins/youtube/totem-youtube.c:1088
3396 +#: ../src/plugins/youtube/totem-youtube.c:732
3397 msgid "Error Opening Video in Web Browser"
3398 msgstr "S'ha produït un error en obrir el vídeo en el navegador web"
3400 -#: ../src/plugins/youtube/totem-youtube.c:1108
3401 +#: ../src/plugins/youtube/totem-youtube.c:752
3402 msgid "Fetching more videos…"
3403 msgstr "S'estan obtenint més vídeos…"
3405 +#: ../src/plugins/youtube/totem-youtube.c:797
3406 +msgid "Video Format Not Supported"
3407 +msgstr "No hi ha cap còdec per este format de vídeo"
3409 +#: ../src/plugins/youtube/totem-youtube.c:799
3411 +"This video is not available in any formats which Totem supports. Would you "
3412 +"like to open it in your web browser instead?"
3414 +"El vídeo no està disponible en cap dels formats que accepta el Totem. Voleu "
3415 +"obrir-lo en el navegador web?"
3417 #: ../browser-plugin/totem-plugin-viewer.c:431
3418 msgid "No URI to play"
3419 msgstr "No hi ha cap URI per reproduir"
3420 @@ -2907,79 +2963,234 @@ msgstr "No hi ha cap URI per reproduir"
3421 #. translators: this is:
3422 #. * Open With ApplicationName
3423 #. * as in nautilus' right-click menu
3424 -#: ../browser-plugin/totem-plugin-viewer.c:1104
3425 +#: ../browser-plugin/totem-plugin-viewer.c:1101
3427 msgid "_Open with \"%s\""
3428 msgstr "_Obri amb el «%s»"
3430 -#: ../browser-plugin/totem-plugin-viewer.c:1155
3431 +#: ../browser-plugin/totem-plugin-viewer.c:1152
3433 msgid "Browser Plugin using %s"
3434 msgstr "Connector de navegació que utilitza %s"
3436 -#: ../browser-plugin/totem-plugin-viewer.c:1160
3437 +#: ../browser-plugin/totem-plugin-viewer.c:1157
3438 msgid "Totem Browser Plugin"
3439 msgstr "Navegador de connectors del Totem"
3441 -#: ../browser-plugin/totem-plugin-viewer.c:2179
3442 +#: ../browser-plugin/totem-plugin-viewer.c:2195
3443 msgid "No playlist or playlist empty"
3444 msgstr "No hi ha cap llista de reproducció o bé és buida"
3446 -#: ../browser-plugin/totem-plugin-viewer.c:2270
3447 +#: ../browser-plugin/totem-plugin-viewer.c:2286
3448 msgid "Movie browser plugin"
3449 msgstr "Connector per veure pel·lícules al navegador"
3451 -#: ../browser-plugin/totem-plugin-viewer.c:2286
3452 +#: ../browser-plugin/totem-plugin-viewer.c:2302
3453 msgid "Verify your system installation. The Totem plugin will now exit."
3455 "Verifiqueu la instal·lació del sistema. El connector del Totem eixirà ara."
3457 -#: ../src/plugins/pythonconsole/pythonconsole.totem-plugin.in.h:1
3458 +#: ../src/plugins/pythonconsole/pythonconsole.plugin.in.h:1
3459 msgid "Interactive Python console."
3460 msgstr "Consola interactiva del Python."
3462 -#: ../src/plugins/pythonconsole/pythonconsole.totem-plugin.in.h:2
3463 +#: ../src/plugins/pythonconsole/pythonconsole.plugin.in.h:2
3464 msgid "Python Console"
3465 msgstr "Consola del Python"
3467 -#: ../src/plugins/pythonconsole/pythonconsole.py:74
3468 +#: ../src/plugins/pythonconsole/pythonconsole.py:86
3469 msgid "Python Console Menu"
3470 msgstr "Menú de la consola del Python"
3472 -#: ../src/plugins/pythonconsole/pythonconsole.py:77
3473 +#: ../src/plugins/pythonconsole/pythonconsole.py:89
3474 msgid "_Python Console"
3475 msgstr "Consola del _Python"
3477 -#: ../src/plugins/pythonconsole/pythonconsole.py:78
3478 +#: ../src/plugins/pythonconsole/pythonconsole.py:90
3479 msgid "Show Totem's Python console"
3480 msgstr "Mostra la consola del Python del Totem"
3482 -#: ../src/plugins/pythonconsole/pythonconsole.py:83
3483 +#: ../src/plugins/pythonconsole/pythonconsole.py:95
3484 msgid "Python Debugger"
3485 msgstr "Depurador del Python"
3487 -#: ../src/plugins/pythonconsole/pythonconsole.py:84
3488 +#: ../src/plugins/pythonconsole/pythonconsole.py:96
3489 msgid "Enable remote Python debugging with rpdb2"
3490 msgstr "Habilita la depuració remota del Python amb el rpdb2"
3492 -#: ../src/plugins/pythonconsole/pythonconsole.py:106
3493 +#: ../src/plugins/pythonconsole/pythonconsole.py:117
3495 -msgid "You can access the totem object through 'totem_object' :\\n%s"
3496 -msgstr "Podeu accedir a l'objecte Totem a través de «totem_object»: \\n%s"
3497 +msgid "You can access the Totem.Object through 'totem_object' :\\n%s"
3498 +msgstr "Podeu accedir a Totem.Object a través de «totem_object»: \\n%s"
3500 -#: ../src/plugins/pythonconsole/pythonconsole.py:111
3501 +#: ../src/plugins/pythonconsole/pythonconsole.py:121
3502 msgid "Totem Python Console"
3503 msgstr "Consola del Python del Totem"
3505 -#: ../src/plugins/pythonconsole/pythonconsole.py:120
3506 +#: ../src/plugins/pythonconsole/pythonconsole.py:130
3508 "After you press OK, Totem will wait until you connect to it with winpdb or "
3509 -"rpdb2. If you have not set a debugger password in GConf, it will use the "
3510 +"rpdb2. If you have not set a debugger password in DConf, it will use the "
3511 "default password ('totem')."
3513 "Després de prémer D'acord, el Totem s'esperarà fins que vos hi connecteu amb "
3514 "el winpdb o el rpdb2. Si no heu establit una contrasenya de depuració en el "
3515 -"GConf, utilitzarà la contrasenya predeterminada («totem»)."
3516 +"DConf, s'utilitzarà la contrasenya predeterminada («totem»)."
3521 +#~ msgid "C_onfigure..."
3522 +#~ msgstr "C_onfigura..."
3524 +#~ msgid "Copyright:"
3525 +#~ msgstr "Copyright:"
3527 +#~ msgid "Description:"
3528 +#~ msgstr "Descripció:"
3534 +#~ "Approximate network connection speed, used to select quality on media "
3535 +#~ "over the network: \"0\" for 14.4 Kbps Modem, \"1\" for 19.2 Kbps Modem, "
3536 +#~ "\"2\" for 28.8 Kbps Modem, \"3\" for 33.6 Kbps Modem, \"4\" for 34.4 Kbps "
3537 +#~ "Modem, \"5\" for 56 Kbps Modem/ISDN, \"6\" for 112 Kbps Dual ISDN/DSL, "
3538 +#~ "\"7\" for 256 Kbps DSL/Cable, \"8\" for 384 Kbps DSL/Cable, \"9\" for 512 "
3539 +#~ "Kbps DSL/Cable, \"10\" for 1.5 Mbps T1/Intranet/LAN, \"11\" for Intranet/"
3542 +#~ "Velocitat de connexió a la xarxa aproximada, s'utilitza per seleccionar "
3543 +#~ "la qualitat dels recursos obtinguts a través de la xarxa: «0» mòdem de "
3544 +#~ "14.4 Kbps, «1» mòdem de 19.2 Kbps, «2» mòdem de 28.8 Kbps, «3» mòdem de "
3545 +#~ "33.6 Kbps, «4» mòdem de 34.4 Kbps, «5» mòdem/XDSI de 56 Kbps, «6» XDSI "
3546 +#~ "dual/ADSL de 112 Kbps, «7» ADSL/Cable de 256 Kbps, «8» ADSL/cable de 384 "
3547 +#~ "Kbps, «9» ADSL/cable de 512 Kbps, «10»T1/intranet/LAN de 1.5 Mbps i «11» "
3551 +#~ "Quality settings for the audio visualization: \"0\" for small, \"1\" for "
3552 +#~ "normal, \"2\" for large, \"3\" for extra large."
3554 +#~ "Paràmetres de la qualitat per a la visualització de l'àudio: «0» per a "
3555 +#~ "petita, «1» per a normal, «2» per a gran i «3» per a extra gran."
3558 +#~ "Type of audio output to use: \"0\" for stereo, \"1\" for 4-channel "
3559 +#~ "output, \"2\" for 5.0 channel output, \"3\" for 5.1 channel output, \"4\" "
3560 +#~ "for AC3 Passthrough."
3562 +#~ "Tipus de sortida d'àudio a utilitzar: «0» per a estèreo, «1» per a "
3563 +#~ "sortida a 4 canals, «2» per a sortida amb canals 5.0, «3» per a sortida "
3564 +#~ "amb canals 5.1, «4» per a AC3 directe a la targeta de so."
3569 +#~ msgid "Whether to autoload external chapter files when a movie is loaded."
3571 +#~ "Si s'han de carregar automàticament els fitxers de capítols externs quan "
3572 +#~ "es carrega una pel·lícula."
3574 +#~ msgid "Don't connect to an already-running instance"
3575 +#~ msgstr "No et connectis a una instància que ja estigui funcionant"
3577 +#~ msgid "Enable visual effects?"
3578 +#~ msgstr "Voleu habilitar els efectes visuals?"
3581 +#~ "It seems you are running Totem remotely.\n"
3582 +#~ "Are you sure you want to enable the visual effects?"
3584 +#~ "Sembla que esteu executant el Totem remotament.\n"
3585 +#~ "Esteu segur que voleu habilitar els efectes visuals?"
3588 +#~ "Changing the visuals effect type will require a restart to take effect."
3590 +#~ "Si canvieu els tipus d'efectes visuals, haureu de reiniciar perquè els "
3591 +#~ "canvis siguin efectius."
3594 +#~ "The change of audio output type will only take effect when Totem is "
3597 +#~ "El canvi del tipus de sortida d'àudio serà efectiu quan es reiniciï el "
3600 +#~ msgid "Could not open link"
3601 +#~ msgstr "No s'ha pogut obrir l'enllaç"
3603 +#~ msgid "Totem could not initialize the configuration engine."
3604 +#~ msgstr "El Totem no ha pogut inicialitzar el motor de configuració."
3606 +#~ msgid "Make sure that GNOME is properly installed."
3607 +#~ msgstr "Assegureu-vos que el GNOME està instal·lat correctament."
3610 +#~ msgstr "Connector"
3613 +#~ msgstr "Habilitat"
3616 +#~ "Unable to activate plugin %s.\n"
3619 +#~ "No s'ha pogut activar el connector %s.\n"
3622 +#~ msgid "Unable to activate plugin %s"
3623 +#~ msgstr "No s'ha pogut activar el connector %s"
3625 +#~ msgid "Plugin Error"
3626 +#~ msgstr "Error del connector"
3628 +#~ msgid "Chapters support"
3629 +#~ msgstr "Permet l'ús de capítols"
3631 +#~ msgid "Continue to watch movie without loaded chapters"
3632 +#~ msgstr "Continua reproduint la pel·lícula sense carregar els capítols"
3637 +#~ msgid "Please check you rights and free space"
3638 +#~ msgstr "Comproveu que teniu permisos i teniu espai lliure"
3640 +#~ msgid "Could not connect to the Galago daemon."
3641 +#~ msgstr "No s'ha pogut connectar amb el dimoni del Galago."
3643 +#~ msgid "Jamendo Plugin Configuration"
3644 +#~ msgstr "Configuració del connector Jamendo"
3646 +#~ msgid "Recordings"
3647 +#~ msgstr "Enregistraments"
3649 +#~ msgid "MythTV Recordings"
3650 +#~ msgstr "Enregistraments del MythTV"
3652 +#~ msgid "MythTV LiveTV"
3653 +#~ msgstr "LiveTV del MythTV"
3655 +#~ msgid "_Download Movie Subtitles..."
3656 +#~ msgstr "_Baixa subtítols de pel·lícules..."
3661 +#~ msgid "Could not load the \"Skip to\" dialog interface."
3662 +#~ msgstr "No s'ha pogut carregar la interfície de diàleg de «Salta a»."
3664 +#~ msgid "Could not get name and thumbnail for %s: %s"
3665 +#~ msgstr "No s'han pogut obtenir el nom i la miniatura per a %s: %s"
3667 +#~ msgid "File Error"
3668 +#~ msgstr "Error en el fitxer"
3670 +#~ msgid "Error Looking Up Video URI"
3671 +#~ msgstr "S'ha produït un error en consultar l'URI del vídeo"
3673 #~ msgid "Deinterlace"
3674 #~ msgstr "Desentrellaça"
3675 @@ -3578,9 +3789,6 @@ msgstr ""
3676 #~ "No s'ha pogut carregar la interfície principal (vanity.glade).\n"
3677 #~ "Assegureu-vos que el Vanity està instal·lat correctament."
3680 -#~ msgstr "Desa..."
3682 #~ msgid "Backend options"
3683 #~ msgstr "Opcions del rerefons"
3685 @@ -3848,9 +4056,6 @@ msgstr ""
3686 #~ msgid "Unnamed Video Device"
3687 #~ msgstr "Dispositiu de vídeo no anomenat"
3689 -#~ msgid "No reason given."
3690 -#~ msgstr "No s'ha donat cap raó."
3692 #~ msgid "Connecting to the server"
3693 #~ msgstr "S'està connectant al servidor"
3695 @@ -3934,9 +4139,6 @@ msgstr ""
3696 #~ msgid "Only start if there isn't already a Totem application running"
3697 #~ msgstr "Només s'inicia si no hi ha una aplicació del Totem executant-se"
3699 -#~ msgid "Next stream"
3700 -#~ msgstr "Següent flux"
3702 #~ msgid "Previous stream"
3703 #~ msgstr "Anterior flux"
3705 diff --git a/po/es.po b/po/es.po
3706 index d2e3a89..9164c99 100644
3709 @@ -14,8 +14,8 @@ msgid ""
3711 "Project-Id-Version: totem.master\n"
3712 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
3713 -"product=totem&component=general\n"
3714 -"POT-Creation-Date: 2011-01-13 18:04+0000\n"
3715 +"product=totem&keywords=I18N+L10N&component=general\n"
3716 +"POT-Creation-Date: 2011-05-16 16:25+0000\n"
3717 "PO-Revision-Date: 2011-01-14 10:49+0100\n"
3718 "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
3719 "Language-Team: Español <gnome-es-list@gnome.org>\n"
3720 @@ -80,13 +80,13 @@ msgstr "_Seleccionar subtítulos de texto…"
3723 #: ../data/properties.ui.h:1
3724 -#: ../src/plugins/properties/bacon-video-widget-properties.c:175
3725 +#: ../src/properties/bacon-video-widget-properties.c:175
3730 #: ../data/properties.ui.h:2
3731 -#: ../src/plugins/properties/bacon-video-widget-properties.c:173
3732 +#: ../src/properties/bacon-video-widget-properties.c:173
3736 @@ -122,7 +122,7 @@ msgstr "Sonido"
3739 #: ../data/properties.ui.h:10
3740 -#: ../src/plugins/properties/bacon-video-widget-properties.c:171
3741 +#: ../src/properties/bacon-video-widget-properties.c:171
3742 msgctxt "Audio codec"
3745 @@ -172,10 +172,10 @@ msgstr "Título:"
3748 #: ../data/properties.ui.h:21
3749 -#: ../src/plugins/properties/bacon-video-widget-properties.c:145
3750 -#: ../src/plugins/properties/bacon-video-widget-properties.c:147
3751 -#: ../src/plugins/properties/bacon-video-widget-properties.c:149
3752 -#: ../src/plugins/properties/bacon-video-widget-properties.c:151
3753 +#: ../src/properties/bacon-video-widget-properties.c:145
3754 +#: ../src/properties/bacon-video-widget-properties.c:147
3755 +#: ../src/properties/bacon-video-widget-properties.c:149
3756 +#: ../src/properties/bacon-video-widget-properties.c:151
3758 msgstr "Desconocido"
3760 @@ -186,7 +186,7 @@ msgstr "Vídeo"
3763 #: ../data/properties.ui.h:23
3764 -#: ../src/plugins/properties/bacon-video-widget-properties.c:160
3765 +#: ../src/properties/bacon-video-widget-properties.c:160
3766 msgctxt "Video codec"
3769 @@ -567,7 +567,7 @@ msgstr "Cuadrada"
3770 msgid "Start playing files from last position"
3771 msgstr "Reproducir archivos desde la última posición"
3773 -#: ../data/totem.ui.h:96 ../src/backend/bacon-video-widget-gst-0.10.c:6003
3774 +#: ../data/totem.ui.h:96 ../src/backend/bacon-video-widget-gst-0.10.c:6012
3778 @@ -994,33 +994,33 @@ msgstr ""
3779 msgid "Not a launchable item"
3780 msgstr "No es un elemento lanzable"
3782 -#: ../src/eggfileformatchooser.c:235
3783 +#: ../src/eggfileformatchooser.c:240
3785 msgid "File _Format: %s"
3786 msgstr "_Formato de archivo: %s"
3788 -#: ../src/eggfileformatchooser.c:374
3789 +#: ../src/eggfileformatchooser.c:379
3791 msgstr "Todos los archivos"
3793 -#: ../src/eggfileformatchooser.c:375
3794 +#: ../src/eggfileformatchooser.c:380
3795 msgid "All Supported Files"
3796 msgstr "Todos los archivos soportados"
3798 -#: ../src/eggfileformatchooser.c:384
3799 +#: ../src/eggfileformatchooser.c:389
3800 msgid "By Extension"
3801 msgstr "Por extensión"
3803 -#: ../src/eggfileformatchooser.c:399
3804 +#: ../src/eggfileformatchooser.c:404
3806 msgstr "Formato de archivo"
3808 -#: ../src/eggfileformatchooser.c:417
3809 +#: ../src/eggfileformatchooser.c:422
3810 msgid "Extension(s)"
3811 msgstr "Extensiones"
3813 #. Translators: the parameter is a filename
3814 -#: ../src/eggfileformatchooser.c:652
3815 +#: ../src/eggfileformatchooser.c:657
3818 "The program was not able to find out the file format you want to use for `%"
3819 @@ -1031,7 +1031,7 @@ msgstr ""
3820 "s». Asegúrese de que usa una extensión conocida para ese archivo o elija "
3821 "manualmente un formato de archivo de la lista inferior."
3823 -#: ../src/eggfileformatchooser.c:659
3824 +#: ../src/eggfileformatchooser.c:664
3825 msgid "File format not recognized"
3826 msgstr "Formato de archivo no reconocido"
3828 @@ -1063,6 +1063,58 @@ msgstr "Opciones de gestión de la sesión:"
3829 msgid "Show session management options"
3830 msgstr "Mostrar las opciones de gestión de la sesión"
3833 +#: ../src/properties/bacon-video-widget-properties.c:158
3834 +msgctxt "Dimensions"
3838 +#: ../src/properties/bacon-video-widget-properties.c:163
3839 +#: ../src/properties/bacon-video-widget-properties.c:240
3840 +msgctxt "Video bit rate"
3844 +#: ../src/properties/bacon-video-widget-properties.c:166
3845 +#: ../src/properties/bacon-video-widget-properties.c:250
3846 +msgctxt "Frame rate"
3850 +#: ../src/properties/bacon-video-widget-properties.c:169
3851 +#: ../src/properties/bacon-video-widget-properties.c:273
3852 +msgctxt "Audio bit rate"
3856 +#: ../src/properties/bacon-video-widget-properties.c:237
3861 +#: ../src/properties/bacon-video-widget-properties.c:240
3862 +#: ../src/properties/bacon-video-widget-properties.c:273
3867 +#: ../src/properties/bacon-video-widget-properties.c:247
3869 +msgid "%d frame per second"
3870 +msgid_plural "%d frames per second"
3871 +msgstr[0] "%d fotograma por segundo"
3872 +msgstr[1] "%d fotogramas por segundo"
3874 +#: ../src/properties/bacon-video-widget-properties.c:276
3879 +#: ../src/properties/bacon-video-widget-properties.c:276
3880 +msgctxt "Sample rate"
3884 #: ../src/totem-audio-preview.c:82
3885 msgid "Audio Preview"
3886 msgstr "Vista previa del sonido"
3887 @@ -1079,7 +1131,7 @@ msgstr "_Reproducir ahora"
3891 -#: ../src/totem-fullscreen.c:617
3892 +#: ../src/totem-fullscreen.c:619
3894 msgstr "Ningún archivo"
3896 @@ -1153,33 +1205,33 @@ msgstr "Automático"
3898 #. * This is not a JPEG image, but a disc image, for example,
3900 -#: ../src/totem-menu.c:739
3901 +#: ../src/totem-menu.c:767
3903 msgid "Play Image '%s'"
3904 msgstr "Reproducir imagen «%s»"
3906 -#: ../src/totem-menu.c:742 ../src/totem-menu.c:824
3907 +#: ../src/totem-menu.c:770 ../src/totem-menu.c:853
3910 msgstr "dispositivo%d"
3912 -#: ../src/totem-menu.c:821
3913 +#: ../src/totem-menu.c:850
3915 msgid "Play Disc '%s'"
3916 msgstr "Reproducir disco «%s»"
3918 #. This lists the back-end type and version, such as
3919 #. * Movie Player using GStreamer 0.10.1
3920 -#: ../src/totem-menu.c:1172
3921 +#: ../src/totem-menu.c:1201
3923 msgid "Movie Player using %s"
3924 msgstr "Reproductor de películas que usa %s"
3926 -#: ../src/totem-menu.c:1176
3927 +#: ../src/totem-menu.c:1205
3928 msgid "Copyright © 2002-2009 Bastien Nocera"
3929 msgstr "Copyright © 2002-2009 Bastien Nocera"
3931 -#: ../src/totem-menu.c:1181 ../browser-plugin/totem-plugin-viewer.c:1166
3932 +#: ../src/totem-menu.c:1210 ../browser-plugin/totem-plugin-viewer.c:1163
3933 msgid "translator-credits"
3935 "Jorge González <jorgegonz@svn.gnome.org>\n"
3936 @@ -1190,11 +1242,11 @@ msgstr ""
3937 "Germán Poo Caamaño <gpoo@ubiobio.cl>\n"
3938 "Daniel Mustieles <daniel.mustieles@gmail.com>"
3940 -#: ../src/totem-menu.c:1185
3941 +#: ../src/totem-menu.c:1214
3942 msgid "Totem Website"
3943 msgstr "Página web de Totem"
3945 -#: ../src/totem-menu.c:1220
3946 +#: ../src/totem-menu.c:1248
3947 msgid "Configure Plugins"
3948 msgstr "Configurar complementos"
3950 @@ -1230,7 +1282,7 @@ msgid "Stopped"
3953 #: ../src/totem-object.c:1141 ../src/totem-object.c:1168
3954 -#: ../src/totem-object.c:1796 ../src/totem-object.c:1959
3955 +#: ../src/totem-object.c:1798 ../src/totem-object.c:1962
3957 msgid "Totem could not play '%s'."
3958 msgstr "Totem no pudo reproducir «%s»."
3959 @@ -1296,7 +1348,7 @@ msgstr "Introduzca otro disco para reproducir."
3960 msgid "Totem was not able to play this disc."
3961 msgstr "No no fue capaz de reproducir este disco."
3963 -#: ../src/totem-object.c:1300 ../src/totem-object.c:4273
3964 +#: ../src/totem-object.c:1300 ../src/totem-object.c:4280
3966 msgstr "No hay razón."
3968 @@ -1310,42 +1362,42 @@ msgstr ""
3969 "Considere usar un reproductor de música o un extractor de CD para reproducir "
3972 -#: ../src/totem-object.c:1802
3973 +#: ../src/totem-object.c:1804
3974 msgid "No error message"
3975 msgstr "Sin mensaje de error"
3977 -#: ../src/totem-object.c:2194
3978 +#: ../src/totem-object.c:2197
3979 msgid "Totem could not display the help contents."
3980 msgstr "Totem no pudo mostrar el contenido de la ayuda."
3982 -#: ../src/totem-object.c:2532 ../src/totem-object.c:2534
3983 -#: ../browser-plugin/totem-plugin-viewer.c:1469
3984 +#: ../src/totem-object.c:2535 ../src/totem-object.c:2537
3985 +#: ../browser-plugin/totem-plugin-viewer.c:1466
3986 msgid "An error occurred"
3987 msgstr "Ha ocurrido un error"
3989 -#: ../src/totem-object.c:4107 ../src/totem-object.c:4109
3990 +#: ../src/totem-object.c:4114 ../src/totem-object.c:4116
3991 msgid "Previous Chapter/Movie"
3992 msgstr "Capítulo / película anterior"
3994 -#: ../src/totem-object.c:4116 ../src/totem-object.c:4118
3995 +#: ../src/totem-object.c:4123 ../src/totem-object.c:4125
3996 msgid "Play / Pause"
3997 msgstr "Reproducir / Pausar"
3999 -#: ../src/totem-object.c:4126 ../src/totem-object.c:4128
4000 +#: ../src/totem-object.c:4133 ../src/totem-object.c:4135
4001 msgid "Next Chapter/Movie"
4002 msgstr "Capítulo / película siguiente"
4004 #. Translators: this is the tooltip text for the fullscreen button in the controls box in Totem's main window.
4005 #. Translators: this is the accessibility text for the fullscreen button in the controls box in Totem's main window.
4006 -#: ../src/totem-object.c:4140 ../src/totem-object.c:4142
4007 +#: ../src/totem-object.c:4147 ../src/totem-object.c:4149
4009 msgstr "Pantalla completa"
4011 -#: ../src/totem-object.c:4273
4012 +#: ../src/totem-object.c:4280
4013 msgid "Totem could not startup."
4014 msgstr "No se ha podido iniciar Totem."
4016 -#: ../src/totem-open-location.c:179
4017 +#: ../src/totem-open-location.c:182
4018 msgid "Open Location..."
4019 msgstr "Abrir dirección…"
4021 @@ -1426,69 +1478,57 @@ msgid "Can't enqueue and replace at the same time"
4022 msgstr "No se puede encolar y reemplazar al mismo tiempo"
4024 #. By extension entry
4025 -#: ../src/totem-playlist.c:157
4026 +#: ../src/totem-playlist.c:161
4027 msgid "MP3 ShoutCast playlist"
4028 msgstr "Lista de reproducción MP3 ShoutCast"
4030 -#: ../src/totem-playlist.c:158
4031 +#: ../src/totem-playlist.c:162
4032 msgid "MP3 audio (streamed)"
4033 msgstr "Sonido MP3 (en flujo)"
4035 -#: ../src/totem-playlist.c:159
4036 +#: ../src/totem-playlist.c:163
4037 msgid "MP3 audio (streamed, DOS format)"
4038 msgstr "Sonido MP3 (en flujo, formato DOS)"
4040 -#: ../src/totem-playlist.c:160
4041 +#: ../src/totem-playlist.c:164
4042 msgid "XML Shareable Playlist"
4043 msgstr "Lista de reproducción XML compartible"
4045 #. This is "Title 3", where title is a DVD title
4046 #. * Note: NOT a DVD chapter
4047 -#: ../src/totem-playlist.c:359
4048 +#: ../src/totem-playlist.c:363
4053 -#: ../src/totem-playlist.c:458
4054 +#: ../src/totem-playlist.c:462
4055 msgid "Could not save the playlist"
4056 msgstr "No se pudo guardar la lista de reproducción"
4058 -#: ../src/totem-playlist.c:1033
4059 +#: ../src/totem-playlist.c:1037
4060 msgid "Save Playlist"
4061 msgstr "Guardar lista de reproducción"
4063 #. translators: Playlist is the default saved playlist filename,
4064 #. * without the suffix
4065 -#: ../src/totem-playlist.c:1045 ../src/totem-sidebar.c:140
4066 +#: ../src/totem-playlist.c:1049 ../src/totem-sidebar.c:140
4068 msgstr "Lista de reproducción"
4070 -#: ../src/totem-playlist.c:1852
4071 +#: ../src/totem-playlist.c:1869
4073 msgid "The playlist '%s' could not be parsed. It might be damaged."
4074 msgstr "La lista de reproducción «%s» no se pudo analizar. Puede estar dañada."
4076 -#: ../src/totem-playlist.c:1853
4077 +#: ../src/totem-playlist.c:1870
4078 msgid "Playlist error"
4079 msgstr "Error en la lista de reproducción"
4081 -#: ../src/totem-preferences.c:66
4082 -msgid "Enable visual effects?"
4083 -msgstr "¿Quiere activar los efectos visuales?"
4085 -#: ../src/totem-preferences.c:68
4087 -"It seems you are running Totem remotely.\n"
4088 -"Are you sure you want to enable the visual effects?"
4090 -"Parece que está ejecutando Totem remotamente.\n"
4091 -"¿Está seguro de que quiere activar los efectos visuales?"
4093 -#: ../src/totem-preferences.c:332
4094 +#: ../src/totem-preferences.c:295
4096 msgstr "Preferencias"
4098 -#: ../src/totem-preferences.c:490
4099 +#: ../src/totem-preferences.c:451
4100 msgid "Select Subtitle Font"
4101 msgstr "Seleccionar la tipografía de los subtítulos"
4103 @@ -1689,7 +1729,7 @@ msgstr "No existe el URI del vídeo"
4104 #. Translators: The first string is "Filename" (as translated); the second is an actual filename.
4105 #. The third string is "Resolution" (as translated); the fourth and fifth are screenshot height and width, respectively.
4106 #. The sixth string is "Duration" (as translated); the seventh is the movie duration in words.
4107 -#: ../src/totem-video-thumbnailer.c:679
4108 +#: ../src/totem-video-thumbnailer.c:689
4112 @@ -1700,43 +1740,43 @@ msgstr ""
4113 "<b>%s</b>: %d×%d\n"
4116 -#: ../src/totem-video-thumbnailer.c:680
4117 +#: ../src/totem-video-thumbnailer.c:690
4119 msgstr "Nombre del archivo"
4121 -#: ../src/totem-video-thumbnailer.c:682
4122 +#: ../src/totem-video-thumbnailer.c:692
4126 -#: ../src/totem-video-thumbnailer.c:685
4127 +#: ../src/totem-video-thumbnailer.c:695
4131 -#: ../src/totem-uri.c:502 ../src/plugins/chapters/totem-chapters.c:1000
4132 +#: ../src/totem-uri.c:504 ../src/plugins/chapters/totem-chapters.c:998
4134 msgstr "Todos los archivos"
4136 -#: ../src/totem-uri.c:507 ../src/plugins/chapters/totem-chapters.c:997
4137 +#: ../src/totem-uri.c:509 ../src/plugins/chapters/totem-chapters.c:995
4138 msgid "Supported files"
4139 msgstr "Archivos soportados"
4141 -#: ../src/totem-uri.c:519
4142 +#: ../src/totem-uri.c:521
4144 msgstr "Archivos de audio"
4146 -#: ../src/totem-uri.c:527
4147 +#: ../src/totem-uri.c:529
4149 msgstr "Archivos de vídeo"
4151 -#: ../src/totem-uri.c:537
4152 +#: ../src/totem-uri.c:539
4153 msgid "Subtitle files"
4154 msgstr "Archivos de subtítulos"
4156 -#: ../src/totem-uri.c:589
4157 +#: ../src/totem-uri.c:591
4158 msgid "Select Text Subtitles"
4159 msgstr "Seleccionar los subtítulos de texto"
4161 -#: ../src/totem-uri.c:652
4162 +#: ../src/totem-uri.c:654
4163 msgid "Select Movies or Playlists"
4164 msgstr "Seleccionar películas o listas de reproducción"
4166 @@ -1756,12 +1796,12 @@ msgstr ""
4167 "disponibles de la línea de comandos.\n"
4169 #: ../src/totem.c:254 ../src/totem.c:263
4170 -#: ../browser-plugin/totem-plugin-viewer.c:666
4171 -#: ../browser-plugin/totem-plugin-viewer.c:1864
4172 +#: ../browser-plugin/totem-plugin-viewer.c:663
4173 +#: ../browser-plugin/totem-plugin-viewer.c:1861
4174 msgid "Totem Movie Player"
4175 msgstr "Reproductor de películas Totem"
4177 -#: ../src/totem.c:255 ../browser-plugin/totem-plugin-viewer.c:2305
4178 +#: ../src/totem.c:255 ../browser-plugin/totem-plugin-viewer.c:2302
4179 msgid "Could not initialize the thread-safe libraries."
4180 msgstr "No se pudo inicializar el soporte de hilos seguro."
4182 @@ -1769,23 +1809,23 @@ msgstr "No se pudo inicializar el soporte de hilos seguro."
4183 msgid "Verify your system installation. Totem will now exit."
4184 msgstr "Verifique la instalación de su sistema. Totem ahora terminará."
4186 -#: ../src/backend/bacon-video-widget-gst-0.10.c:1843
4187 +#: ../src/backend/bacon-video-widget-gst-0.10.c:1850
4188 msgid "Password requested for RTSP server"
4189 msgstr "Contraseña solicitada para el servidor RTSP"
4191 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3115
4192 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3119
4193 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3124
4194 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3128
4196 msgid "Audio Track #%d"
4197 msgstr "Pista de sonido nº %d"
4199 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3147
4200 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3151
4201 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3156
4202 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3160
4204 msgid "Subtitle #%d"
4205 msgstr "Subtítulo nº %d"
4207 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3560
4208 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3569
4210 "The requested audio output was not found. Please select another audio output "
4211 "in the Multimedia Systems Selector."
4212 @@ -1793,17 +1833,17 @@ msgstr ""
4213 "No se encontró la salida de sonido solicitada. Seleccione otra salida de "
4214 "sonido en el «Selector de sistemas multimedia»."
4216 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3565
4217 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3574
4218 msgid "Location not found."
4219 msgstr "No se encontró la dirección."
4221 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3569
4222 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3578
4224 "Could not open location; you might not have permission to open the file."
4226 "No se pudo abrir la dirección; quizá no tiene permiso para abrir el archivo."
4228 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3580
4229 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3589
4231 "The video output is in use by another application. Please close other video "
4232 "applications, or select another video output in the Multimedia Systems "
4233 @@ -1813,7 +1853,7 @@ msgstr ""
4234 "aplicaciones de vídeo o seleccione otra salida de vídeo en el selector de "
4235 "Sistemas Multimedia."
4237 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3586
4238 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3595
4240 "The audio output is in use by another application. Please select another "
4241 "audio output in the Multimedia Systems Selector. You may want to consider "
4242 @@ -1824,15 +1864,15 @@ msgstr ""
4243 "un servidor de sonido."
4245 #. should be exactly one missing thing (source or converter)
4246 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3604
4247 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3610
4248 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3613
4249 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3619
4251 msgid "The playback of this movie requires a %s plugin which is not installed."
4253 "La reproducción de esta película requiere un complemento %s que no está "
4256 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3611
4257 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3620
4260 "The playback of this movie requires the following decoders which are not "
4261 @@ -1845,34 +1885,34 @@ msgstr ""
4265 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3636
4266 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3645
4268 "Cannot play this file over the network. Try downloading it to disk first."
4270 "No se puede reproducir este archivo a través de la red. Intente descargarlo "
4273 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3708
4274 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3717
4275 msgid "Media file could not be played."
4276 msgstr "El archivo soporte no se pudo reproducir."
4278 -#: ../src/backend/bacon-video-widget-gst-0.10.c:5999
4279 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6008
4283 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6001
4284 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6010
4288 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6348
4289 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6357
4290 msgid "Too old version of GStreamer installed."
4291 msgstr "La versión de GStreamer que está instalada es demasiado antigua."
4293 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6355
4294 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6364
4295 msgid "Media contains no supported video streams."
4296 msgstr "El soporte no contiene ningún flujo de vídeo soportado."
4298 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6840
4299 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6847
4301 "Failed to create a GStreamer play object. Please check your GStreamer "
4303 @@ -1880,8 +1920,8 @@ msgstr ""
4304 "Falló al crear el objeto de reproducción GStreamer. Compruebe su instalación "
4307 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6951
4308 -#: ../src/backend/bacon-video-widget-gst-0.10.c:7086
4309 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6958
4310 +#: ../src/backend/bacon-video-widget-gst-0.10.c:7093
4312 "Failed to open video output. It may not be available. Please select another "
4313 "video output in the Multimedia Systems Selector."
4314 @@ -1889,7 +1929,7 @@ msgstr ""
4315 "Falló al abrir la salida de vídeo. Quizá no esté disponible. Seleccione otra "
4316 "salida de vídeo en el «Selector de sistemas multimedia»."
4318 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6963
4319 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6970
4321 "Could not find the video output. You may need to install additional "
4322 "GStreamer plugins, or select another video output in the Multimedia Systems "
4323 @@ -1899,7 +1939,7 @@ msgstr ""
4324 "complementos adicionales de GStreamer, o seleccionar otra salida de vídeo en "
4325 "el «Selector de sistemas multimedia»."
4327 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6998
4328 +#: ../src/backend/bacon-video-widget-gst-0.10.c:7005
4330 "Failed to open audio output. You may not have permission to open the sound "
4331 "device, or the sound server may not be running. Please select another audio "
4332 @@ -1909,7 +1949,7 @@ msgstr ""
4333 "dispositivo de sonido, o el servidor de sonido quizá no esté funcionando. "
4334 "Seleccione otra salida de sonido en el «Selector de Sistemas Multimedia»."
4336 -#: ../src/backend/bacon-video-widget-gst-0.10.c:7018
4337 +#: ../src/backend/bacon-video-widget-gst-0.10.c:7025
4339 "Could not find the audio output. You may need to install additional "
4340 "GStreamer plugins, or select another audio output in the Multimedia Systems "
4341 @@ -2047,14 +2087,14 @@ msgstr "No se pudo escribir un proyecto."
4343 #: ../src/plugins/brasero-disc-recorder/brasero-disc-recorder.plugin.in.h:1
4344 msgid "Records (S)VCDs or video DVDs"
4345 -msgstr "Grar (S)VCD o DVD de vídeo"
4346 +msgstr "Grabar (S)VCD o DVD de vídeo"
4348 #: ../src/plugins/brasero-disc-recorder/brasero-disc-recorder.plugin.in.h:2
4349 msgid "Video Disc Recorder"
4350 msgstr "Grabador de discos de vídeo"
4352 #: ../src/plugins/chapters/chapters.plugin.in.h:1
4353 -#: ../src/plugins/chapters/totem-chapters.c:1139
4354 +#: ../src/plugins/chapters/totem-chapters.c:1137
4358 @@ -2127,64 +2167,64 @@ msgstr ""
4359 "<b>Título: </b>%s\n"
4360 "<b>Tiempo de inicio: </b>%s"
4362 -#: ../src/plugins/chapters/totem-chapters.c:330
4363 +#: ../src/plugins/chapters/totem-chapters.c:328
4364 msgid "Error while reading file with chapters"
4365 msgstr "Error al intentar leer el archivo con capítulos"
4367 -#: ../src/plugins/chapters/totem-chapters.c:545
4368 +#: ../src/plugins/chapters/totem-chapters.c:543
4369 msgid "Chapter with the same time already exists"
4370 msgstr "Ya existe un capítulo con los mismos tiempos"
4372 -#: ../src/plugins/chapters/totem-chapters.c:546
4373 +#: ../src/plugins/chapters/totem-chapters.c:544
4374 msgid "Try another name or remove an existing chapter."
4375 msgstr "Intente usar otro nombre o quite un capítulo existente."
4377 -#: ../src/plugins/chapters/totem-chapters.c:719
4378 +#: ../src/plugins/chapters/totem-chapters.c:717
4379 msgid "Error while writing file with chapters"
4380 msgstr "Error al escribir el archivo con capítulos"
4382 -#: ../src/plugins/chapters/totem-chapters.c:844
4383 +#: ../src/plugins/chapters/totem-chapters.c:842
4384 msgid "Error occurred while saving chapters"
4385 msgstr "Ocurrió un error al guardar los capítulos"
4387 -#: ../src/plugins/chapters/totem-chapters.c:845
4388 +#: ../src/plugins/chapters/totem-chapters.c:843
4390 "Please check you have permission to write to the folder containing the movie."
4392 "Compruebe que tiene permisos para escribir en la carpeta que contiene la "
4395 -#: ../src/plugins/chapters/totem-chapters.c:978
4396 +#: ../src/plugins/chapters/totem-chapters.c:976
4397 msgid "Open Chapter File"
4398 msgstr "Abrir archivo de capítulo"
4400 -#: ../src/plugins/chapters/totem-chapters.c:1095
4401 +#: ../src/plugins/chapters/totem-chapters.c:1093
4402 msgid "Chapter Screenshot"
4403 msgstr "Captura del capítulo"
4405 -#: ../src/plugins/chapters/totem-chapters.c:1106
4406 +#: ../src/plugins/chapters/totem-chapters.c:1104
4407 msgid "Chapter Title"
4408 msgstr "Título del capítulo"
4410 -#: ../src/plugins/chapters/totem-chapters.c:1184
4411 +#: ../src/plugins/chapters/totem-chapters.c:1182
4412 msgid "Save changes to chapter list before closing?"
4413 msgstr "¿Guardar los cambios de la lista de capítulos antes de cerrar?"
4415 #. Translators: close Totem without saving changes to the chapter list of the current movie.
4416 -#: ../src/plugins/chapters/totem-chapters.c:1189
4417 +#: ../src/plugins/chapters/totem-chapters.c:1187
4418 msgid "Close without Saving"
4419 msgstr "Cerrar sin guardar"
4421 #. Translators: save changes to the chapter list of the current movie before closing Totem.
4422 -#: ../src/plugins/chapters/totem-chapters.c:1191
4423 +#: ../src/plugins/chapters/totem-chapters.c:1189
4427 -#: ../src/plugins/chapters/totem-chapters.c:1194
4428 +#: ../src/plugins/chapters/totem-chapters.c:1192
4429 msgid "If you don't save, changes to the chapter list will be lost."
4430 msgstr "Si no guarda, se perderán los cambios en el capítulo."
4432 -#: ../src/plugins/chapters/totem-cmml-parser.c:559
4433 +#: ../src/plugins/chapters/totem-cmml-parser.c:651
4434 msgid "Failed to parse CMML file"
4435 msgstr "Falló al analizar el archivo CMML"
4437 @@ -2193,7 +2233,7 @@ msgstr "Falló al analizar el archivo CMML"
4441 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:116
4442 +#: ../src/plugins/coherence_upnp/coherence_upnp.py:117
4443 #: ../src/plugins/coherence_upnp/coherence_upnp.plugin.in.h:2
4444 msgid "Coherence DLNA/UPnP Client"
4445 msgstr "Cliente de DLNA/UPnP Coherence"
4446 @@ -2214,24 +2254,16 @@ msgstr ""
4447 "Complemento para enviar notificaciones de las películas actualmente en "
4448 "reproducción al subsistema D-Bus."
4450 -#: ../src/plugins/galago/galago.plugin.in.h:1
4451 +#: ../src/plugins/im-status/totem-im-status.plugin.in.h:1
4452 msgid "Instant Messenger status"
4453 msgstr "Estado de la mensajería instantánea"
4455 -#: ../src/plugins/galago/galago.plugin.in.h:2
4456 +#: ../src/plugins/im-status/totem-im-status.plugin.in.h:2
4457 msgid "Set your Instant Messenger status to away when a movie is playing"
4459 "Establecer el estado de su programa de mensajería instantánea a ausente "
4460 "cuando se está reproduciendo una película"
4462 -#: ../src/plugins/galago/totem-galago.c:117
4463 -msgid "Error loading Galago plugin"
4464 -msgstr "Error al cargar el complemento Galago"
4466 -#: ../src/plugins/galago/totem-galago.c:117
4467 -msgid "Could not connect to the Galago daemon."
4468 -msgstr "No se pudo conectar con el demonio Galago."
4470 #: ../src/plugins/gromit/gromit.plugin.in.h:1
4471 msgid "Gromit Annotations"
4472 msgstr "Anotaciones Gromit"
4473 @@ -2246,7 +2278,7 @@ msgstr "No se encontró el binario gromit."
4475 #. Add the interface to Totem's sidebar
4476 #: ../src/plugins/iplayer/iplayer.plugin.in.h:1
4477 -#: ../src/plugins/iplayer/iplayer.py:41
4478 +#: ../src/plugins/iplayer/iplayer.py:42
4480 msgstr "Reproductor iPlayer de la BBC"
4482 @@ -2256,11 +2288,11 @@ msgstr ""
4483 "Reproducir programas de la BBC de los últimos 7 días desde el servicio "
4484 "iPlayer de la BBC."
4486 -#: ../src/plugins/iplayer/iplayer.py:66
4487 +#: ../src/plugins/iplayer/iplayer.py:67
4488 msgid "Error listing channel categories"
4489 msgstr "Error al listar las categorías de canales"
4491 -#: ../src/plugins/iplayer/iplayer.py:66
4492 +#: ../src/plugins/iplayer/iplayer.py:67
4494 "There was an unknown error getting the list of television channels available "
4496 @@ -2270,16 +2302,16 @@ msgstr ""
4498 #. Append a dummy child row so that the expander's visible; we can
4499 #. then queue off the expander to load the programme listing for this category
4500 -#: ../src/plugins/iplayer/iplayer.py:74
4501 +#: ../src/plugins/iplayer/iplayer.py:75
4505 #. Translators: the "programme feed" is the list of TV shows available to watch online
4506 -#: ../src/plugins/iplayer/iplayer.py:119
4507 +#: ../src/plugins/iplayer/iplayer.py:120
4508 msgid "Error getting programme feed"
4509 msgstr "Error al obtener el proveedor de la programación"
4511 -#: ../src/plugins/iplayer/iplayer.py:119
4512 +#: ../src/plugins/iplayer/iplayer.py:120
4514 "There was an error getting the list of programmes for this channel and "
4515 "category combination."
4516 @@ -2325,7 +2357,7 @@ msgid "Preferred audio _format:"
4517 msgstr "_Formato de sonido preferido:"
4519 #: ../src/plugins/jamendo/jamendo.ui.h:8
4520 -#: ../src/plugins/tracker/totem-tracker-widget.c:521
4521 +#: ../src/plugins/tracker/totem-tracker-widget.c:761
4522 #: ../src/plugins/youtube/youtube.ui.h:2
4523 msgid "Search Results"
4524 msgstr "Resultados de la búsqueda"
4525 @@ -2335,7 +2367,7 @@ msgid "_Open Jamendo Album Page in Browser"
4526 msgstr "_Abrir la página del álbum en Jamendo en el navegador"
4528 #: ../src/plugins/jamendo/jamendo.plugin.in.h:1
4529 -#: ../src/plugins/jamendo/jamendo.py:127
4530 +#: ../src/plugins/jamendo/jamendo.py:128
4534 @@ -2350,34 +2382,34 @@ msgstr ""
4535 msgid "You need to install the Python simplejson module."
4536 msgstr "Debe instalar el módulo Python simplejson."
4538 -#: ../src/plugins/jamendo/jamendo.py:260 ../src/plugins/jamendo/jamendo.py:273
4539 -#: ../src/plugins/jamendo/jamendo.py:297
4540 +#: ../src/plugins/jamendo/jamendo.py:261 ../src/plugins/jamendo/jamendo.py:274
4541 +#: ../src/plugins/jamendo/jamendo.py:298
4544 msgstr "Artista: %s"
4546 #. Translators: this is the release date of an album in Python strptime format
4547 -#: ../src/plugins/jamendo/jamendo.py:266
4548 +#: ../src/plugins/jamendo/jamendo.py:267
4552 #. Translators: this is the release time of an album in Python strftime format
4553 -#: ../src/plugins/jamendo/jamendo.py:268
4554 +#: ../src/plugins/jamendo/jamendo.py:269
4559 -#: ../src/plugins/jamendo/jamendo.py:274
4560 +#: ../src/plugins/jamendo/jamendo.py:275
4565 -#: ../src/plugins/jamendo/jamendo.py:275
4566 +#: ../src/plugins/jamendo/jamendo.py:276
4568 msgid "Released on: %s"
4569 msgstr "Publicado en: %s"
4571 -#: ../src/plugins/jamendo/jamendo.py:276
4572 +#: ../src/plugins/jamendo/jamendo.py:277
4575 msgstr "Licencia: %s"
4576 @@ -2385,26 +2417,26 @@ msgstr "Licencia: %s"
4578 #. Translators: this is the title of a track in Python format
4579 #. (first argument is the track number, second is the track title)
4580 -#: ../src/plugins/jamendo/jamendo.py:289
4581 +#: ../src/plugins/jamendo/jamendo.py:290
4586 -#: ../src/plugins/jamendo/jamendo.py:296
4587 +#: ../src/plugins/jamendo/jamendo.py:297
4592 -#: ../src/plugins/jamendo/jamendo.py:298
4593 +#: ../src/plugins/jamendo/jamendo.py:299
4595 msgid "Duration: %s"
4596 msgstr "Duración: %s"
4598 -#: ../src/plugins/jamendo/jamendo.py:355
4599 +#: ../src/plugins/jamendo/jamendo.py:356
4600 msgid "Fetching albums, please wait…"
4601 msgstr "Obteniendo álbumes, espere…"
4603 -#: ../src/plugins/jamendo/jamendo.py:410
4604 +#: ../src/plugins/jamendo/jamendo.py:411
4607 "Failed to connect to Jamendo server.\n"
4608 @@ -2413,24 +2445,24 @@ msgstr ""
4609 "Falló al contactar con el servidor de Jamendo.\n"
4612 -#: ../src/plugins/jamendo/jamendo.py:412
4613 +#: ../src/plugins/jamendo/jamendo.py:413
4615 msgid "The Jamendo server returned code %s."
4616 msgstr "El servidor de Jamendo devolvió el código %s."
4618 -#: ../src/plugins/jamendo/jamendo.py:416
4619 +#: ../src/plugins/jamendo/jamendo.py:417
4620 msgid "An error occurred while fetching albums."
4621 msgstr "Ocurrió un error al obtener los álbumes."
4623 #. Translators: time formatting (in Python strftime format) for the Jamendo plugin
4624 #. for times longer than an hour
4625 -#: ../src/plugins/jamendo/jamendo.py:618
4626 +#: ../src/plugins/jamendo/jamendo.py:620
4630 #. Translators: time formatting (in Python strftime format) for the Jamendo plugin
4631 #. for times shorter than an hour
4632 -#: ../src/plugins/jamendo/jamendo.py:621
4633 +#: ../src/plugins/jamendo/jamendo.py:623
4637 @@ -2441,7 +2473,7 @@ msgstr "%M:%S"
4639 #. http://www.jamendo.com/en/album/4818
4640 #. If Jamendo doesn't support your language, *do not translate this string*!
4641 -#: ../src/plugins/jamendo/jamendo.py:671
4642 +#: ../src/plugins/jamendo/jamendo.py:673
4646 @@ -2520,35 +2552,35 @@ msgstr "No se pudo contactar con la página web OpenSubtitles"
4647 msgid "No results found"
4648 msgstr "No se encontraron resultados"
4650 -#: ../src/plugins/opensubtitles/opensubtitles.py:374
4651 +#: ../src/plugins/opensubtitles/opensubtitles.py:376
4655 #. translators comment:
4656 #. This is the file-type of the subtitle file detected
4657 -#: ../src/plugins/opensubtitles/opensubtitles.py:380
4658 +#: ../src/plugins/opensubtitles/opensubtitles.py:382
4662 #. translators comment:
4663 #. This is a rating of the quality of the subtitle
4664 -#: ../src/plugins/opensubtitles/opensubtitles.py:385
4665 +#: ../src/plugins/opensubtitles/opensubtitles.py:387
4669 -#: ../src/plugins/opensubtitles/opensubtitles.py:426
4670 +#: ../src/plugins/opensubtitles/opensubtitles.py:428
4671 msgid "_Download Movie Subtitles…"
4672 msgstr "_Descargar subtítulos para la película…"
4674 -#: ../src/plugins/opensubtitles/opensubtitles.py:427
4675 +#: ../src/plugins/opensubtitles/opensubtitles.py:429
4676 msgid "Download movie subtitles from OpenSubtitles"
4677 msgstr "Descargar subtítulos para la película desde OpenSubtitles"
4679 -#: ../src/plugins/opensubtitles/opensubtitles.py:486
4680 +#: ../src/plugins/opensubtitles/opensubtitles.py:488
4681 msgid "Searching subtitles…"
4682 msgstr "Buscando subtítulos…"
4684 -#: ../src/plugins/opensubtitles/opensubtitles.py:544
4685 +#: ../src/plugins/opensubtitles/opensubtitles.py:546
4686 msgid "Downloading the subtitles…"
4687 msgstr "Descargando los subtítulos…"
4689 @@ -2574,58 +2606,6 @@ msgstr ""
4691 msgstr "Propiedades"
4694 -#: ../src/plugins/properties/bacon-video-widget-properties.c:158
4695 -msgctxt "Dimensions"
4699 -#: ../src/plugins/properties/bacon-video-widget-properties.c:163
4700 -#: ../src/plugins/properties/bacon-video-widget-properties.c:240
4701 -msgctxt "Video bit rate"
4705 -#: ../src/plugins/properties/bacon-video-widget-properties.c:166
4706 -#: ../src/plugins/properties/bacon-video-widget-properties.c:250
4707 -msgctxt "Frame rate"
4711 -#: ../src/plugins/properties/bacon-video-widget-properties.c:169
4712 -#: ../src/plugins/properties/bacon-video-widget-properties.c:273
4713 -msgctxt "Audio bit rate"
4717 -#: ../src/plugins/properties/bacon-video-widget-properties.c:237
4722 -#: ../src/plugins/properties/bacon-video-widget-properties.c:240
4723 -#: ../src/plugins/properties/bacon-video-widget-properties.c:273
4728 -#: ../src/plugins/properties/bacon-video-widget-properties.c:247
4730 -msgid "%d frame per second"
4731 -msgid_plural "%d frames per second"
4732 -msgstr[0] "%d fotograma por segundo"
4733 -msgstr[1] "%d fotogramas por segundo"
4735 -#: ../src/plugins/properties/bacon-video-widget-properties.c:276
4740 -#: ../src/plugins/properties/bacon-video-widget-properties.c:276
4741 -msgctxt "Sample rate"
4745 #: ../src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in.in.h:2
4748 @@ -2725,8 +2705,8 @@ msgstr "Película"
4749 msgid "Movie stream"
4750 msgstr "Flujo de la película"
4752 -#: ../src/plugins/screensaver/totem-screensaver.c:112
4753 -#: ../browser-plugin/totem-plugin-viewer.c:1964
4754 +#: ../src/plugins/screensaver/totem-screensaver.c:116
4755 +#: ../browser-plugin/totem-plugin-viewer.c:1961
4756 msgid "Playing a movie"
4757 msgstr "Reproduciendo una película"
4759 @@ -2842,12 +2822,10 @@ msgid "7"
4762 #: ../src/plugins/skipto/totem-skipto.c:197
4767 #: ../src/plugins/skipto/totem-skipto-plugin.c:182
4768 -#| msgid "_Skip to..."
4772 @@ -2859,38 +2837,36 @@ msgstr "Salta a un tiempo específico"
4776 -#. Display an error
4777 -#: ../src/plugins/tracker/totem-tracker-widget.c:173
4779 -msgid "Could not get name and thumbnail for %s: %s"
4780 -msgstr "No se pudo obtener el nombre y la miniatura para %s: %s"
4782 -#: ../src/plugins/tracker/totem-tracker-widget.c:174
4784 -msgstr "Error de archivo"
4786 -#: ../src/plugins/tracker/totem-tracker-widget.c:251
4787 -#: ../src/plugins/tracker/totem-tracker-widget.c:368
4788 +#: ../src/plugins/tracker/totem-tracker-widget.c:587
4789 +#: ../src/plugins/tracker/totem-tracker-widget.c:676
4790 msgid "Could not connect to Tracker"
4791 msgstr "No se pudo conectar con Tracker"
4793 -#: ../src/plugins/tracker/totem-tracker-widget.c:258
4794 +#: ../src/plugins/tracker/totem-tracker-widget.c:594
4796 msgstr "No hay resultados"
4799 -#. * This is used to show which items are listed in the list view, for example:
4800 -#. * Showing 10-20 of 128 matches
4801 -#. * This is similar to what web searches use, eg. Google on the top-right of their search results page show:
4802 -#. * Personalized Results 1 - 10 of about 4,130,000 for foobar
4803 -#: ../src/plugins/tracker/totem-tracker-widget.c:283
4804 +#. * This is used to show which items are listed in the
4805 +#. * list view, for example:
4807 +#. * Showing 10-20 of 128 matches
4809 +#. * This is similar to what web searches use, eg.
4810 +#. * Google on the top-right of their search results
4813 +#. * Personalized Results 1 - 10 of about 4,130,000 for foobar
4816 +#: ../src/plugins/tracker/totem-tracker-widget.c:618
4818 msgid "Showing %i - %i of %i match"
4819 msgid_plural "Showing %i - %i of %i matches"
4820 msgstr[0] "Mostrando %i - %i de %i coincidencia"
4821 msgstr[1] "Mostrando %i - %i de %i coincidencias"
4823 -#: ../src/plugins/tracker/totem-tracker-widget.c:581
4824 +#: ../src/plugins/tracker/totem-tracker-widget.c:823
4828 @@ -3000,29 +2976,29 @@ msgstr "No hay una URI para reproducir"
4829 #. translators: this is:
4830 #. * Open With ApplicationName
4831 #. * as in nautilus' right-click menu
4832 -#: ../browser-plugin/totem-plugin-viewer.c:1104
4833 +#: ../browser-plugin/totem-plugin-viewer.c:1101
4835 msgid "_Open with \"%s\""
4836 msgstr "_Abrir con «%s»"
4838 -#: ../browser-plugin/totem-plugin-viewer.c:1155
4839 +#: ../browser-plugin/totem-plugin-viewer.c:1152
4841 msgid "Browser Plugin using %s"
4842 msgstr "Complemento de visualización usando %s"
4844 -#: ../browser-plugin/totem-plugin-viewer.c:1160
4845 +#: ../browser-plugin/totem-plugin-viewer.c:1157
4846 msgid "Totem Browser Plugin"
4847 msgstr "Complemento de visualización para Totem"
4849 -#: ../browser-plugin/totem-plugin-viewer.c:2198
4850 +#: ../browser-plugin/totem-plugin-viewer.c:2195
4851 msgid "No playlist or playlist empty"
4852 msgstr "Ninguna lista o lista vacía"
4854 -#: ../browser-plugin/totem-plugin-viewer.c:2289
4855 +#: ../browser-plugin/totem-plugin-viewer.c:2286
4856 msgid "Movie browser plugin"
4857 msgstr "Complemento de examinador de películas"
4859 -#: ../browser-plugin/totem-plugin-viewer.c:2305
4860 +#: ../browser-plugin/totem-plugin-viewer.c:2302
4861 msgid "Verify your system installation. The Totem plugin will now exit."
4863 "Verifique la instalación de su sistema. EL complemento de Totem ahora "
4864 @@ -3036,36 +3012,36 @@ msgstr "Consola Python interactiva."
4865 msgid "Python Console"
4866 msgstr "Consola Python"
4868 -#: ../src/plugins/pythonconsole/pythonconsole.py:85
4869 +#: ../src/plugins/pythonconsole/pythonconsole.py:86
4870 msgid "Python Console Menu"
4871 msgstr "Menú de la consola Python"
4873 -#: ../src/plugins/pythonconsole/pythonconsole.py:88
4874 +#: ../src/plugins/pythonconsole/pythonconsole.py:89
4875 msgid "_Python Console"
4876 msgstr "Consola _Python"
4878 -#: ../src/plugins/pythonconsole/pythonconsole.py:89
4879 +#: ../src/plugins/pythonconsole/pythonconsole.py:90
4880 msgid "Show Totem's Python console"
4881 msgstr "Mostrar la consola Python de Totem"
4883 -#: ../src/plugins/pythonconsole/pythonconsole.py:94
4884 +#: ../src/plugins/pythonconsole/pythonconsole.py:95
4885 msgid "Python Debugger"
4886 msgstr "Depurador Python"
4888 -#: ../src/plugins/pythonconsole/pythonconsole.py:95
4889 +#: ../src/plugins/pythonconsole/pythonconsole.py:96
4890 msgid "Enable remote Python debugging with rpdb2"
4891 msgstr "Activar la depuración remota Python con rpdb2"
4893 -#: ../src/plugins/pythonconsole/pythonconsole.py:116
4894 +#: ../src/plugins/pythonconsole/pythonconsole.py:117
4896 msgid "You can access the Totem.Object through 'totem_object' :\\n%s"
4897 msgstr "Puede acceder al objeto de Totem a través de «totem_object»: \\n%s"
4899 -#: ../src/plugins/pythonconsole/pythonconsole.py:120
4900 +#: ../src/plugins/pythonconsole/pythonconsole.py:121
4901 msgid "Totem Python Console"
4902 msgstr "Consola Python de Totem"
4904 -#: ../src/plugins/pythonconsole/pythonconsole.py:129
4905 +#: ../src/plugins/pythonconsole/pythonconsole.py:130
4907 "After you press OK, Totem will wait until you connect to it with winpdb or "
4908 "rpdb2. If you have not set a debugger password in DConf, it will use the "
4909 @@ -3075,6 +3051,28 @@ msgstr ""
4910 "rpdb2. Si no ha establecido una contraseña para el depurador en DConf, se "
4911 "usará la contraseña predeterminada («totem»)."
4913 +#~ msgid "Enable visual effects?"
4914 +#~ msgstr "¿Quiere activar los efectos visuales?"
4917 +#~ "It seems you are running Totem remotely.\n"
4918 +#~ "Are you sure you want to enable the visual effects?"
4920 +#~ "Parece que está ejecutando Totem remotamente.\n"
4921 +#~ "¿Está seguro de que quiere activar los efectos visuales?"
4923 +#~ msgid "Error loading Galago plugin"
4924 +#~ msgstr "Error al cargar el complemento Galago"
4926 +#~ msgid "Could not connect to the Galago daemon."
4927 +#~ msgstr "No se pudo conectar con el demonio Galago."
4929 +#~ msgid "Could not get name and thumbnail for %s: %s"
4930 +#~ msgstr "No se pudo obtener el nombre y la miniatura para %s: %s"
4932 +#~ msgid "File Error"
4933 +#~ msgstr "Error de archivo"
4936 #~ msgstr "segundos"
4938 diff --git a/po/pl.po b/po/pl.po
4939 index 2d4a565..a7a072d 100644
4945 "Project-Id-Version: totem\n"
4946 -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=totem&component=general\n"
4947 -"POT-Creation-Date: 2011-01-28 12:39+0000\n"
4948 -"PO-Revision-Date: 2011-03-08 10:43+0100\n"
4949 -"Last-Translator: js <asiaslowik@gmail.com>\n"
4950 +"Report-Msgid-Bugs-To: \n"
4951 +"POT-Creation-Date: 2011-06-01 23:47+0200\n"
4952 +"PO-Revision-Date: 2011-06-01 23:48+0200\n"
4953 +"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
4954 "Language-Team: Polish <gnomepl@aviary.pl>\n"
4956 "MIME-Version: 1.0\n"
4957 "Content-Type: text/plain; charset=UTF-8\n"
4958 "Content-Transfer-Encoding: 8bit\n"
4960 -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
4961 +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
4962 +"|| n%100>=20) ? 1 : 2);\n"
4963 "X-Poedit-Language: Polish\n"
4964 "X-Poedit-Country: Poland\n"
4966 @@ -24,8 +25,7 @@ msgstr ""
4967 msgid "Leave Fullscreen"
4968 msgstr "Opuść pełny ekran"
4970 -#: ../data/fullscreen.ui.h:2
4971 -#: ../data/totem.ui.h:102
4972 +#: ../data/fullscreen.ui.h:2 ../data/totem.ui.h:102
4976 @@ -33,8 +33,7 @@ msgstr "Czas:"
4978 msgstr "Dodaje do listy odtwarzania..."
4980 -#: ../data/playlist.ui.h:2
4981 -#: ../data/video-list.ui.h:2
4982 +#: ../data/playlist.ui.h:2 ../data/video-list.ui.h:2
4983 msgid "Copy the location to the clipboard"
4984 msgstr "Kopiuje położenie do schowka"
4986 @@ -58,13 +57,11 @@ msgstr "Usuwa plik z listy odtwarzania"
4987 msgid "Save Playlist..."
4988 msgstr "Zapisuje listę odtwarzania..."
4990 -#: ../data/playlist.ui.h:8
4991 -#: ../data/totem.ui.h:77
4992 +#: ../data/playlist.ui.h:8 ../data/totem.ui.h:77
4993 msgid "Select a file to use for text subtitles"
4994 msgstr "Wybór pliku napisów"
4996 -#: ../data/playlist.ui.h:9
4997 -#: ../data/video-list.ui.h:4
4998 +#: ../data/playlist.ui.h:9 ../data/video-list.ui.h:4
4999 msgid "_Copy Location"
5000 msgstr "S_kopiuj położenie"
5002 @@ -72,8 +69,7 @@ msgstr "S_kopiuj położenie"
5006 -#: ../data/playlist.ui.h:11
5007 -#: ../data/totem.ui.h:145
5008 +#: ../data/playlist.ui.h:11 ../data/totem.ui.h:145
5009 msgid "_Select Text Subtitles..."
5010 msgstr "_Wybierz plik napisów..."
5012 @@ -98,8 +94,7 @@ msgid "0 kbps"
5016 -#: ../data/properties.ui.h:5
5017 -#: ../src/backend/video-utils.c:192
5018 +#: ../data/properties.ui.h:5 ../src/backend/video-utils.c:158
5022 @@ -115,8 +110,7 @@ msgstr "Album:"
5026 -#: ../data/properties.ui.h:9
5027 -#: ../data/totem.ui.h:23
5028 +#: ../data/properties.ui.h:9 ../data/totem.ui.h:23
5029 #: ../src/totem-properties-view.c:89
5032 @@ -156,8 +150,7 @@ msgstr "Czas trwania:"
5034 msgstr "Liczba klatek na sekundę:"
5036 -#: ../data/properties.ui.h:18
5037 -#: ../data/totem.ui.h:41
5038 +#: ../data/properties.ui.h:18 ../data/totem.ui.h:41
5042 @@ -181,8 +174,7 @@ msgstr "Tytuł:"
5046 -#: ../data/properties.ui.h:22
5047 -#: ../data/totem.ui.h:104
5048 +#: ../data/properties.ui.h:22 ../data/totem.ui.h:104
5049 #: ../src/totem-properties-view.c:85
5052 @@ -202,15 +194,13 @@ msgstr "Rok:"
5053 msgid "Add the video to the playlist"
5054 msgstr "Dodanie nagrania wideo do listy odtwarzania"
5056 -#: ../data/video-list.ui.h:3
5057 -#: ../src/totem-dnd-menu.c:97
5058 +#: ../data/video-list.ui.h:3 ../src/totem-dnd-menu.c:97
5059 #: ../src/plugins/jamendo/jamendo.ui.h:9
5060 msgid "_Add to Playlist"
5061 msgstr "Dod_aj do listy odtwarzania"
5064 -#: ../data/totem.desktop.in.in.in.h:1
5065 -#: ../data/totem.ui.h:53
5066 +#: ../data/totem.desktop.in.in.in.h:1 ../data/totem.ui.h:53
5067 #: ../src/totem-object.c:1666
5068 msgid "Movie Player"
5069 msgstr "Odtwarzacz filmów Totem"
5070 @@ -572,8 +562,7 @@ msgstr "Kwadratowy"
5071 msgid "Start playing files from last position"
5072 msgstr "Rozpoczęcie odtwarzania plików od ostatniej pozycji"
5074 -#: ../data/totem.ui.h:96
5075 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6008
5076 +#: ../data/totem.ui.h:96 ../src/backend/bacon-video-widget-gst-0.10.c:6012
5080 @@ -778,7 +767,9 @@ msgid "_View"
5083 #: ../data/org.gnome.totem.gschema.xml.in.in.h:1
5084 -msgid "A list of the names of the plugins which are currently active (loaded and running)."
5086 +"A list of the names of the plugins which are currently active (loaded and "
5088 msgstr "Lista aktywnych wtyczek (wczytanych i uruchomionych)."
5090 #: ../data/org.gnome.totem.gschema.xml.in.in.h:2
5091 @@ -790,32 +781,52 @@ msgid "Allow the screensaver to activate when playing audio"
5092 msgstr "Umożliwia wygaszanie ekranu podczas odtwarzania dźwięku"
5094 #: ../data/org.gnome.totem.gschema.xml.in.in.h:4
5095 -msgid "Allow the screensaver to activate when playing audio. Disable if you have monitor-powered speakers."
5096 -msgstr "Zezwolenie na włączenie wygaszacza ekranu podczas odtwarzania dźwięku. Przydatne w przypadku głośników wbudowanych w monitor."
5098 +"Allow the screensaver to activate when playing audio. Disable if you have "
5099 +"monitor-powered speakers."
5101 +"Zezwolenie na włączenie wygaszacza ekranu podczas odtwarzania dźwięku. "
5102 +"Przydatne w przypadku głośników wbudowanych w monitor."
5104 #: ../data/org.gnome.totem.gschema.xml.in.in.h:5
5105 -msgid "Amount of data to buffer for network streams before starting to display the stream (in seconds)."
5106 -msgstr "Ilość buforowanych danych dla strumieni sieciowych przed rozpoczęciem wyświetlania strumienia (w sekundach)."
5108 +"Amount of data to buffer for network streams before starting to display the "
5109 +"stream (in seconds)."
5111 +"Ilość buforowanych danych dla strumieni sieciowych przed rozpoczęciem "
5112 +"wyświetlania strumienia (w sekundach)."
5114 #: ../data/org.gnome.totem.gschema.xml.in.in.h:6
5115 -msgid "Approximate network connection speed, used to select quality on media over the network."
5116 -msgstr "Przybliżona prędkość połączenia sieciowego używana do wyboru jakości multimediów przesyłanych przez sieć."
5118 +"Approximate network connection speed, used to select quality on media over "
5121 +"Przybliżona prędkość połączenia sieciowego używana do wyboru jakości "
5122 +"multimediów przesyłanych przez sieć."
5124 #: ../data/org.gnome.totem.gschema.xml.in.in.h:7
5125 msgid "Default location for the \"Open...\" dialogs"
5126 msgstr "Domyślne położenie dla okien dialogowych \"Otwórz...\""
5128 #: ../data/org.gnome.totem.gschema.xml.in.in.h:8
5129 -msgid "Default location for the \"Open...\" dialogs. Default is the current directory."
5130 -msgstr "Domyślne położenie dla okien dialogowych \"Otwórz...\". Domyślnie jest to bieżący katalog."
5132 +"Default location for the \"Open...\" dialogs. Default is the current "
5135 +"Domyślne położenie dla okien dialogowych \"Otwórz...\". Domyślnie jest to "
5138 #: ../data/org.gnome.totem.gschema.xml.in.in.h:9
5139 msgid "Default location for the \"Take Screenshot\" dialogs"
5140 msgstr "Domyślne położenie dla okien dialogowych \"Pobierz zrzut ekranu\""
5142 #: ../data/org.gnome.totem.gschema.xml.in.in.h:10
5143 -msgid "Default location for the \"Take Screenshot\" dialogs. Default is the Pictures directory."
5144 -msgstr "Domyślne położenie dla okien dialogowych \"Pobierz zrzut ekranu\". Domyślnie jest to katalog Obrazy."
5146 +"Default location for the \"Take Screenshot\" dialogs. Default is the "
5147 +"Pictures directory."
5149 +"Domyślne położenie dla okien dialogowych \"Pobierz zrzut ekranu\". Domyślnie "
5150 +"jest to katalog Obrazy."
5152 #: ../data/org.gnome.totem.gschema.xml.in.in.h:11
5153 msgid "Encoding character set for subtitle."
5154 @@ -855,7 +866,8 @@ msgstr "Efekty wizualne przy braku obrazu"
5156 #: ../data/org.gnome.totem.gschema.xml.in.in.h:20
5157 msgid "Show visual effects when playing an audio only file."
5158 -msgstr "Wyświetlanie efektów wizualnych podczas odtwarzania plików dźwiękowych."
5160 +"Wyświetlanie efektów wizualnych podczas odtwarzania plików dźwiękowych."
5162 #: ../data/org.gnome.totem.gschema.xml.in.in.h:21
5163 msgid "Shuffle mode"
5164 @@ -895,11 +907,15 @@ msgstr "Ustawienia jakości wizualizacji"
5166 #: ../data/org.gnome.totem.gschema.xml.in.in.h:30
5167 msgid "Whether to autoload external chapter files when a movie is loaded"
5168 -msgstr "Określa, czy automatycznie wczytywać zewnętrzne pliki rozdziałów podczas wczytywania nagrania wideo"
5170 +"Określa, czy automatycznie wczytywać zewnętrzne pliki rozdziałów podczas "
5171 +"wczytywania nagrania wideo"
5173 #: ../data/org.gnome.totem.gschema.xml.in.in.h:31
5174 msgid "Whether to autoload text subtitle files when a movie is loaded"
5175 -msgstr "Określa, czy automatycznie wczytywać plik z napisami podczas wczytywania nagrania wideo"
5177 +"Określa, czy automatycznie wczytywać plik z napisami podczas wczytywania "
5180 #: ../data/org.gnome.totem.gschema.xml.in.in.h:32
5181 msgid "Whether to disable deinterlacing for interlaced movies"
5182 @@ -911,15 +927,20 @@ msgstr "Określa, czy wyłączyć skróty klawiszowe"
5184 #: ../data/org.gnome.totem.gschema.xml.in.in.h:34
5185 msgid "Whether to disable the plugins in the user's home directory"
5186 -msgstr "Określa, czy wyłączyć wtyczki znajdujące się w katalogu domowym użytkownika"
5188 +"Określa, czy wyłączyć wtyczki znajdujące się w katalogu domowym użytkownika"
5190 #: ../data/org.gnome.totem.gschema.xml.in.in.h:35
5191 msgid "Whether to enable debug for the playback engine"
5192 msgstr "Określa, czy włączyć dodatkowe informacje dla mechanizmu odtwarzania"
5194 #: ../data/org.gnome.totem.gschema.xml.in.in.h:36
5195 -msgid "Whether to remember the position of played audio/video files when pausing or closing them"
5196 -msgstr "Określa, czy zapamiętywać położenie plików dźwiękowych i nagrań wideo przy wstrzymaniu odtwarzania lub ich zamknięciu"
5198 +"Whether to remember the position of played audio/video files when pausing or "
5201 +"Określa, czy zapamiętywać położenie plików dźwiękowych i nagrań wideo przy "
5202 +"wstrzymaniu odtwarzania lub ich zamknięciu"
5204 #: ../data/uri.ui.h:1
5205 msgid "Enter the _address of the file you would like to open:"
5206 @@ -953,45 +974,53 @@ msgstr "Nierozpoznana opcja uruchamiania: %d"
5207 #: ../src/eggdesktopfile.c:1383
5209 msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
5210 -msgstr "Nie można przekazać adresu URI dokumentu do wpisu \"Type=Link\" pliku .desktop"
5212 +"Nie można przekazać adresu URI dokumentu do wpisu \"Type=Link\" pliku ."
5215 #: ../src/eggdesktopfile.c:1404
5217 msgid "Not a launchable item"
5218 msgstr "Nie można uruchomić elementu"
5220 -#: ../src/eggfileformatchooser.c:235
5221 +#: ../src/eggfileformatchooser.c:240
5223 msgid "File _Format: %s"
5224 msgstr "_Format pliku: %s"
5226 -#: ../src/eggfileformatchooser.c:374
5227 +#: ../src/eggfileformatchooser.c:379
5229 msgstr "Wszystkie pliki"
5231 -#: ../src/eggfileformatchooser.c:375
5232 +#: ../src/eggfileformatchooser.c:380
5233 msgid "All Supported Files"
5234 msgstr "Wszystkie obsługiwane pliki"
5236 -#: ../src/eggfileformatchooser.c:384
5237 +#: ../src/eggfileformatchooser.c:389
5238 msgid "By Extension"
5239 msgstr "Według rozszerzenia"
5241 -#: ../src/eggfileformatchooser.c:399
5242 +#: ../src/eggfileformatchooser.c:404
5244 msgstr "Format pliku"
5246 -#: ../src/eggfileformatchooser.c:417
5247 +#: ../src/eggfileformatchooser.c:422
5248 msgid "Extension(s)"
5249 msgstr "Rozszerzenia"
5251 #. Translators: the parameter is a filename
5252 -#: ../src/eggfileformatchooser.c:652
5253 +#: ../src/eggfileformatchooser.c:657
5255 -msgid "The program was not able to find out the file format you want to use for `%s'. Please make sure to use a known extension for that file or manually choose a file format from the list below."
5256 -msgstr "Program nie mógł odnaleźć formatu pliku do użycia dla \"%s\". Proszę się upewnić, że używane jest znane rozszerzenie dla tego pliku lub wybrać format pliku ręcznie z poniższej listy."
5258 +"The program was not able to find out the file format you want to use for `"
5259 +"%s'. Please make sure to use a known extension for that file or manually "
5260 +"choose a file format from the list below."
5262 +"Program nie mógł odnaleźć formatu pliku do użycia dla \"%s\". Proszę się "
5263 +"upewnić, że używane jest znane rozszerzenie dla tego pliku lub wybrać format "
5264 +"pliku ręcznie z poniższej listy."
5266 -#: ../src/eggfileformatchooser.c:659
5267 +#: ../src/eggfileformatchooser.c:664
5268 msgid "File format not recognized"
5269 msgstr "Format pliku nie został rozpoznany"
5271 @@ -1092,12 +1121,11 @@ msgstr "_Odtwarzaj teraz"
5275 -#: ../src/totem-fullscreen.c:617
5276 +#: ../src/totem-fullscreen.c:619
5280 -#: ../src/totem-interface.c:180
5281 -#: ../src/totem-interface.c:223
5282 +#: ../src/totem-interface.c:180 ../src/totem-interface.c:223
5284 msgid "Couldn't load the '%s' interface. %s"
5285 msgstr "Nie można wczytać interfejsu \"%s\". %s"
5286 @@ -1106,28 +1134,53 @@ msgstr "Nie można wczytać interfejsu \"%s\". %s"
5287 msgid "The file does not exist."
5288 msgstr "Plik nie istnieje."
5290 -#: ../src/totem-interface.c:182
5291 -#: ../src/totem-interface.c:184
5292 -#: ../src/totem-interface.c:225
5293 -#: ../src/totem-interface.c:227
5294 +#: ../src/totem-interface.c:182 ../src/totem-interface.c:184
5295 +#: ../src/totem-interface.c:225 ../src/totem-interface.c:227
5296 msgid "Make sure that Totem is properly installed."
5297 msgstr "Proszę się upewnić, że program Totem został poprawnie zainstalowany."
5299 #: ../src/totem-interface.c:346
5300 -msgid "Totem 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 2 of the License, or (at your option) any later version."
5301 -msgstr "Program Totem jest wolnym oprogramowaniem; można go rozprowadzać dalej i/lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU, wydanej przez Fundację Wolnego Oprogramowania (Free Software Foundation) - według wersji drugiej tej Licencji lub którejś z późniejszych wersji."
5303 +"Totem is free software; you can redistribute it and/or modify it under the "
5304 +"terms of the GNU General Public License as published by the Free Software "
5305 +"Foundation; either version 2 of the License, or (at your option) any later "
5308 +"Program Totem jest wolnym oprogramowaniem; można go rozprowadzać dalej i/lub "
5309 +"modyfikować na warunkach Powszechnej Licencji Publicznej GNU, wydanej przez "
5310 +"Fundację Wolnego Oprogramowania (Free Software Foundation) - według wersji "
5311 +"drugiej tej Licencji lub którejś z późniejszych wersji."
5313 #: ../src/totem-interface.c:350
5314 -msgid "Totem 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."
5315 -msgstr "Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. W celu uzyskania bliższych informacji należy zapoznać się z Powszechną Licencją Publiczną GNU."
5317 +"Totem is distributed in the hope that it will be useful, but WITHOUT ANY "
5318 +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
5319 +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
5322 +"Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on użyteczny - "
5323 +"jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI "
5324 +"HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. W celu uzyskania "
5325 +"bliższych informacji należy zapoznać się z Powszechną Licencją Publiczną GNU."
5327 #: ../src/totem-interface.c:354
5328 -msgid "You should have received a copy of the GNU General Public License along with Totem; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
5329 -msgstr "Z pewnością wraz z niniejszym programem dostarczono także egzemplarz Powszechnej Licencji Publicznej GNU (GNU General Public License); jeśli nie - proszę napisać do Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA."
5331 +"You should have received a copy of the GNU General Public License along with "
5332 +"Totem; if not, write to the Free Software Foundation, Inc., 59 Temple Place, "
5333 +"Suite 330, Boston, MA 02111-1307 USA"
5335 +"Z pewnością wraz z niniejszym programem dostarczono także egzemplarz "
5336 +"Powszechnej Licencji Publicznej GNU (GNU General Public License); jeśli nie "
5337 +"- proszę napisać do Free Software Foundation, Inc., 51 Franklin Street, "
5338 +"Fifth Floor, Boston, MA 02110-130159 USA."
5340 #: ../src/totem-interface.c:357
5341 -msgid "Totem contains an exception to allow the use of proprietary GStreamer plugins."
5342 -msgstr "Program Totem zawiera wyjątek pozwalający na używanie własnościowych wtyczek biblioteki GStreamer."
5344 +"Totem contains an exception to allow the use of proprietary GStreamer "
5347 +"Program Totem zawiera wyjątek pozwalający na używanie własnościowych wtyczek "
5348 +"biblioteki GStreamer."
5350 #. Translators: an entry in the "Languages" menu, used to choose the audio language of a DVD
5351 #: ../src/totem-menu.c:192
5352 @@ -1143,43 +1196,41 @@ msgstr "Automatyczny"
5354 #. * This is not a JPEG image, but a disc image, for example,
5356 -#: ../src/totem-menu.c:739
5357 +#: ../src/totem-menu.c:767
5359 msgid "Play Image '%s'"
5360 msgstr "Odtwarzaj obraz \"%s\""
5362 -#: ../src/totem-menu.c:742
5363 -#: ../src/totem-menu.c:824
5364 +#: ../src/totem-menu.c:770 ../src/totem-menu.c:853
5367 msgstr "urządzenie%d"
5369 -#: ../src/totem-menu.c:821
5370 +#: ../src/totem-menu.c:850
5372 msgid "Play Disc '%s'"
5373 msgstr "Odtwarzaj płytę \"%s\""
5375 #. This lists the back-end type and version, such as
5376 #. * Movie Player using GStreamer 0.10.1
5377 -#: ../src/totem-menu.c:1172
5378 +#: ../src/totem-menu.c:1201
5380 msgid "Movie Player using %s"
5381 msgstr "Odtwarzacz filmów używający biblioteki %s"
5383 -#: ../src/totem-menu.c:1176
5384 +#: ../src/totem-menu.c:1205
5385 msgid "Copyright © 2002-2009 Bastien Nocera"
5386 msgstr "Copyright © 2002-2009 Bastien Nocera"
5388 -#: ../src/totem-menu.c:1181
5389 -#: ../browser-plugin/totem-plugin-viewer.c:1166
5390 +#: ../src/totem-menu.c:1210 ../browser-plugin/totem-plugin-viewer.c:1163
5391 msgid "translator-credits"
5392 msgstr "Aviary.pl <gnomepl@aviary.pl>, 2007, 2008, 2009, 2010, 2011"
5394 -#: ../src/totem-menu.c:1185
5395 +#: ../src/totem-menu.c:1214
5396 msgid "Totem Website"
5397 msgstr "Witryna programu Totem"
5399 -#: ../src/totem-menu.c:1219
5400 +#: ../src/totem-menu.c:1248
5401 msgid "Configure Plugins"
5402 msgstr "Konfiguracja wtyczek"
5404 @@ -1189,76 +1240,90 @@ msgstr "Konfiguracja wtyczek"
5408 -#: ../src/totem-object.c:1046
5409 -#: ../browser-plugin/totem-plugin-viewer.c:368
5410 +#: ../src/totem-object.c:1046 ../browser-plugin/totem-plugin-viewer.c:368
5413 +msgstr "Odtwarzanie"
5415 -#: ../src/totem-object.c:1048
5416 -#: ../src/totem-options.c:52
5417 +#: ../src/totem-object.c:1048 ../src/totem-options.c:52
5421 -#: ../src/totem-object.c:1053
5422 -#: ../browser-plugin/totem-plugin-viewer.c:364
5423 +#: ../src/totem-object.c:1053 ../browser-plugin/totem-plugin-viewer.c:364
5427 #. Translators: this refers to a media file
5428 -#: ../src/totem-object.c:1055
5429 -#: ../src/totem-object.c:1065
5430 +#: ../src/totem-object.c:1055 ../src/totem-object.c:1065
5431 #: ../src/totem-options.c:51
5432 #: ../src/plugins/coherence_upnp/coherence_upnp.py:84
5433 #: ../src/plugins/coherence_upnp/coherence_upnp.py:96
5435 msgstr "Odtwarzanie"
5437 -#: ../src/totem-object.c:1060
5438 -#: ../src/totem-object.c:1658
5439 -#: ../src/totem-statusbar.c:115
5440 -#: ../browser-plugin/totem-plugin-viewer.c:352
5441 +#: ../src/totem-object.c:1060 ../src/totem-object.c:1658
5442 +#: ../src/totem-statusbar.c:115 ../browser-plugin/totem-plugin-viewer.c:352
5446 -#: ../src/totem-object.c:1141
5447 -#: ../src/totem-object.c:1168
5448 -#: ../src/totem-object.c:1796
5449 -#: ../src/totem-object.c:1959
5450 +#: ../src/totem-object.c:1141 ../src/totem-object.c:1168
5451 +#: ../src/totem-object.c:1798 ../src/totem-object.c:1962
5453 msgid "Totem could not play '%s'."
5454 msgstr "Program Totem nie może odtworzyć \"%s\"."
5456 #: ../src/totem-object.c:1245
5458 -msgid "Totem could not play this media (%s) although a plugin is present to handle it."
5459 -msgstr "Program Totem nie może odtworzyć tego nośnika (%s), mimo że w systemie obecna jest odpowiednia wtyczka."
5461 +"Totem could not play this media (%s) although a plugin is present to handle "
5464 +"Program Totem nie może odtworzyć tego nośnika (%s), mimo że w systemie "
5465 +"obecna jest odpowiednia wtyczka."
5467 #: ../src/totem-object.c:1246
5468 -msgid "You might want to check that a disc is present in the drive and that it is correctly configured."
5469 -msgstr "Proszę sprawdzić, czy płyta znajduje się w napędzie i czy napęd jest prawidłowo skonfigurowany."
5471 +"You might want to check that a disc is present in the drive and that it is "
5472 +"correctly configured."
5474 +"Proszę sprawdzić, czy płyta znajduje się w napędzie i czy napęd jest "
5475 +"prawidłowo skonfigurowany."
5477 #: ../src/totem-object.c:1254
5478 msgid "More information about media plugins"
5479 msgstr "Więcej informacji na temat wtyczek multimediów"
5481 #: ../src/totem-object.c:1255
5482 -msgid "Please install the necessary plugins and restart Totem to be able to play this media."
5483 -msgstr "Aby odtworzyć ten nośnik należy zainstalować odpowiednie wtyczki i ponownie uruchomić program."
5485 +"Please install the necessary plugins and restart Totem to be able to play "
5488 +"Aby odtworzyć ten nośnik należy zainstalować odpowiednie wtyczki i ponownie "
5489 +"uruchomić program."
5491 #: ../src/totem-object.c:1257
5493 -msgid "Totem cannot play this type of media (%s) because it does not have the appropriate plugins to be able to read from the disc."
5494 -msgstr "Program Totem nie może odtworzyć tego typu nośnika (%s), ponieważ nie zainstalowano wtyczek obsługujących ten format."
5496 +"Totem cannot play this type of media (%s) because it does not have the "
5497 +"appropriate plugins to be able to read from the disc."
5499 +"Program Totem nie może odtworzyć tego typu nośnika (%s), ponieważ nie "
5500 +"zainstalowano wtyczek obsługujących ten format."
5502 #: ../src/totem-object.c:1259
5504 -msgid "Totem cannot play this type of media (%s) because you do not have the appropriate plugins to handle it."
5505 -msgstr "Program Totem nie może odtworzyć tego typu nośnika (%s), ponieważ nie zainstalowano wtyczek obsługujących ten format."
5507 +"Totem cannot play this type of media (%s) because you do not have the "
5508 +"appropriate plugins to handle it."
5510 +"Program Totem nie może odtworzyć tego typu nośnika (%s), ponieważ nie "
5511 +"zainstalowano wtyczek obsługujących ten format."
5513 #: ../src/totem-object.c:1262
5515 msgid "Totem cannot play this type of media (%s) because it is not supported."
5516 -msgstr "Program Totem nie może odtworzyć tego typu nośnika (%s), ponieważ nie jest on obsługiwany."
5518 +"Program Totem nie może odtworzyć tego typu nośnika (%s), ponieważ nie jest "
5521 #: ../src/totem-object.c:1263
5522 msgid "Please insert another disc to play back."
5523 @@ -1268,8 +1333,7 @@ msgstr "Proszę wsunąć następną płytę, aby odtwarzać."
5524 msgid "Totem was not able to play this disc."
5525 msgstr "Program Totem nie może odtworzyć tej płyty."
5527 -#: ../src/totem-object.c:1300
5528 -#: ../src/totem-object.c:4273
5529 +#: ../src/totem-object.c:1300 ../src/totem-object.c:4280
5531 msgstr "Brak powodu."
5533 @@ -1279,49 +1343,46 @@ msgstr "Program Totem nie obsługuje odtwarzania płyt CD-Audio"
5535 #: ../src/totem-object.c:1315
5536 msgid "Please consider using a music player or a CD extractor to play this CD"
5537 -msgstr "Proszę skorzystać z odtwarzacza muzyki lub zgrywarki CD-Audio do odtworzenia tej płyty CD"
5539 +"Proszę skorzystać z odtwarzacza muzyki lub zgrywarki CD-Audio do odtworzenia "
5542 -#: ../src/totem-object.c:1802
5543 +#: ../src/totem-object.c:1804
5544 msgid "No error message"
5545 msgstr "Brak komunikatu błędu"
5547 -#: ../src/totem-object.c:2194
5548 +#: ../src/totem-object.c:2197
5549 msgid "Totem could not display the help contents."
5550 msgstr "Nie można wyświetlić spisu treści pomocy programu Totem."
5552 -#: ../src/totem-object.c:2532
5553 -#: ../src/totem-object.c:2534
5554 -#: ../browser-plugin/totem-plugin-viewer.c:1469
5555 +#: ../src/totem-object.c:2535 ../src/totem-object.c:2537
5556 +#: ../browser-plugin/totem-plugin-viewer.c:1466
5557 msgid "An error occurred"
5558 msgstr "Wystąpił błąd"
5560 -#: ../src/totem-object.c:4107
5561 -#: ../src/totem-object.c:4109
5562 +#: ../src/totem-object.c:4114 ../src/totem-object.c:4116
5563 msgid "Previous Chapter/Movie"
5564 msgstr "Poprzedni rozdział/film"
5566 -#: ../src/totem-object.c:4116
5567 -#: ../src/totem-object.c:4118
5568 +#: ../src/totem-object.c:4123 ../src/totem-object.c:4125
5569 msgid "Play / Pause"
5570 msgstr "Odtwarza/wstrzymuje"
5572 -#: ../src/totem-object.c:4126
5573 -#: ../src/totem-object.c:4128
5574 +#: ../src/totem-object.c:4133 ../src/totem-object.c:4135
5575 msgid "Next Chapter/Movie"
5576 msgstr "Następny rozdział/film"
5578 #. Translators: this is the tooltip text for the fullscreen button in the controls box in Totem's main window.
5579 #. Translators: this is the accessibility text for the fullscreen button in the controls box in Totem's main window.
5580 -#: ../src/totem-object.c:4140
5581 -#: ../src/totem-object.c:4142
5582 +#: ../src/totem-object.c:4147 ../src/totem-object.c:4149
5584 msgstr "Pełny ekran"
5586 -#: ../src/totem-object.c:4273
5587 +#: ../src/totem-object.c:4280
5588 msgid "Totem could not startup."
5589 msgstr "Nie można uruchomić programu Totem."
5591 -#: ../src/totem-open-location.c:179
5592 +#: ../src/totem-open-location.c:182
5593 msgid "Open Location..."
5594 msgstr "Otwarcie położenia"
5596 @@ -1402,76 +1463,62 @@ msgid "Can't enqueue and replace at the same time"
5597 msgstr "Nie można równocześnie dodać do kolejki i zamienić pliku"
5599 #. By extension entry
5600 -#: ../src/totem-playlist.c:157
5601 +#: ../src/totem-playlist.c:161
5602 msgid "MP3 ShoutCast playlist"
5603 msgstr "Lista odtwarzania ShoutCast MP3"
5605 -#: ../src/totem-playlist.c:158
5606 +#: ../src/totem-playlist.c:162
5607 msgid "MP3 audio (streamed)"
5608 msgstr "Dźwięk MP3 (strumień)"
5610 -#: ../src/totem-playlist.c:159
5611 +#: ../src/totem-playlist.c:163
5612 msgid "MP3 audio (streamed, DOS format)"
5613 msgstr "Dźwięk MP3 (strumień, format DOS)"
5615 -#: ../src/totem-playlist.c:160
5616 +#: ../src/totem-playlist.c:164
5617 msgid "XML Shareable Playlist"
5618 msgstr "Współdzielona lista odtwarzania XML"
5620 #. This is "Title 3", where title is a DVD title
5621 #. * Note: NOT a DVD chapter
5622 -#: ../src/totem-playlist.c:359
5623 +#: ../src/totem-playlist.c:363
5628 -#: ../src/totem-playlist.c:458
5629 +#: ../src/totem-playlist.c:462
5630 msgid "Could not save the playlist"
5631 msgstr "Nie można zapisać listy odtwarzania"
5633 -#: ../src/totem-playlist.c:1033
5634 +#: ../src/totem-playlist.c:1037
5635 msgid "Save Playlist"
5636 msgstr "Zapis listy odtwarzania"
5638 #. translators: Playlist is the default saved playlist filename,
5639 #. * without the suffix
5640 -#: ../src/totem-playlist.c:1045
5641 -#: ../src/totem-sidebar.c:140
5642 +#: ../src/totem-playlist.c:1049 ../src/totem-sidebar.c:140
5644 msgstr "Lista odtwarzania"
5646 -#: ../src/totem-playlist.c:1862
5647 +#: ../src/totem-playlist.c:1869
5649 msgid "The playlist '%s' could not be parsed. It might be damaged."
5650 msgstr "Nie można przetworzyć listy odtwarzania \"%s\". Może być uszkodzona."
5652 -#: ../src/totem-playlist.c:1863
5653 +#: ../src/totem-playlist.c:1870
5654 msgid "Playlist error"
5655 msgstr "Błąd listy odtwarzania"
5657 -#: ../src/totem-preferences.c:66
5658 -msgid "Enable visual effects?"
5659 -msgstr "Włączyć efekty wizualne?"
5661 -#: ../src/totem-preferences.c:68
5663 -"It seems you are running Totem remotely.\n"
5664 -"Are you sure you want to enable the visual effects?"
5666 -"Prawdopodobnie program Totem jest uruchomiony zdalnie.\n"
5667 -"Na pewno włączyć efekty wizualne?"
5669 -#: ../src/totem-preferences.c:332
5670 +#: ../src/totem-preferences.c:295
5672 msgstr "Preferencje"
5674 -#: ../src/totem-preferences.c:490
5675 +#: ../src/totem-preferences.c:451
5676 msgid "Select Subtitle Font"
5677 msgstr "Wybór czcionki napisów"
5679 #. FIXME this should be setting an error?
5680 -#: ../src/totem-properties-main.c:114
5681 -#: ../src/totem-properties-view.c:83
5682 +#: ../src/totem-properties-main.c:114 ../src/totem-properties-view.c:83
5683 #: ../src/totem-properties-view.c:91
5685 msgstr "Dźwięk/obraz"
5686 @@ -1486,15 +1533,13 @@ msgid "%s (Streaming)"
5687 msgstr "%s (strumień)"
5689 #. Elapsed / Total Length
5690 -#: ../src/totem-statusbar.c:140
5691 -#: ../src/totem-time-label.c:64
5692 +#: ../src/totem-statusbar.c:140 ../src/totem-time-label.c:64
5697 #. Seeking to Time / Total Length
5698 -#: ../src/totem-statusbar.c:143
5699 -#: ../src/totem-time-label.c:67
5700 +#: ../src/totem-statusbar.c:143 ../src/totem-time-label.c:67
5702 msgid "Seek to %s / %s"
5703 msgstr "Przechodzenie do %s / %s"
5704 @@ -1525,10 +1570,8 @@ msgstr "%s, %d %%"
5705 msgid "Current Locale"
5706 msgstr "Bieżące ustawienia lokalne"
5708 -#: ../src/totem-subtitle-encoding.c:159
5709 -#: ../src/totem-subtitle-encoding.c:161
5710 -#: ../src/totem-subtitle-encoding.c:163
5711 -#: ../src/totem-subtitle-encoding.c:165
5712 +#: ../src/totem-subtitle-encoding.c:159 ../src/totem-subtitle-encoding.c:161
5713 +#: ../src/totem-subtitle-encoding.c:163 ../src/totem-subtitle-encoding.c:165
5717 @@ -1536,8 +1579,7 @@ msgstr "Arabskie"
5721 -#: ../src/totem-subtitle-encoding.c:171
5722 -#: ../src/totem-subtitle-encoding.c:173
5723 +#: ../src/totem-subtitle-encoding.c:171 ../src/totem-subtitle-encoding.c:173
5724 #: ../src/totem-subtitle-encoding.c:175
5727 @@ -1546,22 +1588,17 @@ msgstr "Bałtyckie"
5731 -#: ../src/totem-subtitle-encoding.c:181
5732 -#: ../src/totem-subtitle-encoding.c:183
5733 -#: ../src/totem-subtitle-encoding.c:185
5734 -#: ../src/totem-subtitle-encoding.c:187
5735 +#: ../src/totem-subtitle-encoding.c:181 ../src/totem-subtitle-encoding.c:183
5736 +#: ../src/totem-subtitle-encoding.c:185 ../src/totem-subtitle-encoding.c:187
5737 msgid "Central European"
5738 msgstr "Środkowoeuropejskie"
5740 -#: ../src/totem-subtitle-encoding.c:190
5741 -#: ../src/totem-subtitle-encoding.c:192
5742 -#: ../src/totem-subtitle-encoding.c:194
5743 -#: ../src/totem-subtitle-encoding.c:196
5744 +#: ../src/totem-subtitle-encoding.c:190 ../src/totem-subtitle-encoding.c:192
5745 +#: ../src/totem-subtitle-encoding.c:194 ../src/totem-subtitle-encoding.c:196
5746 msgid "Chinese Simplified"
5747 msgstr "Chińskie uproszczone"
5749 -#: ../src/totem-subtitle-encoding.c:199
5750 -#: ../src/totem-subtitle-encoding.c:201
5751 +#: ../src/totem-subtitle-encoding.c:199 ../src/totem-subtitle-encoding.c:201
5752 #: ../src/totem-subtitle-encoding.c:203
5753 msgid "Chinese Traditional"
5754 msgstr "Chińskie tradycyjne"
5755 @@ -1570,12 +1607,9 @@ msgstr "Chińskie tradycyjne"
5759 -#: ../src/totem-subtitle-encoding.c:209
5760 -#: ../src/totem-subtitle-encoding.c:211
5761 -#: ../src/totem-subtitle-encoding.c:213
5762 -#: ../src/totem-subtitle-encoding.c:215
5763 -#: ../src/totem-subtitle-encoding.c:217
5764 -#: ../src/totem-subtitle-encoding.c:219
5765 +#: ../src/totem-subtitle-encoding.c:209 ../src/totem-subtitle-encoding.c:211
5766 +#: ../src/totem-subtitle-encoding.c:213 ../src/totem-subtitle-encoding.c:215
5767 +#: ../src/totem-subtitle-encoding.c:217 ../src/totem-subtitle-encoding.c:219
5771 @@ -1583,8 +1617,7 @@ msgstr "Cyrylica"
5772 msgid "Cyrillic/Russian"
5773 msgstr "Cyrylica/rosyjskie"
5775 -#: ../src/totem-subtitle-encoding.c:225
5776 -#: ../src/totem-subtitle-encoding.c:227
5777 +#: ../src/totem-subtitle-encoding.c:225 ../src/totem-subtitle-encoding.c:227
5778 msgid "Cyrillic/Ukrainian"
5779 msgstr "Cyrylica/ukraińskie"
5781 @@ -1592,8 +1625,7 @@ msgstr "Cyrylica/ukraińskie"
5785 -#: ../src/totem-subtitle-encoding.c:233
5786 -#: ../src/totem-subtitle-encoding.c:235
5787 +#: ../src/totem-subtitle-encoding.c:233 ../src/totem-subtitle-encoding.c:235
5788 #: ../src/totem-subtitle-encoding.c:237
5791 @@ -1606,10 +1638,8 @@ msgstr "Gudżarati"
5795 -#: ../src/totem-subtitle-encoding.c:246
5796 -#: ../src/totem-subtitle-encoding.c:248
5797 -#: ../src/totem-subtitle-encoding.c:250
5798 -#: ../src/totem-subtitle-encoding.c:252
5799 +#: ../src/totem-subtitle-encoding.c:246 ../src/totem-subtitle-encoding.c:248
5800 +#: ../src/totem-subtitle-encoding.c:250 ../src/totem-subtitle-encoding.c:252
5804 @@ -1625,16 +1655,13 @@ msgstr "Hindi"
5808 -#: ../src/totem-subtitle-encoding.c:264
5809 -#: ../src/totem-subtitle-encoding.c:266
5810 +#: ../src/totem-subtitle-encoding.c:264 ../src/totem-subtitle-encoding.c:266
5811 #: ../src/totem-subtitle-encoding.c:268
5815 -#: ../src/totem-subtitle-encoding.c:271
5816 -#: ../src/totem-subtitle-encoding.c:273
5817 -#: ../src/totem-subtitle-encoding.c:275
5818 -#: ../src/totem-subtitle-encoding.c:277
5819 +#: ../src/totem-subtitle-encoding.c:271 ../src/totem-subtitle-encoding.c:273
5820 +#: ../src/totem-subtitle-encoding.c:275 ../src/totem-subtitle-encoding.c:277
5824 @@ -1646,8 +1673,7 @@ msgstr "Nordyckie"
5828 -#: ../src/totem-subtitle-encoding.c:286
5829 -#: ../src/totem-subtitle-encoding.c:288
5830 +#: ../src/totem-subtitle-encoding.c:286 ../src/totem-subtitle-encoding.c:288
5834 @@ -1659,31 +1685,24 @@ msgstr "Południowoeuropejskie"
5838 -#: ../src/totem-subtitle-encoding.c:297
5839 -#: ../src/totem-subtitle-encoding.c:299
5840 -#: ../src/totem-subtitle-encoding.c:301
5841 -#: ../src/totem-subtitle-encoding.c:303
5842 +#: ../src/totem-subtitle-encoding.c:297 ../src/totem-subtitle-encoding.c:299
5843 +#: ../src/totem-subtitle-encoding.c:301 ../src/totem-subtitle-encoding.c:303
5847 -#: ../src/totem-subtitle-encoding.c:306
5848 -#: ../src/totem-subtitle-encoding.c:308
5849 -#: ../src/totem-subtitle-encoding.c:310
5850 -#: ../src/totem-subtitle-encoding.c:312
5851 +#: ../src/totem-subtitle-encoding.c:306 ../src/totem-subtitle-encoding.c:308
5852 +#: ../src/totem-subtitle-encoding.c:310 ../src/totem-subtitle-encoding.c:312
5853 #: ../src/totem-subtitle-encoding.c:314
5857 -#: ../src/totem-subtitle-encoding.c:317
5858 -#: ../src/totem-subtitle-encoding.c:319
5859 -#: ../src/totem-subtitle-encoding.c:321
5860 -#: ../src/totem-subtitle-encoding.c:323
5861 +#: ../src/totem-subtitle-encoding.c:317 ../src/totem-subtitle-encoding.c:319
5862 +#: ../src/totem-subtitle-encoding.c:321 ../src/totem-subtitle-encoding.c:323
5863 #: ../src/totem-subtitle-encoding.c:325
5867 -#: ../src/totem-subtitle-encoding.c:328
5868 -#: ../src/totem-subtitle-encoding.c:330
5869 +#: ../src/totem-subtitle-encoding.c:328 ../src/totem-subtitle-encoding.c:330
5870 #: ../src/totem-subtitle-encoding.c:332
5872 msgstr "Wietnamskie"
5873 @@ -1695,7 +1714,7 @@ msgstr "Brak adresu URI nagrania wideo"
5874 #. Translators: The first string is "Filename" (as translated); the second is an actual filename.
5875 #. The third string is "Resolution" (as translated); the fourth and fifth are screenshot height and width, respectively.
5876 #. The sixth string is "Duration" (as translated); the seventh is the movie duration in words.
5877 -#: ../src/totem-video-thumbnailer.c:679
5878 +#: ../src/totem-video-thumbnailer.c:689
5882 @@ -1706,45 +1725,43 @@ msgstr ""
5883 "<b>%s</b>: %d×%d\n"
5886 -#: ../src/totem-video-thumbnailer.c:680
5887 +#: ../src/totem-video-thumbnailer.c:690
5889 msgstr "Nazwa pliku"
5891 -#: ../src/totem-video-thumbnailer.c:682
5892 +#: ../src/totem-video-thumbnailer.c:692
5894 msgstr "Rozdzielczość"
5896 -#: ../src/totem-video-thumbnailer.c:685
5897 +#: ../src/totem-video-thumbnailer.c:695
5899 msgstr "Czas trwania"
5901 -#: ../src/totem-uri.c:502
5902 -#: ../src/plugins/chapters/totem-chapters.c:1000
5903 +#: ../src/totem-uri.c:504 ../src/plugins/chapters/totem-chapters.c:998
5905 msgstr "Wszystkie pliki"
5907 -#: ../src/totem-uri.c:507
5908 -#: ../src/plugins/chapters/totem-chapters.c:997
5909 +#: ../src/totem-uri.c:509 ../src/plugins/chapters/totem-chapters.c:995
5910 msgid "Supported files"
5911 msgstr "Obsługiwane pliki"
5913 -#: ../src/totem-uri.c:519
5914 +#: ../src/totem-uri.c:521
5916 msgstr "Pliki dźwiękowe"
5918 -#: ../src/totem-uri.c:527
5919 +#: ../src/totem-uri.c:529
5921 msgstr "Pliki wideo"
5923 -#: ../src/totem-uri.c:537
5924 +#: ../src/totem-uri.c:539
5925 msgid "Subtitle files"
5926 msgstr "Pliki napisów"
5928 -#: ../src/totem-uri.c:589
5929 +#: ../src/totem-uri.c:591
5930 msgid "Select Text Subtitles"
5931 msgstr "Wybór pliku napisów"
5933 -#: ../src/totem-uri.c:652
5934 +#: ../src/totem-uri.c:654
5935 msgid "Select Movies or Playlists"
5936 msgstr "Wybór nagrań wideo lub list odtwarzania"
5938 @@ -1760,122 +1777,175 @@ msgid ""
5939 "Run '%s --help' to see a full list of available command line options.\n"
5942 -"Wykonanie polecenia \"%s --help\" wyświetli pełną listę dostępnych opcji wiersza poleceń.\n"
5943 +"Wykonanie polecenia \"%s --help\" wyświetli pełną listę dostępnych opcji "
5944 +"wiersza poleceń.\n"
5946 -#: ../src/totem.c:254
5947 -#: ../src/totem.c:263
5948 -#: ../browser-plugin/totem-plugin-viewer.c:666
5949 -#: ../browser-plugin/totem-plugin-viewer.c:1864
5950 +#: ../src/totem.c:254 ../src/totem.c:263
5951 +#: ../browser-plugin/totem-plugin-viewer.c:663
5952 +#: ../browser-plugin/totem-plugin-viewer.c:1861
5953 msgid "Totem Movie Player"
5954 msgstr "Odtwarzacz filmów Totem"
5956 -#: ../src/totem.c:255
5957 -#: ../browser-plugin/totem-plugin-viewer.c:2305
5958 +#: ../src/totem.c:255 ../browser-plugin/totem-plugin-viewer.c:2302
5959 msgid "Could not initialize the thread-safe libraries."
5960 msgstr "Nie można zainicjować bibliotek bezpiecznych dla wątków."
5962 #: ../src/totem.c:255
5963 msgid "Verify your system installation. Totem will now exit."
5964 -msgstr "Proszę sprawdzić poprawność instalacji systemu. Działanie programu Totem zostanie teraz zakończone."
5966 +"Proszę sprawdzić poprawność instalacji systemu. Działanie programu Totem "
5967 +"zostanie teraz zakończone."
5969 -#: ../src/backend/bacon-video-widget-gst-0.10.c:1848
5970 +#: ../src/backend/bacon-video-widget-gst-0.10.c:1850
5971 msgid "Password requested for RTSP server"
5972 msgstr "Zażądano hasła dla serwera RTSP"
5974 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3120
5975 #: ../src/backend/bacon-video-widget-gst-0.10.c:3124
5976 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3128
5978 msgid "Audio Track #%d"
5979 msgstr "Ścieżka dźwiękowa #%d"
5981 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3152
5982 #: ../src/backend/bacon-video-widget-gst-0.10.c:3156
5983 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3160
5985 msgid "Subtitle #%d"
5988 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3565
5989 -msgid "The requested audio output was not found. Please select another audio output in the Multimedia Systems Selector."
5990 -msgstr "Żądane wyjście dźwięku nie zostało odnalezione. Proszę wybrać inne wyjście dźwięku w oknie Wyboru systemu multimediów."
5991 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3569
5993 +"The requested audio output was not found. Please select another audio output "
5994 +"in the Multimedia Systems Selector."
5996 +"Żądane wyjście dźwięku nie zostało odnalezione. Proszę wybrać inne wyjście "
5997 +"dźwięku w oknie Wyboru systemu multimediów."
5999 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3570
6000 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3574
6001 msgid "Location not found."
6002 msgstr "Nie odnaleziono położenia."
6004 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3574
6005 -msgid "Could not open location; you might not have permission to open the file."
6006 -msgstr "Nie można otworzyć położenia. Użytkownik może nie mieć uprawnień do otwarcia pliku."
6007 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3578
6009 +"Could not open location; you might not have permission to open the file."
6011 +"Nie można otworzyć położenia. Użytkownik może nie mieć uprawnień do otwarcia "
6014 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3585
6015 -msgid "The video output is in use by another application. Please close other video applications, or select another video output in the Multimedia Systems Selector."
6016 -msgstr "Wyjście wideo jest używane przez inny program. Proszę zamknąć inne programy wideo lub wybrać inne wyjście wideo w oknie Wyboru systemu multimediów."
6017 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3589
6019 +"The video output is in use by another application. Please close other video "
6020 +"applications, or select another video output in the Multimedia Systems "
6023 +"Wyjście wideo jest używane przez inny program. Proszę zamknąć inne programy "
6024 +"wideo lub wybrać inne wyjście wideo w oknie Wyboru systemu multimediów."
6026 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3591
6027 -msgid "The audio output is in use by another application. Please select another audio output in the Multimedia Systems Selector. You may want to consider using a sound server."
6028 -msgstr "Wyjście dźwięku jest używane przez inny program. Proszę wybrać inne wyjście dźwięku w oknie Wyboru systemu multimediów. Możesz rozważyć również użycie serwera dźwięku."
6029 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3595
6031 +"The audio output is in use by another application. Please select another "
6032 +"audio output in the Multimedia Systems Selector. You may want to consider "
6033 +"using a sound server."
6035 +"Wyjście dźwięku jest używane przez inny program. Proszę wybrać inne wyjście "
6036 +"dźwięku w oknie Wyboru systemu multimediów. Możesz rozważyć również użycie "
6039 #. should be exactly one missing thing (source or converter)
6040 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3609
6041 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3615
6042 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3613
6043 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3619
6045 msgid "The playback of this movie requires a %s plugin which is not installed."
6046 -msgstr "Odtworzenie tego nagrania wideo wymaga wtyczki %s, która nie jest zainstalowana."
6048 +"Odtworzenie tego nagrania wideo wymaga wtyczki %s, która nie jest "
6051 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3616
6052 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3620
6055 -"The playback of this movie requires the following decoders which are not installed:\n"
6056 +"The playback of this movie requires the following decoders which are not "
6061 -"Odtworzenie tego nagrania wideo wymaga następujących dekoderów, które nie są zainstalowane:\n"
6062 +"Odtworzenie tego nagrania wideo wymaga następujących dekoderów, które nie są "
6067 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3641
6068 -msgid "Cannot play this file over the network. Try downloading it to disk first."
6069 -msgstr "Nie można odtworzyć pliku przez sieć. Proszę spróbować najpierw pobrać plik na dysk."
6070 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3645
6072 +"Cannot play this file over the network. Try downloading it to disk first."
6074 +"Nie można odtworzyć pliku przez sieć. Proszę spróbować najpierw pobrać plik "
6077 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3713
6078 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3717
6079 msgid "Media file could not be played."
6080 msgstr "Nie można odtworzyć pliku multimediów."
6082 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6004
6083 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6008
6085 msgstr "Przestrzenny"
6087 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6006
6088 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6010
6092 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6353
6093 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6357
6094 msgid "Too old version of GStreamer installed."
6095 msgstr "Zainstalowana wersja biblioteki GStreamer jest za stara."
6097 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6360
6098 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6364
6099 msgid "Media contains no supported video streams."
6100 msgstr "Plik multimediów zawiera nieobsługiwany strumień wideo."
6102 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6845
6103 -msgid "Failed to create a GStreamer play object. Please check your GStreamer installation."
6104 -msgstr "Utworzenie obiektu odtwarzania GStreamer się nie powiodło. Proszę sprawdzić poprawność instalacji biblioteki GStreamer."
6105 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6847
6107 +"Failed to create a GStreamer play object. Please check your GStreamer "
6110 +"Utworzenie obiektu odtwarzania GStreamer się nie powiodło. Proszę sprawdzić "
6111 +"poprawność instalacji biblioteki GStreamer."
6113 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6956
6114 -#: ../src/backend/bacon-video-widget-gst-0.10.c:7091
6115 -msgid "Failed to open video output. It may not be available. Please select another video output in the Multimedia Systems Selector."
6116 -msgstr "Otwarcie wyjścia wideo się nie powiodło. Może być ono niedostępne. Proszę wybrać inne wyjście wideo w oknie Wyboru systemu multimediów."
6117 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6958
6118 +#: ../src/backend/bacon-video-widget-gst-0.10.c:7093
6120 +"Failed to open video output. It may not be available. Please select another "
6121 +"video output in the Multimedia Systems Selector."
6123 +"Otwarcie wyjścia wideo się nie powiodło. Może być ono niedostępne. Proszę "
6124 +"wybrać inne wyjście wideo w oknie Wyboru systemu multimediów."
6126 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6968
6127 -msgid "Could not find the video output. You may need to install additional GStreamer plugins, or select another video output in the Multimedia Systems Selector."
6128 -msgstr "Nie można odnaleźć wyjścia wideo. Może być wymagana instalacja dodatkowych wtyczek biblioteki GStreamer, lub należy wybrać inne wyjście wideo w oknie Wyboru systemu multimediów."
6129 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6970
6131 +"Could not find the video output. You may need to install additional "
6132 +"GStreamer plugins, or select another video output in the Multimedia Systems "
6135 +"Nie można odnaleźć wyjścia wideo. Może być wymagana instalacja dodatkowych "
6136 +"wtyczek biblioteki GStreamer, lub należy wybrać inne wyjście wideo w oknie "
6137 +"Wyboru systemu multimediów."
6139 -#: ../src/backend/bacon-video-widget-gst-0.10.c:7003
6140 -msgid "Failed to open audio output. You may not have permission to open the sound device, or the sound server may not be running. Please select another audio output in the Multimedia Systems Selector."
6141 -msgstr "Otwarcie wyjścia dźwięku się nie powiodło. Użytkownik może nie mieć uprawnień do urządzenia dźwiękowego albo nie jest uruchomiony serwer dźwięku. Proszę wybrać inne wyjście dźwięku w oknie Wyboru systemu multimediów."
6142 +#: ../src/backend/bacon-video-widget-gst-0.10.c:7005
6144 +"Failed to open audio output. You may not have permission to open the sound "
6145 +"device, or the sound server may not be running. Please select another audio "
6146 +"output in the Multimedia Systems Selector."
6148 +"Otwarcie wyjścia dźwięku się nie powiodło. Użytkownik może nie mieć "
6149 +"uprawnień do urządzenia dźwiękowego albo nie jest uruchomiony serwer "
6150 +"dźwięku. Proszę wybrać inne wyjście dźwięku w oknie Wyboru systemu "
6153 -#: ../src/backend/bacon-video-widget-gst-0.10.c:7023
6154 -msgid "Could not find the audio output. You may need to install additional GStreamer plugins, or select another audio output in the Multimedia Systems Selector."
6155 -msgstr "Nie można odnaleźć wyjścia dźwięku. Może być wymagana instalacja dodatkowych wtyczek biblioteki GStreamer, lub należy wybrać inne wyjście dźwięku w oknie Wyboru systemu multimediów."
6156 +#: ../src/backend/bacon-video-widget-gst-0.10.c:7025
6158 +"Could not find the audio output. You may need to install additional "
6159 +"GStreamer plugins, or select another audio output in the Multimedia Systems "
6162 +"Nie można odnaleźć wyjścia dźwięku. Może być wymagana instalacja dodatkowych "
6163 +"wtyczek biblioteki GStreamer, lub należy wybrać inne wyjście dźwięku w oknie "
6164 +"Wyboru systemu multimediów."
6166 #. hour:minutes:seconds
6167 #. Translators: This is a time format, like "9:05:02" for 9
6168 @@ -1883,8 +1953,7 @@ msgstr "Nie można odnaleźć wyjścia dźwięku. Może być wymagana instalacja
6169 #. * the separator that your locale uses or use "%Id" instead
6170 #. * of "%d" if your locale uses localized digits.
6172 -#: ../src/backend/video-utils.c:125
6173 -#: ../src/backend/video-utils.c:142
6174 +#: ../src/backend/video-utils.c:91 ../src/backend/video-utils.c:108
6176 msgctxt "long time format"
6177 msgid "%d:%02d:%02d"
6178 @@ -1896,13 +1965,13 @@ msgstr "%d:%02d:%02d"
6179 #. * separator that your locale uses or use "%Id" instead of
6180 #. * "%d" if your locale uses localized digits.
6182 -#: ../src/backend/video-utils.c:134
6183 +#: ../src/backend/video-utils.c:100
6185 msgctxt "short time format"
6189 -#: ../src/backend/video-utils.c:172
6190 +#: ../src/backend/video-utils.c:138
6193 msgid_plural "%d hours"
6194 @@ -1910,7 +1979,7 @@ msgstr[0] "%d godzina"
6195 msgstr[1] "%d godziny"
6196 msgstr[2] "%d godzin"
6198 -#: ../src/backend/video-utils.c:174
6199 +#: ../src/backend/video-utils.c:140
6202 msgid_plural "%d minutes"
6203 @@ -1918,7 +1987,7 @@ msgstr[0] "%d minuta"
6204 msgstr[1] "%d minuty"
6205 msgstr[2] "%d minut"
6207 -#: ../src/backend/video-utils.c:177
6208 +#: ../src/backend/video-utils.c:143
6211 msgid_plural "%d seconds"
6212 @@ -1927,19 +1996,19 @@ msgstr[1] "%d sekundy"
6213 msgstr[2] "%d sekund"
6215 #. hour:minutes:seconds
6216 -#: ../src/backend/video-utils.c:183
6217 +#: ../src/backend/video-utils.c:149
6223 -#: ../src/backend/video-utils.c:186
6224 +#: ../src/backend/video-utils.c:152
6230 -#: ../src/backend/video-utils.c:189
6231 +#: ../src/backend/video-utils.c:155
6235 @@ -1950,7 +2019,8 @@ msgstr "Bemused"
6237 #: ../src/plugins/bemused/bemused.plugin.in.h:2
6238 msgid "Control Totem through a mobile phone with a Bemused client"
6239 -msgstr "Obsługa programu Totem przez telefon komórkowy za pomocą klienta Bemused"
6241 +"Obsługa programu Totem przez telefon komórkowy za pomocą klienta Bemused"
6243 #. Translators: the parameter is a number used to identify this playlist entry
6244 #: ../src/plugins/bemused/totem-bemused.c:171
6245 @@ -2015,7 +2085,7 @@ msgid "Video Disc Recorder"
6246 msgstr "Nagrywarka płyt wideo"
6248 #: ../src/plugins/chapters/chapters.plugin.in.h:1
6249 -#: ../src/plugins/chapters/totem-chapters.c:1139
6250 +#: ../src/plugins/chapters/totem-chapters.c:1137
6254 @@ -2088,61 +2158,65 @@ msgstr ""
6255 "<b>Tytuł: </b>%s\n"
6256 "<b>Czas rozpoczęcia: </b>%s"
6258 -#: ../src/plugins/chapters/totem-chapters.c:330
6259 +#: ../src/plugins/chapters/totem-chapters.c:328
6260 msgid "Error while reading file with chapters"
6261 msgstr "Błąd podczas odczytywania pliku z rozdziałami"
6263 -#: ../src/plugins/chapters/totem-chapters.c:545
6264 +#: ../src/plugins/chapters/totem-chapters.c:543
6265 msgid "Chapter with the same time already exists"
6266 msgstr "Rozdział o tym samym czasie już istnieje"
6268 -#: ../src/plugins/chapters/totem-chapters.c:546
6269 +#: ../src/plugins/chapters/totem-chapters.c:544
6270 msgid "Try another name or remove an existing chapter."
6271 msgstr "Należy wprowadzić inną nazwę lub usunąć istniejący rozdział."
6273 -#: ../src/plugins/chapters/totem-chapters.c:719
6274 +#: ../src/plugins/chapters/totem-chapters.c:717
6275 msgid "Error while writing file with chapters"
6276 msgstr "Błąd podczas zapisywania pliku z rozdziałami"
6278 -#: ../src/plugins/chapters/totem-chapters.c:844
6279 +#: ../src/plugins/chapters/totem-chapters.c:842
6280 msgid "Error occurred while saving chapters"
6281 msgstr "Wystąpił błąd podczas zapisywania rozdziałów"
6283 -#: ../src/plugins/chapters/totem-chapters.c:845
6284 -msgid "Please check you have permission to write to the folder containing the movie."
6285 -msgstr "Proszę sprawdzić, czy użytkownik ma uprawnienia do zapisu w katalogu zawierającym film."
6286 +#: ../src/plugins/chapters/totem-chapters.c:843
6288 +"Please check you have permission to write to the folder containing the movie."
6290 +"Proszę sprawdzić, czy użytkownik ma uprawnienia do zapisu w katalogu "
6291 +"zawierającym film."
6293 -#: ../src/plugins/chapters/totem-chapters.c:978
6294 +#: ../src/plugins/chapters/totem-chapters.c:976
6295 msgid "Open Chapter File"
6296 msgstr "Otwórz plik rozdziałów"
6298 -#: ../src/plugins/chapters/totem-chapters.c:1095
6299 +#: ../src/plugins/chapters/totem-chapters.c:1093
6300 msgid "Chapter Screenshot"
6301 msgstr "Zrzut ekranu rozdziału"
6303 -#: ../src/plugins/chapters/totem-chapters.c:1106
6304 +#: ../src/plugins/chapters/totem-chapters.c:1104
6305 msgid "Chapter Title"
6306 msgstr "Tytuł rozdziału"
6308 -#: ../src/plugins/chapters/totem-chapters.c:1184
6309 +#: ../src/plugins/chapters/totem-chapters.c:1182
6310 msgid "Save changes to chapter list before closing?"
6311 msgstr "Zapisać zmiany przed zamknięciem?"
6313 #. Translators: close Totem without saving changes to the chapter list of the current movie.
6314 -#: ../src/plugins/chapters/totem-chapters.c:1189
6315 +#: ../src/plugins/chapters/totem-chapters.c:1187
6316 msgid "Close without Saving"
6317 msgstr "Zamknij bez zapisywania"
6319 #. Translators: save changes to the chapter list of the current movie before closing Totem.
6320 -#: ../src/plugins/chapters/totem-chapters.c:1191
6321 +#: ../src/plugins/chapters/totem-chapters.c:1189
6325 -#: ../src/plugins/chapters/totem-chapters.c:1194
6326 +#: ../src/plugins/chapters/totem-chapters.c:1192
6327 msgid "If you don't save, changes to the chapter list will be lost."
6328 -msgstr "Jeśli nie zostanie zapisane, to zmiany w liście rozdziałów zostaną utracone."
6330 +"Jeśli nie zostanie zapisane, to zmiany w liście rozdziałów zostaną utracone."
6332 -#: ../src/plugins/chapters/totem-cmml-parser.c:559
6333 +#: ../src/plugins/chapters/totem-cmml-parser.c:651
6334 msgid "Failed to parse CMML file"
6335 msgstr "Przetworzenie pliku CMML się nie powiodło"
6337 @@ -2151,7 +2225,7 @@ msgstr "Przetworzenie pliku CMML się nie powiodło"
6341 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:116
6342 +#: ../src/plugins/coherence_upnp/coherence_upnp.py:117
6343 #: ../src/plugins/coherence_upnp/coherence_upnp.plugin.in.h:2
6344 msgid "Coherence DLNA/UPnP Client"
6345 msgstr "Klient DLNA/UPnP Coherence"
6346 @@ -2165,25 +2239,21 @@ msgid "D-Bus Service"
6347 msgstr "Usługa D-Bus"
6349 #: ../src/plugins/dbus-service/dbus-service.plugin.in.h:2
6350 -msgid "Plugin for sending notifications of currently playing movies to the D-Bus subsystem."
6351 -msgstr "Wtyczka do wysyłania powiadomień o obecnie odtwarzanych nagraniach wideo do podsystemu D-Bus."
6353 +"Plugin for sending notifications of currently playing movies to the D-Bus "
6356 +"Wtyczka do wysyłania powiadomień o obecnie odtwarzanych nagraniach wideo do "
6357 +"podsystemu D-Bus."
6359 -#: ../src/plugins/galago/galago.plugin.in.h:1
6360 +#: ../src/plugins/im-status/totem-im-status.plugin.in.h:1
6361 msgid "Instant Messenger status"
6362 msgstr "Stan komunikatora"
6364 -#: ../src/plugins/galago/galago.plugin.in.h:2
6365 +#: ../src/plugins/im-status/totem-im-status.plugin.in.h:2
6366 msgid "Set your Instant Messenger status to away when a movie is playing"
6367 msgstr "Ustawienie stanu komunikatora na \"Zajęty\" podczas odtwarzania filmu"
6369 -#: ../src/plugins/galago/totem-galago.c:117
6370 -msgid "Error loading Galago plugin"
6371 -msgstr "Błąd podczas wczytywania wtyczki Galago"
6373 -#: ../src/plugins/galago/totem-galago.c:117
6374 -msgid "Could not connect to the Galago daemon."
6375 -msgstr "Nie można połączyć się z usługą Galago."
6377 #: ../src/plugins/gromit/gromit.plugin.in.h:1
6378 msgid "Gromit Annotations"
6379 msgstr "Adnotacje Gromit"
6380 @@ -2198,36 +2268,46 @@ msgstr "Plik wykonywalny gromit nie został odnaleziony."
6382 #. Add the interface to Totem's sidebar
6383 #: ../src/plugins/iplayer/iplayer.plugin.in.h:1
6384 -#: ../src/plugins/iplayer/iplayer.py:41
6385 +#: ../src/plugins/iplayer/iplayer.py:42
6387 msgstr "BBC iPlayer"
6389 #: ../src/plugins/iplayer/iplayer.plugin.in.h:2
6390 msgid "Stream BBC programs from the last 7 days from the BBC iPlayer service."
6391 -msgstr "Odtwarzanie strumieniowe programów BBC z ostatnich 7 dni z usługi BBC iPlayer (dostępne wyłącznie w Wielkiej Brytanii)."
6393 +"Odtwarzanie strumieniowe programów BBC z ostatnich 7 dni z usługi BBC "
6394 +"iPlayer (dostępne wyłącznie w Wielkiej Brytanii)."
6396 -#: ../src/plugins/iplayer/iplayer.py:66
6397 +#: ../src/plugins/iplayer/iplayer.py:67
6398 msgid "Error listing channel categories"
6399 msgstr "Błąd podczas pobierania listy kategorii kanałów"
6401 -#: ../src/plugins/iplayer/iplayer.py:66
6402 -msgid "There was an unknown error getting the list of television channels available on BBC iPlayer."
6403 -msgstr "Wystąpił nieznany błąd podczas uzyskiwania listy kanałów telewizyjnych dostępnych na BBC iPlayer."
6404 +#: ../src/plugins/iplayer/iplayer.py:67
6406 +"There was an unknown error getting the list of television channels available "
6409 +"Wystąpił nieznany błąd podczas uzyskiwania listy kanałów telewizyjnych "
6410 +"dostępnych na BBC iPlayer."
6412 #. Append a dummy child row so that the expander's visible; we can
6413 #. then queue off the expander to load the programme listing for this category
6414 -#: ../src/plugins/iplayer/iplayer.py:74
6415 +#: ../src/plugins/iplayer/iplayer.py:75
6417 msgstr "Wczytywanie…"
6419 #. Translators: the "programme feed" is the list of TV shows available to watch online
6420 -#: ../src/plugins/iplayer/iplayer.py:119
6421 +#: ../src/plugins/iplayer/iplayer.py:120
6422 msgid "Error getting programme feed"
6423 msgstr "Błąd podczas uzyskiwania danych programu"
6425 -#: ../src/plugins/iplayer/iplayer.py:119
6426 -msgid "There was an error getting the list of programmes for this channel and category combination."
6427 -msgstr "Wystąpił błąd podczas pobierania listy programów tego połączenia kanału i kategorii."
6428 +#: ../src/plugins/iplayer/iplayer.py:120
6430 +"There was an error getting the list of programmes for this channel and "
6431 +"category combination."
6433 +"Wystąpił błąd podczas pobierania listy programów tego połączenia kanału i "
6436 #: ../src/plugins/iplayer/iplayer2.py:299
6437 msgid "<no reason given>"
6438 @@ -2277,47 +2357,49 @@ msgid "_Open Jamendo Album Page in Browser"
6439 msgstr "_Otwórz w stronę albumu Jamendo w przeglądarce WWW"
6441 #: ../src/plugins/jamendo/jamendo.plugin.in.h:1
6442 -#: ../src/plugins/jamendo/jamendo.py:127
6443 +#: ../src/plugins/jamendo/jamendo.py:128
6447 #: ../src/plugins/jamendo/jamendo.plugin.in.h:2
6448 -msgid "Listen to the large collection of Creative Commons licensed music on Jamendo."
6449 -msgstr "Umożliwia odsłuchiwanie dużego zbioru muzyki na licencji Creative Commons z Jamendo."
6451 +"Listen to the large collection of Creative Commons licensed music on Jamendo."
6453 +"Umożliwia odsłuchiwanie dużego zbioru muzyki na licencji Creative Commons z "
6456 #: ../src/plugins/jamendo/jamendo.py:58
6457 msgid "You need to install the Python simplejson module."
6458 msgstr "Należy zainstalować moduł języka Python simplejson."
6460 -#: ../src/plugins/jamendo/jamendo.py:260
6461 -#: ../src/plugins/jamendo/jamendo.py:273
6462 -#: ../src/plugins/jamendo/jamendo.py:297
6463 +#: ../src/plugins/jamendo/jamendo.py:261 ../src/plugins/jamendo/jamendo.py:274
6464 +#: ../src/plugins/jamendo/jamendo.py:298
6467 msgstr "Wykonawca: %s"
6469 #. Translators: this is the release date of an album in Python strptime format
6470 -#: ../src/plugins/jamendo/jamendo.py:266
6471 +#: ../src/plugins/jamendo/jamendo.py:267
6475 #. Translators: this is the release time of an album in Python strftime format
6476 -#: ../src/plugins/jamendo/jamendo.py:268
6477 +#: ../src/plugins/jamendo/jamendo.py:269
6482 -#: ../src/plugins/jamendo/jamendo.py:274
6483 +#: ../src/plugins/jamendo/jamendo.py:275
6486 msgstr "Gatunek: %s"
6488 -#: ../src/plugins/jamendo/jamendo.py:275
6489 +#: ../src/plugins/jamendo/jamendo.py:276
6491 msgid "Released on: %s"
6492 msgstr "Data wydania: %s"
6494 -#: ../src/plugins/jamendo/jamendo.py:276
6495 +#: ../src/plugins/jamendo/jamendo.py:277
6498 msgstr "Licencja: %s"
6499 @@ -2325,26 +2407,26 @@ msgstr "Licencja: %s"
6501 #. Translators: this is the title of a track in Python format
6502 #. (first argument is the track number, second is the track title)
6503 -#: ../src/plugins/jamendo/jamendo.py:289
6504 +#: ../src/plugins/jamendo/jamendo.py:290
6509 -#: ../src/plugins/jamendo/jamendo.py:296
6510 +#: ../src/plugins/jamendo/jamendo.py:297
6515 -#: ../src/plugins/jamendo/jamendo.py:298
6516 +#: ../src/plugins/jamendo/jamendo.py:299
6518 msgid "Duration: %s"
6519 msgstr "Czas trwania: %s"
6521 -#: ../src/plugins/jamendo/jamendo.py:355
6522 +#: ../src/plugins/jamendo/jamendo.py:356
6523 msgid "Fetching albums, please wait…"
6524 msgstr "Pobieranie albumów, proszę czekać…"
6526 -#: ../src/plugins/jamendo/jamendo.py:410
6527 +#: ../src/plugins/jamendo/jamendo.py:411
6530 "Failed to connect to Jamendo server.\n"
6531 @@ -2353,24 +2435,24 @@ msgstr ""
6532 "Połączenie z serwerem Jamendo się nie powiodło.\n"
6535 -#: ../src/plugins/jamendo/jamendo.py:412
6536 +#: ../src/plugins/jamendo/jamendo.py:413
6538 msgid "The Jamendo server returned code %s."
6539 msgstr "Serwer Jamendo zwrócił kod %s."
6541 -#: ../src/plugins/jamendo/jamendo.py:416
6542 +#: ../src/plugins/jamendo/jamendo.py:417
6543 msgid "An error occurred while fetching albums."
6544 msgstr "Wystąpił błąd podczas pobierania albumów."
6546 #. Translators: time formatting (in Python strftime format) for the Jamendo plugin
6547 #. for times longer than an hour
6548 -#: ../src/plugins/jamendo/jamendo.py:618
6549 +#: ../src/plugins/jamendo/jamendo.py:620
6553 #. Translators: time formatting (in Python strftime format) for the Jamendo plugin
6554 #. for times shorter than an hour
6555 -#: ../src/plugins/jamendo/jamendo.py:621
6556 +#: ../src/plugins/jamendo/jamendo.py:623
6560 @@ -2381,7 +2463,7 @@ msgstr "%M:%S"
6562 #. http://www.jamendo.com/en/album/4818
6563 #. If Jamendo doesn't support your language, *do not translate this string*!
6564 -#: ../src/plugins/jamendo/jamendo.py:671
6565 +#: ../src/plugins/jamendo/jamendo.py:673
6569 @@ -2394,8 +2476,11 @@ msgid "Number of results per page"
6570 msgstr "Liczba wyników na stronie"
6572 #: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:3
6573 -msgid "The number of Jamendo search results to display in each page of results."
6574 -msgstr "Liczba wyników wyszukiwania w serwisie Jamendo wyświetlanych na każdej stronie."
6576 +"The number of Jamendo search results to display in each page of results."
6578 +"Liczba wyników wyszukiwania w serwisie Jamendo wyświetlanych na każdej "
6581 #: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:4
6582 msgid "The preferred audio format to download tracks from Jamendo in."
6583 @@ -2456,35 +2541,35 @@ msgstr "Nie można połączyć się ze stroną OpenSubtitles"
6584 msgid "No results found"
6585 msgstr "Brak wyników"
6587 -#: ../src/plugins/opensubtitles/opensubtitles.py:374
6588 +#: ../src/plugins/opensubtitles/opensubtitles.py:376
6592 #. translators comment:
6593 #. This is the file-type of the subtitle file detected
6594 -#: ../src/plugins/opensubtitles/opensubtitles.py:380
6595 +#: ../src/plugins/opensubtitles/opensubtitles.py:382
6599 #. translators comment:
6600 #. This is a rating of the quality of the subtitle
6601 -#: ../src/plugins/opensubtitles/opensubtitles.py:385
6602 +#: ../src/plugins/opensubtitles/opensubtitles.py:387
6606 -#: ../src/plugins/opensubtitles/opensubtitles.py:426
6607 +#: ../src/plugins/opensubtitles/opensubtitles.py:428
6608 msgid "_Download Movie Subtitles…"
6609 msgstr "_Pobierz napisy do filmu..."
6611 -#: ../src/plugins/opensubtitles/opensubtitles.py:427
6612 +#: ../src/plugins/opensubtitles/opensubtitles.py:429
6613 msgid "Download movie subtitles from OpenSubtitles"
6614 msgstr "Pobiera napisy do filmów z serwisu OpenSubtitles"
6616 -#: ../src/plugins/opensubtitles/opensubtitles.py:486
6617 +#: ../src/plugins/opensubtitles/opensubtitles.py:488
6618 msgid "Searching subtitles…"
6619 msgstr "Wyszukiwanie napisów…"
6621 -#: ../src/plugins/opensubtitles/opensubtitles.py:544
6622 +#: ../src/plugins/opensubtitles/opensubtitles.py:546
6623 msgid "Downloading the subtitles…"
6624 msgstr "Pobieranie napisów…"
6626 @@ -2502,7 +2587,8 @@ msgstr "Zawsze na wierzchu"
6628 #: ../src/plugins/ontop/ontop.plugin.in.h:2
6629 msgid "Keep the main window on top when playing a movie"
6630 -msgstr "Utrzymywanie głównego okna ponad innymi podczas odtwarzania nagrania wideo"
6632 +"Utrzymywanie głównego okna ponad innymi podczas odtwarzania nagrania wideo"
6634 #: ../src/plugins/properties/totem-movie-properties.c:128
6636 @@ -2510,8 +2596,18 @@ msgstr "Właściwości"
6638 #: ../src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in.in.h:2
6640 -msgid "A format string used to build the network service name used when publishing playlists over the network. The following format placeholders can be used: • %a: the program name as returned by g_get_application_name() • %h: the machine's host name in title case • %u: the user's login name in title case • %U: the user's real name • %%: the percent sign"
6641 -msgstr "Ciąg formatu użyty do stworzenia nazwy usługi sieciowej podczas publikowania list odtwarzania przez sieć. Można użyć następujących symboli zastępczych: • %a: nazwa programu zwracana przez g_get_application_name() • %h: nazwa komputera (jak nazwy własne) • %u: login użytkownika (jak nazwy własne) • %U: imię i nazwisko użytkownika • %%: znak procentu"
6643 +"A format string used to build the network service name used when publishing "
6644 +"playlists over the network. The following format placeholders can be used: • "
6645 +"%a: the program name as returned by g_get_application_name() • %h: the "
6646 +"machine's host name in title case • %u: the user's login name in title case "
6647 +"• %U: the user's real name • %%: the percent sign"
6649 +"Ciąg formatu użyty do stworzenia nazwy usługi sieciowej podczas publikowania "
6650 +"list odtwarzania przez sieć. Można użyć następujących symboli zastępczych: • "
6651 +"%a: nazwa programu zwracana przez g_get_application_name() • %h: nazwa "
6652 +"komputera (jak nazwy własne) • %u: login użytkownika (jak nazwy własne) • "
6653 +"%U: imię i nazwisko użytkownika • %%: znak procentu"
6655 #: ../src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in.in.h:3
6656 msgid "Format for network service name"
6657 @@ -2522,8 +2618,11 @@ msgid "Publisher protocol to use"
6658 msgstr "Użyty protokół publikowania"
6660 #: ../src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in.in.h:5
6661 -msgid "The transport protocol to use when publishing playlists over the network."
6662 -msgstr "Użyty protokół przesyłania podczas publikowania list odtwarzania przesyłanych przez sieć."
6664 +"The transport protocol to use when publishing playlists over the network."
6666 +"Użyty protokół przesyłania podczas publikowania list odtwarzania "
6667 +"przesyłanych przez sieć."
6669 #. Translators: computers on the local network which are publishing their playlists over the network
6670 #: ../src/plugins/publish/totem-publish.c:552
6671 @@ -2558,8 +2657,13 @@ msgid "Use _encrypted transport protocol (HTTPS)"
6672 msgstr "_Szyfrowanie protokołu przesyłania (HTTPS)"
6674 #: ../src/plugins/pythonconsole/org.gnome.totem.plugins.pythonconsole.gschema.xml.in.in.h:1
6675 -msgid "A password to protect the rpdb2 server for debugging Totem from unauthorized remote access. If this is empty, a default of 'totem' will be used."
6676 -msgstr "Hasło ochrony serwera rpdb2 podczas nieupoważnionego zdalnego debugowania programu Totem. W przypadku opuszczenia pola użyte zostanie hasło domyślne \"totem\"."
6678 +"A password to protect the rpdb2 server for debugging Totem from unauthorized "
6679 +"remote access. If this is empty, a default of 'totem' will be used."
6681 +"Hasło ochrony serwera rpdb2 podczas nieupoważnionego zdalnego debugowania "
6682 +"programu Totem. W przypadku opuszczenia pola użyte zostanie hasło domyślne "
6685 #: ../src/plugins/pythonconsole/org.gnome.totem.plugins.pythonconsole.gschema.xml.in.in.h:2
6686 msgid "rpdb2 password"
6687 @@ -2587,8 +2691,8 @@ msgstr "Film"
6688 msgid "Movie stream"
6689 msgstr "Strumień wideo"
6691 -#: ../src/plugins/screensaver/totem-screensaver.c:112
6692 -#: ../browser-plugin/totem-plugin-viewer.c:1964
6693 +#: ../src/plugins/screensaver/totem-screensaver.c:116
6694 +#: ../browser-plugin/totem-plugin-viewer.c:1961
6695 msgid "Playing a movie"
6696 msgstr "Odtwarzanie filmu"
6698 @@ -2668,7 +2772,8 @@ msgstr "Program Totem nie może pobrać zrzutu ekranu tego wideo."
6700 #: ../src/plugins/screenshot/totem-screenshot-plugin.c:95
6701 msgid "This is not supposed to happen; please file a bug report."
6702 -msgstr "Ta sytuacja nie powinna mieć miejsca. Proszę wypełnić zgłoszenie błędu."
6704 +"Ta sytuacja nie powinna mieć miejsca. Proszę wypełnić zgłoszenie błędu."
6706 #: ../src/plugins/screenshot/totem-screenshot-plugin.c:197
6707 msgid "Take _Screenshot..."
6708 @@ -2814,8 +2919,12 @@ msgid "Error Searching for Videos"
6709 msgstr "Błąd podczas wyszukiwania nagrań wideo"
6711 #: ../src/plugins/youtube/totem-youtube.c:425
6712 -msgid "The response from the server could not be understood. Please check you are running the latest version of libgdata."
6713 -msgstr "Odpowiedź z serwera była niezrozumiała. Proszę się upewnić, że zainstalowana jest najnowsza wersja biblioteki libgdata."
6715 +"The response from the server could not be understood. Please check you are "
6716 +"running the latest version of libgdata."
6718 +"Odpowiedź z serwera była niezrozumiała. Proszę się upewnić, że zainstalowana "
6719 +"jest najnowsza wersja biblioteki libgdata."
6722 #: ../src/plugins/youtube/totem-youtube.c:618
6723 @@ -2840,8 +2949,12 @@ msgid "Video Format Not Supported"
6724 msgstr "Nieobsługiwany format wideo"
6726 #: ../src/plugins/youtube/totem-youtube.c:799
6727 -msgid "This video is not available in any formats which Totem supports. Would you like to open it in your web browser instead?"
6728 -msgstr "Plik wideo jest niedostępny w formatach obsługiwanych przez program Totem. Otworzyć w przeglądarce?"
6730 +"This video is not available in any formats which Totem supports. Would you "
6731 +"like to open it in your web browser instead?"
6733 +"Plik wideo jest niedostępny w formatach obsługiwanych przez program Totem. "
6734 +"Otworzyć w przeglądarce?"
6736 #: ../browser-plugin/totem-plugin-viewer.c:431
6737 msgid "No URI to play"
6738 @@ -2850,31 +2963,33 @@ msgstr "Brak adresu URI do odtworzenia"
6739 #. translators: this is:
6740 #. * Open With ApplicationName
6741 #. * as in nautilus' right-click menu
6742 -#: ../browser-plugin/totem-plugin-viewer.c:1104
6743 +#: ../browser-plugin/totem-plugin-viewer.c:1101
6745 msgid "_Open with \"%s\""
6746 msgstr "_Otwórz za pomocą \"%s\""
6748 -#: ../browser-plugin/totem-plugin-viewer.c:1155
6749 +#: ../browser-plugin/totem-plugin-viewer.c:1152
6751 msgid "Browser Plugin using %s"
6752 msgstr "Wtyczka przeglądarki używa %s"
6754 -#: ../browser-plugin/totem-plugin-viewer.c:1160
6755 +#: ../browser-plugin/totem-plugin-viewer.c:1157
6756 msgid "Totem Browser Plugin"
6757 msgstr "Wtyczka przeglądarki programu Totem"
6759 -#: ../browser-plugin/totem-plugin-viewer.c:2198
6760 +#: ../browser-plugin/totem-plugin-viewer.c:2195
6761 msgid "No playlist or playlist empty"
6762 msgstr "Brak listy odtwarzania lub lista jest pusta"
6764 -#: ../browser-plugin/totem-plugin-viewer.c:2289
6765 +#: ../browser-plugin/totem-plugin-viewer.c:2286
6766 msgid "Movie browser plugin"
6767 msgstr "Wtyczka przeglądarki nagrań wideo"
6769 -#: ../browser-plugin/totem-plugin-viewer.c:2305
6770 +#: ../browser-plugin/totem-plugin-viewer.c:2302
6771 msgid "Verify your system installation. The Totem plugin will now exit."
6772 -msgstr "Proszę sprawdzić poprawność instalacji systemu. Działanie wtyczki programu Totem zostanie teraz zakończone."
6774 +"Proszę sprawdzić poprawność instalacji systemu. Działanie wtyczki programu "
6775 +"Totem zostanie teraz zakończone."
6777 #: ../src/plugins/pythonconsole/pythonconsole.plugin.in.h:1
6778 msgid "Interactive Python console."
6779 @@ -2884,40 +2999,43 @@ msgstr "Interaktywna konsola języka Python."
6780 msgid "Python Console"
6781 msgstr "Konsola języka Python"
6783 -#: ../src/plugins/pythonconsole/pythonconsole.py:85
6784 +#: ../src/plugins/pythonconsole/pythonconsole.py:86
6785 msgid "Python Console Menu"
6786 msgstr "Menu konsoli języka Python"
6788 -#: ../src/plugins/pythonconsole/pythonconsole.py:88
6789 +#: ../src/plugins/pythonconsole/pythonconsole.py:89
6790 msgid "_Python Console"
6791 msgstr "_Konsola języka Python"
6793 -#: ../src/plugins/pythonconsole/pythonconsole.py:89
6794 +#: ../src/plugins/pythonconsole/pythonconsole.py:90
6795 msgid "Show Totem's Python console"
6796 msgstr "Wyświetla konsolę języka Python programu Totem"
6798 -#: ../src/plugins/pythonconsole/pythonconsole.py:94
6799 +#: ../src/plugins/pythonconsole/pythonconsole.py:95
6800 msgid "Python Debugger"
6801 msgstr "Debuger języka Python"
6803 -#: ../src/plugins/pythonconsole/pythonconsole.py:95
6804 +#: ../src/plugins/pythonconsole/pythonconsole.py:96
6805 msgid "Enable remote Python debugging with rpdb2"
6806 -msgstr "Włączenie zdalnego debugowania języka Python za pomocą biblioteki rpdb2"
6808 +"Włączenie zdalnego debugowania języka Python za pomocą biblioteki rpdb2"
6810 -#: ../src/plugins/pythonconsole/pythonconsole.py:116
6811 +#: ../src/plugins/pythonconsole/pythonconsole.py:117
6814 -"You can access the Totem.Object through 'totem_object' :\\n"
6816 +msgid "You can access the Totem.Object through 'totem_object' :\\n%s"
6818 -"Dostęp do obiektu Totem.Object można uzyskać przez \"totem_object\":\\n"
6820 +"Dostęp do obiektu Totem.Object można uzyskać przez \"totem_object\":\\n%s"
6822 -#: ../src/plugins/pythonconsole/pythonconsole.py:120
6823 +#: ../src/plugins/pythonconsole/pythonconsole.py:121
6824 msgid "Totem Python Console"
6825 msgstr "Konsola języka Python dla programu Totem"
6827 -#: ../src/plugins/pythonconsole/pythonconsole.py:129
6828 -msgid "After you press OK, Totem will wait until you connect to it with winpdb or rpdb2. If you have not set a debugger password in DConf, it will use the default password ('totem')."
6829 -msgstr "Po naciśnięciu przycisku OK program Totem poczeka na połączenie z winpdb lub rpdb2. Jeśli hasło debugowania nie zostało ustawione w DConf, to zostanie użyte domyślne hasło (\"totem\")."
6831 +#: ../src/plugins/pythonconsole/pythonconsole.py:130
6833 +"After you press OK, Totem will wait until you connect to it with winpdb or "
6834 +"rpdb2. If you have not set a debugger password in DConf, it will use the "
6835 +"default password ('totem')."
6837 +"Po naciśnięciu przycisku OK program Totem poczeka na połączenie z winpdb lub "
6838 +"rpdb2. Jeśli hasło debugowania nie zostało ustawione w DConf, to zostanie "
6839 +"użyte domyślne hasło (\"totem\")."
6840 diff --git a/po/ug.po b/po/ug.po
6841 index aaafcb7..76ea2a1 100644
6845 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
6846 # This file is distributed under the same license as the PACKAGE package.
6847 # Abduxukur Abdurixit <abduxukur.abdurixit@t-systems.ch>, 2005
6849 +# Sahran <sahran.ug@gmail.com>, 2011
6850 # I just made up the Plural-Forms here so that it passed msgfmt.
6853 "Project-Id-Version: totem\n"
6854 -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=totem&component=general\n"
6855 -"POT-Creation-Date: 2011-03-08 12:34+0000\n"
6856 -"PO-Revision-Date: \n"
6857 +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
6858 +"product=totem&keywords=I18N+L10N&component=general\n"
6859 +"POT-Creation-Date: 2011-08-13 16:51+0000\n"
6860 +"PO-Revision-Date: 2011-08-08 17:37+0600\n"
6861 "Last-Translator: Sahran <sahran.ug@gmail.com>\n"
6862 "Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
6863 "MIME-Version: 1.0\n"
6864 @@ -47,11 +48,11 @@ msgstr "چىقىرىۋەت"
6866 #: ../data/playlist.ui.h:6
6867 msgid "Remove file from playlist"
6868 -msgstr "قويۇش تىزىملىكىدىن چىقىرىۋېتىش"
6869 +msgstr "قويۇش تىزىمىدىن چىقىرىۋەت"
6871 #: ../data/playlist.ui.h:7
6872 msgid "Save Playlist..."
6873 -msgstr "قويۇش تىزىملىكىنى ساقلاش..."
6874 +msgstr "قويۇش تىزىمىنى ساقلا…"
6876 #: ../data/playlist.ui.h:8 ../data/totem.ui.h:77
6877 msgid "Select a file to use for text subtitles"
6878 @@ -59,25 +60,25 @@ msgstr "ئېكران خېتىگە ئىشلىتىدىغان ھۆججەتنى تا
6880 #: ../data/playlist.ui.h:9 ../data/video-list.ui.h:4
6881 msgid "_Copy Location"
6882 -msgstr "ئادرېسنى كۆچۈرۈش(_C)"
6883 +msgstr "ئادرېسنى كۆچۈر(_C)"
6885 #: ../data/playlist.ui.h:10
6889 -#: ../data/playlist.ui.h:11 ../data/totem.ui.h:145
6890 +#: ../data/playlist.ui.h:11 ../data/totem.ui.h:141
6891 msgid "_Select Text Subtitles..."
6892 msgstr "ئېكران خەت تېكىستىنى تاللا(_S)…"
6895 #: ../data/properties.ui.h:1
6896 -#: ../src/properties/bacon-video-widget-properties.c:175
6897 +#: ../src/properties/bacon-video-widget-properties.c:140
6902 #: ../data/properties.ui.h:2
6903 -#: ../src/properties/bacon-video-widget-properties.c:173
6904 +#: ../src/properties/bacon-video-widget-properties.c:138
6908 @@ -90,7 +91,8 @@ msgid "0 kbps"
6912 -#: ../data/properties.ui.h:5 ../src/backend/video-utils.c:158
6913 +#: ../data/properties.ui.h:5
6914 +#: ../src/properties/bacon-video-widget-properties.c:176
6918 @@ -107,20 +109,20 @@ msgid "Artist:"
6919 msgstr "ئورۇنلىغۇچى:"
6921 #: ../data/properties.ui.h:9 ../data/totem.ui.h:23
6922 -#: ../src/totem-properties-view.c:89
6923 +#: ../src/totem-properties-view.c:254
6928 #: ../data/properties.ui.h:10
6929 -#: ../src/properties/bacon-video-widget-properties.c:171
6930 +#: ../src/properties/bacon-video-widget-properties.c:136
6931 msgctxt "Audio codec"
6935 #: ../data/properties.ui.h:11
6937 -msgstr "بىت تېزلىكى:"
6938 +msgstr "بىت نىسبىتى:"
6940 #: ../data/properties.ui.h:12
6942 @@ -135,26 +137,30 @@ msgid "Comment:"
6945 #: ../data/properties.ui.h:15
6949 +#: ../data/properties.ui.h:16
6953 -#: ../data/properties.ui.h:16
6954 +#: ../data/properties.ui.h:17
6958 -#: ../data/properties.ui.h:17
6959 +#: ../data/properties.ui.h:18
6961 msgstr "سۈرەت تېزلىكى"
6963 -#: ../data/properties.ui.h:18 ../data/totem.ui.h:41
6964 +#: ../data/properties.ui.h:19 ../data/totem.ui.h:41
6968 -#: ../data/properties.ui.h:19
6969 +#: ../data/properties.ui.h:20
6970 msgid "Sample rate:"
6971 msgstr "ئەۋرىشكە ئېلىش نىسبىتى:"
6973 -#: ../data/properties.ui.h:20
6974 +#: ../data/properties.ui.h:21
6978 @@ -162,27 +168,29 @@ msgstr "ماۋزۇ"
6982 -#: ../data/properties.ui.h:21
6983 -#: ../src/properties/bacon-video-widget-properties.c:145
6984 -#: ../src/properties/bacon-video-widget-properties.c:147
6985 -#: ../src/properties/bacon-video-widget-properties.c:149
6986 -#: ../src/properties/bacon-video-widget-properties.c:151
6988 +#: ../data/properties.ui.h:22
6989 +#: ../src/properties/bacon-video-widget-properties.c:107
6990 +#: ../src/properties/bacon-video-widget-properties.c:109
6991 +#: ../src/properties/bacon-video-widget-properties.c:111
6992 +#: ../src/properties/bacon-video-widget-properties.c:113
6993 +#: ../src/properties/bacon-video-widget-properties.c:119
6997 -#: ../data/properties.ui.h:22 ../data/totem.ui.h:104
6998 -#: ../src/totem-properties-view.c:85
6999 +#: ../data/properties.ui.h:23 ../data/totem.ui.h:104
7000 +#: ../src/totem-properties-view.c:256
7005 -#: ../data/properties.ui.h:23
7006 -#: ../src/properties/bacon-video-widget-properties.c:160
7007 +#: ../data/properties.ui.h:24
7008 +#: ../src/properties/bacon-video-widget-properties.c:124
7009 msgctxt "Video codec"
7013 -#: ../data/properties.ui.h:24
7014 +#: ../data/properties.ui.h:25
7018 @@ -191,13 +199,12 @@ msgid "Add the video to the playlist"
7019 msgstr "سىننى قويۇش تىزىملىكىگە قوشىدۇ"
7021 #: ../data/video-list.ui.h:3 ../src/totem-dnd-menu.c:97
7022 -#: ../src/plugins/jamendo/jamendo.ui.h:9
7023 msgid "_Add to Playlist"
7024 msgstr "قويۇش تىزىملىكىگە قوش"
7027 #: ../data/totem.desktop.in.in.in.h:1 ../data/totem.ui.h:53
7028 -#: ../src/totem-object.c:1667
7029 +#: ../src/totem-object.c:1663
7030 msgid "Movie Player"
7031 msgstr "كىنو قويغۇچ"
7033 @@ -290,7 +297,6 @@ msgid "About this application"
7034 msgstr "بۇ پروگرامما ھەققىدە"
7036 #: ../data/totem.ui.h:22
7038 msgctxt "Aspect ratio"
7041 @@ -325,7 +331,7 @@ msgstr "باغلىنىش تېزلىكى(_S)"
7043 #: ../data/totem.ui.h:31
7044 msgid "Decrease volume"
7045 -msgstr "ئاۋازنى كىچىكلىتىش"
7046 +msgstr "ئاۋازنى تۈۋەنلەت"
7048 #: ../data/totem.ui.h:32
7049 msgid "Disable _deinterlacing of interlaced videos"
7050 @@ -333,7 +339,7 @@ msgstr "قۇر ئاتلاپ كۆرسىتىدىغان سىندا قۇرمۇ-قۇ
7052 #: ../data/totem.ui.h:33
7053 msgid "Disable screensaver when playing "
7054 -msgstr "قويۇۋاتقاندا ئېكران قوغداشنى ئىناۋەتسىز قىلىش "
7055 +msgstr "قويۇۋاتقاندا ئېكران قوغداشنى چەكلە "
7057 #. Tab label in the Preferences dialogue
7058 #: ../data/totem.ui.h:35
7059 @@ -342,7 +348,7 @@ msgstr "كۆرسەتكۈچ"
7061 #: ../data/totem.ui.h:36
7062 msgid "Eject the current disc"
7063 -msgstr "نۆۋەتتىكى دىسكىنى چىقىرىش"
7064 +msgstr "نۆۋەتتىكى دىسكىنى قاڭقىت"
7066 #: ../data/totem.ui.h:37
7067 msgid "External Chapters"
7068 @@ -351,31 +357,31 @@ msgstr "باشقا بۆلەكلەر"
7069 #. Audio visualization dimensions
7070 #: ../data/totem.ui.h:39
7073 +msgstr "زىيادە چوڭ"
7075 #: ../data/totem.ui.h:40
7076 msgid "Fit Window to Movie"
7077 -msgstr "كۆزنەكنى كىنوغا توغرىلاش"
7078 +msgstr "كۆزنەكنى كىنوغا ماسلاشتۇر"
7080 #: ../data/totem.ui.h:42
7081 msgid "Go to the DVD menu"
7082 -msgstr "نىڭ تاللاش جەدۋىلىگە بېرىش DVD"
7083 +msgstr "DVD تىزىملىكىگە يۆتكەل"
7085 #: ../data/totem.ui.h:43
7086 msgid "Go to the angle menu"
7087 -msgstr "بۇلۇڭلۇق تاللاش جەدۋىلىگە بېرىش"
7088 +msgstr "بۇلۇڭلۇق تىزىملىككە يۆتكەل"
7090 #: ../data/totem.ui.h:44
7091 msgid "Go to the audio menu"
7092 -msgstr "ئاۋاز تاللاش جەدۋىلىگە بېرىش"
7093 +msgstr "ئۈن تىزىملىكىگە يۆتكەل"
7095 #: ../data/totem.ui.h:45
7096 msgid "Go to the chapter menu"
7097 -msgstr "بۆلۈم تاللاش جەدۋىلىگە بېرىش"
7098 +msgstr "بۆلۈم تىزىملىكىگە يۆتكەل"
7100 #: ../data/totem.ui.h:46
7101 msgid "Go to the title menu"
7102 -msgstr "ئىسىم تاللاش جەدۋىلىگە بېرىش"
7103 +msgstr "ماۋزۇ تىزىملىكىگە يۆتكەل"
7105 #: ../data/totem.ui.h:47
7106 msgid "Help contents"
7107 @@ -383,7 +389,7 @@ msgstr "ياردەم ھۆججىتى"
7109 #: ../data/totem.ui.h:48
7110 msgid "Increase volume"
7111 -msgstr "ئاۋازنى چوڭايتىش"
7112 +msgstr "ئاۋازنى يۇقىرىلات"
7114 #: ../data/totem.ui.h:49
7115 msgid "Intranet/LAN"
7116 @@ -396,7 +402,7 @@ msgstr "چوڭراق"
7118 #: ../data/totem.ui.h:52
7119 msgid "Load _chapter files when movie is loaded"
7120 -msgstr "كىنونى ئوقۇۋاتقاندا بۆلەك ھۆججەتلىرىنى ئوقۇ(_C)"
7121 +msgstr "كىنونى يۈكلەۋاتقاندا بۆلەك ھۆججەتلىرىنى يۈكلە(_C)"
7123 #: ../data/totem.ui.h:54
7125 @@ -413,7 +419,7 @@ msgstr "نورمال"
7127 #: ../data/totem.ui.h:58
7128 msgid "Open _Location..."
7129 -msgstr "ئادرېسنى ئېچىش...(_L)"
7130 +msgstr "ئورۇننى ئاچ(_L)…"
7132 #: ../data/totem.ui.h:59
7134 @@ -421,7 +427,7 @@ msgstr "ھۆججەت ئاچىدۇ"
7136 #: ../data/totem.ui.h:60
7137 msgid "Open a non-local file"
7138 -msgstr "يەرلىك بولمىغان ھۆججەتنى ئېچىش"
7139 +msgstr "يەرلىك بولمىغان ھۆججەتنى ئاچ"
7141 #: ../data/totem.ui.h:61
7142 msgid "Play / P_ause"
7143 @@ -437,7 +443,7 @@ msgstr "قويۇش"
7145 #: ../data/totem.ui.h:64
7147 -msgstr "قىستۇرمىلار..."
7148 +msgstr "قىستۇرمىلار…"
7150 #: ../data/totem.ui.h:65
7151 msgid "Prefere_nces"
7152 @@ -449,7 +455,7 @@ msgstr "ئالدىنقى بۆلەك ياكى كىنو"
7154 #: ../data/totem.ui.h:67
7155 msgid "Quit the program"
7156 -msgstr "پروگراممىدىن چېكىنىdu"
7157 +msgstr "پروگراممىدىن چېكىنىدۇ"
7159 #: ../data/totem.ui.h:68
7160 msgid "Reset to _Defaults"
7161 @@ -457,23 +463,23 @@ msgstr "كۆڭۈلدىكىگە قايتۇر(_D)"
7163 #: ../data/totem.ui.h:69
7165 -msgstr "1:1 گە ئۆزگەرتىش(_1)"
7166 +msgstr "_1:1 گە ئۆزگەرت"
7168 #: ../data/totem.ui.h:70
7170 -msgstr "2:1 گە ئۆزگەرتىش(_2)"
7171 +msgstr "_2:1 گە ئۆزگەرت"
7173 #: ../data/totem.ui.h:71
7174 msgid "Resize to double the original video size"
7175 -msgstr "ئەسلىدىكىسىنىڭ ھەسسىسىگە ئۆزگەرتىش"
7176 +msgstr "ئەسلىدىكىسىنىڭ ئىككى ھەسسىسگە ئۆزگەرت"
7178 #: ../data/totem.ui.h:72
7179 msgid "Resize to half the original video size"
7180 -msgstr "ئەسلىدىكىسىنىڭ يېرىمىغا ئۆزگەرتىش"
7181 +msgstr "ئەسلىدىكىسىنىڭ يېرىمىغا ئۆزگەرت"
7183 #: ../data/totem.ui.h:73
7184 msgid "Resize to the original video size"
7185 -msgstr "ئەسلىدىكىسىگە ئۆخشاش قىلىپ ئۆزگەرتىش"
7186 +msgstr "ئەسلىدىكىسىگە ئۆزگەرت"
7188 #: ../data/totem.ui.h:74
7190 @@ -481,7 +487,7 @@ msgstr "يان بالداق(_I)"
7192 #: ../data/totem.ui.h:75
7194 -msgstr "كىنونىڭ ئاستىدىكى خېتى(_U)"
7195 +msgstr "ئېكران خېتى(_U)"
7197 #: ../data/totem.ui.h:76
7198 msgid "Sat_uration:"
7199 @@ -489,11 +495,11 @@ msgstr ":تويۇنۇش دەرىجىسى(_U)"
7201 #: ../data/totem.ui.h:78
7202 msgid "Set the repeat mode"
7203 -msgstr "قايتىلاش شەكلىنى بەلگىلەش"
7204 +msgstr "قايتىلاش شەكلىنى تەڭشە"
7206 #: ../data/totem.ui.h:79
7207 msgid "Set the shuffle mode"
7208 -msgstr "خالىغان تەرتىپتە قويۇش شەكلىنى بەلگىلەش"
7209 +msgstr "خالىغان تەرتىپتە قويۇش شەكلىنى تەڭشە"
7211 #: ../data/totem.ui.h:80
7212 msgid "Sets 16:9 (widescreen) aspect ratio"
7213 @@ -501,7 +507,7 @@ msgstr "كەڭلىك-ئېگىزلىك نىسبىتىنى 16:9(كەڭ ئېكرا
7215 #: ../data/totem.ui.h:81
7216 msgid "Sets 2.11:1 (DVB) aspect ratio"
7217 -msgstr "كەڭلىك-ئېگىزلىك نىسبىتىنى (DVD) 2.11:1 گە تەڭشەش"
7218 +msgstr "كەڭلىك-ئېگىزلىك نىسبىتىنى (DVB) 2.11:1 گە تەڭشەش"
7220 #: ../data/totem.ui.h:82
7221 msgid "Sets 4:3 (TV) aspect ratio"
7222 @@ -517,31 +523,31 @@ msgstr "كەڭلىك-ئېگىزلىك نىسبىتىنى تۆت چاسىغا ت
7224 #: ../data/totem.ui.h:85
7225 msgid "Show _Controls"
7226 -msgstr "كونتروللىغۇچنى كۆرسىتىش(_C)"
7227 +msgstr "كونتىروللىغۇچنى كۆرسەت(_C)"
7229 #: ../data/totem.ui.h:86
7230 msgid "Show _visual effects when an audio file is played"
7231 -msgstr "ئاۋاز ھۆججىتىنى قويۇۋاتقاندا كۆرۈش ئۈنۈمىنى كۆرسىتىش(_V)"
7232 +msgstr "ئاۋاز ھۆججىتىنى قويۇۋاتقاندا كۆرۈنۈش ئۈنۈمىنى كۆرسەت(_V)"
7234 #: ../data/totem.ui.h:87
7235 msgid "Show controls"
7236 -msgstr "كونتروللىغۇچنى كۆرسىتىش"
7237 +msgstr "كونتىروللىغۇچنى كۆرسەت"
7239 #: ../data/totem.ui.h:88
7240 msgid "Show or hide the sidebar"
7241 -msgstr "يان بالداقنى كۆرسىتىش ياكى يوشۇرۇش"
7242 +msgstr "يان بالداقنى كۆرسەت ياكى يوشۇر"
7244 #: ../data/totem.ui.h:89
7245 msgid "Shuff_le Mode"
7246 -msgstr "قالايمىقان قويۇش شەكلى(_L)"
7247 +msgstr "تەرتىپسىز قويۇش شەكلى(_l)"
7249 #: ../data/totem.ui.h:90
7250 msgid "Skip _Backwards"
7251 -msgstr "تېز ئارقىغا ياندۇرۇش(_B)"
7252 +msgstr "تېز ئارقىغا ياندۇر(_B)"
7254 #: ../data/totem.ui.h:91
7255 msgid "Skip _Forward"
7256 -msgstr "تېز ئالدىغا ماڭدۇرۇش(_F)"
7257 +msgstr "تېز ئالدىغا ماڭدۇر(_F)"
7259 #: ../data/totem.ui.h:92
7260 msgid "Skip backwards"
7261 @@ -559,7 +565,8 @@ msgstr "تۆت چاسا"
7262 msgid "Start playing files from last position"
7263 msgstr "ھۆججەتلەرنى ئەڭ ئاخىرقى قېتىم كۆرگەندە كەلگەن ئورۇندىن باشاپ قويىدۇ."
7265 -#: ../data/totem.ui.h:96 ../src/backend/bacon-video-widget-gst-0.10.c:6008
7266 +#: ../data/totem.ui.h:96 ../src/totem-properties-view.c:214
7267 +#: ../src/backend/bacon-video-widget-gst-0.10.c:5551
7271 @@ -605,161 +612,145 @@ msgstr ":كۆرۈنۈش ئۈنۈمىنىڭ چوڭلۇقى(_S):"
7273 #: ../data/totem.ui.h:109
7274 msgid "Volume _Down"
7275 -msgstr "ئاۋازىنى پەسەيتىش(_D)"
7276 +msgstr "ئاۋازىنى تۆۋەنلەت(_D)"
7278 #: ../data/totem.ui.h:110
7280 -msgstr "ئاۋازىنى كۆتۈرۈش(_U)"
7281 +msgstr "ئاۋازىنى يۇقىرىلات(_U)"
7283 #: ../data/totem.ui.h:111
7287 #: ../data/totem.ui.h:112
7289 -msgstr "كىچىكلىتىش"
7291 -#: ../data/totem.ui.h:113
7293 -msgstr "چوڭ-كىچىكلىكىنى ئەسلىگە كەلتۈرۈش"
7295 -#: ../data/totem.ui.h:114
7299 -#: ../data/totem.ui.h:115
7303 -#: ../data/totem.ui.h:116
7305 -msgstr "چوڭ-كىچىكلىكىنى ئەسلىگە كەلتۈرۈش"
7307 -#: ../data/totem.ui.h:117
7308 +#: ../data/totem.ui.h:113
7310 msgstr "ھەققىدە(_A)"
7312 -#: ../data/totem.ui.h:118
7313 +#: ../data/totem.ui.h:114
7315 -msgstr "بۇلۇڭلۇق تاللاش تىزىملىكى(_A)"
7316 +msgstr "بۇلۇڭلۇق تىزىملىك(_A)"
7318 -#: ../data/totem.ui.h:119
7319 +#: ../data/totem.ui.h:115
7320 msgid "_Aspect Ratio"
7321 msgstr "ئېگىز-كەڭلىك نىسبىتى(_A)"
7323 -#: ../data/totem.ui.h:120
7324 +#: ../data/totem.ui.h:116
7325 msgid "_Audio output type:"
7326 msgstr "ئاۋاز چىقىش شەكلى(_A):"
7328 -#: ../data/totem.ui.h:121
7329 +#: ../data/totem.ui.h:117
7330 msgid "_Brightness:"
7331 msgstr ":يورۇقلۇقى(_B)"
7333 -#: ../data/totem.ui.h:122
7334 +#: ../data/totem.ui.h:118
7335 msgid "_Chapter Menu"
7336 msgstr "بۆلەك مۇندەرىجىسى(_C)"
7338 -#: ../data/totem.ui.h:123
7339 +#: ../data/totem.ui.h:119
7340 msgid "_Clear Playlist"
7341 msgstr "قويۇش تىزىملىكىنى تازىلا(_C)"
7343 -#: ../data/totem.ui.h:124
7344 +#: ../data/totem.ui.h:120
7346 msgstr "مەزمۇنلار(_C)"
7348 -#: ../data/totem.ui.h:125
7349 +#: ../data/totem.ui.h:121
7351 -msgstr "نىڭ مۇندەرىجىسى DVD(_D)"
7352 +msgstr "_DVD تىزىملىكى"
7354 -#: ../data/totem.ui.h:126
7355 +#: ../data/totem.ui.h:122
7359 -#: ../data/totem.ui.h:127
7360 +#: ../data/totem.ui.h:123
7362 -msgstr "دىسكىنى چىقىرىش(_E)"
7363 +msgstr "قاڭقىت(_E)"
7365 -#: ../data/totem.ui.h:128
7366 +#: ../data/totem.ui.h:124
7368 msgstr "كودلاش(_E):"
7370 -#: ../data/totem.ui.h:129
7371 +#: ../data/totem.ui.h:125
7375 -#: ../data/totem.ui.h:130
7376 +#: ../data/totem.ui.h:126
7378 msgstr "تولۇق ئېكران( _F)"
7380 -#: ../data/totem.ui.h:131
7381 +#: ../data/totem.ui.h:127
7385 -#: ../data/totem.ui.h:132
7386 +#: ../data/totem.ui.h:128
7390 -#: ../data/totem.ui.h:133
7391 +#: ../data/totem.ui.h:129
7393 msgstr "رەڭ تەڭشەش(_H):"
7395 -#: ../data/totem.ui.h:134
7396 +#: ../data/totem.ui.h:130
7400 -#: ../data/totem.ui.h:135
7401 +#: ../data/totem.ui.h:131
7402 msgid "_Load subtitle files when movie is loaded"
7403 -msgstr "كىنونى ئوقۇۋاتقاندا خەت ھۆججەتلىرىنى ئوقۇ(_C)"
7404 +msgstr "كىنونى يۈكلەۋاتقاندا ئېكران خېتىنى ئۆزلۈكىدىن يۈكلە(_C)"
7406 -#: ../data/totem.ui.h:136
7407 +#: ../data/totem.ui.h:132
7411 -#: ../data/totem.ui.h:137
7412 +#: ../data/totem.ui.h:133
7413 msgid "_Next Chapter/Movie"
7414 -msgstr "كېيىنكى بۆلەك / كىنو(_N)"
7415 +msgstr "كېيىنكى بۆلەك/كىنو(_N)"
7417 -#: ../data/totem.ui.h:138
7418 +#: ../data/totem.ui.h:134
7422 -#: ../data/totem.ui.h:139
7423 +#: ../data/totem.ui.h:135
7424 msgid "_Previous Chapter/Movie"
7425 -msgstr "ئالدىنقى بۆلەك / كىنو(_P)"
7426 +msgstr "ئالدىنقى بۆلەك/كىنو(_P)"
7428 -#: ../data/totem.ui.h:140
7429 +#: ../data/totem.ui.h:136
7433 -#: ../data/totem.ui.h:141
7434 +#: ../data/totem.ui.h:137
7438 -#: ../data/totem.ui.h:142
7439 +#: ../data/totem.ui.h:138
7440 msgid "_Repeat Mode"
7441 msgstr "قايتىلاش شەكلى(_R)"
7443 -#: ../data/totem.ui.h:143
7444 +#: ../data/totem.ui.h:139
7446 -msgstr "چوڭ-كىچىكلىكىنى 1:2 گە ئۆزگەرتىش(_R)"
7447 +msgstr "چوڭ-كىچىكلىكىنى 1:2 گە ئۆزگەرت(_R)"
7449 -#: ../data/totem.ui.h:144
7450 +#: ../data/totem.ui.h:140
7451 msgid "_Resize the window when a new video is loaded"
7452 msgstr "يېڭى كىنونى ئوقۇغاندا كۆزنەك چوڭلۇقىنى ئۆزگەرت(_R)"
7454 -#: ../data/totem.ui.h:146
7455 +#: ../data/totem.ui.h:142
7459 -#: ../data/totem.ui.h:147
7460 +#: ../data/totem.ui.h:143
7462 -msgstr "ئىسىملىك تاللاش تىزىملىكى(_T)"
7463 +msgstr "ماۋزۇ تىزىملىكى(_T)"
7465 -#: ../data/totem.ui.h:148
7466 +#: ../data/totem.ui.h:144
7467 msgid "_Type of visualization:"
7468 msgstr "كۆرۈنۈش ئۈنۈمى تىپى(_T):"
7470 -#: ../data/totem.ui.h:149
7471 +#: ../data/totem.ui.h:145
7473 msgstr "كۆرۈنۈش(_V)"
7475 @@ -781,19 +772,23 @@ msgstr "ئۈن قويغاندا ئېكران قوغدىغۇچقا يول قوي"
7477 "Allow the screensaver to activate when playing audio. Disable if you have "
7478 "monitor-powered speakers."
7479 -msgstr "ئۈن قويغاندا ئېكران قوغدىغۇچقا يول قوي. ئەگەر ئېكران توك تەمىنلەيدىغان ياڭراتقۇ ئىشلەتسىڭىز چەكلەڭ."
7481 +"ئۈن قويغاندا ئېكران قوغدىغۇچقا يول قوي. ئەگەر ئېكران توك تەمىنلەيدىغان "
7482 +"ياڭراتقۇ ئىشلەتسىڭىز چەكلەڭ."
7484 #: ../data/org.gnome.totem.gschema.xml.in.in.h:5
7486 "Amount of data to buffer for network streams before starting to display the "
7487 "stream (in seconds)."
7488 -msgstr "تور ئاقما ۋاسىتە باشلىنىشتىن ئىلگىرىكى غەملەيدىغان سانلىق مەلۇمات(سېكۇنت)"
7490 +"تور ئاقما ۋاسىتە باشلىنىشتىن ئىلگىرىكى غەملەيدىغان سانلىق مەلۇمات(سېكۇنت)"
7492 #: ../data/org.gnome.totem.gschema.xml.in.in.h:6
7494 "Approximate network connection speed, used to select quality on media over "
7496 -msgstr "تەخمىنەن تور سۈرئىتى، تور ئاقما ۋاسىتىنىڭ سۈپىتىنى تاللاشقا ئىشلىتىلىدۇ."
7498 +"تەخمىنەن تور سۈرئىتى، تور ئاقما ۋاسىتىنىڭ سۈپىتىنى تاللاشقا ئىشلىتىلىدۇ."
7500 #: ../data/org.gnome.totem.gschema.xml.in.in.h:7
7501 msgid "Default location for the \"Open...\" dialogs"
7502 @@ -803,7 +798,8 @@ msgstr "«ئاچ» كۆزنىكىدىكى كۆڭۈلدىكى ئادرېس"
7504 "Default location for the \"Open...\" dialogs. Default is the current "
7506 -msgstr "«ئاچ» كۆزنىكىدىكى كۆڭۈلدىكى ئادرېس. ھازىرقى مۇندەرىجە كۆڭۈلدىكى ئادرېستۇر."
7508 +"«ئاچ» كۆزنىكىدىكى كۆڭۈلدىكى ئادرېس. ھازىرقى مۇندەرىجە كۆڭۈلدىكى ئادرېستۇر."
7510 #: ../data/org.gnome.totem.gschema.xml.in.in.h:9
7511 msgid "Default location for the \"Take Screenshot\" dialogs"
7512 @@ -813,7 +809,9 @@ msgstr "«ئېكران كۆرۈنۈشىنى رەسىمگە ئال» كۆزنىك
7514 "Default location for the \"Take Screenshot\" dialogs. Default is the "
7515 "Pictures directory."
7516 -msgstr "«ئېكران كۆرۈنۈشىنى رەسىمگە ئال» كۆزنىكىدىكى كۆڭۈلدىكى ئادرې. ھازىرقى مۇندەرىجە كۆڭۈلدىكى ئادرېستۇر."
7518 +"«ئېكران كۆرۈنۈشىنى رەسىمگە ئال» كۆزنىكىدىكى كۆڭۈلدىكى ئادرې. ھازىرقى "
7519 +"مۇندەرىجە كۆڭۈلدىكى ئادرېستۇر."
7521 #: ../data/org.gnome.totem.gschema.xml.in.in.h:11
7522 msgid "Encoding character set for subtitle."
7523 @@ -919,7 +917,9 @@ msgstr "قايتا قويۇش ماتورىنىڭ سازلاش ئىقتىدارى
7525 "Whether to remember the position of played audio/video files when pausing or "
7527 -msgstr "ئۈن/سىن ھۆججىتىنى ۋاقىتلىق توختاتقان ياكى ياپقاندا قويۇش ئورنىنى ئەستە تۇتامدۇ يوق"
7529 +"ئۈن/سىن ھۆججىتىنى ۋاقىتلىق توختاتقان ياكى ياپقاندا قويۇش ئورنىنى ئەستە "
7532 #: ../data/uri.ui.h:1
7533 msgid "Enter the _address of the file you would like to open:"
7534 @@ -960,41 +960,44 @@ msgstr "URI پۈتۈكنى 'Type=Link' ئۈستەلئۈستى تۈرىگە يو
7535 msgid "Not a launchable item"
7536 msgstr "ئىجراچان تۈر ئەمەس"
7538 -#: ../src/eggfileformatchooser.c:235
7539 +#: ../src/eggfileformatchooser.c:240
7541 msgid "File _Format: %s"
7542 msgstr "ھۆججەت فورماتى(_F): %s"
7544 -#: ../src/eggfileformatchooser.c:374
7545 +#: ../src/eggfileformatchooser.c:379
7547 msgstr "ھەممە ھۆججەتلەر"
7549 -#: ../src/eggfileformatchooser.c:375
7550 +#: ../src/eggfileformatchooser.c:380
7551 msgid "All Supported Files"
7552 msgstr "قوللايدىغان ھەممە ھۆججەتلەر"
7554 -#: ../src/eggfileformatchooser.c:384
7555 +#: ../src/eggfileformatchooser.c:389
7556 msgid "By Extension"
7557 msgstr "كېڭەيتىلمە ئاتى بويىچە"
7559 -#: ../src/eggfileformatchooser.c:399
7560 +#: ../src/eggfileformatchooser.c:404
7562 msgstr "ھۆججەت فورماتى"
7564 -#: ../src/eggfileformatchooser.c:417
7565 +#: ../src/eggfileformatchooser.c:422
7566 msgid "Extension(s)"
7567 msgstr "كېڭەيتىلمە(لەر)"
7569 #. Translators: the parameter is a filename
7570 -#: ../src/eggfileformatchooser.c:652
7571 +#: ../src/eggfileformatchooser.c:657
7574 "The program was not able to find out the file format you want to use for `%"
7575 "s'. Please make sure to use a known extension for that file or manually "
7576 "choose a file format from the list below."
7577 -msgstr "پروگرامما سىز قوللانماقچى بولغان `%s' تاللانمىنىڭ ھۆججەت فورماتىنى تاپالمىدى. ھۆججەتكە مەلۇملۇق فورمات ئىشلىتىلگەننى جەزملەڭ ياكى تۆۋەندىكى تىزىملىكتىن ھۆججەت فورماتىدىن بىرنى قولدا تاللاڭ"
7579 +"پروگرامما سىز قوللانماقچى بولغان `%s' تاللانمىنىڭ ھۆججەت فورماتىنى "
7580 +"تاپالمىدى. ھۆججەتكە مەلۇملۇق فورمات ئىشلىتىلگەننى جەزملەڭ ياكى تۆۋەندىكى "
7581 +"تىزىملىكتىن ھۆججەت فورماتىدىن بىرنى قولدا تاللاڭ"
7583 -#: ../src/eggfileformatchooser.c:659
7584 +#: ../src/eggfileformatchooser.c:664
7585 msgid "File format not recognized"
7586 msgstr "ھۆججەت فورماتىنى تونۇيالمىدى"
7588 @@ -1008,7 +1011,7 @@ msgstr "سەپلىمە ساقلانغان ھۆججەتنى بەلگىلە"
7590 #: ../src/eggsmclient.c:229
7595 #: ../src/eggsmclient.c:232
7596 msgid "Specify session management ID"
7597 @@ -1020,64 +1023,73 @@ msgstr "ID"
7599 #: ../src/eggsmclient.c:253
7600 msgid "Session management options:"
7601 -msgstr "ئەڭگىمە باشقۇرغۇ تاللانمىلىرى:"
7602 +msgstr "ئەڭگىمە باشقۇرغۇچ تاللانمىلىرى:"
7604 #: ../src/eggsmclient.c:254
7605 msgid "Show session management options"
7606 -msgstr "ئەڭگىمە باشقۇرغۇ تاللانمىلىرى كۆرسەت"
7607 +msgstr "ئەڭگىمە باشقۇرغۇچ تاللانمىلىرىنى كۆرسەت"
7610 -#: ../src/properties/bacon-video-widget-properties.c:158
7611 +#: ../src/properties/bacon-video-widget-properties.c:122
7612 msgctxt "Dimensions"
7616 -#: ../src/properties/bacon-video-widget-properties.c:163
7617 -#: ../src/properties/bacon-video-widget-properties.c:240
7618 +#: ../src/properties/bacon-video-widget-properties.c:127
7619 msgctxt "Video bit rate"
7623 -#: ../src/properties/bacon-video-widget-properties.c:166
7624 -#: ../src/properties/bacon-video-widget-properties.c:250
7625 +#: ../src/properties/bacon-video-widget-properties.c:130
7626 +#: ../src/properties/bacon-video-widget-properties.c:240
7627 msgctxt "Frame rate"
7631 -#: ../src/properties/bacon-video-widget-properties.c:169
7632 -#: ../src/properties/bacon-video-widget-properties.c:273
7633 +#: ../src/properties/bacon-video-widget-properties.c:134
7634 msgctxt "Audio bit rate"
7638 -#: ../src/properties/bacon-video-widget-properties.c:237
7639 +#: ../src/properties/bacon-video-widget-properties.c:156
7644 +msgid_plural "%d hours"
7645 +msgstr[0] "%d سائەت"
7647 -#: ../src/properties/bacon-video-widget-properties.c:240
7648 -#: ../src/properties/bacon-video-widget-properties.c:273
7649 +#: ../src/properties/bacon-video-widget-properties.c:158
7654 +msgid_plural "%d minutes"
7655 +msgstr[0] "%d مىنۇت"
7657 -#: ../src/properties/bacon-video-widget-properties.c:247
7658 +#: ../src/properties/bacon-video-widget-properties.c:161
7660 -msgid "%d frame per second"
7661 -msgid_plural "%d frames per second"
7662 -msgstr[0] "%d كاندۇك(بىر سېكۇنتتىكى)"
7664 +msgid_plural "%d seconds"
7665 +msgstr[0] "%d سېكۇنت"
7667 -#: ../src/properties/bacon-video-widget-properties.c:276
7668 +#. 5 hours 2 minutes 12 seconds
7669 +#: ../src/properties/bacon-video-widget-properties.c:167
7677 -#: ../src/properties/bacon-video-widget-properties.c:276
7678 -msgctxt "Sample rate"
7681 +#. 2 minutes 12 seconds
7682 +#: ../src/properties/bacon-video-widget-properties.c:170
7688 -#: ../src/totem-audio-preview.c:82
7689 +#: ../src/properties/bacon-video-widget-properties.c:237
7691 +msgid "%d frame per second"
7692 +msgid_plural "%d frames per second"
7693 +msgstr[0] "%d كاندۇك(بىر سېكۇنتتىكى)"
7695 +#: ../src/totem-audio-preview.c:166
7696 msgid "Audio Preview"
7697 msgstr "ئۈننى ئالدىن كۆرۈش"
7699 @@ -1093,61 +1105,74 @@ msgstr "ھازىر قوي(_P)"
7703 -#: ../src/totem-fullscreen.c:619
7704 +#: ../src/totem-fullscreen.c:621
7708 -#: ../src/totem-interface.c:180 ../src/totem-interface.c:223
7709 +#: ../src/totem-interface.c:181 ../src/totem-interface.c:224
7711 msgid "Couldn't load the '%s' interface. %s"
7712 msgstr "«%s» دېگەن ئارايۈزنى ئوقۇغىلى بولمىدى. %s"
7714 -#: ../src/totem-interface.c:180
7715 +#: ../src/totem-interface.c:181
7716 msgid "The file does not exist."
7717 msgstr "ھۆججەت مەۋجۇت ئەمەس."
7719 -#: ../src/totem-interface.c:182 ../src/totem-interface.c:184
7720 -#: ../src/totem-interface.c:225 ../src/totem-interface.c:227
7721 +#: ../src/totem-interface.c:183 ../src/totem-interface.c:185
7722 +#: ../src/totem-interface.c:226 ../src/totem-interface.c:228
7723 msgid "Make sure that Totem is properly installed."
7724 msgstr "Totem نىڭ توغرا ئورنىتىلغانلىقىنى جەزملەڭ."
7726 -#: ../src/totem-interface.c:346
7727 +#: ../src/totem-interface.c:347
7729 "Totem is free software; you can redistribute it and/or modify it under the "
7730 "terms of the GNU General Public License as published by the Free Software "
7731 "Foundation; either version 2 of the License, or (at your option) any later "
7733 -msgstr "Totem ئەركىن يۇمشاق دېتال؛ سىز ئەركىن يۇمشاق دېتال فوندى تارقاتقان GNU ئادەتتىكى ئاممىۋى ئىجازەتنامىسىنىڭ ماددىلىرىغا ئاساسەن ئۇنى ئەركىن تارقىتىپ ياكى ئۆزگەرتسىڭىز بولىدۇ؛ ئىجازەتنامىنىڭ ئىككىنچى نەشرى ياكى ئۇنىڭدىن كېيىنكى نەشرىنى ئىشلىتىڭ."
7735 +"Totem ئەركىن يۇمشاق دېتال؛ سىز ئەركىن يۇمشاق دېتال فوندى تارقاتقان GNU "
7736 +"ئادەتتىكى ئاممىۋى ئىجازەتنامىسىنىڭ ماددىلىرىغا ئاساسەن ئۇنى ئەركىن تارقىتىپ "
7737 +"ياكى ئۆزگەرتسىڭىز بولىدۇ؛ ئىجازەتنامىنىڭ ئىككىنچى نەشرى ياكى ئۇنىڭدىن "
7738 +"كېيىنكى نەشرىنى ئىشلىتىڭ."
7740 -#: ../src/totem-interface.c:350
7741 +#: ../src/totem-interface.c:351
7743 "Totem is distributed in the hope that it will be useful, but WITHOUT ANY "
7744 "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
7745 "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
7747 -msgstr "Totem نى تارقىتىشنىڭ مەقسىتى ئۇنىڭ سىزگە كېرەكلىك بولۇشى ئۈچۈن، ئەمما ئۇنىڭ ھېچقانداق كاپالىتى يوق؛ ئۇنى ئىشلىتىپ كېلىپ چىققان ھەر قانداق بىۋاسىتە ياكى ۋاسىتىلىك ئاقىۋەتكە ھېچقانداق مەسئۇلىيەتنى ئۈستىگە ئالمايمىز. GNU ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمىدىكى تەپسىلاتنى كۆرۈڭ."
7749 +"Totem نى تارقىتىشنىڭ مەقسىتى ئۇنىڭ سىزگە كېرەكلىك بولۇشى ئۈچۈن، ئەمما ئۇنىڭ "
7750 +"ھېچقانداق كاپالىتى يوق؛ ئۇنى ئىشلىتىپ كېلىپ چىققان ھەر قانداق بىۋاسىتە ياكى "
7751 +"ۋاسىتىلىك ئاقىۋەتكە ھېچقانداق مەسئۇلىيەتنى ئۈستىگە ئالمايمىز. GNU ئادەتتىكى "
7752 +"ئاممىۋى ئىجازەت كېلىشىمىدىكى تەپسىلاتنى كۆرۈڭ."
7754 -#: ../src/totem-interface.c:354
7755 +#: ../src/totem-interface.c:355
7757 "You should have received a copy of the GNU General Public License along with "
7758 "Totem; if not, write to the Free Software Foundation, Inc., 59 Temple Place, "
7759 "Suite 330, Boston, MA 02111-1307 USA"
7760 -msgstr "سىز Totem بىلەن بىللە GNU ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمىنىڭ كۆچۈرۈلمىسىدىن بىر نۇسخا تاپشۇرۇۋالىسىز؛ ئەگەر تاپشۇرۇۋالمىغان بولسىڭىز ئەركىن يۇمشاق دېتال ۋەخپىسىگە خەت يېزىڭ. مەنزىل: the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02110-1301 USA"
7762 +"سىز Totem بىلەن بىللە GNU ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمىنىڭ "
7763 +"كۆچۈرۈلمىسىدىن بىر نۇسخا تاپشۇرۇۋالىسىز؛ ئەگەر تاپشۇرۇۋالمىغان بولسىڭىز "
7764 +"ئەركىن يۇمشاق دېتال ۋەخپىسىگە خەت يېزىڭ. مەنزىل: the Free Software "
7765 +"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02110-1301 USA"
7767 -#: ../src/totem-interface.c:357
7768 +#: ../src/totem-interface.c:358
7770 "Totem contains an exception to allow the use of proprietary GStreamer "
7772 -msgstr "GStreamer ئىشلىتىشكە يول قويىدىغان مەخسۇس قىستۇرمىنىڭ مۇستەسناسىنى Totem ئۆز ئىچىگە ئالىدۇ"
7774 +"GStreamer ئىشلىتىشكە يول قويىدىغان مەخسۇس قىستۇرمىنىڭ مۇستەسناسىنى Totem ئۆز "
7777 #. Translators: an entry in the "Languages" menu, used to choose the audio language of a DVD
7778 -#: ../src/totem-menu.c:192
7779 +#: ../src/totem-menu.c:190
7783 #. Translators: an entry in the "Languages" menu, used to choose the audio language of a DVD
7784 -#: ../src/totem-menu.c:197
7786 +#: ../src/totem-menu.c:195
7790 @@ -1155,191 +1180,198 @@ msgstr "ئاپتوماتىك"
7792 #. * This is not a JPEG image, but a disc image, for example,
7794 -#: ../src/totem-menu.c:739
7795 +#: ../src/totem-menu.c:765
7797 msgid "Play Image '%s'"
7798 msgstr "سۈرەت «%s» نى قويىدۇ"
7800 -#: ../src/totem-menu.c:742 ../src/totem-menu.c:825
7801 +#: ../src/totem-menu.c:768 ../src/totem-menu.c:851
7804 -msgstr "ئۈسكىنە %d"
7805 +msgstr "ئۈسكۈنە %d"
7807 -#: ../src/totem-menu.c:822
7808 +#: ../src/totem-menu.c:848
7810 msgid "Play Disc '%s'"
7811 msgstr "دىسكا «%s» نى قويۇش"
7813 #. This lists the back-end type and version, such as
7814 #. * Movie Player using GStreamer 0.10.1
7815 -#: ../src/totem-menu.c:1173
7816 +#: ../src/totem-menu.c:1189
7818 msgid "Movie Player using %s"
7819 msgstr "%s نى ئىشلىتىدىغان كىنو قويغۇچ"
7821 -#: ../src/totem-menu.c:1177
7822 +#: ../src/totem-menu.c:1193
7823 msgid "Copyright © 2002-2009 Bastien Nocera"
7824 msgstr "نەشر ھوقۇقى © 2002-2009 Bastien Nocera"
7826 -#: ../src/totem-menu.c:1182 ../browser-plugin/totem-plugin-viewer.c:1163
7827 +#: ../src/totem-menu.c:1198
7828 msgid "translator-credits"
7829 -msgstr "Gheyret Kenji <gheyret@gmail.com>\n"
7830 -"Sahran<sahran@live.com>\n"
7831 -"Muhemmed Erdem <misran_erdem@hotmail.com>"
7833 +"Gheyret Kenji <gheyret@gmail.com>\n"
7834 +"Sahran<sahran@live.com>"
7836 -#: ../src/totem-menu.c:1186
7837 +#: ../src/totem-menu.c:1202
7838 msgid "Totem Website"
7839 msgstr "Totem تورتۇراسى"
7841 -#: ../src/totem-menu.c:1220
7842 +#: ../src/totem-menu.c:1236
7843 msgid "Configure Plugins"
7844 msgstr "قسىتۇرمىلارنى سەپلەش"
7846 #. Translators: %s is the totem version number
7847 -#: ../src/totem-object.c:473
7848 +#: ../src/totem-object.c:471
7853 -#: ../src/totem-object.c:1047 ../browser-plugin/totem-plugin-viewer.c:368
7854 +#: ../src/totem-object.c:1043 ../browser-plugin/totem-plugin-viewer.c:366
7858 -#: ../src/totem-object.c:1049 ../src/totem-options.c:52
7859 +#: ../src/totem-object.c:1045 ../src/totem-options.c:52
7861 msgstr "ۋاقىتلىق توختا"
7863 -#: ../src/totem-object.c:1054 ../browser-plugin/totem-plugin-viewer.c:364
7864 +#: ../src/totem-object.c:1050 ../browser-plugin/totem-plugin-viewer.c:362
7866 msgstr "ۋاقىتلىق توختىدى"
7868 -#. Translators: this refers to a media file
7869 -#: ../src/totem-object.c:1056 ../src/totem-object.c:1066
7870 +#: ../src/totem-object.c:1052 ../src/totem-object.c:1062
7871 #: ../src/totem-options.c:51
7872 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:84
7873 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:96
7877 -#: ../src/totem-object.c:1061 ../src/totem-object.c:1659
7878 -#: ../src/totem-statusbar.c:115 ../browser-plugin/totem-plugin-viewer.c:352
7879 +#: ../src/totem-object.c:1057 ../src/totem-object.c:1655
7880 +#: ../src/totem-statusbar.c:115 ../browser-plugin/totem-plugin-viewer.c:350
7884 -#: ../src/totem-object.c:1142 ../src/totem-object.c:1169
7885 -#: ../src/totem-object.c:1797 ../src/totem-object.c:1960
7886 +#: ../src/totem-object.c:1138 ../src/totem-object.c:1165
7887 +#: ../src/totem-object.c:1795 ../src/totem-object.c:1959
7889 msgid "Totem could not play '%s'."
7890 msgstr "Totem «%s» نى قويالمىدى"
7892 -#: ../src/totem-object.c:1246
7893 +#: ../src/totem-object.c:1242
7896 "Totem could not play this media (%s) although a plugin is present to handle "
7898 -msgstr "گەرچە ئۇنى بىر تەرەپ قىلىدىغان قىستۇرما بولسىمۇ، بۇ ۋاسىتە (%s)نى Totem قويالمىدى."
7900 +"گەرچە ئۇنى بىر تەرەپ قىلىدىغان قىستۇرما بولسىمۇ، بۇ ۋاسىتە (%s)نى Totem "
7903 -#: ../src/totem-object.c:1247
7904 +#: ../src/totem-object.c:1243
7906 "You might want to check that a disc is present in the drive and that it is "
7907 "correctly configured."
7908 -msgstr "قوزغاتقۇچنىڭ ئىچىدە دىسكا بار-يوقلىغىنى ۋە توغرا تەڭشەلگەنلىكىنى تەكشۈرۈپ كۆرۈڭ"
7910 +"قوزغاتقۇچنىڭ ئىچىدە دىسكا بار-يوقلىغىنى ۋە توغرا تەڭشەلگەنلىكىنى تەكشۈرۈپ "
7913 -#: ../src/totem-object.c:1255
7914 +#: ../src/totem-object.c:1251
7915 msgid "More information about media plugins"
7916 msgstr "ۋەسىتە قسىتۇرمىلىرى ھەققىدە تېخىمۇ كۆپ ئۇچۇر"
7918 -#: ../src/totem-object.c:1256
7919 +#: ../src/totem-object.c:1252
7921 "Please install the necessary plugins and restart Totem to be able to play "
7923 msgstr "Totem دا بۇ ۋاسىتىنى قويۇش ئۈچۈن زۆرۈر بولغان قىستۇرمىلارنى ئورنىتىڭ."
7925 -#: ../src/totem-object.c:1258
7926 +#: ../src/totem-object.c:1254
7929 "Totem cannot play this type of media (%s) because it does not have the "
7930 "appropriate plugins to be able to read from the disc."
7931 -msgstr "Totem دا دىسكىدىكى بۇ خىل ۋاسىتە(%s)نى ئوقۇيالايدىغان مۇۋاپىق قسىتۇرما بولمىغاچقا، بۇ خىلدىكى ۋاسىتىنى قويغىلى بولمايدۇ."
7933 +"Totem دا دىسكىدىكى بۇ خىل ۋاسىتە(%s)نى ئوقۇيالايدىغان مۇۋاپىق قسىتۇرما "
7934 +"بولمىغاچقا، بۇ خىلدىكى ۋاسىتىنى قويغىلى بولمايدۇ."
7936 -#: ../src/totem-object.c:1260
7937 +#: ../src/totem-object.c:1256
7940 "Totem cannot play this type of media (%s) because you do not have the "
7941 "appropriate plugins to handle it."
7942 -msgstr "Totem دا بۇ خىل ۋاسىتە(%s)نى بىر تەرەپ قىلىدىغان مۇۋاپىق قسىتۇرما بولمىغاچقا، بۇ خىلدىكى ۋاسىتىنى قويغىلى بولمايدۇ."
7944 +"Totem دا بۇ خىل ۋاسىتە(%s)نى بىر تەرەپ قىلىدىغان مۇۋاپىق قسىتۇرما "
7945 +"بولمىغاچقا، بۇ خىلدىكى ۋاسىتىنى قويغىلى بولمايدۇ."
7947 -#: ../src/totem-object.c:1263
7948 +#: ../src/totem-object.c:1259
7950 msgid "Totem cannot play this type of media (%s) because it is not supported."
7951 -msgstr "Totem دا بۇ خىل ۋاسىتە(%s)نى تېخى بىر تەرەپ قىلغىلى بولمىغاچقا، بۇ خىلدىكى ۋاسىتىنى قويغىلى بولمايدۇ."
7953 +"Totem دا بۇ خىل ۋاسىتە(%s)نى تېخى بىر تەرەپ قىلغىلى بولمىغاچقا، بۇ خىلدىكى "
7954 +"ۋاسىتىنى قويغىلى بولمايدۇ."
7956 -#: ../src/totem-object.c:1264
7957 +#: ../src/totem-object.c:1260
7958 msgid "Please insert another disc to play back."
7959 msgstr "قويۇش ئۈچۈن باغشقا دىسكا سېلىڭ."
7961 -#: ../src/totem-object.c:1300
7962 +#: ../src/totem-object.c:1296
7963 msgid "Totem was not able to play this disc."
7964 msgstr "Totem بۇ دىسكىنى قويالمىدى."
7966 -#: ../src/totem-object.c:1301 ../src/totem-object.c:4278
7967 +#: ../src/totem-object.c:1297 ../src/totem-object.c:4225
7971 -#: ../src/totem-object.c:1315
7972 +#: ../src/totem-object.c:1311
7973 msgid "Totem does not support playback of Audio CDs"
7974 msgstr "Totem تېخى ئۈن CDs نى قويالمايدۇ"
7976 -#: ../src/totem-object.c:1316
7977 +#: ../src/totem-object.c:1312
7978 msgid "Please consider using a music player or a CD extractor to play this CD"
7979 msgstr "مۇزىكا قويغۇ ياكى باشقا CD ئايرىغۇ ئارقىلىق مەزكۇر CD نى قويۇڭ"
7981 -#: ../src/totem-object.c:1803
7982 +#: ../src/totem-object.c:1801
7983 msgid "No error message"
7984 msgstr "خاتالىق ئۇچۇرى يوق"
7986 -#: ../src/totem-object.c:2195
7987 +#: ../src/totem-object.c:2150
7988 msgid "Totem could not display the help contents."
7989 msgstr "Totem ياردەم مۇندەرىجىسىنى كۆرسىتەلمەيدۇ"
7991 -#: ../src/totem-object.c:2533 ../src/totem-object.c:2535
7992 -#: ../browser-plugin/totem-plugin-viewer.c:1466
7993 +#: ../src/totem-object.c:2489 ../src/totem-object.c:2491
7994 +#: ../browser-plugin/totem-plugin-viewer.c:1410
7995 msgid "An error occurred"
7996 msgstr "خاتالىق كۆرۈلدى"
7998 -#: ../src/totem-object.c:4112 ../src/totem-object.c:4114
7999 +#: ../src/totem-object.c:4060 ../src/totem-object.c:4062
8000 msgid "Previous Chapter/Movie"
8001 -msgstr "ئالدىنقى بۆلەك / كىنو"
8002 +msgstr "ئالدىنقى بۆلەك/كىنو"
8004 -#: ../src/totem-object.c:4121 ../src/totem-object.c:4123
8005 +#: ../src/totem-object.c:4069 ../src/totem-object.c:4071
8006 msgid "Play / Pause"
8007 -msgstr "قويۇش/توختىتىش"
8008 +msgstr "قوي/ۋاقىتلىق توختا"
8010 -#: ../src/totem-object.c:4131 ../src/totem-object.c:4133
8011 +#: ../src/totem-object.c:4079 ../src/totem-object.c:4081
8012 msgid "Next Chapter/Movie"
8013 -msgstr "كېيىنكى بۆلەك / كىنو"
8014 +msgstr "كېيىنكى بۆلەك/كىنو"
8016 #. Translators: this is the tooltip text for the fullscreen button in the controls box in Totem's main window.
8017 #. Translators: this is the accessibility text for the fullscreen button in the controls box in Totem's main window.
8018 -#: ../src/totem-object.c:4145 ../src/totem-object.c:4147
8019 +#: ../src/totem-object.c:4093 ../src/totem-object.c:4095
8021 msgstr "پۈتۈن ئېكران"
8023 -#: ../src/totem-object.c:4278
8024 +#: ../src/totem-object.c:4225
8025 msgid "Totem could not startup."
8026 -msgstr "قوزغالمىدى Totem"
8027 +msgstr "Totem قوزغالمىدى."
8029 -#: ../src/totem-open-location.c:179
8030 +#: ../src/totem-open-location.c:182
8031 msgid "Open Location..."
8032 msgstr "ئېچىش ئورنى…"
8034 #: ../src/totem-options.c:49
8035 msgid "Enable debug"
8036 -msgstr "سازلاشنى ئىناۋەتلىك قىلىش"
8037 +msgstr "سازلاشنى قوزغات"
8039 #: ../src/totem-options.c:50
8041 -msgstr "قويۇش/توختىتىش"
8042 +msgstr "قوي/ۋاقىتلىق توختا"
8044 #: ../src/totem-options.c:53
8046 @@ -1351,40 +1383,37 @@ msgstr "ئالدىنقى"
8048 #: ../src/totem-options.c:55
8049 msgid "Seek Forwards"
8050 -msgstr "ئالدىغا قاراپ ئىزدەش"
8051 +msgstr "تېز ئالدىغا"
8053 #: ../src/totem-options.c:56
8054 msgid "Seek Backwards"
8055 -msgstr "كەينىگە قاراپ ئىزدەش"
8056 +msgstr "تېز كەينىگە"
8058 #: ../src/totem-options.c:57
8060 -msgstr "ئاۋازنى يۇقىرىلىتىش"
8061 +msgstr "ئاۋازنى يۇقىرىلات"
8063 #: ../src/totem-options.c:58
8065 -msgstr "ئاۋازنى تۆۋەنلىتىش"
8066 +msgstr "ئاۋازنى تۆۋەنلەت"
8068 #: ../src/totem-options.c:59
8073 #: ../src/totem-options.c:60
8074 msgid "Toggle Fullscreen"
8075 -msgstr "پۈتۈن ئېكران شەكلىگە ئالمىشىش"
8076 +msgstr "پۈتۈن ئېكرانغا ئالماش"
8078 #: ../src/totem-options.c:61
8079 msgid "Show/Hide Controls"
8080 -msgstr "كونتروللىغۇچنى كۆرسىتىش/يوشۇرۇش"
8081 +msgstr "كونتروللىغۇچنى كۆرسەت/يوشۇر"
8083 #: ../src/totem-options.c:62
8087 -#. Translators: this refers to a media file
8088 #: ../src/totem-options.c:63
8089 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:87
8090 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:99
8094 @@ -1410,51 +1439,52 @@ msgid "Can't enqueue and replace at the same time"
8095 msgstr "ئوخشاش بىر ۋاقىتتا قاتارغا كىرىپ ھەم ئالماشتۇرالمايدۇ"
8097 #. By extension entry
8098 -#: ../src/totem-playlist.c:157
8099 +#: ../src/totem-playlist.c:161
8100 msgid "MP3 ShoutCast playlist"
8101 msgstr "MP3 ShoutCast قويۇش تىزىملىكى"
8103 -#: ../src/totem-playlist.c:158
8104 +#: ../src/totem-playlist.c:162
8105 msgid "MP3 audio (streamed)"
8106 msgstr "MP3 ئۈن (ئېقىم)"
8108 -#: ../src/totem-playlist.c:159
8109 +#: ../src/totem-playlist.c:163
8110 msgid "MP3 audio (streamed, DOS format)"
8111 msgstr "MP3 ئۈن (ئېقىم، DOS فورماتى)"
8113 -#: ../src/totem-playlist.c:160
8114 +#: ../src/totem-playlist.c:164
8115 msgid "XML Shareable Playlist"
8116 msgstr "XML ھەمبەھىرلىگىلى بولىدىغان قويۇش تىزىملىكى"
8118 #. This is "Title 3", where title is a DVD title
8119 #. * Note: NOT a DVD chapter
8120 -#: ../src/totem-playlist.c:359
8121 +#: ../src/totem-playlist.c:347
8126 -#: ../src/totem-playlist.c:458
8127 +#: ../src/totem-playlist.c:446
8128 msgid "Could not save the playlist"
8129 -msgstr "قويۇش تىزىملىكىنى ساقلىغىلى بولمىدى"
8130 +msgstr "قويۇش تىزىمىنى ساقلىغىلى بولمىدى"
8132 -#: ../src/totem-playlist.c:1033
8133 +#: ../src/totem-playlist.c:1021
8134 msgid "Save Playlist"
8135 -msgstr "قويۇش تىزىملىكى ساقلاش"
8136 +msgstr "قويۇش تىزىمى ساقلاش"
8138 #. translators: Playlist is the default saved playlist filename,
8139 #. * without the suffix
8140 -#: ../src/totem-playlist.c:1045 ../src/totem-sidebar.c:140
8141 +#: ../src/totem-playlist.c:1033 ../src/totem-playlist.c:1264
8142 +#: ../src/totem-sidebar.c:142
8144 msgstr "قويۇش تىزىملىكى"
8146 -#: ../src/totem-playlist.c:1862
8147 +#: ../src/totem-playlist.c:1857
8149 msgid "The playlist '%s' could not be parsed. It might be damaged."
8150 msgstr "قويۇش تىزىملىكى«%s»نى تەھلىل قىلغىلى بولمىدى. بۇزۇلغان بولۇشى مۇمكىن."
8152 -#: ../src/totem-playlist.c:1863
8153 +#: ../src/totem-playlist.c:1858
8154 msgid "Playlist error"
8155 -msgstr "قويۇش تىزىملىكى خاتالىقى"
8156 +msgstr "قويۇش تىزىمى خاتالىقى"
8158 #: ../src/totem-preferences.c:295
8160 @@ -1464,12 +1494,61 @@ msgstr "مايىللىق"
8161 msgid "Select Subtitle Font"
8162 msgstr "ئاستىدىكى خېتىنىڭ فونتىنى تاللاش"
8164 -#. FIXME this should be setting an error?
8165 -#: ../src/totem-properties-main.c:114 ../src/totem-properties-view.c:83
8166 -#: ../src/totem-properties-view.c:91
8167 +#: ../src/totem-properties-main.c:115 ../src/totem-properties-view.c:252
8169 msgstr "ئاۋاز/سۈرەت"
8171 +#: ../src/totem-properties-view.c:117
8175 +#: ../src/totem-properties-view.c:146
8176 +#: ../src/plugins/properties/totem-movie-properties.c:152
8177 +#: ../src/plugins/properties/totem-movie-properties.c:163
8178 +msgctxt "Stream bit rate"
8182 +#: ../src/totem-properties-view.c:149
8183 +#: ../src/plugins/properties/totem-movie-properties.c:152
8184 +#: ../src/plugins/properties/totem-movie-properties.c:163
8189 +#: ../src/totem-properties-view.c:166
8190 +#: ../src/plugins/properties/totem-movie-properties.c:149
8195 +#: ../src/totem-properties-view.c:195
8196 +#: ../src/plugins/properties/totem-movie-properties.c:166
8201 +#: ../src/totem-properties-view.c:202
8202 +#: ../src/plugins/properties/totem-movie-properties.c:166
8203 +msgctxt "Sample rate"
8207 +#: ../src/totem-properties-view.c:210
8208 +#: ../src/backend/bacon-video-widget-gst-0.10.c:5547
8210 +msgstr "ئايلانما ئاۋاز"
8212 +#: ../src/totem-properties-view.c:212
8213 +#: ../src/backend/bacon-video-widget-gst-0.10.c:5549
8215 +msgstr "يەككە يوللۇق ئاۋاز"
8217 +#: ../src/totem-properties-view.c:222
8218 +msgctxt "Number of audio channels"
8222 #: ../src/totem-statusbar.c:110
8224 msgstr "0:00 / 0:00"
8225 @@ -1489,7 +1568,7 @@ msgstr "%s / %s"
8226 #: ../src/totem-statusbar.c:143 ../src/totem-time-label.c:67
8228 msgid "Seek to %s / %s"
8229 -msgstr "%s / %s گىچە ئىزدەش"
8230 +msgstr "%s / %s گىچە ئىزدە"
8232 #: ../src/totem-statusbar.c:239
8234 @@ -1654,62 +1733,63 @@ msgstr "غەربچە"
8238 -#: ../src/totem-video-list.c:329
8239 +#: ../src/totem-video-list.c:330
8240 msgid "No video URI"
8241 msgstr "سىن URI ئى يوق"
8243 #. Translators: The first string is "Filename" (as translated); the second is an actual filename.
8244 #. The third string is "Resolution" (as translated); the fourth and fifth are screenshot height and width, respectively.
8245 #. The sixth string is "Duration" (as translated); the seventh is the movie duration in words.
8246 -#: ../src/totem-video-thumbnailer.c:686
8247 +#: ../src/totem-video-thumbnailer.c:872
8251 "<b>%s</b>: %d×%d\n"
8253 -msgstr "<b>%s</b>: %s\n"
8256 "<b>%s</b>: %d×%d\n"
8259 -#: ../src/totem-video-thumbnailer.c:687
8260 +#: ../src/totem-video-thumbnailer.c:873
8262 msgstr "ھۆججەت ئاتى"
8264 -#: ../src/totem-video-thumbnailer.c:689
8265 +#: ../src/totem-video-thumbnailer.c:875
8269 -#: ../src/totem-video-thumbnailer.c:692
8270 +#: ../src/totem-video-thumbnailer.c:878
8274 -#: ../src/totem-uri.c:502 ../src/plugins/chapters/totem-chapters.c:998
8275 +#: ../src/totem-uri.c:504 ../src/plugins/chapters/totem-chapters.c:998
8277 msgstr "ھەممە ھۆججەتلەر"
8279 -#: ../src/totem-uri.c:507 ../src/plugins/chapters/totem-chapters.c:995
8280 +#: ../src/totem-uri.c:509 ../src/plugins/chapters/totem-chapters.c:995
8281 msgid "Supported files"
8282 msgstr "ئىشلەتكىلى بولىدىغان ھۆججەتلەر"
8284 -#: ../src/totem-uri.c:519
8285 +#: ../src/totem-uri.c:521
8287 -msgstr "ئۈن ھۆججەتلىرى"
8288 +msgstr "ئۈن ھۆججەتلەر"
8290 -#: ../src/totem-uri.c:527
8291 +#: ../src/totem-uri.c:529
8293 -msgstr "سىن ھۆججەتلىرى"
8294 +msgstr "سىن ھۆججەتلەر"
8296 -#: ../src/totem-uri.c:537
8297 +#: ../src/totem-uri.c:539
8298 msgid "Subtitle files"
8299 -msgstr "ئېكران خەت ھۆججەتلىرى"
8300 +msgstr "ئېكران خەت ھۆججەتلەر"
8302 -#: ../src/totem-uri.c:589
8303 +#: ../src/totem-uri.c:591
8304 msgid "Select Text Subtitles"
8305 msgstr "ئېكران خەت تېكىستىنى تاللاش"
8307 -#: ../src/totem-uri.c:652
8308 +#: ../src/totem-uri.c:654
8309 msgid "Select Movies or Playlists"
8310 -msgstr "كىنو ياكى قويۇش تىزىملىكىنى تاللاش"
8311 +msgstr "كىنو ياكى قويۇش تىزىمىنى تاللاش"
8314 #: ../src/totem.c:201
8315 @@ -1721,16 +1801,17 @@ msgstr "- كىنو ۋە نەغمىلەرنى قويۇش"
8318 "Run '%s --help' to see a full list of available command line options.\n"
8320 -"'%s --help' ئىجرا قىلىپ بۇيرۇق قۇرىنىڭ تولۇق تاللانما تىزىملىكىنى كۆرۈڭ\n"
8323 +"'%s --help' ئىجرا قىلىپ بۇيرۇق قۇرىنىڭ تولۇق تاللانما تىزىمىنى كۆرۈڭ.\n"
8325 #: ../src/totem.c:254 ../src/totem.c:263
8326 -#: ../browser-plugin/totem-plugin-viewer.c:663
8327 -#: ../browser-plugin/totem-plugin-viewer.c:1861
8328 +#: ../browser-plugin/totem-plugin-viewer.c:661
8329 +#: ../browser-plugin/totem-plugin-viewer.c:1786
8330 msgid "Totem Movie Player"
8331 msgstr "Totem كىنو قويغۇچ"
8333 -#: ../src/totem.c:255 ../browser-plugin/totem-plugin-viewer.c:2302
8334 +#: ../src/totem.c:255 ../browser-plugin/totem-plugin-viewer.c:2233
8335 msgid "Could not initialize the thread-safe libraries."
8336 msgstr "thread-safe فۇنكسىيە ئامبارلىرىنى دەسلەپلەشتۈرگىلى بولمىدى."
8338 @@ -1738,127 +1819,111 @@ msgstr "thread-safe فۇنكسىيە ئامبارلىرىنى دەسلەپلەش
8339 msgid "Verify your system installation. Totem will now exit."
8342 -#: ../src/backend/bacon-video-widget-gst-0.10.c:1848
8343 +#: ../src/backend/bacon-video-widget-gst-0.10.c:1579
8344 msgid "Password requested for RTSP server"
8345 msgstr "RTSP مۇلازىمېتىرغا ئىم زۆرۈر"
8347 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3120
8348 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3124
8349 +#: ../src/backend/bacon-video-widget-gst-0.10.c:2836
8350 +#: ../src/backend/bacon-video-widget-gst-0.10.c:2840
8352 msgid "Audio Track #%d"
8353 msgstr "ئاۋاز يولى #%d"
8355 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3152
8356 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3156
8357 +#: ../src/backend/bacon-video-widget-gst-0.10.c:2868
8358 +#: ../src/backend/bacon-video-widget-gst-0.10.c:2872
8360 msgid "Subtitle #%d"
8361 msgstr "ئېكران خېتى #%d"
8363 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3565
8364 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3276
8366 "The requested audio output was not found. Please select another audio output "
8367 "in the Multimedia Systems Selector."
8368 -msgstr "ئىلتىماس قىلغان ئۈن چىقىرىشنى تاپالمىدى. كۆپ ۋاسىتە تاللىغۇچتىن باشقا ئۈن چىقىرىشنى تاللاڭ."
8370 +"ئىلتىماس قىلغان ئۈن چىقىرىشنى تاپالمىدى. كۆپ ۋاسىتە تاللىغۇچتىن باشقا ئۈن "
8371 +"چىقىرىشنى تاللاڭ."
8373 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3570
8374 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3281
8375 msgid "Location not found."
8376 msgstr "ئورۇن(ئادرېس) تېپىلمىدى."
8378 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3574
8379 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3285
8381 "Could not open location; you might not have permission to open the file."
8382 -msgstr "ئورۇن(ئادرېس) تېپىلمىدى. سىزنىڭ بۇ ھۆججەتنى قويۇش ھوقۇقىڭىز يوقتەك قىلىدۇ"
8384 +"ئورۇن(ئادرېس) تېپىلمىدى. سىزنىڭ بۇ ھۆججەتنى قويۇش ھوقۇقىڭىز يوقتەك قىلىدۇ"
8386 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3585
8387 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3296
8389 "The video output is in use by another application. Please close other video "
8390 "applications, or select another video output in the Multimedia Systems "
8392 -msgstr "سىننى چىقىرىدىغان ئۈسكىنىنى باشقا پروگرامما ئىشلىتىۋېتىپتۇ. شۇ پروگراممىنى ئاخىرلاشتۇرۇڭ ياكى Multimedia Systems Selector دىن باشقا ئۈسكىنە تاللاڭ."
8394 +"سىننى چىقىرىدىغان ئۈسكىنىنى باشقا پروگرامما ئىشلىتىۋېتىپتۇ. شۇ پروگراممىنى "
8395 +"ئاخىرلاشتۇرۇڭ ياكى Multimedia Systems Selector دىن باشقا ئۈسكىنە تاللاڭ."
8397 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3591
8398 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3302
8400 "The audio output is in use by another application. Please select another "
8401 "audio output in the Multimedia Systems Selector. You may want to consider "
8402 "using a sound server."
8403 -msgstr "ئۈننى چىقىرىدىغان ئۈسكىنىنى باشقا پروگرامما ئىشلىتىۋېتىپتۇ. شۇ پروگراممىنى ئاخىرلاشتۇرۇڭ ياكى Multimedia Systems Selector دىن باشقا ئۈسكىنە تاللاڭ.سىز يەنە ئۈن مۇلازىمېتىرىنى ئىشلىتىشنى ئويلىشىپ كۆرسىڭىزمۇ بولىدۇ."
8405 +"ئۈننى چىقىرىدىغان ئۈسكىنىنى باشقا پروگرامما ئىشلىتىۋېتىپتۇ. شۇ پروگراممىنى "
8406 +"ئاخىرلاشتۇرۇڭ ياكى Multimedia Systems Selector دىن باشقا ئۈسكىنە تاللاڭ.سىز "
8407 +"يەنە ئۈن مۇلازىمېتىرىنى ئىشلىتىشنى ئويلىشىپ كۆرسىڭىزمۇ بولىدۇ."
8409 #. should be exactly one missing thing (source or converter)
8410 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3609
8411 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3615
8412 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3320
8413 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3326
8415 msgid "The playback of this movie requires a %s plugin which is not installed."
8416 -msgstr "بۇ كىنونى قويۇش ئۈچۈن تېخى ئورنىتىلمىغان قىستۇرما %s كېرەك بولىدۇ."
8418 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3616
8422 "The playback of this movie requires the following decoders which are not "
8426 -msgstr "بۇ كىنونى قويۇش ئۈچۈن تېخى ئورنىتىلمىغان تۆۋەندىكى يەشكۈچلەر كېرەك بولىدۇ:\n"
8428 +"بۇ كىنونى قويۇش ئۈچۈن تېخى ئورنىتىلمىغان تۆۋەندىكى يەشكۈچلەر كېرەك بولىدۇ:\n"
8432 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3641
8433 +#: ../src/backend/bacon-video-widget-gst-0.10.c:3352
8435 "Cannot play this file over the network. Try downloading it to disk first."
8436 -msgstr "بۇ ھۆججەتنى توردا تۇرۇپ قويغىلى بولمىدى. ئاۋۋال دىسكىغا چۈشۈرۈپ سىناپ بېقىڭ."
8438 -#: ../src/backend/bacon-video-widget-gst-0.10.c:3713
8439 -msgid "Media file could not be played."
8440 -msgstr "ۋاسىتە ھۆججىتىنى قويغىلى بولمىدى."
8442 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6004
8444 -msgstr "ئايلانما ئاۋاز"
8446 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6006
8448 -msgstr "يەككە يوللۇق ئاۋاز"
8450 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6353
8451 -msgid "Too old version of GStreamer installed."
8452 -msgstr "GStreamer بەكلا كونا نەشرى ئورنىتىلغان."
8454 +"بۇ ھۆججەتنى توردا تۇرۇپ قويغىلى بولمىدى. ئاۋۋال دىسكىغا چۈشۈرۈپ سىناپ بېقىڭ."
8456 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6360
8457 +#: ../src/backend/bacon-video-widget-gst-0.10.c:5834
8458 msgid "Media contains no supported video streams."
8459 msgstr "ۋاسىتەدە تېخى ئىشلەتكىلى بولمايدىغان(قوللىمايدىغان) ئېقىم بار ئىكەن."
8461 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6843
8462 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6008
8464 "Failed to create a GStreamer play object. Please check your GStreamer "
8466 -msgstr "GStreamer قويۇش نەڭىنى قۇرۇش مەغلۇپ بولدى. GStreamer نىڭ ئورنىتىلىش ئەھۋالىنى تەكشۈرۈڭ."
8468 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6954
8469 -#: ../src/backend/bacon-video-widget-gst-0.10.c:7089
8471 -"Failed to open video output. It may not be available. Please select another "
8472 -"video output in the Multimedia Systems Selector."
8473 -msgstr "سىن چىقىرىش ئۈسكۈنىسىنى ئېچىش مەغلۇپ بولدى. ئۇ يوق بولۇشى مۇمكىن. Multimedia Systems Selector دىن باشقا بىر سىن چىقىرىش ئۈسكۈنىسىنى تاللاڭ."
8475 -#: ../src/backend/bacon-video-widget-gst-0.10.c:6966
8477 -"Could not find the video output. You may need to install additional "
8478 -"GStreamer plugins, or select another video output in the Multimedia Systems "
8480 -msgstr "سىن چىقىرىش ئۈسكۈنىسى تېپىلمىدى. سىز GStreamer قسىتۇرمىسىنى ئورنىتىشىڭىز ياكى Multimedia Systems Selector دىن باشقا بىر سىن چىقىرىش ئۈسكۈنىسىنى تاللىشىڭىز زۆرۈر."
8482 +"GStreamer قويۇش نەڭىنى قۇرۇش مەغلۇپ بولدى. GStreamer نىڭ ئورنىتىلىش "
8483 +"ئەھۋالىنى تەكشۈرۈڭ."
8485 -#: ../src/backend/bacon-video-widget-gst-0.10.c:7001
8486 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6128
8488 "Failed to open audio output. You may not have permission to open the sound "
8489 "device, or the sound server may not be running. Please select another audio "
8490 "output in the Multimedia Systems Selector."
8491 -msgstr "ئۈن چىقىرىش ئۈسكۈنىسى ئېچىش مەغلۇپ بولدى. سىزنىڭ ئۈن ئۈسكۈنىسىنى ئېچىش ھوقۇقىڭىز يوقتەك قىلىدۇ ياكى ئۈن مۇلازىمېتىرى ئىجرا قىلىنمىغاندەك قىلىدۇ. Multimedia Systems Selector دىن باشقا ئۈن چىقىرىش ئۈسكۈنىسىنى تاللاڭ."
8493 +"ئۈن چىقىرىش ئۈسكۈنەسى ئېچىش مەغلۇپ بولدى. سىزنىڭ ئۈن ئۈسكۈنەسىنى ئېچىش "
8494 +"ھوقۇقىڭىز يوقتەك قىلىدۇ ياكى ئۈن مۇلازىمېتىرى ئىجرا قىلىنمىغاندەك قىلىدۇ. "
8495 +"كۆپ ۋاسىتە سىستېما تاللىغۇچتىن باشقا ئۈن چىقىرىش ئۈسكۈنەسىنى تاللاڭ."
8497 -#: ../src/backend/bacon-video-widget-gst-0.10.c:7021
8498 +#: ../src/backend/bacon-video-widget-gst-0.10.c:6148
8500 "Could not find the audio output. You may need to install additional "
8501 "GStreamer plugins, or select another audio output in the Multimedia Systems "
8503 -msgstr "ئۈن چىقىرىش ئۈسكۈنىسى تېپىلمىدى. سىز GStreamer قسىتۇرمىسىنى ئورنىتىشىڭىز ياكى Multimedia Systems Selector دىن باشقا بىر ئۈن چىقىرىش ئۈسكۈنىسىنى تاللىشىڭىز زۆرۈر."
8505 +"ئۈن چىقىرىش ئۈسكۈنەسى تېپىلمىدى. سىز GStreamer قسىتۇرمىسىنى ئورنىتىشىڭىز "
8506 +"ياكى كۆپ ۋاسىتە سىستېما تاللىغۇچتىن باشقا بىر ئۈن چىقىرىش ئۈسكۈنەسىنى "
8507 +"تاللىشىڭىز زۆرۈر."
8509 #. hour:minutes:seconds
8510 #. Translators: This is a time format, like "9:05:02" for 9
8511 @@ -1866,7 +1931,7 @@ msgstr "ئۈن چىقىرىش ئۈسكۈنىسى تېپىلمىدى. سىز GStr
8512 #. * the separator that your locale uses or use "%Id" instead
8513 #. * of "%d" if your locale uses localized digits.
8515 -#: ../src/backend/video-utils.c:91 ../src/backend/video-utils.c:108
8516 +#: ../src/backend/video-utils.c:91 ../src/plugins/skipto/totem-time-entry.c:57
8518 msgctxt "long time format"
8519 msgid "%d:%02d:%02d"
8520 @@ -1884,42 +1949,6 @@ msgctxt "short time format"
8524 -#: ../src/backend/video-utils.c:138
8527 -msgid_plural "%d hours"
8528 -msgstr[0] "%d سائەت"
8530 -#: ../src/backend/video-utils.c:140
8533 -msgid_plural "%d minutes"
8534 -msgstr[0] "%d مىنۇت"
8536 -#: ../src/backend/video-utils.c:143
8539 -msgid_plural "%d seconds"
8540 -msgstr[0] "%d سېكۇنت"
8542 -#. hour:minutes:seconds
8543 -#: ../src/backend/video-utils.c:149
8549 -#: ../src/backend/video-utils.c:152
8555 -#: ../src/backend/video-utils.c:155
8560 #: ../src/plugins/bemused/bemused.plugin.in.h:1
8563 @@ -1945,7 +1974,7 @@ msgstr "Totem Bemused مۇلازىمېتىرىنىڭ 1.0 نەشرى"
8565 #: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:65
8566 msgid "_Create Video Disc..."
8567 -msgstr "سىن دىسكا ياساش(_C)..."
8568 +msgstr "سىن دىسكا ياسا(_C)…"
8570 #: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:66
8571 msgid "Create a video DVD or a (S)VCD from the currently opened movie"
8572 @@ -1953,7 +1982,7 @@ msgstr "ھازىرقى ئوچۇق كىنونى ئىشلىتىپ DVD ياكى (S)
8574 #: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:68
8575 msgid "Copy Vide_o DVD..."
8576 -msgstr "سىن DVDنى كۆچۈر(_O)..."
8577 +msgstr "سىن DVDنى كۆچۈر(_O)…"
8579 #: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:69
8580 msgid "Copy the currently playing video DVD"
8581 @@ -1961,7 +1990,7 @@ msgstr "ھازىر قويۇۋاتقان سىن DVD نى كۆچۈرىدۇ"
8583 #: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:71
8584 msgid "Copy (S)VCD..."
8585 -msgstr "(S)VCD كۆچۈر..."
8586 +msgstr "(S)VCD كۆچۈر…"
8588 #: ../src/plugins/brasero-disc-recorder/totem-disc-recorder.c:72
8589 msgid "Copy the currently playing (S)VCD"
8590 @@ -1991,67 +2020,55 @@ msgid "Video Disc Recorder"
8591 msgstr "سىن دىسكا خاتىرىلىگۈچ"
8593 #: ../src/plugins/chapters/chapters.plugin.in.h:1
8594 -#: ../src/plugins/chapters/totem-chapters.c:1137
8595 +#: ../src/plugins/chapters/totem-chapters.c:1139
8599 #: ../src/plugins/chapters/chapters.plugin.in.h:2
8600 -#| msgid "Next chapter or movie"
8601 msgid "Support chapter markers in movies."
8602 msgstr "كىنولاردا باپ بەلگىسىنى قوللايدۇ."
8604 #: ../src/plugins/chapters/chapters-edit.ui.h:1
8605 -#| msgid "Enter new name for a chapter:"
8606 msgid "Name for new chapter:"
8607 msgstr "يېڭى باپنىڭ ئاتى:"
8609 #: ../src/plugins/chapters/chapters-list.ui.h:1
8610 -#| msgid "Load chapters..."
8611 msgid "Add Chapter..."
8612 -msgstr "باب قوشۇش..."
8615 #: ../src/plugins/chapters/chapters-list.ui.h:2
8616 -#| msgid "Chapters"
8617 msgid "Add New Chapters"
8618 msgstr "يېڭى بابلارنى قوشۇش"
8620 #: ../src/plugins/chapters/chapters-list.ui.h:3
8621 -#| msgid "Next chapter or movie"
8622 msgid "Create a new chapter list for the movie"
8623 msgstr "كىنوغا يېڭى باب تىزىمى قوشىدۇ"
8625 #: ../src/plugins/chapters/chapters-list.ui.h:4
8626 -#| msgid "Go to chapter"
8627 msgid "Go to Chapter"
8628 msgstr "باپقا يۆتكەل"
8630 #: ../src/plugins/chapters/chapters-list.ui.h:5
8631 -#| msgid "Go to the chapter menu"
8632 msgid "Go to the chapter in the movie"
8633 msgstr "كىنودىكى كۆرسىتىلگەن باپقا يۆتكىلىدۇ"
8635 #: ../src/plugins/chapters/chapters-list.ui.h:6
8636 -#| msgid "Load chapters..."
8637 msgid "Load Chapters..."
8638 -msgstr "باپلارنى ئوقۇش..."
8639 +msgstr "باپلارنى يۈكلە…"
8641 #: ../src/plugins/chapters/chapters-list.ui.h:7
8642 -#| msgid "Load chapters from external file"
8643 msgid "Load chapters from an external CMML file"
8644 msgstr "سىرتقى CMML ھۆججىتىدىن باپلارنى ئوقۇيدۇ"
8646 #: ../src/plugins/chapters/chapters-list.ui.h:8
8647 -#| msgid "No chapters data"
8648 msgid "No chapter data"
8649 msgstr "باب سانلىق-مەلۇماتلىرى يوق"
8651 #: ../src/plugins/chapters/chapters-list.ui.h:9
8652 -#| msgid "Chapters"
8653 msgid "Remove Chapter"
8656 #: ../src/plugins/chapters/chapters-list.ui.h:10
8657 -#| msgid "Remove chapter from the list"
8658 msgid "Remove the chapter from the list"
8659 msgstr "تىزىمدىن باپلارنى ئۆچۈرىدۇ"
8661 @@ -2060,12 +2077,10 @@ msgid "Save Changes"
8662 msgstr "ئۆزگەرتكەننى ساقلا"
8664 #: ../src/plugins/chapters/chapters-list.ui.h:12
8665 -#| msgid "Go to chapter"
8666 msgid "_Go to Chapter"
8667 -msgstr "باپقا تۆتكەل(_G)"
8668 +msgstr "بابقا يۆتكەل(_G)"
8670 #: ../src/plugins/chapters/chapters-list.ui.h:13
8672 msgid "_Remove Chapter"
8673 msgstr "باپنى چىقىرىۋەت(_R)"
8675 @@ -2074,7 +2089,8 @@ msgstr "باپنى چىقىرىۋەت(_R)"
8677 "<b>Title: </b>%s\n"
8678 "<b>Start time: </b>%s"
8679 -msgstr "<b>ماۋزۇ: </b>%s\n"
8681 +"<b>ماۋزۇ: </b>%s\n"
8682 "<b>باشلىنىش ۋاقتى: </b>%s"
8684 #: ../src/plugins/chapters/totem-chapters.c:328
8685 @@ -2086,7 +2102,6 @@ msgid "Chapter with the same time already exists"
8686 msgstr "ئوخشاش ۋاقىتتىكى بۆلەك مەۋجۇت"
8688 #: ../src/plugins/chapters/totem-chapters.c:544
8689 -#| msgid "Try another name or remove an existing chapter"
8690 msgid "Try another name or remove an existing chapter."
8691 msgstr "باشقا نامدا سىناپ كۆرۈڭ ياكى بارىنى چىقىرىۋېتىڭ."
8693 @@ -2104,67 +2119,71 @@ msgid ""
8694 msgstr "كىنو بار مۇندەرىجىگە يېزىش ھوقۇقىڭىز بارمىكەن تەكشۈرۈپ كۆرۈڭ."
8696 #: ../src/plugins/chapters/totem-chapters.c:976
8697 -#| msgid "Open Chapters File"
8698 msgid "Open Chapter File"
8699 -msgstr "باب ھۆججىتىنى ئېچىش"
8700 +msgstr "باب ھۆججەتنى ئاچ"
8702 #: ../src/plugins/chapters/totem-chapters.c:1093
8703 -#| msgid "Save Screenshot"
8704 msgid "Chapter Screenshot"
8705 msgstr "باپنىڭ ئېكران كۆرۈنۈشى"
8707 #: ../src/plugins/chapters/totem-chapters.c:1104
8708 -#| msgid "Open Chapters File"
8709 msgid "Chapter Title"
8710 msgstr "باب ماۋزۇسى"
8712 -#: ../src/plugins/chapters/totem-chapters.c:1182
8713 +#: ../src/plugins/chapters/totem-chapters.c:1184
8714 msgid "Save changes to chapter list before closing?"
8715 msgstr "تاقاشتىن بۇرۇن ئۆزگىرىشلەرنى باب تىزىمىغا ساقلىسۇنمۇ؟"
8717 #. Translators: close Totem without saving changes to the chapter list of the current movie.
8718 -#: ../src/plugins/chapters/totem-chapters.c:1187
8719 -#| msgid "Continue without"
8720 +#: ../src/plugins/chapters/totem-chapters.c:1189
8721 msgid "Close without Saving"
8722 msgstr "ساقلىماي تاقا"
8724 #. Translators: save changes to the chapter list of the current movie before closing Totem.
8725 -#: ../src/plugins/chapters/totem-chapters.c:1189
8727 +#: ../src/plugins/chapters/totem-chapters.c:1191
8731 -#: ../src/plugins/chapters/totem-chapters.c:1192
8732 +#: ../src/plugins/chapters/totem-chapters.c:1194
8733 msgid "If you don't save, changes to the chapter list will be lost."
8734 msgstr "ساقلىمىسىڭىز باب تىزىمىدىكى ئۆزگىرىشلەر يوقايدۇ."
8736 -#: ../src/plugins/chapters/totem-cmml-parser.c:642
8737 +#: ../src/plugins/chapters/totem-cmml-parser.c:651
8738 msgid "Failed to parse CMML file"
8739 msgstr "CMML ھۆججىتىنى تەھلىل قىلىش مەغلۇپ بولدى"
8741 -#. Translators: this refers to a media file
8742 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:105
8746 -#: ../src/plugins/coherence_upnp/coherence_upnp.py:116
8747 -#: ../src/plugins/coherence_upnp/coherence_upnp.plugin.in.h:2
8748 -msgid "Coherence DLNA/UPnP Client"
8749 -msgstr "Coherence DLNA/UPnP خېرىدارى"
8751 -#: ../src/plugins/coherence_upnp/coherence_upnp.plugin.in.h:1
8752 -msgid "A DLNA/UPnP client for Totem powered by Coherence"
8753 -msgstr "Coherence قوللايدىغان Totem نىڭ DLNA/UPnP خېرىدارى"
8755 -#: ../src/plugins/dbus-service/dbus-service.plugin.in.h:1
8756 +#: ../src/plugins/dbusservice/dbusservice.plugin.in.h:1
8757 msgid "D-Bus Service"
8758 msgstr "D-Bus مۇلازىمىتى"
8760 -#: ../src/plugins/dbus-service/dbus-service.plugin.in.h:2
8761 +#: ../src/plugins/dbusservice/dbusservice.plugin.in.h:2
8763 "Plugin for sending notifications of currently playing movies to the D-Bus "
8765 -msgstr "D-Bus تارماق سىستېمىغا نۆۋەتتە قويۇۋاتقان سىننىڭ ئۇقتۇرۇش قىستۇرمىسىنى يوللايدۇ."
8767 +"D-Bus تارماق سىستېمىغا نۆۋەتتە قويۇۋاتقان سىننىڭ ئۇقتۇرۇش قىستۇرمىسىنى "
8770 +#: ../src/plugins/dbusservice/dbusservice.py:213
8771 +#: ../src/plugins/dbusservice/dbusservice.py:243
8773 +msgid "The MediaPlayer2 object does not implement the ‘%s’ interface"
8776 +#: ../src/plugins/dbusservice/dbusservice.py:222
8778 +msgid "The property ‘%s’ is not writeable."
8781 +#: ../src/plugins/dbusservice/dbusservice.py:238
8783 +msgid "Unknown property ‘%s’ requested of a MediaPlayer 2 object"
8786 +#: ../src/plugins/dbusservice/dbusservice.py:341
8788 +msgid "The URI ‘%s’ is not supported."
8791 #: ../src/plugins/im-status/totem-im-status.plugin.in.h:1
8792 msgid "Instant Messenger status"
8793 @@ -2188,7 +2207,7 @@ msgstr "gromit ئىككىلىك سىستېمىدىكى ھۆججىتى تېپىل
8795 #. Add the interface to Totem's sidebar
8796 #: ../src/plugins/iplayer/iplayer.plugin.in.h:1
8797 -#: ../src/plugins/iplayer/iplayer.py:41
8798 +#: ../src/plugins/iplayer/iplayer.py:46
8800 msgstr "BBC iPlayer"
8802 @@ -2196,206 +2215,46 @@ msgstr "BBC iPlayer"
8803 msgid "Stream BBC programs from the last 7 days from the BBC iPlayer service."
8804 msgstr "يېقىنقى 7 كۈندىكى BBC iPlayer مۇلازىمىتىنىڭ Stream BBC پروگراممىسى"
8806 -#: ../src/plugins/iplayer/iplayer.py:66
8807 +#: ../src/plugins/iplayer/iplayer.py:72
8808 msgid "Error listing channel categories"
8809 msgstr "قانال كاتېگورىيىسىنى كۆرۈۋاتقاندا خاتالىق كۆرۈلدى"
8811 -#: ../src/plugins/iplayer/iplayer.py:66
8812 +#: ../src/plugins/iplayer/iplayer.py:73
8814 "There was an unknown error getting the list of television channels available "
8816 -msgstr "BBC iPlayer دا ئىشلەتكىلى بولىدىغان تېلېۋىزىيە قاناللىرىنى قوبۇل قىلىۋاتقاندا نامەلۇم خاتالىق كۆرۈلدى."
8818 +"BBC iPlayer دا ئىشلەتكىلى بولىدىغان تېلېۋىزىيە قاناللىرىنى قوبۇل "
8819 +"قىلىۋاتقاندا نامەلۇم خاتالىق كۆرۈلدى."
8821 #. Append a dummy child row so that the expander's visible; we can
8822 -#. then queue off the expander to load the programme listing for this category
8823 -#: ../src/plugins/iplayer/iplayer.py:74
8824 +#. then queue off the expander to load the programme listing for this
8826 +#: ../src/plugins/iplayer/iplayer.py:84
8828 msgstr "يۈكلەۋاتىدۇ…"
8830 -#. Translators: the "programme feed" is the list of TV shows available to watch online
8831 -#: ../src/plugins/iplayer/iplayer.py:119
8832 +#. Translators: the "programme feed" is the list of TV shows
8833 +#. available to watch online
8834 +#: ../src/plugins/iplayer/iplayer.py:136
8835 msgid "Error getting programme feed"
8836 msgstr "پروگرامما مۇشتەرى تىزىملىكىگە ئېرىشىشتە خاتالىق كۆرۈلدى"
8838 -#: ../src/plugins/iplayer/iplayer.py:119
8839 +#: ../src/plugins/iplayer/iplayer.py:137
8841 "There was an error getting the list of programmes for this channel and "
8842 "category combination."
8843 msgstr "بۇ قانال ۋە تۈرنىڭ تىزىملىكىگە ئېرىشىشتە خاتالىق كۆرۈلدى."
8845 -#: ../src/plugins/iplayer/iplayer2.py:299
8846 +#: ../src/plugins/iplayer/iplayer2.py:297
8847 msgid "<no reason given>"
8848 msgstr "<سەۋەبى يوق>"
8850 -#: ../src/plugins/iplayer/iplayer2.py:300
8851 +#: ../src/plugins/iplayer/iplayer2.py:298
8853 msgid "Programme unavailable (\"%s\")"
8854 msgstr "پروگراممىنى ئىشلەتكىلى بولمايدۇ (\"%s\")"
8856 -#: ../src/plugins/jamendo/jamendo.ui.h:1
8858 -msgstr "ئورۇنلىغۇچى"
8860 -#: ../src/plugins/jamendo/jamendo.ui.h:2
8862 -msgstr "بەلگە بويىچە"
8864 -#: ../src/plugins/jamendo/jamendo.ui.h:3
8865 -msgid "Jamendo Album Page"
8866 -msgstr "Jamendo پلاستىنكا توپلام بېتى"
8868 -#: ../src/plugins/jamendo/jamendo.ui.h:4
8869 -msgid "Latest Releases"
8870 -msgstr "ئەڭ يېڭى تارقاتقىنى"
8872 -#: ../src/plugins/jamendo/jamendo.ui.h:5
8873 -msgid "Number of albums to _retrieve:"
8874 -msgstr "ئىزدەيدىغان پلاستىنكا توپلام سانى(_R):"
8876 -#: ../src/plugins/jamendo/jamendo.ui.h:6
8880 -#: ../src/plugins/jamendo/jamendo.ui.h:7
8881 -msgid "Preferred audio _format:"
8882 -msgstr "ئالدىن تاللىنىدىغان ئۈن فورماتى(_F):"
8884 -#: ../src/plugins/jamendo/jamendo.ui.h:8
8885 -#: ../src/plugins/tracker/totem-tracker-widget.c:761
8886 -#: ../src/plugins/youtube/youtube.ui.h:2
8887 -msgid "Search Results"
8888 -msgstr "ئىزدەش نەتىجىسى"
8890 -#: ../src/plugins/jamendo/jamendo.ui.h:10
8891 -msgid "_Open Jamendo Album Page in Browser"
8892 -msgstr "توركۆرگۈدە Jamendo پلاستىنكا توپلام بېتىنى ئاچ(_O)"
8894 -#: ../src/plugins/jamendo/jamendo.plugin.in.h:1
8895 -#: ../src/plugins/jamendo/jamendo.py:127
8899 -#: ../src/plugins/jamendo/jamendo.plugin.in.h:2
8901 -"Listen to the large collection of Creative Commons licensed music on Jamendo."
8902 -msgstr "Jamendo توپلىغان ئىجادىيەت ئاممىۋى ئىجازەتنامىسىدە تارقىتىلغان كۆپ مىقداردىكى نەغمىنى تىڭشاش."
8904 -#: ../src/plugins/jamendo/jamendo.py:58
8905 -msgid "You need to install the Python simplejson module."
8906 -msgstr "سىز Python simplejson بۆلىكىنى ئورنىتىشىڭىز زۆرۈر."
8908 -#: ../src/plugins/jamendo/jamendo.py:260 ../src/plugins/jamendo/jamendo.py:273
8909 -#: ../src/plugins/jamendo/jamendo.py:297
8912 -msgstr "سەنئەتكار: %s"
8914 -#. Translators: this is the release date of an album in Python strptime format
8915 -#: ../src/plugins/jamendo/jamendo.py:266
8919 -#. Translators: this is the release time of an album in Python strftime format
8920 -#: ../src/plugins/jamendo/jamendo.py:268
8925 -#: ../src/plugins/jamendo/jamendo.py:274
8930 -#: ../src/plugins/jamendo/jamendo.py:275
8932 -msgid "Released on: %s"
8933 -msgstr "تارقىتىش تارىخى: %s"
8935 -#: ../src/plugins/jamendo/jamendo.py:276
8937 -msgid "License: %s"
8938 -msgstr "ئىجازەتنامە: %s"
8941 -#. Translators: this is the title of a track in Python format
8942 -#. (first argument is the track number, second is the track title)
8943 -#: ../src/plugins/jamendo/jamendo.py:289
8948 -#: ../src/plugins/jamendo/jamendo.py:296
8951 -msgstr "پلاستىنكا توپلىمى: %s"
8953 -#: ../src/plugins/jamendo/jamendo.py:298
8955 -msgid "Duration: %s"
8956 -msgstr "داۋاملاشقان ۋاقىت: %s"
8958 -#: ../src/plugins/jamendo/jamendo.py:355
8959 -#| msgid "Fetching albums, please wait..."
8960 -msgid "Fetching albums, please wait…"
8961 -msgstr "ئالبوملارنى ئوقۇۋاتىدۇ، سەل ساقلاڭ..."
8963 -#: ../src/plugins/jamendo/jamendo.py:410
8966 -"Failed to connect to Jamendo server.\n"
8968 -msgstr "Jamendo مۇلازىمېتىرىغا باغلىنىش مەغلۇپ بولدى.\n"
8971 -#: ../src/plugins/jamendo/jamendo.py:412
8973 -msgid "The Jamendo server returned code %s."
8974 -msgstr "Jamendo مۇلازىمېتىر قايتۇرغان كود %s."
8976 -#: ../src/plugins/jamendo/jamendo.py:416
8977 -msgid "An error occurred while fetching albums."
8978 -msgstr "پلاستىنكا توپلىمىغا ئېرىشىۋاتقاندا خاتالىق كۆرۈلدى."
8980 -#. Translators: time formatting (in Python strftime format) for the Jamendo plugin
8981 -#. for times longer than an hour
8982 -#: ../src/plugins/jamendo/jamendo.py:618
8986 -#. Translators: time formatting (in Python strftime format) for the Jamendo plugin
8987 -#. for times shorter than an hour
8988 -#: ../src/plugins/jamendo/jamendo.py:621
8992 -#. Translators: If Jamendo supports your language, replace "en" with the language code, enclosed
8993 -#. in slashes, used to view pages in your language on the Jamendo website. e.g. For French, "en"
8994 -#. would be translated to "fr", as Jamendo uses that in its URLs:
8995 -#. http://www.jamendo.com/fr/album/4818
8997 -#. http://www.jamendo.com/en/album/4818
8998 -#. If Jamendo doesn't support your language, *do not translate this string*!
8999 -#: ../src/plugins/jamendo/jamendo.py:671
9003 -#: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:1
9004 -msgid "Audio format to download from Jamendo"
9005 -msgstr "Jamendo دىن چۈشۈرگەن ئۈن فورماتى"
9007 -#: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:2
9008 -msgid "Number of results per page"
9009 -msgstr "بىر بەتتىكى نەتىجە سانى"
9011 -#: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:3
9013 -"The number of Jamendo search results to display in each page of results."
9014 -msgstr "ھەر بىر بەتتە كۆرسىتىدىغان Jamendo ئىزدەش نەتىجىسىنىڭ سانى"
9016 -#: ../src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in.h:4
9017 -msgid "The preferred audio format to download tracks from Jamendo in."
9018 -msgstr "Jamendo دىن ئۈن چۈشۈرگەندە ئالدىن ئىشلىتىدىغان ئۈن فورماتى."
9020 #: ../src/plugins/lirc/lirc.plugin.in.h:1
9021 msgid "Infrared Remote Control"
9022 msgstr "ئىنفرا قىزىل نۇرلۇق تىزگىنەك"
9023 @@ -2417,14 +2276,10 @@ msgid "Download Movie Subtitles"
9024 msgstr "فىلىم يېزىقىنى چۈشۈرۈش"
9026 #: ../src/plugins/opensubtitles/opensubtitles.ui.h:2
9030 -#: ../src/plugins/opensubtitles/opensubtitles.ui.h:3
9031 msgid "Subtitle _language:"
9032 msgstr "ئېكران خەت تىلى(_l):"
9034 -#: ../src/plugins/opensubtitles/opensubtitles.ui.h:4
9035 +#: ../src/plugins/opensubtitles/opensubtitles.ui.h:3
9036 msgid "_Play with Subtitle"
9037 msgstr "ئېكران خېتى بىلەن قوي(_P)"
9039 @@ -2436,56 +2291,60 @@ msgstr "نۆۋەتتە قويۇۋاتقان كىنونىڭ ئىزدەيدۇ."
9040 msgid "Subtitle Downloader"
9041 msgstr "ئېكران خەت چۈشۈرگۈچ"
9043 -#: ../src/plugins/opensubtitles/opensubtitles.py:44
9044 -msgid "Brasilian Portuguese"
9045 +#: ../src/plugins/opensubtitles/opensubtitles.py:42
9046 +msgid "Brazilian Portuguese"
9047 msgstr "بىرازىلىيە پورتۇگالچە"
9049 -#: ../src/plugins/opensubtitles/opensubtitles.py:247
9050 -#: ../src/plugins/opensubtitles/opensubtitles.py:263
9051 -#: ../src/plugins/opensubtitles/opensubtitles.py:280
9052 -#: ../src/plugins/opensubtitles/opensubtitles.py:286
9053 +#: ../src/plugins/opensubtitles/opensubtitles.py:177
9054 +msgid "Searching for subtitles…"
9055 +msgstr "فىلىم يېزىقىنى ئىزدەۋاتىدۇ…"
9057 +#: ../src/plugins/opensubtitles/opensubtitles.py:225
9058 +#: ../src/plugins/opensubtitles/opensubtitles.py:644
9059 +msgid "Downloading the subtitles…"
9060 +msgstr "فىلىم يېزىقىنى چۈشۈرۈۋاتىدۇ…"
9062 +#: ../src/plugins/opensubtitles/opensubtitles.py:290
9063 msgid "Could not contact the OpenSubtitles website"
9064 msgstr "OpenSubtitles تورتۇراسى بىلەن ئالاقە قىلالمىدى."
9066 -#: ../src/plugins/opensubtitles/opensubtitles.py:268
9067 -msgid "No results found"
9068 -msgstr "نەتىجە يوق"
9069 +#: ../src/plugins/opensubtitles/opensubtitles.py:323
9070 +#: ../src/plugins/opensubtitles/opensubtitles.py:341
9071 +msgid "Could not contact the OpenSubtitles website."
9072 +msgstr "OpenSubtitles تور بېكەت بىلەن ئالاقە قىلالمىدى."
9074 +#: ../src/plugins/opensubtitles/opensubtitles.py:329
9075 +msgid "No results found."
9076 +msgstr "نەتىجە تېپىلمىدى."
9078 -#: ../src/plugins/opensubtitles/opensubtitles.py:374
9079 +#: ../src/plugins/opensubtitles/opensubtitles.py:477
9081 msgstr "ئاستىدىكى خېتى"
9083 #. translators comment:
9084 #. This is the file-type of the subtitle file detected
9085 -#: ../src/plugins/opensubtitles/opensubtitles.py:380
9086 +#: ../src/plugins/opensubtitles/opensubtitles.py:483
9090 #. translators comment:
9091 #. This is a rating of the quality of the subtitle
9092 -#: ../src/plugins/opensubtitles/opensubtitles.py:385
9093 +#: ../src/plugins/opensubtitles/opensubtitles.py:488
9097 -#: ../src/plugins/opensubtitles/opensubtitles.py:426
9098 -#| msgid "Download Movie Subtitles"
9099 -msgid "_Download Movie Subtitles…"
9100 -msgstr "فىلىم يېزىقىنى چۈشۈرۈش(_M)…"
9102 -#: ../src/plugins/opensubtitles/opensubtitles.py:427
9103 +#: ../src/plugins/opensubtitles/opensubtitles.py:524
9104 msgid "Download movie subtitles from OpenSubtitles"
9105 msgstr "OpenSubtitles دىن فىلىم يېزىقىنى چۈشۈر"
9107 -#: ../src/plugins/opensubtitles/opensubtitles.py:486
9108 -#| msgid "Searching subtitles..."
9109 +#: ../src/plugins/opensubtitles/opensubtitles.py:526
9110 +msgid "_Download Movie Subtitles…"
9111 +msgstr "فىلىم يېزىقىنى چۈشۈرۈش(_M)…"
9113 +#: ../src/plugins/opensubtitles/opensubtitles.py:588
9114 msgid "Searching subtitles…"
9115 msgstr "فىلىم يېزىقىنى ئىزدەۋاتىدۇ…"
9117 -#: ../src/plugins/opensubtitles/opensubtitles.py:544
9118 -#| msgid "Downloading the subtitles..."
9119 -msgid "Downloading the subtitles…"
9120 -msgstr "فىلىم يېزىقىنى چۈشۈرۈۋاتىدۇ…"
9122 #: ../src/plugins/opensubtitles/org.gnome.totem.plugins.opensubtitles.gschema.xml.in.in.h:1
9123 msgid "Subtitle language"
9124 msgstr "ئېكران خەت تىلى"
9125 @@ -2496,13 +2355,13 @@ msgstr "ئىزدىگەن كىنو ئىشلىتىدىغان تىل."
9127 #: ../src/plugins/ontop/ontop.plugin.in.h:1
9128 msgid "Always On Top"
9129 -msgstr "دائىم چوققىدا تۇرۇش"
9130 +msgstr "ھەمىشە ئەڭ ئۈستىدە"
9132 #: ../src/plugins/ontop/ontop.plugin.in.h:2
9133 msgid "Keep the main window on top when playing a movie"
9134 msgstr "كىنو قويغاندا ئاساسىي كۆزنەك ئەڭ ئۈستىدە"
9136 -#: ../src/plugins/properties/totem-movie-properties.c:128
9137 +#: ../src/plugins/properties/totem-movie-properties.c:246
9141 @@ -2514,7 +2373,13 @@ msgid ""
9142 "%a: the program name as returned by g_get_application_name() • %h: the "
9143 "machine's host name in title case • %u: the user's login name in title case "
9144 "• %U: the user's real name • %%: the percent sign"
9145 -msgstr "توردا قويۇش تىزىملىكىنى تارقاتقاندا تور مۇلازىمېتىر ئاتىغا ئىشلىتىدىغان فورمات بەلگە تىزىقى. تۆۋەندىكى فورمات ئورۇن بەلگىسىنى ئىشلىتىشكە بولىدۇ: • %a: g_get_application_name() قايتۇرغان پروگرامما ئىسمى: %h: بۇ كومپيۇتېرنىڭ ئىسمى، چوڭ يېزىلىش شەكلىنى ئىشلىتىدۇ. %u: ئىشلەتكۈچى تىزىمغا كىرىش ئاتى، چوڭ يېزىلىش شەكلىنى ئىشلىتىدۇ.%U: ئىشلەتكۈچىنىڭ ھەقىقىي ئاتى • %%: پىرسەنت بەلگىسى"
9147 +"توردا قويۇش تىزىملىكىنى تارقاتقاندا تور مۇلازىمېتىر ئاتىغا ئىشلىتىدىغان "
9148 +"فورمات بەلگە تىزىقى. تۆۋەندىكى فورمات ئورۇن بەلگىسىنى ئىشلىتىشكە بولىدۇ: • %"
9149 +"a: g_get_application_name() قايتۇرغان پروگرامما ئىسمى: %h: بۇ كومپيۇتېرنىڭ "
9150 +"ئىسمى، چوڭ يېزىلىش شەكلىنى ئىشلىتىدۇ. %u: ئىشلەتكۈچى تىزىمغا كىرىش ئاتى، چوڭ "
9151 +"يېزىلىش شەكلىنى ئىشلىتىدۇ.%U: ئىشلەتكۈچىنىڭ ھەقىقىي ئاتى • %%: پىرسەنت "
9154 #: ../src/plugins/publish/org.gnome.totem.plugins.publish.gschema.xml.in.in.h:3
9155 msgid "Format for network service name"
9156 @@ -2552,8 +2417,10 @@ msgid ""
9157 "The name used for announcing the playlist service on the network.\n"
9158 "All occurrences of the string <b>%u</b> will be replaced by your name,\n"
9159 "and <b>%h</b> will be replaced by your computer's host name."
9160 -msgstr "توردىكى قويۇش تىزىملىكى مۇلازىمىتىدە ئېلان قىلىدىغان ئات.\n"
9161 -"كۆرۈنگەن بارلىق ھەرپ تىزمىسى<b>%u</b> ئىسمىڭىزغا ئالماشتۇرۇلىدۇ ھەمدە <b>%h</b> ئىسمىڭىزغا ئالماشتۇرۇلىدۇ."
9163 +"توردىكى قويۇش تىزىملىكى مۇلازىمىتىدە ئېلان قىلىدىغان ئات.\n"
9164 +"كۆرۈنگەن بارلىق ھەرپ تىزمىسى<b>%u</b> ئىسمىڭىزغا ئالماشتۇرۇلىدۇ ھەمدە <b>%h</"
9165 +"b> ئىسمىڭىزغا ئالماشتۇرۇلىدۇ."
9167 #: ../src/plugins/publish/publish-plugin.ui.h:6
9168 msgid "Use _encrypted transport protocol (HTTPS)"
9169 @@ -2563,12 +2430,31 @@ msgstr "شىفىرلانغان كېلىشىم ئىشلەتHTTPS(_E)"
9171 "A password to protect the rpdb2 server for debugging Totem from unauthorized "
9172 "remote access. If this is empty, a default of 'totem' will be used."
9173 -msgstr "Totem نى سازلاشنىڭ ئالدىنى ئېلىشقا ئىشلىتىدىغان rpdb2 مۇلازىمېتىر ئىجازەت بېرىلمىگەن تور زىيارەت ئىمغا يولۇقتى. ئەگەر بوش قالدۇرۇلسا، كۆڭۈلدىكى ئەھۋالدا 'totem' ئىم سۈپىتىدە ئىشلىتىلىدۇ."
9175 +"Totem نى سازلاشنىڭ ئالدىنى ئېلىشقا ئىشلىتىدىغان rpdb2 مۇلازىمېتىر ئىجازەت "
9176 +"بېرىلمىگەن تور زىيارەت ئىمغا يولۇقتى. ئەگەر بوش قالدۇرۇلسا، كۆڭۈلدىكى "
9177 +"ئەھۋالدا 'totem' ئىم سۈپىتىدە ئىشلىتىلىدۇ."
9179 #: ../src/plugins/pythonconsole/org.gnome.totem.plugins.pythonconsole.gschema.xml.in.in.h:2
9180 msgid "rpdb2 password"
9183 +#: ../src/plugins/rotation/rotation.plugin.in.h:1
9184 +msgid "Allows videos to be rotated if they're in the wrong orientation."
9185 +msgstr "ئەگەر سىننىڭ يۆنىلىشى خاتا بولسا ئايلاندۇرۇشقا يول قويىدۇ."
9187 +#: ../src/plugins/rotation/rotation.plugin.in.h:2
9188 +msgid "Rotation Plugin"
9189 +msgstr "ئايلاندۇرۇش قىستۇرمىسى"
9191 +#: ../src/plugins/rotation/totem-rotation-plugin.vala:60
9192 +msgid "_Rotate Clockwise"
9193 +msgstr "ئوڭغا ئايلاندۇر(_R)"
9195 +#: ../src/plugins/rotation/totem-rotation-plugin.vala:62
9196 +msgid "Rotate Counterc_lockwise"
9197 +msgstr "سولغا ئايلاندۇر(_L)"
9199 #: ../src/plugins/save-file/totem-save-file.c:63
9200 msgid "Save a Copy..."
9201 msgstr "نۇسخا ساقلا(_V)…"
9202 @@ -2591,8 +2477,8 @@ msgstr "كىنو"
9203 msgid "Movie stream"
9204 msgstr "كىنو ئېقىمى"
9206 -#: ../src/plugins/screensaver/totem-screensaver.c:112
9207 -#: ../browser-plugin/totem-plugin-viewer.c:1961
9208 +#: ../src/plugins/screensaver/totem-screensaver.c:116
9209 +#: ../browser-plugin/totem-plugin-viewer.c:1884
9210 msgid "Playing a movie"
9211 msgstr "كىنو قويىدۇ"
9213 @@ -2621,7 +2507,7 @@ msgid "_Name:"
9216 #. Write the screenshot to the temporary file
9217 -#: ../src/plugins/screenshot/gnome-screenshot-widget.c:387
9218 +#: ../src/plugins/screenshot/gnome-screenshot-widget.c:385
9219 #: ../src/plugins/screenshot/totem-screenshot.c:64
9220 msgid "Screenshot.png"
9221 msgstr "Screenshot.png"
9222 @@ -2652,7 +2538,7 @@ msgstr "رەسىم توپلىمىنى \"%s\" غا ساقلا"
9224 #: ../src/plugins/screenshot/totem-screenshot.c:113
9225 msgid "There was an error saving the screenshot."
9226 -msgstr "تۇتۇلغان رەسىمنى ساقلاشتا خاتالىق كۆرۈلدى"
9227 +msgstr "ئېكران كەسمىسىنى ساقلاشتا خاتالىق كۆرۈلدى."
9229 #: ../src/plugins/screenshot/totem-screenshot.c:139
9230 msgid "Save Screenshot"
9231 @@ -2680,7 +2566,7 @@ msgstr "ئېكران كەسمىسى تۇت...(_S)"
9233 #: ../src/plugins/screenshot/totem-screenshot-plugin.c:197
9234 msgid "Take a screenshot"
9235 -msgstr "ئېكران كۆرۈنۈشىنى رەسىمگە ئال"
9236 +msgstr "ئېكران كەسمىسى تۇت"
9238 #: ../src/plugins/screenshot/totem-screenshot-plugin.c:198
9239 msgid "Create Screenshot _Gallery..."
9240 @@ -2707,71 +2593,20 @@ msgid "7"
9243 #: ../src/plugins/skipto/totem-skipto.c:197
9248 #: ../src/plugins/skipto/totem-skipto-plugin.c:182
9249 -#| msgid "_Skip to..."
9251 -msgstr "غا ئاتلاش(_S) …"
9252 +msgstr "غا ئاتلا(_S) …"
9254 #: ../src/plugins/skipto/totem-skipto-plugin.c:182
9255 msgid "Skip to a specific time"
9256 -msgstr "بەلگىلەنگەن ۋاقىتقا بېرىش"
9257 +msgstr "بەلگىلەنگەن ۋاقىتقا ئاتلا"
9259 #: ../src/plugins/skipto/skipto.ui.h:1
9261 -msgstr "غا ئاتلاپ ئۆتۈش(_S) ...."
9263 -#: ../src/plugins/tracker/totem-tracker-widget.c:587
9264 -#: ../src/plugins/tracker/totem-tracker-widget.c:676
9265 -msgid "Could not connect to Tracker"
9266 -msgstr "Tracker غا باغلىنالمىدى"
9268 -#: ../src/plugins/tracker/totem-tracker-widget.c:594
9270 -msgstr "نەتىجە يوق"
9273 -#. * This is used to show which items are listed in the
9274 -#. * list view, for example:
9276 -#. * Showing 10-20 of 128 matches
9278 -#. * This is similar to what web searches use, eg.
9279 -#. * Google on the top-right of their search results
9282 -#. * Personalized Results 1 - 10 of about 4,130,000 for foobar
9285 -#: ../src/plugins/tracker/totem-tracker-widget.c:618
9287 -msgid "Showing %i - %i of %i match"
9288 -msgid_plural "Showing %i - %i of %i matches"
9289 -msgstr[0] "كۆرسەتكىنى %i - %i، جەمئىي %i"
9291 -#: ../src/plugins/tracker/totem-tracker-widget.c:823
9295 -#: ../src/plugins/tracker/totem-tracker.c:65
9296 -#: ../src/plugins/tracker/tracker.plugin.in.h:1
9297 -msgid "Local Search"
9298 -msgstr "يەرلىك ئىزدەش"
9300 -#: ../src/plugins/thumbnail/thumbnail.plugin.in.h:1
9301 -msgid "Set the window icon to the thumbnail of the playing movie"
9302 -msgstr "كۆزنەك سىنبەلگىسىنى قويۇۋاتقان كىنونىڭ كىچىك سۈرىتىگە تەڭشە"
9304 -#: ../src/plugins/thumbnail/thumbnail.plugin.in.h:2
9306 -msgstr "كىچىك سۈرەت"
9308 -#: ../src/plugins/tracker/tracker.plugin.in.h:2
9309 -msgid "Search for local videos using Tracker"
9310 -msgstr "Tracker ئىشلىتىپ يەرلىك سىن ئىزدە"
9311 +msgstr "ئاتلاش ئورنى(_S):"
9313 #: ../src/plugins/youtube/youtube.plugin.in.h:1
9314 msgid "A plugin to let you browse YouTube videos."
9315 @@ -2785,12 +2620,16 @@ msgstr "YouTube كۆرگۈ"
9316 msgid "Related Videos"
9317 msgstr "مۇناسىۋەتلىك سىنلار"
9319 +#: ../src/plugins/youtube/youtube.ui.h:2
9320 +msgid "Search Results"
9321 +msgstr "ئىزدەش نەتىجىسى"
9323 #: ../src/plugins/youtube/youtube.ui.h:3
9327 #: ../src/plugins/youtube/totem-youtube.c:144
9328 -#: ../src/plugins/youtube/totem-youtube.c:803
9329 +#: ../src/plugins/youtube/totem-youtube.c:819
9330 msgid "_Open in Web Browser"
9331 msgstr "توركۆرگۈدە ئاچ(_O)"
9333 @@ -2819,68 +2658,65 @@ msgstr "سىن ئىزدەۋاتقاندا خاتالىق كۆرۈلدى"
9335 "The response from the server could not be understood. Please check you are "
9336 "running the latest version of libgdata."
9337 -msgstr "مۇلازىمېتىر قايتۇرغان جاۋابنى چۈشىنەلمىدى. libgdata نىڭ ئەڭ يېڭى نەشرىنى ئىشلىتىۋاتقانلىقىڭىزنى تەكشۈرۈڭ."
9339 +"مۇلازىمېتىر قايتۇرغان جاۋابنى چۈشىنەلمىدى. libgdata نىڭ ئەڭ يېڭى نەشرىنى "
9340 +"ئىشلىتىۋاتقانلىقىڭىزنى تەكشۈرۈڭ."
9343 -#: ../src/plugins/youtube/totem-youtube.c:618
9344 +#: ../src/plugins/youtube/totem-youtube.c:630
9345 msgid "Fetching search results…"
9346 -msgstr "ئىزدەش نەتىجىسىنى ئوقۇۋاتىدۇ..."
9347 +msgstr "ئىزدەش نەتىجىلىرىگە ئېرىشىۋاتىدۇ…"
9350 -#: ../src/plugins/youtube/totem-youtube.c:680
9351 +#: ../src/plugins/youtube/totem-youtube.c:696
9352 msgid "Fetching related videos…"
9353 -msgstr "مۇناسىۋەتلىك سىنلارنى ئوقۇۋاتىدۇ..."
9354 +msgstr "مۇناسىۋەتلىك سىنلارغا ئېرىشىۋاتىدۇ…"
9356 -#: ../src/plugins/youtube/totem-youtube.c:732
9357 +#: ../src/plugins/youtube/totem-youtube.c:748
9358 msgid "Error Opening Video in Web Browser"
9359 msgstr "سىننى توركۆرگۈدە ئېچىۋاتقاندا خاتالىق كۆرۈلدى"
9361 -#: ../src/plugins/youtube/totem-youtube.c:752
9362 +#: ../src/plugins/youtube/totem-youtube.c:768
9363 msgid "Fetching more videos…"
9364 -msgstr "تېخى جىق سىنلارنى ئوقۇۋاتىدۇ..."
9365 +msgstr "تېخىمۇ كۆپ سىنلارغا ئېرىشىۋاتىدۇ…"
9367 -#: ../src/plugins/youtube/totem-youtube.c:797
9368 +#: ../src/plugins/youtube/totem-youtube.c:813
9369 msgid "Video Format Not Supported"
9370 msgstr "سىن فورماتىنى قوللىمايدۇ"
9372 -#: ../src/plugins/youtube/totem-youtube.c:799
9373 +#: ../src/plugins/youtube/totem-youtube.c:815
9375 "This video is not available in any formats which Totem supports. Would you "
9376 "like to open it in your web browser instead?"
9377 -msgstr "بۇ سىننىڭ فورماتى Totem قوللايدىغان ھېچقانداق فورماتتا ئەمەس ئىكەن. شۇڭا ئۇنى توركۆرگۈدە ئېچىپ باقامسىز؟"
9379 +"بۇ سىننىڭ فورماتى Totem قوللايدىغان ھېچقانداق فورماتتا ئەمەس ئىكەن. شۇڭا "
9380 +"ئۇنى توركۆرگۈدە ئېچىپ باقامسىز؟"
9382 -#: ../browser-plugin/totem-plugin-viewer.c:431
9383 +#: ../browser-plugin/totem-plugin-viewer.c:429
9384 msgid "No URI to play"
9385 msgstr "قويىدىغان URI يوق"
9387 #. translators: this is:
9388 #. * Open With ApplicationName
9389 #. * as in nautilus' right-click menu
9390 -#: ../browser-plugin/totem-plugin-viewer.c:1101
9391 +#: ../browser-plugin/totem-plugin-viewer.c:1100
9393 msgid "_Open with \"%s\""
9394 msgstr "«%s»دا ئاچ(_O)"
9396 -#: ../browser-plugin/totem-plugin-viewer.c:1152
9398 -msgid "Browser Plugin using %s"
9399 -msgstr "%s نى ئىشلىتىۋاتقان كىنو قويغۇچ"
9401 -#: ../browser-plugin/totem-plugin-viewer.c:1157
9402 -msgid "Totem Browser Plugin"
9403 -msgstr "Totem توركۆرگۈ قىستۇرمىسى"
9405 -#: ../browser-plugin/totem-plugin-viewer.c:2195
9406 +#: ../browser-plugin/totem-plugin-viewer.c:2123
9407 msgid "No playlist or playlist empty"
9408 msgstr "قويۇش تىزىملىكى يوق ياكى قويۇش تىزىملىكى قۇرۇق"
9410 -#: ../browser-plugin/totem-plugin-viewer.c:2286
9411 +#: ../browser-plugin/totem-plugin-viewer.c:2217
9412 msgid "Movie browser plugin"
9413 msgstr "كىنو كۆرگۈ قىستۇرمىسى"
9415 -#: ../browser-plugin/totem-plugin-viewer.c:2302
9416 +#: ../browser-plugin/totem-plugin-viewer.c:2233
9417 msgid "Verify your system installation. The Totem plugin will now exit."
9418 -msgstr "سىستېمىڭىزنىڭ ئورنىتىلىش ئەھۋالىنى تەكشۈرۈپ كۆرۈڭ. Totem قىستۇرمىسى ھازىر ئاخىرلىشىدۇ."
9420 +"سىستېمىڭىزنىڭ ئورنىتىلىش ئەھۋالىنى تەكشۈرۈپ كۆرۈڭ. Totem قىستۇرمىسى ھازىر "
9423 #: ../src/plugins/pythonconsole/pythonconsole.plugin.in.h:1
9424 msgid "Interactive Python console."
9425 @@ -2890,41 +2726,261 @@ msgstr "ئۆزئارا تەسىرلىشىدىغان Python كونترول سۇ
9426 msgid "Python Console"
9427 msgstr "Python كونترول سۇپىسى"
9429 -#: ../src/plugins/pythonconsole/pythonconsole.py:85
9430 +#: ../src/plugins/pythonconsole/pythonconsole.py:88
9431 msgid "Python Console Menu"
9432 msgstr "Python كونترول سۇپا تىزىملىكى"
9434 -#: ../src/plugins/pythonconsole/pythonconsole.py:88
9435 +#: ../src/plugins/pythonconsole/pythonconsole.py:93
9436 msgid "_Python Console"
9437 msgstr "Python كونترول سۇپىسى(_P)"
9439 -#: ../src/plugins/pythonconsole/pythonconsole.py:89
9440 +#: ../src/plugins/pythonconsole/pythonconsole.py:94
9441 msgid "Show Totem's Python console"
9442 msgstr "Totem نىڭ Python كونترول سۇپىسىنى كۆرسەت"
9444 -#: ../src/plugins/pythonconsole/pythonconsole.py:94
9445 +#: ../src/plugins/pythonconsole/pythonconsole.py:100
9446 msgid "Python Debugger"
9447 msgstr "Python سازلىغۇچ"
9449 -#: ../src/plugins/pythonconsole/pythonconsole.py:95
9450 +#: ../src/plugins/pythonconsole/pythonconsole.py:101
9451 msgid "Enable remote Python debugging with rpdb2"
9452 msgstr "rpdb2 ئىشلىتىپ يىراقتىن Python سازلاشنى قوزغات"
9454 -#: ../src/plugins/pythonconsole/pythonconsole.py:116
9455 +#. pylint: disable-msg=E1101
9456 +#: ../src/plugins/pythonconsole/pythonconsole.py:125
9458 msgid "You can access the Totem.Object through 'totem_object' :\\n%s"
9459 msgstr "سىز 'totem_object' ئارقىلىق Totem نەڭنى زىيارەت قىلالايسىز:\\n%s"
9461 -#: ../src/plugins/pythonconsole/pythonconsole.py:120
9462 +#: ../src/plugins/pythonconsole/pythonconsole.py:129
9463 msgid "Totem Python Console"
9464 msgstr "Totem Python كونترول سۇپىسى"
9466 -#: ../src/plugins/pythonconsole/pythonconsole.py:129
9467 +#: ../src/plugins/pythonconsole/pythonconsole.py:139
9469 "After you press OK, Totem will wait until you connect to it with winpdb or "
9470 "rpdb2. If you have not set a debugger password in DConf, it will use the "
9471 "default password ('totem')."
9472 -msgstr "جەزملە چېكىلگەندىن كېيىن، Totem سىزنىڭ winpdb ياكى rpdb2 غا باغلانغۇچە كۈتىدۇ. ئەگەر سىز DConf دا سازلىغۇچ ئىمنى تەڭشىمىگەن بولسىڭىز، كۆڭۈلدىكى ئىم ('totem')نى ئىشلىتىدۇ."
9474 +"جەزملە چېكىلگەندىن كېيىن، Totem سىزنىڭ winpdb ياكى rpdb2 غا باغلانغۇچە "
9475 +"كۈتىدۇ. ئەگەر سىز DConf دا سازلىغۇچ ئىمنى تەڭشىمىگەن بولسىڭىز، كۆڭۈلدىكى ئىم "
9476 +"('totem')نى ئىشلىتىدۇ."
9478 +#: ../src/plugins/grilo/grilo.plugin.in.h:1
9479 +msgid "A plugin to let you browse media content from various sources."
9481 +"بۇ قىستۇرما سىزنىڭ ۋاسىتە مەزمۇنىنى ھەر خىل مەنبەلەردىن كۆز يۈگۈرتۈشىڭىزگە "
9484 +#: ../src/plugins/grilo/grilo.plugin.in.h:2
9485 +msgid "Grilo Browser"
9486 +msgstr "Grilo كۆرگۈ"
9488 +#: ../src/plugins/grilo/totem-grilo.c:452
9489 +msgid "Browse Error"
9490 +msgstr "كۆز يۈگۈرتۈش خاتالىقى"
9492 +#: ../src/plugins/grilo/totem-grilo.c:599
9493 +msgid "Search Error"
9494 +msgstr "ئىزدەش خاتالىقى"
9496 +#: ../src/plugins/grilo/totem-grilo.c:1219 ../src/plugins/grilo/grilo.ui.h:1
9498 +msgstr "كۆز يۈگۈرت"
9500 +#: ../src/plugins/grilo/totem-grilo.c:1285 ../src/plugins/grilo/grilo.ui.h:2
9504 +#~ msgid "Browser Plugin using %s"
9505 +#~ msgstr "%s نى ئىشلىتىۋاتقان كىنو قويغۇچ"
9507 +#~ msgid "Totem Browser Plugin"
9508 +#~ msgstr "Totem توركۆرگۈ قىستۇرمىسى"
9513 +#~ msgid "By artist"
9514 +#~ msgstr "سەنئەتكار بويىچە"
9517 +#~ msgstr "بەلگە بويىچە"
9519 +#~ msgid "Jamendo Album Page"
9520 +#~ msgstr "Jamendo پلاستىنكا توپلام بېتى"
9522 +#~ msgid "Latest Releases"
9523 +#~ msgstr "ئەڭ يېڭى تارقاتقىنى"
9525 +#~ msgid "Number of albums to _retrieve:"
9526 +#~ msgstr "ئىزدەيدىغان پلاستىنكا توپلام سانى(_R):"
9529 +#~ msgstr "ئاممىباب"
9531 +#~ msgid "Preferred audio _format:"
9532 +#~ msgstr "ئالدىن تاللىنىدىغان ئۈن فورماتى(_F):"
9534 +#~ msgid "_Open Jamendo Album Page in Browser"
9535 +#~ msgstr "توركۆرگۈدە Jamendo پلاستىنكا توپلام بېتىنى ئاچ(_O)"
9538 +#~ msgstr "Jamendo"
9541 +#~ "Listen to the large collection of Creative Commons licensed music on "
9544 +#~ "Jamendo توپلىغان ئىجادىيەت ئاممىۋى ئىجازەتنامىسىدە تارقىتىلغان كۆپ "
9545 +#~ "مىقداردىكى نەغمىنى تىڭشاش."
9547 +#~ msgid "You need to install the Python simplejson module."
9548 +#~ msgstr "سىز Python simplejson بۆلىكىنى ئورنىتىشىڭىز زۆرۈر."
9550 +#~ msgid "Artist: %s"
9551 +#~ msgstr "سەنئەتكار: %s"
9553 +#~ msgid "%Y-%m-%d"
9554 +#~ msgstr "%Y-%m-%d"
9559 +#~ msgid "Genre: %s"
9560 +#~ msgstr "ئېقىم: %s"
9562 +#~ msgid "Released on: %s"
9563 +#~ msgstr "تارقىتىش تارىخى: %s"
9565 +#~ msgid "License: %s"
9566 +#~ msgstr "ئىجازەتنامە: %s"
9568 +#~ msgid "%02d. %s"
9569 +#~ msgstr "%02d. %s"
9571 +#~ msgid "Album: %s"
9572 +#~ msgstr "پلاستىنكا توپلىمى: %s"
9574 +#~ msgid "Duration: %s"
9575 +#~ msgstr "داۋاملاشقان ۋاقىت: %s"
9577 +#~ msgid "Fetching albums, please wait…"
9578 +#~ msgstr "ئالبوملارنى ئوقۇۋاتىدۇ، سەل ساقلاڭ..."
9581 +#~ "Failed to connect to Jamendo server.\n"
9584 +#~ "Jamendo مۇلازىمېتىرىغا باغلىنىش مەغلۇپ بولدى.\n"
9587 +#~ msgid "The Jamendo server returned code %s."
9588 +#~ msgstr "Jamendo مۇلازىمېتىر قايتۇرغان كود %s."
9590 +#~ msgid "An error occurred while fetching albums."
9591 +#~ msgstr "پلاستىنكا توپلىمىغا ئېرىشىۋاتقاندا خاتالىق كۆرۈلدى."
9593 +#~ msgid "%H:%M:%S"
9594 +#~ msgstr "%H:%M:%S"
9602 +#~ msgid "Audio format to download from Jamendo"
9603 +#~ msgstr "Jamendo دىن چۈشۈرگەن ئۈن فورماتى"
9605 +#~ msgid "Number of results per page"
9606 +#~ msgstr "بىر بەتتىكى نەتىجە سانى"
9609 +#~ "The number of Jamendo search results to display in each page of results."
9610 +#~ msgstr "ھەر بىر بەتتە كۆرسىتىدىغان Jamendo ئىزدەش نەتىجىسىنىڭ سانى"
9612 +#~ msgid "The preferred audio format to download tracks from Jamendo in."
9613 +#~ msgstr "Jamendo دىن ئۈن چۈشۈرگەندە ئالدىن ئىشلىتىدىغان ئۈن فورماتى."
9615 +#~ msgid "Could not connect to Tracker"
9616 +#~ msgstr "Tracker غا باغلىنالمىدى"
9618 +#~ msgid "No results"
9619 +#~ msgstr "نەتىجە يوق"
9621 +#~ msgid "Showing %i - %i of %i match"
9622 +#~ msgid_plural "Showing %i - %i of %i matches"
9623 +#~ msgstr[0] "كۆرسەتكىنى %i - %i، جەمئىي %i"
9628 +#~ msgid "Search for local videos using Tracker"
9629 +#~ msgstr "Tracker ئىشلىتىپ يەرلىك سىن ئىزدە"
9631 +#~ msgid "Zoom Out"
9632 +#~ msgstr "كىچىكلىتىش"
9634 +#~ msgid "Zoom Reset"
9635 +#~ msgstr "چوڭ-كىچىكلىكىنى ئەسلىگە كەلتۈرۈش"
9637 +#~ msgid "Zoom out"
9638 +#~ msgstr "كىچىكلەت"
9640 +#~ msgid "Zoom reset"
9641 +#~ msgstr "چوڭ-كىچىكلىكىنى ئەسلىگە كەلتۈرۈش"
9644 +#~ "The playback of this movie requires the following decoders which are not "
9649 +#~ "بۇ كىنونى قويۇش ئۈچۈن تېخى ئورنىتىلمىغان تۆۋەندىكى يەشكۈچلەر كېرەك "
9654 +#~ msgid "Media file could not be played."
9655 +#~ msgstr "ۋاسىتە ھۆججىتىنى قويغىلى بولمىدى."
9657 +#~ msgid "Too old version of GStreamer installed."
9658 +#~ msgstr "GStreamer بەكلا كونا نەشرى ئورنىتىلغان."
9661 +#~ "Failed to open video output. It may not be available. Please select "
9662 +#~ "another video output in the Multimedia Systems Selector."
9664 +#~ "سىن چىقىرىش ئۈسكۈنىسىنى ئېچىش مەغلۇپ بولدى. ئۇ يوق بولۇشى مۇمكىن. "
9665 +#~ "Multimedia Systems Selector دىن باشقا بىر سىن چىقىرىش ئۈسكۈنىسىنى تاللاڭ."
9668 +#~ "Could not find the video output. You may need to install additional "
9669 +#~ "GStreamer plugins, or select another video output in the Multimedia "
9670 +#~ "Systems Selector."
9672 +#~ "سىن چىقىرىش ئۈسكۈنىسى تېپىلمىدى. سىز GStreamer قسىتۇرمىسىنى ئورنىتىشىڭىز "
9673 +#~ "ياكى Multimedia Systems Selector دىن باشقا بىر سىن چىقىرىش ئۈسكۈنىسىنى "
9674 +#~ "تاللىشىڭىز زۆرۈر."
9679 +#~ msgid "Coherence DLNA/UPnP Client"
9680 +#~ msgstr "Coherence DLNA/UPnP خېرىدارى"
9682 +#~ msgid "A DLNA/UPnP client for Totem powered by Coherence"
9683 +#~ msgstr "Coherence قوللايدىغان Totem نىڭ DLNA/UPnP خېرىدارى"
9685 +#~ msgid "Language"
9688 +#~ msgid "Set the window icon to the thumbnail of the playing movie"
9689 +#~ msgstr "كۆزنەك سىنبەلگىسىنى قويۇۋاتقان كىنونىڭ كىچىك سۈرىتىگە تەڭشە"
9691 +#~ msgid "Thumbnail"
9692 +#~ msgstr "كىچىك سۈرەت"
9694 #~ msgid "Enable visual effects?"
9695 #~ msgstr "كۆرۈنۈش ئۈنۈمىنى قوزغىتامدۇ؟"
9696 @@ -2948,9 +3004,6 @@ msgstr "جەزملە چېكىلگەندىن كېيىن، Totem سىزنىڭ winp
9697 #~ msgid "Could not get name and thumbnail for %s: %s"
9698 #~ msgstr "%s نىڭ ئاتى ۋە كىچىك سۈرەتكە ئېرىشەلمىدى: %s"
9700 -#~ msgid "File Error"
9701 -#~ msgstr "ھۆججەت خاتالىقى"
9703 #~ msgid "Error Looking Up Video URI"
9704 #~ msgstr "سىن URI نى ئىزدەۋاتقاندا خاتالىق كۆرۈلدى"
9706 @@ -3180,9 +3233,6 @@ msgstr "جەزملە چېكىلگەندىن كېيىن، Totem سىزنىڭ winp
9707 #~ msgid "This movie could not be opened."
9708 #~ msgstr "بۇ كىنونى ئاچقىلى بولمىدى"
9710 -#~ msgid "Generic Error."
9711 -#~ msgstr "دائىم كۆرۈلىدىغان خاتالىق"
9713 #~ msgid "This movie is a still image. You can open it with an image viewer."
9714 #~ msgstr "بۇ كىنو بولسا بىر سىتاتىك رەسىم. ئۇنى سۈرەت كۆرگۈچ بىلەن كۆرەلەيسىز"
9716 diff --git a/src/Makefile.am b/src/Makefile.am
9717 index b82d938..0672900 100644
9718 --- a/src/Makefile.am
9719 +++ b/src/Makefile.am
9721 SUBDIRS = backend properties . plugins
9723 -bin_PROGRAMS = totem totem-video-thumbnailer totem-video-indexer totem-audio-preview
9724 +bin_PROGRAMS = totem totem-video-thumbnailer totem-audio-preview
9725 lib_LTLIBRARIES = libtotem.la
9726 noinst_LTLIBRARIES = libtotem_player.la
9728 @@ -259,25 +259,6 @@ test_properties_page_LDADD = \
9730 endif # HAVE_NAUTILUS
9732 -# Totem Video Indexer
9733 -totem_video_indexer_SOURCES = \
9734 - totem-video-indexer.c \
9735 - totem-resources.c \
9738 -totem_video_indexer_CPPFLAGS = \
9739 - -I$(top_builddir)/data \
9740 - -DG_LOG_DOMAIN=\""TotemVideoIndexer"\" \
9743 -totem_video_indexer_CFLAGS = \
9744 - $(DEPENDENCY_CFLAGS) \
9747 -totem_video_indexer_LDADD = \
9748 - backend/libbaconvideowidget.la \
9749 - $(DEPENDENCY_LIBS)
9751 # Totem Audio Preview for Nautilus
9752 totem_audio_preview_SOURCES = \
9753 totem-audio-preview.c \
9754 diff --git a/src/backend/bacon-video-widget-gst-0.10.c b/src/backend/bacon-video-widget-gst-0.10.c
9755 index bea7283..57a6ed1 100644
9756 --- a/src/backend/bacon-video-widget-gst-0.10.c
9757 +++ b/src/backend/bacon-video-widget-gst-0.10.c
9758 @@ -3113,7 +3113,7 @@ get_lang_list_for_type (BaconVideoWidget * bvw, const gchar * type_name)
9759 gchar *lc = NULL, *cd = NULL;
9761 gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_CODE, &lc);
9762 - gst_tag_list_get_string (tags, GST_TAG_CODEC, &lc);
9763 + gst_tag_list_get_string (tags, GST_TAG_CODEC, &cd);
9766 ret = g_list_prepend (ret, lc);
9767 @@ -3145,7 +3145,7 @@ get_lang_list_for_type (BaconVideoWidget * bvw, const gchar * type_name)
9768 gchar *lc = NULL, *cd = NULL;
9770 gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_CODE, &lc);
9771 - gst_tag_list_get_string (tags, GST_TAG_CODEC, &lc);
9772 + gst_tag_list_get_string (tags, GST_TAG_CODEC, &cd);
9775 ret = g_list_prepend (ret, lc);
9776 diff --git a/src/plugins/Makefile.plugins b/src/plugins/Makefile.plugins
9777 index 6b7ab07..c670c65 100644
9778 --- a/src/plugins/Makefile.plugins
9779 +++ b/src/plugins/Makefile.plugins
9780 @@ -26,3 +26,22 @@ plugin_ldflags = \
9783 $(top_builddir)/src/libtotem.la
9785 +# Checking rules for Python plugins
9786 +# Execute pylint on all the requisite files individually, returning non-zero
9787 +# iff any of the calls to pylint returned non-zero.
9788 +check-pylint: $(plugin_PYTHON)
9790 + for py in $^; do \
9791 + pylint -i y -d C0111 -d W0511 $$py; \
9793 + newexitstatus=$$?; \
9794 + if [ $$exitstatus == 0 ]; then \
9795 + exitstatus=$$newexitstatus; \
9800 +check: check-pylint
9802 +.PHONY: check-pylint
9803 diff --git a/src/plugins/bemused/totem-bemused.c b/src/plugins/bemused/totem-bemused.c
9804 index 584b4d3..c51a0ee 100644
9805 --- a/src/plugins/bemused/totem-bemused.c
9806 +++ b/src/plugins/bemused/totem-bemused.c
9807 @@ -655,7 +655,8 @@ sdp_svc_add_spp(u_int8_t port,
9809 /* Connect to the local SDP server, register the service record */
9810 session = sdp_connect (BDADDR_ANY, BDADDR_LOCAL, 0);
9811 - sdp_record_register (session, &record, 0);
9812 + if (session != NULL)
9813 + sdp_record_register (session, &record, 0);
9816 sdp_data_free (channel);
9817 diff --git a/src/plugins/chapters/totem-chapters.c b/src/plugins/chapters/totem-chapters.c
9818 index 1b5a9d7..e71c8c7 100644
9819 --- a/src/plugins/chapters/totem-chapters.c
9820 +++ b/src/plugins/chapters/totem-chapters.c
9821 @@ -1131,6 +1131,7 @@ impl_activate (PeasActivatable *plugin)
9822 main_box = gtk_vbox_new (FALSE, 6);
9823 gtk_box_pack_start (GTK_BOX (main_box), cplugin->priv->list_box, TRUE, TRUE, 0);
9824 gtk_box_pack_start (GTK_BOX (main_box), cplugin->priv->load_box, TRUE, TRUE, 0);
9825 + gtk_widget_show_all (main_box);
9827 set_no_data_visible (TRUE, FALSE, cplugin);
9829 diff --git a/src/plugins/coherence_upnp/Makefile.am b/src/plugins/coherence_upnp/Makefile.am
9830 deleted file mode 100644
9831 index 36adfea..0000000
9832 --- a/src/plugins/coherence_upnp/Makefile.am
9835 -include $(top_srcdir)/src/plugins/Makefile.plugins
9837 -plugindir = $(PLUGINDIR)/coherence_upnp
9838 -plugin_PYTHON = coherence_upnp.py
9840 -plugin_in_files = coherence_upnp.plugin.in
9842 --include $(top_srcdir)/git.mk
9843 diff --git a/src/plugins/coherence_upnp/coherence_upnp.plugin.in b/src/plugins/coherence_upnp/coherence_upnp.plugin.in
9844 deleted file mode 100644
9845 index 1266707..0000000
9846 --- a/src/plugins/coherence_upnp/coherence_upnp.plugin.in
9851 -Module=coherence_upnp
9853 -_Name=Coherence DLNA/UPnP Client
9854 -_Description=A DLNA/UPnP client for Totem powered by Coherence
9855 -Authors=Frank Scholz <coherence@beebits.net>
9856 -Copyright=Copyright © 2008 Frank Scholz
9857 -Website=http://coherence.beebits.net/
9858 diff --git a/src/plugins/coherence_upnp/coherence_upnp.py b/src/plugins/coherence_upnp/coherence_upnp.py
9859 deleted file mode 100644
9860 index d785830..0000000
9861 --- a/src/plugins/coherence_upnp/coherence_upnp.py
9864 -# -*- coding: utf-8 -*-
9866 -# Licensed under the MIT license
9867 -# http://opensource.org/licenses/mit-license.php
9869 -# Copyright 2008, Frank Scholz <coherence@beebits.net>
9871 -from gi.repository import Peas
9872 -from gi.repository import Gtk
9873 -from gi.repository import Totem
9875 -from coherence.ui.av_widgets import TreeWidget
9876 -from coherence.ui.av_widgets import UDN_COLUMN,UPNP_CLASS_COLUMN,SERVICE_COLUMN
9878 -gettext.textdomain("totem")
9880 -D_ = gettext.dgettext
9881 -_ = gettext.gettext
9883 -class UPnPClient(gobject.GObject, Peas.Activatable):
9884 - __gtype_name__ = 'UPnPClient'
9886 - object = gobject.property(type = gobject.GObject)
9888 - def __init__ (self):
9889 - self.totem_object = None
9890 - self.ui = TreeWidget()
9891 - self.ui.window.set_shadow_type(gtk.SHADOW_IN)
9892 - self.ui.cb_item_right_click = self.button_pressed
9893 - self.ui.window.show_all()
9894 - selection = self.ui.treeview.get_selection()
9895 - selection.set_mode(gtk.SELECTION_MULTIPLE)
9897 - def button_pressed(self, widget, event):
9898 - if event.button == 3:
9902 - row_path,column,_,_ = self.ui.treeview.get_path_at_pos(x, y)
9903 - selection = self.ui.treeview.get_selection()
9904 - if not selection.path_is_selected(row_path):
9905 - self.ui.treeview.set_cursor(row_path,column,False)
9906 - print "button_pressed", row_path, (row_path[0],)
9907 - iter = self.ui.store.get_iter((row_path[0],))
9908 - udn, = self.ui.store.get(iter,UDN_COLUMN)
9909 - iter = self.ui.store.get_iter(row_path)
9910 - upnp_class,url = self.ui.store.get(iter,UPNP_CLASS_COLUMN,SERVICE_COLUMN)
9911 - print udn, upnp_class, url
9912 - if(not upnp_class.startswith('object.container') and
9913 - not upnp_class == 'root'):
9914 - self.create_item_context(has_delete=self.ui.device_has_action(udn,'ContentDirectory','DestroyObject'))
9915 - self.context.popup(None,None,None,event.button,event.time)
9921 - def create_item_context(self,has_delete=False):
9922 - """ create context menu for right click in treeview item"""
9924 - def action(menu, text):
9925 - selection = self.ui.treeview.get_selection()
9926 - model, selected_rows = selection.get_selected_rows()
9927 - if text == 'item.delete':
9928 - for row_path in selected_rows:
9929 - self.ui.destroy_object(row_path)
9931 - if(len(selected_rows) > 0 and
9932 - text ==' item.play'):
9933 - row_path = selected_rows.pop(0)
9934 - iter = self.ui.store.get_iter(row_path)
9935 - url, = self.ui.store.get(iter,SERVICE_COLUMN)
9936 - self.totem_object.action_remote(totem.REMOTE_COMMAND_REPLACE,url)
9937 - self.totem_object.action_remote(totem.REMOTE_COMMAND_PLAY,url)
9938 - for row_path in selected_rows:
9939 - iter = self.ui.store.get_iter(row_path)
9940 - url, = self.ui.store.get(iter,SERVICE_COLUMN)
9941 - self.totem_object.action_remote(totem.REMOTE_COMMAND_ENQUEUE,url)
9942 - self.totem_object.action_remote(totem.REMOTE_COMMAND_PLAY,url)
9944 - if not hasattr(self, 'context_no_delete'):
9945 - self.context_no_delete = gtk.Menu()
9946 - # Translators: this refers to a media file
9947 - play_menu = gtk.MenuItem(_(u"Play"))
9948 - play_menu.connect("activate", action, 'item.play')
9949 - # Translators: this refers to a media file
9950 - enqueue_menu = gtk.MenuItem(_(u"Enqueue"))
9951 - enqueue_menu.connect("activate", action, 'item.enqueue')
9952 - self.context_no_delete.append(play_menu)
9953 - self.context_no_delete.append(enqueue_menu)
9954 - self.context_no_delete.show_all()
9956 - if not hasattr(self, 'context_with_delete'):
9957 - self.context_with_delete = gtk.Menu()
9958 - # Translators: this refers to a media file
9959 - play_menu = gtk.MenuItem(_(u"Play"))
9960 - play_menu.connect("activate", action, 'item.play')
9961 - # Translators: this refers to a media file
9962 - enqueue_menu = gtk.MenuItem(_(u"Enqueue"))
9963 - enqueue_menu.connect("activate", action, 'item.enqueue')
9964 - self.context_with_delete.append(play_menu)
9965 - self.context_with_delete.append(enqueue_menu)
9966 - self.context_with_delete.append(gtk.SeparatorMenuItem())
9967 - # Translators: this refers to a media file
9968 - menu = gtk.MenuItem(_(u"Delete"))
9969 - menu.connect("activate", action, 'item.delete')
9970 - self.context_with_delete.append(menu)
9971 - self.context_with_delete.show_all()
9974 - self.context = self.context_with_delete
9976 - self.context = self.context_no_delete
9978 - def do_activate (self):
9979 - self.totem_object = self.object
9980 - self.totem_object.add_sidebar_page ("upnp-coherence", _(u"Coherence DLNA/UPnP Client"), self.ui.window)
9982 - def load_and_play(url):
9983 - self.totem_object.add_to_playlist_and_play (url, '', True)
9985 - self.ui.cb_item_dbl_click = load_and_play
9987 - def do_deactivate (self):
9988 - self.totem_object.remove_sidebar_page ("upnp-coherence")
9989 diff --git a/src/plugins/dbus-service/Makefile.am b/src/plugins/dbus-service/Makefile.am
9990 deleted file mode 100644
9991 index 7aa7652..0000000
9992 --- a/src/plugins/dbus-service/Makefile.am
9995 -include $(top_srcdir)/src/plugins/Makefile.plugins
9997 -plugindir = $(PLUGINDIR)/dbus
9998 -plugin_PYTHON = dbus-service.py
10000 -plugin_in_files = dbus-service.plugin.in
10002 --include $(top_srcdir)/git.mk
10003 diff --git a/src/plugins/dbus-service/dbus-service.plugin.in b/src/plugins/dbus-service/dbus-service.plugin.in
10004 deleted file mode 100644
10005 index 7400fbe..0000000
10006 --- a/src/plugins/dbus-service/dbus-service.plugin.in
10011 -Module=dbus-service
10013 -_Name=D-Bus Service
10014 -_Description=Plugin for sending notifications of currently playing movies to the D-Bus subsystem.
10015 -Authors=Lucky <lucky1.data@gmail.com>, Philip Withnall <philip@tecnocode.co.uk>
10016 -Copyright=Copyright © 2009 Lucky, Philip Withnall
10017 -Website=http://projects.gnome.org/totem/
10018 diff --git a/src/plugins/dbus-service/dbus-service.py b/src/plugins/dbus-service/dbus-service.py
10019 deleted file mode 100644
10020 index 7d96ffa..0000000
10021 --- a/src/plugins/dbus-service/dbus-service.py
10024 -## Totem D-Bus plugin
10025 -## Copyright (C) 2009 Lucky <lucky1.data@gmail.com>
10026 -## Copyright (C) 2009 Philip Withnall <philip@tecnocode.co.uk>
10028 -## This program is free software; you can redistribute it and/or modify
10029 -## it under the terms of the GNU General Public License as published by
10030 -## the Free Software Foundation; either version 2 of the License, or
10031 -## (at your option) any later version.
10033 -## This program is distributed in the hope that it will be useful,
10034 -## but WITHOUT ANY WARRANTY; without even the implied warranty of
10035 -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10036 -## GNU General Public License for more details.
10038 -## You should have received a copy of the GNU General Public License
10039 -## along with this program; if not, write to the Free Software
10040 -## Foundation, Inc., 51 Franklin St, Fifth Floor,
10041 -## Boston, MA 02110-1301 USA.
10043 -## Sunday 13th May 2007: Bastien Nocera: Add exception clause.
10044 -## See license_change file for details.
10047 -from gi.repository import Peas
10048 -from gi.repository import Gtk
10049 -from gi.repository import Totem
10050 -import dbus, dbus.service
10051 -from dbus.mainloop.glib import DBusGMainLoop
10053 -class dbusservice(gobject.GObject, Peas.Activatable):
10054 - __gtype_name__ = 'dbusservice'
10056 - object = gobject.property(type = gobject.GObject)
10058 - def do_activate(self):
10059 - DBusGMainLoop(set_as_default = True)
10061 - name = dbus.service.BusName ('org.mpris.Totem', bus = dbus.SessionBus ())
10062 - self.root = Root (name, self.object)
10063 - self.player = Player (name, self.object)
10064 - self.track_list = TrackList (name, self.object)
10066 - def do_deactivate(self):
10067 - self.root.disconnect() # ensure we don't leak our paths on the bus
10068 - self.player.disconnect()
10069 - self.track_list.disconnect()
10071 -class Root (dbus.service.Object):
10072 - def __init__(self, name, totem):
10073 - dbus.service.Object.__init__ (self, name, '/')
10074 - self.totem = totem
10076 - def disconnect(self):
10077 - self.remove_from_connection(None, None)
10079 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='s')
10080 - def Identity(self):
10081 - return self.totem.get_version()
10083 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='')
10085 - self.totem.action_exit()
10087 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='(qq)')
10088 - def MprisVersion(self):
10089 - return dbus.Struct((dbus.UInt16(1), dbus.UInt16(0)), signature='(qq)')
10091 -class Player(dbus.service.Object):
10092 - def __init__(self, name, totem):
10093 - dbus.service.Object.__init__(self, name, '/Player')
10094 - self.totem = totem
10096 - self.null_metadata = {"year" : "", "tracknumber" : "", "location" : "",
10097 - "title" : "", "album" : "", "time" : "", "genre" : "", "artist" : ""}
10098 - self.old_metadata = self.null_metadata.copy()
10099 - self.current_metadata = self.null_metadata.copy()
10100 - self.old_caps = 64 # at startup, we can only support a playlist
10101 - self.old_status = (2, 0, 0, 0) # startup state
10103 - totem.connect("metadata-updated", self.do_update_metadata)
10104 - totem.connect("notify::playing", self.do_notify)
10105 - totem.connect("notify::seekable", self.do_notify)
10106 - totem.connect("notify::current-mrl", self.do_notify)
10108 - def do_update_metadata(self, totem, artist, title, album, num):
10109 - self.current_metadata = self.null_metadata.copy()
10111 - self.current_metadata["title"] = title
10113 - self.current_metadata["artist"] = artist
10115 - self.current_metadata["album"] = album
10117 - self.current_metadata["tracknumber"] = num
10119 - if totem.is_playing():
10120 - self.track_change(self.current_metadata)
10122 - def do_notify(self, totem, status):
10123 - if totem.is_playing():
10124 - self.track_change(self.current_metadata)
10126 - self.track_change(self.null_metadata)
10128 - status = self.calculate_status()
10129 - if status != self.old_status:
10130 - self.status_change(status)
10132 - caps = self.calculate_caps()
10133 - if caps != self.old_caps:
10134 - self.caps_change(caps)
10136 - def calculate_status(self):
10137 - if self.totem.is_playing():
10138 - playing_status = 0
10139 - elif self.totem.is_paused():
10140 - playing_status = 1
10142 - playing_status = 2
10144 - if self.totem.action_remote_get_setting(Totem.RemoteSetting.SHUFFLE):
10145 - shuffle_status = 1
10147 - shuffle_status = 0
10149 - if self.totem.action_remote_get_setting(Totem.RemoteSetting.REPEAT):
10150 - repeat_status = 1
10152 - repeat_status = 0
10155 - dbus.Int32(playing_status), # 0 = Playing, 1 = Paused, 2 = Stopped
10156 - dbus.Int32(self.totem.action_remote_get_setting(Totem.RemoteSetting.SHUFFLE)), # 0 = Playing linearly , 1 = Playing randomly
10157 - dbus.Int32(0), # 0 = Go to the next element once the current has finished playing , 1 = Repeat the current element
10158 - dbus.Int32(self.totem.action_remote_get_setting(Totem.RemoteSetting.REPEAT)) # 0 = Stop playing once the last element has been played, 1 = Never give up playing
10161 - def calculate_caps(self):
10162 - caps = 64 # we can always have a playlist
10163 - playlist_length = self.totem.get_playlist_length()
10164 - playlist_pos = self.totem.get_playlist_pos()
10166 - if playlist_pos < playlist_length - 1:
10167 - caps |= 1 << 0 # go next
10168 - if playlist_pos > 0:
10169 - caps |= 1 << 1 # go previous
10170 - if playlist_length > 0:
10171 - caps |= 1 << 2 # pause
10172 - caps |= 1 << 3 # play
10173 - if self.totem.is_seekable():
10174 - caps |= 1 << 4 # seek
10175 - if self.current_metadata != self.null_metadata:
10176 - caps |= 1 << 5 # get metadata
10180 - def track_change(self, metadata):
10181 - if self.old_metadata != metadata:
10182 - self.old_metadata = metadata.copy()
10183 - self.TrackChange(metadata)
10185 - def status_change(self, status):
10186 - if self.old_status != status:
10187 - self.old_status = status
10188 - self.StatusChange(status)
10190 - def caps_change(self, caps):
10191 - if self.old_caps != caps:
10192 - self.old_caps = caps
10193 - self.CapsChange(caps)
10195 - def disconnect(self):
10196 - self.TrackChange(self.null_metadata)
10197 - self.remove_from_connection(None, None)
10199 - @dbus.service.signal(dbus_interface = "org.freedesktop.MediaPlayer", signature='a{sv}')
10200 - def TrackChange(self, metadata):
10203 - @dbus.service.signal(dbus_interface = "org.freedesktop.MediaPlayer", signature='(iiii)')
10204 - def StatusChange(self, status):
10207 - @dbus.service.signal(dbus_interface = "org.freedesktop.MediaPlayer", signature='i')
10208 - def CapsChange(self, caps):
10211 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='')
10213 - self.totem.action_next()
10215 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='')
10217 - self.totem.action_previous()
10219 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='')
10221 - self.totem.action_play_pause()
10223 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='')
10225 - self.totem.action_stop()
10227 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='')
10229 - # If playing : rewind to the beginning of current track, else : start playing.
10230 - if self.totem.is_playing():
10231 - self.totem.action_seek_time(0, False)
10233 - self.totem.action_play()
10235 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='b', out_signature='')
10236 - def Repeat(self, value):
10237 - pass # we don't support repeating individual tracks
10239 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='(iiii)')
10240 - def GetStatus(self):
10241 - status = self.calculate_status()
10242 - self.old_status = status
10243 - return dbus.Struct(status, signature='(iiii)')
10245 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='a{sv}')
10246 - def GetMetadata(self):
10247 - return self.current_metadata
10249 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='i')
10250 - def GetCaps(self):
10251 - caps = self.calculate_caps()
10252 - self.old_caps = caps
10255 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='i', out_signature='')
10256 - def VolumeSet(self, volume):
10257 - self.totem.action_volume(volume / 100.0)
10259 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='i')
10260 - def VolumeGet(self):
10261 - return dbus.Int32(self.totem.get_volume() * 100)
10263 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='i', out_signature='')
10264 - def PositionSet(self, position):
10265 - self.totem.action_seek_time(position, False)
10267 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='i')
10268 - def PositionGet(self):
10269 - return dbus.Int32(self.totem.props.current_time)
10271 -class TrackList(dbus.service.Object):
10272 - def __init__(self, name, totem):
10273 - dbus.service.Object.__init__(self, name, '/TrackList')
10274 - self.totem = totem
10276 - def disconnect(self):
10277 - self.remove_from_connection(None, None)
10279 - @dbus.service.signal(dbus_interface = "org.freedesktop.MediaPlayer", signature='i')
10280 - def TrackListChange(self, length):
10281 - # TODO: we can't implement this until TotemPlaylist is exposed in the Python API
10284 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='i', out_signature='a{sv}')
10285 - def GetMetadata(self, pos):
10286 - # Since the API doesn't currently exist in Totem to get the rest of the metadata, we can only return the title
10287 - return { "title" : self.totem.get_title_at_playlist_pos(pos) }
10289 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='i')
10290 - def GetCurrentTrack(self):
10291 - return self.totem.get_playlist_pos()
10293 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='', out_signature='i')
10294 - def GetLength(self):
10295 - return self.totem.get_playlist_length()
10297 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='sb', out_signature='i')
10298 - def AddTrack(self, uri, play_immediately):
10299 - # We can't currently support !play_immediately
10300 - self.totem.add_to_playlist_and_play(str(uri), '', True)
10303 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='i', out_signature='')
10304 - def DelTrack(self, pos):
10305 - # TODO: we need TotemPlaylist exposed by the Python API for this
10308 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='b', out_signature='')
10309 - def SetLoop(self, loop):
10310 - self.totem.action_remote_set_setting(Totem.RemoteSetting.REPEAT, loop)
10312 - @dbus.service.method(dbus_interface='org.freedesktop.MediaPlayer', in_signature='b', out_signature='')
10313 - def SetRandom(self, random):
10314 - self.totem.action_remote_set_setting(Totem.RemoteSetting.SHUFFLE, random)
10315 diff --git a/src/plugins/dbusservice/Makefile.am b/src/plugins/dbusservice/Makefile.am
10316 new file mode 100644
10317 index 0000000..ede3339
10319 +++ b/src/plugins/dbusservice/Makefile.am
10321 +include $(top_srcdir)/src/plugins/Makefile.plugins
10323 +plugindir = $(PLUGINDIR)/dbus
10324 +plugin_PYTHON = dbusservice.py
10326 +plugin_in_files = dbusservice.plugin.in
10328 +-include $(top_srcdir)/git.mk
10329 diff --git a/src/plugins/dbusservice/dbusservice.plugin.in b/src/plugins/dbusservice/dbusservice.plugin.in
10330 new file mode 100644
10331 index 0000000..6a9b9f2
10333 +++ b/src/plugins/dbusservice/dbusservice.plugin.in
10337 +Module=dbusservice
10339 +_Name=D-Bus Service
10340 +_Description=Plugin for sending notifications of currently playing movies to the D-Bus subsystem.
10341 +Authors=Lucky <lucky1.data@gmail.com>, Philip Withnall <philip@tecnocode.co.uk>
10342 +Copyright=Copyright © 2009 Lucky, Philip Withnall
10343 +Website=http://projects.gnome.org/totem/
10344 diff --git a/src/plugins/dbusservice/dbusservice.py b/src/plugins/dbusservice/dbusservice.py
10345 new file mode 100644
10346 index 0000000..83b96d1
10348 +++ b/src/plugins/dbusservice/dbusservice.py
10350 +# -*- coding: utf-8 -*-
10352 +## Totem D-Bus plugin
10353 +## Copyright (C) 2009 Lucky <lucky1.data@gmail.com>
10354 +## Copyright (C) 2009 Philip Withnall <philip@tecnocode.co.uk>
10356 +## This program is free software; you can redistribute it and/or modify
10357 +## it under the terms of the GNU General Public License as published by
10358 +## the Free Software Foundation; either version 2 of the License, or
10359 +## (at your option) any later version.
10361 +## This program is distributed in the hope that it will be useful,
10362 +## but WITHOUT ANY WARRANTY; without even the implied warranty of
10363 +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10364 +## GNU General Public License for more details.
10366 +## You should have received a copy of the GNU General Public License
10367 +## along with this program; if not, write to the Free Software
10368 +## Foundation, Inc., 51 Franklin St, Fifth Floor,
10369 +## Boston, MA 02110-1301 USA.
10371 +## Sunday 13th May 2007: Bastien Nocera: Add exception clause.
10372 +## See license_change file for details.
10375 +from gi.repository import GObject, Peas, Totem # pylint: disable-msg=E0611
10376 +import dbus, dbus.service
10377 +from dbus.mainloop.glib import DBusGMainLoop
10379 +gettext.textdomain ("totem")
10380 +_ = gettext.gettext
10382 +class DbusService (GObject.Object, Peas.Activatable):
10383 + __gtype_name__ = 'DbusService'
10385 + object = GObject.property (type = GObject.Object)
10387 + def __init__ (self):
10388 + GObject.Object.__init__ (self)
10392 + def do_activate (self):
10393 + DBusGMainLoop (set_as_default = True)
10395 + name = dbus.service.BusName ('org.mpris.MediaPlayer2.totem',
10396 + bus = dbus.SessionBus ())
10397 + self.root = Root (name, self.object)
10399 + def do_deactivate (self):
10400 + # Ensure we don't leak our paths on the bus
10401 + self.root.disconnect ()
10403 +class Root (dbus.service.Object): # pylint: disable-msg=R0923,R0904
10404 + def __init__ (self, name, totem):
10405 + dbus.service.Object.__init__ (self, name, '/org/mpris/MediaPlayer2')
10406 + self.totem = totem
10408 + self.null_metadata = {
10409 + 'year' : '', 'tracknumber' : '', 'location' : '',
10410 + 'title' : '', 'album' : '', 'time' : '', 'genre' : '',
10413 + self.current_metadata = self.null_metadata.copy ()
10414 + self.current_position = 0
10416 + totem.connect ('metadata-updated', self.__do_update_metadata)
10417 + totem.connect ('notify::playing', self.__do_notify_playing)
10418 + totem.connect ('notify::seekable', self.__do_notify_seekable)
10419 + totem.connect ('notify::current-mrl', self.__do_notify_current_mrl)
10420 + totem.connect ('notify::current-time', self.__do_notify_current_time)
10422 + def disconnect (self):
10423 + self.totem.disconnect_by_func (self.__do_notify_current_time)
10424 + self.totem.disconnect_by_func (self.__do_notify_current_mrl)
10425 + self.totem.disconnect_by_func (self.__do_notify_seekable)
10426 + self.totem.disconnect_by_func (self.__do_notify_playing)
10427 + self.totem.disconnect_by_func (self.__do_update_metadata)
10429 + self.__do_update_metadata (self.totem, '', '', '', 0)
10431 + self.remove_from_connection (None, None)
10433 + def __calculate_playback_status (self):
10434 + if self.totem.is_playing ():
10436 + elif self.totem.is_paused ():
10441 + def __calculate_metadata (self):
10443 + 'mpris:trackid': dbus.String (self.totem.props.current_mrl,
10444 + variant_level = 1),
10445 + 'mpris:length': dbus.Int64 (
10446 + self.totem.props.stream_length * 1000L,
10447 + variant_level = 1),
10450 + if self.current_metadata['title'] != '':
10451 + metadata['xesam:title'] = dbus.String (
10452 + self.current_metadata['title'], variant_level = 1)
10454 + if self.current_metadata['artist'] != '':
10455 + metadata['xesam:artist'] = dbus.Array (
10456 + [ self.current_metadata['artist'] ], variant_level = 1)
10458 + if self.current_metadata['album'] != '':
10459 + metadata['xesam:album'] = dbus.String (
10460 + self.current_metadata['album'], variant_level = 1)
10462 + if self.current_metadata['tracknumber'] != '':
10463 + metadata['xesam:trackNumber'] = dbus.Int32 (
10464 + self.current_metadata['tracknumber'], variant_level = 1)
10468 + def __do_update_metadata (self, totem, artist, # pylint: disable-msg=R0913
10469 + title, album, num):
10470 + self.current_metadata = self.null_metadata.copy ()
10472 + self.current_metadata['title'] = title
10474 + self.current_metadata['artist'] = artist
10476 + self.current_metadata['album'] = album
10478 + self.current_metadata['tracknumber'] = num
10480 + self.PropertiesChanged ('org.mpris.MediaPlayer2.Player',
10481 + { 'Metadata': self.__calculate_metadata () }, [])
10483 + def __do_notify_playing (self, totem, prop):
10484 + self.PropertiesChanged ('org.mpris.MediaPlayer2.Player',
10485 + { 'PlaybackStatus': self.__calculate_playback_status () }, [])
10487 + def __do_notify_current_mrl (self, totem, prop):
10488 + self.PropertiesChanged ('org.mpris.MediaPlayer2.Player', {
10489 + 'CanPlay': (self.totem.props.current_mrl != None),
10490 + 'CanPause': (self.totem.props.current_mrl != None),
10491 + 'CanSeek': (self.totem.props.current_mrl != None and
10492 + self.totem.props.seekable),
10495 + def __do_notify_seekable (self, totem, prop):
10496 + self.PropertiesChanged ('org.mpris.MediaPlayer2.Player', {
10497 + 'CanSeek': (self.totem.props.current_mrl != None and
10498 + self.totem.props.seekable),
10501 + def __do_notify_current_time (self, totem, prop):
10502 + # Only notify of seeks if we've skipped more than 3 seconds
10503 + if abs (totem.props.current_time - self.current_position) > 3:
10504 + self.Seeked (totem.props.current_time * 1000L)
10506 + self.current_position = totem.props.current_time
10508 + # org.freedesktop.DBus.Properties interface
10509 + @dbus.service.method (dbus_interface = dbus.PROPERTIES_IFACE,
10510 + in_signature = 'ss', # pylint: disable-msg=C0103
10511 + out_signature = 'v')
10512 + def Get (self, interface_name, property_name):
10513 + return self.GetAll (interface_name)[property_name]
10515 + @dbus.service.method (dbus_interface = dbus.PROPERTIES_IFACE,
10516 + in_signature = 's', # pylint: disable-msg=C0103
10517 + out_signature = 'a{sv}')
10518 + def GetAll (self, interface_name):
10519 + if interface_name == 'org.mpris.MediaPlayer2':
10522 + 'CanRaise': True,
10523 + 'HasTrackList': False,
10524 + 'Identity': self.totem.get_version (),
10525 + 'DesktopEntry': 'totem',
10526 + 'SupportedUriSchemes': self.totem.get_supported_uri_schemes (),
10527 + 'SupportedMimeTypes': self.totem.get_supported_content_types (),
10529 + elif interface_name == 'org.mpris.MediaPlayer2.Player':
10530 + # Loop status (we don't support Track)
10531 + if self.totem.action_remote_get_setting (
10532 + Totem.RemoteSetting.REPEAT):
10533 + loop_status = 'Playlist'
10535 + loop_status = 'None'
10538 + shuffle = self.totem.action_remote_get_setting (
10539 + Totem.RemoteSetting.SHUFFLE)
10542 + 'PlaybackStatus': self.__calculate_playback_status (),
10543 + 'LoopStatus': loop_status, # TODO: Notifications
10545 + 'MinimumRate': 1.0,
10546 + 'MaximumRate': 1.0,
10547 + 'Shuffle': shuffle, # TODO: Notifications
10548 + 'Metadata': self.__calculate_metadata (),
10549 + 'Volume': self.totem.get_volume (), # TODO: Notifications
10550 + 'Position': self.totem.props.current_time * 1000L,
10551 + 'CanGoNext': True, # TODO
10552 + 'CanGoPrevious': True, # TODO
10553 + 'CanPlay': (self.totem.props.current_mrl != None),
10554 + 'CanPause': (self.totem.props.current_mrl != None),
10555 + 'CanSeek': (self.totem.props.current_mrl != None and
10556 + self.totem.props.seekable),
10557 + 'CanControl': True,
10560 + raise dbus.exceptions.DBusException (
10561 + 'org.mpris.MediaPlayer2.UnknownInterface',
10562 + _(u'The MediaPlayer2 object does not implement the ‘%s’ interface')
10563 + % interface_name)
10565 + @dbus.service.method (dbus_interface = dbus.PROPERTIES_IFACE,
10566 + in_signature = 'ssv') # pylint: disable-msg=C0103
10567 + def Set (self, interface_name, property_name, new_value):
10568 + if interface_name == 'org.mpris.MediaPlayer2':
10569 + raise dbus.exceptions.DBusException (
10570 + 'org.mpris.MediaPlayer2.ReadOnlyProperty',
10571 + _(u'The property ‘%s’ is not writeable.'))
10572 + elif interface_name == 'org.mpris.MediaPlayer2.Player':
10573 + if property_name == 'LoopStatus':
10574 + self.totem.action_remote_set_setting (
10575 + Totem.RemoteSetting.REPEAT, (new_value == 'Playlist'))
10576 + elif property_name == 'Rate':
10577 + # Ignore, since we don't support setting the rate
10579 + elif property_name == 'Shuffle':
10580 + self.totem.action_remote_set_setting (
10581 + Totem.RemoteSetting.SHUFFLE, new_value)
10582 + elif property_name == 'Volume':
10583 + self.totem.action_volume (new_value)
10585 + raise dbus.exceptions.DBusException (
10586 + 'org.mpris.MediaPlayer2.ReadOnlyProperty',
10587 + _(u'Unknown property ‘%s’ requested of a MediaPlayer 2 object')
10588 + % interface_name)
10590 + raise dbus.exceptions.DBusException (
10591 + 'org.mpris.MediaPlayer2.UnknownInterface',
10592 + _(u'The MediaPlayer2 object does not implement the ‘%s’ interface')
10593 + % interface_name)
10595 + @dbus.service.signal (dbus_interface = dbus.PROPERTIES_IFACE,
10596 + signature = 'sa{sv}as') # pylint: disable-msg=C0103
10597 + def PropertiesChanged (self, interface_name, changed_properties,
10598 + invalidated_properties):
10601 + # org.mpris.MediaPlayer2 interface
10602 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2',
10603 + in_signature = '', # pylint: disable-msg=C0103
10604 + out_signature = '')
10605 + def Raise (self):
10606 + main_window = self.totem.get_main_window ()
10607 + main_window.present ()
10609 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2',
10610 + in_signature = '', # pylint: disable-msg=C0103
10611 + out_signature = '')
10613 + self.totem.action_exit ()
10615 + # org.mpris.MediaPlayer2.Player interface
10616 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10617 + in_signature = '', # pylint: disable-msg=C0103
10618 + out_signature = '')
10620 + if self.totem.is_playing () or self.totem.is_paused ():
10623 + self.totem.action_next ()
10625 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10626 + in_signature = '', # pylint: disable-msg=C0103
10627 + out_signature = '')
10628 + def Previous (self):
10629 + if self.totem.is_playing () or self.totem.is_paused ():
10632 + self.totem.action_previous ()
10634 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10635 + in_signature = '', # pylint: disable-msg=C0103
10636 + out_signature = '')
10637 + def Pause (self):
10638 + self.totem.action_pause ()
10640 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10641 + in_signature = '', # pylint: disable-msg=C0103
10642 + out_signature = '')
10643 + def PlayPause (self):
10644 + self.totem.action_play_pause ()
10646 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10647 + in_signature = '', # pylint: disable-msg=C0103
10648 + out_signature = '')
10650 + self.totem.action_stop ()
10652 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10653 + in_signature = '', # pylint: disable-msg=C0103
10654 + out_signature = '')
10656 + # If playing or no track loaded: do nothing,
10657 + # else: start playing.
10658 + if self.totem.is_playing () or self.totem.props.current_mrl == None:
10661 + self.totem.action_play ()
10663 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10664 + in_signature = 'x', # pylint: disable-msg=C0103
10665 + out_signature = '')
10666 + def Seek (self, offset):
10667 + self.totem.action_seek_relative (offset / 1000L, False)
10669 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10670 + in_signature = 'ox', # pylint: disable-msg=C0103
10671 + out_signature = '')
10672 + def SetPosition (self, track_id, position):
10673 + position = position / 1000L
10675 + # Bail if the position is not in the permitted range
10676 + if position < 0 or position > self.totem.props.stream_length:
10679 + self.totem.action_seek_time (position, False)
10681 + @dbus.service.method (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10682 + in_signature = 's', # pylint: disable-msg=C0103
10683 + out_signature = '')
10684 + def OpenUri (self, uri):
10685 + if self.totem.action_set_mrl (uri):
10686 + self.totem.action_play ()
10688 + raise dbus.exceptions.DBusException (
10689 + 'org.mpris.MediaPlayer2.InvalidUri',
10690 + _(u'The URI ‘%s’ is not supported.') % uri)
10692 + @dbus.service.signal (dbus_interface = 'org.mpris.MediaPlayer2.Player',
10693 + signature = 'x') # pylint: disable-msg=C0103
10694 + def Seeked (self, position):
10696 diff --git a/src/plugins/grilo/Makefile.am b/src/plugins/grilo/Makefile.am
10697 new file mode 100644
10698 index 0000000..0efee37
10700 +++ b/src/plugins/grilo/Makefile.am
10702 +include $(top_srcdir)/src/plugins/Makefile.plugins
10704 +plugindir = $(PLUGINDIR)/grilo
10705 +plugin_LTLIBRARIES = libgrilo.la
10707 +plugin_in_files = grilo.plugin.in
10709 +uidir = $(plugindir)
10710 +ui_DATA = grilo.ui
10711 +EXTRA_DIST += $(ui_DATA)
10713 +confdir = $(plugindir)
10714 +conf_DATA = totem-grilo.conf
10715 +EXTRA_DIST += $(conf_DATA)
10717 +libgrilo_la_SOURCES = totem-grilo.c
10718 +libgrilo_la_LDFLAGS = $(plugin_ldflags)
10719 +libgrilo_la_LIBADD = \
10720 + $(plugin_libadd) \
10722 +libgrilo_la_CFLAGS = \
10723 + $(plugin_cflags) \
10724 + $(LIBGRILO_CFLAGS) \
10725 + -I $(top_srcdir)/src/backend
10727 +-include $(top_srcdir)/git.mk
10729 diff --git a/src/plugins/grilo/grilo.plugin.in b/src/plugins/grilo/grilo.plugin.in
10730 new file mode 100644
10731 index 0000000..bbc674c
10733 +++ b/src/plugins/grilo/grilo.plugin.in
10739 +_Name=Grilo Browser
10740 +_Description=A plugin to let you browse media content from various sources.
10741 +Authors=Iago Toral Quiroga <itoral@igalia.com>, Juan A. Suarez Romero <jasuarez@igalia.com>
10742 +Copyright=Copyright © 2011 Igalia S.L.
10743 +Website=http://live.gnome.org/Grilo/
10744 diff --git a/src/plugins/grilo/grilo.ui b/src/plugins/grilo/grilo.ui
10745 new file mode 100644
10746 index 0000000..e3ecda7
10748 +++ b/src/plugins/grilo/grilo.ui
10750 +<?xml version="1.0" encoding="UTF-8"?>
10752 + <!-- interface-requires gtk+ 3.0 -->
10753 + <object class="GtkAction" id="add-to-playlist">
10754 + <property name="label">Add to Playlist</property>
10755 + <property name="tooltip">add media to playlist</property>
10756 + <property name="stock_id">gtk-add</property>
10758 + <object class="GtkAction" id="copy-location">
10759 + <property name="label">Copy Location</property>
10760 + <property name="tooltip">copy media location</property>
10761 + <property name="stock_id">gtk-copy</property>
10763 + <object class="GtkAdjustment" id="gw_adj_max_items">
10764 + <property name="lower">1</property>
10765 + <property name="upper">10000</property>
10766 + <property name="value">300</property>
10767 + <property name="step_increment">5</property>
10769 + <object class="GtkTreeStore" id="gw_browse_store_results">
10771 + <!-- column-name source -->
10772 + <column type="GObject"/>
10773 + <!-- column-name content -->
10774 + <column type="GObject"/>
10775 + <!-- column-name thumbnail -->
10776 + <column type="GdkPixbuf"/>
10777 + <!-- column-name is_prethumbnail -->
10778 + <column type="gboolean"/>
10779 + <!-- column-name description -->
10780 + <column type="gchararray"/>
10781 + <!-- column-name duration -->
10782 + <column type="gchararray"/>
10783 + <!-- column-name page -->
10784 + <column type="gint"/>
10785 + <!-- column-name remaining -->
10786 + <column type="gint"/>
10789 + <object class="GtkScrolledWindow" id="gw_browse_window">
10790 + <property name="visible">True</property>
10791 + <property name="can_focus">True</property>
10792 + <property name="shadow_type">in</property>
10794 + <object class="GtkTreeView" id="gw_browse">
10795 + <property name="visible">True</property>
10796 + <property name="can_focus">True</property>
10797 + <property name="model">gw_browse_store_results</property>
10798 + <property name="enable_search">False</property>
10799 + <property name="search_column">4</property>
10800 + <child internal-child="selection">
10801 + <object class="GtkTreeSelection" id="treeview-selection1"/>
10804 + <object class="GtkTreeViewColumn" id="gw_browse_col_pix">
10805 + <property name="title" translatable="yes">Browse</property>
10807 + <object class="GtkCellRendererPixbuf" id="gw_browse_col_render_pix"/>
10809 + <attribute name="pixbuf">2</attribute>
10813 + <object class="GtkCellRendererText" id="gw_browse_col_render_desc"/>
10815 + <attribute name="markup">4</attribute>
10819 + <object class="GtkCellRendererText" id="gw_browse_col_render_dur"/>
10821 + <attribute name="text">5</attribute>
10829 + <object class="GtkVBox" id="gw_search">
10830 + <property name="visible">True</property>
10831 + <property name="can_focus">False</property>
10832 + <property name="border_width">6</property>
10833 + <property name="spacing">6</property>
10835 + <object class="GtkHBox" id="gw_combo_box">
10836 + <property name="visible">True</property>
10837 + <property name="can_focus">False</property>
10838 + <property name="spacing">6</property>
10840 + <object class="GtkLabel" id="gw_search_title">
10841 + <property name="visible">True</property>
10842 + <property name="can_focus">False</property>
10843 + <property name="label" translatable="yes">Search</property>
10846 + <property name="expand">False</property>
10847 + <property name="fill">True</property>
10848 + <property name="position">0</property>
10852 + <object class="GtkComboBox" id="gw_search_select_source">
10853 + <property name="visible">True</property>
10854 + <property name="can_focus">False</property>
10855 + <property name="model">gw_search_store_sources</property>
10857 + <object class="GtkCellRendererText" id="gw_search_source_col_name"/>
10859 + <attribute name="text">1</attribute>
10864 + <property name="expand">True</property>
10865 + <property name="fill">True</property>
10866 + <property name="position">1</property>
10871 + <property name="expand">False</property>
10872 + <property name="fill">True</property>
10873 + <property name="position">0</property>
10877 + <object class="GtkEntry" id="gw_search_text">
10878 + <property name="visible">True</property>
10879 + <property name="can_focus">True</property>
10880 + <property name="invisible_char">●</property>
10881 + <property name="activates_default">True</property>
10882 + <property name="shadow_type">etched-out</property>
10883 + <property name="caps_lock_warning">False</property>
10886 + <property name="expand">False</property>
10887 + <property name="fill">True</property>
10888 + <property name="position">1</property>
10892 + <object class="GtkScrolledWindow" id="gw_search_results_window">
10893 + <property name="visible">True</property>
10894 + <property name="can_focus">True</property>
10895 + <property name="shadow_type">in</property>
10897 + <object class="GtkIconView" id="gw_search_results_view">
10898 + <property name="visible">True</property>
10899 + <property name="can_focus">True</property>
10900 + <property name="model">gw_search_store_results</property>
10902 + <object class="GtkCellRendererPixbuf" id="gw_search_result_thumbnail"/>
10904 + <attribute name="pixbuf">2</attribute>
10908 + <object class="GtkCellRendererText" id="gw_search_result_description">
10909 + <property name="ellipsize">end</property>
10910 + <property name="scale">0.75</property>
10913 + <attribute name="markup">4</attribute>
10920 + <property name="expand">True</property>
10921 + <property name="fill">True</property>
10922 + <property name="position">2</property>
10926 + <object class="GtkListStore" id="gw_search_store_results">
10928 + <!-- column-name source -->
10929 + <column type="GObject"/>
10930 + <!-- column-name content -->
10931 + <column type="GObject"/>
10932 + <!-- column-name thumbnail -->
10933 + <column type="GdkPixbuf"/>
10934 + <!-- column-name is_prethumbnail -->
10935 + <column type="gboolean"/>
10936 + <!-- column-name description -->
10937 + <column type="gchararray"/>
10940 + <object class="GtkListStore" id="gw_search_store_sources">
10942 + <!-- column-name source -->
10943 + <column type="GObject"/>
10944 + <!-- column-name name -->
10945 + <column type="gchararray"/>
10949 diff --git a/src/plugins/grilo/totem-grilo.c b/src/plugins/grilo/totem-grilo.c
10950 new file mode 100644
10951 index 0000000..e04d262
10953 +++ b/src/plugins/grilo/totem-grilo.c
10955 +/* -*- Mode: C; indent-tabs-mode: t -*- */
10958 + * Copyright (C) 2010, 2011 Igalia S.L. <info@igalia.com>
10960 + * This program is free software; you can redistribute it and/or modify
10961 + * it under the terms of the GNU General Public License as published by
10962 + * the Free Software Foundation; either version 2 of the License, or
10963 + * (at your option) any later version.
10965 + * This program is distributed in the hope that it will be useful,
10966 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10967 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10968 + * GNU General Public License for more details.
10970 + * You should have received a copy of the GNU General Public License
10971 + * along with this program; if not, write to the Free Software
10972 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
10974 + * The Totem project hereby grant permission for non-GPL compatible GStreamer
10975 + * plugins to be used and distributed together with GStreamer and Totem. This
10976 + * permission are above and beyond the permissions granted by the GPL license
10977 + * Totem is covered by.
10979 + * See license_change file for details.
10982 +#include "config.h"
10987 +#include <glib-object.h>
10988 +#include <glib/gi18n-lib.h>
10989 +#include <grilo.h>
10991 +#include <libpeas/peas-extension-base.h>
10992 +#include <libpeas/peas-object-module.h>
10993 +#include <libpeas/peas-activatable.h>
10994 +#include <libpeas-gtk/peas-gtk-configurable.h>
10996 +#include <totem-plugin.h>
10997 +#include <totem-interface.h>
10998 +#include <totem-dirs.h>
10999 +#include <totem.h>
11001 +#include <video-utils.h>
11003 +#define TOTEM_TYPE_GRILO_PLUGIN \
11004 + (totem_grilo_plugin_get_type ())
11005 +#define TOTEM_GRILO_PLUGIN(o) \
11006 + (G_TYPE_CHECK_INSTANCE_CAST ((o), TOTEM_TYPE_GRILO_PLUGIN, TotemGriloPlugin))
11007 +#define TOTEM_GRILO_PLUGIN_CLASS(k) \
11008 + (G_TYPE_CHECK_CLASS_CAST((k), TOTEM_TYPE_GRILO_PLUGIN, TotemGriloPluginClass))
11009 +#define TOTEM_IS_GRILO_PLUGIN(o) \
11010 + (G_TYPE_CHECK_INSTANCE_TYPE ((o), TOTEM_TYPE_GRILO_PLUGIN))
11011 +#define TOTEM_IS_GRILO_PLUGIN_CLASS(k) \
11012 + (G_TYPE_CHECK_CLASS_TYPE ((k), TOTEM_TYPE_GRILO_PLUGIN))
11013 +#define TOTEM_GRILO_PLUGIN_GET_CLASS(o) \
11014 + (G_TYPE_INSTANCE_GET_CLASS ((o), TOTEM_TYPE_GRILO_PLUGIN, TotemGriloPluginClass))
11016 +#define GRILO_POPUP_MENU \
11018 + "<popup name=\"grilo-popup\">" \
11019 + "<menuitem name=\"add-to-playlist\" action=\"add-to-playlist\"/>" \
11020 + "<menuitem name=\"copy-location\" action=\"copy-location\"/>" \
11024 +#define BROWSE_FLAGS (GRL_RESOLVE_FAST_ONLY | GRL_RESOLVE_IDLE_RELAY)
11025 +#define PAGE_SIZE 50
11026 +#define THUMB_SEARCH_SIZE 128
11027 +#define THUMB_BROWSE_SIZE 32
11028 +#define SCROLL_GET_MORE_LIMIT 0.8
11030 +#define TOTEM_GRILO_CONFIG_FILE "totem-grilo.conf"
11032 +const gchar *BLACKLIST_SOURCES[] = { "grl-filesystem",
11048 + /* Current media selected in results*/
11049 + GrlMedia *selected_media;
11051 + /* Thumb cache to speed up loading: maps url strings to GdkPixbuf thumbnails */
11052 + GHashTable *cache_thumbnails;
11054 + /* Search related information */
11055 + GrlMediaSource *search_source;
11057 + gint search_page;
11058 + gint search_remaining;
11059 + gchar *search_text;
11061 + /* Browser widgets */
11062 + GtkWidget *browser;
11063 + GtkTreeModel *browser_model;
11065 + /* Search widgets */
11066 + GtkWidget *search_entry;
11067 + GtkTreeModel *search_results_model;
11068 + GtkTreeModel *search_sources_model;
11069 + GtkWidget *search_sources_list;
11070 + GtkWidget *search_results_view;
11073 + GtkUIManager *ui_manager;
11074 + GtkActionGroup *action_group;
11076 + /* Configuration */
11078 +} TotemGriloPluginPrivate;
11080 +TOTEM_PLUGIN_REGISTER (TOTEM_TYPE_GRILO_PLUGIN, TotemGriloPlugin, totem_grilo_plugin)
11083 + TotemGriloPlugin *totem_grilo;
11084 + GtkTreeRowReference *ref_parent;
11088 + TotemGriloPlugin *totem_grilo;
11091 + GtkTreeRowReference *reference;
11093 +} SetThumbnailData;
11096 + SEARCH_MODEL_SOURCES_SOURCE = 0,
11097 + SEARCH_MODEL_SOURCES_NAME,
11101 + MODEL_RESULTS_SOURCE = 0,
11102 + MODEL_RESULTS_CONTENT,
11103 + MODEL_RESULTS_THUMBNAIL,
11104 + MODEL_RESULTS_IS_PRETHUMBNAIL,
11105 + MODEL_RESULTS_DESCRIPTION,
11106 + MODEL_RESULTS_DURATION,
11107 + MODEL_RESULTS_PAGE,
11108 + MODEL_RESULTS_REMAINING,
11111 +static void play (TotemGriloPlugin *self,
11112 + GrlMediaSource *source,
11114 + gboolean resolve_url);
11117 +get_description (GrlMedia *media)
11119 + const gchar *author;
11121 + author = grl_data_get_string (GRL_DATA (media), GRL_METADATA_KEY_AUTHOR);
11122 + if (author == NULL) {
11123 + author = grl_data_get_string (GRL_DATA (media), GRL_METADATA_KEY_ARTIST);
11126 + if (author != NULL) {
11127 + return g_markup_printf_escaped ("<b>%s</b>\n%s",
11128 + grl_media_get_title (media),
11131 + return g_markup_printf_escaped ("<b>%s</b>",
11132 + grl_media_get_title (media));
11137 +browse_keys (void)
11139 + static GList *_browse_keys = NULL;
11141 + if (_browse_keys == NULL) {
11142 + _browse_keys = grl_metadata_key_list_new (GRL_METADATA_KEY_ARTIST,
11143 + GRL_METADATA_KEY_AUTHOR,
11144 + GRL_METADATA_KEY_DURATION,
11145 + GRL_METADATA_KEY_THUMBNAIL,
11146 + GRL_METADATA_KEY_URL,
11147 + GRL_METADATA_KEY_TITLE,
11151 + return _browse_keys;
11155 +search_keys (void)
11157 + static GList *_search_keys = NULL;
11159 + if (_search_keys == NULL) {
11160 + _search_keys = grl_metadata_key_list_new (GRL_METADATA_KEY_ARTIST,
11161 + GRL_METADATA_KEY_AUTHOR,
11162 + GRL_METADATA_KEY_THUMBNAIL,
11163 + GRL_METADATA_KEY_URL,
11164 + GRL_METADATA_KEY_TITLE,
11168 + return _search_keys;
11171 +static GdkPixbuf *
11172 +load_icon (TotemGriloPlugin *self, IconType icon_type, gint thumb_size)
11174 + GdkScreen *screen;
11175 + GtkIconTheme *theme;
11177 + const gchar *icon_name[] = { GTK_STOCK_DIRECTORY,
11178 + "audio-x-generic",
11179 + "video-x-generic",
11180 + GTK_STOCK_FILE };
11182 + static GdkPixbuf *pixbuf[G_N_ELEMENTS(icon_name)] = { NULL };
11184 + if (pixbuf[icon_type] == NULL) {
11185 + screen = gtk_window_get_screen (totem_get_main_window (self->priv->totem));
11186 + theme = gtk_icon_theme_get_for_screen (screen);
11187 + pixbuf[icon_type] = gtk_icon_theme_load_icon (theme,
11188 + icon_name[icon_type],
11189 + thumb_size, 0, NULL);
11192 + if (pixbuf[icon_type] != NULL) {
11193 + return g_object_ref (pixbuf[icon_type]);
11199 +static GdkPixbuf *
11200 +get_icon (TotemGriloPlugin *self, GrlMedia *media, gint thumb_size)
11202 + if (GRL_IS_MEDIA_BOX (media)) {
11203 + return load_icon (self, ICON_BOX, thumb_size);
11204 + } else if (GRL_IS_MEDIA_AUDIO (media)) {
11205 + return load_icon (self, ICON_AUDIO, thumb_size);
11206 + } else if (GRL_IS_MEDIA_VIDEO (media)) {
11207 + return load_icon (self, ICON_VIDEO, thumb_size);
11209 + return load_icon (self, ICON_DEFAULT, thumb_size);
11214 +get_stream_thumbnail_cb (GObject *source_object,
11215 + GAsyncResult *res,
11216 + gpointer user_data)
11218 + GFileInputStream *stream;
11219 + GdkPixbuf *thumbnail = NULL;
11220 + GtkTreeIter iter;
11221 + SetThumbnailData *thumb_data = (SetThumbnailData *) user_data;
11223 + stream = g_file_read_finish (thumb_data->file, res, NULL);
11224 + if (stream != NULL) {
11225 + thumbnail = gdk_pixbuf_new_from_stream_at_scale (G_INPUT_STREAM (stream),
11226 + thumb_data->thumb_size,
11227 + thumb_data->thumb_size,
11228 + TRUE, NULL, NULL);
11229 + g_object_unref (stream);
11232 + gtk_tree_model_get_iter (thumb_data->totem_grilo->priv->search_results_model,
11234 + gtk_tree_row_reference_get_path (thumb_data->reference));
11237 + gtk_list_store_set (GTK_LIST_STORE (thumb_data->totem_grilo->priv->search_results_model),
11239 + MODEL_RESULTS_THUMBNAIL, thumbnail,
11242 + g_hash_table_insert (thumb_data->totem_grilo->priv->cache_thumbnails,
11243 + g_file_get_uri (thumb_data->file),
11247 + /* Free thumb data */
11248 + g_object_unref (thumb_data->totem_grilo);
11249 + g_object_unref (thumb_data->media);
11250 + g_object_unref (thumb_data->file);
11251 + gtk_tree_row_reference_free (thumb_data->reference);
11252 + g_slice_free (SetThumbnailData, thumb_data);
11256 +set_thumbnail_async (TotemGriloPlugin *self, GrlMedia *media, GtkTreePath *path, gint thumb_size)
11258 + const gchar *url_thumb;
11260 + SetThumbnailData *thumb_data;
11261 + GdkPixbuf *thumbnail;
11262 + GtkTreeIter iter;
11264 + url_thumb = grl_media_get_thumbnail (media);
11265 + if (url_thumb != NULL) {
11266 + /* Check cache */
11267 + thumbnail = g_hash_table_lookup (self->priv->cache_thumbnails,
11269 + if (thumbnail == NULL) {
11270 + /* Let's read the thumbnail stream and set the thumbnail */
11271 + file_uri = g_file_new_for_uri (url_thumb);
11272 + thumb_data = g_slice_new (SetThumbnailData);
11273 + thumb_data->totem_grilo = g_object_ref (self);
11274 + thumb_data->media = g_object_ref (media);
11275 + thumb_data->file = g_object_ref (file_uri);
11276 + thumb_data->reference = gtk_tree_row_reference_new (self->priv->search_results_model, path);
11277 + thumb_data->thumb_size = thumb_size;
11278 + g_file_read_async (file_uri, G_PRIORITY_DEFAULT, NULL,
11279 + get_stream_thumbnail_cb, thumb_data);
11280 + g_object_unref (file_uri);
11282 + /* Use cached thumbnail */
11283 + gtk_tree_model_get_iter (self->priv->search_results_model, &iter, path);
11284 + gtk_list_store_set (GTK_LIST_STORE (self->priv->search_results_model),
11286 + MODEL_RESULTS_THUMBNAIL, thumbnail,
11290 + /* Keep the icon */
11291 + gtk_tree_model_get_iter (self->priv->search_results_model, &iter, path);
11292 + gtk_list_store_set (GTK_LIST_STORE (self->priv->search_results_model),
11294 + MODEL_RESULTS_IS_PRETHUMBNAIL, FALSE,
11300 +update_search_thumbnails_idle (TotemGriloPlugin *self)
11302 + GtkTreePath *start_path;
11303 + GtkTreePath *end_path;
11305 + GtkTreeIter iter;
11306 + gboolean is_prethumbnail = FALSE;
11308 + if (gtk_icon_view_get_visible_range (GTK_ICON_VIEW (self->priv->search_results_view),
11309 + &start_path, &end_path)) {
11311 + gtk_tree_path_compare (start_path, end_path) <= 0;
11312 + gtk_tree_path_next (start_path)) {
11313 + if (gtk_tree_model_get_iter (self->priv->search_results_model, &iter, start_path) == FALSE) {
11317 + gtk_tree_model_get (self->priv->search_results_model,
11319 + MODEL_RESULTS_CONTENT, &media,
11320 + MODEL_RESULTS_IS_PRETHUMBNAIL, &is_prethumbnail,
11322 + if (is_prethumbnail) {
11323 + set_thumbnail_async (self, media, start_path, THUMB_SEARCH_SIZE);
11324 + gtk_list_store_set (GTK_LIST_STORE (self->priv->search_results_model),
11326 + MODEL_RESULTS_IS_PRETHUMBNAIL, FALSE,
11330 + g_object_unref (media);
11332 + gtk_tree_path_free (start_path);
11333 + gtk_tree_path_free (end_path);
11340 +update_search_thumbnails (TotemGriloPlugin *self)
11342 + g_idle_add ((GSourceFunc) update_search_thumbnails_idle, self);
11346 +show_sources (TotemGriloPlugin *self)
11348 + GList *sources, *source;
11349 + GtkTreeIter iter;
11350 + GrlPluginRegistry *registry;
11351 + const gchar *name;
11354 + registry = grl_plugin_registry_get_default ();
11355 + sources = grl_plugin_registry_get_sources_by_operations (registry,
11359 + for (source = sources; source ; source = g_list_next (source)) {
11360 + icon = load_icon (self, ICON_BOX, THUMB_BROWSE_SIZE);
11361 + name = grl_metadata_source_get_name (GRL_METADATA_SOURCE (source->data));
11362 + gtk_tree_store_append (GTK_TREE_STORE (self->priv->browser_model), &iter, NULL);
11363 + gtk_tree_store_set (GTK_TREE_STORE (self->priv->browser_model),
11365 + MODEL_RESULTS_SOURCE, source->data,
11366 + MODEL_RESULTS_CONTENT, NULL,
11367 + MODEL_RESULTS_DESCRIPTION, name,
11368 + MODEL_RESULTS_THUMBNAIL, icon,
11369 + MODEL_RESULTS_IS_PRETHUMBNAIL, FALSE,
11371 + if (icon != NULL) {
11372 + g_object_unref (icon);
11375 + g_list_free (sources);
11379 +browse_cb (GrlMediaSource *source,
11383 + gpointer user_data,
11384 + const GError *error)
11386 + gchar *description;
11387 + gchar *pretty_duration;
11389 + GtkTreeIter iter;
11390 + GdkPixbuf *thumbnail;
11391 + BrowseUserData *bud;
11392 + TotemGriloPlugin *self;
11393 + GtkTreeIter parent;
11394 + GtkTreePath *path;
11395 + GtkWindow *window;
11396 + gint remaining_expected;
11398 + bud = (BrowseUserData *) user_data;
11399 + self = bud->totem_grilo;
11401 + if (error != NULL &&
11402 + g_error_matches (error,
11404 + GRL_CORE_ERROR_OPERATION_CANCELLED) == FALSE) {
11405 + window = totem_get_main_window (self->priv->totem);
11406 + totem_interface_error (_("Browse Error"), error->message, window);
11409 + if (media != NULL) {
11410 + gtk_tree_model_get_iter (self->priv->browser_model, &parent, gtk_tree_row_reference_get_path (bud->ref_parent));
11411 + gtk_tree_model_get (self->priv->browser_model, &parent,
11412 + MODEL_RESULTS_REMAINING, &remaining_expected,
11414 + remaining_expected--;
11415 + gtk_tree_store_set (GTK_TREE_STORE (self->priv->browser_model), &parent,
11416 + MODEL_RESULTS_REMAINING, &remaining_expected,
11418 + /* Filter images */
11419 + if (GRL_IS_MEDIA_IMAGE (media) == FALSE) {
11420 + thumbnail = get_icon (self, media, THUMB_BROWSE_SIZE);
11421 + description = get_description (media);
11422 + duration = grl_media_get_duration (media);
11423 + if (duration > 0) {
11424 + pretty_duration = totem_time_to_string (duration * 1000);
11426 + pretty_duration = NULL;
11429 + gtk_tree_store_append (GTK_TREE_STORE (self->priv->browser_model), &iter, &parent);
11430 + gtk_tree_store_set (GTK_TREE_STORE (self->priv->browser_model),
11432 + MODEL_RESULTS_SOURCE, source,
11433 + MODEL_RESULTS_CONTENT, media,
11434 + MODEL_RESULTS_THUMBNAIL, thumbnail,
11435 + MODEL_RESULTS_IS_PRETHUMBNAIL, TRUE,
11436 + MODEL_RESULTS_DESCRIPTION, description,
11437 + MODEL_RESULTS_DURATION, pretty_duration,
11440 + if (thumbnail != NULL) {
11441 + g_object_unref (thumbnail);
11443 + g_free (description);
11444 + g_free (pretty_duration);
11446 + path = gtk_tree_model_get_path (self->priv->browser_model, &parent);
11447 + gtk_tree_view_expand_row (GTK_TREE_VIEW (self->priv->browser), path, FALSE);
11448 + gtk_tree_view_columns_autosize (GTK_TREE_VIEW (self->priv->browser));
11449 + gtk_tree_path_free (path);
11452 + g_object_unref (media);
11455 + if (remaining == 0) {
11456 + gtk_tree_row_reference_free (bud->ref_parent);
11457 + g_object_unref (bud->totem_grilo);
11458 + g_slice_free (BrowseUserData, bud);
11463 +browse (TotemGriloPlugin *self,
11464 + GtkTreePath *path,
11465 + GrlMediaSource *source,
11466 + GrlMedia *container,
11469 + if (source != NULL) {
11470 + BrowseUserData *bud = g_slice_new (BrowseUserData);
11471 + bud->totem_grilo = g_object_ref (self);
11472 + bud->ref_parent = gtk_tree_row_reference_new (self->priv->browser_model, path);
11473 + grl_media_source_browse (source,
11476 + (page - 1) * PAGE_SIZE, PAGE_SIZE,
11481 + show_sources (self);
11486 +resolve_url_cb (GrlMediaSource *source,
11489 + gpointer user_data,
11490 + const GError *error)
11492 + if (error != NULL) {
11493 + g_warning ("Failed to resolve URL for media: %s", error->message);
11497 + play (TOTEM_GRILO_PLUGIN (user_data), source, media, FALSE);
11501 +play (TotemGriloPlugin *self,
11502 + GrlMediaSource *source,
11504 + gboolean resolve_url)
11506 + const gchar *url;
11508 + url = grl_media_get_url (media);
11509 + if (url != NULL) {
11510 + totem_add_to_playlist_and_play (self->priv->totem, url,
11511 + grl_media_get_title (media),
11516 + /* If url is a slow key, then we need to full resolve it */
11517 + if (resolve_url) {
11518 + const GList *slow_keys;
11520 + slow_keys = grl_metadata_source_slow_keys (GRL_METADATA_SOURCE (source));
11521 + if (g_list_find ((GList *) slow_keys, GRL_METADATA_KEY_URL) != NULL) {
11522 + url_keys = grl_metadata_key_list_new (GRL_METADATA_KEY_URL, NULL);
11523 + grl_media_source_metadata (source, media, url_keys, 0, resolve_url_cb, self);
11524 + g_list_free (url_keys);
11529 + g_warning ("Current element has no URL to play");
11533 +search_cb (GrlMediaSource *source,
11537 + gpointer user_data,
11538 + const GError *error)
11540 + gchar *description;
11541 + GtkTreeIter iter;
11542 + GdkPixbuf *thumbnail;
11543 + GtkWindow *window;
11544 + TotemGriloPlugin *self;
11546 + self = TOTEM_GRILO_PLUGIN (user_data);
11548 + if (error != NULL &&
11549 + g_error_matches (error,
11551 + GRL_CORE_ERROR_OPERATION_CANCELLED) == FALSE) {
11552 + window = totem_get_main_window (self->priv->totem);
11553 + totem_interface_error (_("Search Error"), error->message, window);
11556 + if (media != NULL) {
11557 + self->priv->search_remaining--;
11558 + /* Filter images */
11559 + if (GRL_IS_MEDIA_IMAGE (media) == FALSE) {
11560 + thumbnail = get_icon (self, media, THUMB_SEARCH_SIZE);
11561 + description = get_description (media);
11563 + gtk_list_store_append (GTK_LIST_STORE (self->priv->search_results_model), &iter);
11564 + gtk_list_store_set (GTK_LIST_STORE (self->priv->search_results_model),
11566 + MODEL_RESULTS_SOURCE, source,
11567 + MODEL_RESULTS_CONTENT, media,
11568 + MODEL_RESULTS_THUMBNAIL, thumbnail,
11569 + MODEL_RESULTS_IS_PRETHUMBNAIL, TRUE,
11570 + MODEL_RESULTS_DESCRIPTION, description,
11573 + if (thumbnail != NULL) {
11574 + g_object_unref (thumbnail);
11576 + g_free (description);
11579 + g_object_unref (media);
11582 + if (remaining == 0) {
11583 + self->priv->search_id = 0;
11584 + gtk_widget_set_sensitive (self->priv->search_entry, TRUE);
11585 + update_search_thumbnails (self);
11590 +search_more (TotemGriloPlugin *self)
11592 + gtk_widget_set_sensitive (self->priv->search_entry, FALSE);
11593 + self->priv->search_page++;
11594 + self->priv->search_remaining = PAGE_SIZE;
11595 + self->priv->search_id = grl_media_source_search (self->priv->search_source,
11596 + self->priv->search_text,
11598 + (self->priv->search_page - 1) * PAGE_SIZE,
11603 + if (self->priv->search_id == 0) {
11604 + search_cb (self->priv->search_source, 0, NULL, 0, self, NULL);
11609 +search (TotemGriloPlugin *self, GrlMediaSource *source, const gchar *text)
11611 + gtk_list_store_clear (GTK_LIST_STORE (self->priv->search_results_model));
11612 + g_hash_table_remove_all (self->priv->cache_thumbnails);
11613 + gtk_widget_set_sensitive (self->priv->search_entry, FALSE);
11614 + self->priv->search_source = source;
11615 + g_free (self->priv->search_text);
11616 + self->priv->search_text = g_strdup (text);
11617 + self->priv->search_page = 0;
11618 + search_more (self);
11622 +search_entry_changed_cb (GtkEntry *entry, TotemGriloPlugin *self)
11624 + if (g_strcmp0 (gtk_entry_get_text (entry), "") == 0) {
11625 + g_object_set (G_OBJECT (entry),
11626 + "secondary-icon-name", "edit-find-symbolic",
11627 + "secondary-icon-activatable", FALSE,
11628 + "secondary-icon-sensitive", FALSE,
11631 + g_object_set (G_OBJECT (entry),
11632 + "secondary-icon-name", "edit-clear-symbolic",
11633 + "secondary-icon-activatable", TRUE,
11634 + "secondary-icon-sensitive", TRUE,
11640 +search_entry_activate_cb (GtkEntry *entry, TotemGriloPlugin *self)
11642 + GtkTreeIter iter;
11643 + GrlMediaSource *source = NULL;
11644 + const gchar *text;
11646 + if (gtk_widget_is_sensitive (self->priv->search_sources_list)) {
11647 + if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->priv->search_sources_list),
11649 + gtk_tree_model_get (self->priv->search_sources_model, &iter,
11650 + SEARCH_MODEL_SOURCES_SOURCE, &source,
11655 + text = gtk_entry_get_text (GTK_ENTRY (self->priv->search_entry));
11656 + search (self, source, text);
11658 + if (source != NULL) {
11659 + g_object_unref (source);
11664 +search_entry_clear_cb (GtkEntry *entry, TotemGriloPlugin *self)
11666 + gtk_entry_set_text (entry, "");
11670 +browser_activated_cb (GtkTreeView *tree_view,
11671 + GtkTreePath *path,
11672 + GtkTreeViewColumn *column,
11673 + gpointer user_data)
11677 + GtkTreeModel *model;
11678 + GtkTreeIter iter;
11679 + GrlMedia *content;
11680 + GrlMediaSource *source;
11681 + TotemGriloPlugin *self = TOTEM_GRILO_PLUGIN (user_data);
11683 + model = gtk_tree_view_get_model (tree_view);
11684 + gtk_tree_model_get_iter (model, &iter, path);
11685 + gtk_tree_model_get (model, &iter,
11686 + MODEL_RESULTS_SOURCE, &source,
11687 + MODEL_RESULTS_CONTENT, &content,
11688 + MODEL_RESULTS_PAGE, &page,
11689 + MODEL_RESULTS_REMAINING, &remaining,
11692 + if (content != NULL &&
11693 + GRL_IS_MEDIA_BOX (content) == FALSE) {
11694 + play (self, source, content, TRUE);
11698 + if (gtk_tree_model_iter_has_child (model, &iter)) {
11699 + if (gtk_tree_view_row_expanded (tree_view, path)) {
11700 + gtk_tree_view_collapse_row (tree_view, path);
11701 + gtk_tree_view_columns_autosize (GTK_TREE_VIEW (self->priv->browser));
11703 + gtk_tree_view_expand_row (tree_view, path, FALSE);
11708 + if (remaining == 0) {
11709 + gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
11710 + MODEL_RESULTS_PAGE, ++page,
11711 + MODEL_RESULTS_REMAINING, PAGE_SIZE,
11713 + browse (self, path, source, content, page);
11717 + if (source != NULL) {
11718 + g_object_unref (source);
11720 + if (content != NULL) {
11721 + g_object_unref (content);
11726 +search_source_changed_cb (GtkComboBox *combo,
11727 + TotemGriloPlugin *self)
11729 + if (self->priv->search_id > 0) {
11730 + grl_operation_cancel (self->priv->search_id);
11731 + self->priv->search_id = 0;
11733 + gtk_list_store_clear (GTK_LIST_STORE (self->priv->search_results_model));
11737 +search_activated_cb (GtkIconView *icon_view,
11738 + GtkTreePath *path,
11739 + gpointer user_data)
11741 + GtkTreeModel *model;
11742 + GtkTreeIter iter;
11743 + GrlMediaSource *source;
11744 + GrlMedia *content;
11746 + model = gtk_icon_view_get_model (icon_view);
11747 + gtk_tree_model_get_iter (model, &iter, path);
11748 + gtk_tree_model_get (model, &iter,
11749 + MODEL_RESULTS_SOURCE, &source,
11750 + MODEL_RESULTS_CONTENT, &content,
11753 + play (TOTEM_GRILO_PLUGIN (user_data), source, content, TRUE);
11755 + if (source != NULL) {
11756 + g_object_unref (source);
11759 + if (content != NULL) {
11760 + g_object_unref (content);
11765 +source_is_blacklisted (GrlMediaSource *source)
11767 + const gchar *id = grl_metadata_source_get_id (GRL_METADATA_SOURCE (source));
11768 + const gchar **s = BLACKLIST_SOURCES;
11771 + if (g_strcmp0 (*s, id) == 0) {
11781 +source_added_cb (GrlPluginRegistry *registry,
11782 + GrlMediaSource *source,
11783 + gpointer user_data)
11785 + const gchar *name;
11786 + gchar *description;
11788 + TotemGriloPlugin *self;
11789 + GtkTreeIter iter;
11790 + GrlSupportedOps ops;
11792 + if (source_is_blacklisted (source)) {
11793 + grl_plugin_registry_unregister_source (registry,
11794 + GRL_MEDIA_PLUGIN (source),
11799 + self = TOTEM_GRILO_PLUGIN (user_data);
11800 + icon = load_icon (self, ICON_BOX, THUMB_BROWSE_SIZE);
11801 + name = grl_metadata_source_get_name (GRL_METADATA_SOURCE (source));
11802 + ops = grl_metadata_source_supported_operations (GRL_METADATA_SOURCE (source));
11803 + if (ops & GRL_OP_BROWSE) {
11804 + description = g_markup_printf_escaped ("<b>%s</b>", name);
11805 + gtk_tree_store_append (GTK_TREE_STORE (self->priv->browser_model), &iter, NULL);
11806 + gtk_tree_store_set (GTK_TREE_STORE (self->priv->browser_model),
11808 + MODEL_RESULTS_SOURCE, source,
11809 + MODEL_RESULTS_CONTENT, NULL,
11810 + MODEL_RESULTS_DESCRIPTION, description,
11811 + MODEL_RESULTS_THUMBNAIL, icon,
11812 + MODEL_RESULTS_IS_PRETHUMBNAIL, TRUE,
11814 + g_free (description);
11816 + if (ops & GRL_OP_SEARCH) {
11817 + gtk_list_store_append (GTK_LIST_STORE (self->priv->search_sources_model), &iter);
11818 + gtk_list_store_set (GTK_LIST_STORE (self->priv->search_sources_model),
11820 + SEARCH_MODEL_SOURCES_SOURCE, source,
11821 + SEARCH_MODEL_SOURCES_NAME, name,
11823 + /* Select one of them */
11824 + if (gtk_combo_box_get_active (GTK_COMBO_BOX (self->priv->search_sources_list)) == -1) {
11825 + gtk_combo_box_set_active (GTK_COMBO_BOX (self->priv->search_sources_list), 0);
11826 + gtk_widget_set_sensitive (self->priv->search_entry, TRUE);
11830 + if (icon != NULL) {
11831 + g_object_unref (icon);
11836 +remove_browse_result (GtkTreeModel *model,
11837 + GtkTreePath *path,
11838 + GtkTreeIter *iter,
11839 + gpointer user_data)
11841 + GrlMediaSource *removed_source = GRL_MEDIA_SOURCE (user_data);
11842 + GrlMediaSource *model_source;
11843 + gboolean same_source;
11845 + gtk_tree_model_get (model, iter,
11846 + MODEL_RESULTS_SOURCE, &model_source,
11849 + same_source = (model_source == removed_source);
11851 + if (same_source) {
11852 + gtk_tree_store_remove (GTK_TREE_STORE (model), iter);
11855 + g_object_unref (model_source);
11857 + return same_source;
11861 +remove_searchable_source (GtkTreeModel *model,
11862 + GtkTreePath *path,
11863 + GtkTreeIter *iter,
11864 + gpointer user_data)
11866 + GrlMediaSource *removed_source = GRL_MEDIA_SOURCE (user_data);
11867 + GrlMediaSource *model_source;
11868 + gboolean same_source;
11870 + gtk_tree_model_get (model, iter,
11871 + MODEL_RESULTS_SOURCE, &model_source,
11874 + same_source = (model_source == removed_source);
11876 + if (same_source) {
11877 + gtk_list_store_remove (GTK_LIST_STORE (model), iter);
11880 + g_object_unref (model_source);
11882 + return same_source;
11886 +source_removed_cb (GrlPluginRegistry *registry,
11887 + GrlMediaSource *source,
11888 + gpointer user_data)
11890 + GrlSupportedOps ops;
11891 + TotemGriloPlugin *self = TOTEM_GRILO_PLUGIN (user_data);
11893 + ops = grl_metadata_source_supported_operations (GRL_METADATA_SOURCE (source));
11895 + /* Remove source and content from browse results */
11896 + if (ops & GRL_OP_BROWSE) {
11897 + gtk_tree_model_foreach (self->priv->browser_model,
11898 + remove_browse_result,
11902 + /* If current search results belongs to removed source, clear the results. In
11903 + any case, remove the source from the list of searchable sources */
11904 + if (ops & GRL_OP_SEARCH) {
11905 + if (self->priv->search_source == source) {
11906 + gtk_list_store_clear (GTK_LIST_STORE (self->priv->search_results_model));
11907 + self->priv->search_source = NULL;
11910 + gtk_tree_model_foreach (self->priv->search_sources_model,
11911 + remove_searchable_source,
11914 + /* Select one if the selected source was removed */
11915 + if (gtk_combo_box_get_active (GTK_COMBO_BOX (self->priv->search_sources_list)) == -1) {
11916 + gtk_combo_box_set_active (GTK_COMBO_BOX (self->priv->search_sources_list), 0);
11922 +load_grilo_plugins (TotemGriloPlugin *self)
11924 + GrlPluginRegistry *registry;
11925 + GError *error = NULL;
11927 + registry = grl_plugin_registry_get_default ();
11929 + g_signal_connect (registry, "source-added",
11930 + G_CALLBACK (source_added_cb), self);
11931 + g_signal_connect (registry, "source-removed",
11932 + G_CALLBACK (source_removed_cb), self);
11934 + if (grl_plugin_registry_load_all (registry, &error) == FALSE) {
11935 + g_warning ("Failed to load grilo plugins: %s", error->message);
11936 + g_error_free (error);
11941 +show_popup_menu (TotemGriloPlugin *self, GtkWidget *view, GdkEventButton *event)
11946 + GtkAction *action;
11947 + GtkTreeSelection *sel_tree;
11948 + GList *sel_list = NULL;
11949 + GtkTreeModel *model;
11950 + GtkTreeIter iter;
11951 + GrlMediaSource *source;
11952 + const gchar *url = NULL;
11954 + if (view == self->priv->browser) {
11955 + /* Selection happened in browser view */
11956 + sel_tree = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
11958 + if (gtk_tree_selection_get_selected (sel_tree, &model, &iter) == FALSE) {
11962 + /* Selection happened in search view */
11963 + sel_list = gtk_icon_view_get_selected_items (GTK_ICON_VIEW (view));
11968 + model = self->priv->search_results_model;
11970 + gtk_tree_model_get_iter (model,
11972 + (GtkTreePath *) sel_list->data);
11974 + g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
11975 + g_list_free (sel_list);
11978 + /* Get rid of previously selected media */
11979 + if (self->priv->selected_media != NULL) {
11980 + g_object_unref (self->priv->selected_media);
11983 + gtk_tree_model_get (model, &iter,
11984 + MODEL_RESULTS_SOURCE, &source,
11985 + MODEL_RESULTS_CONTENT, &(self->priv->selected_media),
11988 + if (event != NULL) {
11989 + button = event->button;
11990 + _time = event->time;
11992 + _time = gtk_get_current_event_time ();
11995 + if (self->priv->selected_media != NULL) {
11996 + url = grl_media_get_url (self->priv->selected_media);
11999 + action = gtk_action_group_get_action (self->priv->action_group, "add-to-playlist");
12000 + gtk_action_set_sensitive (action, url != NULL);
12001 + action = gtk_action_group_get_action (self->priv->action_group, "copy-location");
12002 + gtk_action_set_sensitive (action, url != NULL);
12004 + menu = gtk_ui_manager_get_widget (self->priv->ui_manager, "/grilo-popup");
12005 + gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
12006 + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
12009 + if (source != NULL) {
12010 + g_object_unref (source);
12017 +popup_menu_cb (GtkWidget *view, TotemGriloPlugin *self)
12019 + return show_popup_menu (self, view, NULL);
12023 +context_button_pressed_cb (GtkWidget *view,
12024 + GdkEventButton *event,
12025 + TotemGriloPlugin *self)
12027 + if (event->type == GDK_BUTTON_PRESS && event->button == 3) {
12028 + return show_popup_menu (self, view, event);
12035 +adjustment_over_limit (GtkAdjustment *adjustment)
12037 + if ((gtk_adjustment_get_value (adjustment) + gtk_adjustment_get_page_size (adjustment)) / gtk_adjustment_get_upper (adjustment) > SCROLL_GET_MORE_LIMIT) {
12045 +adjustment_value_changed_cb (GtkAdjustment *adjustment,
12046 + TotemGriloPlugin *self)
12048 + update_search_thumbnails (self);
12050 + /* Do not get more results if search is in progress */
12051 + if (self->priv->search_id != 0) {
12055 + /* Do not get more results if there are no more results to get :) */
12056 + if (self->priv->search_remaining > 0) {
12060 + if (adjustment_over_limit (adjustment)) {
12061 + search_more (self);
12066 +adjustment_changed_cb (GtkAdjustment *adjustment,
12067 + TotemGriloPlugin *self)
12069 + update_search_thumbnails (self);
12073 +get_more_browse_results_cb (GtkAdjustment *adjustment,
12074 + TotemGriloPlugin *self)
12076 + GtkTreePath *start_path;
12077 + GtkTreePath *end_path;
12078 + GtkTreePath *parent_path;
12079 + GtkTreeIter iter;
12080 + GrlMediaSource *source;
12081 + GrlMedia *container;
12084 + gboolean stop_processing = FALSE;
12086 + if (adjustment_over_limit (adjustment) == FALSE) {
12090 + if (gtk_tree_view_get_visible_range (GTK_TREE_VIEW (self->priv->browser),
12091 + &start_path, &end_path) == FALSE) {
12095 + /* Start to check from last visible element, and check if its parent can get more elements */
12096 + while (gtk_tree_path_compare (start_path, end_path) <= 0 &&
12097 + stop_processing == FALSE) {
12098 + if (gtk_tree_path_get_depth (end_path) <= 1) {
12099 + goto continue_next;
12101 + parent_path = gtk_tree_path_copy (end_path);
12102 + if (gtk_tree_path_up (parent_path) == FALSE ||
12103 + gtk_tree_model_get_iter (self->priv->browser_model, &iter, parent_path) == FALSE) {
12104 + gtk_tree_path_free (parent_path);
12105 + goto continue_next;
12107 + gtk_tree_model_get (self->priv->browser_model,
12109 + MODEL_RESULTS_SOURCE, &source,
12110 + MODEL_RESULTS_CONTENT, &container,
12111 + MODEL_RESULTS_PAGE, &page,
12112 + MODEL_RESULTS_REMAINING, &remaining,
12114 + /* Skip non-boxes (they can not be browsed) */
12115 + if (container != NULL &&
12116 + GRL_IS_MEDIA_BOX (container) == FALSE) {
12117 + goto free_elements;
12120 + /* In case of containers, check that more elements can be obtained */
12121 + if (remaining > 0) {
12122 + goto free_elements;
12125 + /* Continue browsing */
12126 + gtk_tree_store_set (GTK_TREE_STORE (self->priv->browser_model),
12128 + MODEL_RESULTS_PAGE, ++page,
12129 + MODEL_RESULTS_REMAINING, PAGE_SIZE,
12131 + browse (self, parent_path, source, container, page);
12132 + stop_processing = TRUE;
12135 + if (source != NULL) {
12136 + g_object_unref (source);
12138 + if (container != NULL) {
12139 + g_object_unref (container);
12141 + if (parent_path) {
12142 + gtk_tree_path_free (parent_path);
12146 + stop_processing = stop_processing || (gtk_tree_path_prev (end_path) == FALSE);
12149 + gtk_tree_path_free (start_path);
12150 + gtk_tree_path_free (end_path);
12154 +setup_sidebar_browse (TotemGriloPlugin *self,
12155 + GtkBuilder *builder)
12157 + self->priv->browser_model = GTK_TREE_MODEL (gtk_builder_get_object (builder, "gw_browse_store_results"));
12158 + self->priv->browser = GTK_WIDGET (gtk_builder_get_object (builder, "gw_browse"));
12160 + g_signal_connect (self->priv->browser, "row-activated",
12161 + G_CALLBACK (browser_activated_cb), self);
12162 + g_signal_connect (self->priv->browser, "popup-menu",
12163 + G_CALLBACK (popup_menu_cb), self);
12164 + g_signal_connect (self->priv->browser,
12165 + "button-press-event",
12166 + G_CALLBACK (context_button_pressed_cb), self);
12167 + g_signal_connect (gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (self->priv->browser)),
12169 + G_CALLBACK (get_more_browse_results_cb),
12172 + totem_add_sidebar_page (self->priv->totem,
12173 + "grilo-browse", _("Browse"),
12174 + GTK_WIDGET (gtk_builder_get_object (builder, "gw_browse_window")));
12178 +setup_sidebar_search (TotemGriloPlugin *self,
12179 + GtkBuilder *builder)
12181 + self->priv->search_results_model = GTK_TREE_MODEL (gtk_builder_get_object (builder, "gw_search_store_results"));
12182 + self->priv->search_sources_model = GTK_TREE_MODEL (gtk_builder_get_object (builder, "gw_search_store_sources"));
12183 + self->priv->search_sources_list = GTK_WIDGET (gtk_builder_get_object (builder, "gw_search_select_source"));
12184 + self->priv->search_results_view = GTK_WIDGET (gtk_builder_get_object (builder, "gw_search_results_view"));
12185 + self->priv->search_entry = GTK_WIDGET (gtk_builder_get_object (builder, "gw_search_text"));
12187 + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self->priv->search_sources_model),
12188 + SEARCH_MODEL_SOURCES_NAME,
12189 + GTK_SORT_ASCENDING);
12191 + gtk_widget_set_sensitive (self->priv->search_entry, FALSE);
12193 + g_signal_connect (self->priv->search_sources_list,
12195 + G_CALLBACK (search_source_changed_cb), self);
12197 + g_signal_connect (self->priv->search_results_view,
12198 + "item-activated",
12199 + G_CALLBACK (search_activated_cb),
12201 + g_signal_connect (self->priv->search_results_view,
12203 + G_CALLBACK (popup_menu_cb), self);
12204 + g_signal_connect (self->priv->search_results_view,
12205 + "button-press-event",
12206 + G_CALLBACK (context_button_pressed_cb), self);
12207 + g_signal_connect (self->priv->search_entry,
12209 + G_CALLBACK (search_entry_changed_cb), self);
12211 + g_signal_connect (self->priv->search_entry,
12213 + G_CALLBACK (search_entry_activate_cb),
12215 + g_signal_connect (self->priv->search_entry,
12217 + G_CALLBACK (search_entry_clear_cb),
12220 + g_object_set (G_OBJECT (self->priv->search_entry),
12221 + "secondary-icon-name", "edit-find-symbolic",
12222 + "secondary-icon-activatable", FALSE,
12223 + "secondary-icon-sensitive", FALSE,
12226 + g_signal_connect (gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gtk_builder_get_object (builder,
12227 + "gw_search_results_window"))),
12229 + G_CALLBACK (adjustment_value_changed_cb),
12232 + g_signal_connect (gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gtk_builder_get_object (builder,
12233 + "gw_search_results_window"))),
12235 + G_CALLBACK (adjustment_changed_cb),
12238 + totem_add_sidebar_page (self->priv->totem,
12239 + "grilo-search", _("Search"),
12240 + GTK_WIDGET (gtk_builder_get_object (builder, "gw_search")));
12244 +add_to_pls_cb (GtkAction *action, TotemGriloPlugin *self)
12246 + totem_add_to_playlist_and_play (self->priv->totem,
12247 + grl_media_get_url (self->priv->selected_media),
12248 + grl_media_get_title (self->priv->selected_media),
12253 +copy_location_cb (GtkAction *action, TotemGriloPlugin *self)
12255 + GtkClipboard *clip;
12256 + const gchar *url;
12258 + url = grl_media_get_url (self->priv->selected_media);
12259 + if (url != NULL) {
12260 + clip = gtk_clipboard_get_for_display (gdk_display_get_default (),
12261 + GDK_SELECTION_CLIPBOARD);
12262 + gtk_clipboard_set_text (clip, url, -1);
12263 + clip = gtk_clipboard_get_for_display (gdk_display_get_default (),
12264 + GDK_SELECTION_PRIMARY);
12265 + gtk_clipboard_set_text (clip, url, -1);
12270 +setup_menus (TotemGriloPlugin *self,
12271 + GtkBuilder *builder)
12273 + GtkAction *action;
12274 + GError *error =NULL;
12276 + self->priv->ui_manager = gtk_ui_manager_new ();
12277 + self->priv->action_group = gtk_action_group_new ("grilo-action-group");
12279 + action = GTK_ACTION (gtk_builder_get_object (builder, "add-to-playlist"));
12280 + g_signal_connect (action, "activate", G_CALLBACK (add_to_pls_cb), self);
12281 + gtk_action_group_add_action_with_accel (self->priv->action_group, action, NULL);
12283 + action = GTK_ACTION (gtk_builder_get_object (builder, "copy-location"));
12284 + g_signal_connect (action, "activate", G_CALLBACK (copy_location_cb), self);
12285 + gtk_action_group_add_action_with_accel (self->priv->action_group, action, NULL);
12287 + gtk_ui_manager_insert_action_group (self->priv->ui_manager, self->priv->action_group, 1);
12288 + gtk_ui_manager_add_ui_from_string (self->priv->ui_manager,
12289 + GRILO_POPUP_MENU, -1, &error);
12290 + if (error != NULL) {
12291 + g_warning ("grilo-ui: Failed to create popup menu: %s", error->message);
12292 + g_error_free (error);
12298 +setup_ui (TotemGriloPlugin *self,
12299 + GtkBuilder *builder)
12301 + setup_sidebar_browse (self, builder);
12302 + setup_sidebar_search (self, builder);
12303 + setup_menus (self, builder);
12307 +setup_config (TotemGriloPlugin *self)
12309 + gchar *config_file;
12310 + GrlPluginRegistry *registry = grl_plugin_registry_get_default ();
12312 + /* Setup system-wide plugins configuration */
12313 + config_file = totem_plugin_find_file ("grilo", TOTEM_GRILO_CONFIG_FILE);
12315 + if (g_file_test (config_file, G_FILE_TEST_EXISTS)) {
12316 + grl_plugin_registry_add_config_from_file (registry, config_file, NULL);
12318 + g_free (config_file);
12320 + /* Setup user-defined plugins configuration */
12321 + config_file = g_build_path (G_DIR_SEPARATOR_S,
12322 + g_get_user_config_dir (),
12323 + g_get_prgname (),
12324 + TOTEM_GRILO_CONFIG_FILE,
12327 + if (g_file_test (config_file, G_FILE_TEST_EXISTS)) {
12328 + grl_plugin_registry_add_config_from_file (registry, config_file, NULL);
12330 + g_free (config_file);
12334 +impl_activate (PeasActivatable *plugin)
12336 + GtkBuilder *builder;
12337 + GtkWindow *main_window;
12339 + TotemGriloPlugin *self = TOTEM_GRILO_PLUGIN (plugin);
12340 + TotemGriloPluginPrivate *priv = self->priv;
12341 + priv->totem = g_object_ref (g_object_get_data (G_OBJECT (plugin), "object"));
12342 + main_window = totem_get_main_window (priv->totem);
12343 + priv->cache_thumbnails = g_hash_table_new_full (g_str_hash,
12348 + builder = totem_plugin_load_interface ("grilo", "grilo.ui", TRUE, main_window, self);
12349 + g_object_unref (main_window);
12350 + setup_ui (self, builder);
12351 + grl_init (0, NULL);
12352 + setup_config (self);
12353 + load_grilo_plugins (self);
12357 +impl_deactivate (PeasActivatable *plugin)
12359 + TotemGriloPlugin *self = TOTEM_GRILO_PLUGIN (plugin);
12362 + GrlPluginRegistry *registry;
12364 + totem_remove_sidebar_page (self->priv->totem, "grilo-browse");
12365 + totem_remove_sidebar_page (self->priv->totem, "grilo-search");
12367 + registry = grl_plugin_registry_get_default ();
12368 + g_signal_handlers_disconnect_by_func (registry, source_added_cb, self);
12369 + g_signal_handlers_disconnect_by_func (registry, source_removed_cb, self);
12371 + /* Shutdown all sources */
12372 + sources = grl_plugin_registry_get_sources (registry, FALSE);
12373 + for (s = sources; s; s = g_list_next (s)) {
12374 + grl_plugin_registry_unregister_source (registry,
12375 + GRL_MEDIA_PLUGIN (s->data),
12378 + g_list_free (sources);
12380 + /* Empty results */
12381 + gtk_tree_store_clear (GTK_TREE_STORE (self->priv->browser_model));
12382 + gtk_list_store_clear (GTK_LIST_STORE (self->priv->search_results_model));
12384 + g_object_unref (self->priv->totem);
12386 diff --git a/src/plugins/grilo/totem-grilo.conf b/src/plugins/grilo/totem-grilo.conf
12387 new file mode 100644
12388 index 0000000..682bf9c
12390 +++ b/src/plugins/grilo/totem-grilo.conf
12393 +api-key = db924d3b7f1d5f3d6fdfeb4488ad01e2
12394 +api-secret = bef979d87f28ec47
12397 +api-key = AI39si7Ix-bf9xRLx5PK1sjsG2FQjSHblunuaI8YvHdYbkV2BcgOemHE6Nzb9t6LaMsekofKGSwgAETzbo7OvL8L3vH4vrFaqw
12398 diff --git a/src/plugins/iplayer/iplayer.py b/src/plugins/iplayer/iplayer.py
12399 index 26baea0..de6c5a4 100644
12400 --- a/src/plugins/iplayer/iplayer.py
12401 +++ b/src/plugins/iplayer/iplayer.py
12402 @@ -1,233 +1,266 @@
12403 # -*- coding: utf-8 -*-
12407 -from gi.repository import Peas
12408 -from gi.repository import Gtk
12409 -from gi.repository import Totem
12410 +from gi.repository import GObject, Peas, Totem # pylint: disable-msg=E0611
12414 -gettext.textdomain("totem")
12415 +gettext.textdomain ("totem")
12417 D_ = gettext.dgettext
12418 _ = gettext.gettext
12420 -class IplayerPlugin (gobject.GObject, Peas.Activatable):
12421 - __gtype_name__ = 'IplayerPlugin'
12422 +class IplayerPlugin (GObject.Object, Peas.Activatable):
12423 + __gtype_name__ = 'IplayerPlugin'
12425 - object = gobject.property(type = gobject.GObject)
12426 + object = GObject.property (type = GObject.Object)
12428 - def __init__ (self):
12429 - self.debug = False
12430 - self.totem = None
12431 - self.programme_download_lock = threading.Lock ()
12432 + def __init__ (self):
12433 + GObject.Object.__init__ (self)
12435 - def do_activate (self):
12436 - self.totem = self.object
12437 - # Build the interface
12438 - builder = Totem.plugin_load_interface ("iplayer", "iplayer.ui", True, self.totem.get_main_window (), self)
12439 - container = builder.get_object ('iplayer_vbox')
12440 + self.debug = False
12441 + self.totem = None
12442 + self.programme_download_lock = threading.Lock ()
12444 - self.tv_tree_store = builder.get_object ('iplayer_programme_store')
12445 - programme_list = builder.get_object ('iplayer_programme_list')
12446 - programme_list.connect ('row-expanded', self._row_expanded_cb)
12447 - programme_list.connect ('row-activated', self._row_activated_cb)
12448 + self.tv_feed = None
12449 + self.tv_tree_store = None
12451 - container.show_all ()
12453 - self.tv = iplayer2.feed ('tv')
12455 - # Add the interface to Totem's sidebar
12456 - self.totem.add_sidebar_page ("iplayer", _(u"BBC iPlayer"), container)
12458 - # Get the channel category listings
12459 - self.populate_channel_list (self.tv, self.tv_tree_store)
12461 - def do_deactivate (self):
12462 - self.totem.remove_sidebar_page ("iplayer")
12464 - def populate_channel_list (self, feed, tree_store):
12466 - print "Populating channel list…"
12468 - # Add all the channels as top-level rows in the tree store
12469 - channels = feed.channels ()
12470 - for channel_id, title in channels.items ():
12471 - parent_iter = tree_store.append (None, (title, channel_id, None))
12473 - # Add the channels' categories in a thread, since they each require a network request
12474 - parent_path = tree_store.get_path (parent_iter)
12475 - thread = PopulateChannelsThread (self, parent_path, feed, tree_store)
12478 - def _populate_channel_list_cb (self, tree_store, parent_path, values):
12479 - # Callback from PopulateChannelsThread to add stuff to the tree store
12480 - if values == None:
12481 - self.totem.action_error (_(u'Error listing channel categories'), _(u'There was an unknown error getting the list of television channels available on BBC iPlayer.'))
12484 - parent_iter = tree_store.get_iter (parent_path)
12485 - category_iter = tree_store.append (parent_iter, values)
12487 - # Append a dummy child row so that the expander's visible; we can
12488 - # then queue off the expander to load the programme listing for this category
12489 - tree_store.append (category_iter, [_(u'Loading…'), None, None])
12493 - def _row_expanded_cb (self, tree_view, row_iter, path):
12494 - tree_model = tree_view.get_model ()
12497 - print "_row_expanded_cb called."
12499 - # We only care about the category level (level 1), and only when
12500 - # it has the "Loading..." placeholder child row
12501 - if get_iter_level (tree_model, row_iter) != 1 or tree_model.iter_n_children (row_iter) != 1:
12504 - # Populate it with programmes asynchronously
12505 - self.populate_programme_list (self.tv, tree_model, row_iter)
12507 - def _row_activated_cb (self, tree_view, path, view_column):
12508 - tree_store = tree_view.get_model ()
12509 - tree_iter = tree_store.get_iter (path)
12510 - if tree_iter == None:
12513 - mrl = tree_store.get_value (tree_iter, 2)
12515 - # Only allow programme rows to be activated, not channel or category rows
12519 - # Add the programme to the playlist and play it
12520 - self.totem.add_to_playlist_and_play (mrl, tree_store.get_value (tree_iter, 0), True)
12522 - def populate_programme_list (self, feed, tree_store, category_iter):
12524 - print "Populating programme list…"
12526 - category_path = tree_store.get_path (category_iter)
12527 - thread = PopulateProgrammesThread (self, feed, tree_store, category_path)
12530 - def _populate_programme_list_cb (self, tree_store, category_path, values, remove_placeholder):
12531 - # Callback from PopulateProgrammesThread to add stuff to the tree store
12532 - if values == None:
12533 - # Translators: the "programme feed" is the list of TV shows available to watch online
12534 - self.totem.action_error (_(u'Error getting programme feed'), _(u'There was an error getting the list of programmes for this channel and category combination.'))
12537 - category_iter = tree_store.get_iter (category_path)
12538 - if category_iter != None:
12539 - tree_store.append (category_iter, values)
12541 - # Remove the placeholder row
12542 - children = tree_store.iter_children (category_iter)
12543 - if remove_placeholder and children != None:
12544 - tree_store.remove (children)
12547 + def do_activate (self):
12548 + self.totem = self.object
12549 + # Build the interface
12550 + builder = Totem.plugin_load_interface ("iplayer", "iplayer.ui", True,
12551 + self.totem.get_main_window (),
12553 + container = builder.get_object ('iplayer_vbox')
12555 + self.tv_tree_store = builder.get_object ('iplayer_programme_store')
12556 + programme_list = builder.get_object ('iplayer_programme_list')
12557 + programme_list.connect ('row-expanded', self.__row_expanded_cb)
12558 + programme_list.connect ('row-activated', self.__row_activated_cb)
12560 + container.show_all ()
12562 + self.tv_feed = iplayer2.Feed ('tv')
12564 + # Add the interface to Totem's sidebar
12565 + self.totem.add_sidebar_page ("iplayer", _(u"BBC iPlayer"), container)
12567 + # Get the channel category listings
12568 + self._populate_channel_list (self.tv_feed, self.tv_tree_store)
12570 + def do_deactivate (self):
12571 + self.totem.remove_sidebar_page ("iplayer")
12573 + def _populate_channel_list (self, feed, tree_store):
12575 + print "Populating channel list…"
12577 + # Add all the channels as top-level rows in the tree store
12578 + channels = feed.channels ()
12579 + for channel_id, title in channels.items ():
12580 + tree_store.append (None, (title, channel_id, None))
12582 + # Add the channels' categories in a thread, since they each require a
12583 + # network request
12584 + thread = PopulateChannelsThread (self.__populate_channel_list_cb,
12585 + feed, tree_store)
12588 + def __populate_channel_list_cb (self, tree_store, parent_path, values):
12589 + # Callback from PopulateChannelsThread to add stuff to the tree store
12590 + if values == None:
12591 + self.totem.action_error (_(u'Error listing channel categories'),
12592 + _(u'There was an unknown error getting '\
12593 + 'the list of television channels '\
12594 + 'available on BBC iPlayer.'))
12597 + parent_iter = tree_store.get_iter (parent_path)
12598 + category_iter = tree_store.append (parent_iter, values)
12600 + # Append a dummy child row so that the expander's visible; we can
12601 + # then queue off the expander to load the programme listing for this
12603 + tree_store.append (category_iter, [_(u'Loading…'), None, None])
12607 + def __row_expanded_cb (self, tree_view, row_iter, path):
12608 + tree_model = tree_view.get_model ()
12611 + print "__row_expanded_cb called."
12613 + # We only care about the category level (level 1), and only when
12614 + # it has the "Loading..." placeholder child row
12615 + if (get_iter_level (tree_model, row_iter) != 1 or
12616 + tree_model.iter_n_children (row_iter) != 1):
12619 + # Populate it with programmes asynchronously
12620 + self._populate_programme_list (self.tv_feed, tree_model, row_iter)
12622 + def __row_activated_cb (self, tree_view, path, view_column):
12623 + tree_store = tree_view.get_model ()
12624 + tree_iter = tree_store.get_iter (path)
12625 + if tree_iter == None:
12628 + mrl = tree_store.get_value (tree_iter, 2)
12630 + # Only allow programme rows to be activated, not channel or category
12635 + # Add the programme to the playlist and play it
12636 + title = tree_store.get_value (tree_iter, 0)
12637 + self.totem.add_to_playlist_and_play (mrl, title, True)
12639 + def _populate_programme_list (self, feed, tree_store, category_iter):
12641 + print "Populating programme list…"
12643 + category_path = tree_store.get_path (category_iter)
12644 + thread = PopulateProgrammesThread (self,
12645 + self.__populate_programme_list_cb,
12646 + feed, (tree_store, category_path))
12649 + def __populate_programme_list_cb (self, tree_store, category_path, values,
12650 + remove_placeholder):
12651 + # Callback from PopulateProgrammesThread to add stuff to the tree store
12652 + if values == None:
12653 + # Translators: the "programme feed" is the list of TV shows
12654 + # available to watch online
12655 + self.totem.action_error (_(u'Error getting programme feed'),
12656 + _(u'There was an error getting the list '\
12657 + 'of programmes for this channel and '\
12658 + 'category combination.'))
12661 + category_iter = tree_store.get_iter (category_path)
12662 + if category_iter != None:
12663 + tree_store.append (category_iter, values)
12665 + # Remove the placeholder row
12666 + children = tree_store.iter_children (category_iter)
12667 + if remove_placeholder and children != None:
12668 + tree_store.remove (children)
12672 def get_iter_level (tree_model, tree_iter):
12675 - tree_iter = tree_model.iter_parent (tree_iter)
12676 - if tree_iter == None:
12682 + tree_iter = tree_model.iter_parent (tree_iter)
12683 + if tree_iter == None:
12688 def category_name_to_id (category_name):
12689 - return category_name.lower ().replace (' ', '_').replace ('&', 'and')
12690 + return category_name.lower ().replace (' ', '_').replace ('&', 'and')
12692 class PopulateChannelsThread (threading.Thread):
12693 - # Class to populate the channel list from the Internet
12694 - def __init__ (self, plugin, parent_path, feed, tree_model):
12695 - self.plugin = plugin
12697 - self.tree_model = tree_model
12698 - threading.Thread.__init__ (self)
12701 - shown_error = False
12702 - tree_iter = self.tree_model.get_iter_first ()
12703 - while (tree_iter != None):
12704 - channel_id = self.tree_model.get_value (tree_iter, 1)
12705 - parent_path = self.tree_model.get_path (tree_iter)
12708 - # Add this channel's categories as sub-rows
12709 - # We have to pass a path because the model could theoretically be modified
12710 - # while the idle function is waiting in the queue, invalidating an iter
12711 - for name, count in self.feed.get (channel_id).categories ():
12712 - category_id = category_name_to_id (name)
12713 - gobject.idle_add (self.plugin._populate_channel_list_cb, self.tree_model, parent_path, [name, category_id, None])
12715 - # Only show the error once, rather than for each channel (it gets a bit grating)
12716 - if not shown_error:
12717 - gobject.idle_add (self.plugin._populate_channel_list_cb, self.tree_model, parent_path, None)
12718 - shown_error = True
12720 - tree_iter = self.tree_model.iter_next (tree_iter)
12721 + # Class to populate the channel list from the Internet
12722 + def __init__ (self, callback, feed, tree_model):
12723 + self.callback = callback
12725 + self.tree_model = tree_model
12726 + threading.Thread.__init__ (self)
12729 + shown_error = False
12730 + tree_iter = self.tree_model.get_iter_first ()
12731 + while (tree_iter != None):
12732 + channel_id = self.tree_model.get_value (tree_iter, 1)
12733 + parent_path = self.tree_model.get_path (tree_iter)
12736 + # Add this channel's categories as sub-rows
12737 + # We have to pass a path because the model could theoretically
12738 + # be modified while the idle function is waiting in the queue,
12739 + # invalidating an iter
12740 + for name, _count in self.feed.get (channel_id).categories ():
12741 + category_id = category_name_to_id (name)
12742 + GObject.idle_add (self.callback,
12743 + self.tree_model, parent_path,
12744 + [name, category_id, None])
12745 + except StandardError:
12746 + # Only show the error once, rather than for each channel
12747 + # (it gets a bit grating)
12748 + if not shown_error:
12749 + GObject.idle_add (self.callback,
12750 + self.tree_model, parent_path, None)
12751 + shown_error = True
12753 + tree_iter = self.tree_model.iter_next (tree_iter)
12755 class PopulateProgrammesThread (threading.Thread):
12756 - # Class to populate the programme list for a channel/category combination from the Internet
12757 - def __init__ (self, plugin, feed, tree_model, category_path):
12758 - self.plugin = plugin
12760 - self.tree_model = tree_model
12761 - self.category_path = category_path
12762 - threading.Thread.__init__ (self)
12765 - self.plugin.programme_download_lock.acquire ()
12767 - category_iter = self.tree_model.get_iter (self.category_path)
12768 - if category_iter == None:
12769 - gobject.idle_add (self.plugin._populate_programme_list_cb, self.tree_model, self.category_path, None, False)
12770 - self.plugin.programme_download_lock.release ()
12773 - category_id = self.tree_model.get_value (category_iter, 1)
12774 - parent_iter = self.tree_model.iter_parent (category_iter)
12775 - channel_id = self.tree_model.get_value (parent_iter, 1)
12777 - # Retrieve the programmes and return them
12778 - feed = self.feed.get (channel_id).get (category_id)
12780 - gobject.idle_add (self.plugin._populate_programme_list_cb, self.tree_model, self.category_path, None, False)
12781 - self.plugin.programme_download_lock.release ()
12784 - # Get the programmes
12786 - programmes = feed.list ()
12788 - gobject.idle_add (self.plugin._populate_programme_list_cb, self.tree_model, self.category_path, None, False)
12789 - self.plugin.programme_download_lock.release ()
12792 - # Add the programmes to the tree store
12793 - remove_placeholder = True
12794 - for programme in programmes:
12795 - programme_item = programme.programme
12797 - # Get the media, which gives the stream URI.
12798 - # We go for mobile quality, since the higher-quality streams are RTMP-only
12799 - # which isn't currently supported by GStreamer or xine
12800 - # TODO: Use higher-quality streams once http://bugzilla.gnome.org/show_bug.cgi?id=566604 is fixed
12801 - media = programme_item.get_media_for ('mobile')
12802 - if media == None:
12803 - # Not worth displaying an error in the interface for this
12804 - print "Programme has no HTTP streams"
12807 - gobject.idle_add (self.plugin._populate_programme_list_cb, self.tree_model, self.category_path,
12808 - [programme.get_title (), programme.get_summary (), media.url],
12809 - remove_placeholder)
12810 - remove_placeholder = False
12812 - self.plugin.programme_download_lock.release ()
12813 + # Class to populate the programme list for a channel/category combination
12814 + # from the Internet
12815 + def __init__ (self, download_lock, callback, feed,
12816 + (tree_model, category_path)):
12817 + self.download_lock = download_lock
12818 + self.callback = callback
12820 + self.tree_model = tree_model
12821 + self.category_path = category_path
12822 + threading.Thread.__init__ (self)
12825 + self.download_lock.acquire ()
12827 + category_iter = self.tree_model.get_iter (self.category_path)
12828 + if category_iter == None:
12829 + GObject.idle_add (self.callback,
12830 + self.tree_model, self.category_path, None, False)
12831 + self.download_lock.release ()
12834 + category_id = self.tree_model.get_value (category_iter, 1)
12835 + parent_iter = self.tree_model.iter_parent (category_iter)
12836 + channel_id = self.tree_model.get_value (parent_iter, 1)
12838 + # Retrieve the programmes and return them
12839 + feed = self.feed.get (channel_id).get (category_id)
12841 + GObject.idle_add (self.callback,
12842 + self.tree_model, self.category_path, None, False)
12843 + self.download_lock.release ()
12846 + # Get the programmes
12848 + programmes = feed.list ()
12849 + except StandardError:
12850 + GObject.idle_add (self.callback,
12851 + self.tree_model, self.category_path, None, False)
12852 + self.download_lock.release ()
12855 + # Add the programmes to the tree store
12856 + remove_placeholder = True
12857 + for programme in programmes:
12858 + programme_item = programme.programme
12860 + # Get the media, which gives the stream URI.
12861 + # We go for mobile quality, since the higher-quality streams are
12862 + # RTMP-only which isn't currently supported by GStreamer or xine
12863 + # TODO: Use higher-quality streams once
12864 + # http://bugzilla.gnome.org/show_bug.cgi?id=566604 is fixed
12865 + media = programme_item.get_media_for ('mobile')
12866 + if media == None:
12867 + # Not worth displaying an error in the interface for this
12868 + print "Programme has no HTTP streams"
12871 + GObject.idle_add (self.callback,
12872 + self.tree_model, self.category_path,
12873 + [programme.get_title (), programme.get_summary (),
12875 + remove_placeholder)
12876 + remove_placeholder = False
12878 + self.download_lock.release ()
12879 diff --git a/src/plugins/iplayer/iplayer2.py b/src/plugins/iplayer/iplayer2.py
12880 index 6c5f3b4..5b71e69 100644
12881 --- a/src/plugins/iplayer/iplayer2.py
12882 +++ b/src/plugins/iplayer/iplayer2.py
12883 @@ -12,19 +12,18 @@ import gettext
12889 from BeautifulSoup import BeautifulStoneSoup
12891 -gettext.textdomain("totem")
12892 +gettext.textdomain ("totem")
12894 D_ = gettext.dgettext
12895 _ = gettext.gettext
12897 -IMG_DIR = os.path.join(os.getcwd(), 'resources', 'media')
12898 +IMG_DIR = os.path.join (os.getcwd (), 'resources', 'media')
12901 -# logging.basicConfig(
12902 +# logging.basicConfig (
12903 # filename='iplayer2.log',
12905 # format='%(asctime)s %(levelname)4s %(message)s',
12906 @@ -32,40 +31,33 @@ IMG_DIR = os.path.join(os.getcwd(), 'resources', 'media')
12909 # #print "iplayer2 logging to stdout"
12910 -# logging.basicConfig(
12911 +# logging.basicConfig (
12912 # stream=sys.stdout,
12913 # level=logging.DEBUG,
12914 # format='iplayer2.py: %(asctime)s %(levelname)4s %(message)s',
12917 -def any(iterable):
12918 - for element in iterable:
12924 # http://colinm.org/blog/on-demand-loading-of-flickr-photo-metadata
12925 # returns immediately for all previously-called functions
12926 -def call_once(fn):
12927 +def call_once (function):
12929 - def result(self):
12930 + def result (self):
12931 if self in called_by:
12933 called_by[self] = True
12938 # runs loader before decorated function
12939 -def loaded_by(loader):
12940 - def decorator(fn):
12941 - def result(self, *args, **kwargs):
12943 - return fn(self, *args, **kwargs)
12944 +def loaded_by (loader):
12945 + def decorator (function):
12946 + def result (self, *args, **kwargs):
12948 + return function (self, *args, **kwargs)
12952 -channels_tv_list = [
12953 +CHANNELS_TV_LIST = [
12954 ('bbc_one', 'BBC One'),
12955 ('bbc_two', 'BBC Two'),
12956 ('bbc_three', 'BBC Three'),
12957 @@ -77,8 +69,8 @@ channels_tv_list = [
12958 ('bbc_hd', 'BBC HD'),
12959 ('bbc_alba', 'BBC Alba'),
12961 -channels_tv = dict(channels_tv_list)
12962 -channels_national_radio_list = [
12963 +CHANNELS_TV = dict (CHANNELS_TV_LIST)
12964 +CHANNELS_NATIONAL_RADIO_LIST = [
12965 ('bbc_radio_one', 'Radio 1'),
12966 ('bbc_1xtra', '1 Xtra'),
12967 ('bbc_radio_two', 'Radio 2'),
12968 @@ -97,7 +89,7 @@ channels_national_radio_list = [
12969 ('bbc_world_service', 'World Service'),
12970 ('bbc_radio_nan_gaidheal', 'BBC nan Gaidheal')
12972 -channels_local_radio_list = [
12973 +CHANNELS_LOCAL_RADIO_LIST = [
12974 ('bbc_radio_cumbria', 'BBC Cumbria'),
12975 ('bbc_radio_newcastle', 'BBC Newcastle'),
12976 ('bbc_tees', 'BBC Tees'),
12977 @@ -139,57 +131,65 @@ channels_local_radio_list = [
12978 ('bbc_radio_guernsey', 'BBC Guernsey'),
12979 ('bbc_radio_jersey', 'BBC Jersey')
12981 -channels_logos = {
12982 - 'bbc_radio_cumbria': 'http://www.bbc.co.uk/englandcms/localradio/images/cumbria.gif',
12983 - 'bbc_radio_newcastle': 'http://www.bbc.co.uk/englandcms/localradio/images/newcastle.gif',
12984 - 'bbc_tees': 'http://www.bbc.co.uk/englandcms/localradio/images/tees.gif',
12985 - 'bbc_radio_lancashire': 'http://www.bbc.co.uk/englandcms/images/rh_nav170_lancs.gif',
12986 - 'bbc_radio_merseyside': 'http://www.bbc.co.uk/englandcms/localradio/images/merseyside.gif',
12987 - 'bbc_radio_manchester': os.path.join(IMG_DIR, 'bbc_local_radio.png'),
12988 - 'bbc_radio_leeds': 'http://www.bbc.co.uk/englandcms/images/rh_nav170_leeds.gif',
12989 - 'bbc_radio_sheffield': 'http://www.bbc.co.uk/englandcms/images/rh_nav170_sheffield.gif',
12990 - 'bbc_radio_york': 'http://www.bbc.co.uk/englandcms/localradio/images/york.gif',
12991 - 'bbc_radio_humberside': 'http://www.bbc.co.uk/radio/images/home/r-home-nation-regions.gif',
12992 - 'bbc_radio_lincolnshire': 'http://www.bbc.co.uk/englandcms/localradio/images/lincs.gif',
12993 - 'bbc_radio_nottingham': os.path.join(IMG_DIR, 'bbc_local_radio.png'),
12994 - 'bbc_radio_leicester': 'http://www.bbc.co.uk/englandcms/localradio/images/leicester.gif',
12995 - 'bbc_radio_derby': 'http://www.bbc.co.uk/englandcms/derby/images/rh_nav170_derby.gif',
12996 - 'bbc_radio_stoke': 'http://www.bbc.co.uk/englandcms/localradio/images/stoke.gif',
12997 - 'bbc_radio_shropshire': 'http://www.bbc.co.uk/englandcms/localradio/images/shropshire.gif',
12998 - 'bbc_wm': os.path.join(IMG_DIR, 'bbc_local_radio.png'),
12999 - 'bbc_radio_coventry_warwickshire': 'http://www.bbc.co.uk/englandcms/localradio/images/cov_warks.gif',
13000 - 'bbc_radio_hereford_worcester': 'http://www.bbc.co.uk/englandcms/localradio/images/hereford_worcester.gif',
13001 - 'bbc_radio_northampton': 'http://www.bbc.co.uk/englandcms/localradio/images/northampton.gif',
13002 - 'bbc_three_counties_radio': 'http://www.bbc.co.uk/englandcms/images/rh_nav170_3counties.gif',
13003 - 'bbc_radio_cambridge': 'http://www.bbc.co.uk/englandcms/localradio/images/cambridgeshire.gif',
13004 - 'bbc_radio_norfolk': 'http://www.bbc.co.uk/englandcms/localradio/images/norfolk.gif',
13005 - 'bbc_radio_suffolk': 'http://www.bbc.co.uk/englandcms/localradio/images/suffolk.gif',
13006 - 'bbc_radio_essex': 'http://www.bbc.co.uk/englandcms/images/rh_nav170_essex.gif',
13007 - 'bbc_london': os.path.join(IMG_DIR, 'bbc_local_radio.png'),
13008 - 'bbc_radio_kent': 'http://www.bbc.co.uk/radio/images/home/r-home-nation-regions.gif',
13009 - 'bbc_southern_counties_radio': os.path.join(IMG_DIR, 'bbc_local_radio.png'),
13010 - 'bbc_radio_oxford': 'http://www.bbc.co.uk/englandcms/images/rh_nav170_oxford.gif',
13011 - 'bbc_radio_berkshire': 'http://www.bbc.co.uk/englandcms/images/rh_nav170_berks.gif',
13012 - 'bbc_radio_solent': 'http://www.bbc.co.uk/englandcms/localradio/images/solent.gif',
13013 - 'bbc_radio_gloucestershire': 'http://www.bbc.co.uk/englandcms/localradio/images/gloucestershire.gif',
13014 - 'bbc_radio_swindon': os.path.join(IMG_DIR, 'bbc_local_radio.png'),
13015 - 'bbc_radio_wiltshire': os.path.join(IMG_DIR, 'bbc_local_radio.png'),
13016 - 'bbc_radio_bristol': 'http://www.bbc.co.uk/englandcms/localradio/images/bristol.gif',
13017 - 'bbc_radio_somerset_sound': 'http://www.bbc.co.uk/englandcms/images/rh_nav170_somerset.gif',
13018 - 'bbc_radio_devon': 'http://www.bbc.co.uk/englandcms/images/rh_nav170_devon.gif',
13019 - 'bbc_radio_cornwall': 'http://www.bbc.co.uk/englandcms/localradio/images/cornwall.gif',
13020 - 'bbc_radio_guernsey': 'http://www.bbc.co.uk/englandcms/localradio/images/guernsey.gif',
13021 - 'bbc_radio_jersey': 'http://www.bbc.co.uk/englandcms/localradio/images/jersey.gif'
13023 +LOGO_URI = 'http://www.bbc.co.uk/englandcms/'
13024 +CHANNELS_LOGOS = {
13025 + 'bbc_radio_cumbria': LOGO_URI + 'localradio/images/cumbria.gif',
13026 + 'bbc_radio_newcastle': LOGO_URI + 'localradio/images/newcastle.gif',
13027 + 'bbc_tees': LOGO_URI + 'localradio/images/tees.gif',
13028 + 'bbc_radio_lancashire': LOGO_URI + 'images/rh_nav170_lancs.gif',
13029 + 'bbc_radio_merseyside': LOGO_URI + 'localradio/images/merseyside.gif',
13030 + 'bbc_radio_manchester': os.path.join (IMG_DIR, 'bbc_local_radio.png'),
13031 + 'bbc_radio_leeds': LOGO_URI + 'images/rh_nav170_leeds.gif',
13032 + 'bbc_radio_sheffield': LOGO_URI + 'images/rh_nav170_sheffield.gif',
13033 + 'bbc_radio_york': LOGO_URI + 'localradio/images/york.gif',
13034 + 'bbc_radio_humberside': 'http://www.bbc.co.uk/radio/images/home/'\
13035 + 'r-home-nation-regions.gif',
13036 + 'bbc_radio_lincolnshire': LOGO_URI + 'localradio/images/lincs.gif',
13037 + 'bbc_radio_nottingham': os.path.join (IMG_DIR, 'bbc_local_radio.png'),
13038 + 'bbc_radio_leicester': LOGO_URI + 'localradio/images/leicester.gif',
13039 + 'bbc_radio_derby': LOGO_URI + 'derby/images/rh_nav170_derby.gif',
13040 + 'bbc_radio_stoke': LOGO_URI + 'localradio/images/stoke.gif',
13041 + 'bbc_radio_shropshire': LOGO_URI + 'localradio/images/shropshire.gif',
13042 + 'bbc_wm': os.path.join (IMG_DIR, 'bbc_local_radio.png'),
13043 + 'bbc_radio_coventry_warwickshire': LOGO_URI + 'localradio/images/'\
13045 + 'bbc_radio_hereford_worcester': LOGO_URI + 'localradio/images/'\
13046 + 'hereford_worcester.gif',
13047 + 'bbc_radio_northampton': LOGO_URI + 'localradio/images/northampton.gif',
13048 + 'bbc_three_counties_radio': LOGO_URI + 'images/rh_nav170_3counties.gif',
13049 + 'bbc_radio_cambridge': LOGO_URI + 'localradio/images/cambridgeshire.gif',
13050 + 'bbc_radio_norfolk': LOGO_URI + 'localradio/images/norfolk.gif',
13051 + 'bbc_radio_suffolk': LOGO_URI + 'localradio/images/suffolk.gif',
13052 + 'bbc_radio_essex': LOGO_URI + 'images/rh_nav170_essex.gif',
13053 + 'bbc_london': os.path.join (IMG_DIR, 'bbc_local_radio.png'),
13054 + 'bbc_radio_kent': 'http://www.bbc.co.uk/radio/images/home/'\
13055 + 'r-home-nation-regions.gif',
13056 + 'bbc_southern_counties_radio': os.path.join (IMG_DIR,
13057 + 'bbc_local_radio.png'),
13058 + 'bbc_radio_oxford': LOGO_URI + 'images/rh_nav170_oxford.gif',
13059 + 'bbc_radio_berkshire': LOGO_URI + 'images/rh_nav170_berks.gif',
13060 + 'bbc_radio_solent': LOGO_URI + 'localradio/images/solent.gif',
13061 + 'bbc_radio_gloucestershire': LOGO_URI + 'localradio/images/'\
13062 + 'gloucestershire.gif',
13063 + 'bbc_radio_swindon': os.path.join (IMG_DIR, 'bbc_local_radio.png'),
13064 + 'bbc_radio_wiltshire': os.path.join (IMG_DIR, 'bbc_local_radio.png'),
13065 + 'bbc_radio_bristol': LOGO_URI + 'localradio/images/bristol.gif',
13066 + 'bbc_radio_somerset_sound': LOGO_URI + 'images/rh_nav170_somerset.gif',
13067 + 'bbc_radio_devon': LOGO_URI + 'images/rh_nav170_devon.gif',
13068 + 'bbc_radio_cornwall': LOGO_URI + 'localradio/images/cornwall.gif',
13069 + 'bbc_radio_guernsey': LOGO_URI + 'localradio/images/guernsey.gif',
13070 + 'bbc_radio_jersey': LOGO_URI + 'localradio/images/jersey.gif'
13074 -channels_national_radio = dict(channels_national_radio_list)
13075 -channels_local_radio = dict(channels_local_radio_list)
13076 -channels_radio_list = channels_national_radio_list + channels_local_radio_list
13077 -channels_radio = dict(channels_radio_list)
13078 +CHANNELS_NATIONAL_RADIO = dict (CHANNELS_NATIONAL_RADIO_LIST)
13079 +CHANNELS_LOCAL_RADIO = dict (CHANNELS_LOCAL_RADIO_LIST)
13080 +CHANNELS_RADIO_LIST = CHANNELS_NATIONAL_RADIO_LIST + CHANNELS_LOCAL_RADIO_LIST
13081 +CHANNELS_RADIO = dict (CHANNELS_RADIO_LIST)
13083 -channels = dict(channels_tv_list + channels_radio_list)
13084 -categories_list = [
13085 +CHANNELS = dict (CHANNELS_TV_LIST + CHANNELS_RADIO_LIST)
13086 +CATEGORIES_LIST = [
13087 ('childrens', 'Children\'s'),
13088 ('comedy', 'Comedy'),
13089 ('drama', 'Drama'),
13090 @@ -205,158 +205,146 @@ categories_list = [
13091 ('scotland', 'Scotland'),
13094 -categories = dict(categories_list)
13096 -live_radio_stations = {'Radio 1': 'http://www.bbc.co.uk/radio1/wm_asx/aod/radio1_hi.asx',
13097 - '1 Xtra': 'http://www.bbc.co.uk/1xtra/realmedia/1xtra_hi.asx',
13098 - 'Radio 2': 'http://www.bbc.co.uk/radio2/wm_asx/aod/radio2_hi.asx',
13099 - 'BBC 3': 'http://www.bbc.co.uk/radio3/wm_asx/aod/radio3_hi.asx',
13100 - 'BBC 4': 'http://www.bbc.co.uk/radio4/wm_asx/aod/radio4.asx',
13101 - '5 Live': 'http://www.bbc.co.uk/fivelive/live/live.asx',
13102 - '5 Live Sports Extra': 'http://www.bbc.co.uk/fivelive/live/live_sportsextra.asx',
13103 - '6 Music': 'http://www.bbc.co.uk/6music/ram/6music_hi.asx',
13104 - 'BBC 7': 'http://www.bbc.co.uk/bbc7/realplayer/bbc7_hi.asx',
13105 - 'Asian Network': 'http://www.bbc.co.uk/asiannetwork/rams/asiannet_hi.asx',
13106 - 'Radio Scotland': 'http://www.bbc.co.uk/scotland/radioscotland/media/radioscotland.ram',
13107 - 'World Service': 'http://www.bbc.co.uk/worldservice/meta/tx/nb/live_eneuk_au_nb.asx',
13108 - 'BBC nan Gaidheal': 'http://www.bbc.co.uk/scotland/alba/media/live/radio_ng.ram',
13109 - 'BBC London': 'http://www.bbc.co.uk/england/realmedia/live/localradio/london.ram',
13110 - 'BBC Berkshire': 'http://www.bbc.co.uk/england/realmedia/live/localradio/radioberkshire.ram',
13111 - 'BBC Bristol': 'http://www.bbc.co.uk/england/realmedia/live/localradio/bristol.ram',
13112 - 'BBC Cambridgeshire': 'http://www.bbc.co.uk/england/realmedia/live/localradio/cambridgeshire.ram',
13113 - 'BBC Cornwall': 'http://www.bbc.co.uk/england/realmedia/live/localradio/cornwall.ram',
13114 - 'BBC Cumbria': 'http://www.bbc.co.uk/england/realmedia/live/localradio/cumbria.ram',
13115 - 'BBC Derby': 'http://www.bbc.co.uk/england/realmedia/live/localradio/derby.ram',
13116 - 'BBC Devon': 'http://www.bbc.co.uk/england/realmedia/live/localradio/devon.ram',
13117 - 'BBC Essex': 'http://www.bbc.co.uk/england/realmedia/live/localradio/essex.ram',
13118 - 'BBC Gloucestershire': 'http://www.bbc.co.uk/england/realmedia/live/localradio/gloucestershire.ram',
13119 - 'BBC Guernsey': 'http://www.bbc.co.uk/england/realmedia/live/localradio/guernsey.ram',
13120 - 'BBC Hereford/Worcester': 'http://www.bbc.co.uk/england/realmedia/live/localradio/herefordandworcester.ram',
13121 - 'BBC Humberside': 'http://www.bbc.co.uk/england/realmedia/live/localradio/humberside.ram',
13122 - 'BBC Jersey': 'http://www.bbc.co.uk/england/realmedia/live/localradio/jersey.ram',
13123 - 'BBC Kent': 'http://www.bbc.co.uk/england/realmedia/live/localradio/kent.ram',
13124 - 'BBC Lancashire': 'http://www.bbc.co.uk/england/realmedia/live/localradio/lancashire.ram',
13125 - 'BBC Leeds': 'http://www.bbc.co.uk/england/realmedia/live/localradio/leeds.ram',
13126 - 'BBC Leicester': 'http://www.bbc.co.uk/england/realmedia/live/localradio/leicester.ram',
13127 - 'BBC Lincolnshire': 'http://www.bbc.co.uk/england/realmedia/live/localradio/lincolnshire.ram',
13128 - 'BBC Manchester': 'http://www.bbc.co.uk/england/realmedia/live/localradio/manchester.ram',
13129 - 'BBC Merseyside': 'http://www.bbc.co.uk/england/realmedia/live/localradio/merseyside.ram',
13130 - 'BBC Newcastle': 'http://www.bbc.co.uk/england/realmedia/live/localradio/newcastle.ram',
13131 - 'BBC Norfolk': 'http://www.bbc.co.uk/england/realmedia/live/localradio/norfolk.ram',
13132 - 'BBC Northampton': 'http://www.bbc.co.uk/england/realmedia/live/localradio/northampton.ram',
13133 - 'BBC Nottingham': 'http://www.bbc.co.uk/england/realmedia/live/localradio/nottingham.ram',
13134 - 'BBC Oxford': 'http://www.bbc.co.uk/england/realmedia/live/localradio/radiooxford.ram',
13135 - 'BBC Sheffield': 'http://www.bbc.co.uk/england/realmedia/live/localradio/sheffield.ram',
13136 - 'BBC Shropshire': 'http://www.bbc.co.uk/england/realmedia/live/localradio/shropshire.ram',
13137 - 'BBC Solent': 'http://www.bbc.co.uk/england/realmedia/live/localradio/solent.ram',
13138 - 'BBC Somerset Sound': 'http://www.bbc.co.uk/england/realmedia/live/localradio/somerset.ram',
13139 - 'BBC Southern Counties Radio': 'http://www.bbc.co.uk/england/realmedia/live/localradio/southerncounties.ram',
13140 - 'BBC Stoke': 'http://www.bbc.co.uk/england/realmedia/live/localradio/stoke.ram',
13141 - 'BBC Suffolk': 'http://www.bbc.co.uk/england/realmedia/live/localradio/suffolk.ram',
13142 - 'BBC Swindon': 'http://www.bbc.co.uk/england/realmedia/live/localradio/swindon.ram',
13143 - 'BBC Three Counties Radio': 'http://www.bbc.co.uk/england/realmedia/live/localradio/threecounties.ram',
13144 - 'BBC Wiltshire': 'http://www.bbc.co.uk/england/realmedia/live/localradio/wiltshire.ram',
13145 - 'BBC York': 'http://www.bbc.co.uk/england/realmedia/live/localradio/york.ram',
13146 - 'BBC WM': 'http://www.bbc.co.uk/england/realmedia/live/localradio/wm.ram',
13147 - 'BBC Cymru': 'http://www.bbc.co.uk/cymru/live/rc-live.ram',
13148 - 'Radio Foyle': 'http://www.bbc.co.uk/northernireland/realmedia/rf-live.ram',
13149 - 'BBC Scotland': 'http://www.bbc.co.uk/scotland/radioscotland/media/radioscotland.ram',
13150 - 'BBC nan Gaidheal': 'http://www.bbc.co.uk/scotland/alba/media/live/radio_ng.ram',
13151 - 'BBC Ulster': 'http://www.bbc.co.uk/ni/realmedia/ru-live.ram',
13152 - 'BBC Wales': 'http://www.bbc.co.uk/wales/live/rwg2.ram',
13153 - 'BBC Tees': 'http://www.bbc.co.uk/england/realmedia/live/localradio/cleveland.ram',
13155 -live_webcams = {'Radio 1': 'http://www.bbc.co.uk/radio1/webcam/images/live/webcam.jpg',
13156 - '1 Xtra': 'http://www.bbc.co.uk/1xtra/webcam/live/1xtraa.jpg',
13157 - 'Radio 2': 'http://www.bbc.co.uk/radio2/webcam/live/radio2.jpg',
13158 - '5 Live': 'http://www.bbc.co.uk/fivelive/inside/webcam/5Lwebcam1.jpg',
13159 - '6 Music': 'http://www.bbc.co.uk/6music/webcam/live/6music.jpg',
13160 - 'Asian Network': 'http://www.bbc.co.uk/asiannetwork/webcams/birmingham.jpg'}
13164 -self_closing_tags = ['alternate', 'mediator']
13166 -http = httplib2.Http()
13168 -re_selfclose = re.compile('<([a-zA-Z0-9]+)( ?.*)/>', re.M | re.S)
13170 -def fix_selfclosing(xml):
13171 - return re_selfclose.sub('<\\1\\2></\\1>', xml)
13173 -def set_http_cache_dir(d):
13174 - fc = httplib2.FileCache(d)
13177 -def set_http_cache(c):
13180 -class NoItemsError(Exception):
13181 - def __init__(self, reason=None):
13182 +CATEGORIES = dict (CATEGORIES_LIST)
13184 +ENGLAND_RADIO_URI = 'http://www.bbc.co.uk/england/'
13185 +LIVE_RADIO_STATIONS = {
13186 + 'Radio 1': 'http://www.bbc.co.uk/radio1/wm_asx/aod/radio1_hi.asx',
13187 + '1 Xtra': 'http://www.bbc.co.uk/1xtra/realmedia/1xtra_hi.asx',
13188 + 'Radio 2': 'http://www.bbc.co.uk/radio2/wm_asx/aod/radio2_hi.asx',
13189 + 'BBC 3': 'http://www.bbc.co.uk/radio3/wm_asx/aod/radio3_hi.asx',
13190 + 'BBC 4': 'http://www.bbc.co.uk/radio4/wm_asx/aod/radio4.asx',
13191 + '5 Live': 'http://www.bbc.co.uk/fivelive/live/live.asx',
13192 + '5 Live Sports Extra': 'http://www.bbc.co.uk/fivelive/live/'\
13193 + 'live_sportsextra.asx',
13194 + '6 Music': 'http://www.bbc.co.uk/6music/ram/6music_hi.asx',
13195 + 'BBC 7': 'http://www.bbc.co.uk/bbc7/realplayer/bbc7_hi.asx',
13196 + 'Asian Network': 'http://www.bbc.co.uk/asiannetwork/rams/asiannet_hi.asx',
13197 + 'Radio Scotland': 'http://www.bbc.co.uk/scotland/radioscotland/media/'\
13198 + 'radioscotland.ram',
13199 + 'World Service': 'http://www.bbc.co.uk/worldservice/meta/tx/nb/'\
13200 + 'live_eneuk_au_nb.asx',
13201 + 'BBC London': ENGLAND_RADIO_URI + 'london.ram',
13202 + 'BBC Berkshire': ENGLAND_RADIO_URI + 'radioberkshire.ram',
13203 + 'BBC Bristol': ENGLAND_RADIO_URI + 'bristol.ram',
13204 + 'BBC Cambridgeshire': ENGLAND_RADIO_URI + 'cambridgeshire.ram',
13205 + 'BBC Cornwall': ENGLAND_RADIO_URI + 'cornwall.ram',
13206 + 'BBC Cumbria': ENGLAND_RADIO_URI + 'cumbria.ram',
13207 + 'BBC Derby': ENGLAND_RADIO_URI + 'derby.ram',
13208 + 'BBC Devon': ENGLAND_RADIO_URI + 'devon.ram',
13209 + 'BBC Essex': ENGLAND_RADIO_URI + 'essex.ram',
13210 + 'BBC Gloucestershire': ENGLAND_RADIO_URI + 'gloucestershire.ram',
13211 + 'BBC Guernsey': ENGLAND_RADIO_URI + 'guernsey.ram',
13212 + 'BBC Hereford/Worcester': ENGLAND_RADIO_URI + 'herefordandworcester.ram',
13213 + 'BBC Humberside': ENGLAND_RADIO_URI + 'humberside.ram',
13214 + 'BBC Jersey': ENGLAND_RADIO_URI + 'jersey.ram',
13215 + 'BBC Kent': ENGLAND_RADIO_URI + 'kent.ram',
13216 + 'BBC Lancashire': ENGLAND_RADIO_URI + 'lancashire.ram',
13217 + 'BBC Leeds': ENGLAND_RADIO_URI + 'leeds.ram',
13218 + 'BBC Leicester': ENGLAND_RADIO_URI + 'leicester.ram',
13219 + 'BBC Lincolnshire': ENGLAND_RADIO_URI + 'lincolnshire.ram',
13220 + 'BBC Manchester': ENGLAND_RADIO_URI + 'manchester.ram',
13221 + 'BBC Merseyside': ENGLAND_RADIO_URI + 'merseyside.ram',
13222 + 'BBC Newcastle': ENGLAND_RADIO_URI + 'newcastle.ram',
13223 + 'BBC Norfolk': ENGLAND_RADIO_URI + 'norfolk.ram',
13224 + 'BBC Northampton': ENGLAND_RADIO_URI + 'northampton.ram',
13225 + 'BBC Nottingham': ENGLAND_RADIO_URI + 'nottingham.ram',
13226 + 'BBC Oxford': ENGLAND_RADIO_URI + 'radiooxford.ram',
13227 + 'BBC Sheffield': ENGLAND_RADIO_URI + 'sheffield.ram',
13228 + 'BBC Shropshire': ENGLAND_RADIO_URI + 'shropshire.ram',
13229 + 'BBC Solent': ENGLAND_RADIO_URI + 'solent.ram',
13230 + 'BBC Somerset Sound': ENGLAND_RADIO_URI + 'somerset.ram',
13231 + 'BBC Southern Counties Radio': ENGLAND_RADIO_URI + 'southerncounties.ram',
13232 + 'BBC Stoke': ENGLAND_RADIO_URI + 'stoke.ram',
13233 + 'BBC Suffolk': ENGLAND_RADIO_URI + 'suffolk.ram',
13234 + 'BBC Swindon': ENGLAND_RADIO_URI + 'swindon.ram',
13235 + 'BBC Three Counties Radio': ENGLAND_RADIO_URI + 'threecounties.ram',
13236 + 'BBC Wiltshire': ENGLAND_RADIO_URI + 'wiltshire.ram',
13237 + 'BBC York': ENGLAND_RADIO_URI + 'york.ram',
13238 + 'BBC WM': ENGLAND_RADIO_URI + 'wm.ram',
13239 + 'BBC Cymru': 'http://www.bbc.co.uk/cymru/live/rc-live.ram',
13240 + 'Radio Foyle': 'http://www.bbc.co.uk/northernireland/realmedia/rf-live.ram',
13241 + 'BBC Scotland': 'http://www.bbc.co.uk/scotland/radioscotland/media/'\
13242 + 'radioscotland.ram',
13243 + 'BBC nan Gaidheal': 'http://www.bbc.co.uk/scotland/alba/media/live/'\
13245 + 'BBC Ulster': 'http://www.bbc.co.uk/ni/realmedia/ru-live.ram',
13246 + 'BBC Wales': 'http://www.bbc.co.uk/wales/live/rwg2.ram',
13247 + 'BBC Tees': ENGLAND_RADIO_URI + 'cleveland.ram',
13251 + 'Radio 1': 'http://www.bbc.co.uk/radio1/webcam/images/live/webcam.jpg',
13252 + '1 Xtra': 'http://www.bbc.co.uk/1xtra/webcam/live/1xtraa.jpg',
13253 + 'Radio 2': 'http://www.bbc.co.uk/radio2/webcam/live/radio2.jpg',
13254 + '5 Live': 'http://www.bbc.co.uk/fivelive/inside/webcam/5Lwebcam1.jpg',
13255 + '6 Music': 'http://www.bbc.co.uk/6music/webcam/live/6music.jpg',
13256 + 'Asian Network': 'http://www.bbc.co.uk/asiannetwork/webcams/birmingham.jpg'
13261 +SELF_CLOSING_TAGS = ['alternate', 'mediator']
13263 +HTTP_OBJECT = httplib2.Http ()
13265 +class NoItemsError (Exception):
13266 + def __init__ (self, reason=None):
13267 + Exception.__init__ (self)
13268 self.reason = reason
13270 - def __str__(self):
13271 + def __str__ (self):
13272 reason = self.reason or _(u'<no reason given>')
13273 return _(u'Programme unavailable ("%s")') % (reason)
13275 -class memoize(object):
13276 - def __init__(self, func):
13279 - def __call__(self, *args, **kwds):
13282 - items = kwds.items()
13284 - key = key + tuple(items)
13285 - if key in self._cache:
13286 - return self._cache[key]
13287 - self._cache[key] = result = self.func(*args, **kwds)
13290 -def httpretrieve(url, filename):
13291 - _, data = http.request(url, 'GET')
13292 - f = open(filename, 'wb')
13297 - resp, data = http.request(url, 'GET')
13298 +def httpget (url):
13299 + _response, data = HTTP_OBJECT.request (url, 'GET')
13302 -def parse_entry_id(entry_id):
13303 +def parse_entry_id (entry_id):
13304 # tag:bbc.co.uk,2008:PIPS:b00808sc
13305 - r = re.compile('PIPS:([0-9a-z]{8})')
13306 - matches = r.findall(entry_id)
13307 - if not matches: return None
13308 + regexp = re.compile ('PIPS: ([0-9a-z]{8})')
13309 + matches = regexp.findall (entry_id)
13314 -class media(object):
13315 - def __init__(self, item, media_node):
13316 +class Media (object):
13317 + def __init__ (self, item, media_node):
13322 self.width, self.height = None, None
13323 - self.read_media_node(media_node)
13324 + self.__read_media_node (media_node)
13326 + self.mimetype = None
13327 + self.encoding = None
13328 + self.live = False
13329 + self.connection_href = None
13330 + self.connection_protocol = None
13331 + self.connection_method = None
13332 + self.connection_kind = None
13333 + self.connection_live = False
13338 if self.connection_method == 'resolve':
13339 - #logging.info("Resolving URL %s", self.connection_href)
13340 - page = urllib2.urlopen(self.connection_href)
13342 - url = page.geturl()
13343 - #logging.info("URL resolved to %s", url)
13344 - return page.geturl()
13345 + #logging.info ("Resolving URL %s", self.connection_href)
13346 + page = urllib2.urlopen (self.connection_href)
13348 + url = page.geturl ()
13349 + #logging.info ("URL resolved to %s", url)
13352 return self.connection_href
13355 - def application(self):
13356 + def application (self):
13358 The type of stream represented as a string.
13359 - i.e. 'captions', 'flashhigh', 'flashmed', 'flashwii', 'mobile', 'mp3' or 'real'
13360 + i.e. 'captions', 'flashhigh', 'flashmed', 'flashwii', 'mobile', 'mp3'
13364 tep['captions', 'application/ttaf+xml', None, 'http'] = 'captions'
13365 @@ -366,29 +354,30 @@ class media(object):
13366 tep['video', 'video/mpeg', 'h264', 'http'] = 'mobile'
13367 tep['audio', 'audio/mpeg', 'mp3', 'rtmp'] = 'mp3'
13368 tep['audio', 'audio/real', 'real', 'http'] = 'real'
13369 - me = (self.kind, self.mimetype, self.encoding, self.connection_protocol)
13370 - return tep.get(me, None)
13371 + media = (self.kind, self.mimetype, self.encoding,
13372 + self.connection_protocol)
13373 + return tep.get (media, None)
13375 - def read_media_node(self, media, resolve=False):
13376 + def __read_media_node (self, media):
13378 Reads media info from a media XML node
13379 media: media node from BeautifulStoneSoup
13381 - self.kind = media.get('kind')
13382 - self.mimetype = media.get('type')
13383 - self.encoding = media.get('encoding')
13384 - self.width, self.height = media.get('width'), media.get('height')
13385 - self.live = media.get('live') == 'true'
13387 - conn = media.find('connection')
13388 - self.connection_kind = conn.get('kind')
13389 - self.connection_live = conn.get('live') == 'true'
13390 + self.kind = media.get ('kind')
13391 + self.mimetype = media.get ('type')
13392 + self.encoding = media.get ('encoding')
13393 + self.width, self.height = media.get ('width'), media.get ('height')
13394 + self.live = media.get ('live') == 'true'
13396 + conn = media.find ('connection')
13397 + self.connection_kind = conn.get ('kind')
13398 + self.connection_live = conn.get ('live') == 'true'
13399 self.connection_protocol = None
13400 self.connection_href = None
13401 self.connection_method = None
13403 if self.connection_kind in ['http', 'sis']: # http
13404 - self.connection_href = conn.get('href')
13405 + self.connection_href = conn.get ('href')
13406 self.connection_protocol = 'http'
13407 if self.mimetype == 'video/mp4' and self.encoding == 'h264':
13408 # iPhone, don't redirect or it goes to license failure page
13409 @@ -399,35 +388,41 @@ class media(object):
13410 self.connection_method = 'resolve'
13411 elif self.connection_kind in ['level3', 'akamai']: #rtmp
13412 self.connection_protocol = 'rtmp'
13413 - server = conn.get('server')
13414 - identifier = conn.get('identifier')
13415 + server = conn.get ('server')
13416 + identifier = conn.get ('identifier')
13418 if not self.connection_live:
13419 - #logging.error("No support for live streams!")
13420 - auth = conn.get('authstring')
13421 - params = dict(ip=server, server=server, auth=auth, identifier=identifier)
13422 - self.connection_href = "rtmp://%(ip)s:1935/ondemand?_fcs_vhost=%(server)s&auth=%(auth)s&aifp=v001&slist=%(identifier)s" % params
13423 + #logging.error ("No support for live streams!")
13424 + auth = conn.get ('authstring')
13425 + params = dict (ip=server, server=server, auth=auth,
13426 + identifier=identifier)
13427 + self.connection_href = "rtmp://%(ip)s:1935/ondemand"\
13428 + "?_fcs_vhost=%(server)s&auth=%(auth)s"\
13430 + "&slist=%(identifier)s" % params
13432 - # logging.error("connectionkind %s unknown", self.connection_kind)
13433 + # logging.error ("connectionkind %s unknown", self.connection_kind)
13435 #if self.connection_protocol:
13436 - # logging.info("conn protocol: %s - conn kind: %s - media type: %s - media encoding: %s" %
13437 - # (self.connection_protocol, self.connection_kind, self.mimetype, self.encoding))
13438 - # logging.info("conn href: %s", self.connection_href)
13439 + # logging.info ("conn protocol: %s - conn kind: %s - media type: "\
13440 + # "%s - media encoding: %s" %
13441 + # (self.connection_protocol, self.connection_kind,
13442 + # self.mimetype, self.encoding))
13443 + # logging.info ("conn href: %s", self.connection_href)
13446 - def programme(self):
13447 + def programme (self):
13448 return self.item.programme
13450 -class item(object):
13451 +class Item (object):
13453 - Represents an iPlayer programme item. Most programmes consist of 2 such items,
13454 - (1) the ident, and (2) the actual programme. The item specifies the properties
13455 - of the media available, such as whether it's a radio/TV programme, if it's live,
13457 + Represents an iPlayer programme item. Most programmes consist of 2 such
13458 + items, (1) the ident, and (2) the actual programme. The item specifies the
13459 + properties of the media available, such as whether it's a radio/TV
13460 + programme, if it's live, signed, etc.
13463 - def __init__(self, programme, item_node):
13464 + def __init__ (self, programme, item_node):
13466 programme: a programme object that represents the 'parent' of this item.
13467 item_node: an XML <item> node representing this item.
13468 @@ -440,77 +435,83 @@ class item(object):
13469 self.alternate = None
13472 - self.read_item_node(item_node)
13473 + self.group = None
13475 + self.live = False
13476 + self.__read_item_node (item_node)
13478 - def read_item_node(self, node):
13479 + def __read_item_node (self, node):
13481 Reads the specified XML <item> node and sets this instance's
13484 - self.kind = node.get('kind')
13485 - self.identifier = node.get('identifier')
13486 - #logging.info('Found item: %s, %s', self.kind, self.identifier)
13487 + self.kind = node.get ('kind')
13488 + self.identifier = node.get ('identifier')
13489 + #logging.info ('Found item: %s, %s', self.kind, self.identifier)
13490 if self.kind in ['programme', 'radioProgramme']:
13491 - self.live = node.get('live') == 'true'
13492 - #self.title = node.get('title')
13493 - self.group = node.get('group')
13494 - self.duration = node.get('duration')
13495 + self.live = node.get ('live') == 'true'
13496 + #self.title = node.get ('title')
13497 + self.group = node.get ('group')
13498 + self.duration = node.get ('duration')
13499 #self.broadcast = node.broadcast
13500 - self.service = node.service and node.service.get('id')
13501 - self.masterbrand = node.masterbrand and node.masterbrand.get('id')
13502 - self.alternate = node.alternate and node.alternate.get('id')
13503 + self.service = node.service and node.service.get ('id')
13504 + self.masterbrand = node.masterbrand and node.masterbrand.get ('id')
13505 + self.alternate = node.alternate and node.alternate.get ('id')
13506 self.guidance = node.guidance
13509 - def is_radio(self):
13510 + def is_radio (self):
13511 """ True if this stream is a radio programme. """
13512 return self.kind == 'radioProgramme'
13516 + def is_tv (self):
13517 """ True if this stream is a TV programme. """
13518 return self.kind == 'programme'
13521 - def is_ident(self):
13522 + def is_ident (self):
13523 """ True if this stream is an ident. """
13524 return self.kind == 'ident'
13527 - def is_programme(self):
13528 + def is_programme (self):
13529 """ True if this stream is a programme (TV or Radio). """
13530 return self.is_radio or self.is_tv
13533 - def is_live(self):
13534 + def is_live (self):
13535 """ True if this stream is being broadcast live. """
13539 - def is_signed(self):
13540 + def is_signed (self):
13541 """ True if this stream is 'signed' for the hard-of-hearing. """
13542 return self.alternate == 'signed'
13545 - def mediaselector_url(self):
13546 - return "http://www.bbc.co.uk/mediaselector/4/mtis/stream/%s" % self.identifier
13547 + def mediaselector_url (self):
13548 + url = "http://www.bbc.co.uk/mediaselector/4/mtis/stream/%s"
13549 + return url % self.identifier
13553 + def media (self):
13555 Returns a list of all the media available for this item.
13557 - if self.medias: return self.medias
13559 + return self.medias
13560 url = self.mediaselector_url
13561 - #logging.info("Stream XML URL: %s", str(url))
13562 - _, xml = http.request(url)
13563 - soup = BeautifulStoneSoup(xml, convertEntities = BeautifulStoneSoup.XML_ENTITIES)
13564 - medias = [media(self, m) for m in soup('media')]
13565 - #logging.info('Found media: %s', pformat(medias, indent=8))
13566 + #logging.info ("Stream XML URL: %s", str (url))
13567 + _response, xml = HTTP_OBJECT.request (url)
13568 + entities = BeautifulStoneSoup.XML_ENTITIES
13569 + soup = BeautifulStoneSoup (xml, convertEntities = entities)
13570 + medias = [Media (self, m) for m in soup ('media')]
13571 + #logging.info ('Found media: %s', pformat (medias, indent=8))
13572 self.medias = medias
13575 - def get_media_for(self, application):
13576 + def get_media_for (self, application):
13578 Returns a media object for the given application type.
13580 @@ -519,250 +520,253 @@ class item(object):
13584 - def get_medias_for(self, applications):
13585 + def get_medias_for (self, applications):
13587 Returns a dictionary of media objects for the given application types.
13589 medias = [m for m in self.media if m.application in applications]
13590 - d = {}.fromkeys(applications)
13592 - d[m.application] = m
13594 + dictionary = {}.fromkeys (applications)
13595 + for media in medias:
13596 + dictionary[media.application] = media
13597 + return dictionary
13599 -class programme(object):
13600 +class Programme (object):
13602 - Represents an individual iPlayer programme, as identified by an 8-letter PID,
13603 - and contains the programme title, subtitle, broadcast time and list of playlist
13604 - items (e.g. ident and then the actual programme.)
13605 + Represents an individual iPlayer programme, as identified by an 8-letter
13606 + PID, and contains the programme title, subtitle, broadcast time and list of
13607 + playlist items (e.g. ident and then the actual programme.)
13610 - def __init__(self, pid):
13611 + def __init__ (self, pid):
13618 - def read_playlist(self):
13619 - #logging.info('Read playlist for %s...', self.pid)
13620 - self.parse_playlist(self.playlist)
13621 + def __read_playlist (self):
13622 + #logging.info ('Read playlist for %s...', self.pid)
13623 + self.__parse_playlist (self.playlist)
13625 - def get_playlist_xml(self):
13626 + def get_playlist_xml (self):
13627 """ Downloads and returns the XML for a PID from the iPlayer site. """
13629 url = self.playlist_url
13630 - #logging.info("Getting XML playlist at URL: %s", url)
13631 - r, xml = http.request(url, 'GET')
13632 + #logging.info ("Getting XML playlist at URL: %s", url)
13633 + _response, xml = HTTP_OBJECT.request (url, 'GET')
13635 except SocketTimeoutError:
13636 - #logging.error("Timed out trying to download programme XML")
13637 + #logging.error ("Timed out trying to download programme XML")
13640 - def parse_playlist(self, xml):
13641 - #logging.info('Parsing playlist XML... %s', xml)
13642 - #xml.replace('<summary/>', '<summary></summary>')
13643 - #xml = fix_selfclosing(xml)
13644 + def __parse_playlist (self, xml):
13645 + #logging.info ('Parsing playlist XML... %s', xml)
13647 - soup = BeautifulStoneSoup(xml, selfClosingTags=self_closing_tags, convertEntities = BeautifulStoneSoup.XML_ENTITIES)
13648 + entities = BeautifulStoneSoup.XML_ENTITIES
13649 + soup = BeautifulStoneSoup (xml, selfClosingTags = SELF_CLOSING_TAGS,
13650 + convertEntities = entities)
13656 - #logging.info(' Found programme: %s', soup.playlist.title.string)
13657 + #logging.info (' Found programme: %s', soup.playlist.title.string)
13658 self.meta['title'] = soup.playlist.title.string.encode ('utf-8')
13659 self.meta['summary'] = soup.playlist.summary.string.encode ('utf-8')
13660 self.meta['updated'] = soup.playlist.updated.string
13662 if soup.playlist.noitems:
13663 - #logging.info('No playlist items: %s', soup.playlist.noitems.get('reason'))
13664 - self.meta['reason'] = soup.playlist.noitems.get('reason')
13665 + #logging.info ('No playlist items: %s',
13666 + # soup.playlist.noitems.get ('reason'))
13667 + self.meta['reason'] = soup.playlist.noitems.get ('reason')
13669 - self._items = [item(self, i) for i in soup('item')]
13670 + self._items = [Item (self, i) for i in soup ('item')]
13671 #for i in self._items:
13672 # print i, i.alternate , " ",
13675 - rId = re.compile('concept_pid:([a-z0-9]{8})')
13676 - for link in soup('relatedlink'):
13677 + id_regexp = re.compile ('concept_pid: ([a-z0-9]{8})')
13678 + for link in soup ('relatedlink'):
13680 i['title'] = link.title.string
13681 #i['summary'] = item.summary # FIXME looks like a bug in BSS
13682 - i['pid'] = (rId.findall(link.id.string) or [None])[0]
13683 - i['programme'] = programme(i['pid'])
13684 - self._related.append(i)
13685 + i['pid'] = (id_regexp.findall (link.id.string) or [None])[0]
13686 + i['programme'] = Programme (i['pid'])
13687 + self._related.append (i)
13689 - def get_thumbnail(self, size='large', tvradio='tv'):
13690 + def get_thumbnail (self, size='large', tvradio='tv'):
13692 Returns the URL of a thumbnail.
13693 size: '640x360'/'biggest'/'largest' or '512x288'/'big'/'large' or None
13695 + url_format = "http://www.bbc.co.uk/iplayer/images/episode/%s_%d_%d.jpg"
13697 if size in ['640x360', '640x', 'x360', 'biggest', 'largest']:
13698 - return "http://www.bbc.co.uk/iplayer/images/episode/%s_640_360.jpg" % (self.pid)
13699 + return url_format % (self.pid, 640, 360)
13700 elif size in ['512x288', '512x', 'x288', 'big', 'large']:
13701 - return "http://www.bbc.co.uk/iplayer/images/episode/%s_512_288.jpg" % (self.pid)
13702 + return url_format % (self.pid, 512, 288)
13703 elif size in ['178x100', '178x', 'x100', 'small']:
13704 - return "http://www.bbc.co.uk/iplayer/images/episode/%s_178_100.jpg" % (self.pid)
13705 + return url_format % (self.pid, 178, 100)
13706 elif size in ['150x84', '150x', 'x84', 'smallest']:
13707 - return "http://www.bbc.co.uk/iplayer/images/episode/%s_150_84.jpg" % (self.pid)
13708 + return url_format % (self.pid, 150, 84)
13710 - return os.path.join(IMG_DIR, '%s.png' % tvradio)
13711 + return os.path.join (IMG_DIR, '%s.png' % tvradio)
13714 - def get_url(self):
13715 + def get_url (self):
13717 Returns the programmes episode page.
13719 return "http://www.bbc.co.uk/iplayer/episode/%s" % (self.pid)
13722 - def playlist_url(self):
13723 + def playlist_url (self):
13724 return "http://www.bbc.co.uk/iplayer/playlist/%s" % self.pid
13727 - def playlist(self):
13728 - return self.get_playlist_xml()
13729 + def playlist (self):
13730 + return self.get_playlist_xml ()
13732 - def get_updated(self):
13733 + def get_updated (self):
13734 return self.meta['updated']
13736 - @loaded_by(read_playlist)
13737 - def get_title(self):
13738 + @loaded_by (__read_playlist)
13739 + def get_title (self):
13740 return self.meta['title']
13742 - @loaded_by(read_playlist)
13743 - def get_summary(self):
13744 + @loaded_by (__read_playlist)
13745 + def get_summary (self):
13746 return self.meta['summary']
13748 - @loaded_by(read_playlist)
13749 - def get_related(self):
13750 + @loaded_by (__read_playlist)
13751 + def get_related (self):
13752 return self._related
13754 - @loaded_by(read_playlist)
13755 - def get_items(self):
13756 + @loaded_by (__read_playlist)
13757 + def get_items (self):
13758 if not self._items:
13759 - raise NoItemsError(self.meta['reason'])
13760 + raise NoItemsError (self.meta['reason'])
13764 - def programme(self):
13765 + def programme (self):
13766 for i in self.items:
13771 - title = property(get_title)
13772 - summary = property(get_summary)
13773 - updated = property(get_updated)
13774 - thumbnail = property(get_thumbnail)
13775 - related = property(get_related)
13776 - items = property(get_items)
13777 + title = property (get_title)
13778 + summary = property (get_summary)
13779 + updated = property (get_updated)
13780 + thumbnail = property (get_thumbnail)
13781 + related = property (get_related)
13782 + items = property (get_items)
13784 -#programme = memoize(programme)
13787 -class programme_simple(object):
13788 +class ProgrammeSimple (object):
13790 - Represents an individual iPlayer programme, as identified by an 8-letter PID,
13791 - and contains the programme pid, title, subtitle etc
13792 + Represents an individual iPlayer programme, as identified by an 8-letter
13793 + PID, and contains the programme pid, title, subtitle etc
13796 - def __init__(self, pid, entry):
13797 + def __init__ (self, pid, entry):
13800 self.meta['title'] = entry.title
13801 self.meta['summary'] = entry.summary
13802 self.meta['updated'] = entry.updated
13803 self.categories = []
13804 - for c in entry.categories:
13806 - self.categories.append(c.rstrip())
13807 + for category in entry.categories:
13808 + if category != 'TV':
13809 + self.categories.append (category.rstrip ())
13814 - def read_playlist(self):
13815 + def __read_playlist (self):
13818 - def get_playlist_xml(self):
13819 + def get_playlist_xml (self):
13822 - def parse_playlist(self, xml):
13823 + def __parse_playlist (self, xml):
13826 - def get_thumbnail(self, size='large', tvradio='tv'):
13827 + def get_thumbnail (self, size='large', tvradio='tv'):
13829 Returns the URL of a thumbnail.
13830 size: '640x360'/'biggest'/'largest' or '512x288'/'big'/'large' or None
13832 + url_format = "http://www.bbc.co.uk/iplayer/images/episode/%s_%d_%d.jpg"
13834 if size in ['640x360', '640x', 'x360', 'biggest', 'largest']:
13835 - return "http://www.bbc.co.uk/iplayer/images/episode/%s_640_360.jpg" % (self.pid)
13836 + return url_format % (self.pid, 640, 360)
13837 elif size in ['512x288', '512x', 'x288', 'big', 'large']:
13838 - return "http://www.bbc.co.uk/iplayer/images/episode/%s_512_288.jpg" % (self.pid)
13839 + return url_format % (self.pid, 512, 288)
13840 elif size in ['178x100', '178x', 'x100', 'small']:
13841 - return "http://www.bbc.co.uk/iplayer/images/episode/%s_178_100.jpg" % (self.pid)
13842 + return url_format % (self.pid, 178, 100)
13843 elif size in ['150x84', '150x', 'x84', 'smallest']:
13844 - return "http://www.bbc.co.uk/iplayer/images/episode/%s_150_84.jpg" % (self.pid)
13845 + return url_format % (self.pid, 150, 84)
13847 - return os.path.join(IMG_DIR, '%s.png' % tvradio)
13848 + return os.path.join (IMG_DIR, '%s.png' % tvradio)
13851 - def get_url(self):
13852 + def get_url (self):
13854 Returns the programmes episode page.
13856 return "http://www.bbc.co.uk/iplayer/episode/%s" % (self.pid)
13859 - def playlist_url(self):
13860 + def playlist_url (self):
13861 return "http://www.bbc.co.uk/iplayer/playlist/%s" % self.pid
13864 - def playlist(self):
13865 - return self.get_playlist_xml()
13866 + def playlist (self):
13867 + return self.get_playlist_xml ()
13869 - def get_updated(self):
13870 + def get_updated (self):
13871 return self.meta['updated']
13873 - @loaded_by(read_playlist)
13874 - def get_title(self):
13875 + @loaded_by (__read_playlist)
13876 + def get_title (self):
13877 return self.meta['title']
13879 - @loaded_by(read_playlist)
13880 - def get_summary(self):
13881 + @loaded_by (__read_playlist)
13882 + def get_summary (self):
13883 return self.meta['summary']
13885 - @loaded_by(read_playlist)
13886 - def get_related(self):
13887 + @loaded_by (__read_playlist)
13888 + def get_related (self):
13889 return self._related
13891 - @loaded_by(read_playlist)
13892 - def get_items(self):
13893 + @loaded_by (__read_playlist)
13894 + def get_items (self):
13895 if not self._items:
13896 - raise NoItemsError(self.meta['reason'])
13897 + raise NoItemsError (self.meta['reason'])
13901 - def programme(self):
13902 + def programme (self):
13903 for i in self.items:
13908 - title = property(get_title)
13909 - summary = property(get_summary)
13910 - updated = property(get_updated)
13911 - thumbnail = property(get_thumbnail)
13912 - related = property(get_related)
13913 - items = property(get_items)
13914 + title = property (get_title)
13915 + summary = property (get_summary)
13916 + updated = property (get_updated)
13917 + thumbnail = property (get_thumbnail)
13918 + related = property (get_related)
13919 + items = property (get_items)
13922 -class feed(object):
13923 - def __init__(self, tvradio=None, channel=None, category=None, subcategory=None, atoz=None, searchterm=None):
13924 +class Feed (object):
13925 + def __init__ (self, tvradio = None, channel = None, category = None,
13926 + subcategory = None, atoz = None, searchterm = None):
13928 Creates a feed for the specified channel/category/whatever.
13929 - tvradio: type of channel - 'tv' or 'radio'. If a known channel is specified, use 'auto'.
13930 + tvradio: type of channel - 'tv' or 'radio'. If a known channel is
13931 + specified, use 'auto'.
13932 channel: name of channel, e.g. 'bbc_one'
13933 category: category name, e.g. 'drama'
13934 subcategory: subcategory name, e.g. 'period_drama'
13935 @@ -770,14 +774,15 @@ class feed(object):
13937 if tvradio == 'auto':
13938 if not channel and not searchterm:
13939 - raise Exception, "Must specify channel or searchterm when using 'auto'"
13940 - elif channel in channels_tv:
13941 + raise Exception, "Must specify channel or searchterm when "\
13943 + elif channel in CHANNELS_TV:
13944 self.tvradio = 'tv'
13945 - elif channel in channels_radio:
13946 + elif channel in CHANNELS_RADIO:
13947 self.tvradio = 'radio'
13949 - raise Exception, "TV channel '%s' not recognised." % self.channel
13951 + raise Exception, "TV channel '%s' not "\
13952 + "recognised." % channel
13953 elif tvradio in ['tv', 'radio']:
13954 self.tvradio = tvradio
13956 @@ -788,12 +793,15 @@ class feed(object):
13958 self.searchterm = searchterm
13960 - def create_url(self, listing):
13961 + def __create_url (self, listing):
13963 <channel>/['list'|'popular'|'highlights']
13964 - 'categories'/<category>(/<subcategory>)(/['tv'/'radio'])/['list'|'popular'|'highlights']
13965 + 'categories'/<category> (/<subcategory>) \
13966 + (/['tv'/'radio'])/['list'|'popular'|'highlights']
13968 - assert listing in ['list', 'popular', 'highlights'], "Unknown listing type"
13969 + assert listing in ['list', 'popular', 'highlights'], "Unknown "\
13972 if self.searchterm:
13975 @@ -819,205 +827,215 @@ class feed(object):
13976 assert listing != 'list', "Can't list at tv/radio level'"
13977 path = [listing, self.tvradio]
13979 - return "http://feeds.bbc.co.uk/iplayer/" + '/'.join(path)
13980 + return "http://feeds.bbc.co.uk/iplayer/" + '/'.join (path)
13982 - def get_name(self, separator=' '):
13983 + def get_name (self, separator=' '):
13985 - A readable title for this feed, e.g. 'BBC One' or 'TV Drama' or 'BBC One Drama'
13986 - separator: string to separate name parts with, defaults to ' '. Use None to return a list (e.g. ['TV', 'Drama']).
13987 + A readable title for this feed, e.g. 'BBC One' or 'TV Drama' or
13989 + separator: string to separate name parts with, defaults to ' '.
13990 + Use None to return a list (e.g. ['TV', 'Drama']).
13994 # TODO: This is not i18n-friendly whatsoever
13995 # if got a channel, don't need tv/radio distinction
13997 - assert self.channel in channels_tv or self.channel in channels_radio, 'Unknown channel'
13998 + assert (self.channel in CHANNELS_TV or
13999 + self.channel in CHANNELS_RADIO), 'Unknown channel'
14000 #print self.tvradio
14001 if self.tvradio == 'tv':
14002 - path.append(channels_tv.get(self.channel, '(TV)'))
14003 + path.append (CHANNELS_TV.get (self.channel, ' (TV)'))
14005 - path.append(channels_radio.get(self.channel, '(Radio)'))
14006 + path.append (CHANNELS_RADIO.get (self.channel, ' (Radio)'))
14010 - if self.tvradio == 'radio': medium = 'Radio'
14011 - path.append(medium)
14012 + if self.tvradio == 'radio':
14014 + path.append (medium)
14016 if self.searchterm:
14017 path += ['Search results for %s' % self.searchterm]
14020 - assert self.category in categories, 'Unknown category'
14021 - path.append(categories.get(self.category, '(Category)'))
14022 + assert self.category in CATEGORIES, 'Unknown category'
14023 + path.append (CATEGORIES.get (self.category, ' (Category)'))
14026 - path.append("beginning with %s" % self.atoz.upper())
14027 + path.append ("beginning with %s" % self.atoz.upper ())
14029 if separator != None:
14030 - return separator.join(path)
14031 + return separator.join (path)
14035 - def channels(self):
14036 + def channels (self):
14038 Return a list of available channels.
14040 - if self.channel: return None
14041 - if self.tvradio == 'tv': return channels_tv
14042 - if self.tvradio == 'radio': return channels_radio
14045 + if self.tvradio == 'tv':
14046 + return CHANNELS_TV
14047 + if self.tvradio == 'radio':
14048 + return CHANNELS_RADIO
14051 - def channels_feed(self):
14052 + def channels_feed (self):
14054 Return a list of available channels as a list of feeds.
14057 - #logging.warning("%s doesn\'t have any channels!", self.channel)
14058 + #logging.warning ("%s doesn\'t have any channels!", self.channel)
14060 if self.tvradio == 'tv':
14061 - return [feed('tv', channel=ch) for (ch, title) in channels_tv_list]
14062 + return [Feed ('tv', channel = ch)
14063 + for (ch, _title) in CHANNELS_TV_LIST]
14064 if self.tvradio == 'radio':
14065 - return [feed('radio', channel=ch) for (ch, title) in channels_radio_list]
14066 + return [Feed ('radio', channel = ch)
14067 + for (ch, _title) in CHANNELS_RADIO_LIST]
14070 - def subcategories(self):
14071 - raise NotImplementedError('Sub-categories not yet supported')
14072 + def subcategories (self):
14073 + raise NotImplementedError ('Sub-categories not yet supported')
14076 - def is_atoz(self, letter):
14077 + def __is_atoz (cls, letter):
14079 - Return False if specified letter is not a valid 'A to Z' directory entry.
14080 - Otherwise returns the directory name.
14081 + Return False if specified letter is not a valid 'A to Z' directory
14082 + entry. Otherwise returns the directory name.
14084 - >>> feed.is_atoz('a'), feed.is_atoz('z')
14085 + >>> feed.__is_atoz ('a'), feed.__is_atoz ('z')
14087 - >>> feed.is_atoz('0'), feed.is_atoz('9')
14088 + >>> feed.__is_atoz ('0'), feed.__is_atoz ('9')
14090 - >>> feed.is_atoz('123'), feed.is_atoz('abc')
14091 + >>> feed.__is_atoz ('123'), feed.__is_atoz ('abc')
14093 - >>> feed.is_atoz('big british castle'), feed.is_atoz('')
14094 + >>> feed.__is_atoz ('big british castle'), feed.__is_atoz ('')
14097 - l = letter.lower()
14098 - if len(l) != 1 and l != '0-9':
14099 + letter = letter.lower ()
14100 + if len (letter) != 1 and letter != '0-9':
14102 - if l in '0123456789': l = "0-9"
14103 - if l not in 'abcdefghijklmnopqrstuvwxyz0-9':
14104 + if letter in '0123456789':
14106 + if letter not in 'abcdefghijklmnopqrstuvwxyz0-9':
14111 - def sub(self, *args, **kwargs):
14112 + def sub (self, *_args, **kwargs):
14114 Clones this feed, altering the specified parameters.
14116 - >>> feed('tv').sub(channel='bbc_one').channel
14117 + >>> feed ('tv').sub (channel='bbc_one').channel
14119 - >>> feed('tv', channel='bbc_one').sub(channel='bbc_two').channel
14120 + >>> feed ('tv', channel='bbc_one').sub (channel='bbc_two').channel
14122 - >>> feed('tv', channel='bbc_one').sub(category='drama').category
14123 + >>> feed ('tv', channel='bbc_one').sub (category='drama').category
14125 - >>> feed('tv', channel='bbc_one').sub(channel=None).channel
14126 + >>> feed ('tv', channel='bbc_one').sub (channel=None).channel
14129 - d = self.__dict__.copy()
14132 + dictionary = self.__dict__.copy ()
14133 + dictionary.update (kwargs)
14134 + return Feed (**dictionary) # pylint: disable-msg=W0142
14136 - def get(self, subfeed):
14137 + def get (self, subfeed):
14139 Returns a child/subfeed of this feed.
14140 child: can be channel/cat/subcat/letter, e.g. 'bbc_one'
14143 - return self.sub(category=subfeed)
14144 + return self.sub (category = subfeed)
14145 elif self.category:
14146 # no children: TODO support subcategories
14148 - elif self.is_atoz(subfeed):
14149 - return self.sub(atoz=self.is_atoz(subfeed))
14150 + elif self.__is_atoz (subfeed):
14151 + return self.sub (atoz=self.__is_atoz (subfeed))
14153 - if subfeed in channels_tv: return feed('tv', channel=subfeed)
14154 - if subfeed in channels_radio: return feed('radio', channel=subfeed)
14155 + if subfeed in CHANNELS_TV:
14156 + return Feed ('tv', channel = subfeed)
14157 + if subfeed in CHANNELS_RADIO:
14158 + return Feed ('radio', channel = subfeed)
14159 # TODO handle properly oh pants
14163 - def read_rss(self, url):
14164 - #logging.info('Read RSS: %s', url)
14165 - if url not in rss_cache:
14166 - #logging.info('Feed URL not in cache, requesting...')
14167 - xml = httpget(url)
14168 - progs = listparser.parse(xml)
14169 - if not progs: return []
14171 + def __read_rss (cls, url):
14172 + #logging.info ('Read RSS: %s', url)
14173 + if url not in RSS_CACHE:
14174 + #logging.info ('Feed URL not in cache, requesting...')
14175 + xml = httpget (url)
14176 + progs = listparser.parse (xml)
14179 + cached_programmes = []
14180 for entry in progs.entries:
14181 - pid = parse_entry_id(entry.id)
14182 - p = programme(pid)
14184 - #logging.info('Found %d entries', len(d))
14185 - rss_cache[url] = d
14186 + pid = parse_entry_id (entry.id)
14187 + programme = Programme (pid)
14188 + cached_programmes.append (programme)
14189 + #logging.info ('Found %d entries', len (d))
14190 + RSS_CACHE[url] = cached_programmes
14192 - # logging.info('RSS found in cache')
14193 - return rss_cache[url]
14194 + # logging.info ('RSS found in cache')
14195 + return RSS_CACHE[url]
14197 - def popular(self):
14198 - return self.read_rss(self.create_url('popular'))
14199 + def popular (self):
14200 + return self.__read_rss (self.__create_url ('popular'))
14202 - def highlights(self):
14203 - return self.read_rss(self.create_url('highlights'))
14204 + def highlights (self):
14205 + return self.__read_rss (self.__create_url ('highlights'))
14208 - return self.read_rss(self.create_url('list'))
14210 + return self.__read_rss (self.__create_url ('list'))
14212 - def categories(self):
14213 + def categories (self):
14214 # quick and dirty category extraction and count
14215 - xmlURL = self.create_url('list')
14216 - xml = httpget(xmlURL)
14217 - cat = re.findall( "<category .*term=\"(.*?)\"", xml )
14218 + xml_url = self.__create_url ('list')
14219 + xml = httpget (xml_url)
14220 + cat = re.findall ("<category .*term=\" (.*?)\"", xml)
14224 - if not categories.has_key(c): categories[c] = 0
14225 - categories[c] += 1
14227 - k = categories.keys()
14230 - n = categories[c]
14231 - c = c.replace('&', '&')
14232 - c = c.replace('>', '>')
14233 - c = c.replace('<', '<')
14234 - alist.append((c, n))
14235 + for category in cat:
14236 + if category != 'TV':
14237 + if not categories.has_key (category):
14238 + categories[category] = 0
14239 + categories[category] += 1
14241 + category_keys = categories.keys ()
14242 + category_keys.sort ()
14243 + for category in category_keys:
14244 + name = categories[category]
14245 + category = category.replace ('&', '&')
14246 + category = category.replace ('>', '>')
14247 + category = category.replace ('<', '<')
14248 + alist.append ((category, name))
14252 - def is_radio(self):
14253 + def is_radio (self):
14254 """ True if this feed is for radio. """
14255 return self.tvradio == 'radio'
14259 + def is_tv (self):
14260 """ True if this feed is for tv. """
14261 return self.tvradio == 'tv'
14263 - name = property(get_name)
14267 -radio = feed('radio')
14271 - print tv.popular()
14272 - print tv.channels()
14273 - print tv.get('bbc_one')
14274 - print tv.get('bbc_one').list()
14275 - for c in tv.get('bbc_one').categories():
14277 - #print tv.get('bbc_one').channels()
14278 - #print tv.categories()
14279 - #print tv.get('drama').list()
14280 - #print tv.get('drama').get_subcategory('period').list()
14281 + name = property (get_name)
14284 + tv_feed = Feed ('tv')
14285 + print tv_feed.popular ()
14286 + print tv_feed.channels ()
14287 + print tv_feed.get ('bbc_one')
14288 + print tv_feed.get ('bbc_one').list ()
14289 + for category in tv_feed.get ('bbc_one').categories ():
14291 + #print tv_feed.get ('bbc_one').channels ()
14292 + #print tv_feed.categories ()
14293 + #print tv_feed.get ('drama').list ()
14294 + #print tv_feed.get ('drama').get_subcategory ('period').list ()
14296 if __name__ == '__main__':
14299 diff --git a/src/plugins/jamendo/Makefile.am b/src/plugins/jamendo/Makefile.am
14300 deleted file mode 100644
14301 index cec1f4c..0000000
14302 --- a/src/plugins/jamendo/Makefile.am
14305 -include $(top_srcdir)/src/plugins/Makefile.plugins
14307 -plugindir = $(PLUGINDIR)/jamendo
14308 -plugin_PYTHON = jamendo.py
14310 -plugin_in_files = jamendo.plugin.in
14312 -uidir = $(plugindir)
14313 -ui_DATA = jamendo.ui
14314 -EXTRA_DIST += $(ui_DATA)
14316 -@INTLTOOL_XML_NOMERGE_RULE@
14319 -gsettings_SCHEMAS = org.gnome.totem.plugins.jamendo.gschema.xml
14320 -CLEANFILES += $(gsettings_SCHEMAS)
14322 -convertdir = $(datadir)/GConf/gsettings
14323 -convert_DATA = jamendo.convert
14324 -EXTRA_DIST += jamendo.convert
14326 --include $(top_srcdir)/git.mk
14327 diff --git a/src/plugins/jamendo/jamendo.convert b/src/plugins/jamendo/jamendo.convert
14328 deleted file mode 100644
14329 index 5acafaa..0000000
14330 --- a/src/plugins/jamendo/jamendo.convert
14333 -[org.gnome.totem.plugins.jamendo]
14334 -num-per-page = /apps/totem/plugins/jamendo/num_per_page
14335 -format = /apps/totem/plugins/jamendo/format
14336 diff --git a/src/plugins/jamendo/jamendo.plugin.in b/src/plugins/jamendo/jamendo.plugin.in
14337 deleted file mode 100644
14338 index d359cbb..0000000
14339 --- a/src/plugins/jamendo/jamendo.plugin.in
14347 -_Description=Listen to the large collection of Creative Commons licensed music on Jamendo.
14348 -Authors=David Jean Louis <izimobil@gmail.com>
14349 -Copyright=Copyright © 2008 David Jean Louis
14350 -Website=http://www.jamendo.com
14351 diff --git a/src/plugins/jamendo/jamendo.py b/src/plugins/jamendo/jamendo.py
14352 deleted file mode 100644
14353 index 76e28a1..0000000
14354 --- a/src/plugins/jamendo/jamendo.py
14357 -# -*- coding: utf-8 -*-
14359 -# Copyright (c) 2008 David JL <izimobil@gmail.com>
14361 -# Permission is hereby granted, free of charge, to any person obtaining a
14362 -# copy of this software and associated documentation files (the "Software"),
14363 -# to deal in the Software without restriction, including without limitation
14364 -# the rights to use, copy, modify, merge, publish, distribute, sublicense,
14365 -# and/or sell copies of the Software, and to permit persons to whom the
14366 -# Software is furnished to do so, subject to the following conditions:
14368 -# The above copyright notice and this permission notice shall be included in
14369 -# all copies or substantial portions of the Software.
14371 -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14372 -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14373 -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
14374 -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
14375 -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
14376 -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
14377 -# DEALINGS IN THE SOFTWARE.
14380 -Jamendo totem plugin (http://www.jamendo.com).
14383 -- store thumbnails in relevant XDG directories (?)
14384 -- cleanup the notebook code
14385 -- interface with jamendo write API (not documented yet):
14386 - favorites, comments, etc...
14391 -from gi.repository import Gio
14392 -from gi.repository import Peas
14393 -from gi.repository import PeasGtk
14394 -from gi.repository import Gtk
14395 -from gi.repository import GdkPixbuf
14396 -from gi.repository import Totem
14397 -from gi.repository import Pango
14403 -from xml.sax.saxutils import escape
14406 -except ImportError:
14408 - import simplejson as json
14409 - except ImportError:
14410 - dlg = Gtk.MessageDialog(
14411 - message_type=Gtk.MessageType.ERROR,
14412 - buttons=Gtk.ButtonsType.OK
14414 - dlg.set_markup(_(u'You need to install the Python simplejson module.'))
14419 -socket.setdefaulttimeout(30)
14420 -gobject.threads_init()
14422 -class JamendoPlugin(gobject.GObject, Peas.Activatable, PeasGtk.Configurable):
14423 - __gtype_name__ = 'JamendoPlugin'
14425 - object = gobject.property(type = gobject.GObject)
14428 - Jamendo totem plugin GUI.
14430 - SEARCH_CRITERIA = ['artist_name', 'tag_idstr']
14431 - AUDIO_FORMATS = ['ogg2', 'mp31']
14436 - def __init__(self):
14437 - self.debug = True
14438 - self.gstreamer_plugins_present = True
14439 - self.totem = None
14440 - self.settings = Gio.Settings.new ('org.gnome.totem.plugins.jamendo')
14441 - self.settings.connect ('changed::format', self.on_format_changed)
14442 - self.settings.connect ('changed::num-per-page', self.on_num_per_page_changed)
14444 - def do_activate(self):
14446 - Plugin activation.
14448 - self.totem = self.object
14449 - # Initialise the interface
14450 - builder = Totem.plugin_load_interface ("jamendo", "jamendo.ui", True, self.totem.get_main_window (), self)
14451 - self.popup = builder.get_object('popup_menu')
14452 - container = builder.get_object('container')
14453 - self.notebook = builder.get_object('notebook')
14454 - self.search_entry = builder.get_object('search_entry')
14455 - self.search_combo = builder.get_object('search_combo')
14456 - self.search_combo.set_active(0)
14457 - self.album_button = builder.get_object('album_button')
14458 - self.previous_button = builder.get_object('previous_button')
14459 - self.next_button = builder.get_object('next_button')
14460 - self.progressbars = [
14461 - builder.get_object('results_progressbar'),
14462 - builder.get_object('popular_progressbar'),
14463 - builder.get_object('latest_progressbar'),
14465 - self.treeviews = [
14466 - builder.get_object('results_treeview'),
14467 - builder.get_object('popular_treeview'),
14468 - builder.get_object('latest_treeview'),
14470 - self.setup_treeviews()
14473 - builder.get_object('search_button').connect('clicked', self.on_search_button_clicked)
14474 - self.search_entry.connect('activate', self.on_search_entry_activate)
14475 - self.notebook.connect('switch-page', self.on_notebook_switch_page)
14476 - self.previous_button.connect('clicked', self.on_previous_button_clicked)
14477 - self.next_button.connect('clicked', self.on_next_button_clicked)
14478 - self.album_button.connect('clicked', self.on_album_button_clicked)
14479 - builder.get_object('add_to_playlist').connect('activate', self.on_add_to_playlist_activate)
14480 - builder.get_object('jamendo_album_page').connect('activate', self.on_open_jamendo_album_page_activate)
14483 - container.show_all()
14484 - self.totem.add_sidebar_page("jamendo", _(u"Jamendo"), container)
14486 - def do_deactivate(self):
14488 - Plugin deactivation.
14490 - self.totem.remove_sidebar_page("jamendo")
14492 - def do_create_configure_widget(self):
14494 - Plugin config widget.
14495 - This code must be independent from the rest of the plugin. FIXME: bgo#624073
14497 - builder = Totem.plugin_load_interface ('jamendo', 'jamendo.ui', True, None, self)
14498 - config_widget = builder.get_object ('config_widget')
14499 - config_widget.connect ('destroy', self.on_config_widget_destroy)
14500 - format = self.settings.get_enum ('format')
14501 - num_per_page = self.settings.get_value ('num-per-page').get_uint32 ()
14503 - # Set up the "format" combo box. We can't use g_settings_bind() here, as it won't automatically convert between enums and ints. To do so,
14504 - # we'd need to use g_settings_bind_with_mapping(), but that isn't introspectable. We have to handle the binding manually.
14505 - combo = builder.get_object('preferred_format_combo')
14506 - combo.set_active(format)
14507 - combo.connect ('changed', self.on_format_combo_changed)
14508 - self.settings.connect ('changed::format', self.on_format_setting_changed, combo)
14510 - spinbutton = builder.get_object('album_num_spinbutton')
14511 - spinbutton.set_value(num_per_page)
14512 - self.settings.bind ('num-per-page', spinbutton, 'value', Gio.SettingsBindFlags.DEFAULT)
14514 - return config_widget
14516 - def on_format_combo_changed (self, combo):
14518 - Called when the "format" preference combo box value is changed.
14520 - self.settings.set_enum ('format', combo.get_active ())
14522 - def on_format_setting_changed (self, settings, key, combo):
14524 - Called for the "format" preference combo box when the corresponding GSettings value is changed.
14526 - combo.set_active (self.settings.get_enum ('format'))
14528 - def on_format_changed (self, settings, key):
14529 - JamendoService.AUDIO_FORMAT = self.settings.get_enum ('format')
14531 - def on_num_per_page_changed (self, settings, key):
14532 - JamendoService.NUM_PER_PAGE = self.settings.get_int ('num-per-page')
14534 - def on_config_widget_destroy (self, widget):
14542 - XXX this will be refactored asap.
14544 - self.current_page = {
14545 - self.TAB_RESULTS: 1,
14546 - self.TAB_POPULAR: 1,
14547 - self.TAB_LATEST : 1
14549 - self.running_threads = {
14550 - self.TAB_RESULTS: False,
14551 - self.TAB_POPULAR: False,
14552 - self.TAB_LATEST : False
14555 - self.TAB_RESULTS: [],
14556 - self.TAB_POPULAR: [],
14557 - self.TAB_LATEST : []
14559 - self.album_count = [0, 0, 0]
14560 - for tv in self.treeviews:
14561 - tv.get_model().clear()
14562 - self._update_buttons_state()
14564 - def setup_treeviews(self):
14566 - Setup the 3 treeview: result, popular and latest
14568 - self.current_treeview = self.treeviews[0]
14569 - for w in self.treeviews:
14570 - selection = w.get_selection ()
14571 - selection.set_mode(Gtk.SelectionMode.MULTIPLE)
14572 - selection.connect ('changed', self.on_treeview_selection_changed)
14574 - # build pixbuf column
14575 - cell = Gtk.CellRendererPixbuf()
14576 - col = Gtk.TreeViewColumn(cell_renderer=cell, pixbuf=1)
14578 - w.append_column(col)
14580 - # build description column
14581 - cell = Gtk.CellRendererText()
14582 - cell.set_property('ellipsize', Pango.EllipsizeMode.END)
14583 - col = Gtk.TreeViewColumn(cell_renderer=cell, markup=2)
14584 - col.set_expand(True)
14585 - w.append_column(col)
14587 - # duration column
14588 - cell = Gtk.CellRendererText()
14589 - cell.set_property('xalign', 1.0)
14590 - cell.set_property('size-points', 8)
14591 - col = Gtk.TreeViewColumn(cell_renderer=cell, markup=3)
14592 - col.set_alignment(1.0)
14593 - w.append_column(col)
14595 - # configure the treeview
14596 - w.set_show_expanders(False) # we manage internally expand/collapse
14597 - w.set_tooltip_column(4) # set the tooltip column
14599 - # Connect signals
14600 - w.connect("button-press-event", self.on_treeview_row_clicked)
14601 - w.connect("row-activated", self.on_treeview_row_activated)
14604 - def add_treeview_item(self, treeview, album):
14605 - if not isinstance(album['image'], GdkPixbuf.Pixbuf):
14606 - # album image pixbuf is not yet built
14608 - pb = GdkPixbuf.Pixbuf.new_from_file(album['image'])
14609 - os.unlink(album['image'])
14610 - album['image'] = pb
14612 - # do not fail for this, just display a dummy pixbuf
14613 - album['image'] = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True,
14616 - title = '<b>%s</b>\n' % self._format_str(album['name'])
14617 - title += _(u'Artist: %s') % self._format_str(album['artist_name'])
14618 - # format duration
14619 - dur = self._format_duration(album['duration'])
14622 - # Translators: this is the release date of an album in Python strptime format
14623 - release = time.strptime(album['dates']['release'][0:10], _(u'%Y-%m-%d'))
14624 - # Translators: this is the release time of an album in Python strftime format
14625 - release = time.strftime(_(u'%x'), release)
14628 - tip = '\n'.join([
14629 - '<b>%s</b>' % self._format_str(album['name']),
14630 - _(u'Artist: %s') % self._format_str(album['artist_name']),
14631 - _(u'Genre: %s') % self._format_str(album['genre']),
14632 - _(u'Released on: %s') % release,
14633 - _(u'License: %s') % self._format_str(album['license'][0]),
14635 - # append album row
14636 - parent = treeview.get_model().append(None,
14637 - [album, album['image'], title, dur, tip]
14640 - # append track rows
14641 - icon = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1)
14642 - for i, track in enumerate(album['tracks']):
14644 - # Translators: this is the title of a track in Python format
14645 - # (first argument is the track number, second is the track title)
14646 - tt = (u'<small>%s</small>' % _(u'%02d. %s')) % \
14647 - (i+1, self._format_str(track['name']))
14649 - td = self._format_duration(track['duration'])
14651 - tip = '\n'.join([
14652 - '<b>%s</b>' % self._format_str(track['name']),
14653 - _(u'Album: %s') % self._format_str(album['name']),
14654 - _(u'Artist: %s') % self._format_str(album['artist_name']),
14655 - _(u'Duration: %s') % td,
14658 - treeview.get_model().append(parent, [track, icon, tt, td, tip])
14659 - # update current album count
14660 - pindex = self.treeviews.index(treeview)
14661 - self.album_count[pindex] += 1
14663 - def add_album_to_playlist(self, mode, album):
14665 - Add an album to the playlist, mode can be: replace, enqueue or
14666 - enqueue_and_play.
14668 - for i, track in enumerate(album['tracks']):
14669 - if mode in ('replace', 'enqueue_and_play'):
14671 - # play first track
14672 - self.add_track_to_playlist(mode, track)
14674 - # and enqueue other tracks
14675 - self.add_track_to_playlist('enqueue', track)
14677 - self.add_track_to_playlist('enqueue', track)
14679 - def add_track_to_playlist(self, mode, t):
14681 - Add a track to the playlist, mode can be: replace, enqueue or
14682 - enqueue_and_play.
14684 - if mode == 'replace':
14685 - self.totem.action_remote(Totem.RemoteCommand.REPLACE, t['stream'].encode ('UTF-8'))
14686 - elif mode == 'enqueue':
14687 - self.totem.action_remote(Totem.RemoteCommand.ENQUEUE, t['stream'].encode ('UTF-8'))
14689 - def fetch_albums(self, pn=1):
14691 - Initialize the fetch thread.
14693 - tab_index = self.treeviews.index(self.current_treeview)
14694 - if tab_index == self.TAB_POPULAR:
14695 - params = {'order': 'rating_desc'}
14696 - elif tab_index == self.TAB_LATEST:
14697 - params = {'order': 'date_desc'}
14699 - value = self.search_entry.get_text()
14702 - prop = self.SEARCH_CRITERIA[self.search_combo.get_active()]
14703 - params = {'order': 'date_desc', prop: value}
14704 - params['pn'] = pn
14705 - self.current_treeview.get_model().clear()
14706 - self.previous_button.set_sensitive(False)
14707 - self.next_button.set_sensitive(False)
14708 - self.album_button.set_sensitive(False)
14709 - self.progressbars[tab_index].show()
14710 - self.progressbars[tab_index].set_fraction(0.0)
14711 - self.progressbars[tab_index].set_text(
14712 - _(u'Fetching albums, please wait…')
14714 - lcb = (self.on_fetch_albums_loop, self.current_treeview)
14715 - dcb = (self.on_fetch_albums_done, self.current_treeview)
14716 - ecb = (self.on_fetch_albums_error, self.current_treeview)
14717 - thread = JamendoService(params, lcb, dcb, ecb)
14719 - self.running_threads[tab_index] = True
14721 - def on_fetch_albums_loop(self, treeview, album):
14723 - Add an album item and its tracks to the current treeview.
14725 - self.add_treeview_item(treeview, album)
14726 - # pulse progressbar
14727 - pindex = self.treeviews.index(treeview)
14728 - self.progressbars[pindex].set_fraction(
14729 - float(self.album_count[pindex]) / float(JamendoService.NUM_PER_PAGE)
14732 - def on_fetch_albums_done(self, treeview, albums, save_state=True):
14734 - Called when the thread finished fetching albums.
14736 - pindex = self.treeviews.index(treeview)
14737 - model = treeview.get_model()
14738 - if save_state and len(albums):
14739 - self.pages[pindex].append(albums)
14740 - self.current_page[pindex] = len(self.pages[pindex])
14741 - self._update_buttons_state()
14742 - self.progressbars[pindex].set_fraction(0.0)
14743 - self.progressbars[pindex].hide()
14744 - self.album_count[pindex] = 0
14745 - self.running_threads[pindex] = False
14747 - def on_fetch_albums_error(self, treeview, exc):
14749 - Called when an error occured in the thread.
14752 - pindex = self.treeviews.index(treeview)
14753 - self.progressbars[pindex].set_fraction(0.0)
14754 - self.progressbars[pindex].hide()
14755 - self.running_threads[pindex] = False
14757 - # managing exceptions with urllib is a real PITA... :(
14758 - if hasattr(exc, 'reason'):
14760 - reason = exc.reason[1]
14763 - reason = exc.reason[0]
14765 - reason = str(exc)
14766 - reason = reason.capitalize()
14767 - msg = _(u'Failed to connect to Jamendo server.\n%s.') % reason
14768 - elif hasattr(exc, 'code'):
14769 - msg = _(u'The Jamendo server returned code %s.') % exc.code
14773 - self.totem.action_error(_(u'An error occurred while fetching albums.'), msg)
14775 - def on_search_entry_activate(self, *args):
14777 - Called when the user typed <enter> in the search entry.
14779 - return self.on_search_button_clicked()
14781 - def on_search_button_clicked(self, *args):
14783 - Called when the user clicked on the search button.
14785 - if not self.search_entry.get_text():
14787 - if self.current_treeview != self.treeviews[self.TAB_RESULTS]:
14788 - self.current_treeview = self.treeviews[self.TAB_RESULTS]
14789 - self.notebook.set_current_page(self.TAB_RESULTS)
14791 - self.on_notebook_switch_page(new_search=True)
14793 - def on_notebook_switch_page(self, nb=None, tab=None, tab_num=0,
14794 - new_search=False):
14796 - Called when the changed a notebook page.
14798 - self.current_treeview = self.treeviews[int(tab_num)]
14799 - self._update_buttons_state()
14800 - model = self.current_treeview.get_model()
14801 - # fetch popular and latest albums only once
14802 - if self.running_threads[int(tab_num)] == True or \
14803 - (not new_search and len(model)):
14806 - self.current_page[self.TAB_RESULTS] = 1
14807 - self.pages[self.TAB_RESULTS] = []
14808 - self.album_count[self.TAB_RESULTS] = 0
14809 - self._update_buttons_state()
14811 - self.fetch_albums()
14813 - def on_treeview_row_activated(self, tv, path, column):
14815 - Called when the user double-clicked on a treeview element.
14818 - item = self._get_selection()[0] # first item selected
14822 - if path.get_depth () == 1:
14823 - self.add_album_to_playlist('replace', item)
14825 - self.add_track_to_playlist('replace', item)
14827 - def on_treeview_row_clicked(self, tv, evt):
14829 - Called when the user clicked on a treeview element.
14832 - if evt.button == 3:
14833 - (path, _, _, _) = tv.get_path_at_pos(int(evt.x), int(evt.y))
14834 - sel = tv.get_selection()
14835 - (_, rows) = sel.get_selected_rows()
14836 - if path not in rows:
14837 - sel.unselect_all()
14838 - sel.select_path(path)
14840 - self.popup.popup_for_device(None, None, None, None, None, evt.button, evt.time)
14843 - (event_x, event_y) = evt.get_coords()
14844 - (path, c, x, y) = tv.get_path_at_pos(int(event_x), int(event_y))
14845 - if (path.get_depth() == 1):
14846 - if tv.row_expanded(path):
14847 - tv.collapse_row(path)
14849 - tv.expand_row(path, False)
14853 - def on_treeview_selection_changed (self, selection):
14854 - (_, rows) = selection.get_selected_rows ()
14855 - self.album_button.set_sensitive (len (rows) > 0)
14857 - def on_previous_button_clicked(self, *args):
14859 - Called when the user clicked the previous button.
14861 - self._update_buttons_state()
14862 - model = self.current_treeview.get_model()
14864 - pindex = self.treeviews.index(self.current_treeview)
14865 - self.current_page[pindex] -= 1
14866 - albums = self.pages[pindex][self.current_page[pindex]-1]
14867 - for album in albums:
14868 - self.add_treeview_item(self.current_treeview, album)
14869 - self.on_fetch_albums_done(self.current_treeview, albums, False)
14871 - def on_next_button_clicked(self, *args):
14873 - Called when the user clicked the next button.
14875 - self._update_buttons_state()
14876 - model = self.current_treeview.get_model()
14878 - pindex = self.treeviews.index(self.current_treeview)
14879 - if self.current_page[pindex] == len(self.pages[pindex]):
14880 - self.fetch_albums(self.current_page[pindex]+1)
14882 - self.current_page[pindex] += 1
14883 - albums = self.pages[pindex][self.current_page[pindex]-1]
14884 - for album in albums:
14885 - self.add_treeview_item(self.current_treeview, album)
14886 - self.on_fetch_albums_done(self.current_treeview, albums, False)
14888 - def on_album_button_clicked(self, *args):
14890 - Called when the user clicked on the album button.
14893 - url = self._get_selection(True)[0]['url']
14894 - os.spawnlp(os.P_NOWAIT, "xdg-open", "xdg-open", url)
14898 - def on_add_to_playlist_activate(self, *args):
14900 - Called when the user clicked on the add to playlist button of the
14903 - items = self._get_selection()
14904 - for item in items:
14905 - if 'tracks' in item:
14906 - # we have an album
14907 - self.add_album_to_playlist('enqueue', item)
14909 - # we have a track
14910 - self.add_track_to_playlist('enqueue', item)
14912 - def on_open_jamendo_album_page_activate(self, *args):
14914 - Called when the user clicked on the jamendo album page button of the
14917 - return self.on_album_button_clicked()
14919 - def _get_selection(self, root=False):
14921 - Shortcut method to retrieve the treeview items selected.
14924 - sel = self.current_treeview.get_selection()
14925 - (model, rows) = sel.get_selected_rows()
14927 - it = model.get_iter(row)
14929 - # Return the parent node if root == true
14931 - parent_iter = model.iter_parent (it)
14932 - if parent_iter != None:
14935 - elt = model.get_value(it, 0)
14936 - if elt not in ret:
14940 - def _update_buttons_state(self):
14942 - Update the state of the previous and next buttons.
14944 - sel = self.current_treeview.get_selection()
14945 - (model, rows) = sel.get_selected_rows()
14947 - it = model.get_iter(rows[0])
14950 - pindex = self.treeviews.index(self.current_treeview)
14951 - self.previous_button.set_sensitive(self.current_page[pindex] > 1)
14952 - self.next_button.set_sensitive(len(model)==JamendoService.NUM_PER_PAGE)
14953 - self.album_button.set_sensitive(it is not None)
14956 - def _format_str(self, st, truncate=False):
14958 - Escape entities for pango markup and force the string to utf-8.
14963 - return escape (unicode (st))
14967 - def _format_duration(self, secs):
14969 - Format the given number of seconds to a human readable duration.
14974 - # Translators: time formatting (in Python strftime format) for the Jamendo plugin
14975 - # for times longer than an hour
14976 - return time.strftime(_(u'%H:%M:%S'), time.gmtime(secs))
14977 - # Translators: time formatting (in Python strftime format) for the Jamendo plugin
14978 - # for times shorter than an hour
14979 - return time.strftime(_(u'%M:%S'), time.gmtime(secs))
14984 -class JamendoService(threading.Thread):
14986 - Class that requests the jamendo REST service.
14989 - API_URL = 'http://api.jamendo.com/get2'
14990 - AUDIO_FORMAT = 'ogg2'
14991 - NUM_PER_PAGE = 10
14993 - def __init__(self, params, loop_cb, done_cb, error_cb):
14994 - self.params = params
14995 - self.loop_cb = loop_cb
14996 - self.done_cb = done_cb
14997 - self.error_cb = error_cb
14998 - self.lock = threading.Lock()
14999 - threading.Thread.__init__(self)
15002 - url = '%s/id+name+duration+image+genre+dates+url+artist_id+' \
15003 - 'artist_name+artist_url/album/json/?n=%s&imagesize=50' % \
15004 - (self.API_URL, self.NUM_PER_PAGE)
15005 - if len(self.params):
15006 - url += '&%s' % urllib.urlencode(self.params)
15008 - self.lock.acquire()
15009 - albums = json.loads(self._request(url))
15011 - for i, album in enumerate(albums):
15012 - fname, headers = urllib.urlretrieve(album['image'])
15013 - album['image'] = fname
15014 - album['tracks'] = json.loads(self._request(
15015 - '%s/id+name+duration+stream/track/json/?album_id=%s'\
15016 - '&order=numalbum_asc&streamencoding=%s' % (self.API_URL, album['id'], self.AUDIO_FORMAT)
15018 - album['license'] = json.loads(self._request(
15019 - '%s/name/license/json/album_license/?album_id=%s'\
15020 - % (self.API_URL, album['id'])
15022 - # Translators: If Jamendo supports your language, replace "en" with the language code, enclosed
15023 - # in slashes, used to view pages in your language on the Jamendo website. e.g. For French, "en"
15024 - # would be translated to "fr", as Jamendo uses that in its URLs:
15025 - # http://www.jamendo.com/fr/album/4818
15027 - # http://www.jamendo.com/en/album/4818
15028 - # If Jamendo doesn't support your language, *do not translate this string*!
15029 - album['url'] = album['url'].replace('/en/', '/' + _('en') + '/')
15030 - gobject.idle_add(self.loop_cb[0], self.loop_cb[1], album)
15031 - gobject.idle_add(self.done_cb[0], self.done_cb[1], albums)
15032 - except Exception as exc:
15033 - gobject.idle_add(self.error_cb[0], self.error_cb[1], exc)
15035 - self.lock.release()
15037 - def _request(self, url):
15038 - opener = urllib2.build_opener()
15039 - opener.addheaders = [('User-agent', 'Totem Jamendo plugin')]
15040 - handle = opener.open(url)
15041 - data = handle.read()
15044 diff --git a/src/plugins/jamendo/jamendo.ui b/src/plugins/jamendo/jamendo.ui
15045 deleted file mode 100644
15046 index cca7b1c..0000000
15047 --- a/src/plugins/jamendo/jamendo.ui
15050 -<?xml version="1.0"?>
15051 -<!--*- mode: xml -*-->
15053 - <object class="GtkAdjustment" id="adjustment1">
15054 - <property name="upper">100</property>
15055 - <property name="lower">1</property>
15056 - <property name="page_increment">0</property>
15057 - <property name="step_increment">1</property>
15058 - <property name="page_size">0</property>
15059 - <property name="value">10</property>
15061 - <object class="GtkListStore" id="search_combo_model">
15063 - <column type="gchararray"/>
15067 - <col id="0" translatable="yes">By artist</col>
15070 - <col id="0" translatable="yes">By tag</col>
15074 - <object class="GtkListStore" id="preferred_format_combo_model">
15076 - <column type="gchararray"/>
15080 - <col id="0">Ogg</col>
15083 - <col id="0">MP3</col>
15087 - <object class="GtkTreeStore" id="results_treeview_model">
15089 - <column type="PyObject"/>
15090 - <column type="GdkPixbuf"/>
15091 - <column type="gchararray"/>
15092 - <column type="gchararray"/>
15093 - <column type="gchararray"/>
15096 - <object class="GtkTreeStore" id="popular_treeview_model">
15098 - <column type="PyObject"/>
15099 - <column type="GdkPixbuf"/>
15100 - <column type="gchararray"/>
15101 - <column type="gchararray"/>
15102 - <column type="gchararray"/>
15105 - <object class="GtkTreeStore" id="latest_treeview_model">
15107 - <column type="PyObject"/>
15108 - <column type="GdkPixbuf"/>
15109 - <column type="gchararray"/>
15110 - <column type="gchararray"/>
15111 - <column type="gchararray"/>
15114 - <object class="GtkUIManager" id="uimanager1">
15116 - <object class="GtkActionGroup" id="actiongroup1">
15118 - <object class="GtkAction" id="add_to_playlist">
15119 - <property name="stock_id">gtk-add</property>
15120 - <property name="name">add_to_playlist</property>
15121 - <property name="label" translatable="yes">_Add to Playlist</property>
15125 - <object class="GtkAction" id="jamendo_album_page">
15126 - <property name="stock_id">gtk-jump-to</property>
15127 - <property name="name">jamendo_album_page</property>
15128 - <property name="label" translatable="yes">_Open Jamendo Album Page in Browser</property>
15134 - <popup name="popup_menu">
15135 - <menuitem action="add_to_playlist"/>
15136 - <menuitem action="jamendo_album_page"/>
15140 - <object class="GtkImage" id="album_button_image">
15141 - <property name="visible">True</property>
15142 - <property name="stock">gtk-jump-to</property>
15143 - <property name="icon_size">4</property>
15144 - <property name="xalign">0.5</property>
15145 - <property name="yalign">0.5</property>
15146 - <property name="xpad">0</property>
15147 - <property name="ypad">0</property>
15149 - <object class="GtkVBox" id="container">
15150 - <property name="visible">True</property>
15151 - <property name="homogeneous">False</property>
15152 - <property name="spacing">6</property>
15154 - <object class="GtkEntry" id="search_entry">
15155 - <property name="visible">True</property>
15156 - <property name="can_focus">True</property>
15157 - <property name="editable">True</property>
15158 - <property name="visibility">True</property>
15159 - <property name="max_length">0</property>
15160 - <property name="text" translatable="yes"/>
15161 - <property name="has_frame">True</property>
15162 - <property name="activates_default">False</property>
15165 - <property name="padding">0</property>
15166 - <property name="expand">False</property>
15167 - <property name="fill">True</property>
15171 - <object class="GtkHBox" id="search_hbox">
15172 - <property name="visible">True</property>
15173 - <property name="homogeneous">False</property>
15174 - <property name="spacing">6</property>
15176 - <object class="GtkComboBox" id="search_combo">
15177 - <property name="model">search_combo_model</property>
15178 - <property name="visible">True</property>
15179 - <property name="add_tearoffs">False</property>
15180 - <property name="focus_on_click">True</property>
15182 - <object class="GtkCellRendererText" id="renderer1"/>
15184 - <attribute name="text">0</attribute>
15189 - <property name="padding">0</property>
15190 - <property name="expand">True</property>
15191 - <property name="fill">True</property>
15195 - <object class="GtkButton" id="search_button">
15196 - <property name="use-stock">True</property>
15197 - <property name="label">gtk-find</property>
15200 - <property name="padding">0</property>
15201 - <property name="expand">True</property>
15202 - <property name="fill">True</property>
15207 - <property name="padding">0</property>
15208 - <property name="expand">False</property>
15209 - <property name="fill">True</property>
15213 - <object class="GtkNotebook" id="notebook">
15214 - <property name="visible">True</property>
15215 - <property name="can_focus">True</property>
15216 - <property name="show_tabs">True</property>
15217 - <property name="show_border">True</property>
15218 - <property name="tab_pos">GTK_POS_TOP</property>
15219 - <property name="scrollable">False</property>
15220 - <property name="enable_popup">False</property>
15222 - <object class="GtkVBox" id="vbox1">
15223 - <property name="visible">True</property>
15224 - <property name="homogeneous">False</property>
15225 - <property name="spacing">6</property>
15227 - <object class="GtkScrolledWindow" id="results_scrolledwindow">
15228 - <property name="visible">True</property>
15229 - <property name="can_focus">True</property>
15230 - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
15231 - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
15232 - <property name="shadow_type">GTK_SHADOW_NONE</property>
15233 - <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
15235 - <object class="GtkViewport" id="viewport1">
15236 - <property name="visible">True</property>
15237 - <property name="shadow_type">GTK_SHADOW_IN</property>
15239 - <object class="GtkTreeView" id="results_treeview">
15240 - <property name="model">results_treeview_model</property>
15241 - <property name="visible">True</property>
15242 - <property name="can_focus">True</property>
15243 - <property name="headers_visible">False</property>
15244 - <property name="rules_hint">False</property>
15245 - <property name="reorderable">False</property>
15246 - <property name="enable_search">True</property>
15247 - <property name="fixed_height_mode">False</property>
15248 - <property name="hover_selection">False</property>
15249 - <property name="hover_expand">False</property>
15256 - <property name="padding">0</property>
15257 - <property name="expand">True</property>
15258 - <property name="fill">True</property>
15262 - <object class="GtkProgressBar" id="results_progressbar">
15263 - <property name="fraction">0</property>
15264 - <property name="pulse_step">0.10000000149</property>
15265 - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
15268 - <property name="padding">0</property>
15269 - <property name="expand">False</property>
15270 - <property name="fill">False</property>
15275 - <property name="tab_expand">False</property>
15276 - <property name="tab_fill">True</property>
15279 - <child type="tab">
15280 - <object class="GtkLabel" id="results_tab_label">
15281 - <property name="visible">True</property>
15282 - <property name="label" translatable="yes">Search Results</property>
15283 - <property name="use_underline">False</property>
15284 - <property name="use_markup">False</property>
15285 - <property name="justify">GTK_JUSTIFY_LEFT</property>
15286 - <property name="wrap">True</property>
15287 - <property name="selectable">False</property>
15288 - <property name="xalign">0.5</property>
15289 - <property name="yalign">0.5</property>
15290 - <property name="xpad">0</property>
15291 - <property name="ypad">0</property>
15292 - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
15293 - <property name="width_chars">-1</property>
15294 - <property name="single_line_mode">False</property>
15295 - <property name="angle">0</property>
15299 - <object class="GtkVBox" id="vbox2">
15300 - <property name="visible">True</property>
15301 - <property name="homogeneous">False</property>
15302 - <property name="spacing">6</property>
15304 - <object class="GtkScrolledWindow" id="popular_scrolledwindow">
15305 - <property name="visible">True</property>
15306 - <property name="can_focus">True</property>
15307 - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
15308 - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
15309 - <property name="shadow_type">GTK_SHADOW_NONE</property>
15310 - <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
15312 - <object class="GtkViewport" id="viewport2">
15313 - <property name="visible">True</property>
15314 - <property name="shadow_type">GTK_SHADOW_IN</property>
15316 - <object class="GtkTreeView" id="popular_treeview">
15317 - <property name="model">popular_treeview_model</property>
15318 - <property name="visible">True</property>
15319 - <property name="can_focus">True</property>
15320 - <property name="headers_visible">False</property>
15321 - <property name="rules_hint">False</property>
15322 - <property name="reorderable">False</property>
15323 - <property name="enable_search">True</property>
15324 - <property name="fixed_height_mode">False</property>
15325 - <property name="hover_selection">False</property>
15326 - <property name="hover_expand">False</property>
15333 - <property name="padding">0</property>
15334 - <property name="expand">True</property>
15335 - <property name="fill">True</property>
15339 - <object class="GtkProgressBar" id="popular_progressbar">
15340 - <property name="fraction">0</property>
15341 - <property name="pulse_step">0.10000000149</property>
15342 - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
15345 - <property name="padding">0</property>
15346 - <property name="expand">False</property>
15347 - <property name="fill">False</property>
15352 - <property name="tab_expand">False</property>
15353 - <property name="tab_fill">True</property>
15356 - <child type="tab">
15357 - <object class="GtkLabel" id="popular_tab_label">
15358 - <property name="visible">True</property>
15359 - <property name="label" translatable="yes">Popular</property>
15360 - <property name="use_underline">False</property>
15361 - <property name="use_markup">False</property>
15362 - <property name="justify">GTK_JUSTIFY_LEFT</property>
15363 - <property name="wrap">True</property>
15364 - <property name="selectable">False</property>
15365 - <property name="xalign">0.5</property>
15366 - <property name="yalign">0.5</property>
15367 - <property name="xpad">0</property>
15368 - <property name="ypad">0</property>
15369 - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
15370 - <property name="width_chars">-1</property>
15371 - <property name="single_line_mode">False</property>
15372 - <property name="angle">0</property>
15376 - <object class="GtkVBox" id="vbox3">
15377 - <property name="visible">True</property>
15378 - <property name="homogeneous">False</property>
15379 - <property name="spacing">6</property>
15381 - <object class="GtkScrolledWindow" id="latest_scrolledwindow">
15382 - <property name="visible">True</property>
15383 - <property name="can_focus">True</property>
15384 - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
15385 - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
15386 - <property name="shadow_type">GTK_SHADOW_NONE</property>
15387 - <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
15389 - <object class="GtkViewport" id="viewport3">
15390 - <property name="visible">True</property>
15391 - <property name="shadow_type">GTK_SHADOW_IN</property>
15393 - <object class="GtkTreeView" id="latest_treeview">
15394 - <property name="model">latest_treeview_model</property>
15395 - <property name="visible">True</property>
15396 - <property name="can_focus">True</property>
15397 - <property name="headers_visible">False</property>
15398 - <property name="rules_hint">False</property>
15399 - <property name="reorderable">False</property>
15400 - <property name="enable_search">True</property>
15401 - <property name="fixed_height_mode">False</property>
15402 - <property name="hover_selection">False</property>
15403 - <property name="hover_expand">False</property>
15410 - <property name="padding">0</property>
15411 - <property name="expand">True</property>
15412 - <property name="fill">True</property>
15416 - <object class="GtkProgressBar" id="latest_progressbar">
15417 - <property name="fraction">0</property>
15418 - <property name="pulse_step">0.10000000149</property>
15419 - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
15422 - <property name="padding">0</property>
15423 - <property name="expand">False</property>
15424 - <property name="fill">False</property>
15429 - <property name="tab_expand">False</property>
15430 - <property name="tab_fill">True</property>
15433 - <child type="tab">
15434 - <object class="GtkLabel" id="latest_tab_label">
15435 - <property name="visible">True</property>
15436 - <property name="label" translatable="yes">Latest Releases</property>
15437 - <property name="use_underline">False</property>
15438 - <property name="use_markup">False</property>
15439 - <property name="justify">GTK_JUSTIFY_LEFT</property>
15440 - <property name="wrap">True</property>
15441 - <property name="selectable">False</property>
15442 - <property name="xalign">0.5</property>
15443 - <property name="yalign">0.5</property>
15444 - <property name="xpad">0</property>
15445 - <property name="ypad">0</property>
15446 - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
15447 - <property name="width_chars">-1</property>
15448 - <property name="single_line_mode">False</property>
15449 - <property name="angle">0</property>
15454 - <property name="padding">0</property>
15455 - <property name="expand">True</property>
15456 - <property name="fill">True</property>
15460 - <object class="GtkHBox" id="hbox1">
15461 - <property name="visible">True</property>
15462 - <property name="homogeneous">False</property>
15463 - <property name="spacing">6</property>
15465 - <object class="GtkButton" id="album_button">
15466 - <property name="visible">True</property>
15467 - <property name="sensitive">False</property>
15468 - <property name="can_focus">True</property>
15469 - <property name="relief">GTK_RELIEF_NORMAL</property>
15470 - <property name="focus_on_click">True</property>
15471 - <property name="image">album_button_image</property>
15472 - <property name="label" translatable="yes">Jamendo Album Page</property>
15475 - <property name="padding">0</property>
15476 - <property name="expand">False</property>
15477 - <property name="fill">False</property>
15481 - <object class="GtkHBox" id="hbox2">
15482 - <property name="visible">True</property>
15483 - <property name="homogeneous">False</property>
15484 - <property name="spacing">6</property>
15486 - <object class="GtkButton" id="previous_button">
15487 - <property name="visible">True</property>
15488 - <property name="sensitive">False</property>
15489 - <property name="can_focus">True</property>
15490 - <property name="relief">GTK_RELIEF_NORMAL</property>
15491 - <property name="focus_on_click">True</property>
15493 - <object class="GtkImage" id="previous_button_image">
15494 - <property name="visible">True</property>
15495 - <property name="stock">gtk-go-back</property>
15496 - <property name="icon_size">4</property>
15497 - <property name="xalign">0.5</property>
15498 - <property name="yalign">0.5</property>
15499 - <property name="xpad">0</property>
15500 - <property name="ypad">0</property>
15505 - <property name="padding">0</property>
15506 - <property name="expand">False</property>
15507 - <property name="fill">False</property>
15511 - <object class="GtkButton" id="next_button">
15512 - <property name="visible">True</property>
15513 - <property name="sensitive">False</property>
15514 - <property name="can_focus">True</property>
15515 - <property name="relief">GTK_RELIEF_NORMAL</property>
15516 - <property name="focus_on_click">True</property>
15518 - <object class="GtkImage" id="next_button_image">
15519 - <property name="visible">True</property>
15520 - <property name="stock">gtk-go-forward</property>
15521 - <property name="icon_size">4</property>
15522 - <property name="xalign">0.5</property>
15523 - <property name="yalign">0.5</property>
15524 - <property name="xpad">0</property>
15525 - <property name="ypad">0</property>
15530 - <property name="padding">0</property>
15531 - <property name="expand">False</property>
15532 - <property name="fill">False</property>
15537 - <property name="padding">0</property>
15538 - <property name="expand">False</property>
15539 - <property name="fill">True</property>
15540 - <property name="pack_type">GTK_PACK_END</property>
15545 - <property name="padding">0</property>
15546 - <property name="expand">False</property>
15547 - <property name="fill">False</property>
15551 - <object class="GtkTable" id="config_widget">
15552 - <property name="visible">True</property>
15553 - <property name="n_rows">2</property>
15554 - <property name="n_columns">2</property>
15555 - <property name="homogeneous">False</property>
15556 - <property name="row_spacing">6</property>
15557 - <property name="column_spacing">6</property>
15558 - <property name="border_width">5</property>
15560 - <object class="GtkLabel" id="album_num_label">
15561 - <property name="visible">True</property>
15562 - <property name="label" translatable="yes">Number of albums to _retrieve:</property>
15563 - <property name="use_underline">True</property>
15564 - <property name="mnemonic-widget">album_num_spinbutton</property>
15565 - <property name="use_markup">False</property>
15566 - <property name="justify">GTK_JUSTIFY_LEFT</property>
15567 - <property name="wrap">False</property>
15568 - <property name="selectable">False</property>
15569 - <property name="xalign">0</property>
15570 - <property name="yalign">0.5</property>
15571 - <property name="xpad">0</property>
15572 - <property name="ypad">0</property>
15573 - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
15574 - <property name="width_chars">-1</property>
15575 - <property name="single_line_mode">False</property>
15576 - <property name="angle">0</property>
15579 - <property name="left_attach">0</property>
15580 - <property name="right_attach">1</property>
15581 - <property name="top_attach">1</property>
15582 - <property name="bottom_attach">2</property>
15586 - <object class="GtkSpinButton" id="album_num_spinbutton">
15587 - <property name="visible">True</property>
15588 - <property name="can_focus">True</property>
15589 - <property name="climb_rate">1</property>
15590 - <property name="digits">0</property>
15591 - <property name="numeric">False</property>
15592 - <property name="snap_to_ticks">False</property>
15593 - <property name="wrap">False</property>
15594 - <property name="adjustment">adjustment1</property>
15597 - <property name="left_attach">1</property>
15598 - <property name="right_attach">2</property>
15599 - <property name="top_attach">1</property>
15600 - <property name="bottom_attach">2</property>
15604 - <object class="GtkComboBox" id="preferred_format_combo">
15605 - <property name="model">preferred_format_combo_model</property>
15606 - <property name="visible">True</property>
15607 - <property name="add_tearoffs">False</property>
15608 - <property name="focus_on_click">True</property>
15610 - <object class="GtkCellRendererText" id="renderer2"/>
15612 - <attribute name="text">0</attribute>
15617 - <property name="left_attach">1</property>
15618 - <property name="right_attach">2</property>
15619 - <property name="top_attach">0</property>
15620 - <property name="bottom_attach">1</property>
15621 - <property name="y_options"/>
15625 - <object class="GtkLabel" id="preferred_format_label">
15626 - <property name="visible">True</property>
15627 - <property name="label" translatable="yes">Preferred audio _format:</property>
15628 - <property name="use_underline">True</property>
15629 - <property name="mnemonic-widget">preferred_format_combo</property>
15630 - <property name="use_markup">False</property>
15631 - <property name="justify">GTK_JUSTIFY_LEFT</property>
15632 - <property name="wrap">False</property>
15633 - <property name="selectable">False</property>
15634 - <property name="xalign">0</property>
15635 - <property name="yalign">0.5</property>
15636 - <property name="xpad">0</property>
15637 - <property name="ypad">0</property>
15638 - <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
15639 - <property name="width_chars">-1</property>
15640 - <property name="single_line_mode">False</property>
15641 - <property name="angle">0</property>
15644 - <property name="left_attach">0</property>
15645 - <property name="right_attach">1</property>
15646 - <property name="top_attach">0</property>
15647 - <property name="bottom_attach">1</property>
15651 - <object class="GtkMenu" constructor="uimanager1" id="popup_menu"/>
15653 diff --git a/src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in b/src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in
15654 deleted file mode 100644
15655 index 3fe7739..0000000
15656 --- a/src/plugins/jamendo/org.gnome.totem.plugins.jamendo.gschema.xml.in.in
15659 -<?xml version="1.0" encoding="UTF-8"?>
15661 - <enum id="org.gnome.totem.plugins.jamendo.Format">
15662 - <value nick="ogg" value="0"/>
15663 - <value nick="mp3" value="1"/>
15666 - <schema id="org.gnome.totem.plugins.jamendo" path="/org/gnome/Totem/jamendo/" gettext-domain="@GETTEXT_PACKAGE@">
15667 - <key name="num-per-page" type="u">
15668 - <default>10</default>
15669 - <_summary>Number of results per page</_summary>
15670 - <_description>The number of Jamendo search results to display in each page of results.</_description>
15672 - <key name="format" enum="org.gnome.totem.plugins.jamendo.Format">
15673 - <default>'ogg'</default>
15674 - <_summary>Audio format to download from Jamendo</_summary>
15675 - <_description>The preferred audio format to download tracks from Jamendo in.</_description>
15679 diff --git a/src/plugins/media-player-keys/totem-media-player-keys.c b/src/plugins/media-player-keys/totem-media-player-keys.c
15680 index 9534ba6..a6cd721 100644
15681 --- a/src/plugins/media-player-keys/totem-media-player-keys.c
15682 +++ b/src/plugins/media-player-keys/totem-media-player-keys.c
15684 #include <glib-object.h>
15685 #include <glib/gi18n-lib.h>
15686 #include <gmodule.h>
15687 -#include <dbus/dbus-glib.h>
15688 #include <libpeas/peas-extension-base.h>
15689 #include <libpeas/peas-object-module.h>
15690 #include <libpeas/peas-activatable.h>
15692 #define TOTEM_MEDIA_PLAYER_KEYS_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TOTEM_TYPE_MEDIA_PLAYER_KEYS_PLUGIN, TotemMediaPlayerKeysPluginClass))
15695 - DBusGProxy *media_player_keys_proxy;
15696 + GDBusProxy *proxy;
15699 + GCancellable *cancellable_init;
15700 + GCancellable *cancellable;
15701 } TotemMediaPlayerKeysPluginPrivate;
15703 TOTEM_PLUGIN_REGISTER(TOTEM_TYPE_MEDIA_PLAYER_KEYS_PLUGIN,
15704 @@ -58,122 +60,200 @@ TOTEM_PLUGIN_REGISTER(TOTEM_TYPE_MEDIA_PLAYER_KEYS_PLUGIN,
15705 totem_media_player_keys_plugin);
15708 -on_media_player_key_pressed (DBusGProxy *proxy, const gchar *application, const gchar *key, TotemObject *totem)
15709 +on_media_player_key_pressed (TotemObject *totem,
15710 + const gchar *key)
15712 - if (strcmp ("Totem", application) == 0) {
15713 - if (strcmp ("Play", key) == 0)
15714 - totem_action_play_pause (totem);
15715 - else if (strcmp ("Previous", key) == 0)
15716 - totem_action_previous (totem);
15717 - else if (strcmp ("Next", key) == 0)
15718 - totem_action_next (totem);
15719 - else if (strcmp ("Stop", key) == 0)
15720 - totem_action_pause (totem);
15721 - else if (strcmp ("FastForward", key) == 0)
15722 - totem_action_remote (totem, TOTEM_REMOTE_COMMAND_SEEK_FORWARD, NULL);
15723 - else if (strcmp ("Rewind", key) == 0)
15724 - totem_action_remote (totem, TOTEM_REMOTE_COMMAND_SEEK_BACKWARD, NULL);
15725 - else if (strcmp ("Repeat", key) == 0) {
15728 - value = totem_action_remote_get_setting (totem, TOTEM_REMOTE_SETTING_REPEAT);
15729 - totem_action_remote_set_setting (totem, TOTEM_REMOTE_SETTING_REPEAT, !value);
15730 - } else if (strcmp ("Shuffle", key) == 0) {
15733 - value = totem_action_remote_get_setting (totem, TOTEM_REMOTE_SETTING_SHUFFLE);
15734 - totem_action_remote_set_setting (totem, TOTEM_REMOTE_SETTING_SHUFFLE, !value);
15736 + if (strcmp ("Play", key) == 0)
15737 + totem_action_play_pause (totem);
15738 + else if (strcmp ("Previous", key) == 0)
15739 + totem_action_previous (totem);
15740 + else if (strcmp ("Next", key) == 0)
15741 + totem_action_next (totem);
15742 + else if (strcmp ("Stop", key) == 0)
15743 + totem_action_pause (totem);
15744 + else if (strcmp ("FastForward", key) == 0)
15745 + totem_action_remote (totem, TOTEM_REMOTE_COMMAND_SEEK_FORWARD, NULL);
15746 + else if (strcmp ("Rewind", key) == 0)
15747 + totem_action_remote (totem, TOTEM_REMOTE_COMMAND_SEEK_BACKWARD, NULL);
15748 + else if (strcmp ("Repeat", key) == 0) {
15751 + value = totem_action_remote_get_setting (totem, TOTEM_REMOTE_SETTING_REPEAT);
15752 + totem_action_remote_set_setting (totem, TOTEM_REMOTE_SETTING_REPEAT, !value);
15753 + } else if (strcmp ("Shuffle", key) == 0) {
15756 + value = totem_action_remote_get_setting (totem, TOTEM_REMOTE_SETTING_SHUFFLE);
15757 + totem_action_remote_set_setting (totem, TOTEM_REMOTE_SETTING_SHUFFLE, !value);
15762 -on_window_focus_in_event (GtkWidget *window, GdkEventFocus *event, TotemMediaPlayerKeysPlugin *pi)
15764 +grab_media_player_keys_cb (GDBusProxy *proxy,
15765 + GAsyncResult *res,
15766 + TotemMediaPlayerKeysPlugin *pi)
15768 - if (pi->priv->media_player_keys_proxy != NULL) {
15769 - dbus_g_proxy_call (pi->priv->media_player_keys_proxy,
15770 - "GrabMediaPlayerKeys", NULL,
15771 - G_TYPE_STRING, "Totem", G_TYPE_UINT, 0, G_TYPE_INVALID,
15773 + GVariant *variant;
15774 + GError *error = NULL;
15776 + variant = g_dbus_proxy_call_finish (proxy, res, &error);
15777 + pi->priv->cancellable = NULL;
15779 + if (variant == NULL) {
15780 + if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
15781 + g_warning ("Failed to call \"GrabMediaPlayerKeys\": %s", error->message);
15782 + g_error_free (error);
15785 + g_variant_unref (variant);
15788 + g_object_unref (pi);
15792 -proxy_destroy (DBusGProxy *proxy,
15793 - TotemMediaPlayerKeysPlugin* plugin)
15794 +grab_media_player_keys (TotemMediaPlayerKeysPlugin *pi)
15796 - plugin->priv->media_player_keys_proxy = NULL;
15797 + GCancellable *cancellable;
15799 + if (pi->priv->proxy == NULL)
15802 + /* Only allow one key grab operation to happen concurrently */
15803 + if (pi->priv->cancellable) {
15804 + g_cancellable_cancel (pi->priv->cancellable);
15807 + cancellable = g_cancellable_new ();
15808 + pi->priv->cancellable = cancellable;
15810 + g_dbus_proxy_call (pi->priv->proxy,
15811 + "GrabMediaPlayerKeys",
15812 + g_variant_new ("(su)", "Totem", 0),
15813 + G_DBUS_CALL_FLAGS_NONE,
15815 + (GAsyncReadyCallback) grab_media_player_keys_cb,
15816 + g_object_ref (pi));
15818 + /* GDBus keeps a reference throughout the async call */
15819 + g_object_unref (cancellable);
15823 +on_window_focus_in_event (GtkWidget *window,
15824 + GdkEventFocus *event,
15825 + TotemMediaPlayerKeysPlugin *pi)
15827 + grab_media_player_keys (pi);
15833 -impl_activate (PeasActivatable *plugin)
15834 +key_pressed (GDBusProxy *proxy,
15835 + gchar *sender_name,
15836 + gchar *signal_name,
15837 + GVariant *parameters,
15838 + TotemMediaPlayerKeysPlugin *pi)
15840 - TotemMediaPlayerKeysPlugin *pi = TOTEM_MEDIA_PLAYER_KEYS_PLUGIN (plugin);
15841 - TotemObject *totem;
15842 - DBusGConnection *connection;
15843 - GError *err = NULL;
15844 - GtkWindow *window;
15847 - connection = dbus_g_bus_get (DBUS_BUS_SESSION, &err);
15848 - if (connection == NULL) {
15849 - g_warning ("Error connecting to D-Bus: %s", err->message);
15850 + if (g_strcmp0 (signal_name, "MediaPlayerKeyPressed") != 0)
15853 + g_variant_get (parameters, "(ss)", &app, &cmd);
15854 + if (g_strcmp0 (app, "Totem") == 0) {
15855 + TotemObject *totem;
15857 - /* Try the gnome-settings-daemon version,
15858 - * then the gnome-control-center version of things */
15859 - pi->priv->media_player_keys_proxy = dbus_g_proxy_new_for_name_owner (connection,
15860 - "org.gnome.SettingsDaemon",
15861 - "/org/gnome/SettingsDaemon/MediaKeys",
15862 - "org.gnome.SettingsDaemon.MediaKeys",
15864 - if (pi->priv->media_player_keys_proxy == NULL) {
15865 - pi->priv->media_player_keys_proxy = dbus_g_proxy_new_for_name_owner (connection,
15866 - "org.gnome.SettingsDaemon",
15867 - "/org/gnome/SettingsDaemon",
15868 - "org.gnome.SettingsDaemon",
15870 + totem = g_object_get_data (G_OBJECT (pi), "object");
15871 + on_media_player_key_pressed (totem, cmd);
15878 +got_proxy_cb (GObject *source_object,
15879 + GAsyncResult *res,
15880 + TotemMediaPlayerKeysPlugin *pi)
15882 + GError *error = NULL;
15884 - dbus_g_connection_unref (connection);
15885 - if (err != NULL) {
15887 - gboolean daemon_not_running;
15888 - g_warning ("Failed to create dbus proxy for org.gnome.SettingsDaemon: %s",
15890 - daemon_not_running = (err->code == DBUS_GERROR_NAME_HAS_NO_OWNER);
15891 - g_error_free (err);
15892 - /* don't popup error if settings-daemon is not running,
15893 - * ie when starting totem not under GNOME desktop */
15894 - return daemon_not_running;
15896 + pi->priv->proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
15897 + pi->priv->cancellable_init = NULL;
15899 + if (pi->priv->proxy == NULL) {
15900 + if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
15901 + g_warning ("Failed to contact settings daemon: %s", error->message);
15902 + g_error_free (error);
15905 - g_signal_connect_object (pi->priv->media_player_keys_proxy,
15907 - G_CALLBACK (proxy_destroy),
15911 - dbus_g_proxy_call (pi->priv->media_player_keys_proxy,
15912 - "GrabMediaPlayerKeys", NULL,
15913 - G_TYPE_STRING, "Totem", G_TYPE_UINT, 0, G_TYPE_INVALID,
15915 + grab_media_player_keys (pi);
15917 - totem = g_object_get_data (G_OBJECT (plugin), "object");
15918 + g_signal_connect (G_OBJECT (pi->priv->proxy), "g-signal",
15919 + G_CALLBACK (key_pressed), pi);
15921 + g_object_unref (pi);
15925 +name_appeared_cb (GDBusConnection *connection,
15926 + const gchar *name,
15927 + const gchar *name_owner,
15928 + TotemMediaPlayerKeysPlugin *pi)
15930 + GCancellable *cancellable;
15932 + cancellable = g_cancellable_new ();
15933 + pi->priv->cancellable_init = cancellable;
15935 - dbus_g_object_register_marshaller (totem_marshal_VOID__STRING_STRING,
15936 - G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
15937 - dbus_g_proxy_add_signal (pi->priv->media_player_keys_proxy, "MediaPlayerKeyPressed",
15938 - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
15939 - dbus_g_proxy_connect_signal (pi->priv->media_player_keys_proxy, "MediaPlayerKeyPressed",
15940 - G_CALLBACK (on_media_player_key_pressed), totem, NULL);
15941 + g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
15942 + G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
15943 + G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
15945 + "org.gnome.SettingsDaemon",
15946 + "/org/gnome/SettingsDaemon/MediaKeys",
15947 + "org.gnome.SettingsDaemon.MediaKeys",
15949 + (GAsyncReadyCallback) got_proxy_cb,
15950 + g_object_ref (pi));
15952 + /* GDBus keeps a reference throughout the async call */
15953 + g_object_unref (cancellable);
15957 +name_vanished_cb (GDBusConnection *connection,
15958 + const gchar *name,
15959 + TotemMediaPlayerKeysPlugin *pi)
15961 + if (pi->priv->proxy != NULL) {
15962 + g_object_unref (pi->priv->proxy);
15963 + pi->priv->proxy = NULL;
15966 + if (pi->priv->cancellable) {
15967 + g_cancellable_cancel (pi->priv->cancellable);
15972 +impl_activate (PeasActivatable *plugin)
15974 + TotemMediaPlayerKeysPlugin *pi = TOTEM_MEDIA_PLAYER_KEYS_PLUGIN (plugin);
15975 + TotemObject *totem;
15976 + GtkWindow *window;
15978 + pi->priv->watch_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
15979 + "org.gnome.SettingsDaemon",
15980 + G_BUS_NAME_WATCHER_FLAGS_NONE,
15981 + (GBusNameAppearedCallback) name_appeared_cb,
15982 + (GBusNameVanishedCallback) name_vanished_cb,
15983 + g_object_ref (pi), (GDestroyNotify) g_object_unref);
15985 + totem = g_object_get_data (G_OBJECT (plugin), "object");
15986 window = totem_get_main_window (totem);
15987 pi->priv->handler_id = g_signal_connect (G_OBJECT (window), "focus-in-event",
15988 - G_CALLBACK (on_window_focus_in_event), pi);
15989 + G_CALLBACK (on_window_focus_in_event), pi);
15991 g_object_unref (G_OBJECT (window));
15993 @@ -184,12 +264,17 @@ impl_deactivate (PeasActivatable *plugin)
15994 TotemMediaPlayerKeysPlugin *pi = TOTEM_MEDIA_PLAYER_KEYS_PLUGIN (plugin);
15997 - if (pi->priv->media_player_keys_proxy != NULL) {
15998 - dbus_g_proxy_call (pi->priv->media_player_keys_proxy,
15999 - "ReleaseMediaPlayerKeys", NULL,
16000 - G_TYPE_STRING, "Totem", G_TYPE_INVALID, G_TYPE_INVALID);
16001 - g_object_unref (pi->priv->media_player_keys_proxy);
16002 - pi->priv->media_player_keys_proxy = NULL;
16003 + if (pi->priv->cancellable_init) {
16004 + g_cancellable_cancel (pi->priv->cancellable_init);
16007 + if (pi->priv->cancellable) {
16008 + g_cancellable_cancel (pi->priv->cancellable);
16011 + if (pi->priv->proxy != NULL) {
16012 + g_object_unref (pi->priv->proxy);
16013 + pi->priv->proxy = NULL;
16016 if (pi->priv->handler_id != 0) {
16017 @@ -203,6 +288,11 @@ impl_deactivate (PeasActivatable *plugin)
16018 g_signal_handler_disconnect (G_OBJECT (window), pi->priv->handler_id);
16020 g_object_unref (window);
16021 + pi->priv->handler_id = 0;
16023 + if (pi->priv->watch_id != 0) {
16024 + g_bus_unwatch_name (pi->priv->watch_id);
16025 + pi->priv->watch_id = 0;
16029 diff --git a/src/plugins/opensubtitles/hash.py b/src/plugins/opensubtitles/hash.py
16030 index 7e1189d..d81e588 100644
16031 --- a/src/plugins/opensubtitles/hash.py
16032 +++ b/src/plugins/opensubtitles/hash.py
16037 +from gi.repository import Gio
16042 -def hashFile(name):
16043 - """ FIXME Need to handle exceptions !! """
16046 - longlongformat = 'q' # long long
16047 - bytesize = struct.calcsize(longlongformat)
16049 - fp = gio.File(name)
16051 - filesize = fp.query_info('standard::size', 0).get_attribute_uint64('standard::size')
16055 - if filesize < 65536 * 2:
16056 - return SIZE_ERROR, 0
16060 - if data.can_seek() != True:
16061 - return SEEK_ERROR, 0
16063 - for x in range(65536/bytesize):
16064 - buffer = data.read(bytesize)
16065 - (l_value,)= struct.unpack(longlongformat, buffer)
16067 - hash = hash & 0xFFFFFFFFFFFFFFFF #to remain as 64bit number
16069 - if data.seek(max(0,filesize-65536),1) != True:
16070 - return SEEK_ERROR, 0
16072 - for x in range(65536/bytesize):
16073 - buffer = data.read(bytesize)
16074 - (l_value,)= struct.unpack(longlongformat, buffer)
16076 - hash = hash & 0xFFFFFFFFFFFFFFFF
16079 - returnedhash = "%016x" % hash
16080 - return returnedhash, filesize
16081 +def hash_file (name):
16082 + """ FIXME Need to handle exceptions !! """
16084 + longlongformat = 'q' # long long
16085 + bytesize = struct.calcsize (longlongformat)
16087 + file_to_hash = Gio.File.new_for_uri (name)
16089 + file_info = file_to_hash.query_info ('standard::size', 0, None)
16090 + filesize = file_info.get_attribute_uint64 ('standard::size')
16092 + file_hash = filesize
16094 + if filesize < 65536 * 2:
16095 + return SIZE_ERROR, 0
16097 + f = file(file_to_hash.get_path(), "rb")
16099 + for _ in range (65536 / bytesize):
16100 + buf = f.read (bytesize)
16101 + (l_value,) = struct.unpack (longlongformat, buf)
16102 + file_hash += l_value
16103 + file_hash = file_hash & 0xFFFFFFFFFFFFFFFF #to remain as 64bit number
16105 + f.seek (max (0, filesize - 65536), os.SEEK_SET)
16107 + if f.tell() != max (0, filesize - 65536):
16108 + return SEEK_ERROR, 0
16110 + for _ in range (65536/bytesize):
16111 + buf = f.read (bytesize)
16112 + (l_value,) = struct.unpack (longlongformat, buf)
16113 + file_hash += l_value
16114 + file_hash = file_hash & 0xFFFFFFFFFFFFFFFF
16117 + returnedhash = "%016x" % file_hash
16119 + print returnedhash
16122 + return returnedhash, filesize
16124 diff --git a/src/plugins/opensubtitles/opensubtitles.py b/src/plugins/opensubtitles/opensubtitles.py
16125 index 1c4edb8..dd7a04d 100644
16126 --- a/src/plugins/opensubtitles/opensubtitles.py
16127 +++ b/src/plugins/opensubtitles/opensubtitles.py
16128 @@ -1,668 +1,770 @@
16129 # -*- coding: utf-8 -*-
16131 -from gi.repository import Peas
16132 -from gi.repository import Gtk
16133 -from gi.repository import Gdk
16134 -from gi.repository import Gio
16135 -from gi.repository import Pango
16136 -from gi.repository import Totem
16138 -gobject.threads_init()
16139 +from gi.repository import GObject, Peas, Gtk, Gdk # pylint: disable-msg=E0611
16140 +from gi.repository import Gio, Pango, Totem # pylint: disable-msg=E0611
16144 import xdg.BaseDirectory
16145 from os import sep, path, mkdir
16148 -from hash import hashFile
16149 +from hash import hash_file
16151 -gettext.textdomain("totem")
16152 +gettext.textdomain ("totem")
16154 D_ = gettext.dgettext
16155 _ = gettext.gettext
16157 +GObject.threads_init ()
16159 USER_AGENT = 'Totem'
16161 TOTEM_REMOTE_COMMAND_REPLACE = 14
16180 -# Map of the language codes used by opensubtitles.org's API to their human-readable name
16181 -LANGUAGES_STR = [(D_('iso_639_3', 'Albanian'), 'sq'),
16182 - (D_('iso_639_3', 'Arabic'), 'ar'),
16183 - (D_('iso_639_3', 'Armenian'), 'hy'),
16184 - (D_('iso_639_3', 'Neo-Aramaic, Assyrian'), 'ay'),
16185 - (D_('iso_639_3', 'Bosnian'), 'bs'),
16186 - (_('Brasilian Portuguese'), 'pb'),
16187 - (D_('iso_639_3', 'Bulgarian'), 'bg'),
16188 - (D_('iso_639_3', 'Catalan'), 'ca'),
16189 - (D_('iso_639_3', 'Chinese'), 'zh'),
16190 - (D_('iso_639_3', 'Croatian'), 'hr'),
16191 - (D_('iso_639_3', 'Czech'), 'cs'),
16192 - (D_('iso_639_3', 'Danish'), 'da'),
16193 - (D_('iso_639_3', 'Dutch'), 'nl'),
16194 - (D_('iso_639_3', 'English'), 'en'),
16195 - (D_('iso_639_3', 'Esperanto'), 'eo'),
16196 - (D_('iso_639_3', 'Estonian'), 'et'),
16197 - (D_('iso_639_3', 'Finnish'), 'fi'),
16198 - (D_('iso_639_3', 'French'), 'fr'),
16199 - (D_('iso_639_3', 'Galician'), 'gl'),
16200 - (D_('iso_639_3', 'Georgian'), 'ka'),
16201 - (D_('iso_639_3', 'German'), 'de'),
16202 - (D_('iso_639_3', 'Greek, Modern (1453-)'), 'el'),
16203 - (D_('iso_639_3', 'Hebrew'), 'he'),
16204 - (D_('iso_639_3', 'Hindi'), 'hi'),
16205 - (D_('iso_639_3', 'Hungarian'), 'hu'),
16206 - (D_('iso_639_3', 'Icelandic'), 'is'),
16207 - (D_('iso_639_3', 'Indonesian'), 'id'),
16208 - (D_('iso_639_3', 'Italian'), 'it'),
16209 - (D_('iso_639_3', 'Japanese'), 'ja'),
16210 - (D_('iso_639_3', 'Kazakh'), 'kk'),
16211 - (D_('iso_639_3', 'Korean'), 'ko'),
16212 - (D_('iso_639_3', 'Latvian'), 'lv'),
16213 - (D_('iso_639_3', 'Lithuanian'), 'lt'),
16214 - (D_('iso_639_3', 'Luxembourgish'), 'lb'),
16215 - (D_('iso_639_3', 'Macedonian'), 'mk'),
16216 - (D_('iso_639_3', 'Malay (macrolanguage)'), 'ms'),
16217 - (D_('iso_639_3', 'Norwegian'), 'no'),
16218 - (D_('iso_639_3', 'Occitan (post 1500)'), 'oc'),
16219 - (D_('iso_639_3', 'Persian'), 'fa'),
16220 - (D_('iso_639_3', 'Polish'), 'pl'),
16221 - (D_('iso_639_3', 'Portuguese'), 'pt'),
16222 - (D_('iso_639_3', 'Romanian'), 'ro'),
16223 - (D_('iso_639_3', 'Russian'), 'ru'),
16224 - (D_('iso_639_3', 'Serbian'), 'sr'),
16225 - (D_('iso_639_3', 'Slovak'), 'sk'),
16226 - (D_('iso_639_3', 'Slovenian'), 'sl'),
16227 - (D_('iso_639_3', 'Spanish'), 'es'),
16228 - (D_('iso_639_3', 'Swedish'), 'sv'),
16229 - (D_('iso_639_3', 'Thai'), 'th'),
16230 - (D_('iso_639_3', 'Turkish'), 'tr'),
16231 - (D_('iso_639_3', 'Ukrainian'), 'uk'),
16232 - (D_('iso_639_3', 'Vietnamese'), 'vi'),]
16233 +# Map of the language codes used by opensubtitles.org's API to their
16234 +# human-readable name
16235 +LANGUAGES_STR = [ (D_('iso_639_3', 'Albanian'), 'sq'),
16236 + (D_('iso_639_3', 'Arabic'), 'ar'),
16237 + (D_('iso_639_3', 'Armenian'), 'hy'),
16238 + (D_('iso_639_3', 'Neo-Aramaic, Assyrian'), 'ay'),
16239 + (D_('iso_639_3', 'Bosnian'), 'bs'),
16240 + (_('Brazilian Portuguese'), 'pb'),
16241 + (D_('iso_639_3', 'Bulgarian'), 'bg'),
16242 + (D_('iso_639_3', 'Catalan'), 'ca'),
16243 + (D_('iso_639_3', 'Chinese'), 'zh'),
16244 + (D_('iso_639_3', 'Croatian'), 'hr'),
16245 + (D_('iso_639_3', 'Czech'), 'cs'),
16246 + (D_('iso_639_3', 'Danish'), 'da'),
16247 + (D_('iso_639_3', 'Dutch'), 'nl'),
16248 + (D_('iso_639_3', 'English'), 'en'),
16249 + (D_('iso_639_3', 'Esperanto'), 'eo'),
16250 + (D_('iso_639_3', 'Estonian'), 'et'),
16251 + (D_('iso_639_3', 'Finnish'), 'fi'),
16252 + (D_('iso_639_3', 'French'), 'fr'),
16253 + (D_('iso_639_3', 'Galician'), 'gl'),
16254 + (D_('iso_639_3', 'Georgian'), 'ka'),
16255 + (D_('iso_639_3', 'German'), 'de'),
16256 + (D_('iso_639_3', 'Greek, Modern (1453-)'), 'el'),
16257 + (D_('iso_639_3', 'Hebrew'), 'he'),
16258 + (D_('iso_639_3', 'Hindi'), 'hi'),
16259 + (D_('iso_639_3', 'Hungarian'), 'hu'),
16260 + (D_('iso_639_3', 'Icelandic'), 'is'),
16261 + (D_('iso_639_3', 'Indonesian'), 'id'),
16262 + (D_('iso_639_3', 'Italian'), 'it'),
16263 + (D_('iso_639_3', 'Japanese'), 'ja'),
16264 + (D_('iso_639_3', 'Kazakh'), 'kk'),
16265 + (D_('iso_639_3', 'Korean'), 'ko'),
16266 + (D_('iso_639_3', 'Latvian'), 'lv'),
16267 + (D_('iso_639_3', 'Lithuanian'), 'lt'),
16268 + (D_('iso_639_3', 'Luxembourgish'), 'lb'),
16269 + (D_('iso_639_3', 'Macedonian'), 'mk'),
16270 + (D_('iso_639_3', 'Malay (macrolanguage)'), 'ms'),
16271 + (D_('iso_639_3', 'Norwegian'), 'no'),
16272 + (D_('iso_639_3', 'Occitan (post 1500)'), 'oc'),
16273 + (D_('iso_639_3', 'Persian'), 'fa'),
16274 + (D_('iso_639_3', 'Polish'), 'pl'),
16275 + (D_('iso_639_3', 'Portuguese'), 'pt'),
16276 + (D_('iso_639_3', 'Romanian'), 'ro'),
16277 + (D_('iso_639_3', 'Russian'), 'ru'),
16278 + (D_('iso_639_3', 'Serbian'), 'sr'),
16279 + (D_('iso_639_3', 'Slovak'), 'sk'),
16280 + (D_('iso_639_3', 'Slovenian'), 'sl'),
16281 + (D_('iso_639_3', 'Spanish'), 'es'),
16282 + (D_('iso_639_3', 'Swedish'), 'sv'),
16283 + (D_('iso_639_3', 'Thai'), 'th'),
16284 + (D_('iso_639_3', 'Turkish'), 'tr'),
16285 + (D_('iso_639_3', 'Ukrainian'), 'uk'),
16286 + (D_('iso_639_3', 'Vietnamese'), 'vi'),]
16288 # Map of ISO 639-1 language codes to the codes used by opensubtitles.org's API
16289 -LANGUAGES = {'sq':'alb',
16342 -class SearchThread(threading.Thread):
16343 +LANGUAGES = {'sq':'alb',
16396 +class SearchThread (threading.Thread):
16398 This is the thread started when the dialog is searching for subtitles
16400 - def __init__(self, model):
16401 - self.model = model
16402 + def __init__ (self, model, movie_hash, movie_size):
16403 + self._model = model
16404 + self._movie_hash = movie_hash
16405 + self._movie_size = movie_size
16407 - self._lock = threading.Lock()
16408 - threading.Thread.__init__(self)
16411 - self.model.lock.acquire(True)
16412 - self.model.results = self.model.os_search_subtitles()
16413 - self.model.lock.release()
16414 + self._results = []
16415 + self._lock = threading.Lock ()
16416 + self._message = ''
16417 + threading.Thread.__init__ (self)
16420 + self._lock.acquire (True)
16422 + self._message) = self._model.search_subtitles (self._movie_hash,
16423 + self._movie_size)
16426 + self._lock.release ()
16428 + def get_results (self):
16431 + self._lock.acquire (True)
16433 + results = self._results
16434 + self._lock.release ()
16438 + def get_message (self):
16439 + message = _(u'Searching for subtitles…')
16441 + self._lock.acquire (True)
16443 + message = self._message
16444 + self._lock.release ()
16451 """ Thread-safe property to know whether the query is done or not """
16452 - self._lock.acquire(True)
16453 + self._lock.acquire (True)
16455 - self._lock.release()
16456 + self._lock.release ()
16459 -class DownloadThread(threading.Thread):
16460 +class DownloadThread (threading.Thread):
16462 This is the thread started when the dialog is downloading the subtitles.
16464 - def __init__(self, model, subtitle_id):
16465 - self.model = model
16466 - self.subtitle_id = subtitle_id
16467 + def __init__ (self, model, subtitle_id):
16468 + self._model = model
16469 + self._subtitle_id = subtitle_id
16471 - self._lock = threading.Lock()
16472 - threading.Thread.__init__(self)
16475 - self.model.lock.acquire(True)
16476 - self.model.subtitles = self.model.os_download_subtitles(self.subtitle_id)
16477 - self.model.lock.release()
16478 + self._lock = threading.Lock ()
16479 + self._subtitles = ''
16480 + self._message = ''
16481 + threading.Thread.__init__ (self)
16484 + self._lock.acquire (True)
16485 + (self._subtitles,
16486 + self._message) = self._model.download_subtitles (self._subtitle_id)
16489 + self._lock.release ()
16491 + def get_subtitles (self):
16494 + self._lock.acquire (True)
16496 + subtitles = self._subtitles
16497 + self._lock.release ()
16501 + def get_message (self):
16502 + message = _(u'Downloading the subtitles…')
16504 + self._lock.acquire (True)
16506 + message = self._message
16507 + self._lock.release ()
16514 """ Thread-safe property to know whether the query is done or not """
16515 - self._lock.acquire(True)
16516 + self._lock.acquire (True)
16518 - self._lock.release()
16519 + self._lock.release ()
16522 # OpenSubtitles.org API abstraction
16524 -class OpenSubtitlesModel(object):
16525 +class OpenSubtitlesModel (object):
16527 This contains the logic of the opensubtitles service.
16529 - def __init__(self, server):
16530 - self.server = server
16531 - self.token = None
16532 + def __init__ (self, server):
16533 + self._server = server
16534 + self._token = None
16538 - self.lang = LANGUAGES[locale.getlocale()[0].split('_')[0]]
16540 + (language_code, _encoding) = locale.getlocale ()
16541 + self.lang = LANGUAGES[language_code.split ('_')[0]]
16542 + except (ImportError, IndexError, AttributeError):
16547 - self.lock = threading.Lock()
16548 - self.results = []
16549 - self.subtitles = ''
16551 - self.message = ''
16552 + self._lock = threading.Lock ()
16554 - def os_login(self, username='', password=''):
16555 + def _log_in (self, username='', password=''):
16557 - Logs into the opensubtitles web service and gets a valid token for
16558 - the comming comunications. If we are already logged it only checks
16559 - the if the token is still valid.
16560 + Non-locked version of log_in() for internal use only.
16563 + @rtype : (bool, string)
16567 - self.message = ''
16571 # We have already logged-in before, check the connection
16573 - result = self.server.NoOperation(self.token)
16575 + result = self._server.NoOperation (self._token)
16576 + except (xmlrpclib.Fault, xmlrpclib.ProtocolError):
16578 if result and result['status'] != OK200:
16580 + return (True, '')
16583 - result = self.server.LogIn(username, password, self.lang, USER_AGENT)
16585 + result = self._server.LogIn (username, password, self.lang,
16587 + except (xmlrpclib.Fault, xmlrpclib.ProtocolError):
16589 - if result and result.get('status') == OK200:
16590 - self.token = result.get('token')
16594 - self.message = _(u'Could not contact the OpenSubtitles website')
16595 + if result and result.get ('status') == OK200:
16596 + self._token = result.get ('token')
16598 + return (True, '')
16601 + return (False, _(u'Could not contact the OpenSubtitles website'))
16603 - def os_search_subtitles(self):
16604 + def log_in (self, username='', password=''):
16606 + Logs into the opensubtitles web service and gets a valid token for
16607 + the comming comunications. If we are already logged it only checks
16608 + the if the token is still valid. It returns a tuple of success boolean
16609 + and error message (if appropriate).
16611 + @rtype : (bool, string)
16613 - self.message = ''
16614 - if self.os_login():
16615 - searchdata = {'sublanguageid': self.lang,
16616 - 'moviehash' : self.hash,
16617 - 'moviebytesize': str(self.size)}
16619 + self._lock.acquire (True)
16620 + result = self._log_in (username, password)
16621 + self._lock.release ()
16625 + def search_subtitles (self, movie_hash, movie_size):
16626 + self._lock.acquire (True)
16630 + (log_in_success, log_in_message) = self._log_in ()
16632 + if log_in_success:
16633 + searchdata = {'sublanguageid': self.lang,
16634 + 'moviehash' : movie_hash,
16635 + 'moviebytesize': str (movie_size)}
16637 - result = self.server.SearchSubtitles(self.token, [searchdata])
16638 + result = self._server.SearchSubtitles (self._token,
16640 except xmlrpclib.ProtocolError:
16641 - self.message = _(u'Could not contact the OpenSubtitles website')
16642 + message = _(u'Could not contact the OpenSubtitles website.')
16644 - if result.get('data'):
16645 - return result['data']
16646 + if result.get ('data'):
16647 + self._lock.release ()
16648 + return (result['data'], message)
16650 - self.message = _(u'No results found')
16651 + message = _(u'No results found.')
16653 + message = log_in_message
16656 + self._lock.release ()
16658 - def os_download_subtitles(self, subtitleId):
16661 - self.message = ''
16662 - if self.os_login():
16663 + return (None, message)
16665 + def download_subtitles (self, subtitle_id):
16666 + self._lock.acquire (True)
16669 + error_message = _(u'Could not contact the OpenSubtitles website.')
16671 + (log_in_success, log_in_message) = self._log_in ()
16673 + if log_in_success:
16675 - result = self.server.DownloadSubtitles(self.token, [subtitleId])
16676 + result = self._server.DownloadSubtitles (self._token,
16678 except xmlrpclib.ProtocolError:
16679 - self.message = _(u'Could not contact the OpenSubtitles website')
16680 + message = error_message
16682 - if result and result.get('status') == OK200:
16683 + if result and result.get ('status') == OK200:
16685 subtitle64 = result['data'][0]['data']
16687 - self.message = _(u'Could not contact the OpenSubtitles website')
16689 + except LookupError:
16690 + self._lock.release ()
16691 + return (None, error_message)
16693 import StringIO, gzip, base64
16694 - subtitleDecoded = base64.decodestring(subtitle64)
16695 - subtitleGzipped = StringIO.StringIO(subtitleDecoded)
16696 - subtitleGzippedFile = gzip.GzipFile(fileobj=subtitleGzipped)
16697 + subtitle_decoded = base64.decodestring (subtitle64)
16698 + subtitle_gzipped = StringIO.StringIO (subtitle_decoded)
16699 + subtitle_gzipped_file = gzip.GzipFile (fileobj=subtitle_gzipped)
16701 + self._lock.release ()
16703 - return subtitleGzippedFile.read()
16704 + return (subtitle_gzipped_file.read (), message)
16706 + message = log_in_message
16709 + self._lock.release ()
16711 -class OpenSubtitles(gobject.GObject, Peas.Activatable):
16712 + return (None, message)
16714 +class OpenSubtitles (GObject.Object, Peas.Activatable):
16715 __gtype_name__ = 'OpenSubtitles'
16717 - object = gobject.property(type = gobject.GObject)
16718 + object = GObject.property (type = GObject.Object)
16720 + def __init__ (self):
16721 + GObject.Object.__init__ (self)
16723 - def __init__(self):
16724 - self.dialog = None
16725 - self.totem = None
16726 - self.settings = Gio.Settings.new ('org.gnome.totem.plugins.opensubtitles')
16727 + self._dialog = None
16728 + self._totem = None
16729 + schema = 'org.gnome.totem.plugins.opensubtitles'
16730 + self._settings = Gio.Settings.new (schema)
16732 + self._manager = None
16733 + self._menu_id = None
16734 + self._action_group = None
16735 + self._action = None
16737 + self._find_button = None
16738 + self._apply_button = None
16739 + self._close_button = None
16741 + self._list_store = None
16742 + self._model = None
16743 + self._tree_view = None
16745 + self._filename = None
16746 + self._progress = None
16748 # totem.Plugin methods
16750 - def do_activate(self):
16751 + def do_activate (self):
16753 Called when the plugin is activated.
16754 - Here the sidebar page is initialized(set up the treeview, connect
16755 + Here the sidebar page is initialized (set up the treeview, connect
16756 the callbacks, ...) and added to totem.
16758 - self.totem = self.object
16759 - self.filename = None
16760 + self._totem = self.object
16762 + # Name of the movie file which the most-recently-downloaded subtitles
16763 + # are related to.
16764 + self._filename = None
16766 - self.manager = self.totem.get_ui_manager()
16767 - self.os_append_menu()
16768 + self._manager = self._totem.get_ui_manager ()
16769 + self._append_menu ()
16771 - self.totem.connect('file-opened', self.on_totem__file_opened)
16772 - self.totem.connect('file-closed', self.on_totem__file_closed)
16773 + self._totem.connect ('file-opened', self.__on_totem__file_opened)
16774 + self._totem.connect ('file-closed', self.__on_totem__file_closed)
16776 - # Obtain the ServerProxy and init the model
16777 - server = xmlrpclib.Server('http://api.opensubtitles.org/xml-rpc')
16778 - self.model = OpenSubtitlesModel(server)
16779 + # Obtain the ServerProxy and init the model
16780 + server = xmlrpclib.Server ('http://api.opensubtitles.org/xml-rpc')
16781 + self._model = OpenSubtitlesModel (server)
16783 - def do_deactivate(self):
16785 - self.dialog.destroy()
16786 - self.dialog = None
16788 - self.os_delete_menu()
16789 + def do_deactivate (self):
16791 + self._dialog.destroy ()
16792 + self._dialog = None
16794 + self._delete_menu ()
16798 - def os_build_dialog(self, action):
16799 - builder = Totem.plugin_load_interface ("opensubtitles", "opensubtitles.ui", True, self.totem.get_main_window (), self)
16800 + def _build_dialog (self):
16801 + builder = Totem.plugin_load_interface ("opensubtitles",
16802 + "opensubtitles.ui", True,
16803 + self._totem.get_main_window (),
16806 # Obtain all the widgets we need to initialize
16807 - combobox = builder.get_object('language_combobox')
16808 - languages = builder.get_object('language_model')
16809 - self.progress = builder.get_object('progress_bar')
16810 - self.treeview = builder.get_object('subtitle_treeview')
16811 - self.liststore = builder.get_object('subtitle_model')
16812 - self.dialog = builder.get_object('subtitles_dialog')
16813 - self.find_button = builder.get_object('find_button')
16814 - self.apply_button = builder.get_object('apply_button')
16815 - self.close_button = builder.get_object('close_button')
16816 + combobox = builder.get_object ('language_combobox')
16817 + languages = builder.get_object ('language_model')
16818 + self._progress = builder.get_object ('progress_bar')
16819 + self._tree_view = builder.get_object ('subtitle_treeview')
16820 + self._list_store = builder.get_object ('subtitle_model')
16821 + self._dialog = builder.get_object ('subtitles_dialog')
16822 + self._find_button = builder.get_object ('find_button')
16823 + self._apply_button = builder.get_object ('apply_button')
16824 + self._close_button = builder.get_object ('close_button')
16826 # Set up and populate the languages combobox
16827 - renderer = Gtk.CellRendererText()
16828 + renderer = Gtk.CellRendererText ()
16829 sorted_languages = Gtk.TreeModelSort (model = languages)
16830 - sorted_languages.set_sort_column_id(0, Gtk.SortType.ASCENDING)
16831 - combobox.set_model(sorted_languages)
16832 - combobox.pack_start(renderer, True)
16833 - combobox.add_attribute(renderer, 'text', 0)
16834 + sorted_languages.set_sort_column_id (0, Gtk.SortType.ASCENDING)
16835 + combobox.set_model (sorted_languages)
16836 + combobox.pack_start (renderer, True)
16837 + combobox.add_attribute (renderer, 'text', 0)
16839 - lang = self.settings.get_string ('language')
16840 + lang = self._settings.get_string ('language')
16841 if lang is not None:
16842 - self.model.lang = lang
16843 + self._model.lang = lang
16845 for lang in LANGUAGES_STR:
16846 - it = languages.append(lang)
16847 - if LANGUAGES[lang[1]] == self.model.lang:
16848 - (success, parentit) = sorted_languages.convert_child_iter_to_iter (it)
16849 + itera = languages.append (lang)
16850 + if LANGUAGES[lang[1]] == self._model.lang:
16852 + parentit) = sorted_languages.convert_child_iter_to_iter (itera)
16854 combobox.set_active_iter (parentit)
16856 - # Set up the results treeview
16857 - renderer = Gtk.CellRendererText()
16858 - self.treeview.set_model(self.liststore)
16859 - self.treeview.set_headers_visible(False)
16860 - renderer.set_property('ellipsize', Pango.EllipsizeMode.END)
16861 - column = Gtk.TreeViewColumn(_(u"Subtitles"), renderer, text=0)
16862 - column.set_resizable(True)
16863 - column.set_expand(True)
16864 - self.treeview.append_column(column)
16865 - # translators comment:
16866 - # This is the file-type of the subtitle file detected
16867 - column = Gtk.TreeViewColumn(_(u"Format"), renderer, text=1)
16868 - column.set_resizable(False)
16869 - self.treeview.append_column(column)
16870 - # translators comment:
16871 - # This is a rating of the quality of the subtitle
16872 - column = Gtk.TreeViewColumn(_(u"Rating"), renderer, text=2)
16873 - column.set_resizable(False)
16874 - self.treeview.append_column(column)
16876 - self.apply_button.set_sensitive(False)
16878 - self.apply_button.connect('clicked', self.on_apply_clicked)
16879 - self.find_button.connect('clicked', self.on_find_clicked)
16880 - self.close_button.connect('clicked', self.on_close_clicked)
16884 - combobox_changed_id = combobox.connect('changed', self.on_combobox__changed)
16885 - self.dialog.connect ('delete-event', self.dialog.hide_on_delete)
16886 - self.dialog.set_transient_for (self.totem.get_main_window())
16887 - self.dialog.set_position (Gtk.WindowPosition.CENTER_ON_PARENT)
16889 - # Connect the callbacks
16890 - self.dialog.connect ('key-press-event', self.on_window__key_press_event)
16891 - self.treeview.get_selection().connect('changed', self.on_treeview__row_change)
16892 - self.treeview.connect('row-activated', self.on_treeview__row_activate)
16894 - def os_show_dialog(self, action):
16895 - if not self.dialog:
16896 - self.os_build_dialog(action)
16898 - filename = self.totem.get_current_mrl()
16899 - if not self.model.results or filename != self.filename:
16900 - self.filename = filename
16902 - self.dialog.show_all()
16904 - self.progress.set_fraction(0.0)
16906 - def os_append_menu(self):
16910 - self.os_action_group = Gtk.ActionGroup(name='OpenSubtitles')
16912 - self.action = Gtk.Action(name='opensubtitles',
16913 + # Set up the results treeview
16914 + renderer = Gtk.CellRendererText ()
16915 + self._tree_view.set_model (self._list_store)
16916 + renderer.set_property ('ellipsize', Pango.EllipsizeMode.END)
16917 + column = Gtk.TreeViewColumn (_(u"Subtitles"), renderer, text=0)
16918 + column.set_resizable (True)
16919 + column.set_expand (True)
16920 + self._tree_view.append_column (column)
16921 + # translators comment:
16922 + # This is the file-type of the subtitle file detected
16923 + column = Gtk.TreeViewColumn (_(u"Format"), renderer, text=1)
16924 + column.set_resizable (False)
16925 + self._tree_view.append_column (column)
16926 + # translators comment:
16927 + # This is a rating of the quality of the subtitle
16928 + column = Gtk.TreeViewColumn (_(u"Rating"), renderer, text=2)
16929 + column.set_resizable (False)
16930 + self._tree_view.append_column (column)
16932 + self._apply_button.set_sensitive (False)
16934 + self._apply_button.connect ('clicked', self.__on_apply_clicked)
16935 + self._find_button.connect ('clicked', self.__on_find_clicked)
16936 + self._close_button.connect ('clicked', self.__on_close_clicked)
16940 + combobox.connect ('changed', self.__on_combobox__changed)
16941 + self._dialog.connect ('delete-event', self._dialog.hide_on_delete)
16942 + self._dialog.set_transient_for (self._totem.get_main_window ())
16943 + self._dialog.set_position (Gtk.WindowPosition.CENTER_ON_PARENT)
16945 + # Connect the callbacks
16946 + self._dialog.connect ('key-press-event',
16947 + self.__on_window__key_press_event)
16948 + self._tree_view.get_selection ().connect ('changed',
16949 + self.__on_treeview__row_change)
16950 + self._tree_view.connect ('row-activated',
16951 + self.__on_treeview__row_activate)
16953 + def _show_dialog (self, _action):
16954 + if not self._dialog:
16955 + self._build_dialog ()
16957 + self._dialog.show_all ()
16959 + self._progress.set_fraction (0.0)
16961 + def _append_menu (self):
16962 + self._action_group = Gtk.ActionGroup (name='OpenSubtitles')
16964 + tooltip_text = _(u"Download movie subtitles from OpenSubtitles")
16965 + self._action = Gtk.Action (name='opensubtitles',
16966 label=_(u'_Download Movie Subtitles…'),
16967 - tooltip=_(u"Download movie subtitles from OpenSubtitles"),
16968 + tooltip=tooltip_text,
16971 - self.os_action_group.add_action(self.action)
16972 + self._action_group.add_action (self._action)
16974 - self.manager.insert_action_group(self.os_action_group, 0)
16975 + self._manager.insert_action_group (self._action_group, 0)
16977 - self.menu_id = self.manager.new_merge_id()
16978 - self.manager.add_ui(self.menu_id,
16979 - '/tmw-menubar/view/subtitles/subtitle-download-placeholder',
16980 + self._menu_id = self._manager.new_merge_id ()
16981 + merge_path = '/tmw-menubar/view/subtitles/subtitle-download-placeholder'
16982 + self._manager.add_ui (self._menu_id,
16986 Gtk.UIManagerItemType.MENUITEM,
16989 - self.action.set_visible(True)
16990 + self._action.set_visible (True)
16992 + self._manager.ensure_update ()
16994 - self.manager.ensure_update()
16995 + self._action.connect ('activate', self._show_dialog)
16997 - self.action.connect('activate', self.os_show_dialog)
16998 + self._action.set_sensitive (self._totem.is_playing () and
16999 + self._check_allowed_scheme () and
17000 + not self._check_is_audio ())
17002 - self.action.set_sensitive(self.totem.is_playing() and
17003 - self.os_check_allowed_scheme() and
17004 - not self.os_check_is_audio())
17005 + def _check_allowed_scheme (self):
17006 + current_file = Gio.file_new_for_uri (self._totem.get_current_mrl ())
17007 + scheme = current_file.get_uri_scheme ()
17009 - def os_check_allowed_scheme(self):
17010 - scheme = Gio.file_new_for_uri(self.totem.get_current_mrl()).get_uri_scheme()
17011 - if scheme == 'dvd' or scheme == 'http' or scheme == 'dvb' or scheme == 'vcd':
17012 + if (scheme == 'dvd' or scheme == 'http' or
17013 + scheme == 'dvb' or scheme == 'vcd'):
17018 - def os_check_is_audio(self):
17019 + def _check_is_audio (self):
17020 # FIXME need to use something else here
17021 - # I think we must use video widget metadata but I don't found a way
17022 - # to get this info from python
17023 - filename = self.totem.get_current_mrl()
17024 - if Gio.content_type_guess(filename, '')[0].split('/')[0] == 'audio':
17025 + # I think we must use video widget metadata but I don't found a way
17026 + # to get this info from python
17027 + filename = self._totem.get_current_mrl ()
17028 + if Gio.content_type_guess (filename, '')[0].split ('/')[0] == 'audio':
17032 - def os_delete_menu(self):
17033 - self.manager.remove_action_group(self.os_action_group)
17034 - self.manager.remove_ui(self.menu_id)
17035 + def _delete_menu (self):
17036 + self._manager.remove_action_group (self._action_group)
17037 + self._manager.remove_ui (self._menu_id)
17039 - def os_get_results(self):
17042 - self.liststore.clear()
17043 - self.treeview.set_headers_visible(False)
17044 - self.model.results = []
17045 - self.apply_button.set_sensitive(False)
17046 - self.find_button.set_sensitive(False)
17047 + def _get_results (self, movie_hash, movie_size):
17048 + self._list_store.clear ()
17049 + self._apply_button.set_sensitive (False)
17050 + self._find_button.set_sensitive (False)
17052 - self.dialog.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH))
17053 + cursor = Gdk.Cursor.new (Gdk.CursorType.WATCH)
17054 + self._dialog.get_window ().set_cursor (cursor)
17056 - thread = SearchThread(self.model)
17058 - gobject.idle_add(self.os_populate_treeview)
17059 + thread = SearchThread (self._model, movie_hash, movie_size)
17061 + GObject.idle_add (self._populate_treeview, thread)
17063 - self.progress.set_text(_(u'Searching subtitles…'))
17064 - gobject.timeout_add(350, self.os_progress_bar_increment, thread)
17065 + self._progress.set_text (_(u'Searching subtitles…'))
17066 + GObject.timeout_add (350, self._progress_bar_increment, thread)
17068 - def os_populate_treeview(self):
17071 - if self.model.lock.acquire(False) == False:
17072 + def _populate_treeview (self, search_thread):
17073 + if not search_thread.done:
17076 - if self.model.results:
17077 - self.apply_button.set_sensitive(True)
17078 - for subData in self.model.results:
17079 - if not SUBTITLES_EXT.count(subData['SubFormat']):
17081 - self.liststore.append([subData['SubFileName'], subData['SubFormat'], subData['SubRating'], subData['IDSubtitleFile'],])
17082 - self.treeview.set_headers_visible(True)
17084 - self.apply_button.set_sensitive(False)
17086 - self.model.lock.release()
17087 + results = search_thread.get_results ()
17089 + for sub_data in results:
17090 + if not SUBTITLES_EXT.count (sub_data['SubFormat']):
17092 + self._list_store.append ([sub_data['SubFileName'],
17093 + sub_data['SubFormat'],
17094 + sub_data['SubRating'],
17095 + sub_data['IDSubtitleFile'],])
17097 - self.dialog.get_window().set_cursor(None)
17098 + self._dialog.get_window ().set_cursor (None)
17102 - def os_save_selected_subtitle(self, filename=None):
17105 - self.dialog.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH))
17106 + def _save_selected_subtitle (self, filename=None):
17107 + cursor = Gdk.Cursor.new (Gdk.CursorType.WATCH)
17108 + self._dialog.get_window ().set_cursor (cursor)
17110 - model, rows = self.treeview.get_selection().get_selected_rows()
17111 + model, rows = self._tree_view.get_selection ().get_selected_rows ()
17113 - iter = model.get_iter(rows[0])
17114 - subtitle_id = model.get_value(iter, 3)
17115 - subtitle_format = model.get_value(iter, 1)
17118 + subtitle_iter = model.get_iter (rows[0])
17119 + subtitle_id = model.get_value (subtitle_iter, 3)
17120 + subtitle_format = model.get_value (subtitle_iter, 1)
17123 - directory = Gio.file_new_for_path(xdg.BaseDirectory.xdg_cache_home + sep + 'totem' + sep + 'subtitles' + sep)
17124 - if not directory.query_exists(None):
17125 - if not path.exists (xdg.BaseDirectory.xdg_cache_home + sep + 'totem' + sep):
17126 - mkdir (xdg.BaseDirectory.xdg_cache_home + sep + 'totem' + sep)
17127 - if not path.exists (xdg.BaseDirectory.xdg_cache_home + sep + 'totem' + sep + 'subtitles' + sep):
17128 - mkdir (xdg.BaseDirectory.xdg_cache_home + sep + 'totem' + sep + 'subtitles' + sep)
17129 - # FIXME: We can't use this function until we depend on GLib (PyGObject) 2.18
17130 - # directory.make_directory_with_parents()
17132 - file = Gio.file_new_for_path(self.filename)
17133 - movie_name = file.get_basename().rpartition('.')[0]
17134 - filename = directory.get_uri() + sep + movie_name + '.' + subtitle_format
17136 - self.model.subtitles = ''
17138 - thread = DownloadThread(self.model, subtitle_id)
17140 - gobject.idle_add(self.os_save_subtitles, filename)
17142 - self.progress.set_text(_(u'Downloading the subtitles…'))
17143 - gobject.timeout_add(350, self.os_progress_bar_increment, thread)
17144 + bpath = xdg.BaseDirectory.xdg_cache_home + sep
17145 + bpath += 'totem' + sep
17147 + directory = Gio.file_new_for_path (bpath + 'subtitles' + sep)
17149 + if not directory.query_exists (None):
17150 + if not path.exists (bpath):
17152 + if not path.exists (bpath + 'subtitles' + sep):
17153 + mkdir (bpath + 'subtitles' + sep)
17154 + # FIXME: We can't use this function until we depend on
17155 + # GLib (PyGObject) 2.18
17156 + # directory.make_directory_with_parents ()
17158 + subtitle_file = Gio.file_new_for_path (self._filename)
17159 + movie_name = subtitle_file.get_basename ().rpartition ('.')[0]
17161 + filename = directory.get_uri () + sep
17162 + filename += movie_name + '.' + subtitle_format
17164 + thread = DownloadThread (self._model, subtitle_id)
17166 + GObject.idle_add (self._save_subtitles, thread, filename)
17168 + self._progress.set_text (_(u'Downloading the subtitles…'))
17169 + GObject.timeout_add (350, self._progress_bar_increment, thread)
17174 - def os_save_subtitles(self, filename):
17175 - if self.model.lock.acquire(False) == False:
17176 + def _save_subtitles (self, download_thread, filename):
17177 + if not download_thread.done:
17180 - if self.model.subtitles:
17181 - # Delete all previous cached subtitle for this file
17182 + subtitles = download_thread.get_subtitles ()
17184 + # Delete all previous cached subtitle for this file
17185 for ext in SUBTITLES_EXT:
17186 - fp = Gio.file_new_for_path(filename[:-3] + ext)
17187 - if fp.query_exists(None):
17190 - fp = Gio.file_new_for_uri (filename)
17191 - suburi = fp.get_uri ()
17192 + subtitle_file = Gio.file_new_for_path (filename[:-3] + ext)
17193 + if subtitle_file.query_exists (None):
17194 + subtitle_file.delete (None)
17196 - subFile = fp.replace('', False)
17197 - subFile.write(self.model.subtitles)
17199 + subtitle_file = Gio.file_new_for_uri (filename)
17200 + suburi = subtitle_file.get_uri ()
17202 - self.model.lock.release()
17203 + sub_file = subtitle_file.replace ('', False, Gio.FileCreateFlags.REPLACE_DESTINATION, None)
17204 + sub_file.write (subtitles, None)
17205 + sub_file.close (None)
17207 - self.dialog.get_window().set_cursor(None)
17208 - self.on_close_clicked (None)
17209 + self._dialog.get_window ().set_cursor (None)
17210 + self._close_dialog ()
17213 - self.totem.set_current_subtitle(suburi)
17214 + self._totem.set_current_subtitle (suburi)
17218 - def os_progress_bar_increment(self, thread):
17220 + def _progress_bar_increment (self, thread):
17221 if not thread.done:
17222 - self.progress.pulse()
17223 + self._progress.pulse ()
17226 - if self.model.message:
17227 - self.progress.set_text(self.model.message)
17228 + message = thread.get_message ()
17230 + self._progress.set_text (message)
17232 - self.progress.set_text('')
17234 - self.progress.set_fraction(0.0)
17235 - self.find_button.set_sensitive(True)
17236 - self.apply_button.set_sensitive(False)
17237 - self.treeview.set_sensitive(True)
17238 + self._progress.set_text (' ')
17240 + self._progress.set_fraction (0.0)
17241 + self._find_button.set_sensitive (True)
17242 + self._apply_button.set_sensitive (False)
17243 + self._tree_view.set_sensitive (True)
17246 - def os_download_and_apply(self):
17247 - self.apply_button.set_sensitive(False)
17248 - self.find_button.set_sensitive(False)
17249 - self.action.set_sensitive(False)
17250 - self.treeview.set_sensitive(False)
17251 - self.os_save_selected_subtitle()
17252 + def _download_and_apply (self):
17253 + self._apply_button.set_sensitive (False)
17254 + self._find_button.set_sensitive (False)
17255 + self._action.set_sensitive (False)
17256 + self._tree_view.set_sensitive (False)
17257 + self._save_selected_subtitle ()
17259 + def _close_dialog (self):
17260 + # We hide the dialogue instead of closing it so that we still have the
17261 + # last set of search results up if we re-open the dialogue without
17262 + # changing the movie
17263 + self._dialog.hide ()
17267 - def on_window__key_press_event(self, widget, event):
17268 + def __on_window__key_press_event (self, _widget, event):
17269 if event.keyval == Gdk.KEY_Escape:
17270 - self.dialog.destroy()
17271 - self.dialog = None
17272 + self._close_dialog ()
17276 - def on_treeview__row_change(self, selection):
17277 - if selection.count_selected_rows() > 0:
17278 - self.apply_button.set_sensitive(True)
17279 + def __on_treeview__row_change (self, selection):
17280 + if selection.count_selected_rows () > 0:
17281 + self._apply_button.set_sensitive (True)
17283 - self.apply_button.set_sensitive(False)
17284 + self._apply_button.set_sensitive (False)
17286 - def on_treeview__row_activate(self, path, column, data):
17287 - self.os_download_and_apply()
17288 + def __on_treeview__row_activate (self, _tree_path, _column, _data):
17289 + self._download_and_apply ()
17291 - def on_totem__file_opened(self, totem, filename):
17294 + def __on_totem__file_opened (self, _totem, new_mrl):
17295 # Check if allows subtitles
17296 - if self.os_check_allowed_scheme() and not self.os_check_is_audio():
17297 - self.action.set_sensitive(True)
17299 - self.find_button.set_sensitive(True)
17300 - self.filename = self.totem.get_current_mrl()
17301 - self.liststore.clear()
17302 - self.treeview.set_headers_visible(False)
17303 - self.apply_button.set_sensitive(False)
17304 - self.results = []
17306 - self.action.set_sensitive(False)
17307 - if self.dialog and self.dialog.is_active():
17308 - self.liststore.clear()
17309 - self.treeview.set_headers_visible(False)
17310 - self.apply_button.set_sensitive(False)
17311 - self.find_button.set_sensitive(False)
17313 - def on_totem__file_closed(self, totem):
17314 - self.action.set_sensitive(False)
17316 - self.apply_button.set_sensitive(False)
17317 - self.find_button.set_sensitive(False)
17319 - def on_combobox__changed(self, combobox):
17320 - iter = combobox.get_active_iter()
17321 - self.model.lang = LANGUAGES[combobox.get_model().get_value(iter, 1)]
17322 - self.settings.set_string('language', self.model.lang)
17324 - def on_close_clicked(self, data):
17325 - self.dialog.destroy()
17326 - self.dialog = None
17328 - def on_apply_clicked(self, data):
17329 - self.os_download_and_apply()
17331 - def on_find_clicked(self, data):
17332 - self.apply_button.set_sensitive(False)
17333 - self.find_button.set_sensitive(False)
17334 - self.filename = self.totem.get_current_mrl()
17335 - self.model.hash , self.model.size = hashFile(self.filename)
17337 - self.os_get_results()
17338 + if self._check_allowed_scheme () and not self._check_is_audio ():
17339 + self._action.set_sensitive (True)
17341 + self._find_button.set_sensitive (True)
17342 + # Check we're not re-opening the same file; if we are, don't
17343 + # clear anything. This happens when we re-load the file with a
17344 + # new set of subtitles, for example
17345 + if self._filename != new_mrl:
17346 + self._filename = new_mrl
17347 + self._list_store.clear ()
17348 + self._apply_button.set_sensitive (False)
17350 + self._action.set_sensitive (False)
17351 + if self._dialog and self._dialog.is_active ():
17352 + self._filename = None
17353 + self._list_store.clear ()
17354 + self._apply_button.set_sensitive (False)
17355 + self._find_button.set_sensitive (False)
17357 + def __on_totem__file_closed (self, _totem):
17358 + self._action.set_sensitive (False)
17360 + self._apply_button.set_sensitive (False)
17361 + self._find_button.set_sensitive (False)
17363 + def __on_combobox__changed (self, combobox):
17364 + combo_iter = combobox.get_active_iter ()
17365 + combo_model = combobox.get_model ()
17366 + self._model.lang = LANGUAGES[combo_model.get_value (combo_iter, 1)]
17367 + self._settings.set_string ('language', self._model.lang)
17369 + def __on_close_clicked (self, _data):
17370 + self._close_dialog ()
17372 + def __on_apply_clicked (self, _data):
17373 + self._download_and_apply ()
17375 + def __on_find_clicked (self, _data):
17376 + self._apply_button.set_sensitive (False)
17377 + self._find_button.set_sensitive (False)
17378 + self._filename = self._totem.get_current_mrl ()
17379 + (movie_hash, movie_size) = hash_file (self._filename)
17381 + self._get_results (movie_hash, movie_size)
17383 diff --git a/src/plugins/opensubtitles/opensubtitles.ui b/src/plugins/opensubtitles/opensubtitles.ui
17384 index ce06941..ad24241 100644
17385 --- a/src/plugins/opensubtitles/opensubtitles.ui
17386 +++ b/src/plugins/opensubtitles/opensubtitles.ui
17388 <column type="gchararray"/>
17391 - <object class="GtkImage" id="image_apply">
17392 - <property name="visible">True</property>
17393 - <property name="stock">gtk-media-play</property>
17394 - <property name="icon-size">4</property>
17396 <object class="GtkWindow" id="subtitles_dialog">
17397 <property name="border_width">12</property>
17398 <property name="title" translatable="yes">Download Movie Subtitles</property>
17399 @@ -36,83 +31,48 @@
17400 <property name="type_hint">dialog</property>
17402 <object class="GtkVBox" id="vbox1">
17403 + <property name="orientation">vertical</property>
17404 <property name="spacing">6</property>
17406 - <object class="GtkFrame" id="frame1">
17407 - <property name="visible">True</property>
17408 - <property name="label_xalign">0</property>
17409 - <property name="shadow_type">none</property>
17410 + <object class="GtkHBox" id="hbox2">
17411 + <property name="spacing">6</property>
17413 - <object class="GtkAlignment" id="alignment1">
17414 + <object class="GtkLabel" id="label3">
17415 + <property name="visible">True</property>
17416 + <property name="label" translatable="yes">Subtitle _language:</property>
17417 + <property name="use_underline">True</property>
17418 + <property name="mnemonic_widget">language_combobox</property>
17421 + <property name="expand">False</property>
17422 + <property name="position">0</property>
17426 + <object class="GtkComboBox" id="language_combobox">
17427 <property name="visible">True</property>
17428 - <property name="left_padding">12</property>
17430 - <object class="GtkVBox" id="vbox3">
17432 - <object class="GtkHBox" id="hbox2">
17434 - <object class="GtkLabel" id="label3">
17435 - <property name="visible">True</property>
17436 - <property name="use-underline">True</property>
17437 - <property name="mnemonic-widget">language_combobox</property>
17438 - <property name="label" translatable="yes">Subtitle _language:</property>
17441 - <property name="expand">False</property>
17442 - <property name="padding">6</property>
17443 - <property name="position">0</property>
17447 - <object class="GtkComboBox" id="language_combobox">
17448 - <property name="visible">True</property>
17451 - <property name="padding">6</property>
17452 - <property name="position">1</property>
17456 - <object class="GtkButton" id="find_button">
17457 - <property name="label">gtk-find</property>
17458 - <property name="use-stock">True</property>
17459 - <property name="visible">True</property>
17460 - <property name="can_focus">True</property>
17461 - <property name="receives_default">True</property>
17464 - <property name="expand">False</property>
17465 - <property name="fill">False</property>
17466 - <property name="position">2</property>
17471 - <property name="expand">False</property>
17472 - <property name="fill">False</property>
17473 - <property name="padding">6</property>
17474 - <property name="position">0</property>
17481 + <property name="position">1</property>
17484 - <child type="label">
17485 - <object class="GtkLabel" id="label1">
17487 + <object class="GtkButton" id="find_button">
17488 + <property name="label">gtk-find</property>
17489 <property name="visible">True</property>
17490 - <property name="label" translatable="yes">Language</property>
17491 - <property name="use_markup">True</property>
17493 - <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
17495 + <property name="can_focus">True</property>
17496 + <property name="receives_default">True</property>
17497 + <property name="use_stock">True</property>
17500 + <property name="expand">False</property>
17501 + <property name="fill">False</property>
17502 + <property name="position">2</property>
17507 <property name="expand">False</property>
17508 - <property name="fill">False</property>
17509 - <property name="padding">6</property>
17510 <property name="position">0</property>
17513 @@ -135,7 +95,10 @@
17517 - <object class="GtkProgressBar" id="progress_bar"/>
17518 + <object class="GtkProgressBar" id="progress_bar">
17519 + <property name="text"> </property>
17520 + <property name="show-text">True</property>
17523 <property name="expand">False</property>
17524 <property name="position">2</property>
17525 @@ -143,7 +106,7 @@
17528 <object class="GtkAlignment" id="alignment2">
17529 - <property name="top_padding">12</property>
17530 + <property name="top_padding">6</property>
17532 <object class="GtkHButtonBox" id="hbbox1">
17533 <property name="visible">True</property>
17534 @@ -156,7 +119,7 @@
17535 <property name="can_focus">True</property>
17536 <property name="receives_default">True</property>
17537 <property name="image">image_apply</property>
17538 - <property name="use-underline">True</property>
17539 + <property name="use_underline">True</property>
17542 <property name="expand">False</property>
17543 @@ -167,12 +130,12 @@
17545 <object class="GtkButton" id="close_button">
17546 <property name="label">gtk-close</property>
17547 - <property name="use-stock">True</property>
17548 <property name="visible">True</property>
17549 <property name="can_focus">True</property>
17550 - <property name="receives_default">True</property>
17551 <property name="can_default">True</property>
17552 <property name="has_default">True</property>
17553 + <property name="receives_default">True</property>
17554 + <property name="use_stock">True</property>
17557 <property name="expand">False</property>
17558 @@ -193,4 +156,8 @@
17562 + <object class="GtkImage" id="image_apply">
17563 + <property name="visible">True</property>
17564 + <property name="stock">gtk-media-play</property>
17567 diff --git a/src/plugins/pythonconsole/console.py b/src/plugins/pythonconsole/console.py
17568 index 6a71183..8bbfb9f 100644
17569 --- a/src/plugins/pythonconsole/console.py
17570 +++ b/src/plugins/pythonconsole/console.py
17571 @@ -36,10 +36,7 @@ import string
17576 -from gi.repository import Pango
17577 -from gi.repository import Gtk
17578 -from gi.repository import Gdk
17579 +from gi.repository import GObject, Pango, Gtk, Gdk # pylint: disable-msg=E0611
17581 class PythonConsole(Gtk.ScrolledWindow):
17582 def __init__(self, namespace = {}, destroy_cb = None):
17583 @@ -117,7 +114,7 @@ class PythonConsole(Gtk.ScrolledWindow):
17584 cur = buffer.get_end_iter()
17586 buffer.place_cursor(cur)
17587 - gobject.idle_add(self.scroll_to_end)
17588 + GObject.idle_add(self.scroll_to_end)
17591 elif event.keyval == Gdk.KEY_Return:
17592 @@ -161,21 +158,21 @@ class PythonConsole(Gtk.ScrolledWindow):
17593 cur = buffer.get_end_iter()
17594 buffer.move_mark(inp_mark, cur)
17595 buffer.place_cursor(cur)
17596 - gobject.idle_add(self.scroll_to_end)
17597 + GObject.idle_add(self.scroll_to_end)
17600 elif event.keyval == Gdk.KEY_KP_Down or event.keyval == Gdk.KEY_Down:
17601 # Next entry from history
17602 view.emit_stop_by_name("key_press_event")
17603 self.history_down()
17604 - gobject.idle_add(self.scroll_to_end)
17605 + GObject.idle_add(self.scroll_to_end)
17608 elif event.keyval == Gdk.KEY_KP_Up or event.keyval == Gdk.KEY_Up:
17609 # Previous entry from history
17610 view.emit_stop_by_name("key_press_event")
17612 - gobject.idle_add(self.scroll_to_end)
17613 + GObject.idle_add(self.scroll_to_end)
17616 elif event.keyval == Gdk.KEY_KP_Left or event.keyval == Gdk.KEY_Left or \
17617 @@ -246,7 +243,7 @@ class PythonConsole(Gtk.ScrolledWindow):
17619 buf.insert_with_tags(buf.get_end_iter(), text, tag)
17621 - gobject.idle_add(self.scroll_to_end)
17622 + GObject.idle_add(self.scroll_to_end)
17624 def eval(self, command, display_command = False):
17625 buffer = self.view.get_buffer()
17626 diff --git a/src/plugins/pythonconsole/pythonconsole.convert b/src/plugins/pythonconsole/pythonconsole.convert
17627 index 5acafaa..6461c23 100644
17628 --- a/src/plugins/pythonconsole/pythonconsole.convert
17629 +++ b/src/plugins/pythonconsole/pythonconsole.convert
17631 -[org.gnome.totem.plugins.jamendo]
17632 -num-per-page = /apps/totem/plugins/jamendo/num_per_page
17633 -format = /apps/totem/plugins/jamendo/format
17634 +[org.gnome.totem.plugins.pythonconsole]
17635 +rpdb2-password = /apps/totem/plugins/pythonconsole/rpdb2_password
17636 diff --git a/src/plugins/pythonconsole/pythonconsole.py b/src/plugins/pythonconsole/pythonconsole.py
17637 index 6e6b286..40d6a78 100644
17638 --- a/src/plugins/pythonconsole/pythonconsole.py
17639 +++ b/src/plugins/pythonconsole/pythonconsole.py
17641 # it under the terms of the GNU General Public License as published by
17642 # the Free Software Foundation; either version 2, or (at your option)
17643 # any later version.
17646 # This program is distributed in the hope that it will be useful,
17647 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17648 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17650 # along with this program; if not, write to the Free Software
17651 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17653 -# Parts from "Interactive Python-GTK Console" (stolen from epiphany's console.py)
17654 +# Parts from "Interactive Python-GTK Console" (stolen from epiphany's
17656 # Copyright (C), 1998 James Henstridge <james@daa.com.au>
17657 # Copyright (C), 2005 Adam Hooper <adamh@densi.com>
17658 # Bits from gedit Python Console Plugin
17659 @@ -36,24 +37,22 @@ from console import PythonConsole
17661 __all__ = ('PythonConsole', 'OutFile')
17663 -from gi.repository import Peas
17664 -from gi.repository import Gtk
17665 -from gi.repository import Totem
17666 -from gi.repository import Gio
17668 +from gi.repository import GObject, Peas, Gtk, Totem # pylint: disable-msg=E0611
17669 +from gi.repository import Gio # pylint: disable-msg=E0611
17673 - have_rpdb2 = True
17675 - have_rpdb2 = False
17677 + HAVE_RPDB2 = True
17678 +except ImportError:
17679 + HAVE_RPDB2 = False
17682 -gettext.textdomain("totem")
17683 +gettext.textdomain ("totem")
17685 D_ = gettext.dgettext
17686 _ = gettext.gettext
17691 <menubar name="tmw-menubar">
17692 <menu name="Python" action="Python">
17693 @@ -66,92 +65,107 @@ ui_str = """
17697 -class PythonConsolePlugin(gobject.GObject, Peas.Activatable):
17698 - __gtype_name__ = 'PythonConsolePlugin'
17700 - object = gobject.property(type = gobject.GObject)
17702 - def __init__(self):
17703 - self.totem = None
17704 - self.window = None
17706 - def do_activate(self):
17707 - self.totem = self.object
17710 - manager = self.totem.get_ui_manager()
17712 - data['action_group'] = Gtk.ActionGroup(name = 'Python')
17714 - action = Gtk.Action(name = 'Python', label = 'Python', tooltip = _(u'Python Console Menu'), stock_id = None)
17715 - data['action_group'].add_action(action)
17717 - action = Gtk.Action(name = 'PythonConsole', label = _(u'_Python Console'),
17718 - tooltip = _(u"Show Totem's Python console"),
17719 - stock_id = 'gnome-mime-text-x-python')
17720 - action.connect('activate', self.show_console)
17721 - data['action_group'].add_action(action)
17723 - action = Gtk.Action(name = 'PythonDebugger', label = _(u'Python Debugger'),
17724 - tooltip = _(u"Enable remote Python debugging with rpdb2"), stock_id = None)
17726 - action.connect('activate', self.enable_debugging)
17728 - action.set_visible(False)
17729 - data['action_group'].add_action(action)
17731 - manager.insert_action_group(data['action_group'], 0)
17732 - data['ui_id'] = manager.add_ui_from_string(ui_str)
17733 - manager.ensure_update()
17735 - self.totem.set_data('PythonConsolePluginInfo', data)
17737 - def show_console(self, action):
17738 - if not self.window:
17739 - console = PythonConsole(namespace = {'__builtins__' : __builtins__,
17741 - 'totem_object' : self.totem},
17742 - destroy_cb = self.destroy_console)
17744 - console.set_size_request(600, 400)
17745 - console.eval('print "%s" %% totem_object' % _(u"You can access the Totem.Object through " \
17746 - "\'totem_object\' :\\n%s"), False)
17748 - self.window = Gtk.Window()
17749 - self.window.set_title(_(u'Totem Python Console'))
17750 - self.window.add(console)
17751 - self.window.connect('destroy', self.destroy_console)
17752 - self.window.show_all()
17754 - self.window.show_all()
17755 - self.window.grab_focus()
17757 - def enable_debugging(self, action):
17758 - msg = _(u"After you press OK, Totem will wait until you connect to it with winpdb or rpdb2. If you have not set a debugger password in DConf, it will use the default password ('totem').")
17759 - dialog = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO, Gtk.ButtonsType.OK_CANCEL, msg)
17760 - if dialog.run() == Gtk.ResponseType.OK:
17761 - settings = Gio.Settings.new ('org.gnome.totem.plugins.pythonconsole')
17762 - password = settings.get_string('rpdb2-password') or "totem"
17763 - def start_debugger(password):
17764 - rpdb2.start_embedded_debugger(password)
17767 - gobject.idle_add(start_debugger, password)
17770 - def destroy_console(self, *args):
17771 - self.window.destroy()
17772 - self.window = None
17774 - def do_deactivate(self):
17775 - data = self.totem.get_data('PythonConsolePluginInfo')
17777 - manager = self.totem.get_ui_manager()
17778 - manager.remove_ui(data['ui_id'])
17779 - manager.remove_action_group(data['action_group'])
17780 - manager.ensure_update()
17782 - self.totem.set_data('PythonConsolePluginInfo', None)
17784 - if self.window is not None:
17785 - self.window.destroy()
17786 +class PythonConsolePlugin (GObject.Object, Peas.Activatable):
17787 + __gtype_name__ = 'PythonConsolePlugin'
17789 + object = GObject.property (type = GObject.Object)
17791 + def __init__ (self):
17792 + GObject.Object.__init__ (self)
17794 + self.totem = None
17795 + self.window = None
17797 + def do_activate (self):
17798 + self.totem = self.object
17801 + manager = self.totem.get_ui_manager ()
17803 + data['action_group'] = Gtk.ActionGroup (name = 'Python')
17805 + action = Gtk.Action (name = 'Python', label = 'Python',
17806 + tooltip = _(u'Python Console Menu'),
17808 + data['action_group'].add_action (action)
17810 + action = Gtk.Action (name = 'PythonConsole',
17811 + label = _(u'_Python Console'),
17812 + tooltip = _(u"Show Totem's Python console"),
17813 + stock_id = 'gnome-mime-text-x-python')
17814 + action.connect ('activate', self._show_console)
17815 + data['action_group'].add_action (action)
17817 + action = Gtk.Action (name = 'PythonDebugger',
17818 + label = _(u'Python Debugger'),
17819 + tooltip = _(u"Enable remote Python debugging "\
17823 + action.connect ('activate', self._enable_debugging)
17825 + action.set_visible (False)
17826 + data['action_group'].add_action (action)
17828 + manager.insert_action_group (data['action_group'], 0)
17829 + data['ui_id'] = manager.add_ui_from_string (UI_STR)
17830 + manager.ensure_update ()
17832 + self.totem.set_data ('PythonConsolePluginInfo', data)
17834 + def _show_console (self, _action):
17835 + if not self.window:
17836 + console = PythonConsole (namespace = {
17837 + '__builtins__' : __builtins__,
17839 + 'totem_object' : self.totem
17840 + }, destroy_cb = self._destroy_console)
17842 + console.set_size_request (600, 400) # pylint: disable-msg=E1101
17843 + console.eval ('print "%s" %% totem_object' % _(u"You can access "\
17844 + "the Totem.Object through \'totem_object\' :\\n%s"), False)
17846 + self.window = Gtk.Window ()
17847 + self.window.set_title (_(u'Totem Python Console'))
17848 + self.window.add (console)
17849 + self.window.connect ('destroy', self._destroy_console)
17850 + self.window.show_all ()
17852 + self.window.show_all ()
17853 + self.window.grab_focus ()
17856 + def _enable_debugging (cls, _action):
17857 + msg = _(u"After you press OK, Totem will wait until you connect to it "\
17858 + "with winpdb or rpdb2. If you have not set a debugger "\
17859 + "password in DConf, it will use the default password "\
17861 + dialog = Gtk.MessageDialog (None, 0, Gtk.MessageType.INFO,
17862 + Gtk.ButtonsType.OK_CANCEL, msg)
17863 + if dialog.run () == Gtk.ResponseType.OK:
17864 + schema = 'org.gnome.totem.plugins.pythonconsole'
17865 + settings = Gio.Settings.new (schema)
17866 + password = settings.get_string ('rpdb2-password') or "totem"
17867 + def start_debugger (password):
17868 + rpdb2.start_embedded_debugger (password)
17871 + GObject.idle_add (start_debugger, password)
17872 + dialog.destroy ()
17874 + def _destroy_console (self, *_args):
17875 + self.window.destroy ()
17876 + self.window = None
17878 + def do_deactivate (self):
17879 + data = self.totem.get_data ('PythonConsolePluginInfo')
17881 + manager = self.totem.get_ui_manager ()
17882 + manager.remove_ui (data['ui_id'])
17883 + manager.remove_action_group (data['action_group'])
17884 + manager.ensure_update ()
17886 + self.totem.set_data ('PythonConsolePluginInfo', None)
17888 + if self.window is not None:
17889 + self.window.destroy ()
17890 diff --git a/src/plugins/sample-python/Makefile.am b/src/plugins/sample-python/Makefile.am
17891 deleted file mode 100644
17892 index bb0ce6d..0000000
17893 --- a/src/plugins/sample-python/Makefile.am
17896 -include $(top_srcdir)/src/plugins/Makefile.plugins
17898 -plugindir = $(PLUGINDIR)/sample-python
17899 -plugin_PYTHON = sample-python.py
17901 -plugin_in_files = sample-python.plugin.in
17903 -# Override to _not_ install the test plugins
17904 -install-pluginPYTHON:
17905 -install-pluginDATA:
17906 -uninstall-pluginPYTHON:
17907 -uninstall-pluginDATA:
17909 --include $(top_srcdir)/git.mk
17910 diff --git a/src/plugins/sample-python/sample-python.plugin.in b/src/plugins/sample-python/sample-python.plugin.in
17911 deleted file mode 100644
17912 index ab75dd0..0000000
17913 --- a/src/plugins/sample-python/sample-python.plugin.in
17918 -Module=sample-python
17920 -_Name=Python Sample Plugin
17921 -_Description=A useless sample plugin in Python
17922 -Authors=Philip Withnall <philip@tecnocode.co.uk>
17923 -Copyright=Copyright © 2006 James Livingston, 2007 Philip Withnall
17924 -Website=http://www.gnome.org/projects/totem/
17925 diff --git a/src/plugins/sample-python/sample-python.py b/src/plugins/sample-python/sample-python.py
17926 deleted file mode 100644
17927 index 3956cf8..0000000
17928 --- a/src/plugins/sample-python/sample-python.py
17931 -# From code by James Livingston
17934 -from gi.repository import Peas
17935 -from gi.repository import Totem
17937 -class SamplePython(gobject.GObject, Peas.Activatable):
17938 - __gtype_name__ = 'SamplePython'
17940 - object = gobject.property(type = gobject.GObject)
17942 - def do_activate(self):
17943 - print "Activating sample Python plugin"
17944 - self.object.action_fullscreen_toggle()
17946 - def do_deactivate(self):
17947 - print "Deactivating sample Python plugin"
17948 diff --git a/src/plugins/samplepython/Makefile.am b/src/plugins/samplepython/Makefile.am
17949 new file mode 100644
17950 index 0000000..9bbcda6
17952 +++ b/src/plugins/samplepython/Makefile.am
17954 +include $(top_srcdir)/src/plugins/Makefile.plugins
17956 +plugindir = $(PLUGINDIR)/sample-python
17957 +plugin_PYTHON = samplepython.py
17959 +plugin_in_files = samplepython.plugin.in
17961 +# Override to _not_ install the test plugins
17962 +install-pluginPYTHON:
17963 +install-pluginDATA:
17964 +uninstall-pluginPYTHON:
17965 +uninstall-pluginDATA:
17967 +-include $(top_srcdir)/git.mk
17968 diff --git a/src/plugins/samplepython/samplepython.plugin.in b/src/plugins/samplepython/samplepython.plugin.in
17969 new file mode 100644
17970 index 0000000..48eec9c
17972 +++ b/src/plugins/samplepython/samplepython.plugin.in
17976 +Module=samplepython
17978 +_Name=Python Sample Plugin
17979 +_Description=A useless sample plugin in Python
17980 +Authors=Philip Withnall <philip@tecnocode.co.uk>
17981 +Copyright=Copyright © 2006 James Livingston, 2007 Philip Withnall
17982 +Website=http://www.gnome.org/projects/totem/
17983 diff --git a/src/plugins/samplepython/samplepython.py b/src/plugins/samplepython/samplepython.py
17984 new file mode 100644
17985 index 0000000..0630328
17987 +++ b/src/plugins/samplepython/samplepython.py
17989 +# From code by James Livingston
17991 +from gi.repository import GObject, Peas, Totem # pylint: disable-msg=E0611,W0611
17993 +class SamplePython (GObject.Object, Peas.Activatable):
17994 + __gtype_name__ = 'SamplePython'
17996 + object = GObject.property (type = GObject.Object)
17998 + def __init__ (self):
17999 + GObject.Object.__init__ (self)
18001 + def do_activate (self):
18002 + print "Activating sample Python plugin"
18003 + self.object.action_fullscreen_toggle ()
18005 + def do_deactivate (self):
18006 + print "Deactivating sample Python plugin"
18007 + self.object.action_fullscreen_toggle ()
18008 diff --git a/src/plugins/save-file/totem-save-file.c b/src/plugins/save-file/totem-save-file.c
18009 index 2351dc9..85c8fd5 100644
18010 --- a/src/plugins/save-file/totem-save-file.c
18011 +++ b/src/plugins/save-file/totem-save-file.c
18012 @@ -60,7 +60,7 @@ static void totem_save_file_plugin_copy (GtkAction *action,
18013 TotemSaveFilePlugin *pi);
18015 static GtkActionEntry totem_save_file_plugin_actions [] = {
18016 - { "SaveFile", "save-as", N_("Save a Copy..."), NULL,
18017 + { "SaveFile", "save-as", N_("Save a Copy..."), "<Ctrl>E",
18018 N_("Save a copy of the movie"),
18019 G_CALLBACK (totem_save_file_plugin_copy) },
18021 diff --git a/src/plugins/screenshot/gnome-screenshot-widget.c b/src/plugins/screenshot/gnome-screenshot-widget.c
18022 index ebd7fcf..43b93bc 100644
18023 --- a/src/plugins/screenshot/gnome-screenshot-widget.c
18024 +++ b/src/plugins/screenshot/gnome-screenshot-widget.c
18025 @@ -265,7 +265,6 @@ void
18026 on_preview_expose_event (GtkWidget *drawing_area, GdkEventExpose *event, GnomeScreenshotWidget *self)
18028 GdkPixbuf *pixbuf = NULL;
18029 - gboolean free_pixbuf = FALSE;
18030 GtkStyleContext *context;
18033 @@ -282,7 +281,6 @@ on_preview_expose_event (GtkWidget *drawing_area, GdkEventExpose *event, GnomeSc
18034 gtk_icon_source_set_size_wildcarded (source, FALSE);
18036 pixbuf = gtk_render_icon_pixbuf (context, source, (GtkIconSize) -1);
18037 - free_pixbuf = TRUE;
18038 gtk_icon_source_free (source);
18040 pixbuf = g_object_ref (self->priv->preview_image);
18041 diff --git a/src/plugins/screenshot/totem-gallery-progress.c b/src/plugins/screenshot/totem-gallery-progress.c
18042 index 6769886..854065e 100644
18043 --- a/src/plugins/screenshot/totem-gallery-progress.c
18044 +++ b/src/plugins/screenshot/totem-gallery-progress.c
18045 @@ -105,6 +105,7 @@ totem_gallery_progress_new (GPid child_pid, const gchar *output_filename)
18047 /* Set the progress label */
18048 label_text = g_strdup_printf (_("Saving gallery as \"%s\""), output_filename);
18049 + gtk_progress_bar_set_show_text (self->priv->progress_bar, TRUE);
18050 gtk_progress_bar_set_text (self->priv->progress_bar, label_text);
18051 g_free (label_text);
18053 diff --git a/src/plugins/skipto/totem-time-entry.c b/src/plugins/skipto/totem-time-entry.c
18054 index 853f674..37c9f4a 100644
18055 --- a/src/plugins/skipto/totem-time-entry.c
18056 +++ b/src/plugins/skipto/totem-time-entry.c
18058 * Author: Philip Withnall <philip@tecnocode.co.uk>
18061 +#include "config.h"
18062 #include <string.h>
18064 +#include <glib/gi18n-lib.h>
18065 #include <gtk/gtk.h>
18067 #include "backend/video-utils.h"
18068 diff --git a/src/plugins/totem-plugins-engine.c b/src/plugins/totem-plugins-engine.c
18069 index f53c0c3..2f101e6 100644
18070 --- a/src/plugins/totem-plugins-engine.c
18071 +++ b/src/plugins/totem-plugins-engine.c
18072 @@ -81,7 +81,7 @@ on_activatable_extension_added (PeasExtensionSet *set,
18073 PeasExtension *exten,
18074 TotemPluginsEngine *engine)
18076 - peas_extension_call (exten, "activate");
18077 + peas_activatable_activate (PEAS_ACTIVATABLE (exten));
18081 @@ -90,7 +90,7 @@ on_activatable_extension_removed (PeasExtensionSet *set,
18082 PeasExtension *exten,
18083 TotemPluginsEngine *engine)
18085 - peas_extension_call (exten, "deactivate");
18086 + peas_activatable_deactivate (PEAS_ACTIVATABLE (exten));
18089 TotemPluginsEngine *
18090 diff --git a/src/plugins/tracker/Makefile.am b/src/plugins/tracker/Makefile.am
18091 deleted file mode 100644
18092 index 0ef3fc4..0000000
18093 --- a/src/plugins/tracker/Makefile.am
18096 -include $(top_srcdir)/src/plugins/Makefile.plugins
18098 -plugindir = $(PLUGINDIR)/tracker
18099 -plugin_LTLIBRARIES = libtracker.la
18101 -plugin_in_files = tracker.plugin.in
18103 -libtracker_la_SOURCES = totem-tracker.c totem-tracker-widget.h totem-tracker-widget.c
18104 -libtracker_la_LDFLAGS = $(plugin_ldflags)
18105 -libtracker_la_LIBADD = \
18106 - $(plugin_libadd) \
18107 - $(TRACKER_LIBS) \
18109 -libtracker_la_CFLAGS = \
18110 - $(plugin_cflags) \
18111 - $(TRACKER_CFLAGS) \
18114 --include $(top_srcdir)/git.mk
18115 diff --git a/src/plugins/tracker/totem-tracker-widget.c b/src/plugins/tracker/totem-tracker-widget.c
18116 deleted file mode 100644
18117 index fa91c05..0000000
18118 --- a/src/plugins/tracker/totem-tracker-widget.c
18121 -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
18123 - * The _get_result_count method taken from the tracker-client.h file from libtracker
18124 - * Copyright (C) 2006, Jamie McCracken <jamiemcc@gnome.org>
18125 - * Copyright (C) 2007, Javier Goday <jgoday@gmail.com>
18126 - * Copyright (C) 2010, Martyn Russell <martyn@lanedo.com>
18128 - * This library is free software; you can redistribute it and/or
18129 - * modify it under the terms of the GNU Library General Public
18130 - * License as published by the Free Software Foundation; either
18131 - * version 2 of the License, or (at your option) any later version.
18133 - * This library is distributed in the hope that it will be useful,
18134 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
18135 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18136 - * General Public License for more details.
18138 - * You should have received a copy of the GNU Library General Public
18139 - * License along with this library; if not, write to the
18140 - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18141 - * Boston, MA 02110-1301, USA.
18143 - * Author: Jamie McCracken <jamiemcc@gnome.org>
18144 - * Javier Goday <jgoday@gmail.com>
18145 - * Martyn Russell <martyn@lanedo.com>
18148 -#include "config.h"
18150 -#include <string.h>
18151 -#include <stdio.h>
18152 -#include <stdlib.h>
18153 -#include <libintl.h>
18155 -#include <glib/gi18n-lib.h>
18157 -#include <gio/gio.h>
18159 -#include <libtracker-sparql/tracker-sparql.h>
18161 -#include "totem-tracker-widget.h"
18162 -#include "totem-cell-renderer-video.h"
18163 -#include "totem-playlist.h"
18164 -#include "totem-video-list.h"
18165 -#include "totem-interface.h"
18167 -#define TOTEM_TRACKER_MAX_RESULTS_SIZE 20
18169 -G_DEFINE_TYPE (TotemTrackerWidget, totem_tracker_widget, GTK_TYPE_VBOX)
18171 -struct TotemTrackerWidgetPrivate {
18172 - GtkWidget *search_entry;
18173 - GtkWidget *search_button;
18174 - GtkWidget *status_label;
18176 - GtkWidget *next_button;
18177 - GtkWidget *previous_button;
18178 - GtkWidget *page_selector;
18180 - guint total_result_count;
18181 - guint current_result_page;
18183 - GtkListStore *result_store;
18184 - TotemVideoList *result_list;
18186 - GSList *thumbnail_requests;
18187 - GdkPixbuf *default_icon;
18188 - gint default_icon_size;
18192 - TotemTrackerWidget *widget;
18193 - TrackerSparqlConnection *connection;
18194 - GCancellable *cancellable;
18195 - gchar *search_text;
18197 -} SearchResultsData;
18200 - TotemTrackerWidget *widget;
18201 - GCancellable *cancellable;
18202 - GtkTreeIter iter;
18217 -static void totem_tracker_widget_dispose (GObject *object);
18218 -static void totem_tracker_widget_set_property (GObject *object,
18219 - guint property_id,
18220 - const GValue *value,
18221 - GParamSpec *pspec);
18222 -static void page_selector_value_changed_cb (GtkSpinButton *self,
18223 - TotemTrackerWidget *widget);
18224 -static void thumbnail_data_free (ThumbnailData *td);
18225 -static void search_get_hits_next (SearchResultsData *srd,
18226 - TrackerSparqlCursor *cursor);
18227 -static void search_get_hits (SearchResultsData *srd);
18228 -static void search_finish (SearchResultsData *srd,
18232 -totem_tracker_widget_class_init (TotemTrackerWidgetClass *klass)
18234 - GObjectClass *object_class;
18236 - g_type_class_add_private (klass, sizeof (TotemTrackerWidgetPrivate));
18238 - object_class = G_OBJECT_CLASS (klass);
18239 - object_class->dispose = totem_tracker_widget_dispose;
18240 - object_class->set_property = totem_tracker_widget_set_property;
18242 - g_object_class_install_property (object_class, PROP_TOTEM,
18243 - g_param_spec_object ("totem", NULL, NULL,
18244 - TOTEM_TYPE_OBJECT, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
18248 -totem_tracker_widget_dispose (GObject *object)
18250 - TotemTrackerWidget *self = TOTEM_TRACKER_WIDGET (object);
18252 - if (self->priv->default_icon != NULL) {
18253 - g_object_unref (self->priv->default_icon);
18254 - self->priv->default_icon = NULL;
18257 - g_slist_foreach (self->priv->thumbnail_requests, (GFunc) thumbnail_data_free, NULL);
18258 - g_slist_free (self->priv->thumbnail_requests);
18259 - self->priv->thumbnail_requests = NULL;
18261 - if (self->priv->result_store != NULL) {
18262 - g_object_unref (self->priv->result_store);
18263 - self->priv->result_store = NULL;
18266 - G_OBJECT_CLASS (totem_tracker_widget_parent_class)->dispose (object);
18270 -totem_tracker_widget_set_property (GObject *object,
18271 - guint property_id,
18272 - const GValue *value,
18273 - GParamSpec *pspec)
18275 - TotemTrackerWidget *widget;
18277 - widget = TOTEM_TRACKER_WIDGET (object);
18279 - switch (property_id)
18282 - widget->totem = g_value_dup_object (value);
18283 - g_object_set (G_OBJECT (widget->priv->result_list), "totem", widget->totem, NULL);
18286 - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
18290 -static ThumbnailData *
18291 -thumbnail_data_new (TotemTrackerWidget *widget,
18292 - GtkTreeIter iter)
18294 - ThumbnailData *td;
18296 - td = g_slice_new0 (ThumbnailData);
18298 - td->widget = g_object_ref (widget);
18299 - td->cancellable = g_cancellable_new ();
18306 -thumbnail_data_free (ThumbnailData *td)
18311 - if (td->cancellable) {
18312 - g_cancellable_cancel (td->cancellable);
18313 - g_object_unref (td->cancellable);
18317 - g_object_unref (td->widget);
18319 - g_slice_free (ThumbnailData, td);
18324 -search_results_populate_cb (GObject *source_object,
18325 - GAsyncResult *res,
18326 - gpointer user_data)
18328 - ThumbnailData *td;
18329 - TotemTrackerWidget *widget;
18331 - GError *error = NULL;
18332 - GdkPixbuf *thumbnail = NULL;
18335 - widget = td->widget;
18337 - info = g_file_query_info_finish (G_FILE (source_object),
18342 - g_warning ("Call to g_file_query_info_async() failed for '%s': %s",
18343 - G_FILE_ATTRIBUTE_THUMBNAIL_PATH,
18345 - g_error_free (error);
18347 - const gchar *thumbnail_path;
18349 - thumbnail_path = g_file_info_get_attribute_byte_string (info, G_FILE_ATTRIBUTE_THUMBNAIL_PATH);
18351 - if (thumbnail_path != NULL)
18352 - thumbnail = gdk_pixbuf_new_from_file (thumbnail_path, NULL);
18355 - gtk_list_store_set (GTK_LIST_STORE (widget->priv->result_store), &td->iter,
18356 - IMAGE_COLUMN, thumbnail ? thumbnail : widget->priv->default_icon,
18360 - g_object_unref (thumbnail);
18363 - g_object_unref (info);
18365 - widget->priv->thumbnail_requests = g_slist_remove (widget->priv->thumbnail_requests, td);
18366 - thumbnail_data_free (td);
18370 -search_results_populate (SearchResultsData *srd,
18371 - const gchar *uri,
18372 - const gchar *title)
18374 - TotemTrackerWidget *widget;
18375 - ThumbnailData *td;
18377 - GtkTreeIter iter;
18379 - widget = srd->widget;
18381 - gtk_list_store_append (GTK_LIST_STORE (widget->priv->result_store), &iter); /* Acquire an iterator */
18382 - gtk_list_store_set (GTK_LIST_STORE (widget->priv->result_store), &iter,
18383 - FILE_COLUMN, uri,
18384 - NAME_COLUMN, title,
18387 - td = thumbnail_data_new (widget, iter);
18388 - widget->priv->thumbnail_requests = g_slist_prepend (widget->priv->thumbnail_requests, td);
18390 - file = g_file_new_for_uri (uri);
18391 - g_file_query_info_async (file,
18392 - G_FILE_ATTRIBUTE_THUMBNAIL_PATH,
18393 - G_FILE_QUERY_INFO_NONE,
18394 - G_PRIORITY_DEFAULT,
18396 - search_results_populate_cb,
18398 - g_object_unref (file);
18401 -static SearchResultsData *
18402 -search_results_new (TotemTrackerWidget *widget,
18403 - const gchar *search_text)
18405 - SearchResultsData *srd;
18406 - TrackerSparqlConnection *connection;
18407 - GCancellable *cancellable;
18408 - GError *error = NULL;
18414 - cancellable = g_cancellable_new ();
18416 - connection = tracker_sparql_connection_get (cancellable, &error);
18418 - g_warning ("Call to tracker_sparql_connection_get() failed: %s", error->message);
18419 - g_object_unref (cancellable);
18420 - g_error_free (error);
18424 - srd = g_slice_new0 (SearchResultsData);
18426 - srd->widget = g_object_ref (widget);
18427 - srd->connection = connection;
18428 - srd->cancellable = cancellable;
18429 - srd->search_text = g_strdup (search_text);
18435 -search_results_free (SearchResultsData *srd)
18441 - if (srd->cancellable) {
18442 - g_cancellable_cancel (srd->cancellable);
18443 - g_object_unref (srd->cancellable);
18446 - if (srd->connection) {
18447 - g_object_unref (srd->connection);
18450 - if (srd->widget) {
18451 - g_object_unref (srd->widget);
18454 - g_free (srd->search_text);
18455 - g_slice_free (SearchResultsData, srd);
18459 -get_fts_string (GStrv search_words,
18460 - gboolean use_or_operator)
18465 - if (!search_words) {
18469 - fts = g_string_new ("");
18470 - len = g_strv_length (search_words);
18472 - for (i = 0; i < len; i++) {
18473 - g_string_append (fts, search_words[i]);
18474 - g_string_append_c (fts, '*');
18476 - if (i < len - 1) {
18477 - if (use_or_operator) {
18478 - g_string_append (fts, " OR ");
18480 - g_string_append (fts, " ");
18485 - return g_string_free (fts, FALSE);
18489 -search_get_hits_next_cb (GObject *source_object,
18490 - GAsyncResult *res,
18491 - gpointer user_data)
18493 - TrackerSparqlCursor *cursor;
18494 - SearchResultsData *srd = user_data;
18495 - GError *error = NULL;
18496 - gboolean more_results;
18498 - cursor = TRACKER_SPARQL_CURSOR (source_object);
18500 - more_results = tracker_sparql_cursor_next_finish (cursor,
18504 - g_warning ("Call to tracker_sparql_cursor_next_finish() failed getting next hit: %s", error->message);
18505 - g_object_unref (cursor);
18506 - search_finish (srd, error);
18510 - if (!more_results) {
18511 - /* got all results */
18512 - g_object_unref (cursor);
18513 - search_finish (srd, NULL);
18515 - const gchar *url, *title;
18517 - url = tracker_sparql_cursor_get_string (cursor, 0, NULL);
18518 - title = tracker_sparql_cursor_get_string (cursor, 1, NULL);
18520 - g_message (" Got hit:'%s' --> '%s'", url, title);
18521 - search_results_populate (srd, url, title);
18523 - /* Now continue with next row in the db */
18524 - search_get_hits_next (srd, cursor);
18529 -search_get_hits_next (SearchResultsData *srd,
18530 - TrackerSparqlCursor *cursor)
18532 - tracker_sparql_cursor_next_async (cursor,
18533 - srd->cancellable,
18534 - search_get_hits_next_cb,
18539 -search_get_hits_cb (GObject *source_object,
18540 - GAsyncResult *res,
18541 - gpointer user_data)
18543 - TrackerSparqlCursor *cursor;
18544 - SearchResultsData *srd = user_data;
18545 - GError *error = NULL;
18547 - cursor = tracker_sparql_connection_query_finish (TRACKER_SPARQL_CONNECTION (source_object),
18551 - g_warning ("Call to tracker_sparql_connection_query_finish() failed getting hits: %s", error->message);
18552 - g_object_unref (cursor);
18553 - search_finish (srd, error);
18557 - search_get_hits_next (srd, cursor);
18561 -search_get_hits (SearchResultsData *srd)
18563 - gchar *fts, *query;
18565 - if (srd->search_text && srd->search_text[0] != '\0') {
18568 - strv = g_strsplit (srd->search_text, " ", -1);
18569 - fts = get_fts_string (strv, FALSE);
18570 - g_strfreev (strv);
18576 - query = g_strdup_printf ("SELECT nie:url(?urn) nie:title(?urn) "
18578 - " ?urn a nmm:Video ;"
18579 - " fts:match \"%s\" ;"
18580 - " tracker:available true . "
18582 - "ORDER BY DESC(fts:rank(?urn)) ASC(nie:url(?urn)) "
18587 - TOTEM_TRACKER_MAX_RESULTS_SIZE);
18589 - query = g_strdup_printf ("SELECT nie:url(?urn) nie:title(?urn) "
18591 - " ?urn a nmm:Video ; "
18592 - " tracker:available true . "
18594 - "ORDER BY DESC(fts:rank(?urn)) ASC(nie:url(?urn)) "
18598 - TOTEM_TRACKER_MAX_RESULTS_SIZE);
18601 - tracker_sparql_connection_query_async (srd->connection,
18603 - srd->cancellable,
18604 - search_get_hits_cb,
18611 -search_get_count_cb (GObject *source_object,
18612 - GAsyncResult *res,
18613 - gpointer user_data)
18615 - TrackerSparqlCursor *cursor;
18616 - SearchResultsData *srd = user_data;
18617 - GError *error = NULL;
18619 - cursor = tracker_sparql_connection_query_finish (TRACKER_SPARQL_CONNECTION (source_object),
18623 - g_warning ("Call to tracker_sparql_connection_query_finish() failed getting hit count: %s", error->message);
18624 - g_object_unref (cursor);
18625 - search_finish (srd, error);
18629 - srd->widget->priv->total_result_count = 0;
18632 - tracker_sparql_cursor_next (cursor, srd->cancellable, &error);
18635 - g_warning ("Call to tracker_sparql_cursor_next() failed getting hit count: %s", error->message);
18636 - g_object_unref (cursor);
18637 - search_finish (srd, error);
18641 - srd->widget->priv->total_result_count = tracker_sparql_cursor_get_integer (cursor, 0);
18642 - g_object_unref (cursor);
18645 - g_message ("Got hit count:%d", srd->widget->priv->total_result_count);
18647 - /* Now continue with next query */
18648 - search_get_hits (srd);
18652 -search_get_count (SearchResultsData *srd)
18654 - gchar *fts, *query;
18656 - if (srd->search_text && srd->search_text[0] != '\0') {
18659 - strv = g_strsplit (srd->search_text, " ", -1);
18660 - fts = get_fts_string (strv, FALSE);
18661 - g_strfreev (strv);
18666 - /* NOTE: We use FILTERS here for the type because we may want
18667 - * to show more items than just videos in the future - like
18668 - * music or some other specialised content.
18671 - query = g_strdup_printf ("SELECT COUNT(?urn) "
18673 - " ?urn a nmm:Video ;"
18674 - " fts:match \"%s\" ;"
18675 - " tracker:available true . "
18679 - query = g_strdup_printf ("SELECT COUNT(?urn) "
18681 - " ?urn a nmm:Video ;"
18682 - " tracker:available true . "
18686 - tracker_sparql_connection_query_async (srd->connection,
18688 - srd->cancellable,
18689 - search_get_count_cb,
18696 -search_finish (SearchResultsData *srd,
18699 - TotemTrackerWidgetPrivate *priv = srd->widget->priv;
18701 - guint next_page, total_pages;
18703 - /* Always do this first so we can try again */
18704 - gtk_widget_set_sensitive (priv->search_entry, TRUE);
18707 - gtk_label_set_text (GTK_LABEL (priv->status_label), _("Could not connect to Tracker"));
18708 - /* gtk_list_store_clear (GTK_LIST_STORE (priv->result_store)); */
18709 - g_error_free (error);
18713 - if (srd->widget->priv->total_result_count < 1) {
18714 - gtk_label_set_text (GTK_LABEL (priv->status_label), _("No results"));
18715 - gtk_widget_set_sensitive (GTK_WIDGET (priv->page_selector), FALSE);
18716 - gtk_widget_set_sensitive (GTK_WIDGET (priv->next_button), FALSE);
18718 - next_page = (priv->current_result_page + 1) * TOTEM_TRACKER_MAX_RESULTS_SIZE;
18719 - total_pages = priv->total_result_count / TOTEM_TRACKER_MAX_RESULTS_SIZE + 1;
18721 - /* Set the new range on the page selector's adjustment and ensure the current page is correct */
18722 - gtk_spin_button_set_range (GTK_SPIN_BUTTON (priv->page_selector), 1, total_pages);
18723 - priv->current_result_page = gtk_spin_button_get_value (GTK_SPIN_BUTTON (priv->page_selector)) - 1;
18726 - * This is used to show which items are listed in the
18727 - * list view, for example:
18729 - * Showing 10-20 of 128 matches
18731 - * This is similar to what web searches use, eg.
18732 - * Google on the top-right of their search results
18735 - * Personalized Results 1 - 10 of about 4,130,000 for foobar
18738 - str = g_strdup_printf (ngettext ("Showing %i - %i of %i match", "Showing %i - %i of %i matches",
18739 - priv->total_result_count),
18740 - priv->current_result_page * TOTEM_TRACKER_MAX_RESULTS_SIZE + 1,
18741 - next_page > priv->total_result_count ? priv->total_result_count : next_page,
18742 - priv->total_result_count);
18743 - gtk_label_set_text (GTK_LABEL (priv->status_label), str);
18746 - /* Enable or disable the pager buttons */
18747 - if (priv->current_result_page < priv->total_result_count / TOTEM_TRACKER_MAX_RESULTS_SIZE) {
18748 - gtk_widget_set_sensitive (GTK_WIDGET (priv->page_selector), TRUE);
18749 - gtk_widget_set_sensitive (GTK_WIDGET (priv->next_button), TRUE);
18752 - if (priv->current_result_page > 0) {
18753 - gtk_widget_set_sensitive (GTK_WIDGET (priv->page_selector), TRUE);
18754 - gtk_widget_set_sensitive (GTK_WIDGET (priv->previous_button), TRUE);
18756 - gtk_widget_set_sensitive (GTK_WIDGET (priv->previous_button), FALSE);
18759 - if (priv->current_result_page >= total_pages - 1) {
18760 - gtk_widget_set_sensitive (GTK_WIDGET (priv->next_button), FALSE);
18765 - g_signal_handlers_unblock_by_func (priv->page_selector,
18766 - page_selector_value_changed_cb,
18768 - search_results_free (srd);
18772 -search_start (TotemTrackerWidget *widget)
18774 - SearchResultsData *srd;
18775 - const gchar *search_text;
18777 - /* Cancel previous searches */
18778 - /* tracker_cancel_call (widget->priv->cookie_id); */
18780 - /* Clear the list store */
18781 - gtk_list_store_clear (GTK_LIST_STORE (widget->priv->result_store));
18783 - /* Stop pagination temporarily */
18784 - gtk_widget_set_sensitive (GTK_WIDGET (widget->priv->previous_button), FALSE);
18785 - gtk_widget_set_sensitive (GTK_WIDGET (widget->priv->page_selector), FALSE);
18786 - gtk_widget_set_sensitive (GTK_WIDGET (widget->priv->next_button), FALSE);
18788 - /* Stop after clearing the list store if they're just emptying the search entry box */
18789 - search_text = gtk_entry_get_text (GTK_ENTRY (widget->priv->search_entry));
18791 - g_signal_handlers_block_by_func (widget->priv->page_selector, page_selector_value_changed_cb, widget);
18793 - /* Get the tracker connection and data set up */
18794 - srd = search_results_new (widget, search_text);
18796 - gtk_label_set_text (GTK_LABEL (widget->priv->status_label), _("Could not connect to Tracker"));
18800 - gtk_widget_set_sensitive (widget->priv->search_entry, FALSE);
18802 - srd->offset = widget->priv->current_result_page * TOTEM_TRACKER_MAX_RESULTS_SIZE;
18804 - /* This is how things proceed (everything is done async):
18805 - * 1. Get the count (but only for the first time)
18806 - * 2. Get the cursor using the criteria.
18807 - * 3. Call the cursor_next() as many times as we have results.
18808 - * 4. Clean up the search UI.
18810 - if (widget->priv->current_result_page < 1) {
18811 - search_get_count (srd);
18813 - search_get_hits (srd);
18818 -go_next (GtkWidget *button, TotemTrackerWidget *widget)
18820 - if (widget->priv->current_result_page < widget->priv->total_result_count / TOTEM_TRACKER_MAX_RESULTS_SIZE)
18821 - gtk_spin_button_spin (GTK_SPIN_BUTTON (widget->priv->page_selector), GTK_SPIN_STEP_FORWARD, 1);
18823 - /* do_search is called via page_selector_value_changed_cb */
18827 -go_previous (GtkWidget *button, TotemTrackerWidget *widget)
18829 - if (widget->priv->current_result_page > 0)
18830 - gtk_spin_button_spin (GTK_SPIN_BUTTON (widget->priv->page_selector), GTK_SPIN_STEP_BACKWARD, 1);
18832 - /* do_search is called via page_selector_value_changed_cb */
18836 -page_selector_value_changed_cb (GtkSpinButton *self, TotemTrackerWidget *widget)
18838 - widget->priv->current_result_page = gtk_spin_button_get_value (self) - 1;
18840 - search_start (widget);
18844 -new_search (GtkButton *button, TotemTrackerWidget *widget)
18846 - /* Reset from the last search */
18847 - g_signal_handlers_block_by_func (widget->priv->page_selector, page_selector_value_changed_cb, widget);
18848 - gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget->priv->page_selector), 1);
18849 - g_signal_handlers_unblock_by_func (widget->priv->page_selector, page_selector_value_changed_cb, widget);
18851 - search_start (widget);
18855 -init_result_list (TotemTrackerWidget *widget)
18857 - /* Initialize the store result list */
18858 - widget->priv->result_store = gtk_list_store_new (N_COLUMNS,
18863 - /* Create the gtktreewidget to show the results */
18864 - widget->priv->result_list = g_object_new (TOTEM_TYPE_VIDEO_LIST,
18865 - "mrl-column", FILE_COLUMN,
18866 - "tooltip-column", NAME_COLUMN,
18869 - gtk_tree_view_set_model (GTK_TREE_VIEW (widget->priv->result_list),
18870 - GTK_TREE_MODEL (widget->priv->result_store));
18874 -initialize_list_store (TotemTrackerWidget *widget)
18876 - TotemCellRendererVideo *renderer;
18877 - GtkTreeViewColumn *column;
18879 - /* Initialise the columns of the result list */
18880 - renderer = totem_cell_renderer_video_new (TRUE);
18881 - column = gtk_tree_view_column_new_with_attributes (_("Search Results"), GTK_CELL_RENDERER (renderer),
18882 - "thumbnail", IMAGE_COLUMN,
18883 - "title", NAME_COLUMN,
18886 - gtk_tree_view_append_column (GTK_TREE_VIEW (widget->priv->result_list), column);
18890 -search_entry_changed_cb (GtkWidget *entry,
18891 - gpointer user_data)
18893 - TotemTrackerWidget *widget = user_data;
18895 - gtk_label_set_text (GTK_LABEL (widget->priv->status_label), "");
18899 -totem_tracker_widget_init (TotemTrackerWidget *widget)
18901 - GtkWidget *v_box; /* the main vertical box of the widget */
18902 - GtkWidget *h_box;
18903 - GtkWidget *pager_box; /* box that holds the next and previous buttons */
18904 - GtkScrolledWindow *scroll; /* make the result list scrollable */
18905 - GtkAdjustment *adjust; /* adjustment for the page selector spin button */
18906 - GdkScreen *screen;
18907 - GtkIconTheme *theme;
18909 - widget->priv = G_TYPE_INSTANCE_GET_PRIVATE (widget, TOTEM_TYPE_TRACKER_WIDGET, TotemTrackerWidgetPrivate);
18911 - init_result_list (widget);
18913 - v_box = gtk_vbox_new (FALSE, 6);
18914 - h_box = gtk_hbox_new (FALSE, 6);
18916 - /* Search entry */
18917 - widget->priv->search_entry = gtk_entry_new ();
18919 - /* Search button */
18920 - widget->priv->search_button = gtk_button_new_from_stock (GTK_STOCK_FIND);
18921 - gtk_box_pack_start (GTK_BOX (h_box), widget->priv->search_entry, TRUE, TRUE, 0);
18922 - gtk_box_pack_start (GTK_BOX (h_box), widget->priv->search_button, FALSE, TRUE, 0);
18923 - gtk_box_pack_start (GTK_BOX (v_box), h_box, FALSE, TRUE, 0);
18925 - /* Insert the result list and initialize the viewport */
18926 - scroll = GTK_SCROLLED_WINDOW (gtk_scrolled_window_new (NULL, NULL));
18927 - gtk_scrolled_window_set_policy (scroll, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
18928 - gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (widget->priv->result_list));
18929 - gtk_container_add (GTK_CONTAINER (v_box), GTK_WIDGET (scroll));
18931 - /* Status label */
18932 - widget->priv->status_label = gtk_label_new ("");
18933 - gtk_misc_set_alignment (GTK_MISC (widget->priv->status_label), 0.0, 0.5);
18934 - gtk_box_pack_start (GTK_BOX (v_box), widget->priv->status_label, FALSE, TRUE, 2);
18936 - /* Initialise the pager box */
18937 - pager_box = gtk_hbox_new (FALSE, 6);
18938 - widget->priv->next_button = gtk_button_new_from_stock (GTK_STOCK_GO_FORWARD);
18939 - widget->priv->previous_button = gtk_button_new_from_stock (GTK_STOCK_GO_BACK);
18940 - adjust = GTK_ADJUSTMENT (gtk_adjustment_new (1, 1, 1, 1, 5, 0));
18941 - widget->priv->page_selector = gtk_spin_button_new (adjust, 1, 0);
18942 - gtk_box_pack_start (GTK_BOX (pager_box), widget->priv->previous_button, TRUE, TRUE, 0);
18943 - gtk_box_pack_start (GTK_BOX (pager_box), gtk_label_new (_("Page")), TRUE, TRUE, 0);
18944 - gtk_box_pack_start (GTK_BOX (pager_box), widget->priv->page_selector, TRUE, TRUE, 0);
18945 - gtk_box_pack_start (GTK_BOX (pager_box), widget->priv->next_button, TRUE, TRUE, 0);
18946 - gtk_box_pack_start (GTK_BOX (v_box), pager_box, FALSE, TRUE, 0);
18948 - gtk_widget_set_sensitive (GTK_WIDGET (widget->priv->previous_button), FALSE);
18949 - gtk_widget_set_sensitive (GTK_WIDGET (widget->priv->page_selector), FALSE);
18950 - gtk_widget_set_sensitive (GTK_WIDGET (widget->priv->next_button), FALSE);
18952 - /* Add the main container to the widget */
18953 - gtk_container_add (GTK_CONTAINER (widget), v_box);
18955 - gtk_widget_show_all (GTK_WIDGET (widget));
18957 - /* Get default pixbuf for movies with no thumbnail available yet */
18958 - if (!gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG,
18959 - &widget->priv->default_icon_size,
18961 - /* default to this if all else fails */
18962 - widget->priv->default_icon_size = 64;
18965 - screen = gdk_display_get_default_screen (gdk_display_get_default());
18966 - theme = gtk_icon_theme_get_for_screen (screen);
18967 - widget->priv->default_icon = gtk_icon_theme_load_icon (theme,
18968 - "video-x-generic",
18969 - widget->priv->default_icon_size,
18970 - GTK_ICON_LOOKUP_USE_BUILTIN,
18973 - /* Connect the search button clicked signal and the search entry */
18974 - g_signal_connect (widget->priv->search_entry, "changed",
18975 - G_CALLBACK (search_entry_changed_cb), widget);
18976 - g_signal_connect (widget->priv->search_button, "clicked",
18977 - G_CALLBACK (new_search), widget);
18978 - g_signal_connect (widget->priv->search_entry, "activate",
18979 - G_CALLBACK (new_search), widget);
18980 - /* Connect the pager buttons */
18981 - g_signal_connect (widget->priv->next_button, "clicked",
18982 - G_CALLBACK (go_next), widget);
18983 - g_signal_connect (widget->priv->previous_button, "clicked",
18984 - G_CALLBACK (go_previous), widget);
18985 - g_signal_connect (widget->priv->page_selector, "value-changed",
18986 - G_CALLBACK (page_selector_value_changed_cb), widget);
18990 -totem_tracker_widget_new (TotemObject *totem)
18992 - GtkWidget *widget;
18994 - widget = g_object_new (TOTEM_TYPE_TRACKER_WIDGET,
18995 - "totem", totem, NULL);
18997 - /* Reset the info about the search */
18998 - TOTEM_TRACKER_WIDGET (widget)->priv->total_result_count = 0;
18999 - TOTEM_TRACKER_WIDGET (widget)->priv->current_result_page = 0;
19001 - initialize_list_store (TOTEM_TRACKER_WIDGET (widget));
19006 diff --git a/src/plugins/tracker/totem-tracker-widget.h b/src/plugins/tracker/totem-tracker-widget.h
19007 deleted file mode 100644
19008 index fa24d74..0000000
19009 --- a/src/plugins/tracker/totem-tracker-widget.h
19012 -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
19014 - * Copyright (C) 2007 Javier Goday <jgoday@gmail.com>
19016 - * This library is free software; you can redistribute it and/or
19017 - * modify it under the terms of the GNU Library General Public
19018 - * License as published by the Free Software Foundation; either
19019 - * version 2 of the License, or (at your option) any later version.
19021 - * This library is distributed in the hope that it will be useful,
19022 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
19023 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19024 - * General Public License for more details.
19026 - * You should have received a copy of the GNU Library General Public
19027 - * License along with this library; if not, write to the
19028 - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19029 - * Boston, MA 02110-1301, USA.
19031 - * Author : Javier Goday <jgoday@gmail.com>
19033 -#ifndef __TOTEM_TRACKER_WIDGET_H__
19034 -#define __TOTEM_TRACKER_WIDGET_H__
19036 -#include "totem.h"
19038 -#include <gtk/gtk.h>
19040 -#include <libtracker-sparql/tracker-sparql.h>
19042 -#define TOTEM_TYPE_TRACKER_WIDGET (totem_tracker_widget_get_type ())
19043 -#define TOTEM_TRACKER_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TOTEM_TYPE_TRACKER_WIDGET, TotemTrackerWidget))
19044 -#define TOTEM_TRACKER_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TOTEM_TYPE_TRACKER_WIDGET, TotemTrackerWidgetClass))
19045 -#define TOTEM_IS_TRACKER_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TOTEM_TYPE_TRACKER_WIDGET))
19046 -#define TOTEM_IS_TRACKER_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TOTEM_TYPE_TRACKER_WIDGET))
19047 -#define TOTEM_TRACKER_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TOTEM_TYPE_TRACKER_WIDGET, TotemTrackerWidgetClass))
19049 -typedef struct TotemTrackerWidgetPrivate TotemTrackerWidgetPrivate;
19051 -typedef struct TotemTrackerWidget {
19052 - GtkEventBox parent;
19054 - TotemObject *totem;
19055 - TotemTrackerWidgetPrivate *priv;
19056 -} TotemTrackerWidget;
19059 - GtkEventBoxClass parent_class;
19060 -} TotemTrackerWidgetClass;
19062 -GType totem_tracker_widget_get_type (void);
19063 -GtkWidget* totem_tracker_widget_new (TotemObject *totem);
19065 -#endif /* __TOTEM_TRACKER_WIDGET_H__ */
19066 diff --git a/src/plugins/tracker/totem-tracker.c b/src/plugins/tracker/totem-tracker.c
19067 deleted file mode 100644
19068 index 2a7c219..0000000
19069 --- a/src/plugins/tracker/totem-tracker.c
19072 -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
19074 - * Copyright (C) 2007 Javier Goday <jgoday@gmail.com>
19075 - * Based on the sidebar-test totem plugin example
19076 - * Copyright (C) 2007 Bastien Nocera <hadess@hadess.net>
19078 - * This program is free software; you can redistribute it and/or modify
19079 - * it under the terms of the GNU General Public License as published by
19080 - * the Free Software Foundation; either version 2 of the License, or
19081 - * (at your option) any later version.
19083 - * This program is distributed in the hope that it will be useful,
19084 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
19085 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19086 - * GNU General Public License for more details.
19088 - * You should have received a copy of the GNU General Public License
19089 - * along with this program; if not, write to the Free Software
19090 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19092 - * The Totem project hereby grant permission for non-gpl compatible GStreamer
19093 - * plugins to be used and distributed together with GStreamer and Totem. This
19094 - * permission are above and beyond the permissions granted by the GPL license
19095 - * Totem is covered by.
19097 - * See license_change file for details.
19101 -#include "config.h"
19104 -#include <glib-object.h>
19105 -#include <glib/gi18n-lib.h>
19106 -#include <gmodule.h>
19107 -#include <string.h>
19109 -#include "totem-plugin.h"
19110 -#include "totem.h"
19111 -#include "totem-tracker-widget.h"
19113 -#define TOTEM_TYPE_TRACKER_PLUGIN (totem_tracker_plugin_get_type ())
19114 -#define TOTEM_TRACKER_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TOTEM_TYPE_TRACKER_PLUGIN, TotemTrackerPlugin))
19115 -#define TOTEM_TRACKER_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), TOTEM_TYPE_TRACKER_PLUGIN, TotemTrackerPluginClass))
19116 -#define TOTEM_IS_TRACKER_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TOTEM_TYPE_TRACKER_PLUGIN))
19117 -#define TOTEM_IS_TRACKER_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TOTEM_TYPE_TRACKER_PLUGIN))
19118 -#define TOTEM_TRACKER_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TOTEM_TYPE_TRACKER_PLUGIN, TotemTrackerPluginClass))
19122 -} TotemTrackerPluginPrivate;
19124 -TOTEM_PLUGIN_REGISTER (TOTEM_TYPE_TRACKER_PLUGIN, TotemTrackerPlugin, totem_tracker_plugin);
19127 -impl_activate (PeasActivatable *plugin)
19129 - GtkWidget *widget;
19130 - TotemObject *totem;
19132 - g_object_get (plugin, "object", &totem, NULL);
19134 - widget = totem_tracker_widget_new (totem);
19135 - gtk_widget_show (widget);
19136 - totem_add_sidebar_page (totem, "tracker", _("Local Search"), widget);
19138 - g_object_unref (totem);
19142 -impl_deactivate (PeasActivatable *plugin)
19144 - TotemObject *totem;
19146 - g_object_get (plugin, "object", &totem, NULL);
19147 - totem_remove_sidebar_page (totem, "tracker");
19148 - g_object_unref (totem);
19151 diff --git a/src/plugins/tracker/tracker.plugin.in b/src/plugins/tracker/tracker.plugin.in
19152 deleted file mode 100644
19153 index 00a8e36..0000000
19154 --- a/src/plugins/tracker/tracker.plugin.in
19161 -_Name=Local Search
19162 -_Description=Search for local videos using Tracker
19163 -Authors=Javier Goday
19164 -Copyright=Copyright © 2007 Javier Goday, 2010 Martyn Russell
19165 -Website=http://www.gnome.org/projects/totem/
19166 diff --git a/src/plugins/youtube/totem-youtube.c b/src/plugins/youtube/totem-youtube.c
19167 index 710ce75..5daa39c 100644
19168 --- a/src/plugins/youtube/totem-youtube.c
19169 +++ b/src/plugins/youtube/totem-youtube.c
19170 @@ -282,7 +282,7 @@ increment_progress_bar_fraction (TotemYouTubePlugin *self, guint tree_view)
19171 if (gtk_progress_bar_get_fraction (priv->progress_bar[tree_view]) == 1.0) {
19172 /* The entire search process (including loading thumbnails) is finished, so update the progress bar */
19173 gdk_window_set_cursor (gtk_widget_get_window (priv->vbox), NULL);
19174 - gtk_progress_bar_set_text (priv->progress_bar[tree_view], "");
19175 + gtk_progress_bar_set_text (priv->progress_bar[tree_view], " ");
19176 gtk_progress_bar_set_fraction (priv->progress_bar[tree_view], 0.0);
19179 @@ -591,6 +591,17 @@ execute_query (TotemYouTubePlugin *self, guint tree_view, gboolean clear_tree_vi
19180 if (clear_tree_view == TRUE)
19181 gtk_list_store_clear (self->priv->list_store[tree_view]);
19183 +#ifdef HAVE_LIBGDATA_0_9
19184 + if (tree_view == SEARCH_TREE_VIEW) {
19185 + gdata_youtube_service_query_videos_async (self->priv->service, self->priv->query[tree_view], data->query_cancellable,
19186 + (GDataQueryProgressCallback) query_progress_cb, data, NULL,
19187 + (GAsyncReadyCallback) query_finished_cb, data);
19189 + gdata_youtube_service_query_related_async (self->priv->service, self->priv->playing_video, self->priv->query[tree_view],
19190 + data->query_cancellable, (GDataQueryProgressCallback) query_progress_cb, data, NULL,
19191 + (GAsyncReadyCallback) query_finished_cb, data);
19194 if (tree_view == SEARCH_TREE_VIEW) {
19195 gdata_youtube_service_query_videos_async (self->priv->service, self->priv->query[tree_view], data->query_cancellable,
19196 (GDataQueryProgressCallback) query_progress_cb, data,
19197 @@ -600,6 +611,7 @@ execute_query (TotemYouTubePlugin *self, guint tree_view, gboolean clear_tree_vi
19198 data->query_cancellable, (GDataQueryProgressCallback) query_progress_cb, data,
19199 (GAsyncReadyCallback) query_finished_cb, data);
19201 +#endif /* !HAVE_LIBGDATA_0_9 */
19205 @@ -634,7 +646,11 @@ search_button_clicked_cb (GtkButton *button, TotemYouTubePlugin *self)
19206 g_assert (priv->regex != NULL);
19208 /* Set up the GData service (needed for the tree views' queries) */
19209 +#ifdef HAVE_LIBGDATA_0_9
19210 + priv->service = gdata_youtube_service_new (DEVELOPER_KEY, NULL);
19212 priv->service = gdata_youtube_service_new (DEVELOPER_KEY, CLIENT_ID);
19213 +#endif /* !HAVE_LIBGDATA_0_9 */
19215 /* Set up network timeouts, if they're supported by our version of libgdata.
19216 * This will return from queries with %GDATA_SERVICE_ERROR_NETWORK_ERROR if network operations take longer than 30 seconds. */
19217 diff --git a/src/plugins/youtube/youtube.ui b/src/plugins/youtube/youtube.ui
19218 index a2654ea..9a2852e 100644
19219 --- a/src/plugins/youtube/youtube.ui
19220 +++ b/src/plugins/youtube/youtube.ui
19221 @@ -101,7 +101,10 @@
19225 - <object class="GtkProgressBar" id="yt_progress_bar_search"/>
19226 + <object class="GtkProgressBar" id="yt_progress_bar_search">
19227 + <property name="show-text">True</property>
19228 + <property name="text"> </property>
19231 <property name="padding">0</property>
19232 <property name="expand">False</property>
19233 diff --git a/src/totem-object.c b/src/totem-object.c
19234 index 22c234c..9d74856 100644
19235 --- a/src/totem-object.c
19236 +++ b/src/totem-object.c
19238 #include "totem-dnd-menu.h"
19239 #include "totem-preferences.h"
19241 +#include "totem-mime-types.h"
19242 +#include "totem-uri-schemes.h"
19244 #define REWIND_OR_PREVIOUS 4000
19246 #define SEEK_FORWARD_SHORT_OFFSET 15
19247 @@ -953,9 +956,13 @@ totem_object_action_exit (TotemObject *totem)
19248 GdkDisplay *display = NULL;
19251 + /* Save the page ID before we close the plugins, otherwise
19252 + * we'll never save it properly */
19253 + page_id = totem_sidebar_get_current_page (totem);
19255 /* Shut down the plugins first, allowing them to display modal dialogues (etc.) without threat of being killed from another thread */
19256 if (totem != NULL && totem->engine != NULL)
19257 - totem_plugins_engine_shut_down (totem->engine);
19258 + totem_object_plugins_shutdown (totem);
19260 /* Exit forcefully if we can't do the shutdown in 10 seconds */
19261 g_thread_create ((GThreadFunc) totem_action_wait_force_exit,
19262 @@ -975,11 +982,6 @@ totem_object_action_exit (TotemObject *totem)
19263 if (totem->prefs != NULL)
19264 gtk_widget_hide (totem->prefs);
19266 - /* Save the page ID before we close the plugins, otherwise
19267 - * we'll never save it properly */
19268 - page_id = totem_sidebar_get_current_page (totem);
19269 - totem_object_plugins_shutdown (totem);
19271 if (display != NULL)
19272 gdk_display_sync (display);
19274 @@ -4361,3 +4363,31 @@ video_widget_create (TotemObject *totem)
19275 G_CALLBACK (property_notify_cb_seekable), totem);
19276 update_volume_sliders (totem);
19280 + * totem_object_get_supported_content_types:
19282 + * Get the full list of file content types which Totem supports playing.
19284 + * Return value: (array zero-terminated=1) (transfer none): a %NULL-terminated array of the content types Totem supports
19287 +const gchar * const *
19288 +totem_object_get_supported_content_types (void)
19290 + return mime_types;
19294 + * totem_object_get_supported_uri_schemes:
19296 + * Get the full list of URI schemes which Totem supports accessing.
19298 + * Return value: (array zero-terminated=1) (transfer none): a %NULL-terminated array of the URI schemes Totem supports
19301 +const gchar * const *
19302 +totem_object_get_supported_uri_schemes (void)
19304 + return uri_schemes;
19306 diff --git a/src/totem-playlist.c b/src/totem-playlist.c
19307 index 6f44487..539ea57 100644
19308 --- a/src/totem-playlist.c
19309 +++ b/src/totem-playlist.c
19310 @@ -180,22 +180,6 @@ G_DEFINE_TYPE (TotemPlaylist, totem_playlist, GTK_TYPE_VBOX)
19312 /* Helper functions */
19314 -totem_playlist_gtk_tree_model_iter_previous (GtkTreeModel *tree_model,
19315 - GtkTreeIter *iter)
19317 - GtkTreePath *path;
19320 - path = gtk_tree_model_get_path (tree_model, iter);
19321 - ret = gtk_tree_path_prev (path);
19322 - if (ret != FALSE)
19323 - gtk_tree_model_get_iter (tree_model, iter, path);
19325 - gtk_tree_path_free (path);
19330 totem_playlist_gtk_tree_path_equals (GtkTreePath *path1, GtkTreePath *path2)
19333 @@ -2550,8 +2534,7 @@ totem_playlist_has_previous_mrl (TotemPlaylist *playlist)
19335 playlist->priv->current);
19337 - return totem_playlist_gtk_tree_model_iter_previous
19338 - (playlist->priv->model, &iter);
19339 + return gtk_tree_model_iter_previous (playlist->priv->model, &iter);
19341 if (playlist->priv->current_shuffled == 0)
19343 @@ -2700,8 +2683,7 @@ totem_playlist_set_previous (TotemPlaylist *playlist)
19345 playlist->priv->current);
19347 - totem_playlist_gtk_tree_model_iter_previous
19348 - (playlist->priv->model, &iter);
19349 + gtk_tree_model_iter_previous (playlist->priv->model, &iter);
19350 gtk_tree_path_free (playlist->priv->current);
19351 playlist->priv->current = gtk_tree_model_get_path
19352 (playlist->priv->model, &iter);
19353 diff --git a/src/totem-video-indexer.c b/src/totem-video-indexer.c
19354 deleted file mode 100644
19355 index 465d198..0000000
19356 --- a/src/totem-video-indexer.c
19360 - * Copyright (C) 2006 Bastien Nocera <hadess@hadess.net>
19362 - * This program is free software; you can redistribute it and/or modify
19363 - * it under the terms of the GNU General Public License as published by
19364 - * the Free Software Foundation; either version 2 of the License, or
19365 - * (at your option) any later version.
19367 - * This program is distributed in the hope that it will be useful,
19368 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
19369 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19370 - * GNU General Public License for more details.
19372 - * You should have received a copy of the GNU General Public License
19373 - * along with this program; if not, write to the Free Software
19374 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19376 - * The Totem project hereby grant permission for non-gpl compatible GStreamer
19377 - * plugins to be used and distributed together with GStreamer and Totem. This
19378 - * permission are above and beyond the permissions granted by the GPL license
19379 - * Totem is covered by.
19381 - * Monday 7th February 2005: Christian Schaller: Add exception clause.
19382 - * See license_change file for details.
19386 -#ifdef HAVE_CONFIG_H
19387 -#include "config.h"
19390 -#include <gtk/gtk.h>
19392 -#include <bacon-video-widget.h>
19394 -#include <string.h>
19395 -#include <unistd.h>
19396 -#include <stdlib.h>
19397 -#include <glib/gi18n.h>
19399 -#include "totem-resources.h"
19400 -#include "totem-mime-types.h"
19402 -static gboolean show_mimetype = FALSE;
19403 -static gboolean time_limit = TRUE;
19404 -static gboolean g_fatal_warnings = FALSE;
19405 -static char **filenames = NULL;
19408 -print_mimetypes (void)
19412 - for (i =0; i < G_N_ELEMENTS (mime_types); i++) {
19413 - g_print ("%s\n", mime_types[i]);
19417 -static const char *
19418 -boolean_to_string (gboolean data)
19420 - return (data ? "True" : "False");
19424 -totem_print_string (BaconVideoWidget *bvw, const char *key, BvwMetadataType id)
19426 - GValue value = { 0, };
19429 - bacon_video_widget_get_metadata (BACON_VIDEO_WIDGET (bvw),
19431 - str = g_value_get_string (&value);
19432 - if (str != NULL) {
19433 - g_print ("%s=%s\n", key, str);
19435 - g_value_unset (&value);
19439 -totem_print_int (BaconVideoWidget *bvw, const char *key, BvwMetadataType id)
19441 - GValue value = { 0, };
19444 - bacon_video_widget_get_metadata (BACON_VIDEO_WIDGET (bvw),
19446 - num = g_value_get_int (&value);
19448 - g_print ("%s=%d\n", key, num);
19450 - g_value_unset (&value);
19453 -G_GNUC_NORETURN static void
19454 -on_got_metadata_event (BaconVideoWidget *bvw, gpointer data)
19456 - GValue value = { 0, };
19457 - gboolean has_type;
19459 - totem_print_string (bvw, "TOTEM_INFO_TITLE", BVW_INFO_TITLE);
19460 - totem_print_string (bvw, "TOTEM_INFO_ARTIST", BVW_INFO_ARTIST);
19461 - totem_print_string (bvw, "TOTEM_INFO_YEAR", BVW_INFO_YEAR);
19462 - totem_print_string (bvw, "TOTEM_INFO_ALBUM", BVW_INFO_ALBUM);
19464 - totem_print_int (bvw, "TOTEM_INFO_DURATION", BVW_INFO_DURATION);
19465 - totem_print_int (bvw, "TOTEM_INFO_TRACK_NUMBER", BVW_INFO_TRACK_NUMBER);
19467 - bacon_video_widget_get_metadata (BACON_VIDEO_WIDGET (bvw),
19468 - BVW_INFO_HAS_VIDEO, &value);
19469 - has_type = g_value_get_boolean (&value);
19470 - g_print ("TOTEM_INFO_HAS_VIDEO=%s\n", boolean_to_string (has_type));
19471 - g_value_unset (&value);
19474 - totem_print_int (bvw, "TOTEM_INFO_VIDEO_WIDTH", BVW_INFO_DIMENSION_X);
19475 - totem_print_int (bvw, "TOTEM_INFO_VIDEO_HEIGHT", BVW_INFO_DIMENSION_Y);
19476 - totem_print_string (bvw, "TOTEM_INFO_VIDEO_CODEC", BVW_INFO_VIDEO_CODEC);
19477 - totem_print_int (bvw, "TOTEM_INFO_FPS", BVW_INFO_FPS);
19478 - totem_print_int (bvw, "TOTEM_INFO_VIDEO_BITRATE", BVW_INFO_VIDEO_BITRATE);
19481 - bacon_video_widget_get_metadata (BACON_VIDEO_WIDGET (bvw),
19482 - BVW_INFO_HAS_AUDIO, &value);
19483 - has_type = g_value_get_boolean (&value);
19484 - g_print ("TOTEM_INFO_HAS_AUDIO=%s\n", boolean_to_string (has_type));
19485 - g_value_unset (&value);
19488 - totem_print_int (bvw, "TOTEM_INFO_AUDIO_BITRATE", BVW_INFO_AUDIO_BITRATE);
19489 - totem_print_string (bvw, "TOTEM_INFO_AUDIO_CODEC", BVW_INFO_AUDIO_CODEC);
19490 - totem_print_int (bvw, "TOTEM_INFO_AUDIO_SAMPLE_RATE", BVW_INFO_AUDIO_SAMPLE_RATE);
19491 - totem_print_string (bvw, "TOTEM_INFO_AUDIO_CHANNELS", BVW_INFO_AUDIO_CHANNELS);
19493 - bacon_video_widget_close (bvw);
19497 -static const GOptionEntry entries[] = {
19498 - {"mimetype", 'm', 0, G_OPTION_ARG_NONE, &show_mimetype, "List the supported mime-types", NULL},
19499 - { "no-limit", 'l', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &time_limit, "Don't limit the thumbnailing time to 30 seconds", NULL },
19500 - {"g-fatal-warnings", 0, 0, G_OPTION_ARG_NONE, &g_fatal_warnings, "Make all warnings fatal", NULL},
19501 - {G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames, "Movies to index", NULL},
19505 -int main (int argc, char **argv)
19507 - GOptionGroup *options;
19508 - GOptionContext *context;
19509 - GtkWidget *widget;
19510 - BaconVideoWidget *bvw;
19511 - GError *error = NULL;
19512 - const char *path;
19514 - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
19515 - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
19516 - textdomain (GETTEXT_PACKAGE);
19518 - g_thread_init (NULL);
19519 - gdk_threads_init ();
19520 - context = g_option_context_new ("Index movies or songs");
19521 - options = bacon_video_widget_get_option_group ();
19522 - g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
19523 - g_option_context_add_group (context, options);
19526 - if (g_option_context_parse (context, &argc, &argv, &error) == FALSE) {
19527 - g_print ("couldn't parse command-line options: %s\n", error->message);
19528 - g_error_free (error);
19532 - if (g_fatal_warnings) {
19533 - GLogLevelFlags fatal_mask;
19535 - fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
19536 - fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
19537 - g_log_set_always_fatal (fatal_mask);
19540 - if (show_mimetype == TRUE) {
19541 - print_mimetypes ();
19543 - } else if (filenames == NULL || g_strv_length (filenames) != 1) {
19545 - help = g_option_context_get_help (context, FALSE, NULL);
19546 - g_print ("%s", help);
19551 - widget = bacon_video_widget_new (-1, -1, BVW_USE_TYPE_METADATA, &error);
19552 - if (widget == NULL) {
19553 - g_print ("error creating the video widget: %s\n", error->message);
19554 - g_error_free (error);
19557 - bvw = BACON_VIDEO_WIDGET (widget);
19558 - g_signal_connect (G_OBJECT (bvw), "got-metadata",
19559 - G_CALLBACK (on_got_metadata_event),
19562 - path = filenames[0];
19563 - if (time_limit != FALSE)
19564 - totem_resources_monitor_start (path, 0);
19565 - if (bacon_video_widget_open (bvw, path, NULL, &error) == FALSE) {
19566 - g_print ("Can't open %s: %s\n", path, error->message);
19572 - if (time_limit != FALSE)
19573 - totem_resources_monitor_stop ();
19578 diff --git a/src/totem.h b/src/totem.h
19579 index 4a24fa0..6294781 100644
19582 @@ -304,4 +304,7 @@ void totem_object_action_remote_set_setting (TotemObject *totem,
19583 gboolean totem_object_action_remote_get_setting (TotemObject *totem,
19584 TotemRemoteSetting setting);
19586 +const gchar * const *totem_object_get_supported_content_types (void);
19587 +const gchar * const *totem_object_get_supported_uri_schemes (void);
19589 #endif /* __TOTEM_H__ */