示例#1
0
 internal void Refresh(bool reload)
 {
     RefreshTimer.Enabled = false;
     if (reload)   // Load settings files
     {
         foreach (var charFile in FindCharacterFiles())
         {
             var charData = ExtractCharacterMissions(charFile);
             if (charData != null)
             {
                 var existing = (from e in CharacterMissionLists
                                 where e.CharName == charData.CharName
                                 select e).SingleOrDefault();
                 if (existing != null)   // Merge with existing character record
                 {
                     existing.Merge(charData.MissionList);
                 }
                 else     // Add new character
                 {
                     CharacterMissionLists.Add(charData);
                 }
             }
         }
     }
     // Update time displays
     foreach (var m in from c in CharacterMissionLists
              from m in c.MissionList
              select m)
     {
         m.Refresh();
     }
     RefreshTimer.Enabled = true;
 }
示例#2
0
        internal void Refresh()
        {
            // Basic re-entrancy guard
            if (Refreshing)
            {
                // Warning: previous refresh took longer than 5s. Will skip this cycle
                App.LogMessage("A refresh cycle took far longer than expected, and conflicted with the subsequent call");
                return;
            }
            Refreshing = true;
            try {
                // Scan the logfiles for alerts or other state messages
                OpenGameLogs(); // Ensure open logs match up to open client instances
                foreach (var logReader in LogReaders.Values)
                {
                    while (!logReader.EndOfStream)
                    {
                        var line = logReader.ReadLine();
                        if (line.Length > 32 && line.IndexOf("Scaleform.Clockwatcher", 32) != -1)
                        {
                            if (line.EndsWith("Groupfinder queue popped"))
                            {
                                RaiseAlert?.Invoke(this, new AudioAlertEventArgs(AudioAlertType.GroupfinderAlert));
                            }
                        }
                    }
                }

                // Load settings files
                var charNames = new List <string>();
                foreach (var charFile in FindCharacterFiles())
                {
                    var charData = ExtractCharacterMissions(charFile, out var charName);
                    if (charNames.Contains(charName))
                    {
                        // Character name was encountered multiple times on this pass
                        // Likely caused by duplication of game settings data in multiple folders (either a bug, or intentional backup)
                        // Is likely to cause conflicts, but can't tell from here which version is definitive, log for reporting
                        App.LogMessage(charName + " has duplicated settings data, reported values may not synch");
                    }
                    else
                    {
                        charNames.Add(charName);
                    }
                    if (charData != null)
                    {
                        var existing = (from e in CharacterMissionLists
                                        where e.TabName == charName
                                        select e).SingleOrDefault();
                        if (existing != null)   // Merge with existing character record
                        {
                            existing.Merge(charData);
                        }
                        else     // Add new character
                        {
                            var charPanel = new CharacterTimers(charName, charData);
                            CharacterMissionLists.Add(charPanel);
                            TabPanels.Insert(TabPanels.Count - 1, charPanel);
                        }
                    }
                }

                // Update time displays and trigger alert states
                if ((from c in CharacterMissionLists
                     from m in c.TimerList
                     where m.Refresh(Settings.AlertFilter)
                     select m).ToList().Any())
                {
                    RaiseAlert?.Invoke(this, new AudioAlertEventArgs(AudioAlertType.AgentAlert));
                }
            } finally {
                Refreshing = false;
            }
        }