diff --git a/src/gui-course.c b/src/gui-course.c index 2613fc5e313ad03d3b8cb5ad014a1257e280b1ff..16169a696f432febb8625666f0fa5f02bba90db0 100644 --- a/src/gui-course.c +++ b/src/gui-course.c @@ -84,6 +84,15 @@ update_course_content (GtkWidget *self_widget, gpointer unused) } } +void +download_course_content (GtkWidget *self_widget, gpointer bool_download_selected_elements) +{ + GuiCourse *self = HDY_GUI_COURSE (self_widget); + gtk_container_foreach (GTK_CONTAINER (self->box_week), + &download_week_content, + bool_download_selected_elements); +} + static void course_content_obtained_cb (gpointer ptr, gpointer data) { diff --git a/src/gui-course.h b/src/gui-course.h index b825e7a7dacc9f292d72c674186d17b2df895b7d..ab0632460b9e2ad37725fd7bfce74dc74c7dffad 100644 --- a/src/gui-course.h +++ b/src/gui-course.h @@ -34,5 +34,8 @@ GuiCourse* gui_course_new (struct Course course_info); void update_course_content (GtkWidget *self_widget, gpointer unused); +void +download_course_content (GtkWidget *self_widget, + gpointer bool_download_selected_elements); G_END_DECLS diff --git a/src/gui-resource.c b/src/gui-resource.c index fb2cf7513de7792aa7f36f0533a5dbbe9d3e2a48..1917ffa0081511088ee8a9ae63f4087c7e09506d 100644 --- a/src/gui-resource.c +++ b/src/gui-resource.c @@ -150,6 +150,36 @@ activated_cb (GtkListBox* unused, GuiResource *self) gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (self), TRUE); } +static void +download_folder_content (gpointer self_ptr, gpointer folder_content_ptr) +{ + open_folder_cb (self_ptr, folder_content_ptr); // the info would be too good to lose + struct FolderContent *content = folder_content_ptr; + // TODO +} + +void +resource_download_content (GtkWidget *self_widget, gpointer unused) +{ + GuiResource *self = HDY_GUI_RESOURCE (self_widget); + switch (self->type) { + case RESOURCE_FILE: + moodle_provider_download_file_async (self->id, NULL, self); + break; + case RESOURCE_FOLDERFILE: + if (self->filename && self->id) + moodle_provider_download_file_by_filename_async (self->id, self->filename, NULL, self); + else + g_warning ("That's odd: missing filename and/or id :-/\n"); + break; + case RESOURCE_FOLDER: + moodle_provider_get_folder_content_async (download_folder_content, self->id, self); + break; + default: + break; + } +} + static void gui_resource_set_property (GObject *object, guint property_id, diff --git a/src/gui-resource.h b/src/gui-resource.h index b20937d21b62aba78946712e9e6bb9d2f6461e7a..3827f62b115e3da59b0ac3a9e4517adf2337cf7f 100644 --- a/src/gui-resource.h +++ b/src/gui-resource.h @@ -34,4 +34,6 @@ GuiResource *gui_resource_new (struct Resource file_info); void activated_cb (GtkListBox* unused, GuiResource *self); +void resource_download_content (GtkWidget *self_widget, gpointer unused); + G_END_DECLS diff --git a/src/gui-week.c b/src/gui-week.c index 1eda77224e91c0a7bb2f4dd3561d0a638f4014cf..7117293b3b1562b2e19528de69ad1103a18974d4 100644 --- a/src/gui-week.c +++ b/src/gui-week.c @@ -63,6 +63,22 @@ update_files (GuiWeek* self) } } +void +download_week_content (GtkWidget *self_widget, gpointer bool_download_selected_elements) +{ + GuiWeek *self = HDY_GUI_WEEK (self_widget); + if (GPOINTER_TO_INT (bool_download_selected_elements)) { + GList *resources = gtk_list_box_get_selected_rows (self->week_content); + g_list_foreach (resources, + (GFunc)&resource_download_content, + NULL); + } else { + gtk_container_foreach (GTK_CONTAINER (self->week_content), + &resource_download_content, + NULL); + } +} + static void gui_week_set_property (GObject *object, guint property_id, diff --git a/src/gui-week.h b/src/gui-week.h index 90359725bb64345bf7d623d5a4a9238bbe11efb0..a0a76b4e1235e744b5b5b3fa8bd71753f132d022 100644 --- a/src/gui-week.h +++ b/src/gui-week.h @@ -31,4 +31,8 @@ G_DECLARE_FINAL_TYPE (GuiWeek, gui_week, HDY, GUI_WEEK, GtkBox) GuiWeek* gui_week_new (struct Week week_info); +void +download_week_content (GtkWidget *self_widget, + gpointer bool_download_selected_elements); + G_END_DECLS diff --git a/src/gui-window.c b/src/gui-window.c index fd109e56b4ba269a1d215830ede861367c07156e..b3fe2e294e719f94375e61f62fc4c9c48f104bc2 100644 --- a/src/gui-window.c +++ b/src/gui-window.c @@ -84,6 +84,17 @@ activate_ask_pass (GSimpleAction *simple, gtk_widget_show (GTK_WIDGET (self->dialog)); } +static void +activate_download_current_course (GSimpleAction *simple, + GVariant *parameter, + gpointer ptr) +{ + // get current course + GuiWindow *self = ptr; + download_course_content (gtk_stack_get_visible_child (self->stack), + GINT_TO_POINTER (FALSE)); +} + /* static void activate_print_string (GSimpleAction *simple, @@ -356,7 +367,8 @@ gui_window_init (GuiWindow *self) G_CALLBACK (pass_changed_cb), self); const GActionEntry entries[] = { - { "ask-pass", activate_ask_pass }, + { "ask-pass", activate_ask_pass }, + { "download-current-course", activate_download_current_course }, //{ "print-string", activate_print_string, "s" } }; g_action_map_add_action_entries (G_ACTION_MAP (self), diff --git a/ui/gui-window.ui b/ui/gui-window.ui index b7b270b2375299b130a50c66a78b21da21f391bd..edf133c258fb6842932049717d1e85a1851892db 100644 --- a/ui/gui-window.ui +++ b/ui/gui-window.ui @@ -44,6 +44,29 @@ </object> </child> </object> + + <object class="GtkPopoverMenu" id="secondary_menu_popover"> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="margin">10</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkModelButton" id="download"> + <property name="text" translatable="yes">Download course files</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="action-name">win.download-current-course</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + </object> + <template class="GuiWindow" parent="GtkApplicationWindow"> <property name="can_focus">False</property> <property name="title">Moody</property> @@ -135,7 +158,7 @@ <property name="visible">False</property> <property name="can_focus">True</property> <property name="receives_default">True</property> - <!--<property name="popover">secondary_menu_popover</property>--> + <property name="popover">secondary_menu_popover</property> <child> <object class="GtkImage" id="open_secondary_menu"> <property name="visible">True</property>