private void AddTimers(MeetingSongsAndTimers result, XElement elem) { string[] timerKeys = { MeetingSongsAndTimers.LivingTimer1Key, MeetingSongsAndTimers.LivingTimer2Key, MeetingSongsAndTimers.MinistryTimer1Key, MeetingSongsAndTimers.MinistryTimer2Key, MeetingSongsAndTimers.MinistryTimer3Key }; foreach (var key in timerKeys) { var value = elem.Attribute(key); if (value == null) { break; } string timeStr = value.Value; bool useBell = false; if (timeStr.Contains("B")) { useBell = true; timeStr = timeStr.Replace("B", ""); } if (Int32.TryParse(timeStr, out var timerMins)) { result.AddTimer(key, timerMins, useBell); } } }
private void AddTimers(MeetingSongsAndTimers result, XElement elem) { string[] timerKeys = { MeetingSongsAndTimers.LIVING_TIMER1_KEY, MeetingSongsAndTimers.LIVING_TIMER2_KEY }; foreach (var key in timerKeys) { var value = elem.Attribute(key); if (value == null) { break; } if (Int32.TryParse(value.Value, out var timerMins)) { result.AddTimer(key, timerMins); } } }
private void AddSongs(MeetingSongsAndTimers result, XElement elem) { const int MaxSongs = 3; for (int n = 1; n <= MaxSongs; ++n) { string key = $"nsong{n}"; var value = elem.Attribute(key); if (value == null) { break; } if (Int32.TryParse(value.Value, out var songNum)) { result.AddSong(songNum); } } }
private XDocument GetMtgSongsXDoc(DateTime dt) { XDocument x = null; bool needRefresh = LocalFileToOld(); if (!needRefresh) { try { x = XDocument.Load(_localMtgSongsFile); MeetingSongsAndTimers songsAndTimers = GetSongNumbersAndTimersFromXDoc(dt, x); if (songsAndTimers.SongCount == 0) { needRefresh = true; } } catch (Exception ex) { needRefresh = true; Log.Logger.Error(ex, "Getting meeting songs xml"); } } if (needRefresh) { x = WebUtils.XDocLoadWithUserAgent(SoundBoxUrl); try { x.Save(_localMtgSongsFile); } catch (Exception ex) { Log.Logger.Error(ex, "Loading songs xml"); } } CheckValidity(x); return(x); }
private MeetingSongsAndTimers GetSongNumbersAndTimersFromXDoc(DateTime theDate, XDocument x) { MeetingSongsAndTimers result = new MeetingSongsAndTimers(); if (x.Root != null) { var dow = theDate.DayOfWeek; bool isSaturdayOrSunday = (dow == DayOfWeek.Saturday || dow == DayOfWeek.Sunday); var mtgs = x.Root.Elements("meeting"); bool doneTimers = false; bool doneSongs = false; foreach (XElement elem in mtgs) { string mtgName = elem.Attribute("name").Value; DateTime dt = DateTime.ParseExact(elem.Attribute("date").Value, "yyyyMMdd", CultureInfo.InvariantCulture); if (theDate.Date == dt.Date && mtgName.Equals("exact")) { // found a special "exact" meeting, e.g. memorial... AddSongs(result, elem); break; } if (theDate.Date >= dt.Date && theDate.Date < dt.Date.AddDays(7)) { if (!doneSongs) { if (isSaturdayOrSunday && mtgName.Equals("weekend")) { result.AddNullSong(); AddSongs(result, elem); doneSongs = true; } if (!isSaturdayOrSunday && mtgName.Equals("midweek")) { AddSongs(result, elem); doneSongs = true; } } if (!doneTimers && mtgName.Equals("midweek")) { AddTimers(result, elem); doneTimers = true; } } if (doneSongs && doneTimers) { break; } } } return(result); }