[totem] main: Fix warnings with broken grl-filesystem paths
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [totem] main: Fix warnings with broken grl-filesystem paths
- Date: Fri, 31 Jan 2014 23:40:31 +0000 (UTC)
commit 928eacaddf19cf74cdfd208003239f1513056853
Author: Bastien Nocera <hadess hadess net>
Date: Sat Feb 1 00:38:18 2014 +0100
main: Fix warnings with broken grl-filesystem paths
Report errors from the playlist through TotemObject, not through
TotemPlaylist. It doesn't have a toplevel anymore, so can't parent
dialogues properly.
src/totem-object.c | 9 ++++++-
src/totem-playlist.c | 67 +++++++++++++++----------------------------------
src/totem-playlist.h | 3 +-
3 files changed, 31 insertions(+), 48 deletions(-)
---
diff --git a/src/totem-object.c b/src/totem-object.c
index 80bc7d0..99cf968 100644
--- a/src/totem-object.c
+++ b/src/totem-object.c
@@ -641,8 +641,15 @@ add_to_playlist_and_play_cb (TotemPlaylist *playlist, GAsyncResult *async_result
{
int end = -1;
gboolean playlist_changed;
+ GError *error = NULL;
+
+ playlist_changed = totem_playlist_add_mrl_finish (playlist, async_result, &error);
- playlist_changed = totem_playlist_add_mrl_finish (playlist, async_result);
+ if (playlist_changed == FALSE && error != NULL) {
+ /* FIXME: Crappy dialogue */
+ totem_object_show_error (data->totem, "", error->message);
+ g_error_free (error);
+ }
if (data->play)
end = totem_playlist_get_last (playlist);
diff --git a/src/totem-playlist.c b/src/totem-playlist.c
index c43b78f..5026182 100644
--- a/src/totem-playlist.c
+++ b/src/totem-playlist.c
@@ -169,32 +169,6 @@ static void init_treeview (GtkWidget *treeview, TotemPlaylist *playlist);
G_DEFINE_TYPE (TotemPlaylist, totem_playlist, GTK_TYPE_BOX)
/* Helper functions */
-static void
-totem_playlist_error (char *title, char *reason, TotemPlaylist *playlist)
-{
- GtkWidget *error_dialog;
-
- error_dialog =
- gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- "%s", title);
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (error_dialog),
- "%s", reason);
-
- gtk_container_set_border_width (GTK_CONTAINER (error_dialog), 5);
- gtk_dialog_set_default_response (GTK_DIALOG (error_dialog),
- GTK_RESPONSE_OK);
- g_signal_connect (G_OBJECT (error_dialog), "destroy", G_CALLBACK
- (gtk_widget_destroy), error_dialog);
- g_signal_connect (G_OBJECT (error_dialog), "response", G_CALLBACK
- (gtk_widget_destroy), error_dialog);
- gtk_window_set_modal (GTK_WINDOW (error_dialog), TRUE);
-
- gtk_widget_show (error_dialog);
-}
-
void
totem_playlist_select_subtitle_dialog(TotemPlaylist *playlist, TotemPlaylistSelectDialog mode)
{
@@ -431,10 +405,8 @@ totem_playlist_save_current_playlist_ext (TotemPlaylist *playlist, const char *o
output_file,
NULL, type, &error);
- if (retval == FALSE)
- {
- totem_playlist_error (_("Could not save the playlist"),
- error->message, playlist);
+ if (retval == FALSE) {
+ g_warning ("Playlist could not be saved: %s", error->message);
g_error_free (error);
}
@@ -1309,16 +1281,13 @@ add_mrl_data_free (AddMrlData *data)
}
static gboolean
-handle_parse_result (TotemPlParserResult res, TotemPlaylist *playlist, const gchar *mrl, const gchar
*display_name)
+handle_parse_result (TotemPlParserResult res, TotemPlaylist *playlist, const gchar *mrl, const gchar
*display_name, GError **error)
{
if (res == TOTEM_PL_PARSER_RESULT_UNHANDLED)
return totem_playlist_add_one_mrl (playlist, mrl, display_name, NULL, NULL, FALSE);
if (res == TOTEM_PL_PARSER_RESULT_ERROR) {
- char *msg;
-
- msg = g_strdup_printf (_("The playlist '%s' could not be parsed. It might be damaged."),
display_name ? display_name : mrl);
- totem_playlist_error (_("Playlist error"), msg, playlist);
- g_free (msg);
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ _("The playlist '%s' could not be parsed. It might be damaged."), display_name ?
display_name : mrl);
return FALSE;
}
@@ -1334,22 +1303,25 @@ add_mrl_cb (TotemPlParser *parser, GAsyncResult *result, AddMrlData *data)
TotemPlParserResult res;
GSimpleAsyncResult *async_result;
GError *error = NULL;
+ gboolean ret;
+
+ g_assert (data != NULL);
/* Finish parsing the playlist */
- res = totem_pl_parser_parse_finish (parser, result, &error);
+ res = totem_pl_parser_parse_finish (parser, result, NULL);
/* Remove the cursor, if one was set */
if (data->cursor)
g_application_unmark_busy (g_application_get_default ());
/* Create an async result which will return the result to the code which called
totem_playlist_add_mrl() */
+ ret = handle_parse_result (res, data->playlist, data->mrl, data->display_name, &error);
+ async_result = g_simple_async_result_new (G_OBJECT (data->playlist), data->callback, data->user_data,
totem_playlist_add_mrl);
if (error != NULL)
- async_result = g_simple_async_result_new_from_error (G_OBJECT (data->playlist),
data->callback, data->user_data, error);
- else
- async_result = g_simple_async_result_new (G_OBJECT (data->playlist), data->callback,
data->user_data, totem_playlist_add_mrl);
+ g_simple_async_result_take_error (async_result, error);
/* Handle the various return cases from the playlist parser */
- g_simple_async_result_set_op_res_gboolean (async_result, handle_parse_result (res, data->playlist,
data->mrl, data->display_name));
+ g_simple_async_result_set_op_res_gboolean (async_result, ret);
/* Free the closure's data, now that we're finished with it */
add_mrl_data_free (data);
@@ -1386,11 +1358,14 @@ totem_playlist_add_mrl (TotemPlaylist *playlist, const char *mrl, const char *di
}
gboolean
-totem_playlist_add_mrl_finish (TotemPlaylist *playlist, GAsyncResult *result)
+totem_playlist_add_mrl_finish (TotemPlaylist *playlist, GAsyncResult *result, GError **error)
{
g_assert (g_simple_async_result_get_source_tag (G_SIMPLE_ASYNC_RESULT (result)) ==
totem_playlist_add_mrl);
- return g_simple_async_result_get_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (result));
+ if (g_simple_async_result_get_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (result)))
+ return TRUE;
+ g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error);
+ return FALSE;
}
static gint64
@@ -1416,7 +1391,7 @@ totem_playlist_add_mrl_sync (TotemPlaylist *playlist,
g_return_val_if_fail (mrl != NULL, FALSE);
g_return_val_if_fail (starttime != NULL, FALSE);
- ret = handle_parse_result (totem_pl_parser_parse (playlist->priv->parser, mrl, FALSE), playlist, mrl,
NULL);
+ ret = handle_parse_result (totem_pl_parser_parse (playlist->priv->parser, mrl, FALSE), playlist, mrl,
NULL, NULL);
if (!ret)
return ret;
@@ -1566,7 +1541,7 @@ add_mrls_cb (TotemPlParser *parser, GAsyncResult *result, TotemPlaylistMrlData *
/* The entry is the next one in the order, so doesn't need to be added to the unadded list,
and can be added to playlist proper */
operation_data->next_index_to_add++;
- handle_parse_result (mrl_data->res, operation_data->playlist, mrl_data->mrl,
mrl_data->display_name);
+ handle_parse_result (mrl_data->res, operation_data->playlist, mrl_data->mrl,
mrl_data->display_name, NULL);
/* See if we can now add any other entries which have already been processed */
for (i = operation_data->unadded_entries;
@@ -1575,7 +1550,7 @@ add_mrls_cb (TotemPlParser *parser, GAsyncResult *result, TotemPlaylistMrlData *
TotemPlaylistMrlData *_mrl_data = (TotemPlaylistMrlData*) i->data;
operation_data->next_index_to_add++;
- handle_parse_result (_mrl_data->res, operation_data->playlist, _mrl_data->mrl,
_mrl_data->display_name);
+ handle_parse_result (_mrl_data->res, operation_data->playlist, _mrl_data->mrl,
_mrl_data->display_name, NULL);
}
operation_data->unadded_entries = i;
diff --git a/src/totem-playlist.h b/src/totem-playlist.h
index fe0a746..82c44bf 100644
--- a/src/totem-playlist.h
+++ b/src/totem-playlist.h
@@ -93,7 +93,8 @@ void totem_playlist_add_mrl (TotemPlaylist *playlist,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean totem_playlist_add_mrl_finish (TotemPlaylist *playlist,
- GAsyncResult *result);
+ GAsyncResult *result,
+ GError **error);
gboolean totem_playlist_add_mrl_sync (TotemPlaylist *playlist,
const char *mrl,
gint64 *starttime);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]