コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }