commit 76529f69d092b5c615119061bb998501558f9a7d
parent 052ea9b7278db661043f47dbbb8396590281d3e9
Author: William Casarin <jb55@jb55.com>
Date: Thu, 25 Apr 2024 14:54:04 -0700
Revert "Cache videos"
This reverts commit 26d2627a1c49f62565de53e7ddf015162bb77e62.
Diffstat:
5 files changed, 1 insertion(+), 127 deletions(-)
diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj
@@ -487,7 +487,6 @@
D76556D62B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76556D52B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift */; };
D76874F32AE3632B00FB0F68 /* ProfileZapLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76874F22AE3632B00FB0F68 /* ProfileZapLinkView.swift */; };
D77BFA0B2AE3051200621634 /* ProfileActionSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77BFA0A2AE3051200621634 /* ProfileActionSheetView.swift */; };
- D7831AF82BBE11E2005DA780 /* VideoCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7831AF72BBE11E2005DA780 /* VideoCacheTests.swift */; };
D783A63F2AD4E53D00658DDA /* SuggestedHashtagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D783A63E2AD4E53D00658DDA /* SuggestedHashtagsView.swift */; };
D78525252A7B2EA4002FA637 /* NoteContentViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78525242A7B2EA4002FA637 /* NoteContentViewTests.swift */; };
D7870BC12AC4750B0080BA88 /* MentionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7870BC02AC4750B0080BA88 /* MentionView.swift */; };
@@ -518,7 +517,6 @@
D7ADD3DE2B53854300F104C4 /* DamusPurpleURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7ADD3DD2B53854300F104C4 /* DamusPurpleURL.swift */; };
D7ADD3E02B538D4200F104C4 /* DamusPurpleURLSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7ADD3DF2B538D4200F104C4 /* DamusPurpleURLSheetView.swift */; };
D7ADD3E22B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7ADD3E12B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift */; };
- D7C28E3B2BBB4D0000EE459F /* VideoCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C28E3A2BBB4D0000EE459F /* VideoCache.swift */; };
D7C6787E2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C6787D2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift */; };
D7CB5D3B2B112FBB00AD4105 /* NotificationFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70A3B162B02DCE5008BD568 /* NotificationFormatter.swift */; };
D7CB5D3C2B1130C600AD4105 /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDA128B29EB19C40006FA5A /* LocalNotification.swift */; };
@@ -1401,7 +1399,6 @@
D76556D52B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleWelcomeView.swift; sourceTree = "<group>"; };
D76874F22AE3632B00FB0F68 /* ProfileZapLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileZapLinkView.swift; sourceTree = "<group>"; };
D77BFA0A2AE3051200621634 /* ProfileActionSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileActionSheetView.swift; sourceTree = "<group>"; };
- D7831AF72BBE11E2005DA780 /* VideoCacheTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoCacheTests.swift; sourceTree = "<group>"; };
D783A63E2AD4E53D00658DDA /* SuggestedHashtagsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestedHashtagsView.swift; sourceTree = "<group>"; };
D78525242A7B2EA4002FA637 /* NoteContentViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteContentViewTests.swift; sourceTree = "<group>"; };
D7870BC02AC4750B0080BA88 /* MentionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MentionView.swift; sourceTree = "<group>"; };
@@ -1417,7 +1414,6 @@
D7ADD3DD2B53854300F104C4 /* DamusPurpleURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleURL.swift; sourceTree = "<group>"; };
D7ADD3DF2B538D4200F104C4 /* DamusPurpleURLSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleURLSheetView.swift; sourceTree = "<group>"; };
D7ADD3E12B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleVerifyNpubView.swift; sourceTree = "<group>"; };
- D7C28E3A2BBB4D0000EE459F /* VideoCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoCache.swift; sourceTree = "<group>"; };
D7C6787D2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP98AuthenticatedRequest.swift; sourceTree = "<group>"; };
D7CB5D3D2B116DAD00AD4105 /* NotificationsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsManager.swift; sourceTree = "<group>"; };
D7CB5D442B116FE800AD4105 /* Contacts+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Contacts+.swift"; sourceTree = "<group>"; };
@@ -1653,7 +1649,6 @@
D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */,
B5C60C1F2B530D5100C5ECA7 /* MuteItem.swift */,
B533694D2B66D791008A805E /* MutelistManager.swift */,
- D7C28E3A2BBB4D0000EE459F /* VideoCache.swift */,
);
path = Models;
sourceTree = "<group>";
@@ -3290,7 +3285,6 @@
4C1253522A76C6130004F4B8 /* ComposeNotify.swift in Sources */,
4C7D09662A0AE62100943473 /* AlbyButton.swift in Sources */,
D7100C582B76FC8400C59298 /* MarketingContentView.swift in Sources */,
- D7C28E3B2BBB4D0000EE459F /* VideoCache.swift in Sources */,
4CAAD8AD298851D000060CEA /* AccountDeletion.swift in Sources */,
4CFF8F6329CC9AD7008DB934 /* ImageContextMenuModifier.swift in Sources */,
4C54AA0A29A55429003E4487 /* EventGroup.swift in Sources */,
@@ -3547,7 +3541,6 @@
75AD872B2AA23A460085EF2C /* Block+Tests.swift in Sources */,
E0E024112B7C19C20075735D /* TranslationTests.swift in Sources */,
F944F56E29EA9CCC0067B3BF /* DamusParseContentTests.swift in Sources */,
- D7831AF82BBE11E2005DA780 /* VideoCacheTests.swift in Sources */,
3A5E47C72A4A76C800C0D090 /* TrieTests.swift in Sources */,
B501062D2B363036003874F5 /* AuthIntegrationTests.swift in Sources */,
4CB883AE2976FA9300DC99E7 /* FormatTests.swift in Sources */,
diff --git a/damus/ContentView.swift b/damus/ContentView.swift
@@ -516,7 +516,6 @@ struct ContentView: View {
print("txn: 📙 DAMUS BACKGROUNDED")
Task { @MainActor in
damus_state.ndb.close()
- VideoCache.standard?.periodic_purge()
}
break
case .inactive:
diff --git a/damus/Views/Video/DamusVideoPlayer.swift b/damus/Views/Video/DamusVideoPlayer.swift
@@ -33,7 +33,7 @@ struct DamusVideoPlayer: View {
else {
mute = nil
}
- _model = StateObject(wrappedValue: DamusVideoPlayerViewModel.cached_video_model(url: url, video_size: video_size, controller: controller, mute: mute))
+ _model = StateObject(wrappedValue: DamusVideoPlayerViewModel(url: url, video_size: video_size, controller: controller, mute: mute))
self.visibility_tracking_method = visibility_tracking_method
self.style = style
}
diff --git a/damus/Views/Video/DamusVideoPlayerViewModel.swift b/damus/Views/Video/DamusVideoPlayerViewModel.swift
@@ -57,12 +57,6 @@ final class DamusVideoPlayerViewModel: ObservableObject {
}
}
- static func cached_video_model(url: URL, video_size: Binding<CGSize?>, controller: VideoController, mute: Bool? = nil) -> Self {
- let maybe_cached_url = (try? VideoCache.standard?.maybe_cached_url_for(video_url: url)) ?? url
- Log.info("Loading video with URL: %s",for: .render, maybe_cached_url.absoluteString)
- return Self.init(url: maybe_cached_url, video_size: video_size, controller: controller, mute: mute)
- }
-
init(url: URL, video_size: Binding<CGSize?>, controller: VideoController, mute: Bool? = nil) {
self.url = url
player_item = AVPlayerItem(url: url)
diff --git a/damusTests/VideoCacheTests.swift b/damusTests/VideoCacheTests.swift
@@ -1,112 +0,0 @@
-//
-// VideoCacheTests.swift
-// damusTests
-//
-// Created by Daniel D’Aquino on 2024-04-03.
-//
-
-import Foundation
-import XCTest
-@testable import damus
-
-// TODO: Reduce test dependency on external factors such as external URLs.
-let TEST_VIDEO_URL = "http://cdn.jb55.com/s/zaps-build.mp4"
-let LONG_TEST_EXPIRY_TIME: TimeInterval = 60 * 60 * 24 // A long expiry time for a video (in seconds).
-let SHORT_TEST_EXPIRY_TIME: TimeInterval = 15 // A short expiry time for a video (in seconds). Must be as short as possible but large enough to allow some test operations to occur
-let CACHE_SAVE_TIME_TIMEOUT: TimeInterval = 8 // How long the test will wait for the cache to save a file (in seconds)
-let EXPIRY_TIME_MARGIN: TimeInterval = 3 // The extra time we will wait after expected expiry, to avoid test timing issues. (in seconds)
-
-final class VideoCacheTests: XCTestCase {
-
- func testCachedURLForExistingVideo() throws {
- // Create a temporary directory for the cache
- let test_cache_directory = FileManager.default.temporaryDirectory.appendingPathComponent("test_video_cache")
-
- // Create a test video file
- let original_video_url = URL(string: TEST_VIDEO_URL)!
- FileManager.default.createFile(atPath: original_video_url.path, contents: Data(), attributes: nil)
-
- // Create a VideoCache instance with the temporary cache directory
- let test_expiry_time: TimeInterval = 10
- let video_cache = try VideoCache(cache_url: test_cache_directory, expiry_time: test_expiry_time)!
-
- // Call the maybe_cached_url_for method with the test video URL
- let expected_cache_url = video_cache.url_to_cached_url(url: original_video_url)
- let maybe_cached_url = try video_cache.maybe_cached_url_for(video_url: original_video_url)
-
- // Assert that the returned URL is the same as the original
- XCTAssertEqual(maybe_cached_url, original_video_url, "Returned URL should be the same as the original video URL on the first time we download it")
-
- // Check that next time we get this video, we get the cached URL.
- let cached_url_expectation = XCTestExpectation(description: "On second time we get a video, the cached URL should be returned")
- let start_time = Date()
- while Date().timeIntervalSince(start_time) < CACHE_SAVE_TIME_TIMEOUT {
- let maybe_cached_url = try video_cache.maybe_cached_url_for(video_url: original_video_url)
- if maybe_cached_url == expected_cache_url {
- cached_url_expectation.fulfill()
- break
- }
- sleep(1)
- }
- wait(for: [cached_url_expectation], timeout: CACHE_SAVE_TIME_TIMEOUT)
-
- // Now wait for the remaining time until the expiry time + a margin
- let remaining_time = test_expiry_time + EXPIRY_TIME_MARGIN - Date().timeIntervalSince(start_time)
-
- // Wait for the expiry time to pass
- sleep(UInt32(max(remaining_time, 0)))
-
- // Call the periodic_purge method to purge expired video items
- video_cache.periodic_purge()
-
- // Call the maybe_cached_url_for method again
- let maybe_cached_url_after_expiry = try video_cache.maybe_cached_url_for(video_url: original_video_url)
-
- // Assert that the returned URL is the same as the original video URL, since the cache should have expired.
- XCTAssertEqual(maybe_cached_url_after_expiry, original_video_url, "Video cache should expire after expiry time")
-
- // Clean up the temporary files and directory
- try FileManager.default.removeItem(at: test_cache_directory)
- }
-
- func testClearCache() throws {
- // Create a temporary directory for the cache
- let test_cache_directory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!.appendingPathComponent("test_video_cache")
- try FileManager.default.createDirectory(at: test_cache_directory, withIntermediateDirectories: true, attributes: nil)
-
- // Create a test video file
- let original_video_url = URL(string: TEST_VIDEO_URL)!
- FileManager.default.createFile(atPath: original_video_url.path, contents: Data(), attributes: nil)
-
- // Create a VideoCache instance with the temporary cache directory and a longer expiry time
- let expiry_time: TimeInterval = LONG_TEST_EXPIRY_TIME
- let video_cache = try VideoCache(cache_url: test_cache_directory, expiry_time: expiry_time)!
-
- // Request the cached URL for the test video to create the cached file
- let expected_cache_url = video_cache.url_to_cached_url(url: original_video_url)
- let _ = try video_cache.maybe_cached_url_for(video_url: original_video_url)
-
- // Check that next time we get this video, we get the cached URL.
- let cached_url_expectation = XCTestExpectation(description: "On second time we get a video, the cached URL should be returned")
- let start_time = Date()
- while Date().timeIntervalSince(start_time) < CACHE_SAVE_TIME_TIMEOUT {
- let maybe_cached_url = try video_cache.maybe_cached_url_for(video_url: original_video_url)
- if maybe_cached_url == expected_cache_url {
- cached_url_expectation.fulfill()
- break
- }
- sleep(1)
- }
- wait(for: [cached_url_expectation], timeout: CACHE_SAVE_TIME_TIMEOUT)
-
- // Call the periodic_purge method
- DamusCacheManager.shared.clear_cache(damus_state: test_damus_state, completion: {
- // Assert that fetching the cached URL after clearing cache will
- let maybe_cached_url_after_purge = try? video_cache.maybe_cached_url_for(video_url: original_video_url)
- XCTAssertEqual(maybe_cached_url_after_purge, original_video_url)
-
- // Clean up the temporary directory
- try? FileManager.default.removeItem(at: test_cache_directory)
- })
- }
-}