Skip to content

Commit dc60019

Browse files
authored
Merge pull request #80 from playola-radio/develop
0.13.0
2 parents beee655 + 51851de commit dc60019

33 files changed

Lines changed: 615 additions & 170 deletions

.circleci/config.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ orbs:
66
jobs:
77
swiftlint_check:
88
macos:
9-
xcode: 16.2.0
9+
xcode: 16.4
10+
resource_class: m4pro.medium
1011
steps:
1112
- checkout
1213
- run:
@@ -27,7 +28,8 @@ jobs:
2728

2829
test:
2930
macos:
30-
xcode: 16.2.0
31+
xcode: 16.4
32+
resource_class: m4pro.medium
3133
environment:
3234
FASTLANE_SKIP_UPDATE_CHECK: true
3335
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 10

Gemfile.lock

Lines changed: 45 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,40 @@
11
GEM
22
remote: https://rubygems.org/
33
specs:
4-
CFPropertyList (3.0.7)
5-
base64
6-
nkf
7-
rexml
8-
addressable (2.8.7)
9-
public_suffix (>= 2.0.2, < 7.0)
4+
CFPropertyList (3.0.8)
5+
abbrev (0.1.2)
6+
addressable (2.8.8)
7+
public_suffix (>= 2.0.2, < 8.0)
108
artifactory (3.0.17)
119
atomos (0.1.3)
12-
aws-eventstream (1.3.0)
13-
aws-partitions (1.1043.0)
14-
aws-sdk-core (3.217.0)
10+
aws-eventstream (1.4.0)
11+
aws-partitions (1.1194.0)
12+
aws-sdk-core (3.239.2)
1513
aws-eventstream (~> 1, >= 1.3.0)
1614
aws-partitions (~> 1, >= 1.992.0)
1715
aws-sigv4 (~> 1.9)
16+
base64
17+
bigdecimal
1818
jmespath (~> 1, >= 1.6.1)
19-
aws-sdk-kms (1.97.0)
20-
aws-sdk-core (~> 3, >= 3.216.0)
19+
logger
20+
aws-sdk-kms (1.118.0)
21+
aws-sdk-core (~> 3, >= 3.239.1)
2122
aws-sigv4 (~> 1.5)
22-
aws-sdk-s3 (1.178.0)
23-
aws-sdk-core (~> 3, >= 3.216.0)
23+
aws-sdk-s3 (1.206.0)
24+
aws-sdk-core (~> 3, >= 3.234.0)
2425
aws-sdk-kms (~> 1)
2526
aws-sigv4 (~> 1.5)
26-
aws-sigv4 (1.11.0)
27+
aws-sigv4 (1.12.1)
2728
aws-eventstream (~> 1, >= 1.0.2)
2829
babosa (1.0.4)
2930
base64 (0.2.0)
31+
bigdecimal (3.3.1)
3032
claide (1.1.0)
3133
colored (1.2)
3234
colored2 (3.1.2)
3335
commander (4.6.0)
3436
highline (~> 2.0.0)
37+
csv (3.3.5)
3538
declarative (0.0.20)
3639
digest-crc (0.7.0)
3740
rake (>= 12.0.0, < 14.0.0)
@@ -51,14 +54,14 @@ GEM
5154
faraday-rack (~> 1.0)
5255
faraday-retry (~> 1.0)
5356
ruby2_keywords (>= 0.0.4)
54-
faraday-cookie_jar (0.0.7)
57+
faraday-cookie_jar (0.0.8)
5558
faraday (>= 0.8.0)
56-
http-cookie (~> 1.0.0)
59+
http-cookie (>= 1.0.0)
5760
faraday-em_http (1.0.0)
58-
faraday-em_synchrony (1.0.0)
61+
faraday-em_synchrony (1.0.1)
5962
faraday-excon (1.1.0)
6063
faraday-httpclient (1.0.1)
61-
faraday-multipart (1.1.0)
64+
faraday-multipart (1.1.1)
6265
multipart-post (~> 2.0)
6366
faraday-net_http (1.0.2)
6467
faraday-net_http_persistent (1.2.0)
@@ -68,15 +71,18 @@ GEM
6871
faraday_middleware (1.2.1)
6972
faraday (~> 1.0)
7073
fastimage (2.4.0)
71-
fastlane (2.226.0)
74+
fastlane (2.229.1)
7275
CFPropertyList (>= 2.3, < 4.0.0)
76+
abbrev (~> 0.1.2)
7377
addressable (>= 2.8, < 3.0.0)
7478
artifactory (~> 3.0)
7579
aws-sdk-s3 (~> 1.0)
7680
babosa (>= 1.0.3, < 2.0.0)
81+
base64 (~> 0.2.0)
7782
bundler (>= 1.12.0, < 3.0.0)
7883
colored (~> 1.2)
7984
commander (~> 4.6)
85+
csv (~> 3.3)
8086
dotenv (>= 2.1.1, < 3.0.0)
8187
emoji_regex (>= 0.1, < 4.0)
8288
excon (>= 0.71.0, < 1.0.0)
@@ -96,7 +102,9 @@ GEM
96102
jwt (>= 2.1.0, < 3)
97103
mini_magick (>= 4.9.4, < 5.0.0)
98104
multipart-post (>= 2.0.0, < 3.0.0)
105+
mutex_m (~> 0.3.0)
99106
naturally (~> 2.2)
107+
nkf (~> 0.2.0)
100108
optparse (>= 0.1.1, < 1.0.0)
101109
plist (>= 3.1.0, < 4.0.0)
102110
rubyzip (>= 2.0.0, < 3.0.0)
@@ -108,7 +116,7 @@ GEM
108116
tty-spinner (>= 0.8.0, < 1.0.0)
109117
word_wrap (~> 1.0.0)
110118
xcodeproj (>= 1.13.0, < 2.0.0)
111-
xcpretty (~> 0.4.0)
119+
xcpretty (~> 0.4.1)
112120
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
113121
fastlane-sirp (1.0.0)
114122
sysrandom (~> 1.0)
@@ -129,12 +137,12 @@ GEM
129137
google-apis-core (>= 0.11.0, < 2.a)
130138
google-apis-storage_v1 (0.31.0)
131139
google-apis-core (>= 0.11.0, < 2.a)
132-
google-cloud-core (1.7.1)
140+
google-cloud-core (1.8.0)
133141
google-cloud-env (>= 1.0, < 3.a)
134142
google-cloud-errors (~> 1.0)
135143
google-cloud-env (1.6.0)
136144
faraday (>= 0.17.3, < 3.0)
137-
google-cloud-errors (1.4.0)
145+
google-cloud-errors (1.5.0)
138146
google-cloud-storage (1.47.0)
139147
addressable (~> 2.8)
140148
digest-crc (~> 0.4)
@@ -152,37 +160,40 @@ GEM
152160
highline (2.0.3)
153161
http-cookie (1.0.8)
154162
domain_name (~> 0.5)
155-
httpclient (2.8.3)
163+
httpclient (2.9.0)
164+
mutex_m
156165
jmespath (1.6.2)
157-
json (2.9.1)
158-
jwt (2.10.1)
166+
json (2.18.0)
167+
jwt (2.10.2)
159168
base64
169+
logger (1.7.0)
160170
mini_magick (4.13.2)
161171
mini_mime (1.1.5)
162-
multi_json (1.15.0)
172+
multi_json (1.18.0)
163173
multipart-post (2.4.1)
174+
mutex_m (0.3.0)
164175
nanaimo (0.4.0)
165-
naturally (2.2.1)
176+
naturally (2.3.0)
166177
nkf (0.2.0)
167-
optparse (0.6.0)
178+
optparse (0.8.1)
168179
os (1.1.4)
169180
plist (3.7.2)
170-
public_suffix (6.0.1)
171-
rake (13.2.1)
181+
public_suffix (7.0.0)
182+
rake (13.3.1)
172183
representable (3.2.0)
173184
declarative (< 0.1.0)
174185
trailblazer-option (>= 0.1.1, < 0.2.0)
175186
uber (< 0.2.0)
176187
retriable (3.1.2)
177-
rexml (3.4.0)
188+
rexml (3.4.4)
178189
rouge (3.28.0)
179190
ruby2_keywords (0.0.5)
180191
rubyzip (2.4.1)
181192
security (0.1.5)
182-
signet (0.19.0)
193+
signet (0.21.0)
183194
addressable (~> 2.8)
184195
faraday (>= 0.17.5, < 3.a)
185-
jwt (>= 1.5, < 3.0)
196+
jwt (>= 1.5, < 4.0)
186197
multi_json (~> 1.10)
187198
simctl (1.6.10)
188199
CFPropertyList
@@ -206,7 +217,7 @@ GEM
206217
colored2 (~> 3.1)
207218
nanaimo (~> 0.4.0)
208219
rexml (>= 3.3.6, < 4.0)
209-
xcpretty (0.4.0)
220+
xcpretty (0.4.1)
210221
rouge (~> 3.28.0)
211222
xcpretty-travis-formatter (1.0.1)
212223
xcpretty (~> 0.2, >= 0.0.7)

Package.swift

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,34 @@
1-
// swift-tools-version: 5.10
1+
// swift-tools-version: 6.0
22
import PackageDescription
33

44
let package = Package(
55
name: "PlayolaPlayer",
6-
platforms: [.iOS(.v17), .macOS(.v14)],
6+
platforms: [.iOS(.v18), .macOS(.v14), .tvOS(.v18)],
77
products: [
8-
.library(name: "PlayolaPlayer", targets: ["PlayolaPlayer"])
8+
.library(name: "PlayolaPlayer", targets: ["PlayolaPlayer"]),
9+
.library(name: "PlayolaCore", targets: ["PlayolaCore"]),
910
],
1011
dependencies: [],
1112
targets: [
13+
.target(
14+
name: "PlayolaCore",
15+
resources: [.copy("MockData")],
16+
swiftSettings: [.swiftLanguageMode(.v5)]
17+
),
1218
.target(
1319
name: "PlayolaPlayer",
14-
resources: [.copy("MockData")]
20+
dependencies: ["PlayolaCore"],
21+
swiftSettings: [.swiftLanguageMode(.v5)]
22+
),
23+
.testTarget(
24+
name: "PlayolaCoreTests",
25+
dependencies: ["PlayolaCore"],
26+
swiftSettings: [.swiftLanguageMode(.v5)]
1527
),
1628
.testTarget(
1729
name: "PlayolaPlayerTests",
18-
dependencies: ["PlayolaPlayer"]
30+
dependencies: ["PlayolaPlayer"],
31+
swiftSettings: [.swiftLanguageMode(.v5)]
1932
),
2033
]
2134
)

Sources/PlayolaPlayer/Authentication/PlayolaAuthenticationProvider.swift renamed to Sources/PlayolaCore/Authentication/PlayolaAuthenticationProvider.swift

File renamed without changes.

Sources/PlayolaPlayer/ErrorHandling/PlayolaErrorReporter.swift renamed to Sources/PlayolaCore/ErrorHandling/PlayolaErrorReporter.swift

File renamed without changes.

Sources/PlayolaPlayer/Extensions/DateFormatter+iso8601Full.swift renamed to Sources/PlayolaCore/Extensions/DateFormatter+iso8601Full.swift

File renamed without changes.
File renamed without changes.
File renamed without changes.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
//
2+
// Airing.swift
3+
// PlayolaPlayer
4+
//
5+
// Created by Brian D Keane on 1/7/26.
6+
//
7+
8+
import Foundation
9+
10+
/// Represents a scheduled airing of an episode
11+
public struct Airing: Codable, Sendable, Equatable, Hashable, Identifiable {
12+
public let id: String
13+
public let episodeId: String
14+
public let stationId: String
15+
public let airtime: Date
16+
public let createdAt: Date
17+
public let updatedAt: Date
18+
public let episode: Episode?
19+
public let station: Station?
20+
21+
public init(
22+
id: String,
23+
episodeId: String,
24+
stationId: String,
25+
airtime: Date,
26+
createdAt: Date,
27+
updatedAt: Date,
28+
episode: Episode? = nil,
29+
station: Station? = nil
30+
) {
31+
self.id = id
32+
self.episodeId = episodeId
33+
self.stationId = stationId
34+
self.airtime = airtime
35+
self.createdAt = createdAt
36+
self.updatedAt = updatedAt
37+
self.episode = episode
38+
self.station = station
39+
}
40+
}
41+
42+
extension Airing {
43+
public static var mock: Airing {
44+
Airing(
45+
id: "mock-airing-id",
46+
episodeId: "mock-episode-id",
47+
stationId: "mock-station-id",
48+
airtime: Date(timeIntervalSince1970: 1_800_000_000),
49+
createdAt: Date(timeIntervalSince1970: 1_800_000_000),
50+
updatedAt: Date(timeIntervalSince1970: 1_800_000_000),
51+
episode: .mock,
52+
station: .mock
53+
)
54+
}
55+
56+
public static func mockWith(
57+
id: String? = nil,
58+
episodeId: String? = nil,
59+
stationId: String? = nil,
60+
airtime: Date? = nil,
61+
createdAt: Date? = nil,
62+
updatedAt: Date? = nil,
63+
episode: Episode?? = nil,
64+
station: Station?? = nil
65+
) -> Airing {
66+
let mock = Self.mock
67+
return Airing(
68+
id: id ?? mock.id,
69+
episodeId: episodeId ?? mock.episodeId,
70+
stationId: stationId ?? mock.stationId,
71+
airtime: airtime ?? mock.airtime,
72+
createdAt: createdAt ?? mock.createdAt,
73+
updatedAt: updatedAt ?? mock.updatedAt,
74+
episode: episode ?? mock.episode,
75+
station: station ?? mock.station
76+
)
77+
}
78+
}
File renamed without changes.

0 commit comments

Comments
 (0)