From 54bd9dcb39d3e38fe880eadbc86f260bbd415a98 Mon Sep 17 00:00:00 2001 From: CMK Date: Mon, 16 Aug 2021 15:13:08 +0800 Subject: [PATCH] feat: make share extension supports URL item --- ShareActionExtension/Info.plist | 2 ++ .../Scene/ShareViewModel.swift | 20 +++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ShareActionExtension/Info.plist b/ShareActionExtension/Info.plist index b6faa22c5..943c4794b 100644 --- a/ShareActionExtension/Info.plist +++ b/ShareActionExtension/Info.plist @@ -26,6 +26,8 @@ NSExtensionActivationRule + NSExtensionActivationSupportsWebURLWithMaxCount + 1 NSExtensionActivationSupportsImageWithMaxCount 4 NSExtensionActivationSupportsMovieWithMaxCount diff --git a/ShareActionExtension/Scene/ShareViewModel.swift b/ShareActionExtension/Scene/ShareViewModel.swift index 1aec81bdf..76089e17d 100644 --- a/ShareActionExtension/Scene/ShareViewModel.swift +++ b/ShareActionExtension/Scene/ShareViewModel.swift @@ -259,16 +259,28 @@ extension ShareViewModel { for item in inputItems { itemProviders.append(contentsOf: item.attachments ?? []) } + + let _urlProvider = itemProviders.first { provider in + return provider.hasRepresentationConforming(toTypeIdentifier: UTType.url.identifier, fileOptions: []) + } - let _movieProvider = itemProviders.first(where: { provider in + let _movieProvider = itemProviders.first { provider in return provider.hasRepresentationConforming(toTypeIdentifier: UTType.movie.identifier, fileOptions: []) - }) + } let imageProviders = itemProviders.filter { provider in return provider.hasRepresentationConforming(toTypeIdentifier: UTType.image.identifier, fileOptions: []) } - - if let movieProvider = _movieProvider { + + if let urlProvider = _urlProvider { + urlProvider.loadItem(forTypeIdentifier: UTType.url.identifier) { [weak self] item, error in + guard let self = self else { return } + guard let url = item as? URL else { return } + DispatchQueue.main.async { + self.composeViewModel.statusContent = "\(url.absoluteString) " + } + } + } else if let movieProvider = _movieProvider { composeViewModel.setupAttachmentViewModels([ StatusAttachmentViewModel(itemProvider: movieProvider) ])