Oranutachi
Oranutachi

Reputation: 1279

How to filter files by extension in the Google Drive API (Swift 5)

In my app I use the Google Drive API. I fetch file list and load it to the TableView. But I want to load only folders and audio files. I can figure out where the folder is and where the file is, but I can't filter files by extension. I try to use: .fileExtension == "mp3" when I fetch file list, but it doesn't work. Can anybody help me? Here is my code:

...
var unreformedFileList: [AnyObject] = []
var fileListTicket: GTLRServiceTicket?
...
private lazy var driveService: GTLRDriveService = {
        let service = GTLRDriveService()
        if let user = GlobalEntitie.Variable.googleUser {
        service.authorizer = user.authentication.fetcherAuthorizer()
        }
        service.shouldFetchNextPages = true
        service.isRetryEnabled = true
        return service
    }()
...
var files: [FileModelProtocol] {
        guard let files = unreformedFileList as? [GTLRDrive_File] else { return [] }
        return files.map { GoogleDriveFileModel($0) }
    }
...
func fetchFileList(path: String?, _ completion: @escaping () -> Void) {
        let query = GTLRDriveQuery_FilesList.query()
        query.fields = "kind,nextPageToken,files(mimeType,id,kind,name,webViewLink,thumbnailLink,trashed)"

        fileListTicket = driveService.executeQuery(query,
                                                   completionHandler: { [weak self] (_, resultObject, error) in
                                                    
                                                    if let error = error {
                                                        debugPrint("driveService.executeQuery error: \(error.localizedDescription)")
                                                        return
                                                    }
                                                    guard let self = self,
                                                          let fileList = resultObject as? GTLRDrive_FileList,
                                                          let unreformedFileList = fileList.files else { return }
                                                    self.unreformedFileList = []
                                                    for file in unreformedFileList {
                                                        if file.mimeType == "application/vnd.google-apps.folder" {
                                                            self.unreformedFileList.append(file)
                                                        } else {
                                                          if file.fileExtension == "mp3" { //Here I try to filter
                                                               self.unreformedFileList.append(file)
                                                            }
                                                        }
                                                    }
                                                    self.fileListTicket = nil

                                                    completion()
        })
    }

Upvotes: 0

Views: 758

Answers (1)

Oranutachi
Oranutachi

Reputation: 1279

Solution. Needs to check .mimeType for each file:

...
if file.mimeType == "audio/mpeg" || 
   file.mimeType == "audio/x-wav" || 
   file.mimeType == "audio/aac" {
...

Upvotes: 1

Related Questions