28
28
#include <totem-pl-parser.h>
30
typedef <link linkend="TotemPlParser">TotemPlParser</link>;
30
<link linkend="TotemPlParser-struct">TotemPlParser</link>;
31
31
typedef <link linkend="TotemPlParserClass">TotemPlParserClass</link>;
32
32
enum <link linkend="TotemPlParserResult">TotemPlParserResult</link>;
33
33
enum <link linkend="TotemPlParserType">TotemPlParserType</link>;
34
34
enum <link linkend="TotemPlParserError">TotemPlParserError</link>;
35
<link linkend="void">void</link> (<link linkend="TotemPlParserIterFunc">*TotemPlParserIterFunc</link>) (<link linkend="GtkTreeModel">GtkTreeModel</link> *model,
36
<link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
37
<link linkend="char">char</link> **uri,
38
<link linkend="char">char</link> **title,
39
<link linkend="gboolean">gboolean</link> *custom_title,
40
<link linkend="gpointer">gpointer</link> user_data);
41
35
<link linkend="TotemPlParser">TotemPlParser</link> * <link linkend="totem-pl-parser-new">totem_pl_parser_new</link> (void);
42
36
<link linkend="TotemPlParserResult">TotemPlParserResult</link> <link linkend="totem-pl-parser-parse">totem_pl_parser_parse</link> (<link linkend="TotemPlParser">TotemPlParser</link> *parser,
43
37
const <link linkend="char">char</link> *uri,
63
57
<link linkend="GCancellable">GCancellable</link> *cancellable,
64
58
<link linkend="GAsyncReadyCallback">GAsyncReadyCallback</link> callback,
65
59
<link linkend="gpointer">gpointer</link> user_data);
66
<link linkend="gboolean">gboolean</link> <link linkend="totem-pl-parser-write">totem_pl_parser_write</link> (<link linkend="TotemPlParser">TotemPlParser</link> *parser,
67
<link linkend="GtkTreeModel">GtkTreeModel</link> *model,
68
<link linkend="TotemPlParserIterFunc">TotemPlParserIterFunc</link> func,
69
const <link linkend="char">char</link> *output,
70
<link linkend="TotemPlParserType">TotemPlParserType</link> type,
71
<link linkend="gpointer">gpointer</link> user_data,
72
<link linkend="GError">GError</link> **error);
73
<link linkend="gboolean">gboolean</link> <link linkend="totem-pl-parser-write-with-title">totem_pl_parser_write_with_title</link> (<link linkend="TotemPlParser">TotemPlParser</link> *parser,
74
<link linkend="GtkTreeModel">GtkTreeModel</link> *model,
75
<link linkend="TotemPlParserIterFunc">TotemPlParserIterFunc</link> func,
76
const <link linkend="char">char</link> *output,
77
const <link linkend="char">char</link> *title,
78
<link linkend="TotemPlParserType">TotemPlParserType</link> type,
79
<link linkend="gpointer">gpointer</link> user_data,
60
<link linkend="gboolean">gboolean</link> <link linkend="totem-pl-parser-save">totem_pl_parser_save</link> (<link linkend="TotemPlParser">TotemPlParser</link> *parser,
61
<link linkend="TotemPlPlaylist">TotemPlPlaylist</link> *playlist,
62
<link linkend="GFile">GFile</link> *dest,
63
const <link linkend="gchar">gchar</link> *title,
64
<link linkend="TotemPlParserType">TotemPlParserType</link> type,
80
65
<link linkend="GError">GError</link> **error);
81
66
<link linkend="gint64">gint64</link> <link linkend="totem-pl-parser-parse-duration">totem_pl_parser_parse_duration</link> (const <link linkend="char">char</link> *duration,
82
67
<link linkend="gboolean">gboolean</link> debug);
218
203
<title>Writing a Playlist</title>
221
parser_func (GtkTreeModel *model, GtkTreeIter *iter,
222
gchar **uri, gchar **title, gboolean *custom_title,
225
gtk_tree_model_get (model, iter,
233
206
TotemPlParser *pl;
234
GtkTreeModel *tree_model;
207
TotemPlPlaylist *playlist;
208
TotemPlPlaylistIter iter;
236
211
pl = totem_pl_parser_new ();
238
&slash;* Your tree model can be as simple or as complex as you like;
239
* parser_func() will just have to return the entry title, URI and custom title flag from it. *&slash;
240
tree_model = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
241
populate_model (tree_model);
243
if (totem_pl_parser_write (pl, tree_model, parser_func, "/tmp/playlist.pls",
244
TOTEM_PL_PARSER_PLS, NULL, NULL) != TRUE) {
212
playlist = totem_pl_playlist_new ();
213
file = g_file_new_for_path ("/tmp/playlist.pls");
215
totem_pl_playlist_append (playlist, &iter);
216
totem_pl_playlist_set (playlist, &iter,
217
TOTEM_PL_PARSER_FIELD_URI, "file:///1.ogg",
218
TOTEM_PL_PARSER_FIELD_TITLE, "1.ogg",
221
totem_pl_playlist_append (playlist, &iter);
222
totem_pl_playlist_set (playlist, &iter,
223
TOTEM_PL_PARSER_FIELD_URI, "file:///2.ogg",
226
if (totem_pl_parser_save (pl, playlist, file, "Title",
227
TOTEM_PL_PARSER_PLS, NULL) != TRUE) {
245
228
g_error ("Playlist writing failed.");
248
g_object_unref (tree_model);
231
g_object_unref (playlist);
249
232
g_object_unref (pl);
233
g_object_unref (file);
251
235
</programlisting>
252
236
</example></para>
376
359
</simpara></listitem>
378
361
</variablelist></refsect2>
379
<refsect2 id="TotemPlParserIterFunc" role="function">
380
<title>TotemPlParserIterFunc ()</title>
381
<indexterm zone="TotemPlParserIterFunc"><primary>TotemPlParserIterFunc</primary></indexterm><programlisting><link linkend="void">void</link> (*TotemPlParserIterFunc) (<link linkend="GtkTreeModel">GtkTreeModel</link> *model,
382
<link linkend="GtkTreeIter">GtkTreeIter</link> *iter,
383
<link linkend="char">char</link> **uri,
384
<link linkend="char">char</link> **title,
385
<link linkend="gboolean">gboolean</link> *custom_title,
386
<link linkend="gpointer">gpointer</link> user_data);</programlisting>
388
Functions such as <link linkend="totem-pl-parser-write"><function>totem_pl_parser_write()</function></link> accept pointers to <link linkend="TotemPlParserIterFunc"><function>TotemPlParserIterFunc()</function></link>s
389
as callbacks to call for each entry in the playlist. These functions
390
are specific to each use of the playlist API, and should set the entry's
391
<parameter>uri</parameter>, <parameter>title</parameter> and <parameter>custom_title</parameter> return values, getting the data from <parameter>model</parameter>
394
</para><variablelist role="params">
395
<varlistentry><term><parameter>model</parameter> :</term>
396
<listitem><simpara> a <link linkend="GtkTreeModel"><type>GtkTreeModel</type></link> containing the playlist entries
397
</simpara></listitem></varlistentry>
398
<varlistentry><term><parameter>iter</parameter> :</term>
399
<listitem><simpara> a <link linkend="GtkTreeIter"><type>GtkTreeIter</type></link> pointing to the current row
400
</simpara></listitem></varlistentry>
401
<varlistentry><term><parameter>uri</parameter> :</term>
402
<listitem><simpara> return location for the entry's URI, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
403
</simpara></listitem></varlistentry>
404
<varlistentry><term><parameter>title</parameter> :</term>
405
<listitem><simpara> return location for the entry's title, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
406
</simpara></listitem></varlistentry>
407
<varlistentry><term><parameter>custom_title</parameter> :</term>
408
<listitem><simpara> return location for a boolean which, if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, indicates that the entry's <parameter>title</parameter> is custom; or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
409
</simpara></listitem></varlistentry>
410
<varlistentry><term><parameter>user_data</parameter> :</term>
411
<listitem><simpara> user data to pass to the function
412
</simpara></listitem></varlistentry>
413
</variablelist></refsect2>
414
362
<refsect2 id="totem-pl-parser-new" role="function">
415
363
<title>totem_pl_parser_new ()</title>
416
364
<indexterm zone="totem-pl-parser-new"><primary sortas="new">totem_pl_parser_new</primary></indexterm><programlisting><link linkend="TotemPlParser">TotemPlParser</link> * totem_pl_parser_new (void);</programlisting>
570
515
<listitem><simpara> the URI of the playlist to parse
571
516
</simpara></listitem></varlistentry>
572
517
<varlistentry><term><parameter>base</parameter> :</term>
573
<listitem><simpara> the base path for relative filenames
574
</simpara></listitem></varlistentry>
518
<listitem><simpara> the base path for relative filenames, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>. <acronym>allow-none</acronym>. </simpara></listitem></varlistentry>
575
519
<varlistentry><term><parameter>fallback</parameter> :</term>
576
520
<listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the parser should add the playlist URI to the
577
521
end of the playlist on parse failure
578
522
</simpara></listitem></varlistentry>
579
523
<varlistentry><term><parameter>cancellable</parameter> :</term>
580
<listitem><simpara> optional <link linkend="GCancellable"><type>GCancellable</type></link> object, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
581
</simpara></listitem></varlistentry>
524
<listitem><simpara> optional <link linkend="GCancellable"><type>GCancellable</type></link> object, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>. <acronym>allow-none</acronym>. </simpara></listitem></varlistentry>
582
525
<varlistentry><term><parameter>callback</parameter> :</term>
583
<listitem><simpara> a <link linkend="GAsyncReadyCallback"><type>GAsyncReadyCallback</type></link> to call when parsing is finished
584
</simpara></listitem></varlistentry>
526
<listitem><simpara> a <link linkend="GAsyncReadyCallback"><type>GAsyncReadyCallback</type></link> to call when parsing is finished. <acronym>allow-none</acronym>. </simpara></listitem></varlistentry>
585
527
<varlistentry><term><parameter>user_data</parameter> :</term>
586
528
<listitem><simpara> data to pass to the <parameter>callback</parameter> function
587
529
</simpara></listitem></varlistentry>
588
530
</variablelist></refsect2>
589
<refsect2 id="totem-pl-parser-write" role="function">
590
<title>totem_pl_parser_write ()</title>
591
<indexterm zone="totem-pl-parser-write"><primary sortas="write">totem_pl_parser_write</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> totem_pl_parser_write (<link linkend="TotemPlParser">TotemPlParser</link> *parser,
592
<link linkend="GtkTreeModel">GtkTreeModel</link> *model,
593
<link linkend="TotemPlParserIterFunc">TotemPlParserIterFunc</link> func,
594
const <link linkend="char">char</link> *output,
595
<link linkend="TotemPlParserType">TotemPlParserType</link> type,
596
<link linkend="gpointer">gpointer</link> user_data,
597
<link linkend="GError">GError</link> **error);</programlisting>
599
Writes the playlist held by <parameter>parser</parameter> and <parameter>model</parameter> out to the file of
600
path <parameter>output</parameter>. The playlist is written in the format <parameter>type</parameter> and is given
601
a <link linkend="NULL--CAPS"><literal>NULL</literal></link> title.
604
For each entry in the <parameter>model</parameter>, the function <parameter>func</parameter> is called (and passed
605
<parameter>user_data</parameter>), which gets various metadata values about the entry for
609
Possible error codes are as per <link linkend="totem-pl-parser-write-with-title"><function>totem_pl_parser_write_with_title()</function></link>.</para>
611
</para><variablelist role="params">
612
<varlistentry><term><parameter>parser</parameter> :</term>
613
<listitem><simpara> a <link linkend="TotemPlParser"><type>TotemPlParser</type></link>
614
</simpara></listitem></varlistentry>
615
<varlistentry><term><parameter>model</parameter> :</term>
616
<listitem><simpara> a <link linkend="GtkTreeModel"><type>GtkTreeModel</type></link>
617
</simpara></listitem></varlistentry>
618
<varlistentry><term><parameter>func</parameter> :</term>
619
<listitem><simpara> a pointer to a <link linkend="TotemPlParserIterFunc"><type>TotemPlParserIterFunc</type></link> callback function
620
</simpara></listitem></varlistentry>
621
<varlistentry><term><parameter>output</parameter> :</term>
622
<listitem><simpara> the output path and filename
623
</simpara></listitem></varlistentry>
624
<varlistentry><term><parameter>type</parameter> :</term>
625
<listitem><simpara> a <link linkend="TotemPlParserType"><type>TotemPlParserType</type></link> for the ouputted playlist
626
</simpara></listitem></varlistentry>
627
<varlistentry><term><parameter>user_data</parameter> :</term>
628
<listitem><simpara> a pointer to be passed to each call of <parameter>func</parameter>
629
</simpara></listitem></varlistentry>
630
<varlistentry><term><parameter>error</parameter> :</term>
631
<listitem><simpara> return location for a <link linkend="GError"><type>GError</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
632
</simpara></listitem></varlistentry>
633
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> on success
634
</simpara></listitem></varlistentry>
635
</variablelist></refsect2>
636
<refsect2 id="totem-pl-parser-write-with-title" role="function">
637
<title>totem_pl_parser_write_with_title ()</title>
638
<indexterm zone="totem-pl-parser-write-with-title"><primary sortas="write_with_title">totem_pl_parser_write_with_title</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> totem_pl_parser_write_with_title (<link linkend="TotemPlParser">TotemPlParser</link> *parser,
639
<link linkend="GtkTreeModel">GtkTreeModel</link> *model,
640
<link linkend="TotemPlParserIterFunc">TotemPlParserIterFunc</link> func,
641
const <link linkend="char">char</link> *output,
642
const <link linkend="char">char</link> *title,
643
<link linkend="TotemPlParserType">TotemPlParserType</link> type,
644
<link linkend="gpointer">gpointer</link> user_data,
645
<link linkend="GError">GError</link> **error);</programlisting>
647
Writes the playlist held by <parameter>parser</parameter> and <parameter>model</parameter> out to the file of
648
path <parameter>output</parameter>. The playlist is written in the format <parameter>type</parameter> and is
531
<refsect2 id="totem-pl-parser-save" role="function">
532
<title>totem_pl_parser_save ()</title>
533
<indexterm zone="totem-pl-parser-save"><primary sortas="save">totem_pl_parser_save</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> totem_pl_parser_save (<link linkend="TotemPlParser">TotemPlParser</link> *parser,
534
<link linkend="TotemPlPlaylist">TotemPlPlaylist</link> *playlist,
535
<link linkend="GFile">GFile</link> *dest,
536
const <link linkend="gchar">gchar</link> *title,
537
<link linkend="TotemPlParserType">TotemPlParserType</link> type,
538
<link linkend="GError">GError</link> **error);</programlisting>
540
Writes the playlist held by <parameter>parser</parameter> and <parameter>playlist</parameter> out to the path
541
pointed by <parameter>dest</parameter>. The playlist is written in the format <parameter>type</parameter> and is
649
542
given the title <parameter>title</parameter>.
652
For each entry in the <parameter>model</parameter>, the function <parameter>func</parameter> is called (and passed
653
<parameter>user_data</parameter>), which gets various metadata values about the entry for
657
545
If the <parameter>output</parameter> file is a directory the <link linkend="G-IO-ERROR-IS-DIRECTORY--CAPS"><type>G_IO_ERROR_IS_DIRECTORY</type></link> error
658
546
will be returned, and if the file is some other form of non-regular file
659
547
then a <link linkend="G-IO-ERROR-NOT-REGULAR-FILE--CAPS"><type>G_IO_ERROR_NOT_REGULAR_FILE</type></link> error will be returned. Some file
674
562
<varlistentry><term><parameter>parser</parameter> :</term>
675
563
<listitem><simpara> a <link linkend="TotemPlParser"><type>TotemPlParser</type></link>
676
564
</simpara></listitem></varlistentry>
677
<varlistentry><term><parameter>model</parameter> :</term>
678
<listitem><simpara> a <link linkend="GtkTreeModel"><type>GtkTreeModel</type></link>
679
</simpara></listitem></varlistentry>
680
<varlistentry><term><parameter>func</parameter> :</term>
681
<listitem><simpara> a pointer to a <link linkend="TotemPlParserIterFunc"><type>TotemPlParserIterFunc</type></link> callback function
682
</simpara></listitem></varlistentry>
683
<varlistentry><term><parameter>output</parameter> :</term>
684
<listitem><simpara> the output path and filename
565
<varlistentry><term><parameter>playlist</parameter> :</term>
566
<listitem><simpara> a <link linkend="TotemPlPlaylist"><type>TotemPlPlaylist</type></link>
567
</simpara></listitem></varlistentry>
568
<varlistentry><term><parameter>dest</parameter> :</term>
569
<listitem><simpara> output <link linkend="GFile"><type>GFile</type></link>
685
570
</simpara></listitem></varlistentry>
686
571
<varlistentry><term><parameter>title</parameter> :</term>
687
572
<listitem><simpara> the playlist title
688
573
</simpara></listitem></varlistentry>
689
574
<varlistentry><term><parameter>type</parameter> :</term>
690
<listitem><simpara> a <link linkend="TotemPlParserType"><type>TotemPlParserType</type></link> for the ouputted playlist
691
</simpara></listitem></varlistentry>
692
<varlistentry><term><parameter>user_data</parameter> :</term>
693
<listitem><simpara> a pointer to be passed to each call of <parameter>func</parameter>
575
<listitem><simpara> a <link linkend="TotemPlParserType"><type>TotemPlParserType</type></link> for the outputted playlist
694
576
</simpara></listitem></varlistentry>
695
577
<varlistentry><term><parameter>error</parameter> :</term>
696
<listitem><simpara> return location for a <link linkend="GError"><type>GError</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
578
<listitem><simpara> return loction for a <link linkend="GError"><type>GError</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
697
579
</simpara></listitem></varlistentry>
698
580
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> on success
699
581
</simpara></listitem></varlistentry>