コード例 #1
0
        public static async Task <CharacterCache> DownloadSINnerExtended(SINners.Models.SINner sinner, CharacterCache objCache)
        {
            try
            {
                try
                {
                    var client = await StaticUtils.GetClient();

                    var onlinesinner = await client.GetSINByIdWithHttpMessagesAsync(sinner.Id.Value);

                    var json        = onlinesinner.Body.MyExtendedAttributes.JsonSummary;
                    var onlineCache = Newtonsoft.Json.JsonConvert.DeserializeObject <CharacterCache>(json);
                    objCache.CharacterAlias = onlineCache.CharacterAlias;
                    objCache.CharacterName  = onlineCache.CharacterName;
                    objCache.MugshotBase64  = onlineCache.MugshotBase64;
                    objCache.Background     = onlineCache.Background;
                    objCache.CharacterNotes = onlineCache.CharacterNotes;
                    objCache.BuildMethod    = onlineCache.BuildMethod;
                    objCache.Concept        = onlineCache.Concept;
                    objCache.Created        = onlineCache.Created;
                    objCache.Description    = onlineCache.Description;
                    objCache.ErrorText      = onlineCache.ErrorText;
                    objCache.Essence        = onlineCache.Essence;
                    objCache.FileName       = onlineCache.FileName;
                    objCache.FilePath       = onlineCache.FilePath;
                    objCache.GameNotes      = onlineCache.GameNotes;
                    objCache.Karma          = onlineCache.Karma;
                    objCache.Metatype       = onlineCache.Metatype;
                    objCache.Metavariant    = onlineCache.Metavariant;
                    objCache.Mugshot        = onlineCache.Mugshot;
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Trace.TraceError(ex.Message);
                    if (objCache != null)
                    {
                        objCache.ErrorText = ex.Message;
                    }
                }

                return(objCache);
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.TraceError(e.Message);
                objCache.ErrorText = e.Message;
                throw;
            }
        }
コード例 #2
0
        public static List <TreeNode> CharacterRosterTreeNodifyGroupList(List <SINnerSearchGroup> groups)
        {
            if (groups == null)
            {
                return(MyTreeNodeList);
            }

            foreach (var parentlist in groups)
            {
                try
                {
                    //list.SiNner.DownloadedFromSINnersTime = DateTime.Now;
                    var objListNode = GetCharacterRosterTreeNodeRecursive(parentlist);

                    PluginHandler.MainForm.DoThreadSafe(() =>
                    {
                        if (objListNode != null)
                        {
                            MyTreeNodeList.Add(objListNode);
                        }
                        else
                        {
                            TreeNode node = new TreeNode("no owned chummers found")
                            {
                                Tag         = "",
                                Name        = "no owned chummers found",
                                ToolTipText =
                                    "To upload a chummer go into the sinners-tabpage after opening a character and press upload (and wait a bit)."
                            };
                            MyTreeNodeList.Add(node);
                        }
                    });
                }
                catch (Exception e)
                {
                    System.Diagnostics.Trace.TraceWarning("Could not deserialize CharacterCache-Object: " + e.ToString());
                    TreeNode errorNode = new TreeNode()
                    {
                        Text = "Error loading Char from WebService"
                    };
                    var objCache = new CharacterCache();
                    objCache.ErrorText = e.ToString();
                    errorNode.Tag      = objCache;
                    return(new List <TreeNode>()
                    {
                        errorNode
                    });
                }
            }

            if (MyTreeNodeList.Count == 0)
            {
                PluginHandler.MainForm.DoThreadSafe(() =>
                {
                    TreeNode node    = new TreeNode("Online, but no chummers uploaded");
                    node.Tag         = node.Text;
                    node.ToolTipText =
                        "To upload a chummer, open it go to the sinners-tabpage and click upload (and wait a bit).";
                    MyTreeNodeList.Add(node);
                });
            }

            return(MyTreeNodeList);
        }
コード例 #3
0
        private static TreeNode GetCharacterRosterTreeNodeRecursive(SINnerSearchGroup ssg)
        {
            TreeNode objListNode = new TreeNode
            {
                Text = ssg.Groupname,
                Name = ssg.Groupname
            };

            foreach (var member in ssg.MyMembers)
            {
                var sinner = member.MySINner;
                sinner.DownloadedFromSINnersTime = DateTime.Now;
                CharacterCache objCache = null;
                if (!String.IsNullOrEmpty(sinner?.MyExtendedAttributes?.JsonSummary))
                {
                    objCache =
                        Newtonsoft.Json.JsonConvert.DeserializeObject <CharacterCache>(sinner.MyExtendedAttributes
                                                                                       .JsonSummary);
                }
                else
                {
                    objCache = new CharacterCache
                    {
                        CharacterName  = "pending",
                        CharacterAlias = sinner.Alias,
                        BuildMethod    = "online"
                    };
                }

                SetEventHandlers(sinner, objCache);
                TreeNode memberNode = new TreeNode
                {
                    Text             = objCache.CalculatedName(),
                    Name             = objCache.CalculatedName(),
                    Tag              = sinner.Id.Value.ToString(),
                    ToolTipText      = "Last Change: " + sinner.LastChange,
                    ContextMenuStrip = PluginHandler.MainForm.CharacterRoster.ContextMenuStrip
                };
                if (String.IsNullOrEmpty(sinner.DownloadUrl))
                {
                    objCache.ErrorText = "File is not uploaded - only metadata available." + Environment.NewLine
                                         + "Please upload this file again from a client," +
                                         Environment.NewLine
                                         + "that has saved a local copy." +
                                         Environment.NewLine + Environment.NewLine
                                         + "Open the character locally, make sure to have \"online mode\"" +
                                         Environment.NewLine
                                         + "selected in option->plugins->sinner and press the \"save\" symbol.";
                }
                if (!objListNode.Nodes.ContainsKey(memberNode.Name))
                {
                    objListNode.Nodes.Insert(0, memberNode);
                }
                if (!string.IsNullOrEmpty(objCache.ErrorText))
                {
                    memberNode.ForeColor    = Color.Red;
                    memberNode.ToolTipText += Environment.NewLine + Environment.NewLine +
                                              LanguageManager.GetString("String_Error", GlobalOptions.Language)
                                              + LanguageManager.GetString("String_Colon", GlobalOptions.Language) +
                                              Environment.NewLine + objCache.ErrorText;
                }

                CharacterCache delObj;
                PluginHandler.MainForm.CharacterRoster.MyCharacterCacheDic.TryRemove(sinner.Id.Value.ToString(), out delObj);
                PluginHandler.MainForm.CharacterRoster.MyCharacterCacheDic.TryAdd(sinner.Id.Value.ToString(), objCache);
                if (ssg.MySINSearchGroups != null)
                {
                    foreach (var childlist in ssg.MySINSearchGroups)
                    {
                        var childnode = GetCharacterRosterTreeNodeRecursive(childlist);
                        if (childnode != null)
                        {
                            if (!objListNode.Nodes.ContainsKey(childnode.Text))
                            {
                                objListNode.Nodes.Add(childnode);
                            }
                        }
                    }
                }
            }

            if (ssg.MySINSearchGroups != null)
            {
                foreach (var childssg in ssg.MySINSearchGroups)
                {
                    var childnode = GetCharacterRosterTreeNodeRecursive(childssg);
                    if (childnode != null)
                    {
                        if (!objListNode.Nodes.ContainsKey(childnode.Name))
                        {
                            objListNode.Nodes.Add(childnode);
                        }
                        else
                        {
                            var list = objListNode.Nodes.Find(childnode.Name, false).ToList();
                            foreach (var mergenode in list)
                            {
                                foreach (TreeNode what in childnode.Nodes)
                                {
                                    if (!mergenode.Nodes.ContainsKey(what.Name))
                                    {
                                        mergenode.Nodes.Add(what);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(objListNode);
        }
コード例 #4
0
        public static Task <string> DownloadSINnerExtendedTask(SINners.Models.SINner sinner, CharacterCache objCache)
        {
            try
            {
                if ((objCache.DownLoadRunning != null) && (objCache.DownLoadRunning.Status == TaskStatus.Running))
                {
                    return(objCache.DownLoadRunning);
                }

                objCache.DownLoadRunning = Task.Factory.StartNew <string>(() =>
                {
                    objCache = DownloadSINnerExtended(sinner, objCache).Result;
                    //objCache.FilePath = filepath;
                    return(objCache.ErrorText);
                });
                return(objCache.DownLoadRunning);
            }
            catch (Exception ex)
            {
                objCache.ErrorText = ex.ToString();
                throw;
            }
        }
コード例 #5
0
        /// <summary>
        /// Generates a character cache, which prevents us from repeatedly loading XmlNodes or caching a full character.
        /// </summary>
        /// <param name="strFile"></param>
        internal async static Task <IEnumerable <TreeNode> > GetCharacterRosterTreeNode(bool forceUpdate, Func <Task <HttpOperationResponse <SINSearchGroupResult> > > myGetSINnersFunction)
        {
            if ((MyTreeNodeList != null) && !forceUpdate)
            {
                return(MyTreeNodeList);
            }
            MyTreeNodeList = new List <TreeNode>();
            try
            {
                PluginHandler.MainForm.DoThreadSafe(() =>
                {
                    MyTreeNodeList.Clear();
                });

                HttpOperationResponse <SINSearchGroupResult> response = null;
                try
                {
                    response = await myGetSINnersFunction();
                }
                catch (Microsoft.Rest.SerializationException e)
                {
                    if (e.Content.Contains("Log in - ChummerHub"))
                    {
                        TreeNode node = new TreeNode("Online, not logged in");
                        node.ToolTipText = "Please log in (Options -> Plugins -> Sinners (Cloud) -> Login";
                        PluginHandler.MainForm.DoThreadSafe(() =>
                        {
                            MyTreeNodeList.Add(node);
                        });
                        return(MyTreeNodeList);
                    }
                    else
                    {
                        string msg = "Could not load response from SINners:" + Environment.NewLine;
                        msg += e.Message;
                        if (e.InnerException != null)
                        {
                            msg += Environment.NewLine + e.InnerException.Message;
                        }
                        System.Diagnostics.Trace.TraceWarning(msg);
                        PluginHandler.MainForm.DoThreadSafe(() =>
                        {
                            MyTreeNodeList.Add(new TreeNode()
                            {
                                ToolTipText = msg
                            });
                        });
                        return(MyTreeNodeList);
                    }
                }
                if (response == null || (response.Response.StatusCode == HttpStatusCode.BadRequest))
                {
                    string msg = "Could not load online Sinners: " + response?.Response.ReasonPhrase;
                    if (response != null)
                    {
                        var content = await response.Response.Content.ReadAsStringAsync();

                        msg += Environment.NewLine + "Content: " + content;
                    }
                    System.Diagnostics.Trace.TraceWarning(msg);

                    var errornode = new TreeNode()
                    {
                        Text = "Error contacting SINners"
                    };

                    CharacterCache errorCache = new CharacterCache
                    {
                        ErrorText      = "Error is copied to clipboard!" + Environment.NewLine + Environment.NewLine + msg,
                        CharacterAlias = "Error loading SINners"
                    };
                    errorCache.OnMyAfterSelect += (sender, args) =>
                    {
                        PluginHandler.MainForm.DoThreadSafe(() =>
                        {
                            System.Windows.Forms.Clipboard.SetText(msg);
                        });
                    };
                    errornode.Tag = errorCache;
                    PluginHandler.MainForm.DoThreadSafe(() =>
                    {
                        MyTreeNodeList.Add(errornode);
                    });
                    return(MyTreeNodeList);
                }

                SINSearchGroupResult result = response.Body as SINSearchGroupResult;
                if (result?.Roles != null)
                {
                    StaticUtils.UserRoles = result.Roles?.ToList();
                }
                System.Diagnostics.Trace.TraceInformation("Connected to SINners in version " + result?.Version?.AssemblyVersion + ".");
                var groups = result?.SinGroups.ToList();
                MyTreeNodeList = CharacterRosterTreeNodifyGroupList(groups);

                return(MyTreeNodeList);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.TraceError(ex.ToString());
                throw;
            }
        }
コード例 #6
0
        public static async Task <string> DownloadFile(SINners.Models.SINner sinner, CharacterCache objCache)
        {
            try
            {
                //currently only one chum5-File per chum5z ZipFile is implemented!
                string loadFilePath = null;
                string zipPath      = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "SINner", sinner.Id.Value.ToString());
                if (Directory.Exists(zipPath))
                {
                    var files = Directory.EnumerateFiles(zipPath, "*.chum5", SearchOption.TopDirectoryOnly);
                    foreach (var file in files)
                    {
                        DateTime lastwrite = File.GetLastWriteTime(file);
                        if ((lastwrite >= sinner.LastChange) ||
                            sinner.LastChange == null)
                        {
                            loadFilePath      = file;
                            objCache.FilePath = loadFilePath;
                            break;
                        }
                        //no recent file found - download it (again).
                        File.Delete(file);
                    }
                }
                else
                {
                    Directory.CreateDirectory(zipPath);
                }
                Character objOpenCharacter = null;
                objOpenCharacter = PluginHandler.MainForm?.OpenCharacters?.FirstOrDefault(x => x.FileName == loadFilePath);
                if ((objOpenCharacter != null))
                {
                    return(loadFilePath);
                }
                if (String.IsNullOrEmpty(loadFilePath))
                {
                    try
                    {
                        string zippedFile = Path.Combine(System.IO.Path.GetTempPath(), "SINner", sinner.Id.Value + ".chum5z");
                        if (File.Exists(zippedFile))
                        {
                            File.Delete(zippedFile);
                        }
                        var client = await StaticUtils.GetClient();

                        var filestream = client.GetDownloadFile(sinner.Id.Value);
                        var array      = ReadFully(filestream);
                        File.WriteAllBytes(zippedFile, array);
                        System.IO.Compression.ZipFile.ExtractToDirectory(zippedFile, zipPath);
                        var files = Directory.EnumerateFiles(zipPath, "*.chum5", SearchOption.TopDirectoryOnly);
                        foreach (var file in files)
                        {
                            if (sinner.UploadDateTime != null)
                            {
                                File.SetCreationTime(file, sinner.UploadDateTime.Value);
                            }
                            if (sinner.LastChange != null)
                            {
                                File.SetLastWriteTime(file, sinner.LastChange.Value);
                            }
                            loadFilePath      = file;
                            objCache.FilePath = loadFilePath;
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Trace.TraceError(ex.Message);
                        if (objCache != null)
                        {
                            objCache.ErrorText = ex.Message;
                        }
                    }
                }
                return(objCache.FilePath);
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.TraceError(e.Message);
                objCache.ErrorText = e.Message;
                throw;
            }
        }
コード例 #7
0
        public static async Task <string> DownloadFile(SINners.Models.SINner sinner, CharacterCache objCache)
        {
            try
            {
                //currently only one chum5-File per chum5z ZipFile is implemented!
                string loadFilePath = null;
                string zipPath      = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "SINner", sinner.Id.Value.ToString());
                if (Directory.Exists(zipPath))
                {
                    var files = Directory.EnumerateFiles(zipPath, "*.chum5", SearchOption.TopDirectoryOnly);
                    foreach (var file in files)
                    {
                        DateTime lastwrite = File.GetLastWriteTime(file);
                        if ((lastwrite >= sinner.LastChange) ||
                            sinner.LastChange == null)
                        {
                            loadFilePath      = file;
                            objCache.FilePath = loadFilePath;
                            break;
                        }
                        File.Delete(file);
                    }
                }
                else
                {
                    Directory.CreateDirectory(zipPath);
                }
                Character objOpenCharacter = null;
                objOpenCharacter = PluginHandler.MainForm?.OpenCharacters?.FirstOrDefault(x => x.FileName == loadFilePath);
                if ((objOpenCharacter != null))
                {
                    return(loadFilePath);
                }
                if (String.IsNullOrEmpty(loadFilePath))
                {
                    try
                    {
                        string zippedFile = Path.Combine(System.IO.Path.GetTempPath(), "SINner", sinner.Id.Value + ".chum5z");
                        if (File.Exists(zippedFile))
                        {
                            File.Delete(zippedFile);
                        }
                        Exception rethrow = null;
                        bool      downloadedFromGoogle = false;
                        try
                        {
                            using (WebClient wc = new WebClient())
                            {
                                //wc.DownloadProgressChanged += wc_DownloadProgressChanged;
                                //wc.DownloadFileCompleted += (sender, e) =>
                                //{
                                //    if (e.Error == null)
                                //    {
                                //        PluginHandler.MainForm.DoThreadSafe(() =>
                                //        {
                                //            PluginHandler.MainForm.Text = PluginHandler.MainForm.MainTitle;
                                //        });
                                //    }
                                //    else
                                //    {
                                //        PluginHandler.MainForm.DoThreadSafe(() =>
                                //        {
                                //            PluginHandler.MainForm.Text =
                                //                PluginHandler.MainForm.MainTitle + "Error while loading " +
                                //                sinner.Alias + " from SINners-WebService";
                                //        });
                                //    }

                                //};
                                wc.DownloadFile(
                                    // Param1 = Link of file
                                    new System.Uri(sinner.DownloadUrl),
                                    // Param2 = Path to save
                                    zippedFile
                                    );
                            }
                        }
                        catch (Exception e)
                        {
                            rethrow = e;
                            if (!File.Exists(zippedFile))
                            {
                                var client = await StaticUtils.GetClient();

                                var filestream = client.GetDownloadFile(sinner.Id.Value);
                                var array      = ReadFully(filestream);
                                File.WriteAllBytes(zippedFile, array);
                            }
                        }

                        if (!File.Exists(zippedFile))
                        {
                            if (rethrow != null)
                            {
                                throw rethrow;
                            }
                        }


                        System.IO.Compression.ZipFile.ExtractToDirectory(zippedFile, zipPath);
                        var files = Directory.EnumerateFiles(zipPath, "*.chum5", SearchOption.TopDirectoryOnly);
                        foreach (var file in files)
                        {
                            if (sinner.UploadDateTime != null)
                            {
                                File.SetCreationTime(file, sinner.UploadDateTime.Value);
                            }
                            if (sinner.LastChange != null)
                            {
                                File.SetLastWriteTime(file, sinner.LastChange.Value);
                            }
                            loadFilePath      = file;
                            objCache.FilePath = loadFilePath;
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Trace.TraceError(ex.Message);
                        if (objCache != null)
                        {
                            objCache.ErrorText = ex.Message;
                        }
                    }
                }
                return(objCache.FilePath);
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.TraceError(e.Message);
                objCache.ErrorText = e.Message;
                throw;
            }
        }
コード例 #8
0
ファイル: Utils.cs プロジェクト: MasterShangChi/chummer5a
        public static Task <Character> DownloadFileTask(SINners.Models.SINner sinner, CharacterCache objCache)
        {
            try
            {
                if (objCache.DownLoadRunning != null)
                {
                    return(objCache.DownLoadRunning);
                }

                objCache.DownLoadRunning = Task.Factory.StartNew <Character>(() =>
                {
                    return(DownloadFile(sinner, objCache));
                });
                return(objCache.DownLoadRunning);
            }
            catch (Exception ex)
            {
                objCache.ErrorText = ex.ToString();
                throw;
            }
        }
コード例 #9
0
        private static void SetEventHandlers(SINners.Models.SINner sinner, CharacterCache objCache)
        {
            objCache.OnMyDoubleClick -= objCache.OnDefaultDoubleClick;
            objCache.OnMyDoubleClick += (sender, e) =>
            {
                var t = DownloadFileTask(sinner, objCache);
                t.ContinueWith((downloadtask) =>
                {
                    PluginHandler.MySINnerLoading = sinner;
                    PluginHandler.MainForm.CharacterRoster.SetMyEventHandlers(true);
                    string filepath = downloadtask.Result as string;
                    PluginHandler.MainForm.DoThreadSafe(() =>
                    {
                        Character c = PluginHandler.MainForm.LoadCharacter(filepath);
                        if (c != null)
                        {
                            SwitchToCharacter(c);
                        }
                        SwitchToCharacter(objCache);

                        PluginHandler.MainForm.CharacterRoster.SetMyEventHandlers(false);
                        PluginHandler.MySINnerLoading = null;
                    });
                });
            };
            objCache.OnMyAfterSelect -= objCache.OnDefaultAfterSelect;
            objCache.OnMyAfterSelect += (sender, treeViewEventArgs) =>
            {
                objCache.FilePath = DownloadFileTask(sinner, objCache).Result;
            };
            objCache.OnMyKeyDown -= objCache.OnDefaultKeyDown;
            objCache.OnMyKeyDown += async(sender, args) =>
            {
                try
                {
                    using (new CursorWait(true, PluginHandler.MainForm))
                    {
                        if (args.Item1.KeyCode == Keys.Delete)
                        {
                            var client = await StaticUtils.GetClient();

                            client.Delete(sinner.Id.Value);
                            objCache.ErrorText = "deleted!";
                            PluginHandler.MainForm.DoThreadSafe(() =>
                            {
                                PluginHandler.MainForm.CharacterRoster.LoadCharacters(false, false, false, true);
                            });
                        }
                    }
                }
                catch (HttpOperationException e)
                {
                    objCache.ErrorText  = e.Message;
                    objCache.ErrorText += Environment.NewLine + e.Response.Content;
                    System.Diagnostics.Trace.TraceWarning(e.ToString());
                }
                catch (Exception e)
                {
                    objCache.ErrorText = e.Message;
                    System.Diagnostics.Trace.TraceWarning(e.ToString());
                }
            };
        }
コード例 #10
0
ファイル: Bot.cs プロジェクト: NEVEROYATNII/Funky
 internal static void Reset()
 {
     Class=null;
              Character=new CharacterCache();
              Combat=new CombatCache();
              Target=new TargetHandler();
              NavigationCache=new Navigation();
              Stats=new BotStatistics();
              shuttingDownBot=false;
 }
コード例 #11
0
ファイル: Utils.cs プロジェクト: MasterShangChi/chummer5a
        /// <summary>
        /// Generates a character cache, which prevents us from repeatedly loading XmlNodes or caching a full character.
        /// </summary>
        /// <param name="strFile"></param>
        internal async static Task <IEnumerable <TreeNode> > GetCharacterRosterTreeNode(ConcurrentDictionary <string, CharacterCache> CharCache, bool forceUpdate)
        {
            if ((MyTreeNodeList != null) && !forceUpdate)
            {
                return(MyTreeNodeList);
            }
            try
            {
                var response = await StaticUtils.Client.GetSINnersByAuthorizationWithHttpMessagesAsync();

                if (MyOnlineTreeNode == null)
                {
                    MyOnlineTreeNode = new TreeNode()
                    {
                        Text = "Online",
                        Tag  = "OnlineTag"
                    };
                }
                else
                {
                    PluginHandler.MainForm.DoThreadSafe(() =>
                    {
                        MyOnlineTreeNode.Nodes.Clear();
                    });
                }
                if (response.Response.StatusCode == HttpStatusCode.BadRequest)
                {
                    string msg     = "Could not load online Sinners: " + response.Response.ReasonPhrase;
                    var    content = await response.Response.Content.ReadAsStringAsync();

                    msg += Environment.NewLine + "Content: " + content;
                    System.Diagnostics.Trace.TraceWarning(msg);
                    MyOnlineTreeNode.ToolTipText = msg;
                    return(new List <TreeNode>()
                    {
                        MyOnlineTreeNode
                    });
                }
                if (response == null || response.Body == null || response.Body?.SinLists == null)
                {
                    return(new List <TreeNode>()
                    {
                        MyOnlineTreeNode
                    });
                }
                foreach (var list in response.Body.SinLists)
                {
                    try
                    {
                        if (!list.SiNners.Any())
                        {
                            continue;
                        }
                        TreeNode objListNode = new TreeNode
                        {
                            Text             = list.Header,
                            Tag              = list,
                            ContextMenuStrip = PluginHandler.MainForm.CharacterRoster.ContextMenuStrip
                        };
                        foreach (var sinner in list.SiNners)
                        {
                            if (String.IsNullOrEmpty(sinner.JsonSummary))
                            {
                                continue;
                            }
                            CharacterCache objCache = Newtonsoft.Json.JsonConvert.DeserializeObject <CharacterCache>(sinner.JsonSummary);
                            SetEventHandlers(sinner, objCache);

                            TreeNode objNode = new TreeNode
                            {
                                Text             = objCache.CalculatedName(),
                                Tag              = sinner.Id.Value.ToString(),
                                ToolTipText      = "Last Change: " + sinner.LastChange,
                                ContextMenuStrip = PluginHandler.MainForm.CharacterRoster.ContextMenuStrip
                            };
                            if (!string.IsNullOrEmpty(objCache.ErrorText))
                            {
                                objNode.ForeColor    = Color.Red;
                                objNode.ToolTipText += Environment.NewLine + Environment.NewLine + LanguageManager.GetString("String_Error", GlobalOptions.Language)
                                                       + LanguageManager.GetString("String_Colon", GlobalOptions.Language) + Environment.NewLine + objCache.ErrorText;
                            }
                            CharacterCache delObj;
                            CharCache.TryRemove(sinner.Id.Value.ToString(), out delObj);
                            CharCache.TryAdd(sinner.Id.Value.ToString(), objCache);
                            PluginHandler.MainForm.DoThreadSafe(() =>
                            {
                                objListNode.Nodes.Add(objNode);
                            });
                        }

                        PluginHandler.MainForm.DoThreadSafe(() =>
                        {
                            MyOnlineTreeNode.Nodes.Add(objListNode);
                        });
                    }
                    catch (Exception e)
                    {
                        System.Diagnostics.Trace.TraceWarning("Could not deserialize CharacterCache-Object: " + list.Header);
                    }
                }
                if (MyOnlineTreeNode.Nodes.Count > 0)
                {
                    return MyTreeNodeList = new List <TreeNode>()
                    {
                               MyOnlineTreeNode
                    }
                }
                ;
                else
                {
                    return(MyTreeNodeList = null);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.TraceError(ex.ToString());
                throw;
            }
        }
コード例 #12
0
        public override int Read()
        {
            while (true)
            {
                if (replacement != null && charPointer < replacement.Length)
                {
                    return(replacement[charPointer++]);
                }

                int firstChar = NextChar();
                if (firstChar == -1)
                {
                    return(-1);
                }
                NormalizeCharMap nm = normMap.submap != null?(NormalizeCharMap)normMap.submap[CharacterCache.ValueOf((char)firstChar)]:null;
                if (nm == null)
                {
                    return(firstChar);
                }
                NormalizeCharMap result = Match(nm);
                if (result == null)
                {
                    return(firstChar);
                }
                replacement = result.normStr;
                charPointer = 0;
                if (result.diff != 0)
                {
                    int prevCumulativeDiff = GetLastCumulativeDiff();
                    if (result.diff < 0)
                    {
                        for (int i = 0; i < -result.diff; i++)
                        {
                            AddOffCorrectMap(nextCharCounter + i - prevCumulativeDiff, prevCumulativeDiff - 1 - i);
                        }
                    }
                    else
                    {
                        AddOffCorrectMap(nextCharCounter - result.diff - prevCumulativeDiff, prevCumulativeDiff + result.diff);
                    }
                }
            }
        }
コード例 #13
0
        public CharacterExtended(Character character, string fileElement = null, SINner mySINnerLoading = null, CharacterCache myCharacterCache = null) : this(character, fileElement, myCharacterCache)
        {
            if (mySINnerLoading != null)
            {
                var backup = MySINnerFile;
                MySINnerFile = mySINnerLoading;
                if (MySINnerFile?.SiNnerMetaData != null)
                {
                    if (MySINnerFile.SiNnerMetaData.Id == null || MySINnerFile.SiNnerMetaData.Id == Guid.Empty)
                    {
                        MySINnerFile.SiNnerMetaData.Id = backup.SiNnerMetaData.Id;
                    }

                    if (MySINnerFile.SiNnerMetaData.Tags?.Count < backup?.SiNnerMetaData?.Tags?.Count)
                    {
                        MySINnerFile.SiNnerMetaData.Tags = new List <Tag>(backup.SiNnerMetaData.Tags);
                    }
                }
            }
        }
コード例 #14
0
        public CharacterExtended(Character character, string fileElement = null, CharacterCache myCharacterCache = null)
        {
            MyCharacter      = character ?? throw new ArgumentNullException(nameof(character));
            MyCharacterCache = myCharacterCache ?? new CharacterCache(MyCharacter.FileName);
            if (!string.IsNullOrEmpty(fileElement))
            {
                try
                {
                    MySINnerFile = JsonConvert.DeserializeObject <SINner>(fileElement);
                }
                catch (Exception e)
                {
                    Log.Error(e);
                }
            }

            if (MySINnerFile == null)
            {
                MySINnerFile = new SINner
                {
                    Language = GlobalOptions.Language
                };

                //MySINnerFile.MyExtendedAttributes = new SINnerExtended(MySINnerFile);
            }
            if (MySINnerFile.SiNnerMetaData == null)
            {
                MySINnerFile.SiNnerMetaData = new SINnerMetaData
                {
                    Id         = Guid.NewGuid(),
                    Tags       = new List <Tag>(),
                    Visibility = new SINnerVisibility
                    {
                        IsGroupVisible = true,
                        IsPublic       = true
                    }
                };
            }

            if (!string.IsNullOrEmpty(Settings.Default.SINnerVisibility))
            {
                MySINnerFile.SiNnerMetaData.Visibility =
                    JsonConvert.DeserializeObject <SINnerVisibility>(Settings.Default.SINnerVisibility);
            }

            if (MySINnerFile.SiNnerMetaData.Visibility?.Id == null)
            {
                if (MySINnerFile.SiNnerMetaData.Visibility != null)
                {
                    MySINnerFile.SiNnerMetaData.Visibility.Id = Guid.NewGuid();
                }
            }

            MySINnerFile.LastChange = MyCharacter.FileLastWriteTime;

            if (MySINnerIds.TryGetValue(MyCharacter.FileName, out var singuid))
            {
                MySINnerFile.Id = singuid;
            }
            else
            {
                MySINnerFile.Id = Guid.NewGuid();
                MySINnerIds.Add(MyCharacter.FileName, MySINnerFile.Id.Value);
                MySINnerIds = MySINnerIds; //Save it!
            }
        }
コード例 #15
0
 public UserManagementService(CharacterSessionManager characterSessionManager, CharacterCache characterCache, EventManager eventManager)
 {
     this.characterSessionManager = characterSessionManager;
     this.characterCache          = characterCache;
     this.eventManager            = eventManager;
 }
コード例 #16
0
        public bool ShouldFilter(CharacterDrop.Drop drop, DropExtended extended, CharacterDrop characterDrop)
        {
            var character = CharacterCache.GetCharacter(characterDrop);
            var inventory = CharacterCache.GetInventory(character);

            if (inventory is null)
            {
#if DEBUG
                Log.LogDebug("No inventory for creature were found.");
#endif

                //No inventory to compare against. Assume that all is allowed.
                return(false);
            }

            var items = extended.Config.ConditionHasItem.Value.SplitByComma(true);

            if (items.Count == 0)
            {
                return(false);
            }

            HashSet <string> inventoryItems;

            if (InstallationManager.RRRInstalled && character.name.StartsWith("RRR"))
            {
                // This is an RRR creature, item names will have been set with a specific pattern.
                inventoryItems = new();

                foreach (var item in inventory.GetAllItems())
                {
                    var firstSection = item.m_dropPrefab.name.IndexOf('@');

                    if (firstSection < 0)
                    {
                        // Unformatted item, add as is
                        inventoryItems.Add(PrepareName(item.m_dropPrefab));
                        continue;
                    }

                    var endSection = item.m_dropPrefab.name.IndexOf('@', firstSection + 1);

                    if (endSection < 0)
                    {
                        inventoryItems.Add(CleanName(item.m_dropPrefab.name.Substring(firstSection + 1)));
                    }
                    else
                    {
                        inventoryItems.Add(CleanName(item.m_dropPrefab.name.Substring(firstSection + 1, endSection - firstSection - 1)));
                    }
                }
            }
            else
            {
                inventoryItems = inventory
                                 .GetAllItems()
                                 .Select(x => x.m_dropPrefab.name.Trim().ToUpperInvariant())
                                 .ToHashSet();
            }

#if DEBUG
            Log.LogTrace("Inventory: " + inventoryItems.Join());
#endif
            if (!items.Any(x => inventoryItems.Contains(x)))
            {
                //No inventory items matched an item in condition list.
                Log.LogTrace($"{nameof(CharacterDropItemConfiguration.ConditionHasItem)}: Found none of the required items '{items.Join()}' in inventory.");

                return(true);
            }

            return(false);
        }