Get activities from server and refresh on session log
This commit is contained in:
parent
bf876336f2
commit
0f0bd37cc8
@ -1,6 +1,7 @@
|
|||||||
namespace StudySystemClient {
|
namespace StudySystemClient {
|
||||||
public class ActivitiesView : Gtk.Box {
|
public class ActivitiesView : Gtk.Box {
|
||||||
private Client client;
|
private Client client;
|
||||||
|
private Gtk.FlowBox card_container;
|
||||||
|
|
||||||
public ActivitiesView(Client client) {
|
public ActivitiesView(Client client) {
|
||||||
margin_top = margin_bottom = margin_start = margin_end = 0;
|
margin_top = margin_bottom = margin_start = margin_end = 0;
|
||||||
@ -9,38 +10,43 @@ namespace StudySystemClient {
|
|||||||
var scrolled_window = new Gtk.ScrolledWindow();
|
var scrolled_window = new Gtk.ScrolledWindow();
|
||||||
scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER;
|
scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER;
|
||||||
scrolled_window.vexpand = true;
|
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.homogeneous = true;
|
||||||
card_container.min_children_per_line = 1;
|
card_container.min_children_per_line = 1;
|
||||||
card_container.max_children_per_line = 1;
|
card_container.max_children_per_line = 1;
|
||||||
card_container.selection_mode = Gtk.SelectionMode.NONE;
|
card_container.selection_mode = Gtk.SelectionMode.NONE;
|
||||||
card_container.valign = Gtk.Align.START;
|
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);
|
scrolled_window.set_child(card_container);
|
||||||
|
|
||||||
this.append(scrolled_window);
|
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,
|
private async void log_session(string subject, ActivityType type,
|
||||||
int minutes) {
|
int minutes) {
|
||||||
try {
|
try {
|
||||||
yield client.log_session(subject, type, minutes);
|
yield client.log_session(subject, type, minutes);
|
||||||
stderr.printf("Successfully logged session\n");
|
yield refresh();
|
||||||
} catch (ClientError e) {
|
} catch (ClientError e) {
|
||||||
stderr.printf("Error logging session: %s\n", e.message);
|
stderr.printf("Error logging session: %s\n", e.message);
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ namespace StudySystemClient.Response {
|
|||||||
protected enum Tag {
|
protected enum Tag {
|
||||||
ERROR = 0,
|
ERROR = 0,
|
||||||
ACK = 1,
|
ACK = 1,
|
||||||
PRIORITIZED_ACTIVITIES = 2,
|
ACTIVITIES = 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Body from_datum(Der.Datum datum) throws DecodeError {
|
internal static Body from_datum(Der.Datum datum) throws DecodeError {
|
||||||
@ -54,9 +54,8 @@ namespace StudySystemClient.Response {
|
|||||||
return new Error.from_datum(choice.value);
|
return new Error.from_datum(choice.value);
|
||||||
case Tag.ACK:
|
case Tag.ACK:
|
||||||
return new Ack.from_datum(choice.value);
|
return new Ack.from_datum(choice.value);
|
||||||
case Tag.PRIORITIZED_ACTIVITIES:
|
case Tag.ACTIVITIES:
|
||||||
throw new DecodeError.NOT_IMPLEMENTED(
|
return new Activities.from_datum(choice.value);
|
||||||
"PrioritizedActivities not yet implemented");
|
|
||||||
default:
|
default:
|
||||||
throw new DecodeError.INVALID_BODY(
|
throw new DecodeError.INVALID_BODY(
|
||||||
"Invalid ResponseBody tag");
|
"Invalid ResponseBody tag");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user