public PluginSkin(RainmeterSkinHandler skinHandler, RainmeterAPI api) { SkinHandler = skinHandler; // -- We need to remove the last directory from path. var path = api.ReadPath(RainmeterSkinHandler.PluginMeasureName, string.Empty); var dir = Directory.GetParent(path.EndsWith("\\") ? path : string.Concat(path, "\\")); Path = dir.Parent.FullName; }
internal void M_Initialize(ref IntPtr measurePtr, RainmeterAPI api) { var measureName = api.ReadString(PluginMeasureName, string.Empty); var measureType = api.ReadString(PluginMeasureType, string.Empty); var assemblyName = api.ReadString(PluginAssemblyName, string.Empty); var assemblyPath = api.ReadPath(PluginAssemblyName, string.Empty); var assembly = GetAssembly(assemblyPath); var measureTypeType = GetPluginMeasureType(assembly, measureName); if (measureTypeType == null) // -- Error checking. { if (string.IsNullOrEmpty(measureName)) { RainmeterAPI.Log(RainmeterAPI.LogType.Error, $"{PluginMeasureName}= Not found."); } if (string.IsNullOrEmpty(measureType)) { RainmeterAPI.Log(RainmeterAPI.LogType.Error, $"{PluginMeasureType}= Not found."); } if (!string.IsNullOrEmpty(measureName) && !string.IsNullOrEmpty(measureType)) { RainmeterAPI.Log(RainmeterAPI.LogType.Error, $"Missing .dll's"); } // Not sure how bad this is on rainmeter side, but it seems fine. That's the only safe way to handle errors. // Pointer will be reset anyway by refreshin theg skin with fixed errors. measurePtr = IntPtr.Zero; return; } // -- Check if a PluginSkin exist for this type of MeasureType. Create and add if not. if (!PluginSkinByTypes.ContainsKey(measureTypeType)) { var skin = CreatePluginSkin(assembly, measureName, this, api); PluginSkinByTypes.Add(measureTypeType, skin); } var pluginMeasure = CreatePluginMeasure(assembly, measureName, measureType, PluginSkinByTypes[measureTypeType], api); measurePtr = GCHandle.ToIntPtr(GCHandle.Alloc(pluginMeasure)); AddPluginMeasure(measurePtr, PluginSkinByTypes[measureTypeType], pluginMeasure); }