public static void GeneralConfigFileCommit() { CommitBenchmarks(); InternalConfigs.WriteFileSettings(GeneralConfigPath, GeneralConfig); }
public void SaveMoveConfig(DeviceType deviceType, AlgorithmType algorithmType, string sourcePath) { lock (_configsLock) { try { string destinationPath = Path.Combine(GetMinerConfigsRoot(), $"{algorithmType.ToString()}_{deviceType.ToString()}.txt"); var dirPath = Path.GetDirectoryName(destinationPath); if (Directory.Exists(dirPath) == false) { Directory.CreateDirectory(dirPath); } var readConfigContent = File.ReadAllText(sourcePath); // make it JSON readConfigContent = "{" + readConfigContent + "}"; // remove old if any if (File.Exists(destinationPath)) { File.Delete(destinationPath); } // move to path File.Move(sourcePath, destinationPath); var cachedFileSettings = $"cached_{algorithmType.ToString()}_{deviceType.ToString()}.json"; var cachedFileSettingsPath = Path.Combine(GetMinerConfigsRoot(), cachedFileSettings); var uuids = _registeredDeviceUUIDTypes.Where(kvp => kvp.Value == deviceType).Select(kvp => kvp.Key).ToList(); object cachedSettings = null; //TODO load and save switch (deviceType) { case DeviceType.CPU: var cpuConfig = JsonConvert.DeserializeObject <CpuConfig>(readConfigContent); SetCpuConfig(algorithmType, cpuConfig); cachedSettings = new CachedCpuSettings { CachedConfig = cpuConfig, DeviceUUIDs = uuids }; break; case DeviceType.AMD: var amdConfig = JsonConvert.DeserializeObject <AmdConfig>(readConfigContent); SetAmdConfig(algorithmType, amdConfig); cachedSettings = new CachedAmdSettings { CachedConfig = amdConfig, DeviceUUIDs = uuids }; break; case DeviceType.NVIDIA: var nvidiaConfig = JsonConvert.DeserializeObject <NvidiaConfig>(readConfigContent); SetNvidiaConfig(algorithmType, nvidiaConfig); cachedSettings = new CachedNvidiaSettings { CachedConfig = nvidiaConfig, DeviceUUIDs = uuids }; break; } if (cachedSettings != null) { var header = "// This config file was autogenerated by NHML."; header += "\n// \"DeviceUUIDs\" is used to check if we have same devices and should not be edited."; header += "\n// \"CachedConfig\" can be edited as it is used as config template (edit this only if you know what you are doing)"; header += "\n// If \"DeviceUUIDs\" is different (new devices added or old ones removed) this file will be overwritten and \"CachedConfig\" will be set to defaults."; header += "\n\n"; var jsonText = JsonConvert.SerializeObject(cachedSettings, Formatting.Indented); var headerWithConfigs = header + jsonText; InternalConfigs.WriteFileSettings(cachedFileSettingsPath, headerWithConfigs); } } catch (Exception e) { Logger.Error("XmrStakRxPlugin", $"SaveMoveConfig error: {e.Message}"); } } }
public static void InitializeConfig() { // init defaults GeneralConfig.SetDefaults(); GeneralConfig.hwid = ApplicationStateManager.RigID; var asmVersion = new Version(Application.ProductVersion); // load file if it exist var fromFile = InternalConfigs.ReadFileSettings <GeneralConfig>(GeneralConfigPath); if (fromFile != null) { if (fromFile.ConfigFileVersion != null && asmVersion.CompareTo(fromFile.ConfigFileVersion) != 0) { IsVersionChanged = true; Logger.Info(Tag, "Config file differs from version of NiceHashMiner... Creating backup archive"); CreateBackupArchive(fromFile.ConfigFileVersion); if (RestoreBackupArchive(asmVersion))//check if we have backup version { fromFile = InternalConfigs.ReadFileSettings <GeneralConfig>(GeneralConfigPath); } } if (fromFile?.ConfigFileVersion != null) { // set config loaded from file _isGeneralConfigFileInit = true; GeneralConfig = fromFile; GeneralConfig.FixSettingBounds(); } else { Logger.Info(Tag, "Loaded Config file no version detected falling back to defaults."); } } else { GeneralConfigFileCommit(); } #warning "DELETE this after 1.9.2.18" #region MIGRATE plugin UUIDs var findReplace = new Dictionary <string, string> { { "\"PluginUUID\": \"BMiner\",", "\"PluginUUID\": \"e5fbd330-7235-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"CCMinerTpruvot\",", "\"PluginUUID\": \"2257f160-7236-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"ClaymoreDual\",", "\"PluginUUID\": \"70984aa0-7236-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"cpuminer-opt\",", "\"PluginUUID\": \"92fceb00-7236-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"CryptoDredge\",", "\"PluginUUID\": \"d9c2e620-7236-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"Ethlargement\",", "\"PluginUUID\": \"efd40691-618c-491a-b328-e7e020bda7a3\"," }, { "\"PluginUUID\": \"Ewbf\",", "\"PluginUUID\": \"f7d5dfa0-7236-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"ExamplePlugin\",", "\"PluginUUID\": \"455c4d98-a45d-45d6-98ca-499ce866b2c7\"," }, { "\"PluginUUID\": \"GMinerCuda9.0+\",", "\"PluginUUID\": \"1b7019d0-7237-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"LolMiner\",", "\"PluginUUID\": \"435f0820-7237-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"MiniZ\",", "\"PluginUUID\": \"59bba2c0-b1ef-11e9-8e4e-bb1e2c6e76b4\"," }, { "\"PluginUUID\": \"NanoMiner\",", "\"PluginUUID\": \"a841b4b0-ae17-11e9-8e4e-bb1e2c6e76b4\"," }, { "\"PluginUUID\": \"NBMiner\",", "\"PluginUUID\": \"6c07f7a0-7237-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"Phoenix\",", "\"PluginUUID\": \"f5d4a470-e360-11e9-a914-497feefbdfc8\"," }, { "\"PluginUUID\": \"SGminerAvemore\",", "\"PluginUUID\": \"bc95fd70-e361-11e9-a914-497feefbdfc8\"," }, { "\"PluginUUID\": \"SRBMiner\",", "\"PluginUUID\": \"85f507c0-b2ba-11e9-8e4e-bb1e2c6e76b4\"," }, { "\"PluginUUID\": \"TeamRedMiner\",", "\"PluginUUID\": \"abc3e2a0-7237-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"TRex\",", "\"PluginUUID\": \"d47d9b00-7237-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"TTMiner\",", "\"PluginUUID\": \"f1945a30-7237-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"WildRig\",", "\"PluginUUID\": \"2edd8080-9cb6-11e9-a6b8-09e27549d5bb\"," }, { "\"PluginUUID\": \"XMRig\",", "\"PluginUUID\": \"1046ea50-c261-11e9-8e4e-bb1e2c6e76b4\"," }, { "\"PluginUUID\": \"XmrStak\",", "\"PluginUUID\": \"3d4e56b0-7238-11e9-b20c-f9f12eb6d835\"," }, { "\"PluginUUID\": \"ZEnemy\",", "\"PluginUUID\": \"5532d300-7238-11e9-b20c-f9f12eb6d835\"," }, }; try { var deviceConfigs = Directory.GetFiles(Paths.ConfigsPath(), "device_settings_*.json", SearchOption.TopDirectoryOnly); foreach (var devConfigPath in deviceConfigs) { try { var content = File.ReadAllText(devConfigPath); var containsNameUUIDs = false; foreach (var key in findReplace.Keys) { if (content.Contains(key)) { containsNameUUIDs = true; break; } } if (!containsNameUUIDs) { continue; } foreach (var kvp in findReplace) { content = content.Replace(kvp.Key, kvp.Value); } File.WriteAllText(devConfigPath, content); } catch {} } } catch {} #endregion MIGRATE plugin UUIDs }
// TODO add more options static void Main(string[] args) { PluginBase.IS_CALLED_FROM_PACKER = true; if (args.Length < 1) { Console.WriteLine("Set miner plugins root path"); return; } var exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var pluginPackagesFolder = Path.Combine(exePath, "plugins_packages"); var pluginsSearchRoot = args[0]; // get all managed plugin dll's var dllFiles = Directory.GetFiles(pluginsSearchRoot, "*.dll", SearchOption.AllDirectories) .Where(filePath => !filePath.Contains("MinerPlugin") && filePath.Contains("net45") && filePath.Contains("Release") && !filePath.Contains("bin")).ToList(); var packedPlugins = new HashSet <string>(); if (Directory.Exists(pluginPackagesFolder)) { Console.WriteLine("Deleting old plugins packages"); Directory.Delete(pluginPackagesFolder, true); } if (!Directory.Exists(pluginPackagesFolder)) { Directory.CreateDirectory(pluginPackagesFolder); } // what plugins to bundle var bundlePlugins = new List <string> { "2257f160-7236-11e9-b20c-f9f12eb6d835", // CCMinerTpruvotPlugin "70984aa0-7236-11e9-b20c-f9f12eb6d835", // ClaymoreDual14Plugin //"92fceb00-7236-11e9-b20c-f9f12eb6d835", // CPUMinerPlugin "1b7019d0-7237-11e9-b20c-f9f12eb6d835", // GMinerPlugin "435f0820-7237-11e9-b20c-f9f12eb6d835", // LolMinerBeamPlugin "59bba2c0-b1ef-11e9-8e4e-bb1e2c6e76b4", // MiniZPlugin "6c07f7a0-7237-11e9-b20c-f9f12eb6d835", // NBMinerPlugin "f5d4a470-e360-11e9-a914-497feefbdfc8", // PhoenixPlugin "abc3e2a0-7237-11e9-b20c-f9f12eb6d835", // TeamRedMinerPlugin "d47d9b00-7237-11e9-b20c-f9f12eb6d835", // TRexPlugin //"3d4e56b0-7238-11e9-b20c-f9f12eb6d835", // XmrStakPlugin "5532d300-7238-11e9-b20c-f9f12eb6d835", // ZEnemyPlugin //"4aec5ec0-10f8-11ea-bad3-8dea21141bbb", // XmrStakRxPlugin "1046ea50-c261-11e9-8e4e-bb1e2c6e76b4", // XMRig }; var bundlePluginsDlls = new Dictionary <string, string>(); foreach (var filePath in dllFiles) { var dllDir = Path.GetDirectoryName(filePath); var loaded = MinerPluginHost.LoadPlugin(dllDir); if (loaded.Count() == 0) { // log what we couldn't load and continue Console.WriteLine($"Skipping: {filePath}"); continue; } var newPlugins = MinerPluginHost.MinerPlugin .Where(kvp => packedPlugins.Contains(kvp.Key) == false) .Select(kvp => kvp.Value); foreach (var plugin in newPlugins) { try { CheckPluginMetaData(plugin); } catch (Exception e) { Console.WriteLine($"\t\tCheckPluginMetaData ERROR!!!!!!!!! {e.Message}"); } } foreach (var plugin in newPlugins) { try { if (bundlePlugins.Contains(plugin.PluginUUID)) { bundlePluginsDlls.Add(plugin.PluginUUID, filePath); } var pluginZipFileName = GetPluginPackageName(plugin); var dllPackageZip = Path.Combine(pluginPackagesFolder, pluginZipFileName); Console.WriteLine($"Packaging: {dllPackageZip}"); var fileName = Path.GetFileName(filePath); using (var archive = ZipFile.Open(dllPackageZip, ZipArchiveMode.Create)) { archive.CreateEntryFromFile(filePath, fileName); } packedPlugins.Add(plugin.PluginUUID); AddPluginToPluginPackageInfos(plugin); } catch (Exception e) { Console.WriteLine($"\t\t{e.Message}"); } } } try { var preinstalledDlls = Path.Combine(exePath, "miner_plugins"); if (!Directory.Exists(preinstalledDlls)) { Directory.CreateDirectory(preinstalledDlls); } foreach (var kvp in bundlePluginsDlls) { var preinstalledDllPlugin = Path.Combine(exePath, "miner_plugins", kvp.Key); var fileName = Path.GetFileName(kvp.Value); var dllPath = Path.Combine(preinstalledDllPlugin, fileName); if (!Directory.Exists(preinstalledDllPlugin)) { Directory.CreateDirectory(preinstalledDllPlugin); } File.Copy(kvp.Value, dllPath); } } catch (Exception e) { Console.WriteLine($"\t\t{e.Message}"); } // dump our plugin packages InternalConfigs.WriteFileSettings(Path.Combine(pluginPackagesFolder, "update.json"), PluginPackageInfos); var deleteFolder = Path.Combine(exePath, "miner_plugins", "BrokenMinerPluginUUID"); Directory.Delete(deleteFolder, true); }
public static void GeneralConfigFileCommit() { CommitBenchmarks(); InternalConfigs.WriteFileSettings(GeneralConfigPath, GeneralConfig); ShowRestartRequired?.Invoke(null, IsRestartNeeded()); }
private static void CommitToFile() => InternalConfigs.WriteFileSettings(AcceptedPluginsPath, AcceptedPluginUUIDs);
// TODO add more options static void Main(string[] args) { if (args.Length < 1) { Console.WriteLine("Set miner plugins root path"); return; } var exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var pluginPackagesFolder = Path.Combine(exePath, "plugins_packages"); var pluginsSearchRoot = args[0]; // get all managed plugin dll's var dllFiles = Directory.GetFiles(pluginsSearchRoot, "*.dll", SearchOption.AllDirectories) .Where(filePath => !filePath.Contains("MinerPlugin") && filePath.Contains("net45") && filePath.Contains("Release") && !filePath.Contains("bin")).ToList(); var packedPlugins = new HashSet <string>(); if (Directory.Exists(pluginPackagesFolder)) { Console.WriteLine("Deleting old plugins packages"); Directory.Delete(pluginPackagesFolder, true); } if (!Directory.Exists(pluginPackagesFolder)) { Directory.CreateDirectory(pluginPackagesFolder); } foreach (var filePath in dllFiles) { var dllDir = Path.GetDirectoryName(filePath); var loaded = MinerPluginHost.LoadPlugin(dllDir); if (loaded.Count() == 0) { // log what we couldn't load and continue Console.WriteLine($"Skipping: {filePath}"); continue; } var newPlugins = MinerPluginHost.MinerPlugin .Where(kvp => packedPlugins.Contains(kvp.Key) == false) .Select(kvp => kvp.Value); foreach (var plugin in newPlugins) { var pluginZipFileName = GetPluginPackageName(plugin); var dllPackageZip = Path.Combine(pluginPackagesFolder, pluginZipFileName); Console.WriteLine($"Packaging: {dllPackageZip}"); var fileName = Path.GetFileName(filePath); using (var archive = ZipFile.Open(dllPackageZip, ZipArchiveMode.Create)) { archive.CreateEntryFromFile(filePath, fileName); } packedPlugins.Add(plugin.PluginUUID); AddPluginToPluginPackageInfos(plugin); } } // dump our plugin packages InternalConfigs.WriteFileSettings(Path.Combine(pluginPackagesFolder, "update.json"), PluginPackageInfos); }
static DeviceDetection() { (Settings, _) = InternalConfigs.GetDefaultOrFileSettings(Paths.InternalsPath("devices.json"), new DeviceDetectionSettings { }); }