static int getattr_user(SeafileSession *seaf, const char *user, struct stat *stbuf) { SearpcClient *client; CcnetEmailUser *emailuser; client = ccnet_create_pooled_rpc_client (seaf->client_pool, NULL, "ccnet-threaded-rpcserver"); if (!client) { seaf_warning ("Failed to alloc rpc client.\n"); return -ENOMEM; } emailuser = get_user_from_ccnet (client, user); if (!emailuser) { ccnet_rpc_client_free (client); return -ENOENT; } g_object_unref (emailuser); ccnet_rpc_client_free (client); stbuf->st_mode = S_IFDIR | 0755; stbuf->st_nlink = 2; stbuf->st_size = 4096; return 0; }
static int readdir_user(SeafileSession *seaf, const char *user, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *info) { SearpcClient *client; CcnetEmailUser *emailuser; GList *list = NULL, *p; GString *name; client = ccnet_create_pooled_rpc_client (seaf->client_pool, NULL, "ccnet-threaded-rpcserver"); if (!client) { seaf_warning ("Failed to alloc rpc client.\n"); return -ENOMEM; } emailuser = get_user_from_ccnet (client, user); if (!emailuser) { ccnet_rpc_client_free (client); return -ENOENT; } g_object_unref (emailuser); ccnet_rpc_client_free (client); list = seaf_repo_manager_get_repos_by_owner (seaf->repo_mgr, user); if (!list) return 0; for (p = list; p; p = p->next) { SeafRepo *repo = (SeafRepo *)p->data; /* Don't list virtual repos. */ if (seaf_repo_manager_is_virtual_repo(seaf->repo_mgr, repo->id)) { seaf_repo_unref (repo); continue; } //skip the encrypted repo if(repo -> encrypted) continue; char *clean_repo_name = replace_slash (repo->name); name = g_string_new (""); g_string_printf (name, "%s_%s", repo->id, clean_repo_name); filler(buf, name->str, NULL, 0); g_string_free (name, TRUE); g_free (clean_repo_name); seaf_repo_unref (repo); } g_list_free (list); return 0; }