From 0f0bd37cc86508073cf7eee4f39b925261868cb2 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Sun, 2 Mar 2025 10:26:23 +0000 Subject: [PATCH] Get activities from server and refresh on session log --- client/src/activities_view.vala | 42 +++++++++++++++++++-------------- client/src/response.vala | 7 +++--- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/client/src/activities_view.vala b/client/src/activities_view.vala index 4867c94..3853518 100644 --- a/client/src/activities_view.vala +++ b/client/src/activities_view.vala @@ -1,6 +1,7 @@ namespace StudySystemClient { public class ActivitiesView : Gtk.Box { private Client client; + private Gtk.FlowBox card_container; public ActivitiesView(Client client) { margin_top = margin_bottom = margin_start = margin_end = 0; @@ -9,38 +10,43 @@ namespace StudySystemClient { var scrolled_window = new Gtk.ScrolledWindow(); scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER; scrolled_window.vexpand = true; + scrolled_window.add_css_class("card-container"); - var card_container = new Gtk.FlowBox(); + card_container = new Gtk.FlowBox(); card_container.homogeneous = true; card_container.min_children_per_line = 1; card_container.max_children_per_line = 1; card_container.selection_mode = Gtk.SelectionMode.NONE; card_container.valign = Gtk.Align.START; - scrolled_window.add_css_class("card-container"); - - var activities = new Activity[] { - { "Linguistics", ActivityType.EXERCISES }, - { "Cybernetics", ActivityType.EXERCISES }, - { "Linguistics", ActivityType.READING }, - { "Physics", ActivityType.READING }, - { "Cybernetics", ActivityType.READING }, - { "Physics", ActivityType.EXERCISES }, - }; - foreach (var activity in activities) { - var card = new ActivityCard(activity); - card.session_logged.connect(log_session); - card_container.append(card); - } - scrolled_window.set_child(card_container); + this.append(scrolled_window); + + refresh.begin((obj, res) => { + refresh.end(res); + }); + } + + private async void refresh() { + try { + var activities = yield client.list_activities(); + card_container.remove_all(); + foreach (var activity in activities) { + var card = new ActivityCard(activity); + card.session_logged.connect(log_session); + card_container.append(card); + } + } catch (ClientError e) { + stderr.printf("Error refreshing activities: %s\n", + e.message); + } } private async void log_session(string subject, ActivityType type, int minutes) { try { yield client.log_session(subject, type, minutes); - stderr.printf("Successfully logged session\n"); + yield refresh(); } catch (ClientError e) { stderr.printf("Error logging session: %s\n", e.message); } diff --git a/client/src/response.vala b/client/src/response.vala index 5e16bef..ad0c3db 100644 --- a/client/src/response.vala +++ b/client/src/response.vala @@ -40,7 +40,7 @@ namespace StudySystemClient.Response { protected enum Tag { ERROR = 0, ACK = 1, - PRIORITIZED_ACTIVITIES = 2, + ACTIVITIES = 2, } internal static Body from_datum(Der.Datum datum) throws DecodeError { @@ -54,9 +54,8 @@ namespace StudySystemClient.Response { return new Error.from_datum(choice.value); case Tag.ACK: return new Ack.from_datum(choice.value); - case Tag.PRIORITIZED_ACTIVITIES: - throw new DecodeError.NOT_IMPLEMENTED( - "PrioritizedActivities not yet implemented"); + case Tag.ACTIVITIES: + return new Activities.from_datum(choice.value); default: throw new DecodeError.INVALID_BODY( "Invalid ResponseBody tag");