Marino Faggiana 1 年之前
父節點
當前提交
b184e5ad28

+ 1 - 1
Brand/Database.swift

@@ -26,4 +26,4 @@ import Foundation
 // Database Realm
 //
 let databaseName                    = "nextcloud.realm"
-let databaseSchemaVersion: UInt64   = 294
+let databaseSchemaVersion: UInt64   = 295

+ 2 - 2
Nextcloud.xcodeproj/project.pbxproj

@@ -3958,7 +3958,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 2;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
@@ -4021,7 +4021,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 2;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;

+ 49 - 1
iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift

@@ -37,6 +37,7 @@ class NCPlayerToolBar: UIView {
     @IBOutlet weak var muteButton: UIButton!
     @IBOutlet weak var playButton: UIButton!
     @IBOutlet weak var subtitleButton: UIButton!
+    @IBOutlet weak var audioButton: UIButton!
     @IBOutlet weak var forwardButton: UIButton!
     @IBOutlet weak var backButton: UIButton!
     @IBOutlet weak var playbackSlider: UISlider!
@@ -54,6 +55,7 @@ class NCPlayerToolBar: UIView {
     private var metadata: tableMetadata?
 
     private var subTitleIndex: Int32?
+    private var audioIndex: Int32?
     
     private weak var viewerMediaPage: NCViewerMediaPage?
 
@@ -93,6 +95,8 @@ class NCPlayerToolBar: UIView {
 
         subtitleButton.setImage(NCUtility.shared.loadImage(named: "captions.bubble", color: .white), for: .normal)
 
+        audioButton.setImage(NCUtility.shared.loadImage(named: "speaker.zzz", color: .white), for: .normal)
+
         backButton.setImage(NCUtility.shared.loadImage(named: "gobackward.10", color: .white), for: .normal)
 
         forwardButton.setImage(NCUtility.shared.loadImage(named: "goforward.10", color: .white), for: .normal)
@@ -268,6 +272,19 @@ class NCPlayerToolBar: UIView {
         }
     }
 
+    @IBAction func tapAudio(_ sender: Any) {
+
+        guard let player = ncplayer?.player else { return }
+
+        let audioTracks = player.audioTrackNames
+        let audioTrackIndexes = player.audioTrackIndexes
+        let count = audioTracks.count
+
+        if count > 1 {
+            toggleMenuAudio(audioTracks: audioTracks, audioTrackIndexes: audioTrackIndexes)
+        }
+    }
+
     @IBAction func tapForward(_ sender: Any) {
 
         guard let ncplayer = ncplayer else { return }
@@ -292,7 +309,6 @@ extension NCPlayerToolBar {
     func toggleMenuSubTitle(spuTracks: [Any], spuTrackIndexes: [Any]) {
 
         var actions = [NCMenuAction]()
-        let tableVideo = NCManageDatabase.shared.getVideo(metadata: metadata)
 
         if self.subTitleIndex == nil, let idx = ncplayer?.player?.currentVideoSubTitleIndex {
             self.subTitleIndex = idx
@@ -312,6 +328,38 @@ extension NCPlayerToolBar {
                     on: (self.subTitleIndex ?? -9999) == idx,
                     action: { _ in
                         self.ncplayer?.player?.currentVideoSubTitleIndex = idx
+                        self.subTitleIndex = idx
+                    }
+                )
+            )
+        }
+
+        viewerMediaPage?.presentMenu(with: actions)
+    }
+
+    func toggleMenuAudio(audioTracks: [Any], audioTrackIndexes: [Any]) {
+
+        var actions = [NCMenuAction]()
+
+        if self.audioIndex == nil, let idx = ncplayer?.player?.currentAudioTrackIndex {
+            self.audioIndex = idx
+        }
+
+        for index in 0...audioTracks.count - 1 {
+
+            guard let title = audioTracks[index] as? String, let idx = audioTrackIndexes[index] as? Int32 else { return }
+
+            actions.append(
+                NCMenuAction(
+                    title: title,
+                    icon: UIImage(),
+                    onTitle: title,
+                    onIcon: UIImage(),
+                    selected: (self.audioIndex ?? -9999) == idx,
+                    on: (self.audioIndex ?? -9999) == idx,
+                    action: { _ in
+                        self.ncplayer?.player?.currentAudioTrackIndex = idx
+                        self.audioIndex = idx
                     }
                 )
             )

+ 16 - 2
iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.xib

@@ -16,7 +16,7 @@
             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
             <subviews>
                 <stackView opaque="NO" contentMode="scaleToFill" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="XfW-XC-eMf" userLabel="Player Top Tool Bar">
-                    <rect key="frame" x="329" y="58" width="75" height="35"/>
+                    <rect key="frame" x="289" y="58" width="115" height="35"/>
                     <subviews>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qqZ-QN-TsW">
                             <rect key="frame" x="5" y="5" width="25" height="25"/>
@@ -30,8 +30,20 @@
                                 <action selector="tapSubTitle:" destination="iN0-l3-epB" eventType="touchUpInside" id="ooC-tL-TBX"/>
                             </connections>
                         </button>
-                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Fml-c2-FMY">
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sMY-qo-4CE">
                             <rect key="frame" x="45" y="5" width="25" height="25"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="25" id="kui-Ih-KqM"/>
+                                <constraint firstAttribute="width" constant="25" id="zUF-5q-I6f"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" image="speaker.zzz" catalog="system"/>
+                            <connections>
+                                <action selector="tapAudio:" destination="iN0-l3-epB" eventType="touchUpInside" id="EVU-fE-n5T"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Fml-c2-FMY">
+                            <rect key="frame" x="85" y="5" width="25" height="25"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="25" id="S8g-UR-4zh"/>
                                 <constraint firstAttribute="height" constant="25" id="zjo-O1-SI2"/>
@@ -141,6 +153,7 @@
                 <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="XfW-XC-eMf" secondAttribute="trailing" constant="10" id="uYG-Ai-CGv"/>
             </constraints>
             <connections>
+                <outlet property="audioButton" destination="sMY-qo-4CE" id="R7Q-de-Dsv"/>
                 <outlet property="backButton" destination="uP7-aY-x4n" id="SyC-qV-IMq"/>
                 <outlet property="forwardButton" destination="bGn-IC-3V1" id="0OZ-f2-eWU"/>
                 <outlet property="labelCurrentTime" destination="OHB-2J-Gqb" id="pFy-CJ-x2A"/>
@@ -161,5 +174,6 @@
         <image name="gobackward.10" catalog="system" width="119" height="128"/>
         <image name="goforward.10" catalog="system" width="119" height="128"/>
         <image name="play.fill" catalog="system" width="117" height="128"/>
+        <image name="speaker.zzz" catalog="system" width="128" height="83"/>
     </resources>
 </document>