void SeafileRpcClient::getSyncStatus(LocalRepo &repo) { if (repo.worktree_invalid) { repo.setSyncInfo("error", "invalid worktree"); return; } GError *error = NULL; SeafileSyncTask *task = (SeafileSyncTask *) searpc_client_call__object (seafile_rpc_client_, "seafile_get_repo_sync_task", SEAFILE_TYPE_SYNC_TASK, &error, 1, "string", toCStr(repo.id)); if (error) { repo.setSyncInfo("unknown"); return; } if (!task) { repo.setSyncInfo("waiting for sync"); return; } char *state = NULL; char *err = NULL; g_object_get(task, "state", &state, "error", &err, NULL); repo.setSyncInfo(state, g_strcmp0(state, "error") == 0 ? err : NULL); g_free (state); g_free (err); g_object_unref(task); }
void SeafileRpcClient::getSyncStatus(LocalRepo &repo) { if (repo.worktree_invalid) { repo.setSyncInfo("error", "invalid worktree"); return; } GError *error = NULL; SeafileSyncTask *task = (SeafileSyncTask *) searpc_client_call__object (seafile_rpc_client_, "seafile_get_repo_sync_task", SEAFILE_TYPE_SYNC_TASK, &error, 1, "string", toCStr(repo.id)); if (error) { repo.setSyncInfo("unknown"); g_error_free(error); return; } if (!task) { repo.setSyncInfo("waiting for sync"); return; } char *state = NULL; char *err = NULL; g_object_get(task, "state", &state, "error", &err, NULL); // seaf-daemon would retry three times for errors like quota/permission // before setting the "state" field to "error", but the GUI should display // the error from the beginning. if (err != NULL && strlen(err) > 0 && strcmp(err, "Success") != 0) { state = g_strdup("error"); } repo.setSyncInfo(state, g_strcmp0(state, "error") == 0 ? err : NULL); if (repo.sync_state == LocalRepo::SYNC_STATE_ING) { getRepoTransferInfo(repo.id, &repo.transfer_rate, &repo.transfer_percentage); } g_free (state); g_free (err); g_object_unref(task); }
void RepoTreeModel::updateRepoItemAfterSyncNow(RepoItem *item, void *data) { QString repo_id = *(QString *)data; LocalRepo r = item->localRepo(); if (r.isValid() && r.id == repo_id) { // We manually set the sync state of the repo to "SYNC_STATE_ING" to give // the user immediate feedback r.setSyncInfo("initializing"); r.sync_state = LocalRepo::SYNC_STATE_ING; r.sync_state_str = tr("sync initializing"); item->setLocalRepo(r); item->setSyncNowClicked(true); } }