bool SeafileRpcClient::getCommitDiff(const QString& repo_id,
                                     const QString& commit_id,
                                     const QString& previous_commit_id,
                                     CommitDetails *details)
{
    QMutexLocker locker(&threaded_rpc_mutex_);

    GError *error = NULL;
    GList *objlist = searpc_client_call__objlist(
        seafile_threaded_rpc_client_,
        "seafile_diff",
        SEAFILE_TYPE_DIFF_ENTRY,
        &error, 4,
        "string", toCStr(repo_id),
        "string", toCStr(commit_id),
        "string", toCStr(previous_commit_id),
        "int", 1);

    if (error) {
        qWarning("failed to get changes in commit %.7s of repo %.7s", toCStr(commit_id), toCStr(repo_id));
        g_error_free(error);
        return false;
    }

    *details = CommitDetails::fromObjList(objlist);

    g_list_foreach (objlist, (GFunc)g_object_unref, NULL);
    g_list_free (objlist);
    return true;
}
示例#2
0
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;
}
示例#3
0
GList *
ccnet_get_group_members (SearpcClient *client, int group_id)
{
    return searpc_client_call__objlist (
        client, "get_group_members", CCNET_TYPE_GROUP_USER, NULL,
        1, "int", group_id);
}
示例#4
0
GList *
seafile_get_repo_list (SearpcClient *client,
                       int offset,
                       int limit, GError **error)
{
    return searpc_client_call__objlist (
        client, "seafile_get_repo_list", SEAFILE_TYPE_REPO, error,
        2, "int", offset, "int", limit);
}
示例#5
0
GList *
ccnet_get_groups_by_user (SearpcClient *client, const char *user)
{
    if (!user)
        return NULL;

    return searpc_client_call__objlist (
        client, "get_groups", CCNET_TYPE_GROUP, NULL,
        1, "string", user);
}
示例#6
0
GList *
ccnet_get_peers_by_role (SearpcClient *client, const char *role)
{
    if (!role)
        return NULL;

    return searpc_client_call__objlist (
        client, "get_peers_by_role", CCNET_TYPE_PEER, NULL,
        1, "string", role);
}
示例#7
0
文件: searpc.c 项目: haiwen/libsearpc
void
test_searpc__objlist_call (void)
{
    GList *result, *ptr;
    GError *error = NULL;

    result = searpc_client_call__objlist (client, "get_maman_bar_list",
                                          MAMAN_TYPE_BAR, &error,
                                          2, "string", "kitty", "int", 10);
    cl_assert (error == NULL);
    for (ptr = result; ptr; ptr = ptr->next)
        g_object_unref (ptr->data);
    g_list_free (result);

    result =  searpc_client_call__objlist (client, "get_maman_bar_list",
                                           MAMAN_TYPE_BAR, &error,
                                           2, "string", "kitty", "int", 0);
    cl_assert (error == NULL);
    for (ptr = result; ptr; ptr = ptr->next)
        g_object_unref (ptr->data);
    g_list_free (result);
}
示例#8
0
void
rpc_glist_test(int sockfd, struct sockaddr_in *servaddr, SearpcClient *rpc_client, GError *error)
{
    int count = 4, len = 11;
    char str[16] = "A rpc test.";
    GList *ans=searpc_client_call__objlist(rpc_client, "searpc_objlisttest",
                                           TEST_OBJECT_TYPE, &error, 3,
                                           "int", count,
                                           "int", len,
                                           "string", str);

    json_t *object=json_object();
    searpc_set_objlist_to_ret_object (object,ans);

    if (error != NULL) {
        fprintf(stderr, "error: %s\n", error->message);
        exit(-1);
    } 
    else printf("%s\n", json_dumps (object, JSON_INDENT(2)));
    
    json_t *array = json_object_get (object, "ret");
    if (json_array_size(array) != count) {
        printf("Glisttest fail.\n");
        return;
    }
    int i;
    for (i = 0; i != count; ++i) {
        json_t *member = json_array_get(array, i);
        if (json_integer_value (json_object_get (member, "len"))!=len) {
            printf("Glisttest fail.\n");
            return;
        }
        if (strcmp (json_string_value (json_object_get (member, "str")), str)) {
            printf("Glisttest fail.\n");
            return;
        }
        if ((json_is_false (json_object_get (member, "equal"))) == (strlen(str)==len)) {
            printf("Glisttest fail.\n");
            return;
        }
    }

    json_decref(object);
    printf("Glisttest succeed.\n");
    close(sockfd);
}
示例#9
0
int SeafileRpcClient::getServers(GList** servers)
{
    GError *error = NULL;
    GList *objlist = searpc_client_call__objlist(
        ccnet_rpc_client_,
        "get_peers_by_role",
        CCNET_TYPE_PEER,
        &error, 1,
        "string", "MyRelay");

    if (error) {
        return -1;
    }

    *servers = objlist;

    return 0;
}
示例#10
0
int SeafileRpcClient::getCloneTasksCount(int *count)
{
    GError *error = NULL;
    GList *objlist = searpc_client_call__objlist(
        seafile_rpc_client_,
        "seafile_get_clone_tasks",
        SEAFILE_TYPE_CLONE_TASK,
        &error, 0);

    if (error) {
        return -1;
    }

    if (count) {
        *count = g_list_length(objlist);
    }

    g_list_foreach (objlist, (GFunc)g_object_unref, NULL);
    g_list_free (objlist);

    return 0;
}
示例#11
0
文件: readdir.c 项目: janBest/seafile
static GList *get_users_from_ccnet (SearpcClient *client, const char *source)
{
    return searpc_client_call__objlist (client,
                                        "get_emailusers", CCNET_TYPE_EMAIL_USER, NULL,
                                        3, "string", source, "int", -1, "int", -1);
}