Skip to content

Commit

Permalink
#58 - Basic plumbing for new Autoplay preferences
Browse files Browse the repository at this point in the history
  • Loading branch information
kartik-venugopal committed May 31, 2023
1 parent ecc4e6c commit c502ee7
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 21 deletions.
8 changes: 4 additions & 4 deletions Aural.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -6655,7 +6655,7 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 3.19.0;
CURRENT_PROJECT_VERSION = 3.20.0;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Frameworks";
Expand All @@ -6670,7 +6670,7 @@
);
LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.13;
MARKETING_VERSION = 3.19.0;
MARKETING_VERSION = 3.20.0;
PRODUCT_BUNDLE_IDENTIFIER = com.kv.Aural;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = Source/FFmpeg/ffmpeg.h;
Expand All @@ -6689,7 +6689,7 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 3.19.0;
CURRENT_PROJECT_VERSION = 3.20.0;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Frameworks";
Expand All @@ -6704,7 +6704,7 @@
);
LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.13;
MARKETING_VERSION = 3.19.0;
MARKETING_VERSION = 3.20.0;
PRODUCT_BUNDLE_IDENTIFIER = com.kv.Aural;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = Source/FFmpeg/ffmpeg.h;
Expand Down
Binary file not shown.
28 changes: 26 additions & 2 deletions Source/Preferences/PlaybackPreferences.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,13 @@ class PlaybackPreferences: PersistentPreferencesProtocol {
private var controlsPreferences: GesturesControlsPreferences!

var autoplayOnStartup: Bool

var autoplayAfterAddingTracks: Bool
var autoplayAfterAddingOption: AutoplayAfterAddingOptions

var autoplayAfterOpeningTracks: Bool
var autoplayAfterOpeningOption: AutoplayAfterOpeningOptions

var rememberLastPositionOption: RememberSettingsForTrackOptions

private static let keyPrefix: String = "playback"
Expand All @@ -48,9 +52,13 @@ class PlaybackPreferences: PersistentPreferencesProtocol {
static let key_secondarySeekLengthPercentage: String = "\(keyPrefix).seekLength.secondary.percentage"

static let key_autoplayOnStartup: String = "\(keyPrefix).autoplayOnStartup"

static let key_autoplayAfterAddingTracks: String = "\(keyPrefix).autoplayAfterAddingTracks"
static let key_autoplayAfterAddingOption: String = "\(keyPrefix).autoplayAfterAddingTracks.option"

static let key_autoplayAfterOpeningTracks: String = "\(keyPrefix).autoplayAfterOpeningTracks"
static let key_autoplayAfterOpeningOption: String = "\(keyPrefix).autoplayAfterOpeningTracks.option"

static let key_rememberLastPositionOption: String = "\(keyPrefix).rememberLastPosition.option"

convenience init(_ dict: [String: Any], _ controlsPreferences: GesturesControlsPreferences) {
Expand Down Expand Up @@ -82,6 +90,11 @@ class PlaybackPreferences: PersistentPreferencesProtocol {
autoplayAfterAddingOption = dict.enumValue(forKey: Self.key_autoplayAfterAddingOption,
ofType: AutoplayAfterAddingOptions.self) ?? Defaults.autoplayAfterAddingOption

autoplayAfterOpeningTracks = dict[Self.key_autoplayAfterOpeningTracks, Bool.self] ?? Defaults.autoplayAfterOpeningTracks

autoplayAfterOpeningOption = dict.enumValue(forKey: Self.key_autoplayAfterOpeningOption,
ofType: AutoplayAfterOpeningOptions.self) ?? Defaults.autoplayAfterOpeningOption

rememberLastPositionOption = dict.enumValue(forKey: Self.key_rememberLastPositionOption,
ofType: RememberSettingsForTrackOptions.self) ?? Defaults.rememberLastPositionOption
}
Expand All @@ -96,9 +109,13 @@ class PlaybackPreferences: PersistentPreferencesProtocol {
defaults[Self.key_secondarySeekLengthConstant] = secondarySeekLengthConstant
defaults[Self.key_secondarySeekLengthPercentage] = secondarySeekLengthPercentage

defaults[Self.key_autoplayOnStartup] = autoplayOnStartup
defaults[Self.key_autoplayOnStartup] = autoplayOnStartup

defaults[Self.key_autoplayAfterAddingTracks] = autoplayAfterAddingTracks
defaults[Self.key_autoplayAfterAddingOption] = autoplayAfterAddingOption.rawValue
defaults[Self.key_autoplayAfterAddingOption] = autoplayAfterAddingOption.rawValue

defaults[Self.key_autoplayAfterOpeningTracks] = autoplayAfterOpeningTracks
defaults[Self.key_autoplayAfterOpeningOption] = autoplayAfterOpeningOption.rawValue

defaults[Self.key_rememberLastPositionOption] = rememberLastPositionOption.rawValue
}
Expand All @@ -117,6 +134,13 @@ enum AutoplayAfterAddingOptions: String, CaseIterable {
case always
}

// Possible options for the "autoplay afer 'Open With'" user preference
enum AutoplayAfterOpeningOptions: String, CaseIterable {

case ifNotPlaying
case always
}

enum RememberSettingsForTrackOptions: String, CaseIterable {

case allTracks
Expand Down
5 changes: 4 additions & 1 deletion Source/Preferences/PreferencesDefaults.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,13 @@ struct PreferencesDefaults {
static let secondarySeekLengthPercentage: Int = 10

static let autoplayOnStartup: Bool = false
static let autoplayAfterAddingTracks: Bool = false

static let autoplayAfterAddingTracks: Bool = false
static let autoplayAfterAddingOption: AutoplayAfterAddingOptions = .ifNotPlaying

static let autoplayAfterOpeningTracks: Bool = true
static let autoplayAfterOpeningOption: AutoplayAfterOpeningOptions = .always

static let rememberLastPositionOption: RememberSettingsForTrackOptions = .individualTracks
}

Expand Down
49 changes: 41 additions & 8 deletions Source/UI/Preferences/Playback/PlaybackPreferences.xib
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
<customObject id="-2" userLabel="File's Owner" customClass="PlaybackPreferencesViewController" customModule="Aural" customModuleProvider="target">
<connections>
<outlet property="btnAutoplayAfterAddingTracks" destination="qSu-Gq-GD0" id="WFj-tj-Ui4"/>
<outlet property="btnAutoplayAlways" destination="WrV-9w-TDC" id="ISm-HO-4OZ"/>
<outlet property="btnAutoplayIfNotPlaying" destination="Oaz-io-4ja" id="Ugf-fh-bTf"/>
<outlet property="btnAutoplayAfterAdding_Always" destination="WrV-9w-TDC" id="ISm-HO-4OZ"/>
<outlet property="btnAutoplayAfterAdding_IfNotPlaying" destination="Oaz-io-4ja" id="Ugf-fh-bTf"/>
<outlet property="btnAutoplayOnStartup" destination="znf-vd-0EN" id="v3P-VH-2gM"/>
<outlet property="btnInfo_primarySeekLength" destination="L8I-p6-5ZK" id="7hv-qa-tZC"/>
<outlet property="btnInfo_secondarySeekLength" destination="pLg-Zx-z1o" id="O0L-tk-5qQ"/>
Expand Down Expand Up @@ -83,7 +83,7 @@
</connections>
</stepper>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qSu-Gq-GD0" customClass="DialogCheckRadioButton" customModule="Aural" customModuleProvider="target">
<rect key="frame" x="47" y="261" width="281" height="20"/>
<rect key="frame" x="47" y="256" width="281" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="After adding tracks, play first added track" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="5Kd-qp-PiC">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
Expand All @@ -103,7 +103,7 @@
</textFieldCell>
</textField>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FAF-So-sMu" userLabel="For individual tracks" customClass="DialogCheckRadioButton" customModule="Aural" customModuleProvider="target">
<rect key="frame" x="45" y="153.5" width="443" height="19.5"/>
<rect key="frame" x="45" y="88.5" width="443" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="radio" title="For individual tracks that I apply this option to (Playback menu)" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="hzV-ZU-muz">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
Expand Down Expand Up @@ -134,7 +134,7 @@
</connections>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8DU-OO-agi" customClass="DialogCheckRadioButton" customModule="Aural" customModuleProvider="target">
<rect key="frame" x="45" y="134.5" width="213" height="19.5"/>
<rect key="frame" x="45" y="69.5" width="213" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="radio" title="For all tracks" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="Jw4-k0-1Eu">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
Expand All @@ -158,7 +158,7 @@
</textFieldCell>
</textField>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WrV-9w-TDC" customClass="DialogCheckRadioButton" customModule="Aural" customModuleProvider="target">
<rect key="frame" x="71" y="221.5" width="203" height="19.5"/>
<rect key="frame" x="71" y="216.5" width="203" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="radio" title="Always" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="B13-O8-QKf">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
Expand All @@ -169,7 +169,7 @@
</connections>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="h0M-Y1-Jc0">
<rect key="frame" x="35" y="177" width="430" height="20"/>
<rect key="frame" x="35" y="112" width="430" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Resume track playback from last playback position" id="bNf-Jp-q0R">
<font key="font" size="13" name="Play-Regular"/>
Expand All @@ -178,7 +178,7 @@
</textFieldCell>
</textField>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Oaz-io-4ja" customClass="DialogCheckRadioButton" customModule="Aural" customModuleProvider="target">
<rect key="frame" x="71" y="240.5" width="232" height="19.5"/>
<rect key="frame" x="71" y="235.5" width="232" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="radio" title="If no track is currently playing" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="fim-2o-tXZ">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
Expand All @@ -188,6 +188,39 @@
<action selector="autoplayAfterAddingRadioButtonAction:" target="-2" id="50Q-NE-F1L"/>
</connections>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="t4d-Qx-hGu" customClass="DialogCheckRadioButton" customModule="Aural" customModuleProvider="target">
<rect key="frame" x="47" y="196" width="527" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="After opening tracks with &quot;Open With&quot; (or double-click), play first opened track" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="dCl-cX-3hy">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" size="11" name="Play-Regular"/>
</buttonCell>
<connections>
<action selector="autoplayAfterAddingAction:" target="-2" id="Vns-3l-63k"/>
</connections>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="15u-Vf-yRK" customClass="DialogCheckRadioButton" customModule="Aural" customModuleProvider="target">
<rect key="frame" x="71" y="176.5" width="203" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="radio" title="Always" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="7wi-vx-hNk">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" size="11" name="Play-Regular"/>
</buttonCell>
<connections>
<action selector="autoplayAfterAddingRadioButtonAction:" target="-2" id="gvd-di-mvL"/>
</connections>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="GK8-Xg-g0d" customClass="DialogCheckRadioButton" customModule="Aural" customModuleProvider="target">
<rect key="frame" x="71" y="157.5" width="232" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="radio" title="If no track is currently playing" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="YaO-su-d70">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" size="11" name="Play-Regular"/>
</buttonCell>
<connections>
<action selector="autoplayAfterAddingRadioButtonAction:" target="-2" id="ckb-5x-XcJ"/>
</connections>
</button>
<stepper focusRingType="none" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CC1-0k-NBg" userLabel="Secondary Seek Stepper">
<rect key="frame" x="518" y="344" width="15" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,12 @@ class PlaybackPreferencesViewController: NSViewController, PreferencesViewProtoc
@IBOutlet weak var btnAutoplayOnStartup: NSButton!

@IBOutlet weak var btnAutoplayAfterAddingTracks: NSButton!
@IBOutlet weak var btnAutoplayIfNotPlaying: NSButton!
@IBOutlet weak var btnAutoplayAlways: NSButton!
@IBOutlet weak var btnAutoplayAfterAdding_IfNotPlaying: NSButton!
@IBOutlet weak var btnAutoplayAfterAdding_Always: NSButton!

@IBOutlet weak var btnAutoplayAfterOpeningTracks: NSButton!
@IBOutlet weak var btnAutoplayAfterOpening_IfNotPlaying: NSButton!
@IBOutlet weak var btnAutoplayAfterOpening_Always: NSButton!

@IBOutlet weak var btnRememberPosition_allTracks: NSButton!
@IBOutlet weak var btnRememberPosition_individualTracks: NSButton!
Expand All @@ -57,7 +61,7 @@ class PlaybackPreferencesViewController: NSViewController, PreferencesViewProtoc
override var nibName: String? {"PlaybackPreferences"}

var preferencesView: NSView {
return self.view
view
}

override func viewDidLoad() {
Expand Down Expand Up @@ -111,10 +115,14 @@ class PlaybackPreferencesViewController: NSViewController, PreferencesViewProtoc
// Autoplay

btnAutoplayOnStartup.onIf(prefs.autoplayOnStartup)

btnAutoplayAfterAddingTracks.onIf(prefs.autoplayAfterAddingTracks)
btnAutoplayAfterAdding_IfNotPlaying.onIf(prefs.autoplayAfterAddingOption == .ifNotPlaying)
btnAutoplayAfterAdding_Always.onIf(prefs.autoplayAfterAddingOption == .always)

btnAutoplayIfNotPlaying.onIf(prefs.autoplayAfterAddingOption == .ifNotPlaying)
btnAutoplayAlways.onIf(prefs.autoplayAfterAddingOption == .always)
btnAutoplayAfterOpeningTracks.onIf(prefs.autoplayAfterOpeningTracks)
btnAutoplayAfterOpening_Always.onIf(prefs.autoplayAfterOpeningOption == .always)
btnAutoplayAfterOpening_IfNotPlaying.onIf(prefs.autoplayAfterOpeningOption == .ifNotPlaying)

// Remember last track position

Expand Down Expand Up @@ -161,6 +169,10 @@ class PlaybackPreferencesViewController: NSViewController, PreferencesViewProtoc
// Needed for radio button group
}

@IBAction func autoplayAfterOpeningRadioButtonAction(_ sender: Any) {
// Needed for radio button group
}

@IBAction func rememberLastPositionRadioButtonAction(_ sender: Any) {
// Needed for radio button group
}
Expand Down Expand Up @@ -201,7 +213,10 @@ class PlaybackPreferencesViewController: NSViewController, PreferencesViewProtoc
prefs.autoplayOnStartup = btnAutoplayOnStartup.isOn

prefs.autoplayAfterAddingTracks = btnAutoplayAfterAddingTracks.isOn
prefs.autoplayAfterAddingOption = btnAutoplayIfNotPlaying.isOn ? .ifNotPlaying : .always
prefs.autoplayAfterAddingOption = btnAutoplayAfterAdding_IfNotPlaying.isOn ? .ifNotPlaying : .always

prefs.autoplayAfterOpeningTracks = btnAutoplayAfterOpeningTracks.isOn
prefs.autoplayAfterOpeningOption = btnAutoplayAfterOpening_IfNotPlaying.isOn ? .ifNotPlaying : .always

// Playback profiles

Expand Down

0 comments on commit c502ee7

Please sign in to comment.