This commit is contained in:
Trey t
2023-07-14 15:29:24 -05:00
parent d57afc1527
commit 593cc496cd
9 changed files with 150 additions and 2991 deletions

View File

@@ -21,7 +21,7 @@
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launch_icon" translatesAutoresizingMaskIntoConstraints="NO" id="TO7-SX-zZe">
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon" translatesAutoresizingMaskIntoConstraints="NO" id="TO7-SX-zZe">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
</imageView>
</subviews>
@@ -44,6 +44,6 @@
</scene>
</scenes>
<resources>
<image name="launch_icon" width="341.33334350585938" height="341.33334350585938"/>
<image name="icon" width="246" height="246"/>
</resources>
</document>

View File

@@ -25,52 +25,6 @@ struct ExerciseElement: Codable, Equatable {
}
}
extension ExerciseElement {
func videoURL(thotStyle: ThotStyle) -> URL? {
var urlString: String?
switch thotStyle {
case .always:
urlString = exercise.nsfwVideoURL
case .never:
urlString = exercise.videoURL
case .recovery:
if self.exercise.name.lowercased() == "recover" {
urlString = exercise.nsfwVideoURL
} else {
urlString = exercise.videoURL
}
case .random:
if Bool.random() {
urlString = exercise.nsfwVideoURL
} else {
urlString = exercise.videoURL
}
}
if let urlString = urlString,
let url = URL(string: BaseURLs.currentBaseURL + urlString) {
return url
}
return nil
}
func returnOtherVideoURL(currentURL: URL) -> URL? {
var urlString: String?
if currentURL.absoluteString.lowercased().contains(exercise.nsfwVideoURL.lowercased()) {
urlString = exercise.videoURL
} else {
urlString = exercise.nsfwVideoURL
}
if let urlString = urlString,
let url = URL(string: BaseURLs.currentBaseURL + urlString) {
return url
}
return nil
}
}
struct ExerciseExercise: Codable, Hashable, Identifiable {
static func == (lhs: ExerciseExercise, rhs: ExerciseExercise) -> Bool {
lhs.id == rhs.id
@@ -79,7 +33,7 @@ struct ExerciseExercise: Codable, Hashable, Identifiable {
let id: Int
let muscles: [ExerciseMuscle]
let equipment: [ExerciseEquipment]
let audioURL, videoURL, createdAt, updatedAt, nsfwVideoURL: String
let audioURL, videoURL, createdAt, updatedAt: String
let name, description, side: String
let isTwoDumbbells, isTrackableDistance, isAlternating, isWeight: Bool
let isDistance, isDuration, isReps: Bool
@@ -105,52 +59,5 @@ struct ExerciseExercise: Codable, Hashable, Identifiable {
case equipmentRequired = "equipment_required"
case muscleGroups = "muscle_groups"
case synonyms
case nsfwVideoURL = "nsfw_video_url"
}
}
extension ExerciseExercise {
func videoURL(thotStyle: ThotStyle) -> URL? {
var urlString: String?
switch thotStyle {
case .always:
urlString = nsfwVideoURL
case .never:
urlString = videoURL
case .recovery:
if self.name.lowercased() == "recovery" {
urlString = nsfwVideoURL
} else {
urlString = videoURL
}
case .random:
if Bool.random() {
urlString = nsfwVideoURL
} else {
urlString = videoURL
}
}
if let urlString = urlString,
let url = URL(string: BaseURLs.currentBaseURL + urlString) {
return url
}
return nil
}
func returnOtherVideoURL(currentURL: URL) -> URL? {
var urlString: String?
if currentURL.absoluteString.lowercased().contains(nsfwVideoURL.lowercased()) {
urlString = videoURL
} else {
urlString = nsfwVideoURL
}
if let urlString = urlString,
let url = URL(string: BaseURLs.currentBaseURL + urlString) {
return url
}
return nil
}
}

View File

@@ -20,10 +20,16 @@ struct Workout: Codable, Identifiable, Equatable {
let muscles: [String]?
let equipment: [String]?
let exercise_count: Int?
let maleVideos: [String]?
let femaleVideos: [String]?
let bothVideos: [String]?
enum CodingKeys: String, CodingKey {
case name, description, exercises, id, muscles, equipment, exercise_count
case registeredUser = "registered_user"
case maleVideos = "male_videos"
case femaleVideos = "female_videos"
case bothVideos = "both_videos"
}
init(from decoder: Decoder) throws {
@@ -41,6 +47,9 @@ struct Workout: Codable, Identifiable, Equatable {
self.muscles = try container.decodeIfPresent([String].self, forKey: .muscles)
self.equipment = try container.decodeIfPresent([String].self, forKey: .equipment)
self.exercise_count = try container.decodeIfPresent(Int.self, forKey: .exercise_count)
self.femaleVideos = try container.decodeIfPresent([String].self, forKey: .femaleVideos)
self.maleVideos = try container.decodeIfPresent([String].self, forKey: .maleVideos)
self.bothVideos = try container.decodeIfPresent([String].self, forKey: .bothVideos)
}
var exercisesSortedByCreated_at: [ExerciseElement] {

File diff suppressed because it is too large Load Diff

View File

@@ -67,6 +67,7 @@ struct CreateWorkoutItemPickerView: View {
TextField("Filter", text: $searchString)
.padding()
HStack {
Button(action: {
viewModel.toggleAll()

View File

@@ -54,7 +54,11 @@ struct ExternalWorkoutDetailView: View {
}
}
.onChange(of: bridgeModule.currentExercise, perform: { newValue in
if let videoURL = newValue?.videoURL(thotStyle: thotStyle) {
if let videoURL = VideoURLCreator.videoURL(
thotStyle: thotStyle,
defaultVideoURLStr: bridgeModule.currentExercise?.exercise.videoURL,
exerciseName: bridgeModule.currentExercise?.exercise.name,
workout: bridgeModule.currentWorkout) {
avPlayer = AVPlayer(url: videoURL)
avPlayer.play()
}

View File

@@ -80,3 +80,34 @@ struct PlayerView: UIViewRepresentable {
uiView.setObserver()
}
}
class VideoURLCreator {
class func videoURL(thotStyle: ThotStyle, defaultVideoURLStr: String?, exerciseName: String?, workout: Workout?) -> URL? {
var urlString: String?
switch thotStyle {
case .always:
urlString = workout?.femaleVideos?.randomElement()
case .never:
urlString = defaultVideoURLStr
case .recovery:
if exerciseName?.lowercased() == "recover" {
urlString = workout?.femaleVideos?.randomElement()
} else {
urlString = defaultVideoURLStr
}
case .random:
if Bool.random() {
urlString = workout?.femaleVideos?.randomElement()
} else {
urlString = defaultVideoURLStr
}
}
if let urlString = urlString,
let url = URL(string: BaseURLs.currentBaseURL + "/media/" + urlString) {
return url
}
return nil
}
}

View File

@@ -16,7 +16,11 @@ struct ExerciseListView: View {
@State var videoExercise: ExerciseExercise? {
didSet {
if let videoURL = self.videoExercise?.videoURL(thotStyle: thotStyle) {
if let videoURL = VideoURLCreator.videoURL(
thotStyle: thotStyle,
defaultVideoURLStr: self.videoExercise?.videoURL,
exerciseName: self.videoExercise?.name,
workout: bridgeModule.currentWorkout) {
avPlayer = AVPlayer(url: videoURL)
avPlayer.play()
}

View File

@@ -49,10 +49,14 @@ struct WorkoutDetailView: View {
}
Button(action: {
if let assetURL = ((avPlayer.currentItem?.asset) as? AVURLAsset)?.url,
let videoURL = bridgeModule.currentExercise?.returnOtherVideoURL(currentURL: assetURL) {
avPlayer = AVPlayer(url: videoURL)
avPlayer.play()
if let assetURL = ((avPlayer.currentItem?.asset) as? AVURLAsset)?.url {
if assetURL.absoluteString.lowercased().contains("exercise_videos") {
} else {
}
// avPlayer = AVPlayer(url: videoURL)
// avPlayer.play()
}
}, label: {
Text("Toggle THOT")
@@ -98,16 +102,25 @@ struct WorkoutDetailView: View {
}
}
.onChange(of: bridgeModule.currentExercise, perform: { newValue in
if let videoURL = newValue?.videoURL(thotStyle: thotStyle) {
if let videoURL = VideoURLCreator.videoURL(
thotStyle: thotStyle,
defaultVideoURLStr: newValue?.exercise.videoURL,
exerciseName: newValue?.exercise.name,
workout: bridgeModule.currentWorkout) {
avPlayer = AVPlayer(url: videoURL)
avPlayer.play()
}
})
.onAppear{
if let videoURL = bridgeModule.currentExercise?.videoURL(thotStyle: thotStyle) {
if let videoURL = VideoURLCreator.videoURL(
thotStyle: thotStyle,
defaultVideoURLStr: bridgeModule.currentExercise?.exercise.videoURL,
exerciseName: bridgeModule.currentExercise?.exercise.name,
workout: bridgeModule.currentWorkout) {
avPlayer = AVPlayer(url: videoURL)
avPlayer.play()
}
bridgeModule.completedWorkout = {
if let workoutData = createWorkoutData() {
presentedSheet = .completedWorkout(workoutData)