public static void LoadAll(DOS2ModuleData Data)
 {
     LoadModProjects(Data);
     LoadManagedProjects(Data);
     LoadSourceControlData(Data);
     LoadAvailableProjects(Data);
 }
        public static void RefreshManagedProjects(DOS2ModuleData Data)
        {
            if (Data.ManagedProjects != null && Data.ManagedProjects.Count > 0)
            {
                if (Data.Settings != null && !String.IsNullOrEmpty(Data.Settings.DOS2DataDirectory))
                {
                    if (Directory.Exists(Data.Settings.DOS2DataDirectory))
                    {
                        string projectsPath = Path.Combine(Data.Settings.DOS2DataDirectory, "Projects");
                        string modsPath     = Path.Combine(Data.Settings.DOS2DataDirectory, "Mods");

                        if (Directory.Exists(modsPath))
                        {
                            Log.Here().Activity("Reloading DOS2 project data from mods directory at: {0}.", modsPath);

                            foreach (var project in Data.ManagedProjects)
                            {
                                var modData = Data.ModProjects.Where(p => p.ProjectName == project.ProjectName && p.UUID == project.UUID).FirstOrDefault();
                                if (modData != null)
                                {
                                    Log.Here().Activity($"Reloading data for project {project.ProjectName}.");
                                    modData.ReloadData();
                                }
                            }
                        }
                    }
                    else
                    {
                        Log.Here().Error("Loading available projects failed. DOS2 data directory not found at {0}", Data.Settings.DOS2DataDirectory);
                    }
                }
                LoadSourceControlData(Data);
            }
        }
        public static bool LoadSourceControlData(DOS2ModuleData Data)
        {
            if (Directory.Exists(Data.Settings.GitRootDirectory))
            {
                bool overallSuccess = false;
                foreach (var project in Data.ModProjects)
                {
                    var filePath = Path.Combine(Data.Settings.GitRootDirectory, project.ProjectName, DefaultPaths.SourceControlGeneratorDataFile);
                    var success  = false;
                    if (File.Exists(filePath))
                    {
                        var sourceControlData = FileCommands.Load.LoadSourceControlData(filePath);
                        if (sourceControlData != null)
                        {
                            project.GitData = sourceControlData;
                            success         = true;
                            overallSuccess  = true;
                        }
                    }

                    if (success)
                    {
                        //Log.Here().Important($"Source control file found in git repo for project {project.ProjectName}.");
                    }
                    else
                    {
                        //Log.Here().Warning($"Source control file not found for project {project.ProjectName}.");
                    }
                }

                return(overallSuccess);
            }
            return(false);
        }
        public static bool SaveManagedProjects(DOS2ModuleData Data)
        {
            Log.Here().Important("Saving Managed Projects data to {0}", Data.Settings.AddedProjectsFile);

            if (Data.ManagedProjectsData != null && Data.ManagedProjectsData.SavedProjects.Count > 0 && Data.Settings != null && FileCommands.IsValidPath(Data.Settings.AddedProjectsFile))
            {
                string json = JsonInterface.SerializeObject(Data.ManagedProjectsData);
                return(FileCommands.WriteToFile(Data.Settings.AddedProjectsFile, json));
            }

            return(false);
        }
        public static void LoadAvailableProjects(DOS2ModuleData Data, bool ClearExisting = false)
        {
            if (Data.NewProjects == null)
            {
                Data.NewProjects = new ObservableImmutableList <AvailableProjectViewData>();
                BindingOperations.EnableCollectionSynchronization(Data.NewProjects, Data.NewProjectsLock);
            }
            else
            {
                if (ClearExisting)
                {
                    Data.NewProjects.DoOperation(data => data.Clear());
                    BindingOperations.EnableCollectionSynchronization(Data.NewProjects, Data.NewProjectsLock);
                }
            }

            if (Data.ModProjects != null)
            {
                foreach (var project in Data.ModProjects)
                {
                    if (!string.IsNullOrEmpty(project.ProjectName))
                    {
                        bool projectIsUnmanaged = true;

                        if (Data.ManagedProjects != null)
                        {
                            if (Data.ManagedProjects.Any(p => p.ProjectName == project.ProjectName))
                            {
                                projectIsUnmanaged = false;
                            }
                        }

                        if (projectIsUnmanaged)
                        {
                            if (ClearExisting || Data.NewProjects.Where(p => p.Name == project.ProjectName).FirstOrDefault() == null)
                            {
                                AvailableProjectViewData availableProject = new AvailableProjectViewData()
                                {
                                    Name    = project.ProjectName,
                                    Tooltip = project.Tooltip
                                };
                                Data.NewProjects.DoOperation(data => data.Add(availableProject));
                            }
                        }
                    }
                }
            }

            Data.NewProjectsAvailable = Data.NewProjects != null && Data.NewProjects.Count > 0;
        }
 public static void SetData(DOS2ModuleData moduleData)
 {
     MainData = moduleData;
 }
        public static void LoadManagedProjects(DOS2ModuleData Data, bool ClearExisting = true)
        {
            if (Data.ManagedProjects == null)
            {
                Data.ManagedProjects = new ObservableImmutableList <ModProjectData>();
                BindingOperations.EnableCollectionSynchronization(Data.ManagedProjects, Data.ManagedProjectsLock);
            }
            else
            {
                if (ClearExisting)
                {
                    Data.ManagedProjects.DoOperation(data => data.Clear());
                    BindingOperations.EnableCollectionSynchronization(Data.ManagedProjects, Data.ManagedProjectsLock);
                }
            }

            string projectsAppDataPath = DefaultPaths.ModuleAddedProjectsFile(Data);

            if (Data.Settings != null && File.Exists(Data.Settings.AddedProjectsFile))
            {
                projectsAppDataPath = Data.Settings.AddedProjectsFile;
            }

            if (!String.IsNullOrEmpty(projectsAppDataPath) && File.Exists(projectsAppDataPath))
            {
                //projectsAppDataPath = Path.GetFullPath(projectsAppDataPath);
                try
                {
                    Data.ManagedProjectsData = JsonInterface.DeserializeObject <ManagedProjectsData>(projectsAppDataPath);
                }
                catch (Exception ex)
                {
                    Log.Here().Error("Error deserializing managed projects data at {0}: {1}", projectsAppDataPath, ex.ToString());
                }
            }


            if (Data.ManagedProjectsData == null)
            {
                Data.ManagedProjectsData = new ManagedProjectsData();
            }
            else
            {
                foreach (var project in Data.ManagedProjectsData.SavedProjects.Items)
                {
                    //var modProject = Data.ModProjects.Where(x => x.Name == project.Name && x.ModuleInfo.UUID == project.GUID).FirstOrDefault();
                    var modProject = Data.ModProjects.Where(x => x.UUID == project.UUID).FirstOrDefault();
                    if (modProject != null)
                    {
                        ModProjectData existingData = null;

                        if (!ClearExisting)
                        {
                            existingData = Data.ManagedProjects.Where(p => p.ProjectName == project.Name && p.UUID == project.UUID).FirstOrDefault();
                        }

                        if (ClearExisting || existingData == null)
                        {
                            Data.ManagedProjects.Add(modProject);

                            if (!String.IsNullOrWhiteSpace(project.LastBackupUTC))
                            {
                                DateTime lastBackup;

                                var success = DateTime.TryParse(project.LastBackupUTC, out lastBackup);
                                if (success)
                                {
                                    //Log.Here().Activity($"Successully parsed {modProject.LastBackup} to DateTime.");
                                    modProject.LastBackup = lastBackup.ToLocalTime();
                                }
                                else
                                {
                                    Log.Here().Error($"Could not convert {project.LastBackupUTC} to DateTime.");
                                }
                            }
                        }
                        else if (existingData != null)
                        {
                            existingData.ReloadData();
                        }
                    }
                }
            }
        }
 public static void RefreshAvailableProjects(DOS2ModuleData Data)
 {
     LoadModProjects(Data, true);
     LoadAvailableProjects(Data, true);
     LoadManagedProjects(Data, true);
 }
        public static void LoadModProjects(DOS2ModuleData Data, bool ClearPrevious = true)
        {
            if (Data.ModProjects == null)
            {
                Data.ModProjects = new ObservableImmutableList <ModProjectData>();
                BindingOperations.EnableCollectionSynchronization(Data.ModProjects, Data.ModProjectsLock);
            }
            else
            {
                if (ClearPrevious)
                {
                    Data.ModProjects.DoOperation(data => data.Clear());
                    BindingOperations.EnableCollectionSynchronization(Data.ModProjects, Data.ModProjectsLock);
                }
            }

            if (Data.Settings != null && !String.IsNullOrEmpty(Data.Settings.DOS2DataDirectory))
            {
                if (Directory.Exists(Data.Settings.DOS2DataDirectory))
                {
                    string projectsPath = Path.Combine(Data.Settings.DOS2DataDirectory, "Projects");
                    string modsPath     = Path.Combine(Data.Settings.DOS2DataDirectory, "Mods");

                    if (Directory.Exists(modsPath))
                    {
                        Log.Here().Activity("Loading DOS2 projects from mods directory at: {0}", modsPath);

                        DirectoryInfo modsRoot   = new DirectoryInfo(modsPath);
                        var           modFolders = modsRoot.GetDirectories().Where(s => !ignoredFolders.Contains(s.Name));

                        if (modFolders != null)
                        {
                            foreach (DirectoryInfo modFolderInfo in modFolders)
                            {
                                var modFolderName = modFolderInfo.Name;
                                Log.Here().Activity("Checking project mod folder: {0}", modFolderName);

                                var metaFile = modFolderInfo.GetFiles("meta.lsx").FirstOrDefault();
                                if (metaFile != null)
                                {
                                    Log.Here().Activity("Meta file found for project {0}. Reading file.", modFolderName);
                                    ModProjectData modProjectData = new ModProjectData(metaFile, projectsPath);
                                    Log.Here().Activity("Finished reading meta files for mod: {0}", modProjectData.ModuleInfo.Name);

                                    if (!ClearPrevious)
                                    {
                                        var previous = Data.ModProjects.Where(p => p.FolderName == modProjectData.FolderName).FirstOrDefault();
                                        if (previous != null)
                                        {
                                            if (previous.DataIsNewer(modProjectData))
                                            {
                                                previous.UpdateData(modProjectData);
                                            }
                                        }
                                        else
                                        {
                                            Data.ModProjects.DoOperation(data => data.Add(modProjectData));
                                        }
                                    }
                                    else
                                    {
                                        Data.ModProjects.DoOperation(data => data.Add(modProjectData));
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    Log.Here().Error("Loading available projects failed. DOS2 data directory not found at {0}", Data.Settings.DOS2DataDirectory);
                }
            }
        }
예제 #10
0
 public DOS2ProjectController()
 {
     Data = new DOS2ModuleData();
 }