Version 1.3 für App Store
This commit is contained in:
@@ -274,8 +274,8 @@
|
||||
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
@@ -310,8 +310,8 @@
|
||||
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "subsonic_94696.svg",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" version="1.1" viewBox="0 0 32 32">
|
||||
<defs>
|
||||
<linearGradient id="linearGradient4207" x1="2" x2="8" y1="1038.1" y2="1038.1" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-opacity="0"/>
|
||||
<stop offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g transform="translate(0 -1020.4)">
|
||||
<g transform="matrix(.66667 0 0 .8 -1.3333 215.87)">
|
||||
<rect fill="#41b941" width="3" height="10" x="14" y="1014.4" rx="1.406" ry="1.747"/>
|
||||
<path fill="#fff" opacity=".2" d="m15.406 10c-0.779 0-1.406 0.778-1.406 1.746v1c0-0.968 0.627-1.746 1.406-1.746h0.1875c0.779 0 1.406 0.778 1.406 1.746v-1c0-0.968-0.627-1.746-1.406-1.746h-0.1875z" transform="translate(0 1004.4)"/>
|
||||
</g>
|
||||
<path fill="#ffca1d" d="m14.6 1027.4c-0.7756 0-1.6 0.6175-1.6 1.3846v1.6168c-2.5977 0.8209-4.3 3.114-5 4.4986-0.7-1.3846-5-2-5-2v3.5h-1v4h1v3c-0.027344 0 4.3-0.6154 5-2 0.7 1.3846 4.5 4 10.1 4s11.9-3.0272 11.9-7.6154c-0.0061-3.2607-2.7438-6.0433-7-7.3859v-1.6141c0-0.7671-0.6244-1.3846-1.4-1.3846z"/>
|
||||
<circle opacity=".2" cx="18" cy="1038.4" r="2"/>
|
||||
<circle fill="#fff" cx="18" cy="1037.4" r="2"/>
|
||||
<circle opacity=".2" cx="23" cy="1038.4" r="2"/>
|
||||
<circle fill="#fff" cx="23" cy="1037.4" r="2"/>
|
||||
<circle opacity=".2" cx="13" cy="1038.4" r="2"/>
|
||||
<circle fill="#fff" cx="13" cy="1037.4" r="2"/>
|
||||
<path fill="#fff" opacity=".2" d="m14.6 7c-0.776 0-1.6 0.6177-1.6 1.3848v1c0-0.7671 0.824-1.3848 1.6-1.3848h7c0.775 0 1.4 0.6177 1.4 1.3848v-1c0-0.7671-0.625-1.3848-1.4-1.3848zm8.4 2.998v1c3.9894 1.2584 6.6445 3.7828 6.9668 6.7793 0.01-0.131 0.033-0.259 0.033-0.392-0.006-3.261-2.744-6.044-7-7.387zm-10 0.00391c-2.598 0.821-4.3 3.113-5 4.498-0.7-1.385-5-2-5-2v1s4.3 0.6154 5 2c0.7-1.3846 2.4023-3.6771 5-4.498z" transform="translate(0 1020.4)"/>
|
||||
<path opacity=".2" d="m29.967 1038.1c-0.35239 4.3638-6.4312 7.2207-11.867 7.2207-5.6 0-9.3996-2.6154-10.1-4-0.7 1.3846-5.0273 2-5 2v1c-0.027344 0 4.3-0.6154 5-2 0.7 1.3846 4.4996 4 10.1 4 5.6 0 11.9-3.027 11.9-7.6152-0.000381-0.2038-0.01178-0.4057-0.0332-0.6055z"/>
|
||||
<path fill="url(#linearGradient4207)" opacity=".1" d="m8 1034.9c-0.7-1.3846-5-2-5-2v3.5h-1v4h1v3c-0.027344 0 4.3-0.6154 5-2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -48,12 +48,21 @@ struct ProviderBadge: View {
|
||||
var body: some View {
|
||||
HStack(spacing: 4) {
|
||||
ForEach(providers, id: \.self) { provider in
|
||||
Image(systemName: provider.icon)
|
||||
.font(.system(size: 9, weight: .bold))
|
||||
.foregroundStyle(.white)
|
||||
.frame(width: 20, height: 20)
|
||||
.background(.black.opacity(0.55))
|
||||
.clipShape(Circle())
|
||||
if let assetName = provider.logoAssetName {
|
||||
Image(assetName)
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fill)
|
||||
.frame(width: 30, height: 30)
|
||||
.background(.black.opacity(0.55))
|
||||
.clipShape(Circle())
|
||||
} else {
|
||||
Image(systemName: provider.icon)
|
||||
.font(.system(size: 14, weight: .bold))
|
||||
.foregroundStyle(.white)
|
||||
.frame(width: 30, height: 30)
|
||||
.background(.black.opacity(0.55))
|
||||
.clipShape(Circle())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,24 +85,35 @@ enum MusicProvider: Hashable {
|
||||
case filesystem
|
||||
case jellyfin
|
||||
case dlna
|
||||
case ardAudiothek
|
||||
|
||||
/// SF Symbol name for this provider.
|
||||
/// Asset catalog image name for providers that have a custom logo.
|
||||
/// Returns `nil` when the provider uses an SF Symbol instead.
|
||||
var logoAssetName: String? {
|
||||
switch self {
|
||||
case .subsonic: return "SubsonicLogo"
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
|
||||
/// SF Symbol name for this provider (used when `logoAssetName` is nil).
|
||||
var icon: String {
|
||||
switch self {
|
||||
case .library: return "building.columns.fill"
|
||||
case .subsonic: return "ferry.fill"
|
||||
case .spotify: return "antenna.radiowaves.left.and.right.circle.fill"
|
||||
case .tidal: return "water.waves"
|
||||
case .qobuz: return "hifispeaker.fill"
|
||||
case .plex: return "play.square.stack.fill"
|
||||
case .ytmusic: return "play.rectangle.fill"
|
||||
case .appleMusic: return "applelogo"
|
||||
case .deezer: return "waveform"
|
||||
case .soundcloud: return "cloud.fill"
|
||||
case .tunein: return "radio.fill"
|
||||
case .filesystem: return "folder.fill"
|
||||
case .jellyfin: return "server.rack"
|
||||
case .dlna: return "wifi"
|
||||
case .library: return "building.columns.fill"
|
||||
case .subsonic: return "ferry.fill"
|
||||
case .spotify: return "antenna.radiowaves.left.and.right.circle.fill"
|
||||
case .tidal: return "water.waves"
|
||||
case .qobuz: return "hifispeaker.fill"
|
||||
case .plex: return "play.square.stack.fill"
|
||||
case .ytmusic: return "play.rectangle.fill"
|
||||
case .appleMusic: return "applelogo"
|
||||
case .deezer: return "waveform"
|
||||
case .soundcloud: return "cloud.fill"
|
||||
case .tunein: return "radio.fill"
|
||||
case .filesystem: return "folder.fill"
|
||||
case .jellyfin: return "server.rack"
|
||||
case .dlna: return "wifi"
|
||||
case .ardAudiothek: return "antenna.radiowaves.left.and.right"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,6 +135,8 @@ enum MusicProvider: Hashable {
|
||||
if scheme.hasPrefix("filesystem") { return .filesystem }
|
||||
if scheme.hasPrefix("jellyfin") { return .jellyfin }
|
||||
if scheme.hasPrefix("dlna") { return .dlna }
|
||||
if scheme.hasPrefix("ard_audiothek") { return .ardAudiothek }
|
||||
if scheme.hasPrefix("ard") { return .ardAudiothek }
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -134,8 +156,10 @@ enum MusicProvider: Hashable {
|
||||
if k.hasPrefix("soundcloud") { return .soundcloud }
|
||||
if k.hasPrefix("tunein") { return .tunein }
|
||||
if k.hasPrefix("filesystem") { return .filesystem }
|
||||
if k.hasPrefix("jellyfin") { return .jellyfin }
|
||||
if k.hasPrefix("dlna") { return .dlna }
|
||||
if k.hasPrefix("jellyfin") { return .jellyfin }
|
||||
if k.hasPrefix("dlna") { return .dlna }
|
||||
if k.hasPrefix("ard_audiothek") { return .ardAudiothek }
|
||||
if k.hasPrefix("ard") { return .ardAudiothek }
|
||||
// Image-only metadata providers — not a music source
|
||||
if k == "lastfm" || k == "musicbrainz" || k == "fanarttv" { return nil }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user