Updating branch refs/heads/master
         to dd33007064166e4b910e7e95172ae2bf3650b3b1 (commit)
       from acc3fc53c611bda9c9a8d0c00fcff9ab38896036 (commit)

commit dd33007064166e4b910e7e95172ae2bf3650b3b1
Author: Ali Abdallah <al...@xfce.org>
Date:   Tue Dec 1 13:23:59 2009 +0100

    Update the API doc+fix the time in the tray plugin.

 docs/plugin-api/Makefile.am                      |    3 +-
 docs/plugin-api/Parole-Plugins-docs.sgml         |    6 +-
 docs/plugin-api/Parole-Plugins-sections.txt      |    3 +-
 docs/plugin-api/parole-plugins-tut.sgml          |  142 +++++++++++
 docs/plugin-api/tmpl/Parole-Plugins-unused.sgml  |  185 ++++++++++++++
 docs/plugin-api/tmpl/parole-filters.sgml         |   19 --
 docs/plugin-api/tmpl/parole-pl-parser.sgml       |    9 +
 docs/plugin-api/tmpl/parole-provider-player.sgml |    4 +-
 docs/plugin-api/tmpl/parole-provider-plugin.sgml |    7 +-
 docs/plugin-api/tmpl/parole-stream.sgml          |    5 +-
 parole/parole-filters.c                          |   68 +++++-
 parole/parole-filters.h                          |   11 -
 parole/parole-pl-parser.c                        |  288 +++++++++++++--------
 parole/parole-pl-parser.h                        |    2 +
 parole/parole-provider-player.c                  |   63 ++++-
 parole/parole-provider-plugin.c                  |    2 +
 parole/parole.h.in                               |    2 +
 plugins/sample/sample-plugin.c                   |    2 +-
 plugins/sample/sample-provider.c                 |    2 -
 plugins/tray/tray-provider.c                     |   22 ++-
 20 files changed, 671 insertions(+), 174 deletions(-)

diff --git a/docs/plugin-api/Makefile.am b/docs/plugin-api/Makefile.am
index 88be230..0ea1d96 100644
--- a/docs/plugin-api/Makefile.am
+++ b/docs/plugin-api/Makefile.am
@@ -55,7 +55,8 @@ HTML_IMAGES=
 # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
 # e.g. content_files=running.sgml building.sgml changes-2.0.sgml
 content_files=                         \
-       version.xml
+       version.xml             \
+       parole-plugins-tut.sgml
 
 # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
 # Only needed if you are using gtkdoc-scangobj to dynamically query widget
diff --git a/docs/plugin-api/Parole-Plugins-docs.sgml 
b/docs/plugin-api/Parole-Plugins-docs.sgml
index 7fb9374..55baf32 100644
--- a/docs/plugin-api/Parole-Plugins-docs.sgml
+++ b/docs/plugin-api/Parole-Plugins-docs.sgml
@@ -4,6 +4,7 @@
 [
   <!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 
'http://www.w3.org/2003/XInclude'">
   <!ENTITY version SYSTEM "version.xml">
+  <!ENTITY plugin-tut SYSTEM "parole-plugins-tut.sgml">
   <!ENTITY date "July 2009">
 ]>
 <book id="index">
@@ -42,8 +43,9 @@
     </para>
   </part>
   
-  <part id="tutorial">
-    <title>Plugin tutorial</title>
+  <part id="parole-plugins-tut">
+  <title>Parole Plugin Tutorial</title>
+    &plugin-tut;
   </part>
   
   <part id="fundamentals">
diff --git a/docs/plugin-api/Parole-Plugins-sections.txt 
b/docs/plugin-api/Parole-Plugins-sections.txt
index f0e1f1a..dc2e22d 100644
--- a/docs/plugin-api/Parole-Plugins-sections.txt
+++ b/docs/plugin-api/Parole-Plugins-sections.txt
@@ -83,6 +83,7 @@ PAROLE_ENUM_TYPE_PL_FORMAT
 <FILE>parole-pl-parser</FILE>
 ParolePlFormat
 parole_pl_parser_guess_format_from_extension
+parole_pl_parser_guess_format_from_data
 parole_pl_parser_can_parse_data
 parole_pl_parser_parse_from_file_by_extension
 parole_pl_parser_parse_all_from_file
@@ -109,14 +110,12 @@ PAROLE_IMPLEMENT_INTERFACE
 
 <SECTION>
 <FILE>parole-filters</FILE>
-ParoleFileFormat
 parole_get_supported_audio_filter
 parole_get_supported_video_filter
 parole_get_supported_media_filter
 parole_get_supported_files_filter
 parole_get_supported_playlist_filter
 parole_file_filter
-parole_file_guess_format
 </SECTION>
 
 <SECTION>
diff --git a/docs/plugin-api/parole-plugins-tut.sgml 
b/docs/plugin-api/parole-plugins-tut.sgml
new file mode 100644
index 0000000..a33959c
--- /dev/null
+++ b/docs/plugin-api/parole-plugins-tut.sgml
@@ -0,0 +1,142 @@
+
+    <para>
+       This section explains the steps required to write a plugin for Parole 
using
+       the C language interface.
+    </para>
+    
+    <para>
+       A simple example can be found in the parole plugins dir shipped with 
the source code, the sample
+       plugin.
+    </para>
+    <para>
+       As a basics, the plugin needs to implement <link 
linkend="ParoleProviderPlugin"><type>ParoleProviderPlugin</type></link>
+       interface, That is, the player use this interface to get if the plugin 
is configurable, to ask it to show
+       its properties dialog when needed, to set the <link 
linkend="ParoleProviderPlayer"><type>ParoleProviderPlayer</type></link>
+       interface used by plugins to access the the Parole player backend.
+    </para>
+    
+
+  <sect1>
+    <title>Plugin structure.</title>
+    sample-plugin.c
+    <programlisting>
+ 
+#include "sample-provider.h"
+    
+/* Avoid a no previous function declaration compiler warning*/
+G_MODULE_EXPORT GType  parole_plugin_initialize (ParoleProviderPlugin *plugin);
+G_MODULE_EXPORT void   parole_plugin_shutdown   (void);
+
+G_MODULE_EXPORT GType
+parole_plugin_initialize (ParoleProviderPlugin *plugin)
+{
+    xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+    sample_provider_register_type (plugin);
+    return SAMPLE_TYPE_PROVIDER;
+}
+
+G_MODULE_EXPORT void
+parole_plugin_shutdown (void)
+{
+    
+}
+    </programlisting>
+    
+    sample-provider.h
+    <programlisting>
+#ifndef SAMPLE_PROVIDER_H_
+#define SAMPLE_PROVIDER_H_
+
+#include &lt;parole/parole.h&gt;
+
+G_BEGIN_DECLS
+
+typedef struct _SampleProviderClass SampleProviderClass;
+typedef struct _SampleProvider      SampleProvider;
+
+#define SAMPLE_TYPE_PROVIDER             (sample_provider_get_type ())
+#define SAMPLE_PROVIDER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
SAMPLE_TYPE_PROVIDER, SampleProvider))
+#define SAMPLE_PROVIDER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), 
SAMPLE_TYPE_PROVIDER, SampleProviderClass))
+#define SAMPLE_IS_PROVIDER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
SAMPLE_TYPE_PROVIDER))
+#define SAMPLE_IS_PROVIDER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), 
SAMPLE_TYPE_PROVIDER))
+#define SAMPLE_PROVIDER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), 
SAMPLE_TYPE_PROVIDER, SampleProviderClass))
+
+GType sample_provider_get_type         (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+void  sample_provider_register_type    (ParoleProviderPlugin *plugin);
+
+G_END_DECLS
+    </programlisting>
+    
+    sample-provider.c
+    <programlisting>
+
+#include "sample-provider.h"
+
+static void   sample_provider_iface_init          (ParoleProviderPluginIface 
*iface);
+static void   sample_provider_finalize             (GObject                  
*object);
+
+
+struct _SampleProviderClass
+{
+    GObjectClass parent_class;
+};
+
+struct _SampleProvider
+{
+    GObject      parent;
+    ParoleProviderPlayer *player;
+};
+
+PAROLE_DEFINE_TYPE_WITH_CODE (SampleProvider, 
+                             sample_provider, 
+                             G_TYPE_OBJECT,
+                             PAROLE_IMPLEMENT_INTERFACE 
(PAROLE_TYPE_PROVIDER_PLUGIN, 
+                                                         
sample_provider_iface_init));
+               
+static void  sample_provider_configure (ParoleProviderPlugin *provider, 
GtkWidget *parent)
+{
+    /*Open the configuration dialog, parent is the window transient for*/
+}
+
+static gboolean sample_provider_is_configurable (ParoleProviderPlugin *plugin)
+{
+    return TRUE; /*Returns FALSE and don't override the iface->configure 
function*/
+}
+
+static void
+sample_provider_set_player (ParoleProviderPlugin *plugin, ParoleProviderPlayer 
*player)
+{
+    SampleProvider *provider;
+    provider = SAMPLE_PROVIDER (plugin);
+    
+    provider->player = player;
+}
+
+static void
+sample_provider_iface_init (ParoleProviderPluginIface *iface)
+{
+    iface->get_is_configurable = sample_provider_is_configurable;
+    iface->configure = sample_provider_configure;
+    iface->set_player = sample_provider_set_player;
+}
+
+static void sample_provider_class_init (SampleProviderClass *klass)
+{
+    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+    
+    gobject_class->finalize = sample_provider_finalize;
+}
+
+static void sample_provider_init (SampleProvider *provider)
+{
+    provider->player = NULL;
+}
+
+static void sample_provider_finalize (GObject *object)
+{
+    G_OBJECT_CLASS (sample_provider_parent_class)->finalize (object);
+}    
+    </programlisting>
+    
+  </sect1>
diff --git a/docs/plugin-api/tmpl/Parole-Plugins-unused.sgml 
b/docs/plugin-api/tmpl/Parole-Plugins-unused.sgml
index e69de29..abec82b 100644
--- a/docs/plugin-api/tmpl/Parole-Plugins-unused.sgml
+++ b/docs/plugin-api/tmpl/Parole-Plugins-unused.sgml
@@ -0,0 +1,185 @@
+<!-- ##### SECTION ./tmpl/parole-plugins.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/parole-plugins.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/parole-plugins.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/parole-plugins.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/parole-plugins.sgml:Title ##### -->
+Parole Plugin Tutorial
+
+    <para>
+       This section explains the steps required to write a plugin for Parole 
using
+       the C language interface.
+    </para>
+    
+    <para>
+       A simple example can be found in the parole plugins dir shipped with 
the source code, the sample
+       plugin.
+    </para>
+    <para>
+       As a basics, the plugin needs to implement <link 
linkend="ParoleProviderPlugin"><type>ParoleProviderPlugin</type></link>
+       interface, That is, the player use this interface to get if the plugin 
is configurable, to ask it to show
+       its properties dialog when needed, to set the <link 
linkend="ParoleProviderPlayer"><type>ParoleProviderPlayer</type></link>
+       interface used by plugins to access the the Parole player backend.
+    </para>
+    
+  <sect1 id="parole-plugin-strcuted">
+    <title>Plugin structure.</title>
+    sample-plugin.c
+    <programlisting>
+ 
+#include "sample-provider.h"
+    
+/* Avoid a no previous function declaration compiler warning*/
+G_MODULE_EXPORT GType  parole_plugin_initialize (ParoleProviderPlugin *plugin);
+G_MODULE_EXPORT void   parole_plugin_shutdown   (void);
+
+G_MODULE_EXPORT GType
+parole_plugin_initialize (ParoleProviderPlugin *plugin)
+{
+    xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+    sample_provider_register_type (plugin);
+    return SAMPLE_TYPE_PROVIDER;
+}
+
+G_MODULE_EXPORT void
+parole_plugin_shutdown (void)
+{
+    
+}
+    </programlisting>
+    
+    sample-provider.h
+    <programlisting>
+#ifndef SAMPLE_PROVIDER_H_
+#define SAMPLE_PROVIDER_H_
+
+#include &lt;parole/parole.h&gt;
+
+G_BEGIN_DECLS
+
+typedef struct _SampleProviderClass SampleProviderClass;
+typedef struct _SampleProvider      SampleProvider;
+
+#define SAMPLE_TYPE_PROVIDER             (sample_provider_get_type ())
+#define SAMPLE_PROVIDER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
SAMPLE_TYPE_PROVIDER, SampleProvider))
+#define SAMPLE_PROVIDER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), 
SAMPLE_TYPE_PROVIDER, SampleProviderClass))
+#define SAMPLE_IS_PROVIDER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
SAMPLE_TYPE_PROVIDER))
+#define SAMPLE_IS_PROVIDER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), 
SAMPLE_TYPE_PROVIDER))
+#define SAMPLE_PROVIDER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), 
SAMPLE_TYPE_PROVIDER, SampleProviderClass))
+
+GType sample_provider_get_type         (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+void  sample_provider_register_type    (ParoleProviderPlugin *plugin);
+
+G_END_DECLS
+    </programlisting>
+    
+    sample-provider.c
+    <programlisting>
+
+#include "sample-provider.h"
+
+static void   sample_provider_iface_init          (ParoleProviderPluginIface 
*iface);
+static void   sample_provider_finalize             (GObject                  
*object);
+
+
+struct _SampleProviderClass
+{
+    GObjectClass parent_class;
+};
+
+struct _SampleProvider
+{
+    GObject      parent;
+    ParoleProviderPlayer *player;
+};
+
+PAROLE_DEFINE_TYPE_WITH_CODE (SampleProvider, 
+                             sample_provider, 
+                             G_TYPE_OBJECT,
+                             PAROLE_IMPLEMENT_INTERFACE 
(PAROLE_TYPE_PROVIDER_PLUGIN, 
+                                                         
sample_provider_iface_init));
+               
+static void  sample_provider_configure (ParoleProviderPlugin *provider, 
GtkWidget *parent)
+{
+    /*Open the configuration dialog, parent is the window transient for*/
+}
+
+static gboolean sample_provider_is_configurable (ParoleProviderPlugin *plugin)
+{
+    return TRUE; /*Returns FALSE and don't override the iface->configure 
function*/
+}
+
+static void
+sample_provider_set_player (ParoleProviderPlugin *plugin, ParoleProviderPlayer 
*player)
+{
+    SampleProvider *provider;
+    provider = SAMPLE_PROVIDER (plugin);
+    
+    provider->player = player;
+}
+
+static void
+sample_provider_iface_init (ParoleProviderPluginIface *iface)
+{
+    iface->get_is_configurable = sample_provider_is_configurable;
+    iface->configure = sample_provider_configure;
+    iface->set_player = sample_provider_set_player;
+}
+
+static void sample_provider_class_init (SampleProviderClass *klass)
+{
+    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+    
+    gobject_class->finalize = sample_provider_finalize;
+}
+
+static void sample_provider_init (SampleProvider *provider)
+{
+    provider->player = NULL;
+}
+
+static void sample_provider_finalize (GObject *object)
+{
+    G_OBJECT_CLASS (sample_provider_parent_class)->finalize (object);
+}    
+    </programlisting>
+    
+  </sect1>
+    
+  </part>
+
+
+<!-- ##### ENUM ParoleFileFormat ##### -->
+<para>
+
+</para>
+
+...@parole_file_unknown: 
+...@parole_file_audio: 
+...@parole_file_video: 
+...@parole_file_playlist: 
+
+<!-- ##### FUNCTION parole_file_guess_format ##### -->
+<para>
+
+</para>
+
+...@file: 
+...@returns: 
+
diff --git a/docs/plugin-api/tmpl/parole-filters.sgml 
b/docs/plugin-api/tmpl/parole-filters.sgml
index b4f9d01..19706f0 100644
--- a/docs/plugin-api/tmpl/parole-filters.sgml
+++ b/docs/plugin-api/tmpl/parole-filters.sgml
@@ -17,16 +17,6 @@ Parole Filters
 <!-- ##### SECTION Stability_Level ##### -->
 
 
-<!-- ##### ENUM ParoleFileFormat ##### -->
-<para>
-
-</para>
-
-...@parole_file_unknown: 
-...@parole_file_audio: 
-...@parole_file_video: 
-...@parole_file_playlist: 
-
 <!-- ##### FUNCTION parole_get_supported_audio_filter ##### -->
 <para>
 
@@ -77,12 +67,3 @@ Parole Filters
 @Returns: 
 
 
-<!-- ##### FUNCTION parole_file_guess_format ##### -->
-<para>
-
-</para>
-
-...@file: 
-...@returns: 
-
-
diff --git a/docs/plugin-api/tmpl/parole-pl-parser.sgml 
b/docs/plugin-api/tmpl/parole-pl-parser.sgml
index 2295761..c9c2708 100644
--- a/docs/plugin-api/tmpl/parole-pl-parser.sgml
+++ b/docs/plugin-api/tmpl/parole-pl-parser.sgml
@@ -37,6 +37,15 @@ Parole Playlist Parser
 @Returns: 
 
 
+<!-- ##### FUNCTION parole_pl_parser_guess_format_from_data ##### -->
+<para>
+
+</para>
+
+...@filename: 
+...@returns: 
+
+
 <!-- ##### FUNCTION parole_pl_parser_can_parse_data ##### -->
 <para>
 
diff --git a/docs/plugin-api/tmpl/parole-provider-player.sgml 
b/docs/plugin-api/tmpl/parole-provider-player.sgml
index 37badd1..c038e96 100644
--- a/docs/plugin-api/tmpl/parole-provider-player.sgml
+++ b/docs/plugin-api/tmpl/parole-provider-player.sgml
@@ -6,7 +6,9 @@ The interface of the player.
 
 <!-- ##### SECTION Long_Description ##### -->
 <para>
-
+The player interface that the plugins should use in order to, issue playback 
+command to the Parole GStreamer backend or to get information about the current
+playback status.
 </para>
 
 <!-- ##### SECTION See_Also ##### -->
diff --git a/docs/plugin-api/tmpl/parole-provider-plugin.sgml 
b/docs/plugin-api/tmpl/parole-provider-plugin.sgml
index e06000a..0f1a36c 100644
--- a/docs/plugin-api/tmpl/parole-provider-plugin.sgml
+++ b/docs/plugin-api/tmpl/parole-provider-plugin.sgml
@@ -6,12 +6,15 @@ The interface of the plugin type registration.
 
 <!-- ##### SECTION Long_Description ##### -->
 <para>
-
+The methods of this interface should be overridden by the plugin, the Parole 
player
+calls these methods to determine if the plugin is configurable, to ask the 
plugin to
+open its configuration dialog or to set the #ParoleProviderPlayer that the 
plugin
+can use to get access to various functionalities of the player.
 </para>
 
 <!-- ##### SECTION See_Also ##### -->
 <para>
-
+#ParoleProviderPlayer.
 </para>
 
 <!-- ##### SECTION Stability_Level ##### -->
diff --git a/docs/plugin-api/tmpl/parole-stream.sgml 
b/docs/plugin-api/tmpl/parole-stream.sgml
index eea567a..b043df7 100644
--- a/docs/plugin-api/tmpl/parole-stream.sgml
+++ b/docs/plugin-api/tmpl/parole-stream.sgml
@@ -6,12 +6,15 @@ Currently playing stream.
 
 <!-- ##### SECTION Long_Description ##### -->
 <para>
+This object contains all the information describing the current processed 
stream
+by Parole, this object is used with the callback function the 
#ParoleProviderPlayerIface::state-changed
+signal of the player, the plugin shouldn't take reference and all the 
properties are read-only for the plugins.s
 
 </para>
 
 <!-- ##### SECTION See_Also ##### -->
 <para>
-
+#ParoleProviderPlayer
 </para>
 
 <!-- ##### SECTION Stability_Level ##### -->
diff --git a/parole/parole-filters.c b/parole/parole-filters.c
index cbfab27..e03b9f5 100644
--- a/parole/parole-filters.c
+++ b/parole/parole-filters.c
@@ -43,8 +43,16 @@ static char *playlist_mime_types[] = {
     "application/xspf+xml",
 };
 
-/*
- * Supported Audio formats.
+/**
+ * parole_get_supported_audio_filter:
+ * 
+ * 
+ * Get a #GtkFileFilter according to the supported
+ * Parole audio mime types.
+ * 
+ * Returns: A #GtkFileFilter for supported audio formats.
+ * 
+ * Since: 0.2
  */
 GtkFileFilter          *parole_get_supported_audio_filter      (void)
 {
@@ -61,8 +69,16 @@ GtkFileFilter                
*parole_get_supported_audio_filter      (void)
     return filter;
 }
 
-/*
- * Supported Video formats.
+/**
+ * parole_get_supported_video_filter:
+ * 
+ * 
+ * Get a #GtkFileFilter according to the supported
+ * Parole video mime types.
+ * 
+ * Returns: A #GtkFileFilter for supported video formats.
+ * 
+ * Since: 0.2
  */
 GtkFileFilter          *parole_get_supported_video_filter      (void)
 {
@@ -79,8 +95,15 @@ GtkFileFilter                
*parole_get_supported_video_filter      (void)
     return filter;
 }
 
-/*
- * Supported Audio And Video.
+/**
+ * parole_get_supported_media_filter:
+ * 
+ * Get a #GtkFileFilter according to the supported
+ * Parole media mime types, including audio and vide.
+ * 
+ * Returns: A #GtkFileFilter for supported media formats.
+ * 
+ * Since: 0.2
  */
 GtkFileFilter          *parole_get_supported_media_filter      (void)
 {
@@ -100,6 +123,17 @@ GtkFileFilter              
*parole_get_supported_media_filter      (void)
     return filter;
 }
 
+/**
+ * parole_get_supported_files_filter:
+ * 
+ * 
+ * Get a #GtkFileFilter according to the supported
+ * Parole files mime types, including audio/video/play list formats.
+ * 
+ * Returns: A #GtkFileFilter for supported files formats.
+ * 
+ * Since: 0.2
+ */
 GtkFileFilter *parole_get_supported_files_filter (void)
 {
     GtkFileFilter *filter;
@@ -116,6 +150,17 @@ GtkFileFilter *parole_get_supported_files_filter (void)
     
 }
 
+/**
+ * parole_get_supported_playlist_filter:
+ * 
+ * 
+ * Get a #GtkFileFilter according to the supported
+ * Parole play-list mime types.
+ * 
+ * Returns: A #GtkFileFilter for supported playlist formats.
+ * 
+ * Since: 0.2
+ */
 GtkFileFilter  *parole_get_supported_playlist_filter   (void)
 {
     GtkFileFilter *filter;
@@ -131,6 +176,17 @@ GtkFileFilter      *parole_get_supported_playlist_filter   
(void)
     return filter;
 }
 
+/**
+ * parole_file_filter:
+ * @filter: a #GtkFileFilter.
+ * @file: a #ParoleFile
+ * 
+ * Tests whether a file should be displayed according to filter
+ * 
+ * Returns: TRUE if the file should be displayed.
+ * 
+ * Since: 0.2
+ */
 gboolean parole_file_filter (GtkFileFilter *filter, ParoleFile *file)
 {
     GtkFileFilterInfo filter_info;
diff --git a/parole/parole-filters.h b/parole/parole-filters.h
index f23f18f..e7f8e6a 100644
--- a/parole/parole-filters.h
+++ b/parole/parole-filters.h
@@ -31,15 +31,6 @@
 
 G_BEGIN_DECLS
 
-typedef enum
-{
-    PAROLE_FILE_UNKNOWN,
-    PAROLE_FILE_AUDIO,
-    PAROLE_FILE_VIDEO,
-    PAROLE_FILE_PLAYLIST
-    
-} ParoleFileFormat;
-
 GtkFileFilter          *parole_get_supported_audio_filter      (void);
 
 GtkFileFilter          *parole_get_supported_video_filter      (void);
@@ -53,8 +44,6 @@ GtkFileFilter                 
*parole_get_supported_playlist_filter   (void);
 gboolean                parole_file_filter                     (GtkFileFilter 
*filter,
                                                                 ParoleFile 
*file);
 
-ParoleFileFormat        parole_file_guess_format               (ParoleFile 
*file);
-
 G_END_DECLS
 
 #endif /* PAROLE_FILTERS_H */
diff --git a/parole/parole-pl-parser.c b/parole/parole-pl-parser.c
index 905b8a3..1e1d2da 100644
--- a/parole/parole-pl-parser.c
+++ b/parole/parole-pl-parser.c
@@ -230,60 +230,6 @@ parole_asx_xml_end (GMarkupParseContext *context, const 
gchar *element_name,
     }
 }
 
-ParolePlFormat
-parole_pl_parser_guess_format_from_extension (const gchar *filename)
-{
-    if ( g_str_has_suffix (filename, ".m3u") || g_str_has_suffix (filename, 
".M3U") )
-       return PAROLE_PL_FORMAT_M3U;
-       
-    if ( g_str_has_suffix (filename, ".pls") || g_str_has_suffix (filename, 
".PLS") )
-       return PAROLE_PL_FORMAT_PLS;
-       
-    if ( g_str_has_suffix (filename, ".xspf") || g_str_has_suffix (filename, 
".XSPF") )
-       return PAROLE_PL_FORMAT_XSPF;
-       
-    if ( g_str_has_suffix (filename, ".asx") || g_str_has_suffix (filename, 
".ASX") )
-       return PAROLE_PL_FORMAT_ASX;
-       
-    if ( g_str_has_suffix (filename, ".wax") || g_str_has_suffix (filename, 
".WAX") )
-       return PAROLE_PL_FORMAT_XSPF;
-       
-    return PAROLE_PL_FORMAT_UNKNOWN;
-}
-
-static ParolePlFormat
-parole_pl_parser_guess_format_from_data (const gchar *filename)
-{
-    GFile *file;
-    gchar *contents = NULL;
-    gsize size;
-    
-    ParolePlFormat format = PAROLE_PL_FORMAT_UNKNOWN;
-    
-    file = g_file_new_for_path (filename);
-
-    if ( !g_file_load_contents (file, NULL, &contents, &size, NULL, NULL ) )
-    {
-       g_debug ("Unable to load content of file=%s", filename);
-       goto out;
-    }
-
-    if ( strstr (contents, "<ASX VERSION") )
-       format = PAROLE_PL_FORMAT_ASX;
-    else if ( strstr (contents, "<trackList>") || strstr (contents, 
"<tracklist>") )
-       format = PAROLE_PL_FORMAT_XSPF;
-    else if ( strstr (contents, "NumberOfEntries") )
-       format = PAROLE_PL_FORMAT_PLS;
-    else 
-       /* try to load the file as M3U*/
-       format = PAROLE_PL_FORMAT_M3U;
-
-    g_free (contents);
-out:
-    g_object_unref (file);
-    return format;
-}
-
 static GSList *
 parole_pl_parser_parse_asx (const gchar *filename)
 {
@@ -534,62 +480,6 @@ parole_pl_parser_parse (ParolePlFormat format, const gchar 
*filename)
     return list;
 }
 
-gboolean parole_pl_parser_can_parse_data (const guchar *data, gint len)
-{
-    gchar *mime_type = NULL;
-    gboolean result_uncertain;
-    gboolean result = FALSE;
-
-    mime_type = g_content_type_guess (NULL, data, len,  &result_uncertain);
-    
-    if ( mime_type && result_uncertain == FALSE )
-    {
-       GtkFileFilter *filter = g_object_ref_sink 
(parole_get_supported_playlist_filter ());
-       GtkFileFilterInfo filter_info;
-       g_debug ("Mime_type=%s", mime_type);
-       filter_info.mime_type = mime_type;
-    
-       filter_info.contains = GTK_FILE_FILTER_MIME_TYPE;
-    
-       result = gtk_file_filter_filter (filter, &filter_info);
-       g_object_unref (filter);
-       g_free (mime_type);
-    }
-    
-    return result;
-}
-
-GSList *parole_pl_parser_parse_from_file_by_extension (const gchar *filename)
-{
-    ParolePlFormat format = PAROLE_PL_FORMAT_UNKNOWN;
-    GSList *list = NULL;
-    
-    if ( (format = parole_pl_parser_guess_format_from_extension (filename)) == 
PAROLE_PL_FORMAT_UNKNOWN &&
-        (format = parole_pl_parser_guess_format_from_data (filename)) == 
PAROLE_PL_FORMAT_UNKNOWN ) 
-    {
-       g_debug ("Unable to guess playlist format : %s", filename);
-       goto out;
-    }
-
-    PAROLE_DEBUG_ENUM_FULL (format, PAROLE_ENUM_TYPE_PL_FORMAT, "playlist %s 
", filename);
-    list = parole_pl_parser_parse (format, filename);
-       
-out:
-    return list;
-}
-
-GSList *parole_pl_parser_parse_all_from_file (const gchar *filename)
-{
-    GSList *list = NULL;
-    
-    list = parole_pl_parser_parse_asx (filename);
-    list = g_slist_concat (list, parole_pl_parser_parse_m3u (filename));
-    list = g_slist_concat (list, parole_pl_parser_parse_pls (filename));
-    list = g_slist_concat (list, parole_pl_parser_parse_xspf (filename));
-    
-    return list;
-}
-
 static gboolean
 parole_pl_parser_save_m3u (FILE *f, GSList *files)
 {
@@ -685,6 +575,95 @@ parole_pl_parser_save_xspf (FILE *f, GSList *files)
     return TRUE;
 }
 
+/**
+ * parole_pl_parser_guess_format_from_extension:
+ * @filename: a filename.
+ * 
+ * Guess a playlist format from the filename extension.
+ * 
+ * Returns: PAROLE_PL_FORMAT_UNKNOWN if unable to get the playlist format, and 
a valid  
+ *          playlist format otherwise.
+ * 
+ * Since: 0.2
+ */
+ParolePlFormat
+parole_pl_parser_guess_format_from_extension (const gchar *filename)
+{
+    if ( g_str_has_suffix (filename, ".m3u") || g_str_has_suffix (filename, 
".M3U") )
+       return PAROLE_PL_FORMAT_M3U;
+       
+    if ( g_str_has_suffix (filename, ".pls") || g_str_has_suffix (filename, 
".PLS") )
+       return PAROLE_PL_FORMAT_PLS;
+       
+    if ( g_str_has_suffix (filename, ".xspf") || g_str_has_suffix (filename, 
".XSPF") )
+       return PAROLE_PL_FORMAT_XSPF;
+       
+    if ( g_str_has_suffix (filename, ".asx") || g_str_has_suffix (filename, 
".ASX") )
+       return PAROLE_PL_FORMAT_ASX;
+       
+    if ( g_str_has_suffix (filename, ".wax") || g_str_has_suffix (filename, 
".WAX") )
+       return PAROLE_PL_FORMAT_XSPF;
+       
+    return PAROLE_PL_FORMAT_UNKNOWN;
+}
+
+/**
+ * parole_pl_parser_guess_format_from_data:
+ * @filename: a filename.
+ * 
+ * Guess a playlist format from its data.
+ * 
+ * Returns: PAROLE_PL_FORMAT_UNKNOWN if unable to get the playlist format, and 
a valid  
+ *          playlist format otherwise.
+ * 
+ * Since: 0.2
+ */
+ParolePlFormat
+parole_pl_parser_guess_format_from_data (const gchar *filename)
+{
+    GFile *file;
+    gchar *contents = NULL;
+    gsize size;
+    
+    ParolePlFormat format = PAROLE_PL_FORMAT_UNKNOWN;
+    
+    file = g_file_new_for_path (filename);
+
+    if ( !g_file_load_contents (file, NULL, &contents, &size, NULL, NULL ) )
+    {
+       g_debug ("Unable to load content of file=%s", filename);
+       goto out;
+    }
+
+    if ( strstr (contents, "<ASX VERSION") )
+       format = PAROLE_PL_FORMAT_ASX;
+    else if ( strstr (contents, "<trackList>") || strstr (contents, 
"<tracklist>") )
+       format = PAROLE_PL_FORMAT_XSPF;
+    else if ( strstr (contents, "NumberOfEntries") )
+       format = PAROLE_PL_FORMAT_PLS;
+    else 
+       /* try to load the file as M3U*/
+       format = PAROLE_PL_FORMAT_M3U;
+
+    g_free (contents);
+out:
+    g_object_unref (file);
+    return format;
+}
+
+/**
+ * parole_pl_parser_save_from_files:
+ * @files: a #GSList list of #ParoleFile files.
+ * @filename: a filename to save.
+ * @format: a #ParolePlFormat format of the playlist.
+ * 
+ * Saves a #GSList containing a list of #ParoleFile files to filename.
+ * 
+ * 
+ * Returns: TRUE if the playlist was saved, FALSE otherwise.
+ * 
+ * Since: 0.2
+ **/
 gboolean parole_pl_parser_save_from_files (GSList *files, const gchar 
*filename, ParolePlFormat format)
 {
     FILE *f;
@@ -716,3 +695,92 @@ gboolean parole_pl_parser_save_from_files (GSList *files, 
const gchar *filename,
     
     return ret_val;
 }
+
+/**
+ * parole_pl_parser_parse_from_file_by_extension:
+ * @filename: a filename.
+ * 
+ * 
+ * Returns: a #GSList containts a list of #Parolefile parsed from the 
playlist, 
+ *          or NULL if no files were parsed.
+ * 
+ * Since: 0.2
+ */
+GSList *parole_pl_parser_parse_from_file_by_extension (const gchar *filename)
+{
+    ParolePlFormat format = PAROLE_PL_FORMAT_UNKNOWN;
+    GSList *list = NULL;
+    
+    if ( (format = parole_pl_parser_guess_format_from_extension (filename)) == 
PAROLE_PL_FORMAT_UNKNOWN &&
+        (format = parole_pl_parser_guess_format_from_data (filename)) == 
PAROLE_PL_FORMAT_UNKNOWN ) 
+    {
+       g_debug ("Unable to guess playlist format : %s", filename);
+       goto out;
+    }
+
+    PAROLE_DEBUG_ENUM_FULL (format, PAROLE_ENUM_TYPE_PL_FORMAT, "playlist %s 
", filename);
+    list = parole_pl_parser_parse (format, filename);
+       
+out:
+    return list;
+}
+
+/**
+ * parole_pl_parser_parse_all_from_file:
+ * @filename: a filename
+ * 
+ * This function tries to parse a playlist without guessing the playlist 
format.
+ * 
+ * 
+ * Returns: a #GSList containts a list of #Parolefile parsed from the 
playlist, 
+ *          or NULL if no files were parsed.
+ * 
+ * Since: 0.2
+ */
+GSList *parole_pl_parser_parse_all_from_file (const gchar *filename)
+{
+    GSList *list = NULL;
+    
+    list = parole_pl_parser_parse_asx (filename);
+    list = g_slist_concat (list, parole_pl_parser_parse_m3u (filename));
+    list = g_slist_concat (list, parole_pl_parser_parse_pls (filename));
+    list = g_slist_concat (list, parole_pl_parser_parse_xspf (filename));
+    
+    return list;
+}
+
+/**
+ * parole_pl_parser_can_parse_data:
+ * @data: data.
+ * @len: length of data.
+ * 
+ * Get if the Parole parser can parse from the passed data.
+ * 
+ * Returns: TRUE if it can parse from the data, FALSE otherwise.
+ * 
+ * Since: 0.2
+ */
+gboolean parole_pl_parser_can_parse_data (const guchar *data, gint len)
+{
+    gchar *mime_type = NULL;
+    gboolean result_uncertain;
+    gboolean result = FALSE;
+
+    mime_type = g_content_type_guess (NULL, data, len,  &result_uncertain);
+    
+    if ( mime_type && result_uncertain == FALSE )
+    {
+       GtkFileFilter *filter = g_object_ref_sink 
(parole_get_supported_playlist_filter ());
+       GtkFileFilterInfo filter_info;
+       g_debug ("Mime_type=%s", mime_type);
+       filter_info.mime_type = mime_type;
+    
+       filter_info.contains = GTK_FILE_FILTER_MIME_TYPE;
+    
+       result = gtk_file_filter_filter (filter, &filter_info);
+       g_object_unref (filter);
+       g_free (mime_type);
+    }
+    
+    return result;
+}
diff --git a/parole/parole-pl-parser.h b/parole/parole-pl-parser.h
index 9cb4fd0..33dbaeb 100644
--- a/parole/parole-pl-parser.h
+++ b/parole/parole-pl-parser.h
@@ -41,6 +41,8 @@ typedef enum
 
 ParolePlFormat          parole_pl_parser_guess_format_from_extension           
(const gchar *filename);
 
+ParolePlFormat          parole_pl_parser_guess_format_from_data                
(const gchar *filename);
+
 gboolean                parole_pl_parser_can_parse_data                        
(const guchar *data, gint len);
 
 GSList                         *parole_pl_parser_parse_from_file_by_extension  
        (const gchar *filename);
diff --git a/parole/parole-provider-player.c b/parole/parole-provider-player.c
index 490e81b..7a85914 100644
--- a/parole/parole-provider-player.c
+++ b/parole/parole-provider-player.c
@@ -70,6 +70,8 @@ static void parole_provider_player_base_init (gpointer klass)
         * @stream: a #ParoleStream.
         * @state: the new state.
         * 
+        * Issued when the Parole state changed.
+        * 
         * Since: 0.2 
         **/
         g_signal_new ("state-changed",
@@ -86,6 +88,8 @@ static void parole_provider_player_base_init (gpointer klass)
         * @player: the object which received the signal.
         * @stream: a #ParoleStream.
         * 
+        * Indicated that the stream tags were found and ready to be read.
+        * 
         * Since: 0.2 
         **/
        g_signal_new ("tag-message",
@@ -106,10 +110,13 @@ static void parole_provider_player_class_init (gpointer 
klass)
 
 /**
  * parole_provider_player_get_main_window:
- * @player: a 
+ * @player: a #ParoleProviderPlayer 
  * 
+ * Ask the Player to get the Parole main window.
  * 
- * Returns: 
+ * Returns: #GtkWidget window.
+ * 
+ * Since: 0.2
  **/
 GtkWidget *parole_provider_player_get_main_window (ParoleProviderPlayer 
*player)
 {
@@ -126,10 +133,16 @@ GtkWidget *parole_provider_player_get_main_window 
(ParoleProviderPlayer *player)
 
 /**
  * parole_provider_player_pack:
- * @player:
- * @widget:
- * @title:
- * @container:
+ * @player: a #ParoleProviderPlayer
+ * @widget: a #GtkWidget.
+ * @title: title
+ * @container: a #ParolePluginContainer.
+ * 
+ * Ask the player to pack a widget in the playlist notebook if 
PAROLE_PLUGIN_CONTAINER_PLAYLIST 
+ * is specified or in the main window notebook if 
PAROLE_PLUGIN_CONTAINER_MAIN_VIEW is specified.
+ * 
+ * This function can be called once, the Player is responsible on removing the 
widget in
+ * case the plugin was unloaded.
  * 
  **/ 
 void parole_provider_player_pack (ParoleProviderPlayer *player, GtkWidget 
*widget, 
@@ -145,10 +158,11 @@ void parole_provider_player_pack (ParoleProviderPlayer 
*player, GtkWidget *widge
                
 /**
  * parole_provider_player_get_state:
- * @player:
+ * @player: a #ParoleProviderPlayer
  * 
+ * Get the current state of the player.
  * 
- * Returns:
+ * Returns: a #ParoleState.
  * 
  * 
  * Since: 0.2
@@ -172,9 +186,13 @@ ParoleState parole_provider_player_get_state 
(ParoleProviderPlayer *player)
  * @player: a #ParoleProviderPlayer
  * @uri: uri
  * 
+ * Issue a play command on the backend for the given uri, note this function
+ * can be called only of the Parole current state is PAROLE_STATE_STOPPED.
  * 
- * Returns:
+ * Returning TRUE doesn't mean that the funtion succeeded to change the state 
of the player, 
+ * the state change is indicated asynchronously by 
#ParoleProviderPlayerIface::state-changed signal.
  * 
+ * Returns: TRUE if the command is processed, FALSE otherwise.
  * 
  * Since: 0.2
  **/
@@ -196,8 +214,13 @@ gboolean parole_provider_player_play_uri 
(ParoleProviderPlayer *player, const gc
  * parole_provider_player_pause:
  * @player: a #ParoleProviderPlayer
  * 
+ * Issue a pause command to the backend, this function can be called when the 
state of the player
+ * is PAROLE_STATE_PLAYING.
+ * 
+ * Returning TRUE doesn't mean that the funtion succeeded to change the state 
of the player, 
+ * the state change is indicated asynchronously by 
#ParoleProviderPlayerIface::state-changed signal.
  * 
- * Returns:
+ * Returns: TRUE if the command is processed, FALSE otherwise.
  * 
  * 
  * Since: 0.2
@@ -222,7 +245,13 @@ gboolean parole_provider_player_pause 
(ParoleProviderPlayer *player)
  * @player: a #ParoleProviderPlayer
  * 
  * 
- * Returns:
+ * Issue a resume command to the player, this function can be called when
+ * the current state of the player is PAROLE_STATE_PAUSED.
+ * 
+ * Returning TRUE doesn't mean that the funtion succeeded to change the state 
of the player, 
+ * the state change is indicated asynchronously by 
#ParoleProviderPlayerIface::state-changed signal.
+ * 
+ * Returns: TRUE if the command is processed, FALSE otherwise.
  * 
  * 
  * Since: 0.2
@@ -246,9 +275,12 @@ gboolean parole_provider_player_resume 
(ParoleProviderPlayer *player)
  * parole_provider_player_stop:
  * @player: a #ParoleProviderPlayer
  * 
+ * Issue a stop command to the player.
  * 
- * Returns:
+ * Returning TRUE doesn't mean that the funtion succeeded to change the state 
of the player, 
+ * the state change is indicated asynchronously by 
#ParoleProviderPlayerIface::state-changed signal.
  * 
+ * Returns: TRUE if the command is processed, FALSE otherwise.
  * 
  * Since: 0.2
  **/
@@ -270,9 +302,12 @@ gboolean parole_provider_player_stop (ParoleProviderPlayer 
*player)
 /**
  * parole_provider_player_seek:
  * @player: a #ParoleProviderPlayer
+ * @pos: position to seek.
+ * 
  * 
+ * Issue a seek command.
  * 
- * Returns:
+ * Returns: TRUE if the seek command succeeded, FALSE otherwise.
  * 
  * 
  * Since: 0.2
@@ -296,7 +331,7 @@ gboolean parole_provider_player_seek (ParoleProviderPlayer 
*player, gdouble pos)
  * parole_provider_player_open_media_chooser:
  * @player: a #ParoleProviderPlayer
  * 
- * 
+ * Ask Parole to open its media chooser dialog.
  * 
  * Since: 0.2
  **/
diff --git a/parole/parole-provider-plugin.c b/parole/parole-provider-plugin.c
index 09d8291..4c01645 100644
--- a/parole/parole-provider-plugin.c
+++ b/parole/parole-provider-plugin.c
@@ -101,6 +101,8 @@ void parole_provider_plugin_configure (ParoleProviderPlugin 
*provider, GtkWidget
  * @provider: a #ParoleProviderPlugin
  * @player: a #ParoleProviderPlayer
  * 
+ * The player calls this method on the iface_init funtion implemented by the 
plugin
+ * to set the #ParoleProviderPlayer, don't take any reference of the Player.
  * 
  * Since: 0.2
  **/
diff --git a/parole/parole.h.in b/parole/parole.h.in
index a4f5a8c..df169dc 100644
--- a/parole/parole.h.in
+++ b/parole/parole.h.in
@@ -33,6 +33,8 @@
 #include <parole/parole-filters.h>
 #include <parole/parole-debug.h>
 
+#include <libxfce4util/libxfce4util.h>
+
 #define PAROLE_MAJOR_VERSION           @PAROLE_VERSION_MAJOR@
 #define PAROLE_MINOR_VERSION           @PAROLE_VERSION_MINOR@
 #define PAROLE_MICRO_VERSION           @PAROLE_VERSION_MICRO@
diff --git a/plugins/sample/sample-plugin.c b/plugins/sample/sample-plugin.c
index 5e19a2e..4d23875 100644
--- a/plugins/sample/sample-plugin.c
+++ b/plugins/sample/sample-plugin.c
@@ -22,7 +22,7 @@
 #include <config.h>
 #endif
 
-#include <libxfce4util/libxfce4util.h>
+#include <parole/parole.h>
 
 #include "sample-provider.h"
 
diff --git a/plugins/sample/sample-provider.c b/plugins/sample/sample-provider.c
index 320d440..783e4fd 100644
--- a/plugins/sample/sample-provider.c
+++ b/plugins/sample/sample-provider.c
@@ -22,8 +22,6 @@
 #include <config.h>
 #endif
 
-#include <glib/gi18n.h>
-
 #include "sample-provider.h"
 
 static void   sample_provider_iface_init          (ParoleProviderPluginIface 
*iface);
diff --git a/plugins/tray/tray-provider.c b/plugins/tray/tray-provider.c
index 92634ac..5d5883f 100644
--- a/plugins/tray/tray-provider.c
+++ b/plugins/tray/tray-provider.c
@@ -200,7 +200,11 @@ notify_playing (TrayProvider *tray, const ParoleStream 
*stream)
     gboolean live, has_audio, has_video;
     gchar *title;
     gchar *message;
-    gdouble duration;
+    gint64 duration;
+    gint  hours;
+    gint  minutes;
+    gint  seconds;
+    gchar timestring[128];
     ParoleMediaType media_type;
     
     if ( !tray->notify || !tray->enabled)
@@ -239,8 +243,22 @@ notify_playing (TrayProvider *tray, const ParoleStream 
*stream)
        g_free (title);
        return;
     }
+        
+    minutes =  duration / 60;
+    seconds = duration % 60;
+    hours = minutes / 60;
+    minutes = minutes % 60;
+
+    if ( hours == 0 )
+    {
+       g_snprintf (timestring, 128, "%02i:%02i", minutes, seconds);
+    }
+    else
+    {
+       g_snprintf (timestring, 128, "%i:%02i:%02i", hours, minutes, seconds);
+    }
     
-    message = g_strdup_printf ("%s %s %s %4.2f", _("<b>Playing:</b>"), title, 
_("<b>Duration:</b>"), duration);
+    message = g_strdup_printf ("%s %s %s %s", _("<b>Playing:</b>"), title, 
_("<b>Duration:</b>"), timestring);
     
     tray->n = notify_notification_new (title, message, NULL, NULL);
     g_free (title);
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to