gboolean sync_run_cli(JamAccountLJ *acc) { SyncStatus st = {0}, *status = &st; GSList *warnings = NULL, *l; GError *err = NULL; char *id; gboolean success; status->account = acc; id = jam_account_id_strdup(JAM_ACCOUNT(status->account)); g_print(_("Synchronizing '%s'..."), id); g_print("\n"); g_free(id); success = sync_run_internal(status, sync_run_verb_cli, sync_progress_cli, NULL, &warnings, &err); if (warnings) { g_print(_("Warnings:\n")); for (l = warnings; l; l = l->next) g_print("\t%s\n", (char*)l->data); g_slist_foreach(warnings, (GFunc)g_free, NULL); g_slist_free(warnings); } if (err) { g_print(_("Error: %s\n"), err->message); g_error_free(err); success = FALSE; } return success; }
/* through callbacks, this function manages to drive both * the gtk and the cli sync. */ static gboolean sync_run_internal(SyncStatus *status, LJRunVerbCallback sync_run_verb, LJSyncProgressCallback sync_progress, gpointer parent, GSList **warnings, GError **err) { GError *tmperr = NULL; gboolean success = FALSE; char *lastsync = NULL; status->js = journal_store_open(JAM_ACCOUNT(status->account), TRUE, &tmperr); if (!status->js) goto err; lastsync = journal_store_get_lastsync(status->js); if (!lj_sync_run(jam_account_lj_get_user(status->account), NULL /* usejournal */, lastsync, put_lastsync, sync_run_verb, put_entries, sync_progress, status, warnings, &tmperr)) goto err; success = TRUE; err: if (tmperr) g_propagate_error(err, tmperr); g_free(lastsync); if (status->js) journal_store_free(status->js); return success; }
gboolean login_check_lastupdate(GtkWindow *parent, JamAccountLJ *acclj) { time_t deltat; GtkWidget *dlg; char *msg; gboolean ret = TRUE; JamAccount *acc = JAM_ACCOUNT(acclj); if (!conf.options.showloginhistory) return login_run(NULL, acclj); deltat = time(NULL) - acclj->lastupdate; if (deltat < 2 * 7 * 24 * 60 * 60) /* two weeks. */ return TRUE; if (acclj->lastupdate == 0) { msg = g_strdup_printf(_("Account '%s' hasn't ever logged in. " "Log in now?"), jam_account_get_username(acc)); } else { msg = g_strdup_printf(_("Account '%s' hasn't logged in " "in at least %lu days. Log in now?"), jam_account_get_username(acc), (unsigned long) deltat/(24*60*60)); } dlg = gtk_message_dialog_new(parent, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, msg); g_free(msg); if (gtk_dialog_run(GTK_DIALOG(dlg)) == GTK_RESPONSE_YES) ret = login_run(GTK_WINDOW(dlg), acclj); gtk_widget_destroy(dlg); /* no matter what they answered, we shouldn't bug them again * next time if they said no. the only case to bug them again * is if login failed. */ if (ret) acclj->lastupdate = time(NULL); return ret; }