Get activities from server and refresh on session log
This commit is contained in:
parent
bf876336f2
commit
0f0bd37cc8
@ -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);
|
||||
}
|
||||
|
@ -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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user