Merge 88ec05999e into 84a452931e
@ -9,21 +9,6 @@
|
||||
import AppKit
|
||||
|
||||
class AlbumTracksDataSource: NSObject, NSTableViewDataSource {
|
||||
struct AlbumSongItem {
|
||||
let disc: String?
|
||||
let song: Song?
|
||||
|
||||
init(song: Song) {
|
||||
self.disc = nil
|
||||
self.song = song
|
||||
}
|
||||
|
||||
init(disc: String) {
|
||||
self.disc = disc
|
||||
self.song = nil
|
||||
}
|
||||
}
|
||||
|
||||
var albumSongs: [AlbumSongItem] = []
|
||||
var showSongArtist: Bool = false
|
||||
|
||||
|
||||
@ -6,9 +6,9 @@
|
||||
// Copyright © 2019 Dan Barber. All rights reserved.
|
||||
//
|
||||
|
||||
import AppKit
|
||||
import CoreGraphics
|
||||
|
||||
extension CGColor {
|
||||
static let albumBorderColorLight = NSColor.black.withAlphaComponent(0.15).cgColor
|
||||
static let albumBorderColorDark = NSColor.white.withAlphaComponent(0.15).cgColor
|
||||
static let albumBorderColorLight = CGColor.black.copy(alpha: 0.15)
|
||||
static let albumBorderColorDark = CGColor.white.copy(alpha: 0.15)
|
||||
}
|
||||
|
||||
@ -298,7 +298,7 @@
|
||||
<rect key="frame" x="0.0" y="14" width="153" height="24"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedRounded" trackingMode="momentary" id="EBk-sD-nG7">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<segments>
|
||||
<segment image="prevTrackButton" width="32" enabled="NO"/>
|
||||
<segment image="playButton" width="48" enabled="NO" tag="1"/>
|
||||
@ -320,7 +320,7 @@
|
||||
<rect key="frame" x="16" y="14" width="55" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" placeholderString="8:88:88" id="g0c-k5-wCA">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="tertiaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -347,7 +347,7 @@
|
||||
<rect key="frame" x="16" y="14" width="60" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="left" placeholderString="-8:88:88" id="XUa-pD-s5c">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="tertiaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -369,7 +369,7 @@
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="shuffleButton" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" inset="2" id="YNb-hd-ax8">
|
||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="handleShuffleButton:" target="B8D-0N-5wS" id="THd-0g-fmb"/>
|
||||
@ -385,7 +385,7 @@
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="repeatButton" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" inset="2" id="1bu-vK-3Hb">
|
||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="handleRepeatButton:" target="B8D-0N-5wS" id="EN2-u4-DNl"/>
|
||||
@ -398,7 +398,7 @@
|
||||
<rect key="frame" x="0.0" y="14" width="96" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" usesSingleLineMode="YES" bezelStyle="round" id="F3N-3P-tS3">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</searchFieldCell>
|
||||
@ -414,7 +414,7 @@
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="speakerHigh" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="bJh-X9-7q0">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="showVolumeControl:" target="B8D-0N-5wS" id="UoW-fa-jBM"/>
|
||||
@ -516,7 +516,7 @@
|
||||
<tabView key="tabView" type="noTabsNoBorder" id="6dC-M0-oC5">
|
||||
<rect key="frame" x="0.0" y="0.0" width="418" height="300"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="zhe-qh-Mal" id="LUL-qN-JlP"/>
|
||||
</connections>
|
||||
@ -554,7 +554,7 @@
|
||||
<rect key="frame" x="78" y="59" width="271" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Fetch missing artwork from MusicBrainz" bezelStyle="regularSquare" imagePosition="left" enabled="NO" inset="2" id="LpD-Ew-HMd">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="updateFetchMissingArtworkFromInternet:" target="3C9-vU-zjZ" id="I7x-9V-xJr"/>
|
||||
@ -566,7 +566,7 @@
|
||||
<rect key="frame" x="74" y="19" width="279" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="Clear album art cache..." bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="l81-SG-7mf">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="clearAlbumArtCache:" target="3C9-vU-zjZ" id="tXg-rz-lvh"/>
|
||||
@ -614,7 +614,7 @@
|
||||
<textField key="contentView" translatesAutoresizingMaskIntoConstraints="NO" id="kvB-99-zwY">
|
||||
<rect key="frame" x="78" y="64" width="165" height="17"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Server Host:" id="AVi-g9-Irz">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -637,7 +637,7 @@
|
||||
<textField key="contentView" translatesAutoresizingMaskIntoConstraints="NO" id="AU9-wN-kbU">
|
||||
<rect key="frame" x="78" y="29" width="165" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Server Port:" id="DgA-xT-2ir">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -651,7 +651,7 @@
|
||||
<real key="minimum" value="0.0"/>
|
||||
<real key="maximum" value="65535"/>
|
||||
</numberFormatter>
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -677,7 +677,7 @@
|
||||
</viewController>
|
||||
<customObject id="lzf-yO-5pP" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
<textFieldCell lineBreakMode="clipping" alignment="right" title="Server Port:" id="22M-hh-h8g">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -712,7 +712,7 @@
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="99v-Rb-3kv">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -757,7 +757,7 @@
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="zb2-QK-DhK">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -778,7 +778,7 @@
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="i0h-bn-auJ" userLabel="Song Title View">
|
||||
<rect key="frame" x="1" y="23" width="217" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Song Title" id="ei8-1e-ErK">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -805,7 +805,7 @@
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="JOa-Mc-ceQ">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@ -818,7 +818,7 @@
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="ukg-c0-XVS">
|
||||
<rect key="frame" x="11" y="13" width="41" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="right" title="88:88" id="JnJ-sF-vCP">
|
||||
<font key="font" metaFont="system"/>
|
||||
<font key="font" metaFont="label" size="13"/>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
|
||||
@ -8,6 +8,8 @@
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
38BAC36B249CB1A7004BAEA4 /* AlbumDetailSongTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38BAC36A249CB1A6004BAEA4 /* AlbumDetailSongTitleView.swift */; };
|
||||
E403E63E246F4C3900200F58 /* NowPlayingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E403E63C246F4C3900200F58 /* NowPlayingViewController.swift */; };
|
||||
E403E63F246F4C3900200F58 /* NowPlayingViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E403E63D246F4C3900200F58 /* NowPlayingViewController.xib */; };
|
||||
E407861C2110CE6E006887B1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E407861B2110CE6E006887B1 /* AppDelegate.swift */; };
|
||||
E40786202110CE70006887B1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E407861F2110CE70006887B1 /* Assets.xcassets */; };
|
||||
E40786232110CE70006887B1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E40786212110CE70006887B1 /* Main.storyboard */; };
|
||||
@ -19,6 +21,25 @@
|
||||
E408D3C2220E134F0006D9BE /* AlbumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E408D3C1220E134F0006D9BE /* AlbumViewController.swift */; };
|
||||
E408D3CB220E341D0006D9BE /* AlbumViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = E408D3C9220E341D0006D9BE /* AlbumViewItem.xib */; };
|
||||
E40FE71B221B904300A4223F /* NSEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = E40FE71A221B904300A4223F /* NSEvent.swift */; };
|
||||
E41222112431425400473C1D /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41221FD2431425400473C1D /* App.swift */; };
|
||||
E41222122431425400473C1D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41221FE2431425400473C1D /* AppDelegate.swift */; };
|
||||
E41222132431425400473C1D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E41221FF2431425400473C1D /* LaunchScreen.storyboard */; };
|
||||
E41222142431425400473C1D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E41222012431425400473C1D /* Main.storyboard */; };
|
||||
E41222162431425400473C1D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E41222042431425400473C1D /* Assets.xcassets */; };
|
||||
E41222172431425400473C1D /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41222052431425400473C1D /* SceneDelegate.swift */; };
|
||||
E41222182431425400473C1D /* AlbumItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41222092431425400473C1D /* AlbumItemCell.swift */; };
|
||||
E41222192431425400473C1D /* AlbumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E412220A2431425400473C1D /* AlbumViewController.swift */; };
|
||||
E412221A2431425400473C1D /* AlbumDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E412220B2431425400473C1D /* AlbumDataSource.swift */; };
|
||||
E412221B2431425400473C1D /* AlbumViewController+UICollectionViewDelegateFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = E412220C2431425400473C1D /* AlbumViewController+UICollectionViewDelegateFlowLayout.swift */; };
|
||||
E412221C2431431500473C1D /* Persephone_iOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41221F72431425300473C1D /* Persephone_iOSTests.swift */; };
|
||||
E412221F2431432100473C1D /* Persephone_iOSUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41221FB2431425300473C1D /* Persephone_iOSUITests.swift */; };
|
||||
E41222232431530900473C1D /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = E41222222431530900473C1D /* Kingfisher */; };
|
||||
E41222242431535E00473C1D /* MPDAlbumArtImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4BB7F8E23E5E7BC00906E2F /* MPDAlbumArtImageDataProvider.swift */; };
|
||||
E4122228243153B200473C1D /* CGSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41222272431539800473C1D /* CGSize.swift */; };
|
||||
E41222292431555100473C1D /* CGColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4928E0A2218D62A001D4BEA /* CGColor.swift */; };
|
||||
E41222302432B0A300473C1D /* AlbumTracksDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E412222F2432B0A300473C1D /* AlbumTracksDataSource.swift */; };
|
||||
E41222322432B14000473C1D /* AlbumSongItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41222312432B14000473C1D /* AlbumSongItem.swift */; };
|
||||
E41222332432B15100473C1D /* AlbumSongItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41222312432B14000473C1D /* AlbumSongItem.swift */; };
|
||||
E419E2872249B96600216A8C /* Song.swift in Sources */ = {isa = PBXBuildFile; fileRef = E419E2862249B96600216A8C /* Song.swift */; };
|
||||
E41B22C621FB932700D544F6 /* MPDClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41B22C521FB932700D544F6 /* MPDClient.swift */; };
|
||||
E41E52FD223BF87300173814 /* MPDClient+Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41E52FC223BF87300173814 /* MPDClient+Connection.swift */; };
|
||||
@ -250,7 +271,6 @@
|
||||
E489E39D22B9CF0000CA8CBD /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E489E39C22B9CF0000CA8CBD /* NSView.swift */; };
|
||||
E489E3A422B9D31800CA8CBD /* DraggedSongView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E489E3A222B9D31800CA8CBD /* DraggedSongView.swift */; };
|
||||
E489E3A522B9D31800CA8CBD /* DraggedSongView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E489E3A322B9D31800CA8CBD /* DraggedSongView.xib */; };
|
||||
E4928E0B2218D62A001D4BEA /* CGColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4928E0A2218D62A001D4BEA /* CGColor.swift */; };
|
||||
E49A5482233E580800EED353 /* PromiseKit in Frameworks */ = {isa = PBXBuildFile; productRef = E49A5481233E580800EED353 /* PromiseKit */; };
|
||||
E49A5485233E5ADC00EED353 /* Differ in Frameworks */ = {isa = PBXBuildFile; productRef = E49A5484233E5ADC00EED353 /* Differ */; };
|
||||
E49A5488233E5B0000EED353 /* ReSwift in Frameworks */ = {isa = PBXBuildFile; productRef = E49A5487233E5B0000EED353 /* ReSwift */; };
|
||||
@ -275,11 +295,17 @@
|
||||
E4B11BBE2275EDAA0075461B /* PlayerActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B11BBD2275EDAA0075461B /* PlayerActions.swift */; };
|
||||
E4B11BC02275EE150075461B /* QueueActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B11BBF2275EE150075461B /* QueueActions.swift */; };
|
||||
E4B11BC22275EE410075461B /* AlbumListActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B11BC12275EE410075461B /* AlbumListActions.swift */; };
|
||||
E4B28EE02436D56E003B28AE /* AlbumDetailFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B28EDE2436D548003B28AE /* AlbumDetailFooterView.swift */; };
|
||||
E4B28EE224379606003B28AE /* CGColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B28EE124379606003B28AE /* CGColor.swift */; };
|
||||
E4B3B3642432DB7A007E25D2 /* AlbumSongCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B3B3622432DA4B007E25D2 /* AlbumSongCell.swift */; };
|
||||
E4B3B3672432DF1B007E25D2 /* AlbumSongListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B3B3652432DEDB007E25D2 /* AlbumSongListViewController.swift */; };
|
||||
E4B3DF6523D66A4400728F6B /* QueueSongCoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B3DF6423D66A4400728F6B /* QueueSongCoverView.swift */; };
|
||||
E4B46F8F2402E89800152157 /* MPDError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B46F8E2402E89800152157 /* MPDError.swift */; };
|
||||
E4B5AE7E22F4C49600CCEC65 /* MPDServerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B5AE7D22F4C49600CCEC65 /* MPDServerDelegate.swift */; };
|
||||
E4BB7F8F23E5E7BC00906E2F /* MPDAlbumArtImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4BB7F8E23E5E7BC00906E2F /* MPDAlbumArtImageDataProvider.swift */; };
|
||||
E4BB7F9323E9150A00906E2F /* CoverArtService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4BB7F9223E9150A00906E2F /* CoverArtService.swift */; };
|
||||
E4C51F08243422380093FB31 /* AlbumDiscCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4C51F07243422380093FB31 /* AlbumDiscCell.swift */; };
|
||||
E4C51F0A243428B60093FB31 /* UIFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4C51F09243428B60093FB31 /* UIFont.swift */; };
|
||||
E4C8B53C22342005009A20F3 /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4C8B53B22342005009A20F3 /* PreferencesWindowController.swift */; };
|
||||
E4C8B53E22349002009A20F3 /* MPDIdle.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4C8B53D22349002009A20F3 /* MPDIdle.swift */; };
|
||||
E4D3BFA622B419C000C56F48 /* QueueViewController+NSOutlineViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4D3BFA522B419C000C56F48 /* QueueViewController+NSOutlineViewDelegate.swift */; };
|
||||
@ -296,6 +322,9 @@
|
||||
E4F2EFEE24076A2700198159 /* ServerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F2EFED24076A2700198159 /* ServerState.swift */; };
|
||||
E4F2EFF024076B0900198159 /* ServerActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F2EFEF24076B0900198159 /* ServerActions.swift */; };
|
||||
E4F2EFF224076B5E00198159 /* ServerReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F2EFF124076B5E00198159 /* ServerReducer.swift */; };
|
||||
E4F365D224942CC7006A8C4A /* NowPlayingTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F365D024942C6A006A8C4A /* NowPlayingTabBarController.swift */; };
|
||||
E4F365D4249432C0006A8C4A /* NowPlayingTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F365D3249432C0006A8C4A /* NowPlayingTabBar.swift */; };
|
||||
E4F365D6249C4CDC006A8C4A /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F365D5249C4CDC006A8C4A /* UIImage.swift */; };
|
||||
E4F6B460221E119B00ACF42A /* QueueDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F6B45F221E119B00ACF42A /* QueueDataSource.swift */; };
|
||||
E4F6B463221E125900ACF42A /* QueueItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F6B462221E125900ACF42A /* QueueItem.swift */; };
|
||||
E4F6B467221E233200ACF42A /* AlbumDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F6B466221E233200ACF42A /* AlbumDataSource.swift */; };
|
||||
@ -370,6 +399,8 @@
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
38BAC36A249CB1A6004BAEA4 /* AlbumDetailSongTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumDetailSongTitleView.swift; sourceTree = "<group>"; };
|
||||
E403E63C246F4C3900200F58 /* NowPlayingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NowPlayingViewController.swift; sourceTree = "<group>"; };
|
||||
E403E63D246F4C3900200F58 /* NowPlayingViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NowPlayingViewController.xib; sourceTree = "<group>"; };
|
||||
E40786182110CE6E006887B1 /* Persephone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Persephone.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E407861B2110CE6E006887B1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
E407861F2110CE70006887B1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
@ -391,6 +422,24 @@
|
||||
E411C26D241C10F0008B9682 /* Persephone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Persephone.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E411C282241C10F5008B9682 /* Persephone-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Persephone-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E411C28D241C10F5008B9682 /* Persephone-iOSUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Persephone-iOSUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E41221F72431425300473C1D /* Persephone_iOSTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Persephone_iOSTests.swift; sourceTree = "<group>"; };
|
||||
E41221F82431425300473C1D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
E41221FA2431425300473C1D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
E41221FB2431425300473C1D /* Persephone_iOSUITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Persephone_iOSUITests.swift; sourceTree = "<group>"; };
|
||||
E41221FD2431425400473C1D /* App.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; };
|
||||
E41221FE2431425400473C1D /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
E41222002431425400473C1D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
E41222022431425400473C1D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
E41222032431425400473C1D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
E41222042431425400473C1D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
E41222052431425400473C1D /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||
E41222092431425400473C1D /* AlbumItemCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlbumItemCell.swift; sourceTree = "<group>"; };
|
||||
E412220A2431425400473C1D /* AlbumViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlbumViewController.swift; sourceTree = "<group>"; };
|
||||
E412220B2431425400473C1D /* AlbumDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlbumDataSource.swift; sourceTree = "<group>"; };
|
||||
E412220C2431425400473C1D /* AlbumViewController+UICollectionViewDelegateFlowLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlbumViewController+UICollectionViewDelegateFlowLayout.swift"; sourceTree = "<group>"; };
|
||||
E41222272431539800473C1D /* CGSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGSize.swift; sourceTree = "<group>"; };
|
||||
E412222F2432B0A300473C1D /* AlbumTracksDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumTracksDataSource.swift; sourceTree = "<group>"; };
|
||||
E41222312432B14000473C1D /* AlbumSongItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumSongItem.swift; sourceTree = "<group>"; };
|
||||
E419E2862249B96600216A8C /* Song.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Song.swift; sourceTree = "<group>"; };
|
||||
E41B22C421FB715A00D544F6 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = "<group>"; };
|
||||
E41B22C521FB932700D544F6 /* MPDClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPDClient.swift; sourceTree = "<group>"; };
|
||||
@ -613,11 +662,17 @@
|
||||
E4B11BBD2275EDAA0075461B /* PlayerActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerActions.swift; sourceTree = "<group>"; };
|
||||
E4B11BBF2275EE150075461B /* QueueActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueueActions.swift; sourceTree = "<group>"; };
|
||||
E4B11BC12275EE410075461B /* AlbumListActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumListActions.swift; sourceTree = "<group>"; };
|
||||
E4B28EDE2436D548003B28AE /* AlbumDetailFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumDetailFooterView.swift; sourceTree = "<group>"; };
|
||||
E4B28EE124379606003B28AE /* CGColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGColor.swift; sourceTree = "<group>"; };
|
||||
E4B3B3622432DA4B007E25D2 /* AlbumSongCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumSongCell.swift; sourceTree = "<group>"; };
|
||||
E4B3B3652432DEDB007E25D2 /* AlbumSongListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumSongListViewController.swift; sourceTree = "<group>"; };
|
||||
E4B3DF6423D66A4400728F6B /* QueueSongCoverView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueueSongCoverView.swift; sourceTree = "<group>"; };
|
||||
E4B46F8E2402E89800152157 /* MPDError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPDError.swift; sourceTree = "<group>"; };
|
||||
E4B5AE7D22F4C49600CCEC65 /* MPDServerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPDServerDelegate.swift; sourceTree = "<group>"; };
|
||||
E4BB7F8E23E5E7BC00906E2F /* MPDAlbumArtImageDataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPDAlbumArtImageDataProvider.swift; sourceTree = "<group>"; };
|
||||
E4BB7F9223E9150A00906E2F /* CoverArtService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoverArtService.swift; sourceTree = "<group>"; };
|
||||
E4C51F07243422380093FB31 /* AlbumDiscCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumDiscCell.swift; sourceTree = "<group>"; };
|
||||
E4C51F09243428B60093FB31 /* UIFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIFont.swift; sourceTree = "<group>"; };
|
||||
E4C8B53B22342005009A20F3 /* PreferencesWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesWindowController.swift; sourceTree = "<group>"; };
|
||||
E4C8B53D22349002009A20F3 /* MPDIdle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPDIdle.swift; sourceTree = "<group>"; };
|
||||
E4D3BFA522B419C000C56F48 /* QueueViewController+NSOutlineViewDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "QueueViewController+NSOutlineViewDelegate.swift"; sourceTree = "<group>"; };
|
||||
@ -635,6 +690,9 @@
|
||||
E4F2EFED24076A2700198159 /* ServerState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerState.swift; sourceTree = "<group>"; };
|
||||
E4F2EFEF24076B0900198159 /* ServerActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerActions.swift; sourceTree = "<group>"; };
|
||||
E4F2EFF124076B5E00198159 /* ServerReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerReducer.swift; sourceTree = "<group>"; };
|
||||
E4F365D024942C6A006A8C4A /* NowPlayingTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NowPlayingTabBarController.swift; sourceTree = "<group>"; };
|
||||
E4F365D3249432C0006A8C4A /* NowPlayingTabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NowPlayingTabBar.swift; sourceTree = "<group>"; };
|
||||
E4F365D5249C4CDC006A8C4A /* UIImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = "<group>"; };
|
||||
E4F6B45F221E119B00ACF42A /* QueueDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueueDataSource.swift; sourceTree = "<group>"; };
|
||||
E4F6B462221E125900ACF42A /* QueueItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueueItem.swift; sourceTree = "<group>"; };
|
||||
E4F6B466221E233200ACF42A /* AlbumDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumDataSource.swift; sourceTree = "<group>"; };
|
||||
@ -678,6 +736,7 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E41222232431530900473C1D /* Kingfisher in Frameworks */,
|
||||
E480513824255CE000362CF3 /* ReSwift in Frameworks */,
|
||||
E480513A24255CF200362CF3 /* CryptoSwift in Frameworks */,
|
||||
);
|
||||
@ -705,6 +764,9 @@
|
||||
children = (
|
||||
E45E4FD822515D87004B537F /* Brewfile */,
|
||||
E42A8F3922176D6400A13ED9 /* LICENSE.md */,
|
||||
E41221FC2431425300473C1D /* iOS */,
|
||||
E41221F62431425300473C1D /* iOSTests */,
|
||||
E41221F92431425300473C1D /* iOSUITests */,
|
||||
E407861A2110CE6E006887B1 /* Mac */,
|
||||
E407862D2110CE70006887B1 /* MacTests */,
|
||||
E40786382110CE70006887B1 /* MacUITests */,
|
||||
@ -765,15 +827,15 @@
|
||||
E408D3B7220DE8CC0006D9BE /* Extensions */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E4928E0A2218D62A001D4BEA /* CGColor.swift */,
|
||||
E4B28EE124379606003B28AE /* CGColor.swift */,
|
||||
E40FE71A221B904300A4223F /* NSEvent.swift */,
|
||||
E435E3E1221CD4E200184CFC /* NSFont.swift */,
|
||||
E435E3E3221CD75D00184CFC /* NSImage.swift */,
|
||||
E408D3B8220DE98F0006D9BE /* NSUserInterfaceItemIdentifier.swift */,
|
||||
E489E39822B85D0400CA8CBD /* NSPasteboard.swift */,
|
||||
E489E39C22B9CF0000CA8CBD /* NSView.swift */,
|
||||
E43AC1F022C68E6A001E483C /* NSPasteboardItem.swift */,
|
||||
E4DA820523D6236200C1EE58 /* NSSize.swift */,
|
||||
E408D3B8220DE98F0006D9BE /* NSUserInterfaceItemIdentifier.swift */,
|
||||
E489E39C22B9CF0000CA8CBD /* NSView.swift */,
|
||||
);
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
@ -804,6 +866,7 @@
|
||||
E411C268241C02B2008B9682 /* Shared */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E4BB7F8D23E5E7A300906E2F /* ImageDataProviders */,
|
||||
E483CE67242FEF82001F742E /* Delegates */,
|
||||
E48056C22426D73300362CF3 /* libmpdclient */,
|
||||
E48051512425607100362CF3 /* Controllers */,
|
||||
@ -825,6 +888,100 @@
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41221F62431425300473C1D /* iOSTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E41221F82431425300473C1D /* Info.plist */,
|
||||
E41221F72431425300473C1D /* Persephone_iOSTests.swift */,
|
||||
);
|
||||
path = iOSTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41221F92431425300473C1D /* iOSUITests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E41221FA2431425300473C1D /* Info.plist */,
|
||||
E41221FB2431425300473C1D /* Persephone_iOSUITests.swift */,
|
||||
);
|
||||
path = iOSUITests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41221FC2431425300473C1D /* iOS */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E41221FD2431425400473C1D /* App.swift */,
|
||||
E41221FE2431425400473C1D /* AppDelegate.swift */,
|
||||
E41222042431425400473C1D /* Assets.xcassets */,
|
||||
E41222062431425400473C1D /* Components */,
|
||||
E41222032431425400473C1D /* Info.plist */,
|
||||
E41221FF2431425400473C1D /* LaunchScreen.storyboard */,
|
||||
E41222012431425400473C1D /* Main.storyboard */,
|
||||
E41222052431425400473C1D /* SceneDelegate.swift */,
|
||||
);
|
||||
path = iOS;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41222062431425400473C1D /* Components */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E4D4FAE6246F4B1B00CD02AF /* Now Playing */,
|
||||
E41222252431538700473C1D /* Shared */,
|
||||
E41222072431425400473C1D /* Browser */,
|
||||
);
|
||||
path = Components;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41222072431425400473C1D /* Browser */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E412222A243182F700473C1D /* Album Detail */,
|
||||
E41222082431425400473C1D /* Album Browser */,
|
||||
);
|
||||
path = Browser;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41222082431425400473C1D /* Album Browser */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E41222092431425400473C1D /* AlbumItemCell.swift */,
|
||||
E412220A2431425400473C1D /* AlbumViewController.swift */,
|
||||
E412220B2431425400473C1D /* AlbumDataSource.swift */,
|
||||
E412220C2431425400473C1D /* AlbumViewController+UICollectionViewDelegateFlowLayout.swift */,
|
||||
);
|
||||
path = "Album Browser";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41222252431538700473C1D /* Shared */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E41222262431539000473C1D /* Extensions */,
|
||||
);
|
||||
path = Shared;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41222262431539000473C1D /* Extensions */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E4928E0A2218D62A001D4BEA /* CGColor.swift */,
|
||||
E41222272431539800473C1D /* CGSize.swift */,
|
||||
E4C51F09243428B60093FB31 /* UIFont.swift */,
|
||||
E4F365D5249C4CDC006A8C4A /* UIImage.swift */,
|
||||
);
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E412222A243182F700473C1D /* Album Detail */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E4C51F07243422380093FB31 /* AlbumDiscCell.swift */,
|
||||
E4B3B3622432DA4B007E25D2 /* AlbumSongCell.swift */,
|
||||
E4B3B3652432DEDB007E25D2 /* AlbumSongListViewController.swift */,
|
||||
E412222F2432B0A300473C1D /* AlbumTracksDataSource.swift */,
|
||||
E4B28EDE2436D548003B28AE /* AlbumDetailFooterView.swift */,
|
||||
);
|
||||
path = "Album Detail";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41B22C721FB966C00D544F6 /* include */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -929,10 +1086,10 @@
|
||||
E442CCC82347D65300004E0C /* Album Detail */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E43B67A922909793007DCF55 /* AlbumDetailView.xib */,
|
||||
E4A3A6A022A457B600EA2C40 /* AlbumDetailSongListView.swift */,
|
||||
E45878372296173C00586A1C /* AlbumDetailSongRowView.swift */,
|
||||
E43B67A822909793007DCF55 /* AlbumDetailView.swift */,
|
||||
E43B67A922909793007DCF55 /* AlbumDetailView.xib */,
|
||||
E4E7A6AC22AAAF98006D566C /* AlbumDetailView+NSTableViewDelegate.swift */,
|
||||
E43B67AC229194CD007DCF55 /* AlbumTracksDataSource.swift */,
|
||||
38BAC36A249CB1A6004BAEA4 /* AlbumDetailSongTitleView.swift */,
|
||||
@ -943,7 +1100,6 @@
|
||||
E442CCC92347D6FD00004E0C /* Shared */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E4BB7F8D23E5E7A300906E2F /* ImageDataProviders */,
|
||||
E4E13C2C2350D8CB00092A6E /* Layouts */,
|
||||
E408D3B7220DE8CC0006D9BE /* Extensions */,
|
||||
E489E3A222B9D31800CA8CBD /* DraggedSongView.swift */,
|
||||
@ -1274,6 +1430,17 @@
|
||||
path = Protocols;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E4D4FAE6246F4B1B00CD02AF /* Now Playing */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E403E63C246F4C3900200F58 /* NowPlayingViewController.swift */,
|
||||
E403E63D246F4C3900200F58 /* NowPlayingViewController.xib */,
|
||||
E4F365D024942C6A006A8C4A /* NowPlayingTabBarController.swift */,
|
||||
E4F365D3249432C0006A8C4A /* NowPlayingTabBar.swift */,
|
||||
);
|
||||
path = "Now Playing";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E4E13C2C2350D8CB00092A6E /* Layouts */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -1286,6 +1453,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E450AD7D222620A10091BED3 /* Album.swift */,
|
||||
E41222312432B14000473C1D /* AlbumSongItem.swift */,
|
||||
E43AC1F422C6A4F4001E483C /* DraggedAlbum.swift */,
|
||||
E451E36C22BD23DB008BE9B2 /* DraggedSong.swift */,
|
||||
E451E36A22BD214D008BE9B2 /* DraggedSongType.swift */,
|
||||
@ -1385,6 +1553,7 @@
|
||||
packageProductDependencies = (
|
||||
E480513724255CE000362CF3 /* ReSwift */,
|
||||
E480513924255CF200362CF3 /* CryptoSwift */,
|
||||
E41222222431530900473C1D /* Kingfisher */,
|
||||
);
|
||||
productName = "Persephone-iOS";
|
||||
productReference = E411C26D241C10F0008B9682 /* Persephone.app */;
|
||||
@ -1546,12 +1715,16 @@
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E41222132431425400473C1D /* LaunchScreen.storyboard in Resources */,
|
||||
E41222142431425400473C1D /* Main.storyboard in Resources */,
|
||||
E48059112426D73600362CF3 /* win64.txt in Resources */,
|
||||
E480590F2426D73600362CF3 /* configure.py in Resources */,
|
||||
E48058292426D73500362CF3 /* version.h.in in Resources */,
|
||||
E48059152426D73600362CF3 /* build.sh in Resources */,
|
||||
E403E63F246F4C3900200F58 /* NowPlayingViewController.xib in Resources */,
|
||||
E48059132426D73600362CF3 /* win32.txt in Resources */,
|
||||
E48059C12426D73600362CF3 /* libmpdclient.vapi in Resources */,
|
||||
E41222162431425400473C1D /* Assets.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -1601,6 +1774,7 @@
|
||||
E48059EE2426D73600362CF3 /* socket.c in Sources */,
|
||||
E4F6B467221E233200ACF42A /* AlbumDataSource.swift in Sources */,
|
||||
E4B11BA92274EDE30075461B /* Loading.swift in Sources */,
|
||||
E41222332432B15100473C1D /* AlbumSongItem.swift in Sources */,
|
||||
E408D3C2220E134F0006D9BE /* AlbumViewController.swift in Sources */,
|
||||
E42A4D4F22E20D7D001C6CAD /* MPDTag.swift in Sources */,
|
||||
E48059D82426D73600362CF3 /* database.c in Sources */,
|
||||
@ -1609,7 +1783,6 @@
|
||||
E4B11BB62275374B0075461B /* UserNotificationsController.swift in Sources */,
|
||||
E43AC1F622C6AD0B001E483C /* AlbumViewController+NSCollectionViewDelegate.swift in Sources */,
|
||||
E4B11B68226A4FA00075461B /* QueueState.swift in Sources */,
|
||||
E4928E0B2218D62A001D4BEA /* CGColor.swift in Sources */,
|
||||
E4D3BFA622B419C000C56F48 /* QueueViewController+NSOutlineViewDelegate.swift in Sources */,
|
||||
E4405192227644340090CD6F /* MPDServerController.swift in Sources */,
|
||||
E4805A102426D73600362CF3 /* tag.c in Sources */,
|
||||
@ -1742,6 +1915,7 @@
|
||||
E48059FC2426D73600362CF3 /* neighbor.c in Sources */,
|
||||
E4B11B6A226A4FBC0075461B /* AlbumListState.swift in Sources */,
|
||||
E4805A162426D73600362CF3 /* song.c in Sources */,
|
||||
E4B28EE224379606003B28AE /* CGColor.swift in Sources */,
|
||||
E41E5305223BFB0700173814 /* MPDClient+Error.swift in Sources */,
|
||||
E435E3E2221CD4E200184CFC /* NSFont.swift in Sources */,
|
||||
E4805A0C2426D73600362CF3 /* settings.c in Sources */,
|
||||
@ -1782,17 +1956,20 @@
|
||||
E48059EB2426D73600362CF3 /* coutput.c in Sources */,
|
||||
E48059FB2426D73600362CF3 /* recv.c in Sources */,
|
||||
E480511A24255BAF00362CF3 /* Time.swift in Sources */,
|
||||
E41222112431425400473C1D /* App.swift in Sources */,
|
||||
E480514C24255E7D00362CF3 /* QueueActions.swift in Sources */,
|
||||
E480511E24255BD500362CF3 /* RawRepresentable.swift in Sources */,
|
||||
E4805A1D2426D73600362CF3 /* kvlist.c in Sources */,
|
||||
E4805A2B2426D73600362CF3 /* message.c in Sources */,
|
||||
E48059C92426D73600362CF3 /* async.c in Sources */,
|
||||
E4122228243153B200473C1D /* CGSize.swift in Sources */,
|
||||
E480514924255E7D00362CF3 /* AlbumListActions.swift in Sources */,
|
||||
E480511624255BAF00362CF3 /* Loading.swift in Sources */,
|
||||
E480514324255E7700362CF3 /* AppReducer.swift in Sources */,
|
||||
E4805A292426D73600362CF3 /* player.c in Sources */,
|
||||
E480514724255E7700362CF3 /* ServerReducer.swift in Sources */,
|
||||
E480514E24255E7D00362CF3 /* UIActions.swift in Sources */,
|
||||
E4B28EE02436D56E003B28AE /* AlbumDetailFooterView.swift in Sources */,
|
||||
E480513C24255E7200362CF3 /* AppState.swift in Sources */,
|
||||
E480514024255E7200362CF3 /* ServerState.swift in Sources */,
|
||||
E480514224255E7700362CF3 /* AlbumListReducer.swift in Sources */,
|
||||
@ -1802,31 +1979,42 @@
|
||||
E480512724255BDB00362CF3 /* MPDClient+Queue.swift in Sources */,
|
||||
E480513D24255E7200362CF3 /* PlayerState.swift in Sources */,
|
||||
E480511D24255BD200362CF3 /* MPDClientWrapper.c in Sources */,
|
||||
E41222242431535E00473C1D /* MPDAlbumArtImageDataProvider.swift in Sources */,
|
||||
E480512924255BDB00362CF3 /* MPDClient+Status.swift in Sources */,
|
||||
E48059FD2426D73600362CF3 /* neighbor.c in Sources */,
|
||||
E4805A252426D73600362CF3 /* iso8601.c in Sources */,
|
||||
E480512C24255BDF00362CF3 /* MPDCommand.swift in Sources */,
|
||||
E48059F52426D73600362CF3 /* search.c in Sources */,
|
||||
E4805A1F2426D73600362CF3 /* idle.c in Sources */,
|
||||
E4F365D224942CC7006A8C4A /* NowPlayingTabBarController.swift in Sources */,
|
||||
E41222182431425400473C1D /* AlbumItemCell.swift in Sources */,
|
||||
E4F365D4249432C0006A8C4A /* NowPlayingTabBar.swift in Sources */,
|
||||
E480511724255BAF00362CF3 /* MPDServer.swift in Sources */,
|
||||
E48059C32426D73600362CF3 /* directory.c in Sources */,
|
||||
E480514A24255E7D00362CF3 /* PlayerActions.swift in Sources */,
|
||||
E48059DF2426D73600362CF3 /* audio_format.c in Sources */,
|
||||
E48059CF2426D73600362CF3 /* cpartition.c in Sources */,
|
||||
E412221B2431425400473C1D /* AlbumViewController+UICollectionViewDelegateFlowLayout.swift in Sources */,
|
||||
E4805A012426D73600362CF3 /* quote.c in Sources */,
|
||||
E4805A092426D73600362CF3 /* fd_util.c in Sources */,
|
||||
E48059D52426D73600362CF3 /* resolver.c in Sources */,
|
||||
E48059D72426D73600362CF3 /* ierror.c in Sources */,
|
||||
E48059F32426D73600362CF3 /* capabilities.c in Sources */,
|
||||
E483CE69242FEFB8001F742E /* Notification.swift in Sources */,
|
||||
E41222322432B14000473C1D /* AlbumSongItem.swift in Sources */,
|
||||
E480511B24255BAF00362CF3 /* TrackTimer.swift in Sources */,
|
||||
E480513124255BDF00362CF3 /* MPDStatus.swift in Sources */,
|
||||
E480514424255E7700362CF3 /* PlayerReducer.swift in Sources */,
|
||||
E4B3B3672432DF1B007E25D2 /* AlbumSongListViewController.swift in Sources */,
|
||||
E480514524255E7700362CF3 /* PreferencesReducer.swift in Sources */,
|
||||
E41222292431555100473C1D /* CGColor.swift in Sources */,
|
||||
E4F365D6249C4CDC006A8C4A /* UIImage.swift in Sources */,
|
||||
E480511F24255BDB00362CF3 /* MPDClient+Album.swift in Sources */,
|
||||
E4805A0B2426D73600362CF3 /* sync.c in Sources */,
|
||||
E4805A052426D73600362CF3 /* connection.c in Sources */,
|
||||
E403E63E246F4C3900200F58 /* NowPlayingViewController.swift in Sources */,
|
||||
E480512324255BDB00362CF3 /* MPDClient+Database.swift in Sources */,
|
||||
E41222302432B0A300473C1D /* AlbumTracksDataSource.swift in Sources */,
|
||||
E48059ED2426D73600362CF3 /* stats.c in Sources */,
|
||||
E480514824255E7700362CF3 /* UIReducer.swift in Sources */,
|
||||
E480512124255BDB00362CF3 /* MPDClient+Command.swift in Sources */,
|
||||
@ -1841,11 +2029,16 @@
|
||||
E480513E24255E7200362CF3 /* PreferencesState.swift in Sources */,
|
||||
E4805A132426D73600362CF3 /* rplaylist.c in Sources */,
|
||||
E480513024255BDF00362CF3 /* MPDSong.swift in Sources */,
|
||||
E4B3B3642432DB7A007E25D2 /* AlbumSongCell.swift in Sources */,
|
||||
E4C51F0A243428B60093FB31 /* UIFont.swift in Sources */,
|
||||
E480511524255BAF00362CF3 /* DraggedSongType.swift in Sources */,
|
||||
E480512B24255BDF00362CF3 /* MPDAlbum.swift in Sources */,
|
||||
E412221A2431425400473C1D /* AlbumDataSource.swift in Sources */,
|
||||
E41222172431425400473C1D /* SceneDelegate.swift in Sources */,
|
||||
E48059DB2426D73600362CF3 /* entity.c in Sources */,
|
||||
E48051522425626300362CF3 /* MPDServerController.swift in Sources */,
|
||||
E480511324255BAF00362CF3 /* DraggedAlbum.swift in Sources */,
|
||||
E41222122431425400473C1D /* AppDelegate.swift in Sources */,
|
||||
E4805A072426D73600362CF3 /* error.c in Sources */,
|
||||
E480514124255E7200362CF3 /* UIState.swift in Sources */,
|
||||
E48059E72426D73600362CF3 /* playlist.c in Sources */,
|
||||
@ -1855,9 +2048,11 @@
|
||||
E4805A1B2426D73600362CF3 /* cmessage.c in Sources */,
|
||||
E48059E52426D73600362CF3 /* run.c in Sources */,
|
||||
E480514D24255E7D00362CF3 /* ServerActions.swift in Sources */,
|
||||
E4C51F08243422380093FB31 /* AlbumDiscCell.swift in Sources */,
|
||||
E480511C24255BBF00362CF3 /* MPDClient.swift in Sources */,
|
||||
E480513B24255E7200362CF3 /* AlbumListState.swift in Sources */,
|
||||
E480512224255BDB00362CF3 /* MPDClient+Connection.swift in Sources */,
|
||||
E41222192431425400473C1D /* AlbumViewController.swift in Sources */,
|
||||
E480511124255BA900362CF3 /* MachTime.swift in Sources */,
|
||||
E4805A112426D73600362CF3 /* tag.c in Sources */,
|
||||
E4805A192426D73600362CF3 /* status.c in Sources */,
|
||||
@ -1888,6 +2083,7 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E412221C2431431500473C1D /* Persephone_iOSTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -1895,6 +2091,7 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E412221F2431432100473C1D /* Persephone_iOSUITests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -1932,6 +2129,22 @@
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41221FF2431425400473C1D /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
E41222002431425400473C1D /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E41222012431425400473C1D /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
E41222022431425400473C1D /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
@ -2527,6 +2740,11 @@
|
||||
/* End XCRemoteSwiftPackageReference section */
|
||||
|
||||
/* Begin XCSwiftPackageProductDependency section */
|
||||
E41222222431530900473C1D /* Kingfisher */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = E43BEC9E238835DC00CAF1EB /* XCRemoteSwiftPackageReference "Kingfisher" */;
|
||||
productName = Kingfisher;
|
||||
};
|
||||
E43BEC9F238835DC00CAF1EB /* Kingfisher */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = E43BEC9E238835DC00CAF1EB /* XCRemoteSwiftPackageReference "Kingfisher" */;
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1220"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "E411C26C241C10F0008B9682"
|
||||
BuildableName = "Persephone.app"
|
||||
BlueprintName = "Persephone-iOS"
|
||||
ReferencedContainer = "container:Persephone.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "E411C281241C10F5008B9682"
|
||||
BuildableName = "Persephone-iOSTests.xctest"
|
||||
BlueprintName = "Persephone-iOSTests"
|
||||
ReferencedContainer = "container:Persephone.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
<TestableReference
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "E411C28C241C10F5008B9682"
|
||||
BuildableName = "Persephone-iOSUITests.xctest"
|
||||
BlueprintName = "Persephone-iOSUITests"
|
||||
ReferencedContainer = "container:Persephone.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "E411C26C241C10F0008B9682"
|
||||
BuildableName = "Persephone.app"
|
||||
BlueprintName = "Persephone-iOS"
|
||||
ReferencedContainer = "container:Persephone.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "E411C26C241C10F0008B9682"
|
||||
BuildableName = "Persephone.app"
|
||||
BlueprintName = "Persephone-iOS"
|
||||
ReferencedContainer = "container:Persephone.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
BIN
Resources/export/iOS-1024x1024.png
Normal file
|
After Width: | Height: | Size: 517 KiB |
BIN
Resources/export/iOS-120x120.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
Resources/export/iOS-152x152.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
Resources/export/iOS-167x167.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
Resources/export/iOS-180x180.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
Resources/export/iOS-20x20.png
Normal file
|
After Width: | Height: | Size: 1003 B |
BIN
Resources/export/iOS-29x29.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
Resources/export/iOS-40x40.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
Resources/export/iOS-58x58.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Resources/export/iOS-60x60.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Resources/export/iOS-76x76.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
Resources/export/iOS-80x80.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
Resources/export/iOS-87x87.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
Resources/export/iosAppIcon.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
Resources/export/iosAppIcon@2x.png
Normal file
|
After Width: | Height: | Size: 548 KiB |
BIN
Resources/export/nextTrackButtonHugeiOS.pdf
Normal file
BIN
Resources/export/nextTrackButtonHugeiOS.png
Normal file
|
After Width: | Height: | Size: 687 B |
BIN
Resources/export/nextTrackButtonHugeiOS@2x.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
Resources/export/nextTrackButtonHugeiOS@3x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
Resources/export/nextTrackButtonLarge.pdf
Normal file
BIN
Resources/export/nextTrackButtonLarge.png
Normal file
|
After Width: | Height: | Size: 394 B |
BIN
Resources/export/nextTrackButtonLarge@2x.png
Normal file
|
After Width: | Height: | Size: 667 B |
BIN
Resources/export/nextTrackButtonLarge@3x.png
Normal file
|
After Width: | Height: | Size: 981 B |
BIN
Resources/export/nextTrackButtonLargeiOS.pdf
Normal file
BIN
Resources/export/nextTrackButtonLargeiOS.png
Normal file
|
After Width: | Height: | Size: 461 B |
BIN
Resources/export/nextTrackButtonLargeiOS@2x.png
Normal file
|
After Width: | Height: | Size: 822 B |
BIN
Resources/export/nextTrackButtonLargeiOS@3x.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
Resources/export/pauseButtonHugeiOS.pdf
Normal file
BIN
Resources/export/pauseButtonHugeiOS.png
Normal file
|
After Width: | Height: | Size: 313 B |
BIN
Resources/export/pauseButtonHugeiOS@2x.png
Normal file
|
After Width: | Height: | Size: 545 B |
BIN
Resources/export/pauseButtonHugeiOS@3x.png
Normal file
|
After Width: | Height: | Size: 972 B |
BIN
Resources/export/pauseButtonLargeiOS.pdf
Normal file
BIN
Resources/export/pauseButtonLargeiOS.png
Normal file
|
After Width: | Height: | Size: 226 B |
BIN
Resources/export/pauseButtonLargeiOS@2x.png
Normal file
|
After Width: | Height: | Size: 342 B |
BIN
Resources/export/pauseButtonLargeiOS@3x.png
Normal file
|
After Width: | Height: | Size: 437 B |
BIN
Resources/export/playButtonHugeiOS.pdf
Normal file
BIN
Resources/export/playButtonHugeiOS.png
Normal file
|
After Width: | Height: | Size: 657 B |
BIN
Resources/export/playButtonHugeiOS@2x.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
Resources/export/playButtonHugeiOS@3x.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 363 B |
|
Before Width: | Height: | Size: 516 B After Width: | Height: | Size: 584 B |
BIN
Resources/export/playButtonLarge@3x.png
Normal file
|
After Width: | Height: | Size: 847 B |
BIN
Resources/export/playButtonLargeiOS.pdf
Normal file
BIN
Resources/export/playButtonLargeiOS.png
Normal file
|
After Width: | Height: | Size: 475 B |
BIN
Resources/export/playButtonLargeiOS@2x.png
Normal file
|
After Width: | Height: | Size: 751 B |
BIN
Resources/export/playButtonLargeiOS@3x.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
Resources/export/prevTrackButtonHugeiOS.pdf
Normal file
BIN
Resources/export/prevTrackButtonHugeiOS.png
Normal file
|
After Width: | Height: | Size: 681 B |
BIN
Resources/export/prevTrackButtonHugeiOS@2x.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
@ -21,8 +21,10 @@ class MPDServerController {
|
||||
func connect() {
|
||||
let mpdServer = App.store.state.preferencesState.mpdServer
|
||||
|
||||
guard let host = mpdServer.hostOrDefault else { return }
|
||||
|
||||
App.mpdClient.connect(
|
||||
host: mpdServer.hostOrDefault,
|
||||
host: host,
|
||||
port: mpdServer.portOrDefault
|
||||
)
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ extension MPDClient {
|
||||
func albums(filter: String) {
|
||||
var albums: [MPDAlbum] = []
|
||||
|
||||
mpd_search_db_songs(self.connection, false)
|
||||
mpd_search_db_songs(connection, false)
|
||||
if filter != "" {
|
||||
let escapedFilter = filter.replacingOccurrences(of: "'", with: "\\'")
|
||||
|
||||
@ -66,11 +66,12 @@ extension MPDClient {
|
||||
"(any contains '\(escapedFilter)')"
|
||||
)
|
||||
}
|
||||
mpd_search_add_tag_constraint(self.connection, MPD_OPERATOR_DEFAULT, MPD_TAG_TRACK, "1")
|
||||
mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_TRACK, "1")
|
||||
mpd_search_add_sort_tag(connection, MPD_TAG_ALBUM_ARTIST_SORT, false)
|
||||
|
||||
mpd_search_commit(self.connection)
|
||||
|
||||
while let song = mpd_recv_song(self.connection) {
|
||||
while let song = mpd_recv_song(connection) {
|
||||
let mpdSong = MPDSong(song)
|
||||
|
||||
let mpdAlbum = MPDAlbum(
|
||||
@ -92,10 +93,10 @@ extension MPDClient {
|
||||
|
||||
var firstSong: MPDSong?
|
||||
|
||||
mpd_search_db_songs(self.connection, true)
|
||||
mpd_search_add_tag_constraint(self.connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ALBUM, album.title)
|
||||
mpd_search_add_tag_constraint(self.connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ALBUM_ARTIST, album.artist)
|
||||
mpd_search_add_tag_constraint(self.connection, MPD_OPERATOR_DEFAULT, MPD_TAG_TRACK, "1")
|
||||
mpd_search_db_songs(connection, true)
|
||||
mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ALBUM, album.title)
|
||||
mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ALBUM_ARTIST, album.artist)
|
||||
mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_TRACK, "1")
|
||||
|
||||
mpd_search_commit(self.connection)
|
||||
|
||||
|
||||
@ -35,19 +35,21 @@ extension MPDClient {
|
||||
|
||||
self.delegate?.willDisconnect(mpdClient: self)
|
||||
|
||||
mpd_connection_free(self.connection)
|
||||
self.isConnected = false
|
||||
mpd_connection_free(self.connection)
|
||||
self.isConnected = false
|
||||
}
|
||||
|
||||
func connect(host: String, port: Int) {
|
||||
let commandOperation = BlockOperation() { [unowned self] in
|
||||
self.sendCommand(command: .connect, userData: ["host": host, "port": port])
|
||||
if !isConnected {
|
||||
let commandOperation = BlockOperation() { [unowned self] in
|
||||
self.sendCommand(command: .connect, userData: ["host": host, "port": port])
|
||||
|
||||
if self.isConnected {
|
||||
self.idle()
|
||||
if self.isConnected {
|
||||
self.idle()
|
||||
}
|
||||
}
|
||||
commandQueue.addOperation(commandOperation)
|
||||
}
|
||||
commandQueue.addOperation(commandOperation)
|
||||
}
|
||||
|
||||
func disconnect() {
|
||||
|
||||
24
Shared/Models/AlbumSongItem.swift
Normal file
@ -0,0 +1,24 @@
|
||||
//
|
||||
// AlbumSongItem.swift
|
||||
// Persephone-iOS
|
||||
//
|
||||
// Created by Daniel Barber on 2020-3-30.
|
||||
// Copyright © 2020 Dan Barber. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct AlbumSongItem {
|
||||
let disc: String?
|
||||
let song: Song?
|
||||
|
||||
init(song: Song) {
|
||||
self.disc = nil
|
||||
self.song = song
|
||||
}
|
||||
|
||||
init(disc: String) {
|
||||
self.disc = disc
|
||||
self.song = nil
|
||||
}
|
||||
}
|
||||
@ -7,12 +7,17 @@
|
||||
//
|
||||
|
||||
struct MPDServer {
|
||||
let hostDefault = "127.0.0.1"
|
||||
#if os(macOS)
|
||||
let hostDefault: String? = "127.0.0.1"
|
||||
#else
|
||||
let hostDefault: String? = nil
|
||||
#endif
|
||||
|
||||
let portDefault = 6600
|
||||
|
||||
var host: String?
|
||||
|
||||
var hostOrDefault: String {
|
||||
var hostOrDefault: String? {
|
||||
return host ?? hostDefault
|
||||
}
|
||||
|
||||
|
||||
@ -25,4 +25,8 @@ struct Time {
|
||||
|
||||
return formatter.string(from: TimeInterval(timeInSeconds))!
|
||||
}
|
||||
|
||||
var hours: Int { timeInSeconds / 3600 }
|
||||
|
||||
var minutes: Int { timeInSeconds % 3600 / 60 }
|
||||
}
|
||||
|
||||
@ -11,7 +11,6 @@ import ReSwift
|
||||
struct App {
|
||||
static let store = Store<AppState>(reducer: appReducer, state: nil)
|
||||
static let trackTimer = TrackTimer()
|
||||
//static let userNotificationsController = UserNotificationsController()
|
||||
static let mpdServerDelegate = MPDServerDelegate()
|
||||
static let mpdServerController = MPDServerController(delegate: mpdServerDelegate)
|
||||
static var mpdClient: MPDClient!
|
||||
|
||||
116
iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
Normal file
@ -0,0 +1,116 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "iOS-40x40-1.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-60x60.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-58x58-1.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-87x87.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-80x80.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-120x120.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-120x120-1.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "60x60"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-180x180.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "60x60"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-20x20.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-40x40.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-29x29.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-58x58.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-40x40-2.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-80x80-1.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-76x76.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "76x76"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-152x152.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "76x76"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-167x167.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "83.5x83.5"
|
||||
},
|
||||
{
|
||||
"filename" : "iOS-1024x1024.png",
|
||||
"idiom" : "ios-marketing",
|
||||
"scale" : "1x",
|
||||
"size" : "1024x1024"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-1024x1024.png
Normal file
|
After Width: | Height: | Size: 517 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-120x120-1.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-120x120.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-152x152.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-167x167.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-180x180.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-20x20.png
Normal file
|
After Width: | Height: | Size: 1003 B |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-29x29.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-40x40-1.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-40x40-2.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-40x40.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-58x58-1.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-58x58.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-60x60.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-76x76.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-80x80-1.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-80x80.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
iOS/Assets.xcassets/AppIcon.appiconset/iOS-87x87.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
6
iOS/Assets.xcassets/Contents.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
26
iOS/Assets.xcassets/defaultCoverArt.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "blankAlbumLight.pdf",
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "blankAlbumDark.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"auto-scaling" : "auto",
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
BIN
iOS/Assets.xcassets/defaultCoverArt.imageset/blankAlbumDark.pdf
vendored
Normal file
BIN
iOS/Assets.xcassets/defaultCoverArt.imageset/blankAlbumLight.pdf
vendored
Normal file
16
iOS/Assets.xcassets/nextTrackButtonHugeiOS.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "nextTrackButtonHugeiOS.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true,
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
BIN
iOS/Assets.xcassets/nextTrackButtonHugeiOS.imageset/nextTrackButtonHugeiOS.pdf
vendored
Normal file
15
iOS/Assets.xcassets/nextTrackButtonLarge.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "nextTrackButtonLargeiOS.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
BIN
iOS/Assets.xcassets/nextTrackButtonLarge.imageset/nextTrackButtonLargeiOS.pdf
vendored
Normal file
16
iOS/Assets.xcassets/pauseButtonHugeiOS.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "pauseButtonHugeiOS.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true,
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
BIN
iOS/Assets.xcassets/pauseButtonHugeiOS.imageset/pauseButtonHugeiOS.pdf
vendored
Normal file
15
iOS/Assets.xcassets/pauseButtonLarge.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "pauseButtonLargeiOS.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
BIN
iOS/Assets.xcassets/pauseButtonLarge.imageset/pauseButtonLargeiOS.pdf
vendored
Normal file
16
iOS/Assets.xcassets/playButtonHugeiOS.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "playButtonHugeiOS.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true,
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
BIN
iOS/Assets.xcassets/playButtonHugeiOS.imageset/playButtonHugeiOS.pdf
vendored
Normal file
15
iOS/Assets.xcassets/playButtonLarge.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "playButtonLargeiOS.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
BIN
iOS/Assets.xcassets/playButtonLarge.imageset/playButtonLargeiOS.pdf
vendored
Normal file
16
iOS/Assets.xcassets/prevTrackButtonHugeiOS.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "prevTrackButtonHugeiOS.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true,
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||