diff --git a/airsync-bg.jpg b/airsync-bg.jpg index 4e1ca7b..6f7a0c7 100644 Binary files a/airsync-bg.jpg and b/airsync-bg.jpg differ diff --git a/airsync-mac/Core/Util/MacInfo/MacInfoSyncManager.swift b/airsync-mac/Core/Util/MacInfo/MacInfoSyncManager.swift index 2f6a786..835bec1 100644 --- a/airsync-mac/Core/Util/MacInfo/MacInfoSyncManager.swift +++ b/airsync-mac/Core/Util/MacInfo/MacInfoSyncManager.swift @@ -213,8 +213,8 @@ class MacInfoSyncManager: ObservableObject { isPlaying: info.isPlaying ?? false, title: info.title ?? "", artist: info.artist ?? "", - volume: 50, // must match payload default - isMuted: false, // must match payload default + volume: MacRemoteManager.shared.lastVolumeLevel, + isMuted: MacRemoteManager.shared.lastVolumeLevel == 0, albumArt: currentHash ?? "", // Use hash for snapshot comparison likeStatus: "none" // must match payload default ) diff --git a/airsync-mac/Core/Util/Remote/MacRemoteManager.swift b/airsync-mac/Core/Util/Remote/MacRemoteManager.swift index 37c8fe6..4cbc1f4 100644 --- a/airsync-mac/Core/Util/Remote/MacRemoteManager.swift +++ b/airsync-mac/Core/Util/Remote/MacRemoteManager.swift @@ -411,7 +411,7 @@ class MacRemoteManager: ObservableObject { private func notifyVolumeChange() { DispatchQueue.main.async { // Send update via WebSocket - let levelInt = Int(self.lastVolumeLevel * 100) + let levelInt = self.lastVolumeLevel print("[MacRemoteManager] Notifying volume change: \(levelInt)%") WebSocketServer.shared.sendMacVolumeUpdate(level: levelInt) } diff --git a/airsync-mac/Core/WebSocket/WebSocketServer+Handlers.swift b/airsync-mac/Core/WebSocket/WebSocketServer+Handlers.swift index 40ab86d..9512178 100644 --- a/airsync-mac/Core/WebSocket/WebSocketServer+Handlers.swift +++ b/airsync-mac/Core/WebSocket/WebSocketServer+Handlers.swift @@ -717,8 +717,10 @@ extension WebSocketServer { let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "2.0.0" let savedAppPackages = Array(AppState.shared.androidApps.keys) + let modelId = DeviceTypeUtil.modelIdentifier() let macInfo = MacInfo( name: macName, + modelIdentifier: modelId, categoryType: categoryType, exactDeviceName: exactDeviceName, isPlusSubscription: isPlusSubscription, @@ -729,7 +731,7 @@ extension WebSocketServer { do { let jsonData = try JSONEncoder().encode(macInfo) if var jsonDict = try JSONSerialization.jsonObject(with: jsonData) as? [String: Any] { - jsonDict["model"] = exactDeviceName + jsonDict["model"] = modelId jsonDict["type"] = categoryType jsonDict["isPlus"] = isPlusSubscription diff --git a/airsync-mac/Core/WebSocket/WebSocketServer+Outgoing.swift b/airsync-mac/Core/WebSocket/WebSocketServer+Outgoing.swift index 0ca67e9..8a5e091 100644 --- a/airsync-mac/Core/WebSocket/WebSocketServer+Outgoing.swift +++ b/airsync-mac/Core/WebSocket/WebSocketServer+Outgoing.swift @@ -151,8 +151,8 @@ extension WebSocketServer { "isPlaying": musicInfo.isPlaying ?? false, "title": musicInfo.title ?? "", "artist": musicInfo.artist ?? "", - "volume": 50, - "isMuted": false, + "volume": MacRemoteManager.shared.lastVolumeLevel, + "isMuted": MacRemoteManager.shared.lastVolumeLevel == 0, "likeStatus": "none" ] diff --git a/airsync-mac/Info.plist b/airsync-mac/Info.plist index b901b1d..44a3c3d 100644 --- a/airsync-mac/Info.plist +++ b/airsync-mac/Info.plist @@ -3,7 +3,7 @@ AndroidVersion - 2.6.0 + 3.0.0 CFBundleDocumentTypes @@ -40,7 +40,7 @@ ForceUpdateKey - 004 + 005 NSAppTransportSecurity NSAllowsArbitraryLoads diff --git a/airsync-mac/Localization/fr.json b/airsync-mac/Localization/fr.json index e58f626..7aa5226 100644 --- a/airsync-mac/Localization/fr.json +++ b/airsync-mac/Localization/fr.json @@ -26,34 +26,34 @@ "status.volume": "Volume", "media.play": "Jouer", "media.pause": "Pause", - "settings.wiredAdb": "Wired ADB support", + "settings.wiredAdb": "Support d'ADB filaire", "quickshare.title": "Quick Share", "quickshare.button": "Quick Share", - "quickshare.settings.title": "Quick Share Settings", - "quickshare.settings.enabled": "Enable Quick Share", - "quickshare.settings.discoverable": "Discoverable as %@", - "quickshare.accept": "Accept", - "quickshare.decline": "Decline", - "quickshare.deviceSending": "%1$@ is sending %2$@", - "quickshare.error.protocol": "Protocol error", - "quickshare.error.crypto": "Encryption error", - "quickshare.transferError": "Transfer error with %@", - "quickshare.settings.autoAccept": "Auto accept from my device", - "quickshare.waiting_for": "Waiting for %1$@...", - "quickshare.select_device": "Select a device", - "quickshare.searching": "Searching for nearby devices...", - "quickshare.more_devices": "More devices", - "quickshare.cancel": "Cancel", - "quickshare.done": "Done", - "quickshare.sending": "Sending...", - "quickshare.receiving": "Receiving...", - "quickshare.confirm_pin": "Confirm PIN on your device", - "quickshare.finished": "Transfer Finished!", - "quickshare.failed": "Transfer Failed", - "quickshare.pin_code": "PIN: %@", - "quickshare.device_sending_files": "%1$@ is sending %2$@", - "quickshare.n_files": "%d files", - "quickshare.drop.send_to": "Send to %@", - "quickshare.drop.pick_device": "Pick a device to send", + "quickshare.settings.title": "Paramètres de Quick Share", + "quickshare.settings.enabled": "Activer Quick Share", + "quickshare.settings.discoverable": "Détectable en tant que %@", + "quickshare.accept": "Accepter", + "quickshare.decline": "Refuser", + "quickshare.deviceSending": "%1$@ envoie %2$@", + "quickshare.error.protocol": "Erreur de protocole", + "quickshare.error.crypto": "Erreur de chiffrement", + "quickshare.transferError": "Erreur du transfert avec %@", + "quickshare.settings.autoAccept": "Accepter automatiquement de mon appareil", + "quickshare.waiting_for": "En attente de %1$@...", + "quickshare.select_device": "Sélectionnez un appareil", + "quickshare.searching": "Recherche d'appareils à proximité...", + "quickshare.more_devices": "Plus d'appareils", + "quickshare.cancel": "Annuler", + "quickshare.done": "Confirmer", + "quickshare.sending": "Envoi...", + "quickshare.receiving": "Réception...", + "quickshare.confirm_pin": "Confirmez le PIN sur votre appareil", + "quickshare.finished": "Transfert terminé !", + "quickshare.failed": "Transfert échoué", + "quickshare.pin_code": "PIN : %@", + "quickshare.device_sending_files": "%1$@ envoie %2$@", + "quickshare.n_files": "%d fichiers", + "quickshare.drop.send_to": "Envoyer à %@", + "quickshare.drop.pick_device": "Choisissez un appareil auquel envoyer", "settings.quickshare": "Quick Share" } diff --git a/airsync-mac/Model/MacInfo.swift b/airsync-mac/Model/MacInfo.swift index 60e21a3..01c44f2 100644 --- a/airsync-mac/Model/MacInfo.swift +++ b/airsync-mac/Model/MacInfo.swift @@ -9,6 +9,7 @@ import Foundation struct MacInfo: Codable { let name: String + let modelIdentifier: String let categoryType: String let exactDeviceName: String let isPlusSubscription: Bool