big update
This commit is contained in:
@ -1,7 +1,6 @@
|
||||
import Foundation
|
||||
import AVKit
|
||||
import Combine
|
||||
|
||||
@MainActor
|
||||
class SightViewModel: ObservableObject {
|
||||
@Published var sightName: String = "Загрузка..."
|
||||
@ -10,8 +9,9 @@ class SightViewModel: ObservableObject {
|
||||
@Published var articleHeading: String = ""
|
||||
@Published var articleBody: String = ""
|
||||
@Published var mediaState: MediaState = .loading
|
||||
|
||||
|
||||
private var sightModel: SightModel?
|
||||
private var selectedLanguage: String = "ru" // по умолчанию
|
||||
|
||||
enum MediaState {
|
||||
case loading
|
||||
@ -20,10 +20,20 @@ class SightViewModel: ObservableObject {
|
||||
case error
|
||||
}
|
||||
|
||||
func setLanguage(_ language: String) {
|
||||
self.selectedLanguage = language
|
||||
}
|
||||
|
||||
func loadInitialData(sightId: Int) async {
|
||||
do {
|
||||
async let sightModelTask = fetchJSON(from: "https://white-nights.krbl.ru/services/content/sight/\(sightId)", type: SightModel.self)
|
||||
async let articlesTask = fetchJSON(from: "https://white-nights.krbl.ru/services/content/sight/\(sightId)/article", type: [Article].self)
|
||||
async let sightModelTask = fetchJSON(
|
||||
from: "https://white-nights.krbl.ru/services/content/sight/\(sightId)?lang=\(selectedLanguage)",
|
||||
type: SightModel.self
|
||||
)
|
||||
async let articlesTask = fetchJSON(
|
||||
from: "https://white-nights.krbl.ru/services/content/sight/\(sightId)/article?lang=\(selectedLanguage)",
|
||||
type: [Article].self
|
||||
)
|
||||
|
||||
let (fetchedSightModel, fetchedArticles) = try await (sightModelTask, articlesTask)
|
||||
|
||||
@ -63,20 +73,23 @@ class SightViewModel: ObservableObject {
|
||||
}
|
||||
|
||||
if let videoPreviewId = sight.video_preview,
|
||||
let url = URL(string: "https://white-nights.krbl.ru/services/content/media/\(videoPreviewId)/download") {
|
||||
let url = URL(string: "https://white-nights.krbl.ru/services/content/media/\(videoPreviewId)/download?lang=\(selectedLanguage)") {
|
||||
let player = AVPlayer(url: url)
|
||||
player.play()
|
||||
self.mediaState = .video(player)
|
||||
} else if let url = URL(string: "https://white-nights.krbl.ru/services/content/media/\(sight.preview_media)/download") {
|
||||
} else if let url = URL(string: "https://white-nights.krbl.ru/services/content/media/\(sight.preview_media)/download?lang=\(selectedLanguage)") {
|
||||
self.mediaState = .image(url)
|
||||
} else {
|
||||
self.mediaState = .error
|
||||
}
|
||||
} else {
|
||||
do {
|
||||
let mediaItems = try await fetchJSON(from: "https://white-nights.krbl.ru/services/content/article/\(article.id)/media", type: [ArticleMedia].self)
|
||||
let mediaItems = try await fetchJSON(
|
||||
from: "https://white-nights.krbl.ru/services/content/article/\(article.id)/media?lang=\(selectedLanguage)",
|
||||
type: [ArticleMedia].self
|
||||
)
|
||||
if let firstMedia = mediaItems.first,
|
||||
let url = URL(string: "https://white-nights.krbl.ru/services/content/media/\(firstMedia.id)/download") {
|
||||
let url = URL(string: "https://white-nights.krbl.ru/services/content/media/\(firstMedia.id)/download?lang=\(selectedLanguage)") {
|
||||
self.mediaState = .image(url)
|
||||
} else {
|
||||
self.mediaState = .error
|
||||
|
Reference in New Issue
Block a user