Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sharing options #1854

Open
wants to merge 8 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions Mlem.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
030030A12C416B0B009A65FF /* RefreshPopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030030A02C416B0B009A65FF /* RefreshPopupView.swift */; };
030050D32D109B7E002B1E99 /* ReportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030050D22D109B7E002B1E99 /* ReportView.swift */; };
030050D52D10AE30002B1E99 /* Report+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030050D42D10AE30002B1E99 /* Report+Extensions.swift */; };
030056A42D7DB05A00EB0BA3 /* SharingLinksSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030056A32D7DB05A00EB0BA3 /* SharingLinksSettingsView.swift */; };
030056A62D7DBD4F00EB0BA3 /* Sharable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030056A52D7DBD4F00EB0BA3 /* Sharable+Extensions.swift */; };
030056BB2D7E137800EB0BA3 /* ShareInstancePickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030056BA2D7E137800EB0BA3 /* ShareInstancePickerView.swift */; };
03036C742C71408700C6DA1D /* CounterAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03036C732C71408700C6DA1D /* CounterAppearance.swift */; };
03036C762C71427B00C6DA1D /* InteractionBarCounterLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03036C752C71427B00C6DA1D /* InteractionBarCounterLabelView.swift */; };
03036C832C727D0500C6DA1D /* InteractionBarEditorView+Logic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03036C822C727D0500C6DA1D /* InteractionBarEditorView+Logic.swift */; };
Expand Down Expand Up @@ -61,7 +64,6 @@
0325B93E2D3AAE9E00E28B97 /* SettingsHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0325B93D2D3AAE9E00E28B97 /* SettingsHeaderView.swift */; };
03267D822BED489C009D6268 /* AvatarBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03267D812BED489C009D6268 /* AvatarBannerView.swift */; };
03267D842BED49CE009D6268 /* AccountSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03267D832BED49CE009D6268 /* AccountSettingsView.swift */; };
032C32022C3438DB00595286 /* ShareAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 032C32012C3438DB00595286 /* ShareAction.swift */; };
032C32042C3439C600595286 /* ActorIdentifiable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 032C32032C3439C600595286 /* ActorIdentifiable+Extensions.swift */; };
032C32082C34469900595286 /* SelectableContentProviding+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 032C32072C34469900595286 /* SelectableContentProviding+Extensions.swift */; };
032C320A2C34495D00595286 /* SelectTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 032C32092C34495D00595286 /* SelectTextView.swift */; };
Expand Down Expand Up @@ -538,6 +540,9 @@
030030A02C416B0B009A65FF /* RefreshPopupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshPopupView.swift; sourceTree = "<group>"; };
030050D22D109B7E002B1E99 /* ReportView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportView.swift; sourceTree = "<group>"; };
030050D42D10AE30002B1E99 /* Report+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Report+Extensions.swift"; sourceTree = "<group>"; };
030056A32D7DB05A00EB0BA3 /* SharingLinksSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingLinksSettingsView.swift; sourceTree = "<group>"; };
030056A52D7DBD4F00EB0BA3 /* Sharable+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Sharable+Extensions.swift"; sourceTree = "<group>"; };
030056BA2D7E137800EB0BA3 /* ShareInstancePickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareInstancePickerView.swift; sourceTree = "<group>"; };
03036C732C71408700C6DA1D /* CounterAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CounterAppearance.swift; sourceTree = "<group>"; };
03036C752C71427B00C6DA1D /* InteractionBarCounterLabelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractionBarCounterLabelView.swift; sourceTree = "<group>"; };
03036C822C727D0500C6DA1D /* InteractionBarEditorView+Logic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "InteractionBarEditorView+Logic.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -587,7 +592,6 @@
0325B93D2D3AAE9E00E28B97 /* SettingsHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsHeaderView.swift; sourceTree = "<group>"; };
03267D812BED489C009D6268 /* AvatarBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarBannerView.swift; sourceTree = "<group>"; };
03267D832BED49CE009D6268 /* AccountSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountSettingsView.swift; sourceTree = "<group>"; };
032C32012C3438DB00595286 /* ShareAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareAction.swift; sourceTree = "<group>"; };
032C32032C3439C600595286 /* ActorIdentifiable+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActorIdentifiable+Extensions.swift"; sourceTree = "<group>"; };
032C32072C34469900595286 /* SelectableContentProviding+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SelectableContentProviding+Extensions.swift"; sourceTree = "<group>"; };
032C32092C34495D00595286 /* SelectTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectTextView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1148,6 +1152,7 @@
03531EEB2C2D81DC004A3464 /* LinkSettingsView.swift */,
03A630EE2D497143009A47A6 /* TappableLinksSettingsView.swift */,
03A630EC2D497005009A47A6 /* ExternalLinkSettingsView.swift */,
030056A32D7DB05A00EB0BA3 /* SharingLinksSettingsView.swift */,
038028D72CACAB960091A8A2 /* ModeratorSettingsView.swift */,
03F6BDF72D555F6E006A425E /* ModMailInteractionBarSettingsView.swift */,
03A6316C2D4E3D24009A47A6 /* ModeratorActionSeparationSettingsView.swift */,
Expand Down Expand Up @@ -1534,7 +1539,6 @@
0397D4A32C6FBC04002C6CDC /* ActionAppearance+StaticValues.swift */,
03036C732C71408700C6DA1D /* CounterAppearance.swift */,
03D3A1F02BB9D48E009DE55E /* BasicAction.swift */,
032C32012C3438DB00595286 /* ShareAction.swift */,
03D3A1F22BB9D49B009DE55E /* ActionGroup.swift */,
0389DDDA2C3AB6340005B808 /* ActionBuilder.swift */,
03D3A1E42BB8B7A3009DE55E /* ActionType.swift */,
Expand Down Expand Up @@ -1866,6 +1870,7 @@
0305EBB12D35C1B70066E5AD /* RegistrationApplicationView.swift */,
03531EEF2C2DA291004A3464 /* Search */,
032C32092C34495D00595286 /* SelectTextView.swift */,
030056BA2D7E137800EB0BA3 /* ShareInstancePickerView.swift */,
03500C252BF694A800CAA076 /* Toast */,
CD0E07002C12707700445849 /* ToolbarEllipsisMenu.swift */,
CDD99C3D2C73F4380010367F /* WarningView.swift */,
Expand Down Expand Up @@ -2105,6 +2110,7 @@
children = (
CD87BEBB2D5125750099F190 /* Instance2Providing+Extensions.swift */,
032C32032C3439C600595286 /* ActorIdentifiable+Extensions.swift */,
030056A52D7DBD4F00EB0BA3 /* Sharable+Extensions.swift */,
0305EBAB2D32C9300066E5AD /* ApiModlogActionType+Extensions.swift */,
0320B6532C8B65EB00D38548 /* Captcha+Extensions.swift */,
033F84BE2C2ACC9F002E3EDF /* Comment1Providing+Extensions.swift */,
Expand Down Expand Up @@ -2508,7 +2514,6 @@
CDA683F82C77E577000C4486 /* NsfwBlurBehavior.swift in Sources */,
03B25B2F2CC43F8600EB6DF5 /* InstanceSafetyView.swift in Sources */,
03E0EF452CA74036002CB66C /* CommentPage.swift in Sources */,
032C32022C3438DB00595286 /* ShareAction.swift in Sources */,
030BCB1B2C3EA5FD0037680F /* InstanceDetailsView.swift in Sources */,
03134A582BEC1C46002662CC /* AccountListSettingsView.swift in Sources */,
0397D4622C676B46002C6CDC /* ApiSortType+Extensions.swift in Sources */,
Expand All @@ -2518,6 +2523,7 @@
03B25B352CC4446400EB6DF5 /* FediseerOpinionListView.swift in Sources */,
CDB2EC7D2BFADAB300DBC0EF /* CompactPostView.swift in Sources */,
CD33CA522D3C18BF00106C8C /* ImageViewer+Views.swift in Sources */,
030056A42D7DB05A00EB0BA3 /* SharingLinksSettingsView.swift in Sources */,
0315B1C12C74C71A006D4F82 /* CommentEditorView+Context.swift in Sources */,
03D283FE2D25EEC500A6659B /* SearchView+Views.swift in Sources */,
03AFD0DF2C3B2E000054B8AD /* PersonListRow.swift in Sources */,
Expand Down Expand Up @@ -2804,6 +2810,7 @@
0320B64F2C8A638A00D38548 /* SignUpView.swift in Sources */,
036FFA2D2D45110C00998D8A /* ChangePasswordView.swift in Sources */,
03ECD7192C81195000D48BF6 /* PostEditorView+LinkView.swift in Sources */,
030056BB2D7E137800EB0BA3 /* ShareInstancePickerView.swift in Sources */,
0320B6582C8BB3C400D38548 /* SignUpView+Views.swift in Sources */,
CD17B24B2C19109A001E174B /* SwipeConfiguration.swift in Sources */,
03036C832C727D0500C6DA1D /* InteractionBarEditorView+Logic.swift in Sources */,
Expand All @@ -2817,6 +2824,7 @@
CDF9EF332AB2845C003F885B /* Icons.swift in Sources */,
03AF91E32C1C616F00E56644 /* InteractionBarView.swift in Sources */,
0397D4802C693A88002C6CDC /* [BlockNode]+Extensions.swift in Sources */,
030056A62D7DBD4F00EB0BA3 /* Sharable+Extensions.swift in Sources */,
03C0EAEF2CA8288A00B4B2A5 /* CapsuleButtonStyle.swift in Sources */,
03DD69422D4FDE8900F8950D /* Person+Mock.swift in Sources */,
03D284062D2AEE3A00A6659B /* TabBarSettingsView.swift in Sources */,
Expand Down Expand Up @@ -3398,7 +3406,7 @@
repositoryURL = "https://github.com/mlemgroup/MlemMiddleware";
requirement = {
kind = upToNextMinorVersion;
minimumVersion = 0.83.0;
minimumVersion = 0.84.0;
};
};
CD4368BF2AE23FD400BD8BD1 /* XCRemoteSwiftPackageReference "Semaphore" */ = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/mlemgroup/MlemMiddleware",
"state" : {
"revision" : "bd13585a4941ef04cad6943a3ed576c9f4904b11",
"version" : "0.83.0"
"revision" : "072a2431ae50ade0846fd782e67e3696d25e47ef",
"version" : "0.84.0"
}
},
{
Expand Down
3 changes: 3 additions & 0 deletions Mlem/App/Configuration/User Settings/CodableSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ struct CodableSettings: Codable { // swiftlint:disable:this type_body_length
var links_displayMode: TappableLinksDisplayMode
var links_openInBrowser: Bool
var links_readerMode: Bool
var links_shareMode: LinkSharingMode
var links_embedLoops: Bool
var links_tappableLinksDisplayMode: TappableLinksDisplayMode
var menus_allModActions: Bool
Expand Down Expand Up @@ -173,6 +174,7 @@ struct CodableSettings: Codable { // swiftlint:disable:this type_body_length
self.links_displayMode = try container.decodeIfPresent(TappableLinksDisplayMode.self, forKey: .links_displayMode) ?? .contextual
self.links_openInBrowser = try container.decodeIfPresent(Bool.self, forKey: .links_openInBrowser) ?? false
self.links_readerMode = try container.decodeIfPresent(Bool.self, forKey: .links_readerMode) ?? false
self.links_shareMode = try container.decodeIfPresent(LinkSharingMode.self, forKey: .links_shareMode) ?? .myInstance
self.links_tappableLinksDisplayMode = try container.decodeIfPresent(TappableLinksDisplayMode.self, forKey: .links_tappableLinksDisplayMode) ?? .contextual
self.links_embedLoops = try container.decodeIfPresent(Bool.self, forKey: .links_embedLoops) ?? true
self.menus_allModActions = try container.decodeIfPresent(Bool.self, forKey: .menus_allModActions) ?? false
Expand Down Expand Up @@ -255,6 +257,7 @@ struct CodableSettings: Codable { // swiftlint:disable:this type_body_length
self.links_displayMode = settings.tappableLinksDisplayMode
self.links_openInBrowser = settings.openLinksInBrowser
self.links_readerMode = settings.openLinksInReaderMode
self.links_shareMode = settings.linkSharingMode
self.links_tappableLinksDisplayMode = settings.tappableLinksDisplayMode
self.links_embedLoops = settings.embedLoops
self.menus_allModActions = settings.showAllModActions
Expand Down
2 changes: 2 additions & 0 deletions Mlem/App/Configuration/User Settings/Settings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ class Settings: ObservableObject {
@AppStorage("links.openInBrowser") var openLinksInBrowser = false
@AppStorage("links.readerMode") var openLinksInReaderMode = false
@AppStorage("links.displayMode") var tappableLinksDisplayMode: TappableLinksDisplayMode = .contextual
@AppStorage("links.shareMode") var linkSharingMode: LinkSharingMode = .myInstance
@AppStorage("links.embedLoops") var embedLoops: Bool = true

@AppStorage("feed.markReadOnScroll") var markReadOnScroll: Bool = false
Expand Down Expand Up @@ -160,6 +161,7 @@ class Settings: ObservableObject {
confirmImageUploads = settings.behavior_confirmImageUploads
openLinksInBrowser = settings.links_openInBrowser
openLinksInReaderMode = settings.links_readerMode
linkSharingMode = settings.links_shareMode
tappableLinksDisplayMode = settings.links_tappableLinksDisplayMode
markReadOnScroll = settings.feed_markReadOnScroll
showReadInFeed = settings.feed_showRead
Expand Down
2 changes: 1 addition & 1 deletion Mlem/App/Logic/ImageFunctions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func saveMedia(url: URL) async {

func shareImage(url: URL, navigation: NavigationLayer) async {
if let fileUrl = await downloadImageToFileSystem(url: url) {
navigation.shareInfo = .init(url: fileUrl)
navigation.model?.shareInfo = .init(url: fileUrl)
}
}

Expand Down
23 changes: 0 additions & 23 deletions Mlem/App/Models/Action/ShareAction.swift

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,9 @@

import Foundation
import MlemMiddleware
import SwiftUI

extension ActorIdentifiable {
func shareAction() -> ShareAction {
.init(id: "share\(actorId)", url: actorId.url, actions: [sendLinkInPrivateMessageAction()])
}

func sendLinkInPrivateMessageAction() -> BasicAction {
.init(
id: "sendLinkInPrivateMessage\(actorId)",
appearance: .init(
label: "Send to Lemmy User",
color: .themedAccent,
icon: Icons.personCircle
),
callback: {
NavigationModel.main.openSheet(.personPicker(callback: { person, navigation in
navigation.push(
.messageFeed(person, messageContent: String(describing: actorId), focusTextField: true)
)
}))
}
)
}

func openInstanceAction(navigation: NavigationLayer?) -> BasicAction {
let callback: (@MainActor () -> Void)?
if let navigation {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,16 @@ extension Comment1Providing {
expanded: Bool = false,
feedback: Set<FeedbackType> = [.haptic, .toast],
showAllActions: Bool = true,
navigation: NavigationLayer?,
commentTreeTracker: CommentTreeTracker? = nil,
report: Report? = nil
) -> [any Action] {
basicMenuActions(appState: appState, feedback: feedback, commentTreeTracker: commentTreeTracker)
basicMenuActions(
appState: appState,
feedback: feedback,
navigation: navigation,
commentTreeTracker: commentTreeTracker
)
if canModerate {
ActionGroup(
appearance: .init(label: "Moderation...", color: .themedModeration, icon: Icons.moderation),
Expand All @@ -77,6 +83,7 @@ extension Comment1Providing {
func basicMenuActions(
appState: AppState,
feedback: Set<FeedbackType> = [.haptic, .toast],
navigation: NavigationLayer?,
commentTreeTracker: CommentTreeTracker? = nil
) -> [any Action] {
ActionGroup(displayMode: .compactSection) {
Expand All @@ -87,7 +94,7 @@ extension Comment1Providing {
if !deleted {
selectTextAction()
}
shareAction()
shareAction(navigation: navigation)

if isOwnComment {
editAction(appState: appState)
Expand Down Expand Up @@ -135,6 +142,7 @@ extension Comment1Providing {
func action(
appState: AppState,
type: CommentBarConfiguration.ActionType,
navigation: NavigationLayer?,
commentTreeTracker: CommentTreeTracker? = nil,
communityContext: (any CommunityStubProviding)? = nil,
reportContext: Report? = nil
Expand All @@ -144,7 +152,7 @@ extension Comment1Providing {
case .downvote: api.downvotesEnabled ? downvoteAction(appState: appState, feedback: [.haptic]) : nil
case .save: saveAction(appState: appState, feedback: [.haptic])
case .reply: replyAction(appState: appState, commentTreeTracker: commentTreeTracker)
case .share: shareAction()
case .share: shareAction(navigation: navigation)
case .selectText: selectTextAction()
case .report: reportAction(appState: appState, communityContext: communityContext)
case .resolve: reportContext?.resolveAction(appState: appState, feedback: [.haptic])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ extension Community1Providing {
favoriteAction(appState: appState, feedback: feedback)
openInstanceAction(navigation: navigation)
copyNameAction()
shareAction()
shareAction(navigation: navigation)
blockAction(appState: appState, feedback: feedback)
if api.isAdmin {
ActionGroup {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ extension InstanceStubProviding {
func menuActions(
appState: AppState,
feedback: Set<FeedbackType> = [.haptic, .toast],
navigation: NavigationLayer?,
allowExternalBlocking: Bool = false
) -> [any Action] {
ActionGroup {
Expand All @@ -80,7 +81,7 @@ extension InstanceStubProviding {
}
ActionGroup {
openInBrowserAction()
shareAction()
shareAction(navigation: navigation)
}
if !local || (allowExternalBlocking && actorId != AppState.main.firstApi.actorId) {
ActionGroup {
Expand All @@ -93,6 +94,12 @@ extension InstanceStubProviding {
}
}

func shareAction(navigation: NavigationLayer?) -> BasicAction {
.init(id: "share\(actorId)", appearance: .share()) {
navigation?.model?.shareInfo = .init(url: actorId.url)
}
}

func visitAction() -> BasicAction {
.init(
id: "visit\(actorId)",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ extension Person1Providing {
ActionGroup {
openInstanceAction(navigation: navigation)
copyNameAction()
shareAction()
shareAction(navigation: navigation)
if (AppState.main.firstSession as? UserSession)?.person?.person1 !== person1 {
if !isInMessageFeed {
sendMessageAction()
Expand Down
Loading