Reputation: 1279
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
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