Exemple #1
0
        /// <summary>
        /// Gets the list of plugin, sorted by load order.
        /// </summary>
        /// <returns>The list of plugins, sorted by load order.</returns>
        private string[] GetTimestampLoadOrder()
        {
            List <string> lstOrderedPlugins = new List <string>();
            DirectoryInfo diPluginFolder    = new DirectoryInfo(GameMode.PluginDirectory);

            try
            {
                if (diPluginFolder.Exists)
                {
                    lstOrderedPlugins = diPluginFolder
                                        .EnumerateFiles()
                                        .OrderBy(file => file.LastWriteTime)
                                        .Where(file => file.Extension.Equals(".esp", StringComparison.InvariantCultureIgnoreCase) || file.Extension.Equals(".esm", StringComparison.InvariantCultureIgnoreCase))
                                        .Select(file => file.FullName)
                                        .ToList();
                }
            }
            catch { }
            finally
            {
                AddMissingElements(lstOrderedPlugins, true);
                LastValidLoadOrder = lstOrderedPlugins;
            }

            if (lstOrderedPlugins.Count > 0)
            {
                return(RemoveNonExistentPlugins(lstOrderedPlugins.ToArray()));
            }
            else if (LastValidLoadOrder.Count > 0)
            {
                return(RemoveNonExistentPlugins(LastValidLoadOrder.ToArray()));
            }
            else
            {
                return(RemoveNonExistentPlugins(GameMode.OrderedCriticalPluginNames.Concat(GameMode.OrderedOfficialPluginNames).ToArray()));
            }
        }
Exemple #2
0
        /// <summary>
        /// Gets the list of plugin from a file, sorted by load order.
        /// </summary>
        /// <returns>The list of plugins from a file, sorted by load order.</returns>
        private string[] GetSortedListLoadOrder()
        {
            int  intRepeat = 0;
            bool?booReady  = IsFileReady(PluginsFilePath, ForcedReadOnly, true);

            while (booReady == false)
            {
                Thread.Sleep(500);
                if (intRepeat++ >= 20)
                {
                    break;
                }
                booReady = IsFileReady(PluginsFilePath, ForcedReadOnly, true);
            }

            if (booReady != false)
            {
                List <string> lstOrderedPlugins = new List <string>();

                try
                {
                    if (File.Exists(LoadOrderFilePath))
                    {
                        foreach (string line in File.ReadLines(LoadOrderFilePath))
                        {
                            if (!string.IsNullOrWhiteSpace(line))
                            {
                                if (m_rgxPluginFile.IsMatch(line))
                                {
                                    lstOrderedPlugins.Add(AddPluginDirectory(line));
                                }
                            }
                        }
                    }
                }
                catch { }
                finally
                {
                    AddMissingElements(lstOrderedPlugins, false);
                    LastValidLoadOrder = lstOrderedPlugins;
                }

                if (lstOrderedPlugins.Count > 0)
                {
                    if (booReady == null)
                    {
                        SetSortedListLoadOrder(RemoveNonExistentPlugins(lstOrderedPlugins.ToArray()));
                    }
                    return(RemoveNonExistentPlugins(lstOrderedPlugins.ToArray()));
                }
            }

            if (LastValidLoadOrder.Count > 0)
            {
                return(RemoveNonExistentPlugins(LastValidLoadOrder.ToArray()));
            }
            else
            {
                return(RemoveNonExistentPlugins(GameMode.OrderedCriticalPluginNames.Concat(GameMode.OrderedOfficialPluginNames).ToArray()));
            }
        }