Example #1
0
        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;
        }
Example #2
0
        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);
        }