Skip to content

Commit 4f33aa6

Browse files
committed
test trackier
1 parent 449c893 commit 4f33aa6

File tree

11 files changed

+1093
-66
lines changed

11 files changed

+1093
-66
lines changed

Luna.xcodeproj/project.pbxproj

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@
108108
13F187B02E6F38CE00747F7E /* CreateCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F187AA2E6F38CE00747F7E /* CreateCollectionView.swift */; };
109109
13F187B12E6F38CE00747F7E /* CollectionDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F187AB2E6F38CE00747F7E /* CollectionDetailView.swift */; };
110110
13F315B02EAD03F70025BD7A /* SubtitleLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F315AF2EAD03F70025BD7A /* SubtitleLoader.swift */; };
111+
13F458482F4B084C00ED1C75 /* SyncKeychainStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F458462F4B084C00ED1C75 /* SyncKeychainStore.swift */; };
112+
13F458492F4B084C00ED1C75 /* ProgressSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F458472F4B084C00ED1C75 /* ProgressSyncManager.swift */; };
113+
13F4584B2F4B085E00ED1C75 /* TrackingSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F4584A2F4B085E00ED1C75 /* TrackingSettingsView.swift */; };
111114
13F518432EBCE42B00DEF778 /* StorageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F518422EBCE42B00DEF778 /* StorageView.swift */; };
112115
13F5B58F2E7308F300565E75 /* HomeSectionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F5B58E2E7308F300565E75 /* HomeSectionsView.swift */; };
113116
13F5B5922E73090000565E75 /* HomeSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F5B5912E73090000565E75 /* HomeSection.swift */; };
@@ -228,6 +231,9 @@
228231
13F187AA2E6F38CE00747F7E /* CreateCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateCollectionView.swift; sourceTree = "<group>"; };
229232
13F187AB2E6F38CE00747F7E /* CollectionDetailView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionDetailView.swift; sourceTree = "<group>"; };
230233
13F315AF2EAD03F70025BD7A /* SubtitleLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubtitleLoader.swift; sourceTree = "<group>"; };
234+
13F458462F4B084C00ED1C75 /* SyncKeychainStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SyncKeychainStore.swift; sourceTree = "<group>"; };
235+
13F458472F4B084C00ED1C75 /* ProgressSyncManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProgressSyncManager.swift; sourceTree = "<group>"; };
236+
13F4584A2F4B085E00ED1C75 /* TrackingSettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackingSettingsView.swift; sourceTree = "<group>"; };
231237
13F518422EBCE42B00DEF778 /* StorageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageView.swift; sourceTree = "<group>"; };
232238
13F5B58E2E7308F300565E75 /* HomeSectionsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSectionsView.swift; sourceTree = "<group>"; };
233239
13F5B5912E73090000565E75 /* HomeSection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSection.swift; sourceTree = "<group>"; };
@@ -276,6 +282,7 @@
276282
1375466E2E5F078B00B29944 /* Tracking */ = {
277283
isa = PBXGroup;
278284
children = (
285+
13F458452F4B084C00ED1C75 /* Sync */,
279286
1375466F2E5F079000B29944 /* Progress */,
280287
);
281288
path = Tracking;
@@ -687,6 +694,7 @@
687694
13F072C42E4B364B00EF90EB /* SettingsView */ = {
688695
isa = PBXGroup;
689696
children = (
697+
13F4584A2F4B085E00ED1C75 /* TrackingSettingsView.swift */,
690698
13830AEF2E55C04F00B3CDE4 /* AlgorithmSelectionView.swift */,
691699
13631B312E4F1A200035C39F /* ServiceSettingsView.swift */,
692700
13F5B58E2E7308F300565E75 /* HomeSectionsView.swift */,
@@ -719,6 +727,15 @@
719727
path = Views;
720728
sourceTree = "<group>";
721729
};
730+
13F458452F4B084C00ED1C75 /* Sync */ = {
731+
isa = PBXGroup;
732+
children = (
733+
13F458462F4B084C00ED1C75 /* SyncKeychainStore.swift */,
734+
13F458472F4B084C00ED1C75 /* ProgressSyncManager.swift */,
735+
);
736+
path = Sync;
737+
sourceTree = "<group>";
738+
};
722739
13F5B5902E73090000565E75 /* Models */ = {
723740
isa = PBXGroup;
724741
children = (
@@ -857,6 +874,7 @@
857874
13F072B02E4B2D9200EF90EB /* SearchResultCard.swift in Sources */,
858875
136D3E5C2EB75D7E0094210C /* LiquidGlassBackground.swift in Sources */,
859876
13B6F3452EA4C6BC00DECD2B /* ProgressManager.swift in Sources */,
877+
13F458482F4B084C00ED1C75 /* SyncKeychainStore.swift in Sources */,
860878
13E1EDF42ED9E67000087629 /* ContentModel.xcdatamodeld in Sources */,
861879
13F072B42E4B2D9200EF90EB /* resized.swift in Sources */,
862880
13E1EDDF2ED9E66000087629 /* KanzenEngine.swift in Sources */,
@@ -930,6 +948,7 @@
930948
13B2E5742E7597B9009F3271 /* JSController-NetworkFetch.swift in Sources */,
931949
13F315B02EAD03F70025BD7A /* SubtitleLoader.swift in Sources */,
932950
13F072B82E4B2D9200EF90EB /* LevenshteinDistance.swift in Sources */,
951+
13F458492F4B084C00ED1C75 /* ProgressSyncManager.swift in Sources */,
933952
13631B322E4F1A200035C39F /* ServiceSettingsView.swift in Sources */,
934953
13E1EDD42ED9E65F00087629 /* mangaData.swift in Sources */,
935954
13F072B32E4B2D9200EF90EB /* ServicesResultsSheet.swift in Sources */,
@@ -940,6 +959,7 @@
940959
13830AF42E55F5FF00B3CDE4 /* AccentColorManager.swift in Sources */,
941960
13F072A12E4B2D9200EF90EB /* JSController.swift in Sources */,
942961
13F0729F2E4B2D9200EF90EB /* ServiceManager.swift in Sources */,
962+
13F4584B2F4B085E00ED1C75 /* TrackingSettingsView.swift in Sources */,
943963
12201F512EBE918D0033073C /* ServiceStore.swift in Sources */,
944964
13E1EDD52ED9E65F00087629 /* readingMode.swift in Sources */,
945965
13E1EDED2ED9E66000087629 /* contentView.swift in Sources */,

Luna/Info.plist

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
<plist version="1.0">
44
<dict>
5+
<key>CFBundleURLTypes</key>
6+
<array>
7+
<dict>
8+
<key>CFBundleTypeRole</key>
9+
<string>Editor</string>
10+
<key>CFBundleURLSchemes</key>
11+
<array>
12+
<string>luna</string>
13+
</array>
14+
</dict>
15+
</array>
516
<key>LSApplicationQueriesSchemes</key>
617
<array>
718
<string>tracy</string>

Luna/Player/PlayerViewController.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ final class PlayerViewController: UIViewController {
413413
case .movie(let id, let title):
414414
lastPlayedTime = ProgressManager.shared.getMovieCurrentTime(movieId: id, title: title)
415415

416-
case .episode(let showId, let seasonNumber, let episodeNumber):
416+
case .episode(let showId, _, let seasonNumber, let episodeNumber):
417417
lastPlayedTime = ProgressManager.shared.getEpisodeCurrentTime(showId: showId, seasonNumber: seasonNumber, episodeNumber: episodeNumber)
418418
}
419419

@@ -422,7 +422,7 @@ final class PlayerViewController: UIViewController {
422422
switch mediaInfo {
423423
case .movie(let id, let title):
424424
progress = ProgressManager.shared.getMovieProgress(movieId: id, title: title)
425-
case .episode(let showId, let seasonNumber, let episodeNumber):
425+
case .episode(let showId, _, let seasonNumber, let episodeNumber):
426426
progress = ProgressManager.shared.getEpisodeProgress(showId: showId, seasonNumber: seasonNumber, episodeNumber: episodeNumber)
427427
}
428428

@@ -1104,8 +1104,8 @@ final class PlayerViewController: UIViewController {
11041104
switch info {
11051105
case .movie(let id, let title):
11061106
ProgressManager.shared.updateMovieProgress(movieId: id, title: title, currentTime: position, totalDuration: duration)
1107-
case .episode(let showId, let seasonNumber, let episodeNumber):
1108-
ProgressManager.shared.updateEpisodeProgress(showId: showId, seasonNumber: seasonNumber, episodeNumber: episodeNumber, currentTime: position, totalDuration: duration)
1107+
case .episode(let showId, let showTitle, let seasonNumber, let episodeNumber):
1108+
ProgressManager.shared.updateEpisodeProgress(showId: showId, showTitle: showTitle, seasonNumber: seasonNumber, episodeNumber: episodeNumber, currentTime: position, totalDuration: duration)
11091109
}
11101110
}
11111111

Luna/Tracking/Progress/ProgressManager.swift

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ struct MovieProgressEntry: Codable, Identifiable {
5656
struct EpisodeProgressEntry: Codable, Identifiable {
5757
let id: String
5858
let showId: Int
59+
var showTitle: String?
5960
let seasonNumber: Int
6061
let episodeNumber: Int
6162
var currentTime: Double = 0
@@ -160,6 +161,11 @@ final class ProgressManager {
160161
self.progressData.updateMovie(entry)
161162
}
162163
debouncedSave()
164+
165+
let progress = min(currentTime / totalDuration, 1.0)
166+
Task { @MainActor in
167+
ProgressSyncManager.shared.pushMovieProgress(tmdbId: movieId, title: title, progress: progress)
168+
}
163169
}
164170

165171
func getMovieProgress(movieId: Int, title: String) -> Double {
@@ -218,7 +224,7 @@ final class ProgressManager {
218224

219225
// MARK: - Episode Progress
220226

221-
func updateEpisodeProgress(showId: Int, seasonNumber: Int, episodeNumber: Int, currentTime: Double, totalDuration: Double) {
227+
func updateEpisodeProgress(showId: Int, showTitle: String? = nil, seasonNumber: Int, episodeNumber: Int, currentTime: Double, totalDuration: Double) {
222228
guard currentTime >= 0 && totalDuration > 0 && currentTime <= totalDuration else {
223229
Logger.shared.log("Invalid progress values for episode S\(seasonNumber)E\(episodeNumber): currentTime=\(currentTime), totalDuration=\(totalDuration)", type: "Warning")
224230
return
@@ -229,6 +235,9 @@ final class ProgressManager {
229235
var entry = self.progressData.findEpisode(showId: showId, season: seasonNumber, episode: episodeNumber)
230236
?? EpisodeProgressEntry(showId: showId, seasonNumber: seasonNumber, episodeNumber: episodeNumber)
231237

238+
if let showTitle, !showTitle.isEmpty {
239+
entry.showTitle = showTitle
240+
}
232241
entry.currentTime = currentTime
233242
entry.totalDuration = totalDuration
234243
entry.lastUpdated = Date()
@@ -240,6 +249,17 @@ final class ProgressManager {
240249
self.progressData.updateEpisode(entry)
241250
}
242251
debouncedSave()
252+
253+
let progress = min(currentTime / totalDuration, 1.0)
254+
Task { @MainActor in
255+
ProgressSyncManager.shared.pushEpisodeProgress(
256+
showId: showId,
257+
showTitle: showTitle,
258+
seasonNumber: seasonNumber,
259+
episodeNumber: episodeNumber,
260+
progress: progress
261+
)
262+
}
243263
}
244264

245265
func getEpisodeProgress(showId: Int, seasonNumber: Int, episodeNumber: Int) -> Double {
@@ -336,8 +356,8 @@ final class ProgressManager {
336356
case .movie(let id, let title):
337357
self.updateMovieProgress(movieId: id, title: title, currentTime: currentTime, totalDuration: duration)
338358

339-
case .episode(let showId, let seasonNumber, let episodeNumber):
340-
self.updateEpisodeProgress(showId: showId, seasonNumber: seasonNumber, episodeNumber: episodeNumber, currentTime: currentTime, totalDuration: duration)
359+
case .episode(let showId, let showTitle, let seasonNumber, let episodeNumber):
360+
self.updateEpisodeProgress(showId: showId, showTitle: showTitle, seasonNumber: seasonNumber, episodeNumber: episodeNumber, currentTime: currentTime, totalDuration: duration)
341361
}
342362
}
343363
}
@@ -347,7 +367,7 @@ final class ProgressManager {
347367

348368
enum MediaInfo {
349369
case movie(id: Int, title: String)
350-
case episode(showId: Int, seasonNumber: Int, episodeNumber: Int)
370+
case episode(showId: Int, showTitle: String?, seasonNumber: Int, episodeNumber: Int)
351371
}
352372

353373
// MARK: - Continue Watching Item

0 commit comments

Comments
 (0)