dji-sdk / Mobile-SDK-iOS

DJI Mobile SDK for iOS: http://developer.dji.com/mobile-sdk/
Other
578 stars 254 forks source link

DJIMediaFile thumbnail #339

Open pskow opened 4 years ago

pskow commented 4 years ago

Hey, When calling fetchThumbnailWithCompletion on DJIMediaFile completion is called, but thumbnail is still nil.

  1. How can I implement displaying thumbnails in the list without knowing when thumbnail is fetched?
  2. Why completion does not return UIImage but only DJICompletionBlock ? It would make it way easier to work in scrollable list.
dji-dev commented 4 years ago

Public comment from Luce Luo in Zendesk ticket #30174:

Dear Customer,

Thank you for contacting DJI. Here is a sample about how to fetch the media file, please refer to it. https://developer.dji.com/mobile-sdk/documentation/ios-tutorials/MediaManagerDemo.html

Thanks,

DJI Dev Team

alzin commented 4 years ago

I could not understand what do you want to get exactly, however, if you mean about how to load the data from the sd card, you can make it using the next functions, let me know if you need sth else:

func loadMediaList() {

    loadingIndicator.isHidden = false

    if (self.mediaManager?.sdCardFileListState == DJIMediaFileListState.syncing || self.mediaManager?.sdCardFileListState == DJIMediaFileListState.deleting) {
        print("Media Manager is busy. ")
    } else {
        self.mediaManager?.refreshFileList(of: DJICameraStorageLocation.sdCard, withCompletion: { (error) in
            if error != nil {
                print("Fetch media file list failed: ",error?.localizedDescription as Any)
            } else {
                print("Fetch media file list success.")
                let mediaFileList = self.mediaManager?.sdCardFileListSnapshot()
                self.updateMediaList(mediaFileList: mediaFileList!)
                self.loadingIndicator.isHidden = true
            }

        })
    }

}

func updateMediaList(mediaFileList: [DJIMediaFile]) {

    //change the DJIMedia File type to NS Array
    let newNSArray = mediaFileList as NSArray

    self.mediaList?.removeAllObjects()
    //here is a very important step to change from an NSArray NSMutuableArray
    self.mediaList = newNSArray.mutableCopy() as? NSMutableArray

    let taskScheduler = self.fetchCamera()?.mediaManager?.taskScheduler
    taskScheduler?.suspendAfterSingleFetchTaskFailure = false
    taskScheduler?.resume(completion: nil)

    for file in mediaFileList {
        if file.thumbnail == nil {
            let task = DJIFetchMediaTask(file: file, content: DJIFetchMediaTaskContent.preview, andCompletion: { (file, content, error) in
                self.mediaTableView.reloadData()
            })
            taskScheduler?.moveTask(toEnd: task)
        }
    }

}//end of the update func