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; }
void CloneTasksTableView::prepareContextMenu(const CloneTask& task) { if (task.isCancelable()) { cancel_task_action_->setVisible(true); cancel_task_action_->setData(task.repo_id); } else { cancel_task_action_->setVisible(false); } if (task.isRemovable()) { remove_task_action_->setVisible(true); remove_task_action_->setData(task.repo_id); } else { remove_task_action_->setVisible(false); } }
void InitVirtualDriveDialog::checkDownloadProgress() { // First check for error std::vector<CloneTask> tasks; if (seafApplet->rpcClient()->getCloneTasks(&tasks) < 0) { return; } CloneTask task; for (size_t i = 0; i < tasks.size(); i++) { if (tasks[i].repo_id == default_repo_id_) { task = tasks[i]; break; } } if (!task.isValid()) { return; } if (task.state != "done" && task.state != "error") { return; } check_download_timer_->stop(); mRunInBackgroundBtn->setVisible(false); ensureVisible(); if (task.state == "error") { fail(tr("Error when downloading the default library: %1").arg(task.error_str)); return; } // Download is finished. Create the virutal disk in "My Computer". LocalRepo repo; seafApplet->rpcClient()->getLocalRepo(default_repo_id_, &repo); createVirtualDisk(repo); default_repo_path_ = repo.worktree; finish(); }