Add more formated date info in MeetingsListItemModel, and switch back to regular sorted array for conference data mangemenet

This commit is contained in:
QuentinArguillere 2024-05-28 11:59:51 +02:00
parent 2b441f3557
commit dbba065933
2 changed files with 30 additions and 50 deletions

View file

@ -20,6 +20,9 @@ class MeetingsListItemModel {
let model: MeetingModel? // if NIL, consider that we are using the fake TodayModel
var monthStr: String = ""
var weekStr: String = ""
var weekDayStr: String = ""
var dayStr: String = ""
var isToday = true
init(meetingModel: MeetingModel?) {
@ -27,15 +30,21 @@ class MeetingsListItemModel {
if let mod = meetingModel {
monthStr = createMonthString(date: mod.meetingDate)
weekStr = createWeekString(date: mod.meetingDate)
weekDayStr = createWeekDayString(date: mod.meetingDate)
dayStr = createDayString(date: mod.meetingDate)
Log.info("debugtrace -- create new item model : \(monthStr) - \(weekStr) - \(weekDayStr) - \(dayStr)")
isToday = false
} else {
Log.info("debugtrace -- create new item model : TODAY")
monthStr = createMonthString(date: Date.now)
weekStr = createWeekString(date: Date.now)
weekDayStr = createWeekDayString(date: Date.now)
dayStr = createDayString(date: Date.now)
}
}
func createMonthString(date: Date) -> String {
return "\(date.formatted(Date.FormatStyle().month(.wide))) \(date.formatted(Date.FormatStyle().year()))"
return "\(date.formatted(Date.FormatStyle().month(.wide))) \(date.formatted(Date.FormatStyle().year()))".capitalized
}
func createWeekString(date: Date) -> String {
@ -57,4 +66,12 @@ class MeetingsListItemModel {
return "\(weekFirstDay) - \(weekEndDay) \(firstMonth)"
}
}
func createWeekDayString(date: Date) -> String {
return date.formatted(Date.FormatStyle().weekday(.abbreviated)).capitalized
}
func createDayString(date: Date) -> String {
return date.formatted(Date.FormatStyle().day(.twoDigits))
}
}

View file

@ -28,7 +28,6 @@ class MeetingsListViewModel: ObservableObject {
private var mCoreSuscriptions = Set<AnyCancellable?>()
var selectedMeeting: ConversationModel?
@Published var sortedMeetingsList: [String: [String: [MeetingsListItemModel]]] = [:]
@Published var meetingsList: [MeetingsListItemModel] = []
@Published var currentFilter = ""
@ -57,8 +56,8 @@ class MeetingsListViewModel: ObservableObject {
var meetingsListTmp: [MeetingsListItemModel] = []
var previousModel: MeetingModel?
// var meetingForTodayFound = false
var meetingForTodayFound = false
Log.info("debugtrace -- computeMeetingsList, \(confInfoList.count) conferences found")
for confInfo in confInfoList {
if confInfo.duration == 0 { continue }// This isn't a scheduled conference, don't display it
var add = true
@ -73,62 +72,26 @@ class MeetingsListViewModel: ObservableObject {
if add {
let model = MeetingModel(conferenceInfo: confInfo)
let firstMeetingOfTheDay = (previousModel != nil) ? previousModel?.day != model.day || previousModel?.dayNumber != model.dayNumber : true
model.firstMeetingOfTheDay = firstMeetingOfTheDay
// Insert "Today" fake model before the first one of today
/*
if firstMeetingOfTheDay && model.isToday {
meetingsListTmp.append(MeetingsListItemModel(meetingModel: nil))
meetingForTodayFound = true
}
*/
// If no meeting was found for today, insert "Today" fake model before the next meeting to come
/*
if !meetingForTodayFound && model.isAfterToday {
meetingsListTmp.append(MeetingsListItemModel(meetingModel: nil))
meetingForTodayFound = true
}
*/
if !meetingForTodayFound {
if model.isToday {
meetingForTodayFound = true
} else if model.isAfterToday {
// If no meeting was found for today, insert "Today" fake model before the next meeting to come
meetingsListTmp.append(MeetingsListItemModel(meetingModel: nil))
meetingForTodayFound = true
}
}
meetingsListTmp.append(MeetingsListItemModel(meetingModel: model))
previousModel = model
}
}
// If no meeting was found after today, insert "Today" fake model at the end
/*
if !meetingForTodayFound {
meetingsListTmp.append(MeetingsListItemModel(meetingModel: nil))
}
*/
Log.info("debugtrace -- computeMeetingsList, previous count = \(self.meetingsList.count), new count = \(meetingsListTmp.count)")
DispatchQueue.main.sync {
self.meetingsList = meetingsListTmp
self.sortMeetingsListByWeek()
}
}
}
func sortMeetingsListByWeek() {
var sortedList: [String: [String: [MeetingsListItemModel]]] = [:]
var currentMonthString = ""
var currentWeekString = ""
for meeting in self.meetingsList {
if currentMonthString != meeting.monthStr {
sortedList[currentMonthString] = [:]
currentMonthString = meeting.monthStr
}
if currentWeekString != meeting.weekStr {
sortedList[currentMonthString]?[currentWeekString] = []
currentWeekString = meeting.weekStr
}
sortedList[currentMonthString]?[currentWeekString]?.append(meeting)
}
self.sortedMeetingsList = sortedList
}
}