private static void LoadModule(ModuleCollectionInfo info, List <Module> modules) { WebHelper.DownloadStringASync(info.url, delegate(string data) { Module new_module = new Module(); new_module.url = info.url; new_module.author = info.author; new_module.id = info.id; new_module.available_module = Parser.ParseToObject <ModuleInfo>(data); bool module_installed = LoadModuleLocationData(new_module); if (module_installed) { InitInstalledModule(new_module); } else if (Helper.ClassExists(new_module.available_module.classname)) { CheckForUnregisteredInstall(new_module); } if (new_module.available_module.requirement != null) { new_module.available_requirement_fullfilled = new_module.available_module.requirement.Test(); } if (new_module.available_requirement_fullfilled && new_module.installed_module != null && Helper.compareVersions(new_module.installed_module.version, new_module.available_module.version) == 1) { new_module.update_available = true; } modules.Add(new_module); UnityHelper.RepaintEditorWindow(typeof(Settings)); }); }
//TODO save location data on install // delete location data on remove // destingish between public and private modules private static void InitInstalledModule(Module m) { bool remove = false; if (Helper.ClassExists(m.location_data.classname)) { m.path = GetModuleDirectory(m); if (m.path != null) { m.installed_module = Parser.ParseToObject <ModuleInfo>(FileHelper.ReadFileIntoString(FindModuleFilePath(m.path))); string calced_guid = AssetDatabase.AssetPathToGUID(m.path); if (m.location_data.guid != calced_guid) { SaveModuleLocationData(m, calced_guid); } } else { remove = true; } } if (remove) { FileHelper.RemoveValueFromFile(m.id, PATH.MODULES_LOCATION__DATA); m.location_data = null; } }
public static void InstallRemoveModule(ModuleHeader module, bool install) { if (install && !Helper.ClassExists(module.available_module.classname)) { InstallModule(module); } else if (!install && Helper.ClassExists(module.available_module.classname)) { RemoveModule(module); } }
private static void InitInstalledModule(ModuleHeader m) { if (Helper.ClassExists(m.available_module.classname)) { string path = GetModuleDirectoryPath(m) + "/module.json"; if (File.Exists(path)) { m.installed_module = Parser.ParseToObject <ModuleInfo>(Helper.ReadFileIntoString(path)); } } }
private static void CheckForUnregisteredInstall(Module module) { if (Helper.ClassExists(module.available_module.classname)) { module.path = ResolveFilesToDirectory(module.available_module.files.ToArray()); if (module.path != null) { module.installed_module = Parser.ParseToObject <ModuleInfo>(FileHelper.ReadFileIntoString(FindModuleFilePath(module.path))); SaveModuleLocationData(module, AssetDatabase.AssetPathToGUID(module.path)); } } }
private void GUIModulesInstalation() { if (ModuleHandler.GetModules() == null) { return; } if (ModuleHandler.GetModules().Count > 0) { GUILayout.Label("Extra Modules", EditorStyles.boldLabel); } bool disabled = false; foreach (ModuleHeader module in ModuleHandler.GetModules()) { if (module.is_being_installed_or_removed) { disabled = true; } } EditorGUI.BeginDisabledGroup(disabled); foreach (ModuleHeader module in ModuleHandler.GetModules()) { EditorGUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(!module.available_requirement_fullfilled); EditorGUI.BeginChangeCheck(); bool is_installed = Helper.ClassExists(module.available_module.classname); bool update_available = is_installed; if (module.installed_module != null) { update_available = Helper.compareVersions(module.installed_module.version, module.available_module.version) == 1; } string displayName = module.available_module.name; if (module.installed_module != null) { displayName += " v" + module.installed_module.version; } bool install = GUILayout.Toggle(is_installed, new GUIContent(displayName, module.available_module.description), GUILayout.ExpandWidth(false)); if (EditorGUI.EndChangeCheck()) { ModuleHandler.InstallRemoveModule(module, install); } if (update_available) { if (GUILayout.Button("update to v" + module.available_module.version, GUILayout.ExpandWidth(false))) { ModuleHandler.UpdateModule(module); } } EditorGUI.EndDisabledGroup(); if (module.available_module.requirement != null && (update_available || !is_installed)) { GUIStyle requirementStyle = new GUIStyle(EditorStyles.label); requirementStyle.normal.textColor = greenStyle.normal.textColor; if (!module.available_requirement_fullfilled) { requirementStyle.normal.textColor = redInfostyle.normal.textColor; } GUILayout.Label("Requirements: " + module.available_module.requirement.ToString(), requirementStyle); } EditorGUILayout.EndHorizontal(); } EditorGUI.EndDisabledGroup(); }