|  |  |  | @ -11,6 +11,8 @@ protocol GifPickerViewControllerDelegate: class { | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class GifPickerViewController: OWSViewController, UISearchBarDelegate, UICollectionViewDataSource, UICollectionViewDelegate, GifPickerLayoutDelegate { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     static let TAG = "[GifPickerViewController]" | 
		
	
		
			
				|  |  |  |  |     let TAG = "[GifPickerViewController]" | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     // MARK: Properties | 
		
	
	
		
			
				
					|  |  |  | @ -344,33 +346,43 @@ class GifPickerViewController: OWSViewController, UISearchBarDelegate, UICollect | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     public func getFileForCell(_ cell: GifPickerCell) { | 
		
	
		
			
				|  |  |  |  |         GiphyDownloader.sharedInstance.cancelAllRequests() | 
		
	
		
			
				|  |  |  |  |         cell.requestRenditionForSending().then { (asset: GiphyAsset) -> Void in | 
		
	
		
			
				|  |  |  |  |         cell.requestRenditionForSending().then { [weak self] (asset: GiphyAsset) -> Void in | 
		
	
		
			
				|  |  |  |  |             guard let strongSelf = self else { | 
		
	
		
			
				|  |  |  |  |                 Logger.info("\(GifPickerViewController.TAG) ignoring send, since VC was dismissed before fetching finished.") | 
		
	
		
			
				|  |  |  |  |                 return | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             let filePath = asset.filePath | 
		
	
		
			
				|  |  |  |  |             guard let dataSource = DataSourcePath.dataSource(withFilePath: filePath) else { | 
		
	
		
			
				|  |  |  |  |                 owsFail("\(self.TAG) couldn't load asset.") | 
		
	
		
			
				|  |  |  |  |                 owsFail("\(strongSelf.TAG) couldn't load asset.") | 
		
	
		
			
				|  |  |  |  |                 return | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             let attachment = SignalAttachment(dataSource: dataSource, dataUTI: asset.rendition.utiType) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             self.delegate?.gifPickerWillSend() | 
		
	
		
			
				|  |  |  |  |             strongSelf.delegate?.gifPickerWillSend() | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             let outgoingMessage = ThreadUtil.sendMessage(with: attachment, in: self.thread, messageSender: self.messageSender) | 
		
	
		
			
				|  |  |  |  |             let outgoingMessage = ThreadUtil.sendMessage(with: attachment, in: strongSelf.thread, messageSender: strongSelf.messageSender) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             self.delegate?.gifPickerDidSend(outgoingMessage: outgoingMessage) | 
		
	
		
			
				|  |  |  |  |             strongSelf.delegate?.gifPickerDidSend(outgoingMessage: outgoingMessage) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             strongSelf.dismiss(animated: true, completion: nil) | 
		
	
		
			
				|  |  |  |  |         }.catch { [weak self] error in | 
		
	
		
			
				|  |  |  |  |             guard let strongSelf = self else { | 
		
	
		
			
				|  |  |  |  |                 Logger.info("\(GifPickerViewController.TAG) ignoring failure, since VC was dismissed before fetching finished.") | 
		
	
		
			
				|  |  |  |  |                 return | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             self.dismiss(animated: true, completion: nil) | 
		
	
		
			
				|  |  |  |  |         }.catch { error in | 
		
	
		
			
				|  |  |  |  |             let alert = UIAlertController(title: NSLocalizedString("GIF_PICKER_FAILURE_ALERT_TITLE", comment: "Shown when selected gif couldn't be fetched"), | 
		
	
		
			
				|  |  |  |  |                                           message: error.localizedDescription, | 
		
	
		
			
				|  |  |  |  |                                           preferredStyle: .alert) | 
		
	
		
			
				|  |  |  |  |             alert.addAction(UIAlertAction(title: CommonStrings.retryButton, style: .default) { _ in | 
		
	
		
			
				|  |  |  |  |                     self.getFileForCell(cell) | 
		
	
		
			
				|  |  |  |  |                     strongSelf.getFileForCell(cell) | 
		
	
		
			
				|  |  |  |  |             }) | 
		
	
		
			
				|  |  |  |  |             alert.addAction(UIAlertAction(title: CommonStrings.dismissButton, style: .cancel) { _ in | 
		
	
		
			
				|  |  |  |  |                 self.dismiss(animated: true, completion: nil) | 
		
	
		
			
				|  |  |  |  |                 strongSelf.dismiss(animated: true, completion: nil) | 
		
	
		
			
				|  |  |  |  |             }) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             UIApplication.shared.frontmostViewController?.present(alert, animated: true, completion: nil) | 
		
	
		
			
				|  |  |  |  |             strongSelf.present(alert, animated: true, completion: nil) | 
		
	
		
			
				|  |  |  |  |         }.retainUntilComplete() | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
	
		
			
				
					|  |  |  | 
 |