summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2013-03-11 13:42:58 +0100
committerBastien Nocera <hadess@hadess.net>2013-03-11 13:42:58 +0100
commit3aa062419c13142300812cbdf733100d186bb4eb (patch)
treed4ba09ef3f65eaa1458bb146905bb80748230cee /src
parentb720cdd388976778f2b9948fc2972f34624d1792 (diff)
downloadtotem-3aa062419c13142300812cbdf733100d186bb4eb.tar.gz
main: Split off saving of the session playlist
We were using the same code as the interactive playlist saving, which meant that error messages popped up in an error dialogue as we were closing the application.
Diffstat (limited to 'src')
-rw-r--r--src/totem-playlist.c29
-rw-r--r--src/totem-playlist.h2
-rw-r--r--src/totem-session.c30
3 files changed, 45 insertions, 16 deletions
diff --git a/src/totem-playlist.c b/src/totem-playlist.c
index b65c74653..17e4ccc64 100644
--- a/src/totem-playlist.c
+++ b/src/totem-playlist.c
@@ -440,24 +440,39 @@ totem_playlist_save_iter_foreach (GtkTreeModel *model,
void
totem_playlist_save_session_playlist (TotemPlaylist *playlist,
- const char *output_uri)
+ GFile *output)
{
+ TotemPlPlaylist *pl_playlist;
+ GError *error = NULL;
+ gboolean retval;
+
if (playlist->priv->disable_save_to_disk) {
/* On lockdown, we do not touch the disk,
* even to remove the existing session */
return;
}
if (!playlist->priv->save || PL_LEN == 0) {
- GFile *file;
+ g_file_delete (output, NULL, NULL);
+ return;
+ }
+ pl_playlist = totem_pl_playlist_new ();
- file = g_file_new_for_uri (output_uri);
- g_file_delete (file, NULL, NULL);
- g_object_unref (file);
- return;
+ gtk_tree_model_foreach (playlist->priv->model,
+ totem_playlist_save_iter_foreach,
+ pl_playlist);
+
+ retval = totem_pl_parser_save (playlist->priv->parser,
+ pl_playlist,
+ output,
+ NULL, TOTEM_PL_PARSER_XSPF, &error);
+
+ if (retval == FALSE) {
+ g_warning ("Failed to save the session playlist: %s", error->message);
+ g_error_free (error);
}
- totem_playlist_save_current_playlist_ext (playlist, output_uri, TOTEM_PL_PARSER_XSPF);
+ g_object_unref (pl_playlist);
}
void
diff --git a/src/totem-playlist.h b/src/totem-playlist.h
index 14db5e827..d28649e86 100644
--- a/src/totem-playlist.h
+++ b/src/totem-playlist.h
@@ -115,7 +115,7 @@ gboolean totem_playlist_add_mrls_finish (TotemPlaylist *self,
GError **error);
void totem_playlist_save_session_playlist (TotemPlaylist *playlist,
- const char *output_uri);
+ GFile *output);
void totem_playlist_save_current_playlist_ext (TotemPlaylist *playlist,
const char *output, TotemPlParserType type);
void totem_playlist_select_subtitle_dialog (TotemPlaylist *playlist,
diff --git a/src/totem-session.c b/src/totem-session.c
index 8956e56d5..be51f5df5 100644
--- a/src/totem-session.c
+++ b/src/totem-session.c
@@ -27,15 +27,29 @@
#include "totem-session.h"
#include "totem-uri.h"
-static char *
-get_session_filename (void)
+static GFile *
+get_session_file (void)
{
- char *path, *uri;
+ GFile *file;
+ char *path;
path = g_build_filename (g_get_user_config_dir (), "totem", "session_state.xspf", NULL);
- uri = g_filename_to_uri (path, NULL, NULL);
+ file = g_file_new_for_path (path);
g_free (path);
+ return file;
+}
+
+static char *
+get_session_filename (void)
+{
+ GFile *file;
+ char *uri;
+
+ file = get_session_file ();
+ uri = g_file_get_uri (file);
+ g_object_unref (file);
+
return uri;
}
@@ -80,11 +94,11 @@ totem_session_try_restore (Totem *totem)
void
totem_session_save (Totem *totem)
{
- char *uri;
+ GFile *file;
- uri = get_session_filename ();
+ file = get_session_file ();
/* FIXME: Save the current seek time somehow */
/* FIXME: Check whether we actually want to be saved */
- totem_playlist_save_session_playlist (totem->playlist, uri);
- g_free (uri);
+ totem_playlist_save_session_playlist (totem->playlist, file);
+ g_object_unref (file);
}