예제 #1
0
        private MeasureResult Evaluate(Rainmeter.Settings.InstanceSettings Instance)
        {
            MeasureResult result = null;

            try
            {
                result = GetResource(Instance);

                result = result.Select(Instance);

                result = result.Filter(Instance);

                string strIndex = Instance.INI_Value("Index");
                if (strIndex.Length > 0)
                {
                    int index = int.Parse(strIndex);
                    result = result.Index(index, Instance);
                }
            }
            catch (Exception e)
            {
                result = new ErrorResult(-1, e.Message);
            }
            finally
            {
                Instance.SetTempValue("Age", 0);
                Instance.SetTempValue("Cached", result);
                Instance.SetTempValue("resetId", OutlookPlugin.resetId);
            }
            return(result);
        }
예제 #2
0
        private MeasureResult GetResource(Rainmeter.Settings.InstanceSettings Instance)
        {
            string resourceKey = Instance.INI_Value("Resource");

            if (resourceKey.Length == 0)
            {
                return(new ErrorResult(-1, "Resource required"));
            }
            else if (resourceKey.StartsWith("["))
            {
                MeasureResult r;
                if (TryUpdateOtherMeasure(resourceKey, Instance, out r))
                {
                    return(r);
                }
                return(new ErrorResult(-1, "Unknown measure " + resourceKey));
            }
            else if (resourceKey == "Status")
            {
                return(new StatusResult(status, statusMsg));
            }
            else if (resourceKey == "MAPIFolder" || resourceKey == "EmailFolder")
            {
                return(GetMAPIFolders(Instance));
            }
            return(new ErrorResult(-1, "Unknown resource '" + resourceKey + "'"));
        }
예제 #3
0
        protected override double?GetDouble(string key, Rainmeter.Settings.InstanceSettings Instance)
        {
            switch (key)
            {
            case "%Count": return(folders.Count);

            case "%TotalUnreadItemCount":
                if (roots.Count > 0)
                {
                    int total = 0;
                    foreach (MAPIFolderResult root in roots)
                    {
                        total += root.TotalUnreadItemCount;
                    }
                    return(total);
                }
                else
                {
                    int total = 0;
                    foreach (MAPIFolderResult f in folders)
                    {
                        total += f.UnreadItemCount;
                    }
                    return(total);
                }

            default: return(base.GetDouble(key, Instance));
            }
        }
예제 #4
0
        private string Indent(Rainmeter.Settings.InstanceSettings Instance)
        {
            string indent = virtual_INI_value(Instance, "Indent");

            if (indent == "")
            {
                indent = "  ";
            }

            if (indent.Length > 1)
            {
                int start = indent.StartsWith("\"") ? 1 : 0;
                int end   = indent.EndsWith("\"") ? 1 : 0;
                if (start + end > 0)
                {
                    indent = indent.Substring(start, indent.Length - start - end);
                }
            }

            string result = "";

            for (int i = 0; i < depth; i++)
            {
                result += indent;
            }

            return(result);
        }
예제 #5
0
        private bool TryUpdateOtherMeasure(string name, Rainmeter.Settings.InstanceSettings Instance, out MeasureResult result)
        {
            string section = name;

            if (section.StartsWith("["))
            {
                section = section.Substring(1, section.Length - 2);
            }
            Rainmeter.Settings.InstanceSettings other = Instance.GetSection(section);
            if (other == null)
            {
                result = null;
                return(false);
            }

            // a measure that is not directly used by a meter does not age,
            // we have to work around this
            int age = Math.Max((int)other.GetTempValue("Age", 0), (int)Instance.GetTempValue("Age", 0));

            other.SetTempValue("Age", age);

            result = Measure(other);
            Instance.SetTempValue("Base", other);
            return(true);
        }
예제 #6
0
        public static int ConfigHeight(Rainmeter.Settings.InstanceSettings Instance)
        {
            IntPtr hwnd = (IntPtr)(UInt32.Parse(Rainmeter.PluginBridge("GetWindow", Rainmeter.PluginBridge("GetConfig", Instance.INI_File))));
            RECT   rct;

            GetWindowRect(hwnd, out rct);
            return(rct.Bottom - rct.Top);
        }
예제 #7
0
 protected override string GetString(string key, Rainmeter.Settings.InstanceSettings Instance)
 {
     if (key == "%Message")
     {
         return(message);
     }
     return(base.GetString(key, Instance));
 }
예제 #8
0
        // Call this function to determine if the parent skin is topmost
        public static bool ParentIsTopmost(Rainmeter.Settings.InstanceSettings Instance)
        {
            IntPtr     hwnd = (IntPtr)(UInt32.Parse(Rainmeter.PluginBridge("GetWindow", Rainmeter.PluginBridge("GetConfig", Instance.INI_File))));
            WINDOWINFO info = new WINDOWINFO(true);

            GetWindowInfo(hwnd, ref info);
            return((info.dwExStyle & 0x00000008L) > 0);
        }
예제 #9
0
 public override MeasureResult Index(int i, Rainmeter.Settings.InstanceSettings Instance)
 {
     if (0 <= i && i < folders.Count)
     {
         return(folders[i]);
     }
     return(NullResult.Instance);
 }
예제 #10
0
 protected override double?GetDouble(string key, Rainmeter.Settings.InstanceSettings Instance)
 {
     if (key == "%Code")
     {
         return(code);
     }
     return(base.GetDouble(key, Instance));
 }
예제 #11
0
        protected virtual string GetString(string key, Rainmeter.Settings.InstanceSettings Instance)
        {
            double?d = GetDouble(key, Instance);

            if (d != null)
            {
                return(d.ToString());
            }
            return("");
        }
예제 #12
0
        public string AsString(Rainmeter.Settings.InstanceSettings Instance)
        {
            string result = virtual_INI_value(Instance, GetResultKey());
            Regex  regex  = new Regex("%[a-zA-Z]+");

            return(regex.Replace(result, delegate(Match match)
            {
                return GetString(match.ToString(), Instance);
            }));
        }
예제 #13
0
        private MeasureResult GetCached(Rainmeter.Settings.InstanceSettings Instance)
        {
            MeasureResult cached;

            cached = (MeasureResult)Instance.GetTempValue("Cached", null);
            if (cached == null || !cached.checkAge(Instance))
            {
                return(null);
            }
            return(cached);
        }
예제 #14
0
 protected override double?GetDouble(string key, Rainmeter.Settings.InstanceSettings Instance)
 {
     if (key == "%Code")
     {
         return(code);
     }
     else if (key == "%IsOk")
     {
         return(IsOk() ? 1 : 0);
     }
     return(null);
 }
예제 #15
0
        public override MeasureResult Select(Rainmeter.Settings.InstanceSettings Instance)
        {
            string select = Instance.INI_Value("Select");

            if (select == "Subfolders")
            {
                MAPIFolderListResult result = new MAPIFolderListResult();
                result.AddRoot(folder, false);
                return(result);
            }
            return(base.Select(Instance));
        }
예제 #16
0
 public double Update2(Rainmeter.Settings.InstanceSettings Instance)
 {
     try
     {
         MeasureResult result = Measure(Instance);
         return(result.AsDouble(Instance));
     }
     catch (Exception e)
     {
         Rainmeter.Log(Rainmeter.LogLevel.Error, "Sorry, " + e.ToString());
         return(double.NaN);
     }
 }
예제 #17
0
        protected override string GetString(string key, Rainmeter.Settings.InstanceSettings Instance)
        {
            switch (key)
            {
            case "%Name": return(Name);

            case "%Path": return(Path);

            case "%Indent": return(Indent(Instance));

            default: return(base.GetString(key, Instance));
            }
        }
예제 #18
0
 public string GetString(Rainmeter.Settings.InstanceSettings Instance)
 {
     try
     {
         MeasureResult result = Measure(Instance);
         return(result.AsString(Instance));
     }
     catch (Exception e)
     {
         Rainmeter.Log(Rainmeter.LogLevel.Error, "Sorry, " + e.ToString());
         return("Sorry, " + e.ToString());
     }
 }
예제 #19
0
 private MeasureResult Measure(Rainmeter.Settings.InstanceSettings Instance)
 {
     lock (Instance)
     {
         MeasureResult cached = GetCached(Instance);
         if (cached != null)
         {
             int age = (int)Instance.GetTempValue("Age", 0);
             Instance.SetTempValue("Age", age + 1);
             return(cached);
         }
         return(Evaluate(Instance));
     }
 }
예제 #20
0
        public override MeasureResult Select(Rainmeter.Settings.InstanceSettings Instance)
        {
            string select = Instance.INI_Value("Select");

            if (select == "Root")
            {
                MAPIFolderListResult result = new MAPIFolderListResult();
                foreach (MAPIFolderResult root in roots)
                {
                    result.Add(root);
                }
                return(result);
            }
            return(this);
        }
예제 #21
0
        protected override double?GetDouble(string key, Rainmeter.Settings.InstanceSettings Instance)
        {
            switch (key)
            {
            case "%TotalUnreadItemCount": return(TotalUnreadItemCount);

            case "%UnreadItemCount": return(UnreadItemCount);

            case "%HasUnreadItems": return(UnreadItemCount > 0 ? 1 : 0);

            case "%ItemCount": return(ItemCount);

            default: return(base.GetDouble(key, Instance));
            }
        }
예제 #22
0
 protected override string GetString(string key, Rainmeter.Settings.InstanceSettings Instance)
 {
     if (key == "%Message")
     {
         if (IsOk())
         {
             string okMsg = virtual_INI_value(Instance, "OkMessage");
             if (okMsg.Length > 0)
             {
                 return(okMsg);
             }
         }
         return(message);
     }
     return(base.GetString(key, Instance));
 }
예제 #23
0
        public override MeasureResult Filter(Rainmeter.Settings.InstanceSettings Instance)
        {
            List <MAPIFolderResult> list = folders;

            string filter = Instance.INI_Value("Filter");

            if (filter.Length > 0)
            {
                list = list.FindAll(delegate(MAPIFolderResult f)
                {
                    return(f.testFilter(filter, Instance));
                });
            }

            string include = Instance.INI_Value("Include");

            if (include.Length > 0)
            {
                include = include.Replace(".", "\\.").Replace("*", ".*");
                Regex regex = new Regex("^(" + include + ")$");
                list = list.FindAll(delegate(MAPIFolderResult f)
                {
                    return(regex.IsMatch(f.Name));
                });
            }

            string exclude = Instance.INI_Value("Exclude");

            if (exclude.Length > 0)
            {
                exclude = exclude.Replace(".", "\\.").Replace("*", ".*");
                Regex regex = new Regex("^(" + exclude + ")$");
                list = list.FindAll(delegate(MAPIFolderResult f)
                {
                    return(!regex.IsMatch(f.Name));
                });
            }

            if (list == folders)
            {
                return(this);
            }
            return(new MAPIFolderListResult(list));
        }
예제 #24
0
        protected string virtual_INI_value(Rainmeter.Settings.InstanceSettings Instance, String key)
        {
            string r = Instance.INI_Value(key);

            if (r.Length > 0)
            {
                return(r);
            }
            if (Instance.INI_Value("Override") == "1")
            {
                return("");
            }
            Rainmeter.Settings.InstanceSettings other = (Rainmeter.Settings.InstanceSettings)Instance.GetTempValue("Base", null);
            if (other == null)
            {
                return("");
            }
            return(virtual_INI_value(other, key));
        }
예제 #25
0
        public double AsDouble(Rainmeter.Settings.InstanceSettings Instance)
        {
            string result = virtual_INI_value(Instance, GetResultKey());

            if (result.StartsWith("%"))
            {
                double?d = GetDouble(result, Instance);
                if (d != null)
                {
                    return((double)d);
                }
                return(double.NaN);
            }
            else
            {
                double d = double.NaN;
                double.TryParse(result, out d);
                return(d);
            }
        }
예제 #26
0
        public bool checkAge(Rainmeter.Settings.InstanceSettings Instance)
        {
            int myResetId = (int)Instance.GetTempValue("resetId", OutlookPlugin.resetId);

            if (myResetId != OutlookPlugin.resetId)
            {
                return(false);
            }

            string strUpdateRate = virtual_INI_value(Instance, "UpdateRate");
            int    updateRate;

            if (!int.TryParse(strUpdateRate, out updateRate))
            {
                updateRate = 300;
            }

            int age = (int)Instance.GetTempValue("Age", (int)0);

            return(age < updateRate);
        }
예제 #27
0
 // 'ExecuteBang' is a way of Rainmeter telling your plugin to do something *right now*.
 // What it wants to do can be defined by the 'Command' parameter.
 public void ExecuteBang(Rainmeter.Settings.InstanceSettings Instance, string Command)
 {
     //string[] args = Command.Split(' ');
     //Command = args[0];
     try
     {
         switch (Command)
         {
         case "ClearCache":
             resetId++;
             return;
         }
         MeasureResult mr = Measure(Instance);
         mr.Bang(GetOutlook(), Command);
     }
     catch (Exception e)
     {
         Rainmeter.Log(Rainmeter.LogLevel.Error, e.ToString());
     }
     return;
 }
예제 #28
0
        public static string SkinName(Rainmeter.Settings.InstanceSettings Instance)
        {
            try
            {
                return(Instance.ConfigName);

                /*
                 * if (Instance.GetTempValue("_internal_SkinPath", string.Empty).ToString() == string.Empty)
                 * {
                 *  string sAppDataPath = System.Environment.GetEnvironmentVariable("AppData").Trim();
                 *  string sRainmeterINIText = System.IO.File.ReadAllText(sAppDataPath + "\\Rainmeter\\Rainmeter.ini");
                 *  string sSkinPath = Chopper(sRainmeterINIText.Replace('\n', '\r'), "SkinPath=", "\r").Trim().TrimEnd(new char[] { '\\' });
                 *  Instance.SetTempValue("_internal_SkinPath", sSkinPath);
                 * }
                 *
                 * System.IO.FileInfo fi = new System.IO.FileInfo(Instance.INI_File);
                 * return fi.DirectoryName.Replace(Instance.GetTempValue("_internal_SkinPath", string.Empty).ToString(), string.Empty).TrimEnd(new char[] { '\\' }).TrimStart(new char[] { '\\' });
                 */
            }
            catch { }

            return(string.Empty);
        }
예제 #29
0
        private MeasureResult GetMAPIFolders(Rainmeter.Settings.InstanceSettings Instance)
        {
            MAPIFolderListResult result = new MAPIFolderListResult();
            string rootList             = Instance.INI_Value("Root");

            if (rootList.Length == 0)
            {
                rootList = "Inbox";
            }
            Outlook.NameSpace nsMapi = outlook.GetNamespace("MAPI");
            foreach (string root in rootList.Split('|'))
            {
                if (!root.StartsWith("\\"))
                {
                    switch (root)
                    {
                    case "Inbox":
                        Outlook.MAPIFolder inbox = nsMapi.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
                        result.AddRoot(inbox);
                        break;

                    default:
                        return(new ErrorResult(-1, root + " not implemented"));
                    }
                }
                else
                {
                    Outlook.MAPIFolder folder = FindRoot(nsMapi.Folders, root);
                    if (folder == null)
                    {
                        return(new ErrorResult(-1, root + " not found"));
                    }
                    result.AddRoot(folder);
                }
            }
            return(result);
        }
예제 #30
0
        public bool testFilter(string filter, Rainmeter.Settings.InstanceSettings Instance)
        {
            double?d = GetDouble(filter, Instance);

            return(d == 1);
        }