This commit is contained in:
Vladimir Dubovik
2025-04-03 11:10:21 +03:00
parent 99f2bd8a74
commit 14c229175c
30 changed files with 674 additions and 227 deletions

View File

@ -2,14 +2,14 @@
// EditClassViewModel.swift
// Schedule ICTIS
//
// Created by G412 on 18.12.2024.
// Created by Egor Mironov on 18.12.2024.
//
import Foundation
import CoreData
final class EditClassViewModel: ObservableObject {
@Published var _class: ClassModel
@Published var _class: CoreDataClassModel
let isNew: Bool
@ -17,7 +17,7 @@ final class EditClassViewModel: ObservableObject {
private let context: NSManagedObjectContext
init(provider: ClassProvider, _class: ClassModel? = nil) {
init(provider: ClassProvider, _class: CoreDataClassModel? = nil) {
self.provider = provider
self.context = provider.newContext
@ -27,7 +27,7 @@ final class EditClassViewModel: ObservableObject {
self.isNew = false
}
else {
self._class = ClassModel(context: self.context)
self._class = CoreDataClassModel(context: self.context)
self.isNew = true
}
}

View File

@ -0,0 +1,35 @@
//
// SaveScheduleViewModel.swift
// Schedule ICTIS
//
// Created by Egor Mironov on 02.04.2025.
//
import Foundation
import CoreData
final class SaveScheduleViewModel: ObservableObject {
@Published var subject: JsonClassModel
private let provider: ClassProvider
private let context: NSManagedObjectContext
init(provider: ClassProvider, subject: JsonClassModel? = nil) {
self.provider = provider
self.context = provider.newContext
if let subject,
let existingClassCopy = provider.exists(subject, in: context) {
self.subject = existingClassCopy
}
else {
self.subject = JsonClassModel(context: self.context)
}
}
func save() throws {
try provider.persist(in: context)
}
}

View File

@ -14,6 +14,8 @@ final class ScheduleViewModel: ObservableObject {
@Published var nameToHtml: [String : String] = [:]
@Published var classesGroups: [[ClassInfo]] = []
@Published var searchingGroup = ""
@Published var filteringGroups: [String] = ["Все"]
@Published var showOnlyChoosenGroup: String = "Все"
//Schedule
@Published var weekScheduleGroup: Table = Table(
@ -25,7 +27,7 @@ final class ScheduleViewModel: ObservableObject {
link: ""
)
@Published var selectedDay: Date = .init()
@Published var selectedIndex: Int = 1
@Published var selectedIndex: Int = 0
@Published var week: Int = 0
@Published var isFirstStartOffApp = true
@ -92,7 +94,10 @@ final class ScheduleViewModel: ObservableObject {
// Сортируем по времени
self.sortClassesByTime()
} catch {
if let error = error as? NetworkError {
if let urlError = error as? URLError, urlError.code == .timedOut {
errorInNetwork = .timeout
print("Ошибка: превышено время ожидания ответа от сервера")
} else if let error = error as? NetworkError {
switch error {
case .invalidResponse:
errorInNetwork = .invalidResponse
@ -102,9 +107,9 @@ final class ScheduleViewModel: ObservableObject {
default:
print("Неизвестная ошибка: \(error)")
}
isLoading = false
print("Есть ошибка: \(error)")
}
isLoading = false
}
}
}
@ -172,4 +177,37 @@ final class ScheduleViewModel: ObservableObject {
}
}
}
func updateFilteringGroups() {
self.filteringGroups = ["Все"]
let keys = self.nameToHtml.keys
self.filteringGroups.append(contentsOf: keys)
}
func fillDictForVm() {
let group1 = UserDefaults.standard.string(forKey: "group")
let group2 = UserDefaults.standard.string(forKey: "group2")
let group3 = UserDefaults.standard.string(forKey: "group3")
let vpk1 = UserDefaults.standard.string(forKey: "vpk1")
let vpk2 = UserDefaults.standard.string(forKey: "vpk2")
let vpk3 = UserDefaults.standard.string(forKey: "vpk3")
if let nameGroup1 = group1, nameGroup1 != "" {
nameToHtml[nameGroup1] = ""
}
if let nameGroup2 = group2, nameGroup2 != "" {
nameToHtml[nameGroup2] = ""
}
if let nameGroup3 = group3, nameGroup3 != "" {
nameToHtml[nameGroup3] = ""
}
if let nameVpk1 = vpk1, nameVpk1 != "" {
nameToHtml[nameVpk1] = ""
}
if let nameVpk2 = vpk2, nameVpk2 != "" {
nameToHtml[nameVpk2] = ""
}
if let nameVpk3 = vpk3, nameVpk3 != "" {
nameToHtml[nameVpk3] = ""
}
}
}

View File

@ -9,7 +9,7 @@ import Foundation
@MainActor
final class SearchGroupsViewModel: ObservableObject {
@Published var groups: [Choice] = []
@Published var groups: [Subject] = []
func fetchGroups(group: String) {
Task {