Convert MainWindow to use MainWindowInfoBars for status problems
Sysnthesise a problem report and use a MainWindowInfoBar for displaying account service status problems rather than using a custom info bar. This lets us use the same infrastructure for displaying problem reports and will enable capturing relevant logs at the time that the error occurred.
This commit is contained in:
parent
c2ca6954d9
commit
b91bf818bb
2 changed files with 23 additions and 156 deletions
|
|
@ -77,19 +77,13 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
|
|||
[GtkChild]
|
||||
private Gtk.InfoBar offline_infobar;
|
||||
|
||||
[GtkChild]
|
||||
private Gtk.InfoBar service_problem_infobar;
|
||||
|
||||
[GtkChild]
|
||||
private Gtk.Button service_problem_details;
|
||||
|
||||
[GtkChild]
|
||||
private Gtk.InfoBar cert_problem_infobar;
|
||||
|
||||
[GtkChild]
|
||||
private Gtk.InfoBar auth_problem_infobar;
|
||||
|
||||
private Geary.Account? service_problem_account = null;
|
||||
private MainWindowInfoBar? service_problem_infobar = null;
|
||||
|
||||
/** Fired when the user requests an account status be retried. */
|
||||
public signal void retry_service_problem(Geary.ClientService.Status problem);
|
||||
|
|
@ -143,7 +137,7 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
|
|||
public void update_account_status(Geary.Account.Status status,
|
||||
bool has_auth_error,
|
||||
bool has_cert_error,
|
||||
Geary.Account? service_problem) {
|
||||
Geary.Account? problem_source) {
|
||||
// Only ever show one at a time. Offline is primary since
|
||||
// nothing else can happen when offline. Service problems are
|
||||
// secondary since auth and cert problems can't be resolved
|
||||
|
|
@ -164,11 +158,25 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
|
|||
show_auth = true;
|
||||
}
|
||||
|
||||
this.service_problem_account = service_problem;
|
||||
if (show_service && this.service_problem_infobar == null) {
|
||||
Geary.ClientService? service = (
|
||||
problem_source.incoming.last_error != null
|
||||
? problem_source.incoming
|
||||
: problem_source.outgoing
|
||||
);
|
||||
this.service_problem_infobar = new MainWindowInfoBar.for_problem(
|
||||
new Geary.ServiceProblemReport(
|
||||
problem_source.information,
|
||||
service.configuration,
|
||||
service.last_error.thrown
|
||||
)
|
||||
);
|
||||
this.service_problem_infobar.retry.connect(on_service_problem_retry);
|
||||
|
||||
show_infobar(this.service_problem_infobar);
|
||||
}
|
||||
|
||||
this.offline_infobar.set_visible(show_offline);
|
||||
this.service_problem_infobar.set_visible(show_service);
|
||||
this.service_problem_details.set_visible(get_problem_service() != null);
|
||||
this.cert_problem_infobar.set_visible(show_cert);
|
||||
this.auth_problem_infobar.set_visible(show_auth);
|
||||
update_infobar_frame();
|
||||
|
|
@ -703,7 +711,7 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
|
|||
// Ensure the info bar frame is shown only when it has visible
|
||||
// children
|
||||
bool show_frame = false;
|
||||
info_bar_container.foreach((child) => {
|
||||
this.info_bar_container.foreach((child) => {
|
||||
if (child.visible) {
|
||||
show_frame = true;
|
||||
}
|
||||
|
|
@ -724,18 +732,6 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
|
|||
}
|
||||
}
|
||||
|
||||
private Geary.ClientService? get_problem_service() {
|
||||
Geary.ClientService? service = null;
|
||||
if (this.service_problem_account != null) {
|
||||
if (this.service_problem_account.incoming.last_error != null) {
|
||||
service = this.service_problem_account.incoming;
|
||||
} else if (this.service_problem_account.outgoing.last_error != null) {
|
||||
service = this.service_problem_account.outgoing;
|
||||
}
|
||||
}
|
||||
return service;
|
||||
}
|
||||
|
||||
private SimpleAction get_action(string name) {
|
||||
return (SimpleAction) lookup_action(name);
|
||||
}
|
||||
|
|
@ -801,29 +797,11 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
|
|||
update_infobar_frame();
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_service_problem_retry() {
|
||||
this.service_problem_infobar.hide();
|
||||
update_infobar_frame();
|
||||
this.service_problem_infobar = null;
|
||||
retry_service_problem(Geary.ClientService.Status.CONNECTION_FAILED);
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_service_problem_details() {
|
||||
Geary.ClientService? service = get_problem_service();
|
||||
if (service != null) {
|
||||
Dialogs.ProblemDetailsDialog dialog =
|
||||
new Dialogs.ProblemDetailsDialog(
|
||||
this,
|
||||
service.last_error,
|
||||
this.service_problem_account.information,
|
||||
service.configuration
|
||||
);
|
||||
dialog.run();
|
||||
dialog.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_cert_problem_retry() {
|
||||
this.cert_problem_infobar.hide();
|
||||
|
|
|
|||
|
|
@ -234,117 +234,6 @@ You will not be able to send or receive email until it is re-connected.</propert
|
|||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkInfoBar" id="service_problem_infobar">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="message_type">error</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="service_problem_details">
|
||||
<property name="label" translatable="yes" comments="Button label for displaying technical details about an account problem">Details</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes" comments="Button tooltip for displaying technical details about an account problem">View technical details about the error</property>
|
||||
<signal name="clicked" handler="on_service_problem_details" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes" comments="Button label for retrying an account problem">Retry</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes" comments="Button tooltip for retrying an account problem">Try reconnecting</property>
|
||||
<signal name="clicked" handler="on_service_problem_retry" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="content_area">
|
||||
<object class="GtkBox">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">16</property>
|
||||
<child>
|
||||
<object class="GtkGrid">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="service_problem_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label" translatable="yes" comments="Infobar title when one or more accounts have encounted an error">Account problem</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="service_problem_description">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes" comments="Label and tooltip for account service problem infobar">Geary encountered a problem connecting to an account.
|
||||
Please check your Internet connection, the server configuration and try again.</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label" translatable="yes" comments="Label and tooltip for account service problem infobar">Geary encountered a problem connecting to an account.</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="sigh"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkInfoBar" id="cert_problem_infobar">
|
||||
<property name="can_focus">False</property>
|
||||
|
|
@ -439,7 +328,7 @@ Please check the server configuration and try again.</property>
|
|||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
|
@ -536,7 +425,7 @@ Please check your login name and try again.</property>
|
|||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue