cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Announcements
Want to learn some quick and useful tips to make your day easier? Check out how Calvin uses Replay to get feedback from other teams at Dropbox here.

Dropbox API Support & Feedback

Find help with the Dropbox API from other developers.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Re: I want to get a list of files in a shared folder using Objective-C SDK

I want to get a list of files in a shared folder using Objective-C SDK

sin5
Explorer | Level 3
Go to solution

I'm using Objective-c SDK v2.


I used the initWithAccessToken method of the DBTeamClient class to get an instance of the DBUserClient class.

I used the listFolders method of sharingRoutes of DBUserClient to get the shared folders that exist in the root.

 

But, I don't know how to get the list of files that exist in the obtained shade folder.

It seems that the shade folder cannot be accessed by filesRoutes of DBUserClient.

 

What steps do I need to take to get a list of the files that exist in the shared folder?

 

1 Accepted Solution

Accepted Solutions

Greg-DB
Dropbox Staff
Go to solution

If pathLower is nil, that means that the folder is not "mounted", so it doesn't have a path in that account. I recommend reading the File Access Guide and the Team Files Guide for more information on how these mechanisms work. 

 

For reference, if you need to set the "Dropbox-API-Path-Root" header mentioned there, that's accessible via withPathRoot in the Objective-C SDK.

View solution in original post

6 Replies 6

Greg-DB
Dropbox Staff
Go to solution

You should use DBFILESUserAuthRoutes.listFolder/DBFILESUserAuthRoutes.listFolderContinue to list the contents of any particular folder (shared or not), by specifying the relevant path.

 

For example, when using DBSHARINGUserAuthRoutes.listFolders/DBSHARINGUserAuthRoutes.listFoldersContinue, you can get the path from the relevant DBSHARINGSharedFolderMetadataBase.pathLower returned in DBSHARINGListFoldersResult.entries.

sin5
Explorer | Level 3
Go to solution

Thank you Greg-DB.

 

I ran the following source to get DBSHARINGSharedFolderMetadataBase.

The folder shared in the personal folder was able to get the pathLower.

But, the DropBox Business team folder had a pathLower of nil.

 

Is the procedure different for the DropBox Business team folder?

 

DBUserClient *userClient = [teamClient userClientWithMemberId:_MY_MEMBER_ID_];

[[userClient.sharingRoutes listFolders] setResponseBlock:^(DBSHARINGListFoldersResult * _Nullable result, DBNilObject * _Nullable routeError, DBRequestError * _Nullable networkError) { for (DBSHARINGSharedFolderMetadata *entry in result.entries) { if(entry.pathLower==nil){ NSLog(@"pathLower is nil"); }else{ NSLog(entry.pathLower); } } }];

Greg-DB
Dropbox Staff
Go to solution

If pathLower is nil, that means that the folder is not "mounted", so it doesn't have a path in that account. I recommend reading the File Access Guide and the Team Files Guide for more information on how these mechanisms work. 

 

For reference, if you need to set the "Dropbox-API-Path-Root" header mentioned there, that's accessible via withPathRoot in the Objective-C SDK.

sin5
Explorer | Level 3
Go to solution

Thank you Greg-DB.

I was able to access the files in the Dropbox Business team folder.

 

I got a new user client by passing the folder ID of the shared folder to the withPathRoot method of the DBUserClient class.
I am using this new user client to access files in shared folders.

 

The code looks like this.

DBUserClient *userClient = [teamClient userClientWithMemberId:_MY_MEMBER_ID_];
[[userClient.sharingRoutes listFolders]
 setResponseBlock:^(DBSHARINGListFoldersResult * _Nullable result, DBNilObject * _Nullable routeError, DBRequestError * _Nullable networkError) {
    DBSHARINGSharedFolderMetadata *entry = result.entries[0];
    DBCOMMONPathRoot *pathRoot =[[DBCOMMONPathRoot alloc] initWithNamespaceId:entry.sharedFolderId];
    workUserClient =  [userClient withPathRoot:pathRoot];
    [[workUserClient.filesRoutes listFolder:path]
     setResponseBlock:^(DBFILESListFolderResult *result, DBFILESListFolderError *routeError, DBRequestError *error) {
        if (result)
        {
             ...
        }
    }];
}];

Please point out any mistakes.

Greg-DB
Dropbox Staff
Go to solution

Note that you should always implement listFolderContinue in addition to listFolder to be sure you get the full listing.

sin5
Explorer | Level 3
Go to solution

I recognized it.

Thank you for your support.

Need more support?