chore: add share post

This commit is contained in:
sunxiaojian 2021-04-29 11:03:21 +08:00
parent 236b5ca0dc
commit 211e2f25d5
5 changed files with 42 additions and 0 deletions

View File

@ -51,6 +51,7 @@
"preview": "Preview",
"share": "Share",
"share_user": "Share %s",
"share_post": "Share post",
"open_in_safari": "Open in Safari",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",

View File

@ -70,3 +70,16 @@ extension Status {
return author
}
}
extension Status {
var statusURL: URL {
return URL(string: "https://\(self.domain)/web/statuses/\(self.id)")!
}
var activityItems: [Any] {
var items: [Any] = []
items.append(statusURL)
return items
}
}

View File

@ -96,6 +96,8 @@ internal enum L10n {
internal static let seeMore = L10n.tr("Localizable", "Common.Controls.Actions.SeeMore")
/// Share
internal static let share = L10n.tr("Localizable", "Common.Controls.Actions.Share")
/// Share post
internal static let sharePost = L10n.tr("Localizable", "Common.Controls.Actions.SharePost")
/// Share %@
internal static func shareUser(_ p1: Any) -> String {
return L10n.tr("Localizable", "Common.Controls.Actions.ShareUser", String(describing: p1))

View File

@ -264,6 +264,23 @@ extension UserProviderFacade {
children.append(shareAction)
}
if let shareStatus = shareStatus {
let shareAction = UIAction(title: L10n.Common.Controls.Actions.sharePost, image: UIImage(systemName: "square.and.arrow.up"), identifier: nil, discoverabilityTitle: nil, attributes: [], state: .off) { [weak provider] _ in
guard let provider = provider else { return }
let activityViewController = createActivityViewControllerForMastodonUser(status: shareStatus, dependency: provider)
provider.coordinator.present(
scene: .activityViewController(
activityViewController: activityViewController,
sourceView: sourceView,
barButtonItem: barButtonItem
),
from: provider,
transition: .activityViewControllerPresent(animated: true, completion: nil)
)
}
children.append(shareAction)
}
return UIMenu(title: "", options: [], children: children)
}
@ -274,5 +291,13 @@ extension UserProviderFacade {
)
return activityViewController
}
static func createActivityViewControllerForMastodonUser(status: Status, dependency: NeedsDependency) -> UIActivityViewController {
let activityViewController = UIActivityViewController(
activityItems: status.activityItems,
applicationActivities: [SafariActivity(sceneCoordinator: dependency.coordinator)]
)
return activityViewController
}
}

View File

@ -31,6 +31,7 @@ Please check your internet connection.";
"Common.Controls.Actions.SavePhoto" = "Save photo";
"Common.Controls.Actions.SeeMore" = "See More";
"Common.Controls.Actions.Share" = "Share";
"Common.Controls.Actions.SharePost" = "Share post";
"Common.Controls.Actions.ShareUser" = "Share %@";
"Common.Controls.Actions.SignIn" = "Sign In";
"Common.Controls.Actions.SignUp" = "Sign Up";