From e0c837642b5db5aa54ee6185e4fd513503b0736d Mon Sep 17 00:00:00 2001 From: sergiotarxz Date: Sun, 23 Jan 2022 11:35:31 +0100 Subject: [PATCH] Better yet image download. --- include/openmg/view/controls.h | 1 + include/openmg/view/picture.h | 2 +- src/view/chapter_view.c | 2 +- src/view/detail_manga.c | 2 +- src/view/list_view_manga.c | 9 +++++++-- src/view/main_view.c | 1 + src/view/picture.c | 4 ++-- src/view/search.c | 2 ++ 8 files changed, 16 insertions(+), 7 deletions(-) diff --git a/include/openmg/view/controls.h b/include/openmg/view/controls.h index b8b01ad..9b85571 100644 --- a/include/openmg/view/controls.h +++ b/include/openmg/view/controls.h @@ -11,6 +11,7 @@ typedef struct { AdwViewStack *view_stack; GCancellable **image_threads; size_t image_threads_len; + bool avoid_list_image_downloads; GtkButton *previous; gboolean is_set_previous; } ControlsAdwaita; diff --git a/include/openmg/view/picture.h b/include/openmg/view/picture.h index b2e6d4e..69e273a 100644 --- a/include/openmg/view/picture.h +++ b/include/openmg/view/picture.h @@ -3,4 +3,4 @@ GtkPicture * create_picture_from_url (const char *const url, gint picture_size, GAsyncReadyCallback ready, gpointer source_object, - gpointer callback_data); + gpointer callback_data, bool do_not_download); diff --git a/src/view/chapter_view.c b/src/view/chapter_view.c index 4d5f414..e773de5 100644 --- a/src/view/chapter_view.c +++ b/src/view/chapter_view.c @@ -168,7 +168,7 @@ set_image_zoomable_picture_container (ChapterVisorData *chapter_visor_data) { strlen (url_image_not_owned)); GtkPicture *picture = create_picture_from_url (url_image, 0, picture_ready_manga_page, - zoomable_picture_container, chapter_visor_data); + zoomable_picture_container, chapter_visor_data, false); if (picture) { chapter_visor_data->current_picture = GTK_PICTURE (picture); g_signal_connect (G_OBJECT (picture), "map", diff --git a/src/view/detail_manga.c b/src/view/detail_manga.c index 141fabf..5089218 100644 --- a/src/view/detail_manga.c +++ b/src/view/detail_manga.c @@ -90,7 +90,7 @@ create_detail_view (MgManga *manga, ControlsAdwaita *controls) { GtkListView *chapter_list = NULL; char *url_image = mg_manga_get_image_url(manga); GtkPicture *picture = create_picture_from_url (url_image, 200, - picture_ready_manga_detail, avatar_title_box, NULL); + picture_ready_manga_detail, avatar_title_box, NULL, false); char *manga_title_text = mg_manga_get_title (manga); char *title_text = mg_util_xml_get_title_text ( xml_util, manga_title_text); diff --git a/src/view/list_view_manga.c b/src/view/list_view_manga.c index 9a7c1fd..81047c1 100644 --- a/src/view/list_view_manga.c +++ b/src/view/list_view_manga.c @@ -26,6 +26,7 @@ manga_selected (GtkListView *list_view, guint position, gpointer user_data) { ControlsAdwaita *controls = (ControlsAdwaita *) user_data; + controls->avoid_list_image_downloads = true;; for (size_t i = 0; i < controls->image_threads_len; i++) { g_cancellable_cancel (controls->image_threads[i]); } @@ -52,6 +53,7 @@ manga_selected (GtkListView *list_view, GtkBox *detail_view = create_detail_view (manga, controls); adw_leaflet_append (views_leaflet, GTK_WIDGET (detail_view)); adw_leaflet_navigate (views_leaflet, ADW_NAVIGATION_DIRECTION_FORWARD); + controls->avoid_list_image_downloads = false; } #ifdef LIST_IMAGES @@ -80,10 +82,13 @@ setup_list_view_mangas (GtkSignalListItemFactory *factory, char *image_url = mg_manga_get_image_url (manga); GtkWidget *label = gtk_label_new (manga_title); + GtkPicture *picture = NULL; #ifdef LIST_IMAGES + printf ("%d\n", controls->avoid_list_image_downloads); GCancellable *cancellable = g_cancellable_new (); - GtkPicture *picture = create_picture_from_url (image_url, 100, - picture_ready_manga_preview, box, cancellable); + picture = create_picture_from_url (image_url, 100, + picture_ready_manga_preview, box, cancellable, + controls->avoid_list_image_downloads); controls->image_threads_len++; controls->image_threads = g_realloc (controls->image_threads, controls->image_threads_len * sizeof *(controls->image_threads)); diff --git a/src/view/main_view.c b/src/view/main_view.c index f05ac0d..675566a 100644 --- a/src/view/main_view.c +++ b/src/view/main_view.c @@ -56,6 +56,7 @@ activate (AdwApplication *app, controls->view_stack = view_stack; controls->image_threads_len = 0; controls->image_threads = NULL; + controls->avoid_list_image_downloads = false; views_leaflet_explore = create_explore_leaflet (controls, swipe_back); views_leaflet_search = create_search_leaflet (controls, swipe_back); diff --git a/src/view/picture.c b/src/view/picture.c index 5c01dbe..fc52004 100644 --- a/src/view/picture.c +++ b/src/view/picture.c @@ -96,7 +96,7 @@ free_picture_thread_attributes (gpointer user_data) { GtkPicture * create_picture_from_url (const char *const url, gint picture_size, GAsyncReadyCallback ready, gpointer source_object, - gpointer callback_data) { + gpointer callback_data, bool do_not_download) { GtkPicture *picture = NULL; GFile *image = NULL; GdkTexture *texture = NULL; @@ -118,7 +118,7 @@ create_picture_from_url (const char *const url, gint picture_size, g_object_set_property_int (G_OBJECT(picture), "width-request", picture_size); } - } else { + } else if (!do_not_download) { GTask *task = g_task_new (source_object, NULL, ready, callback_data); PictureThreadAttributes *attrs = g_malloc (sizeof *attrs); attrs->url = g_malloc (url_len * sizeof *url); diff --git a/src/view/search.c b/src/view/search.c index 2bc67c6..dfb1343 100644 --- a/src/view/search.c +++ b/src/view/search.c @@ -59,9 +59,11 @@ search_text_changed (GtkEntry *entry, } controls->image_threads = NULL; controls->image_threads_len = 0; + controls->avoid_list_image_downloads = true; if (!mangas) return; GtkSingleSelection *selection = GTK_SINGLE_SELECTION ( gtk_list_view_get_model (list_view_mangas)); gtk_single_selection_set_model (selection, G_LIST_MODEL (mangas)); + controls->avoid_list_image_downloads = false; }