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: How to get team root folder by SwiftyDropbox?

How to get team root folder by SwiftyDropbox?

Boneless
Helpful | Level 6
Go to solution

Hi Dropbox Forum,

 

I want to get team root folder by SwiftyDropbox. but fail.

this is what I do

 

1.Set .plist file

 

2.Set AppKey in AppDelegate

 

DropboxClientsManager.setupWithAppKey("xxxxxxx")

 

 

3.authorization(use team account login)

 

        if let _ = DropboxClientsManager.authorizedTeamClient {
            DropboxClientsManager.unlinkClients()
        }
        
        if let _ = DropboxClientsManager.authorizedClient {
            DropboxClientsManager.unlinkClients()
        }

DropboxClientsManager.authorizeFromController(UIApplication.shared,
                                                      controller: self,
                                                      openURL: { (url: URL) -> Void in
                                                        UIApplication.shared.open(url, options: [:], completionHandler: {success in
                                                            if success{
                                                                print("Open URL success")
                                                            }else{
                                                                print("Open URL fail")
                                                            }
                                                        })
        })

 

 

4. then in AppDelegate

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool

 

        let oauthCompletion: DropboxOAuthCompletion = {
            
            if let authResult = $0 {
                switch authResult {
                case .success:
                    print("Success! User is logged into DropboxClientsManager.")
                    
                    let a = client?.users.getCurrentAccount()
                    a?.response(completionHandler: { user, error in
                        print("user:\(user), error: \(error)")
                        print("accountType:\(user?.accountType)")
                        print("rootNamespaceId:\(user?.rootInfo.rootNamespaceId)")
                    })
                    
                case .cancel:
                    print("Authorization flow was manually canceled by user!")
                    
                case .error(_, let description):
                    print("Error: \(String(describing: description))")
                    
                    let hud = MBProgressHUD.showAdded(to: UIApplication.shared.keyWindow!, animated: true)
                    hud.label.text = "Login failed"
                    hud.hide(animated: true, afterDelay: 1)
                    
                }
            }
        }

DropboxClientsManager.handleRedirectURL(url, completion: oauthCompletion)

 

 

5. Set a button to listFolder

I see this post  "Using the Dropbox-API-Path-Root Header", but don't know how to set it in SwiftyDropbox.

https://www.dropbox.com/lp/developers/reference/dbx-team-files-guide#namespaces

 

func getList(){
let client = DropboxClientsManager.authorizedClient?.withPathRoot(.namespaceId("xxxxxx"))//root_namespace_id get from oauthCompletion client?.users.getCurrentAccount().response(completionHandler: {user, error in print("user:\(user) error:\(error)")})
client?.files.listFolder(path: filePath ,includeMountedFolders: true).response(completionHandler: {response, error in if response?.entries != nil{ self.parseDropboxEntries(entries: response!.entries) } })
}

it show error and can't list folder:

Spoiler

user:nil error:Optional(Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://api.dropbox.com/2/users/get_current_account, NSErrorFailingURLKey=https://api.dropbox.com/2/users/get_current_account, _NSURLErrorRelatedURLSessionTaskErrorKey=(

    "LocalDataTask <xxxxxxxxxxxxxxxxxxxxxxxxxxx>.<1>"

), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <xxxxxxxxxxxxxxxxxxxxxxxxxxx>.<1>, NSLocalizedDescription=cancelled})

 

Can anyone help me ? thank you

 

 
10 Replies 10

Boneless
Helpful | Level 6
Go to solution

Thank you!

We solved the problem of setting "withPathRoot" by SwiftyDropbox.

For other people has the same problem, I record what I do here.

 

I set class variable as you said(Most important).

var dropboxClient:DropboxClient?

 

login then do those things

        dropboxClient = DropboxClientsManager.authorizedClient
        dropboxClient?.users.getCurrentAccount().response(completionHandler: {user, error in
            
            let rootNamespaceId = user?.rootInfo.rootNamespaceId
            if rootNamespaceId != nil{
                self.dropboxClient = DropboxClientsManager.authorizedClient?.withPathRoot(.namespaceId(user?.rootInfo.rootNamespaceId ?? ""))
            }
            
            self.dropboxClient?.files.listFolder(path: self.filePath).response(completionHandler: {response, error in 
                
                //Parse
                if response?.entries != nil{
                    self.parseDropboxEntries(entries: response!.entries)
                }
                
            })
        })

 

Need more support?