[Goodies-commits] r7740 - in parole/trunk: . data/interfaces parole po
Ali Abdallah
aliov at xfce.org
Sun Jul 19 01:08:55 CEST 2009
Author: aliov
Date: 2009-07-18 23:08:55 +0000 (Sat, 18 Jul 2009)
New Revision: 7740
Added:
parole/trunk/parole/parole-disc.c
parole/trunk/parole/parole-disc.h
Modified:
parole/trunk/ChangeLog
parole/trunk/TODO
parole/trunk/data/interfaces/parole.ui
parole/trunk/parole/Makefile.am
parole/trunk/parole/main.c
parole/trunk/parole/parole-dbus.c
parole/trunk/parole/parole-gst.c
parole/trunk/parole/parole-gst.h
parole/trunk/parole/parole-player.c
parole/trunk/parole/parole-stream.c
parole/trunk/po/parole-media-player.pot
Log:
* Parole now can play DVD/VCD.
* parole/parole-stream.c no need to hold a reference to
ParoleMediaFile object.
* Change the flag of dbus_request_name to
DBUS_NAME_FLAG_ALLOW_REPLACEMENT to make the -i (new instance)
command line working and opening a new instance, such a way
if the old instance exists the new one will take the DBus name.
Modified: parole/trunk/ChangeLog
===================================================================
--- parole/trunk/ChangeLog 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/ChangeLog 2009-07-18 23:08:55 UTC (rev 7740)
@@ -1,3 +1,12 @@
+2009-07-19: 01:00 Ali aliov at xfce.org
+ * Parole now can play DVD/VCD.
+ * parole/parole-stream.c no need to hold a reference to
+ ParoleMediaFile object.
+ * Change the flag of dbus_request_name to
+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT to make the -i (new instance)
+ command line working and opening a new instance, such a way
+ if the old instance exists the new one will take the DBus name.
+
2009-07-16: Ali aliov at xfce.org
* Parole now has a simple plugin interface. (not yet complete).
* plugins/properties: media properties plugin (Read only,
Modified: parole/trunk/TODO
===================================================================
--- parole/trunk/TODO 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/TODO 2009-07-18 23:08:55 UTC (rev 7740)
@@ -1,12 +1,9 @@
=== Media player ===
-* Currenlty the media player doesn't play DVD/CD.
* Complete the shortcut keys.
* Handle playlist(s), save/load.
* Better statusbar information.
* Encoding support for subtitles.
* Configure plugins dialog to load/unload plugins.
-* Generate the data from the interfaces files with
- exo-csource to avoid having to install them.
* ...
=== Plugins ===
Modified: parole/trunk/data/interfaces/parole.ui
===================================================================
--- parole/trunk/data/interfaces/parole.ui 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/data/interfaces/parole.ui 2009-07-18 23:08:55 UTC (rev 7740)
@@ -17,12 +17,12 @@
<object class="GtkMenuBar" id="menubar">
<property name="visible">True</property>
<child>
- <object class="GtkMenuItem" id="file-menu">
+ <object class="GtkMenuItem" id="media-menu-item">
<property name="visible">True</property>
<property name="label" translatable="yes">_Media</property>
<property name="use_underline">True</property>
<child type="submenu">
- <object class="GtkMenu" id="menu1">
+ <object class="GtkMenu" id="media-menu">
<property name="visible">True</property>
<child>
<object class="GtkImageMenuItem" id="menu-open">
Modified: parole/trunk/parole/Makefile.am
===================================================================
--- parole/trunk/parole/Makefile.am 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/parole/Makefile.am 2009-07-18 23:08:55 UTC (rev 7740)
@@ -70,11 +70,12 @@
parole-conf-dialog.h \
parole-rc-utils.h \
parole-utils.h \
+ parole-disc.h \
parole-dbus.h \
parole-medialist.h \
parole-debug.h \
parole-plugins-manager.h \
- parole-module.h
+ parole-module.h
libparole_headers = \
$(INST_HFILES)
@@ -102,6 +103,7 @@
parole-screensaver.c \
parole-conf.c \
parole-conf-dialog.c \
+ parole-disc.c \
parole-rc-utils.c \
parole-utils.c \
parole-dbus.c \
Modified: parole/trunk/parole/main.c
===================================================================
--- parole/trunk/parole/main.c 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/parole/main.c 2009-07-18 23:08:55 UTC (rev 7740)
@@ -129,7 +129,7 @@
return EXIT_FAILURE;
}
- if ( parole_dbus_name_has_owner (PAROLE_DBUS_NAME) )
+ if ( !new_instance && parole_dbus_name_has_owner (PAROLE_DBUS_NAME) )
{
TRACE ("Parole is already running");
if ( filenames && filenames[0] != NULL )
Modified: parole/trunk/parole/parole-dbus.c
===================================================================
--- parole/trunk/parole/parole-dbus.c 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/parole/parole-dbus.c 2009-07-18 23:08:55 UTC (rev 7740)
@@ -85,7 +85,7 @@
ret =
dbus_bus_request_name (parole_session_bus_get (),
name,
- DBUS_NAME_FLAG_DO_NOT_QUEUE,
+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT,
&error);
if ( dbus_error_is_set (&error) )
Added: parole/trunk/parole/parole-disc.c
===================================================================
--- parole/trunk/parole/parole-disc.c (rev 0)
+++ parole/trunk/parole/parole-disc.c 2009-07-18 23:08:55 UTC (rev 7740)
@@ -0,0 +1,307 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <gio/gio.h>
+#include <gtk/gtk.h>
+
+#include <libxfce4util/libxfce4util.h>
+
+#include "common/parole-builder.h"
+
+#include "parole-disc.h"
+
+static void parole_disc_finalize (GObject *object);
+
+#define PAROLE_DISC_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_DISC, ParoleDiscPrivate))
+
+struct ParoleDiscPrivate
+{
+ GVolumeMonitor *monitor;
+ GPtrArray *array;
+ GtkWidget *media_menu;
+
+ gboolean needs_update;
+};
+
+enum
+{
+ DISC_SELECTED,
+ LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (ParoleDisc, parole_disc, G_TYPE_OBJECT)
+
+typedef struct
+{
+ GtkWidget *mi;
+ gchar *uri; /*Freed in (GDestroyNotify) in the data set below*/
+ ParoleDiscKind kind;
+
+} MountData;
+
+static void
+parole_disc_media_activate_cb (GtkWidget *widget, ParoleDisc *disc)
+{
+ gchar *uri ;
+
+ uri = g_object_get_data (G_OBJECT (widget), "uri");
+
+ g_signal_emit (G_OBJECT (disc), signals [DISC_SELECTED], 0, uri);
+}
+
+static void
+parole_disc_add_mount_to_menu (ParoleDisc *disc, GMount *mount)
+{
+ MountData *data;
+ GFile *file;
+ gchar **content_type;
+ guint i;
+
+ file = g_mount_get_root (mount);
+
+ data = g_new0 (MountData, 1);
+ data->kind = PAROLE_DISC_UNKNOWN;
+
+ content_type = g_content_type_guess_for_tree (file);
+
+ for ( i = 0; content_type && content_type[i]; i++)
+ {
+ if ( !g_strcmp0 (content_type[i], "x-content/video-dvd") )
+ {
+ data->kind = PAROLE_DISC_DVD;
+ data->uri = g_strdup ("dvd:/");
+ break;
+ }
+ else if ( !g_strcmp0 (content_type[i], "x-content/video-vcd") )
+ {
+ data->kind = PAROLE_DISC_VCD;
+ data->uri = g_strdup ("vcd:/");
+ break;
+ }
+ else if ( !g_strcmp0 (content_type[i], "x-content/video-svcd") )
+ {
+ data->kind = PAROLE_DISC_SVCD;
+ data->uri = g_strdup ("svcd:/");
+ break;
+ }
+ else if ( !g_strcmp0 (content_type[i], "x-content/audio-cdda") )
+ {
+ data->kind = PAROLE_DISC_CDDA;
+ data->uri = g_strdup ("cdda:/");
+ break;
+ }
+ }
+
+ if ( content_type )
+ g_strfreev (content_type);
+
+ if ( data->kind != PAROLE_DISC_UNKNOWN )
+ {
+ GtkWidget *img;
+ gchar *name;
+ gchar *label;
+ name = g_mount_get_name (mount);
+ label = g_strdup_printf ("%s %s", _("Play Disc"), name);
+
+ data->mi = gtk_image_menu_item_new_with_label (label);
+
+ img = gtk_image_new_from_stock (GTK_STOCK_CDROM, GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (data->mi),
+ img);
+ gtk_widget_show (data->mi);
+ gtk_widget_show (img);
+
+ g_object_set_data_full (G_OBJECT (data->mi),
+ "uri", data->uri,
+ (GDestroyNotify) g_free);
+
+ gtk_menu_shell_insert (GTK_MENU_SHELL (disc->priv->media_menu), data->mi, 3);
+ g_signal_connect (data->mi, "activate",
+ G_CALLBACK (parole_disc_media_activate_cb), disc);
+ g_free (label);
+ g_free (name);
+ g_ptr_array_add (disc->priv->array, data);
+ }
+ else
+ g_free (data);
+}
+
+static void
+parole_disc_add_drive (ParoleDisc *disc, GDrive *drive)
+{
+ GList *list;
+ guint len;
+ guint i;
+
+ list = g_drive_get_volumes (drive);
+ len = g_list_length (list);
+
+ for ( i = 0; i < len; i++)
+ {
+ GVolume *volume;
+ GMount *mount;
+
+ volume = g_list_nth_data (list, i);
+ mount = g_volume_get_mount (volume);
+ if ( mount )
+ {
+ parole_disc_add_mount_to_menu (disc, mount);
+ }
+ }
+
+ g_list_foreach (list, (GFunc) g_object_unref, NULL);
+ g_list_free (list);
+}
+
+static void
+parole_disc_get_drives (ParoleDisc *disc)
+{
+ GList *list;
+ guint len;
+ guint i;
+
+ list = g_volume_monitor_get_connected_drives (disc->priv->monitor);
+
+ len = g_list_length (list);
+
+ for ( i = 0; i < len; i++)
+ {
+ GDrive *drive;
+ drive = g_list_nth_data (list, i);
+ if ( g_drive_can_eject (drive) )
+ parole_disc_add_drive (disc, drive);
+ }
+
+ g_list_foreach (list, (GFunc) g_object_unref, NULL);
+ g_list_free (list);
+ disc->priv->needs_update = FALSE;
+}
+
+static void
+parole_disc_select_cb (GtkItem *item, ParoleDisc *disc)
+{
+ if ( disc->priv->needs_update )
+ parole_disc_get_drives (disc);
+}
+
+static void
+parole_disc_monitor_changed_cb (GVolumeMonitor *monitor, gpointer *device, ParoleDisc *disc)
+{
+ guint i;
+
+ for ( i = 0 ; i < disc->priv->array->len; i++)
+ {
+ MountData *data;
+
+ data = g_ptr_array_index (disc->priv->array, i);
+ gtk_widget_destroy (data->mi);
+ g_ptr_array_remove_index (disc->priv->array, i);
+ g_free (data);
+ }
+
+ disc->priv->needs_update = TRUE;
+}
+
+static void
+parole_disc_class_init (ParoleDiscClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ signals[DISC_SELECTED] =
+ g_signal_new ("disc-selected",
+ PAROLE_TYPE_DISC,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ParoleDiscClass, disc_selected),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ object_class->finalize = parole_disc_finalize;
+
+ g_type_class_add_private (klass, sizeof (ParoleDiscPrivate));
+}
+
+static void
+parole_disc_init (ParoleDisc *disc)
+{
+ GtkBuilder *builder;
+
+ disc->priv = PAROLE_DISC_GET_PRIVATE (disc);
+
+ builder = parole_builder_get_main_interface ();
+
+ disc->priv->array = g_ptr_array_new ();
+ disc->priv->needs_update = TRUE;
+
+ disc->priv->monitor = g_volume_monitor_get ();
+
+ g_signal_connect (G_OBJECT (disc->priv->monitor), "volume-added",
+ G_CALLBACK (parole_disc_monitor_changed_cb), disc);
+
+ g_signal_connect (G_OBJECT (disc->priv->monitor), "volume-removed",
+ G_CALLBACK (parole_disc_monitor_changed_cb), disc);
+
+ g_signal_connect (G_OBJECT (disc->priv->monitor), "mount-added",
+ G_CALLBACK (parole_disc_monitor_changed_cb), disc);
+
+ g_signal_connect (G_OBJECT (disc->priv->monitor), "mount-removed",
+ G_CALLBACK (parole_disc_monitor_changed_cb), disc);
+
+ disc->priv->media_menu = GTK_WIDGET (gtk_builder_get_object (builder, "media-menu"));
+
+ g_signal_connect (gtk_builder_get_object (builder, "media-menu-item"), "select",
+ G_CALLBACK (parole_disc_select_cb), disc);
+
+ g_object_unref (builder);
+}
+
+static void
+parole_disc_finalize (GObject *object)
+{
+ ParoleDisc *disc;
+
+ disc = PAROLE_DISC (object);
+
+ g_object_unref (disc->priv->monitor);
+
+ g_ptr_array_foreach (disc->priv->array, (GFunc) g_free, NULL);
+ g_ptr_array_free (disc->priv->array, TRUE);
+
+ G_OBJECT_CLASS (parole_disc_parent_class)->finalize (object);
+}
+
+ParoleDisc *
+parole_disc_new (void)
+{
+ ParoleDisc *disc = NULL;
+ disc = g_object_new (PAROLE_TYPE_DISC, NULL);
+ return disc;
+}
Added: parole/trunk/parole/parole-disc.h
===================================================================
--- parole/trunk/parole/parole-disc.h (rev 0)
+++ parole/trunk/parole/parole-disc.h 2009-07-18 23:08:55 UTC (rev 7740)
@@ -0,0 +1,66 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __PAROLE_DISC_H
+#define __PAROLE_DISC_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PAROLE_TYPE_DISC (parole_disc_get_type () )
+#define PAROLE_DISC(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_DISC, ParoleDisc))
+#define PAROLE_IS_DISC(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_DISC))
+
+typedef struct ParoleDiscPrivate ParoleDiscPrivate;
+
+typedef enum
+{
+ PAROLE_DISC_UNKNOWN,
+ PAROLE_DISC_CDDA,
+ PAROLE_DISC_VCD,
+ PAROLE_DISC_SVCD,
+ PAROLE_DISC_DVD
+
+} ParoleDiscKind;
+
+typedef struct
+{
+ GObject parent;
+ ParoleDiscPrivate *priv;
+
+} ParoleDisc;
+
+typedef struct
+{
+ GObjectClass parent_class;
+
+ void (*disc_selected) (ParoleDisc *disc,
+ const gchar *uri);
+
+} ParoleDiscClass;
+
+GType parole_disc_get_type (void) G_GNUC_CONST;
+
+ParoleDisc *parole_disc_new (void);
+
+G_END_DECLS
+
+#endif /* __PAROLE_DISC_H */
Modified: parole/trunk/parole/parole-gst.c
===================================================================
--- parole/trunk/parole/parole-gst.c 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/parole/parole-gst.c 2009-07-18 23:08:55 UTC (rev 7740)
@@ -30,6 +30,7 @@
#include <gst/gst.h>
#include <gst/interfaces/xoverlay.h>
+#include <gst/interfaces/navigation.h>
#include <libxfce4util/libxfce4util.h>
#include <libxfcegui4/libxfcegui4.h>
@@ -429,8 +430,7 @@
static void
parole_gst_load_subtitle (ParoleGst *gst)
{
- ParoleMediaFile *file;
- const gchar *uri;
+ gchar *uri;
gchar *sub;
gchar *sub_uri;
gboolean sub_enabled;
@@ -443,10 +443,9 @@
return;
g_object_get (G_OBJECT (gst->priv->stream),
- "media-file", &file,
+ "uri", &uri,
NULL);
- uri = parole_media_file_get_uri (file);
sub = parole_get_subtitle_path (uri);
if ( sub )
@@ -459,7 +458,7 @@
g_free (sub);
g_free (sub_uri);
}
- g_object_unref (file);
+ g_free (uri);
}
static void
@@ -797,7 +796,7 @@
static void
parole_gst_play_file_internal (ParoleGst *gst)
{
- ParoleMediaFile *file;
+ gchar *uri;
TRACE ("Start");
@@ -807,18 +806,18 @@
}
g_object_get (G_OBJECT (gst->priv->stream),
- "media-file", &file,
+ "uri", &uri,
NULL);
g_object_set (G_OBJECT (gst->priv->playbin),
- "uri", parole_media_file_get_uri (file),
+ "uri", uri,
"suburi", NULL,
NULL);
parole_gst_load_subtitle (gst);
parole_gst_change_state (gst, GST_STATE_PLAYING);
- g_object_unref (file);
+ g_free (uri);
}
static void
@@ -890,6 +889,60 @@
return ret;
}
+static gboolean
+parole_gst_button_press_event (GtkWidget *widget, GdkEventButton *ev)
+{
+ ParoleGst *gst;
+ GstNavigation *nav;
+ gboolean playing_video;
+ gboolean ret = FALSE;
+
+ gst = PAROLE_GST (widget);
+
+ g_object_get (G_OBJECT (gst->priv->stream),
+ "has-video", &playing_video,
+ NULL);
+
+ if ( gst->priv->state == GST_STATE_PLAYING && playing_video)
+ {
+ nav = GST_NAVIGATION (gst->priv->video_sink);
+ gst_navigation_send_mouse_event (nav, "mouse-button-press", ev->button, ev->x, ev->y);
+ ret = TRUE;
+ }
+
+ if (GTK_WIDGET_CLASS (parole_gst_parent_class)->button_press_event)
+ ret |= GTK_WIDGET_CLASS (parole_gst_parent_class)->button_press_event (widget, ev);
+
+ return ret;
+}
+
+static gboolean
+parole_gst_button_release_event (GtkWidget *widget, GdkEventButton *ev)
+{
+ ParoleGst *gst;
+ GstNavigation *nav;
+ gboolean playing_video;
+ gboolean ret = FALSE;
+
+ gst = PAROLE_GST (widget);
+
+ g_object_get (G_OBJECT (gst->priv->stream),
+ "has-video", &playing_video,
+ NULL);
+
+ if ( gst->priv->state == GST_STATE_PLAYING && playing_video)
+ {
+ nav = GST_NAVIGATION (gst->priv->video_sink);
+ gst_navigation_send_mouse_event (nav, "mouse-button-release", ev->button, ev->x, ev->y);
+ ret = TRUE;
+ }
+
+ if (GTK_WIDGET_CLASS (parole_gst_parent_class)->button_release_event)
+ ret |= GTK_WIDGET_CLASS (parole_gst_parent_class)->button_release_event (widget, ev);
+
+ return ret;
+}
+
static void
parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
{
@@ -915,6 +968,8 @@
widget_class->size_allocate = parole_gst_size_allocate;
widget_class->expose_event = parole_gst_expose_event;
widget_class->motion_notify_event = parole_gst_motion_notify_event;
+ widget_class->button_press_event = parole_gst_button_press_event;
+ widget_class->button_release_event = parole_gst_button_release_event;
signals[MEDIA_STATE] =
g_signal_new ("media-state",
@@ -1015,7 +1070,7 @@
return GTK_WIDGET (parole_gst_object);
}
-void parole_gst_play_file (ParoleGst *gst, ParoleMediaFile *file)
+void parole_gst_play_uri (ParoleGst *gst, const gchar *uri)
{
g_mutex_lock (gst->priv->lock);
@@ -1024,7 +1079,7 @@
parole_stream_init_properties (gst->priv->stream);
g_object_set (G_OBJECT (gst->priv->stream),
- "media-file", g_object_ref (file),
+ "uri", uri,
NULL);
g_mutex_unlock (gst->priv->lock);
Modified: parole/trunk/parole/parole-gst.h
===================================================================
--- parole/trunk/parole/parole-gst.h 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/parole/parole-gst.h 2009-07-18 23:08:55 UTC (rev 7740)
@@ -25,7 +25,6 @@
#include <gtk/gtk.h>
#include "parole-stream.h"
-#include "parole-mediafile.h"
G_BEGIN_DECLS
@@ -80,10 +79,11 @@
} ParoleGstClass;
GType parole_gst_get_type (void) G_GNUC_CONST;
+
GtkWidget *parole_gst_new (void);
-void parole_gst_play_file (ParoleGst *gst,
- ParoleMediaFile *file);
+void parole_gst_play_uri (ParoleGst *gst,
+ const gchar *uri);
void parole_gst_pause (ParoleGst *gst);
Modified: parole/trunk/parole/parole-player.c
===================================================================
--- parole/trunk/parole/parole-player.c 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/parole/parole-player.c 2009-07-18 23:08:55 UTC (rev 7740)
@@ -40,6 +40,7 @@
#include "parole-gst.h"
#include "parole-mediachooser.h"
#include "parole-mediafile.h"
+#include "parole-disc.h"
#include "parole-statusbar.h"
#include "parole-screensaver.h"
#include "parole-conf-dialog.h"
@@ -119,6 +120,7 @@
{
ParoleMediaList *list;
ParoleStatusbar *status;
+ ParoleDisc *disc;
ParoleScreenSaver *screen_saver;
ParoleSidebar *sidebar;
@@ -197,12 +199,8 @@
}
static void
-parole_player_media_activated_cb (ParoleMediaList *list, GtkTreeRowReference *row, ParolePlayer *player)
+parole_player_reset (ParolePlayer *player)
{
- ParoleMediaFile *file;
- GtkTreeIter iter;
- GtkTreeModel *model;
-
parole_player_change_range_value (player, 0);
if ( player->priv->row )
@@ -211,6 +209,16 @@
gtk_tree_row_reference_free (player->priv->row);
player->priv->row = NULL;
}
+}
+
+static void
+parole_player_media_activated_cb (ParoleMediaList *list, GtkTreeRowReference *row, ParolePlayer *player)
+{
+ ParoleMediaFile *file;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ parole_player_reset (player);
player->priv->row = row;
model = gtk_tree_row_reference_get_model (row);
@@ -223,13 +231,20 @@
{
TRACE ("Trying to play media file %s", parole_media_file_get_uri (file));
gtk_widget_set_sensitive (player->priv->stop, TRUE);
- parole_gst_play_file (PAROLE_GST (player->priv->gst), file);
+ parole_gst_play_uri (PAROLE_GST (player->priv->gst), parole_media_file_get_uri (file));
g_object_unref (file);
}
}
}
static void
+parole_player_disc_selected_cb (ParoleDisc *disc, const gchar *uri, ParolePlayer *player)
+{
+ parole_player_reset (player);
+ parole_gst_play_uri (PAROLE_GST (player->priv->gst), uri);
+}
+
+static void
parole_player_media_cursor_changed_cb (ParoleMediaList *list, gboolean media_selected, ParolePlayer *player)
{
if (!player->priv->state != PAROLE_MEDIA_STATE_PLAYING)
@@ -823,6 +838,7 @@
g_object_unref (player->priv->gst);
g_object_unref (player->priv->status);
+ g_object_unref (player->priv->disc);
g_object_unref (player->priv->screen_saver);
g_object_unref (player->priv->sidebar);
@@ -867,8 +883,13 @@
* so we ref it to clean up the gst objects before quitting.
*/
g_object_ref (player->priv->gst);
+
player->priv->sidebar = parole_sidebar_new ();
player->priv->status = parole_statusbar_new ();
+ player->priv->disc = parole_disc_new ();
+ g_signal_connect (player->priv->disc, "disc-selected",
+ G_CALLBACK (parole_player_disc_selected_cb), player);
+
player->priv->screen_saver = parole_screen_saver_new ();
player->priv->list = PAROLE_MEDIA_LIST (parole_media_list_new ());
Modified: parole/trunk/parole/parole-stream.c
===================================================================
--- parole/trunk/parole/parole-stream.c 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/parole/parole-stream.c 2009-07-18 23:08:55 UTC (rev 7740)
@@ -48,8 +48,7 @@
struct _ParoleStreamPrivate
{
/*Properties*/
- gpointer media_file;
-
+ gchar *uri;
gboolean has_audio;
gboolean has_video;
gboolean live;
@@ -67,7 +66,7 @@
enum
{
PROP_0,
- PROP_MEDIA_FILE,
+ PROP_URI,
PROP_LIVE,
PROP_HAS_AUDIO,
PROP_HAS_VIDEO,
@@ -93,6 +92,9 @@
switch (prop_id)
{
+ case PROP_URI:
+ PAROLE_STREAM_GET_PRIVATE (stream)->uri = g_value_dup_string (value);
+ break;
case PROP_LIVE:
PAROLE_STREAM_GET_PRIVATE (stream)->live = g_value_get_boolean (value);
break;
@@ -102,9 +104,6 @@
case PROP_HAS_VIDEO:
PAROLE_STREAM_GET_PRIVATE (stream)->has_video = g_value_get_boolean (value);
break;
- case PROP_MEDIA_FILE:
- PAROLE_STREAM_GET_PRIVATE (stream)->media_file = g_value_get_object (value);
- break;
case PROP_SEEKABLE:
PAROLE_STREAM_GET_PRIVATE (stream)->seekable = g_value_get_boolean (value);
break;
@@ -145,6 +144,9 @@
switch (prop_id)
{
+ case PROP_URI:
+ g_value_set_string (value, PAROLE_STREAM_GET_PRIVATE (stream)->uri);
+ break;
case PROP_LIVE:
g_value_set_boolean (value, PAROLE_STREAM_GET_PRIVATE (stream)->live);
break;
@@ -154,9 +156,6 @@
case PROP_HAS_VIDEO:
g_value_set_boolean (value, PAROLE_STREAM_GET_PRIVATE (stream)->has_video);
break;
- case PROP_MEDIA_FILE:
- g_value_set_object (value, PAROLE_STREAM_GET_PRIVATE (stream)->media_file);
- break;
case PROP_SEEKABLE:
g_value_set_boolean (value, PAROLE_STREAM_GET_PRIVATE (stream)->seekable);
break;
@@ -191,14 +190,11 @@
parole_stream_finalize (GObject *object)
{
ParoleStream *stream;
- ParoleStreamPrivate *priv;
stream = PAROLE_STREAM (object);
- priv = PAROLE_STREAM_GET_PRIVATE (stream);
+
+ parole_stream_init_properties (stream);
- if ( priv->media_file )
- g_object_unref (priv->media_file);
-
G_OBJECT_CLASS (parole_stream_parent_class)->finalize (object);
}
@@ -213,17 +209,17 @@
object_class->set_property = parole_stream_set_property;
/**
- * ParoleStream:media-file:
+ * ParoleStream:uri:
*
- * Currently playing #ParoleMediaFile.
+ * Currently loaded uri.
*
* Since: 0.1
**/
g_object_class_install_property (object_class,
- PROP_MEDIA_FILE,
- g_param_spec_object ("media-file",
+ PROP_URI,
+ g_param_spec_string ("uri",
NULL, NULL,
- PAROLE_TYPE_MEDIA_FILE,
+ NULL,
G_PARAM_READWRITE));
/**
@@ -389,10 +385,6 @@
static void
parole_stream_init (ParoleStream *stream)
{
- ParoleStreamPrivate *priv;
- priv = PAROLE_STREAM_GET_PRIVATE (stream);
-
- priv->media_file = NULL;
parole_stream_init_properties (stream);
}
@@ -409,6 +401,7 @@
ParoleStreamPrivate *priv;
priv = PAROLE_STREAM_GET_PRIVATE (stream);
+
priv->live = FALSE;
priv->seekable = FALSE;
priv->has_audio = FALSE;
@@ -416,14 +409,10 @@
priv->absolute_duration = 0;
priv->duration = 0;
- if ( priv->media_file )
- g_object_unref (priv->media_file);
-
PAROLE_STREAM_FREE_STR_PROP (priv->title);
+ PAROLE_STREAM_FREE_STR_PROP (priv->uri);
PAROLE_STREAM_FREE_STR_PROP (priv->artist);
PAROLE_STREAM_FREE_STR_PROP (priv->year);
PAROLE_STREAM_FREE_STR_PROP (priv->album);
PAROLE_STREAM_FREE_STR_PROP (priv->comment);
-
- priv->media_file = NULL;
}
Modified: parole/trunk/po/parole-media-player.pot
===================================================================
--- parole/trunk/po/parole-media-player.pot 2009-07-17 23:15:44 UTC (rev 7739)
+++ parole/trunk/po/parole-media-player.pot 2009-07-18 23:08:55 UTC (rev 7740)
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-16 16:57+0200\n"
+"POT-Creation-Date: 2009-07-19 00:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -104,7 +104,7 @@
msgid "gtk-help"
msgstr ""
-#: ../data/desktop/parole.desktop.in.in.h:1 ../parole/parole-player.c:156
+#: ../data/desktop/parole.desktop.in.in.h:1 ../parole/parole-player.c:158
msgid "Parole Media Player"
msgstr ""
@@ -121,16 +121,16 @@
msgid "Type '%s --help' for usage."
msgstr ""
-#: ../parole/parole-gst.c:787
+#: ../parole/parole-gst.c:786
msgid "Error in changing state to ready"
msgstr ""
-#: ../parole/parole-gst.c:836
+#: ../parole/parole-gst.c:835
msgid ""
"Unable to load playbin GStreamer plugin, check your GStreamer installation"
msgstr ""
-#: ../parole/parole-gst.c:851
+#: ../parole/parole-gst.c:850
msgid ""
"Unable to load video GStreamer plugin, check your GStreamer installation"
msgstr ""
@@ -155,32 +155,32 @@
msgid "Media list"
msgstr ""
-#: ../parole/parole-player.c:177
+#: ../parole/parole-player.c:179
msgid "Hide playlist"
msgstr ""
-#: ../parole/parole-player.c:186
+#: ../parole/parole-player.c:188
msgid "Show playlist"
msgstr ""
-#: ../parole/parole-player.c:319 ../parole/parole-statusbar.c:126
-#: ../parole/parole-statusbar.c:128
+#: ../parole/parole-player.c:334 ../parole/parole-statusbar.c:131
+#: ../parole/parole-statusbar.c:133
msgid "Playing"
msgstr ""
-#: ../parole/parole-player.c:320
+#: ../parole/parole-player.c:335
msgid "Media stream is not seekable"
msgstr ""
-#: ../parole/parole-player.c:338 ../parole/parole-player.c:351
+#: ../parole/parole-player.c:353 ../parole/parole-player.c:366
msgid "Paused"
msgstr ""
-#: ../parole/parole-player.c:369
+#: ../parole/parole-player.c:384
msgid "Stopped"
msgstr ""
-#: ../parole/parole-player.c:931
+#: ../parole/parole-player.c:952
msgid "Playlist"
msgstr ""
@@ -197,7 +197,7 @@
"</b>"
msgstr ""
-#: ../parole/parole-statusbar.c:138
+#: ../parole/parole-statusbar.c:143
msgid "Buffering"
msgstr ""
More information about the Goodies-commits
mailing list