int SeafileRpcClient::getCloneTasks(std::vector<CloneTask> *tasks) { GError *error = NULL; GList *objlist = searpc_client_call__objlist( seafile_rpc_client_, "seafile_get_clone_tasks", SEAFILE_TYPE_CLONE_TASK, &error, 0); if (error) { g_error_free(error); return -1; } for (GList *ptr = objlist; ptr; ptr = ptr->next) { CloneTask task = CloneTask::fromGObject((GObject *)ptr->data); if (task.state == "fetch") { getTransferDetail(&task); } else if (task.state == "checkout") { getCheckOutDetail(&task); } else if (task.state == "error") { if (task.error_str == "fetch") { getTransferDetail(&task); } } task.translateStateInfo(); tasks->push_back(task); } g_list_foreach (objlist, (GFunc)g_object_unref, NULL); g_list_free (objlist); return 0; }
CloneTask CloneTask::fromGObject(GObject *obj) { CloneTask task; char *state = NULL; char *error_str = NULL; char *repo_id = NULL; char *peer_id = NULL; char *repo_name = NULL; char *worktree = NULL; char *tx_id = NULL; g_object_get (obj, "state", &state, "error_str", &error_str, "repo_id", &repo_id, "peer_id", &peer_id, "repo_name", &repo_name, "worktree", &worktree, "tx_id", &tx_id, NULL); task.state = QString::fromUtf8(state); task.error_str = QString::fromUtf8(error_str); task.repo_id = QString::fromUtf8(repo_id); task.peer_id = QString::fromUtf8(peer_id); task.repo_name = QString::fromUtf8(repo_name); task.worktree = QString::fromUtf8(worktree); task.tx_id = QString::fromUtf8(tx_id); task.block_done = 0; task.block_total = 0; task.checkout_done = 0; task.checkout_total = 0; g_free (state); g_free (error_str); g_free (repo_id); g_free (peer_id); g_free (repo_name); g_free (worktree); g_free (tx_id); task.translateStateInfo(); return task; }