aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Managers
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2025-11-08 19:51:48 -0800
committerDustin Mierau <dustin@mierau.me>2025-11-08 19:51:48 -0800
commit2caf86e633c1a121c8e23d068ac817ed8e80f6a7 (patch)
tree4c3d9cb30d9df501a4befd15bb798f7964c8caad /Hotline/Managers
parent206e4bbdaba85062a38b32c16a9937ab42cddb47 (diff)
Moved SoundEffects to Managers. Updated connect form in ServerView. Changed some icons in context menus for bookmarks.
Diffstat (limited to 'Hotline/Managers')
-rw-r--r--Hotline/Managers/SoundEffects.swift40
1 files changed, 40 insertions, 0 deletions
diff --git a/Hotline/Managers/SoundEffects.swift b/Hotline/Managers/SoundEffects.swift
new file mode 100644
index 0000000..85a1c0e
--- /dev/null
+++ b/Hotline/Managers/SoundEffects.swift
@@ -0,0 +1,40 @@
+import Foundation
+import AppKit
+
+enum SoundEffect: String {
+ case loggedIn = "logged-in"
+ case chatMessage = "chat-message"
+ case transferComplete = "transfer-complete"
+ case userLogin = "user-login"
+ case userLogout = "user-logout"
+ case newNews = "new-news"
+ case serverMessage = "server-message"
+ case error = "error"
+
+ static var all: [SoundEffect] = [.loggedIn, .chatMessage, .transferComplete, .userLogin, .userLogout, .newNews, .serverMessage, .error]
+}
+
+class SoundEffects {
+ static let shared = SoundEffects()
+
+ static func play(_ name: SoundEffect) {
+ Self.shared.play(name)
+ }
+
+ private var preloadedSounds: [SoundEffect: NSSound] = [:]
+
+ private init() {
+ // Preload sound effects
+ for effect in SoundEffect.all {
+ if let soundFileURL = Bundle.main.url(forResource: effect.rawValue, withExtension: "aiff"),
+ let sound = NSSound(contentsOf: soundFileURL, byReference: true) {
+ sound.volume = 0.75
+ self.preloadedSounds[effect] = sound
+ }
+ }
+ }
+
+ func play(_ name: SoundEffect) {
+ self.preloadedSounds[name]?.play()
+ }
+}