Skip to content

Commit a1a0b7c

Browse files
committed
Added multireddit launch option
1 parent e8dd280 commit a1a0b7c

File tree

8 files changed

+91
-8
lines changed

8 files changed

+91
-8
lines changed

Localizable.xcstrings

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,9 @@
951951
}
952952
}
953953
}
954+
},
955+
"Default Multireddit" : {
956+
954957
},
955958
"Default mute fullscreen videos" : {
956959

@@ -2389,6 +2392,9 @@
23892392
}
23902393
}
23912394
}
2395+
},
2396+
"Multireddit" : {
2397+
23922398
},
23932399
"Multis" : {
23942400
"localizations" : {
@@ -2483,6 +2489,9 @@
24832489
},
24842490
"No credential" : {
24852491

2492+
},
2493+
"None" : {
2494+
24862495
},
24872496
"Nothing around here :(" : {
24882497

winston.xcodeproj/project.pbxproj

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
32EC8EC72E6FB1E200EFA036 /* MultiredditPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32EC8EC62E6FB1E200EFA036 /* MultiredditPicker.swift */; };
1011
65010D032AC70ADD00A8F611 /* getDownloadURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65010D022AC70ADD00A8F611 /* getDownloadURL.swift */; };
1112
650ACAFC2A87A36900A7C600 /* calcVotes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650ACAFB2A87A36900A7C600 /* calcVotes.swift */; };
1213
6514FFEC2AFD01520051D264 /* WhatsNewKit in Frameworks */ = {isa = PBXBuildFile; productRef = 6514FFEB2AFD01520051D264 /* WhatsNewKit */; };
@@ -605,6 +606,7 @@
605606
/* End PBXCopyFilesBuildPhase section */
606607

607608
/* Begin PBXFileReference section */
609+
32EC8EC62E6FB1E200EFA036 /* MultiredditPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiredditPicker.swift; sourceTree = "<group>"; };
608610
65010D022AC70ADD00A8F611 /* getDownloadURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = getDownloadURL.swift; sourceTree = "<group>"; };
609611
650ACAFB2A87A36900A7C600 /* calcVotes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = calcVotes.swift; sourceTree = "<group>"; };
610612
652011F92AC2C46C005DD899 /* themeStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = themeStore.swift; sourceTree = "<group>"; };
@@ -1332,6 +1334,7 @@
13321334
653E2DA42A8E278800833556 /* GeneralPanel.swift */,
13331335
EC91C85B2AB99E5600F2AD30 /* FilteredSubredditsSettings.swift */,
13341336
ECF5B3082AC83C8E00355589 /* AppIconSetting.swift */,
1337+
32EC8EC62E6FB1E200EFA036 /* MultiredditPicker.swift */,
13351338
);
13361339
path = views;
13371340
sourceTree = "<group>";
@@ -3287,6 +3290,7 @@
32873290
EC3188142A92A43300CB3738 /* fetchMultiInfo.swift in Sources */,
32883291
EC12D71A2A59C81A00C300B3 /* CommentLinkContent.swift in Sources */,
32893292
ECE08B592AA9A3C300F84DC9 /* WinstonTheme.swift in Sources */,
3293+
32EC8EC72E6FB1E200EFA036 /* MultiredditPicker.swift in Sources */,
32903294
ECE08B5E2AA9C94800F84DC9 /* CommentsTheme.swift in Sources */,
32913295
ECE449832A68A22200E2A3B7 /* favorite.swift in Sources */,
32923296
652F240A2B0E222B00BB95A3 /* SpoilerModifer.swift in Sources */,
@@ -3754,8 +3758,8 @@
37543758
isa = XCRemoteSwiftPackageReference;
37553759
repositoryURL = "https://github.com/sindresorhus/Defaults";
37563760
requirement = {
3757-
branch = main;
3758-
kind = branch;
3761+
kind = upToNextMajorVersion;
3762+
minimumVersion = 9.0.3;
37593763
};
37603764
};
37613765
EC593B072A47B42D002D6454 /* XCRemoteSwiftPackageReference "KeychainAccess" */ = {

winston.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 11 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

winston/extensions/ViewModifiers/vibrate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ struct VibrateModifier<T: Equatable>: ViewModifier {
162162
do {
163163
engine = try CHHapticEngine()
164164
} catch let error {
165-
fatalError("Engine Creation Error: \(error)")
165+
print("Engine Creation Error: \(error)")
166166
}
167167
guard let engine = engine else { return }
168168

winston/globals/Defaults/DefSettings/BehaviorDefSettings.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ struct BehaviorDefSettings: Equatable, Hashable, Codable, Defaults.Serializable
1111
var openYoutubeApp: Bool = false
1212
var enableSwipeAnywhere: Bool = false
1313
var preferenceDefaultFeed: String = "subList"
14+
var preferenceDefaultFeedName: String = ""
1415
var doLiveText: Bool = true
1516
var iCloudSyncCredentials: Bool = true
1617
}

winston/views/Settings/views/BehaviorPanel.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,14 @@ struct BehaviorPanel: View {
5858
Text("Popular").tag("popular")
5959
Text("All").tag("all")
6060
Text("Subscription List").tag("subList")
61+
Text("Multireddit").tag("multireddit")
6162
}
6263
.pickerStyle(DefaultPickerStyle())
64+
65+
if behaviorDefSettings.preferenceDefaultFeed == "multireddit" {
66+
MultiredditPicker()
67+
.pickerStyle(.navigationLink)
68+
}
6369

6470
WSNavigationLink(.setting(.filteredSubreddits), "Filtered Subreddits")
6571
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// MultiredditPicker.swift
3+
// winston
4+
//
5+
// Created by Víctor Manuel Puga Ruiz on 08/09/25.
6+
//
7+
8+
import CoreData
9+
import Defaults
10+
import SwiftUI
11+
12+
struct MultiredditPicker: View {
13+
@FetchRequest(
14+
entity: CachedMulti.entity(),
15+
sortDescriptors: [],
16+
) var multis: FetchedResults<CachedMulti>
17+
18+
@Default(.BehaviorDefSettings) var behaviorDefSettings
19+
20+
var body: some View {
21+
Picker("Default Multireddit", selection: $behaviorDefSettings.preferenceDefaultFeedName) {
22+
ForEach(multis) { multi in
23+
Text(multi.name ?? "Unknown")
24+
.tag(multi.path ?? "")
25+
}
26+
27+
Text("None")
28+
.tag("")
29+
}
30+
}
31+
}

winston/views/Subreddits/SubredditsStack.swift

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,32 @@
77

88
import SwiftUI
99
import Defaults
10+
import CoreData
1011

1112
struct SubredditsStack: View {
1213
@State var router: Router
1314
@Default(.BehaviorDefSettings) private var behaviorDefSettings // handle default feed selection routing
1415
@Default(.GeneralDefSettings) private var generalDefSettings // handle default feed selection routing
1516
@State private var columnVisibility: NavigationSplitViewVisibility = .automatic
1617
@State private var sidebarSize: CGSize = .zero
17-
18+
@Environment(\.managedObjectContext) private var viewContext
19+
@FetchRequest var multis: FetchedResults<CachedMulti>
20+
1821
init(router: Router) {
1922
self._router = .init(initialValue: router)
23+
24+
let fetchRequest: NSFetchRequest<CachedMulti> = CachedMulti.fetchRequest()
25+
fetchRequest.sortDescriptors = []
26+
27+
let behaviorDefSettings = Defaults[.BehaviorDefSettings]
28+
if behaviorDefSettings.preferenceDefaultFeed == "multireddit" && !behaviorDefSettings.preferenceDefaultFeedName.isEmpty {
29+
fetchRequest.predicate = NSPredicate(format: "path = %@", behaviorDefSettings.preferenceDefaultFeedName)
30+
fetchRequest.fetchLimit = 1
31+
} else {
32+
fetchRequest.predicate = NSPredicate(format: "%@", false)
33+
fetchRequest.fetchLimit = 0
34+
}
35+
self._multis = .init(fetchRequest: fetchRequest)
2036
}
2137

2238
var postContentWidth: CGFloat { .screenW - (!IPAD || columnVisibility == .detailOnly ? 0 : sidebarSize.width) }
@@ -76,8 +92,15 @@ struct SubredditsStack: View {
7692
if !loaded {
7793
// MARK: Route to default feed
7894
if behaviorDefSettings.preferenceDefaultFeed != "subList" && router.path.count == 0 { // we are in subList, can ignore
79-
let tempSubreddit = Subreddit(id: behaviorDefSettings.preferenceDefaultFeed)
80-
router.navigateTo(.reddit(.subFeed(tempSubreddit)))
95+
96+
if behaviorDefSettings.preferenceDefaultFeed == "multireddit" {
97+
if let multi = multis.first {
98+
router.navigateTo(.reddit(.multiFeed(Multi(data: MultiData(entity: multi)))))
99+
}
100+
} else {
101+
let tempSubreddit = Subreddit(id: behaviorDefSettings.preferenceDefaultFeed)
102+
router.navigateTo(.reddit(.subFeed(tempSubreddit)))
103+
}
81104
}
82105

83106
withAnimation {

0 commit comments

Comments
 (0)