コード例 #1
0
ファイル: SINner.cs プロジェクト: chummer5a/chummer13
        public frmCharacterRoster.CharacterCache GetCharacterCache()
        {
            if (this.FilePath != null)
            {
                frmCharacterRoster.CharacterCache ret = new frmCharacterRoster.CharacterCache(this.FilePath);
                return(ret);
            }

            return(null);
        }
コード例 #2
0
        private async void bMultiUpload_Click(object sender, EventArgs e)
        {
            OpenFileDialog thisDialog = new OpenFileDialog();

            thisDialog.Filter           = "Chummer files (*.chum5)|*.chum5|All files (*.*)|*.*";
            thisDialog.FilterIndex      = 1;
            thisDialog.RestoreDirectory = true;
            thisDialog.Multiselect      = true;
            thisDialog.Title            = "Please Select Chummer File(s) for Batch-Upload";

            if (thisDialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            foreach (var file in thisDialog.FileNames)
            {
                try
                {
                    Log.Trace("Loading: " + file);
                    var c = new Character {
                        FileName = file
                    };
                    using (frmLoading frmLoadingForm = new frmLoading {
                        CharacterFile = file
                    })
                    {
                        frmLoadingForm.Reset(36);
                        frmLoadingForm.TopMost = true;
                        frmLoadingForm.Show();
                        if (!(await c.Load(frmLoadingForm, false)))
                        {
                            continue;
                        }
                        Log.Trace("Character loaded: " + c.Name);
                    }
                    frmCharacterRoster.CharacterCache myCharacterCache = new frmCharacterRoster.CharacterCache(file);
                    CharacterExtended ce = new CharacterExtended(c, null, null, myCharacterCache);
                    await ce.Upload(null);
                }
                catch (Exception ex)
                {
                    string msg = "Exception while loading " + file + ":";
                    msg += Environment.NewLine + ex.ToString();
                    Log.Warn(msg);
                    /* run your code here */
                    Program.MainForm.ShowMessageBox(msg);
                }
            }

            Program.MainForm.ShowMessageBox("Upload of " + thisDialog.FileNames.Length + " files finished (successful or not - its over).");
        }
コード例 #3
0
ファイル: PluginHandler.cs プロジェクト: draconswan/chummer5a
        public async Task <IEnumerable <TreeNode> > GetCharacterRosterTreeNode(frmCharacterRoster frmCharRoster, bool forceUpdate)
        {
            try
            {
                using (new CursorWait(true, frmCharRoster))
                {
                    Func <Task <HttpOperationResponse <ResultAccountGetSinnersByAuthorization> > > myMethodName = async() =>
                    {
                        var client = StaticUtils.GetClient();
                        var ret    = await client.GetSINnersByAuthorizationWithHttpMessagesAsync();

                        return(ret);
                    };
                    var res = await ChummerHub.Client.Backend.Utils.GetCharacterRosterTreeNode(forceUpdate, myMethodName);

                    if (res == null)
                    {
                        throw new ArgumentException("Could not load owned SINners from WebService.");
                    }
                    var list      = res.ToList();
                    var myadd     = MyTreeNodes2Add.ToList();
                    var mysortadd = (from a in myadd orderby a.Value.Text select a).ToList();
                    foreach (var addme in mysortadd)
                    {
                        list.Add(addme.Value);
                    }
                    return(list);
                }
            }
            catch (Microsoft.Rest.SerializationException e)
            {
                if (e.Content.Contains("Log in - ChummerHub"))
                {
                    TreeNode node = new TreeNode("Online, but not logged in!")
                    {
                        ToolTipText = "Please log in (Options -> Plugins -> Sinners (Cloud) -> Login", Tag = e
                    };
                    return(new List <TreeNode>()
                    {
                        node
                    });
                }
                else
                {
                    TreeNode node = new TreeNode("Error: " + e.Message)
                    {
                        ToolTipText = e.ToString(), Tag = e
                    };
                    return(new List <TreeNode>()
                    {
                        node
                    });
                }
            }
            catch (Exception e)
            {
                TreeNode node = new TreeNode("SINners Error: please log in")
                {
                    ToolTipText = e.ToString(), Tag = e
                };
                var objCache = new frmCharacterRoster.CharacterCache
                {
                    ErrorText = e.ToString()
                };
                node.Tag = objCache;
                return(new List <TreeNode>()
                {
                    node
                });
            }
        }
コード例 #4
0
        public string PrepareModel()
        {
            MySINnerFile.UploadDateTime = DateTime.Now;

            if (MySINnerIds.TryGetValue(MyCharacter.Alias, out var singuid))
            {
                MySINnerFile.Id = singuid;
            }
            else
            {
                MySINnerFile.Id = Guid.NewGuid();
                MySINnerIds.Add(MyCharacter.Alias, MySINnerFile.Id.Value);
                MySINnerIds = MySINnerIds; //Save it!
            }

            MySINnerFile.LastChange = MyCharacter.FileLastWriteTime;
            if (MySINnerFile.SiNnerMetaData.Visibility?.UserRights == null)
            {
                MySINnerFile.SiNnerMetaData.Visibility =
                    new SINnerVisibility
                {
                    Id             = Guid.NewGuid(),
                    Groupname      = SINnersOptions.SINnerVisibility.Groupname,
                    IsGroupVisible = SINnersOptions.SINnerVisibility.IsGroupVisible,
                    IsPublic       = SINnersOptions.SINnerVisibility.IsPublic,
                    UserRights     = SINnersOptions.SINnerVisibility.UserRights
                };
            }


            var tempDir = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id.Value.ToString());

            if (!Directory.Exists(tempDir))
            {
                Directory.CreateDirectory(tempDir);
            }
            foreach (var file in Directory.GetFiles(tempDir))
            {
                File.Delete(file);
            }

            var summary = new frmCharacterRoster.CharacterCache(MyCharacter.FileName);

            MySINnerFile.JsonSummary = JsonConvert.SerializeObject(summary);
            MySINnerFile.LastChange  = MyCharacter.FileLastWriteTime;
            var tempfile = Path.Combine(tempDir, summary.FileName);

            if (!File.Exists(tempfile))
            {
                File.Copy(MyCharacter.FileName, tempfile);
            }

            string zipPath = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id.Value + ".chum5z");

            if (File.Exists(zipPath))
            {
                File.Delete(zipPath);
            }
            ZipFile.CreateFromDirectory(tempDir, zipPath);
            ZipFilePath = zipPath;
            return(zipPath);
        }
コード例 #5
0
        public CharacterExtended(Character character, string fileElement = null)
        {
            MyCharacter  = character;
            MySINnerFile = new SINner();
            if (string.IsNullOrEmpty(fileElement))
            {
                MySINnerFile.SiNnerMetaData = new SINnerMetaData
                {
                    Id         = Guid.NewGuid(),
                    Tags       = new List <Tag>(),
                    Visibility = new SINnerVisibility()
                };
            }
            else
            {
                try
                {
                    MySINnerFile.SiNnerMetaData = JsonConvert.DeserializeObject <SINnerMetaData>(fileElement);
                }
                catch (Exception e)
                {
                    System.Diagnostics.Trace.TraceWarning(e.ToString());
                }
            }

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

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

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

            var cache = new frmCharacterRoster.CharacterCache(character.FileName);

            this.MySINnerFile.LastChange = MyCharacter.FileLastWriteTime;

            if (MySINnerIds.TryGetValue(MyCharacter.Alias, out var singuid))
            {
                MySINnerFile.Id = singuid;
            }
            else
            {
                MySINnerFile.Id = Guid.NewGuid();
                MySINnerIds.Add(MyCharacter.Alias, MySINnerFile.Id.Value);
                MySINnerIds = MySINnerIds; //Save it!
            }
            this.MySINnerFile.JsonSummary = JsonConvert.SerializeObject(cache);
        }
コード例 #6
0
        public async Task <string> PrepareModel()
        {
            string zipPath = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id + ".chum5z");

            if (PluginHandler.MySINnerLoading != null)
            {
                if (MySINnerIds.ContainsKey(MyCharacter.Alias))
                {
                    MySINnerIds.Remove(MyCharacter.Alias);
                }
            }
            if (MySINnerIds.TryGetValue(MyCharacter.Alias, out var singuid))
            {
                MySINnerFile.Id = singuid;
            }
            else
            {
                if (PluginHandler.MySINnerLoading != null)
                {
                    _MySINnerFile = PluginHandler.MySINnerLoading;
                    MySINnerIds.Add(MyCharacter.Alias, MySINnerFile.Id.Value);
                    return(zipPath);
                }
                else
                {
                    if (String.IsNullOrEmpty(MySINnerFile.Alias))
                    {
                        MySINnerFile.Alias = MyCharacter.Alias;
                        if (String.IsNullOrEmpty(MySINnerFile.Alias))
                        {
                            MySINnerFile.Alias = MyCharacter.Name;
                        }
                    }
                    var client = await StaticUtils.GetClient();

                    var res = await client.GetOwnedSINByAliasWithHttpMessagesAsync(MySINnerFile.Alias);

                    if (res.Response.StatusCode == HttpStatusCode.NotFound)
                    {
                        MySINnerFile.Id = Guid.NewGuid();
                    }
                    else if (res.Response.StatusCode == HttpStatusCode.OK)
                    {
                        string message = MySINnerFile.Alias +
                                         " is already available online, but the current client uses a local version of that file." +
                                         Environment.NewLine + Environment.NewLine;
                        message += "Do you want to use only one version and update it through SINner?" +
                                   Environment.NewLine + Environment.NewLine;
                        message += "YES:\tuse the same (= only one) version and get" +
                                   Environment.NewLine;
                        message += "\tupdates on this client when you save" + Environment.NewLine;
                        message += "\tthe chummer on another client(recommended)" + Environment.NewLine
                                   + Environment.NewLine;
                        message +=
                            "NO:\tgenerate a new \"Fork\" of this character," +
                            Environment.NewLine;
                        message += "\tthat is not linked to the online one" + Environment.NewLine;
                        message +=
                            "\tand use this new version from now on," + Environment.NewLine;
                        message += "but only on this client (NOT recommended)."
                                   + Environment.NewLine + Environment.NewLine;
                        var result = MessageBox.Show(message, "SIN already found online", MessageBoxButtons.YesNoCancel,
                                                     MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
                        if (result == DialogResult.Cancel)
                        {
                            throw new ArgumentException("User aborted perparation for upload!");
                        }
                        else if (result == DialogResult.No)
                        {
                            MySINnerFile.Id = Guid.NewGuid();
                        }
                        else
                        {
                            foreach (var sin in res.Body)
                            {
                                if (sin.Id != null)
                                {
                                    MySINnerFile.Id = sin.Id;
                                    break;
                                }
                            }
                        }
                    }
                }

                MySINnerIds.Add(MyCharacter.Alias, MySINnerFile.Id.Value);
                MySINnerIds = MySINnerIds; //Save it!
            }
            zipPath = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id.Value + ".chum5z");
            MySINnerFile.UploadDateTime = DateTime.Now;



            MySINnerFile.Alias      = MyCharacter.CharacterName;
            MySINnerFile.LastChange = MyCharacter.FileLastWriteTime;
            if (MySINnerFile.SiNnerMetaData.Visibility?.UserRights == null)
            {
                MySINnerFile.SiNnerMetaData.Visibility =
                    new SINnerVisibility
                {
                    Id             = Guid.NewGuid(),
                    IsGroupVisible = SINnersOptions.SINnerVisibility.IsGroupVisible,
                    IsPublic       = SINnersOptions.SINnerVisibility.IsPublic,
                    UserRights     = SINnersOptions.SINnerVisibility.UserRights
                };
            }
            if (MySINnerFile.SiNnerMetaData.Visibility.Id == SINnersOptions.SINnerVisibility.Id)
            {
                //make the visibility your own and dont reuse the id from the general options!
                MySINnerFile.SiNnerMetaData.Visibility.Id = Guid.NewGuid();
            }
            foreach (var visnow in SINnersOptions.SINnerVisibility.UserRights)
            {
                if (!MySINnerFile.SiNnerMetaData.Visibility.UserRights.Any(a => a.EMail.ToLowerInvariant() == visnow.EMail.ToLowerInvariant()))
                {
                    MySINnerFile.SiNnerMetaData.Visibility.UserRights.Add(visnow);
                }
            }

            foreach (var ur in MySINnerFile.SiNnerMetaData.Visibility.UserRights)
            {
                if (SINnersOptions.SINnerVisibility.UserRights.Any(a => a.Id == ur.Id))
                {
                    ur.Id = Guid.NewGuid();
                }
            }

            if (!File.Exists(MyCharacter.FileName))
            {
                return(null);
            }

            var tempDir = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id.Value.ToString());

            if (!Directory.Exists(tempDir))
            {
                Directory.CreateDirectory(tempDir);
            }
            foreach (var file in Directory.GetFiles(tempDir))
            {
                FileInfo fi = new FileInfo(file);
                if (fi.LastWriteTimeUtc < MyCharacter.FileLastWriteTime)
                {
                    File.Delete(file);
                }
            }
            var summary = new frmCharacterRoster.CharacterCache(MyCharacter.FileName);

            MySINnerFile.MyExtendedAttributes.JsonSummary = JsonConvert.SerializeObject(summary);
            MySINnerFile.LastChange = MyCharacter.FileLastWriteTime;
            var tempfile = Path.Combine(tempDir, summary.FileName);

            if (File.Exists(tempfile))
            {
                File.Delete(tempfile);
            }

            MyCharacter.OnSaveCompleted -= Chummer.Plugins.PluginHandler.MyOnSaveUpload;
            MyCharacter.Save();
            MyCharacter.OnSaveCompleted += Chummer.Plugins.PluginHandler.MyOnSaveUpload;


            if (!File.Exists(tempfile))
            {
                File.Copy(MyCharacter.FileName, tempfile);
            }

            ;
            if (File.Exists(zipPath))
            {
                ZipFilePath = zipPath;
                FileInfo fi = new FileInfo(zipPath);
                if (fi.LastWriteTimeUtc < MyCharacter.FileLastWriteTime)
                {
                    File.Delete(zipPath);
                }
            }

            if (!File.Exists(zipPath))
            {
                ZipFile.CreateFromDirectory(tempDir, zipPath);
                ZipFilePath = zipPath;
            }

            return(zipPath);
        }
コード例 #7
0
        public CharacterExtended(Character character, string fileElement = null)
        {
            MyCharacter = character;
            if (PluginHandler.MyCharExtendedDic.ContainsKey(character.FileName))
            {
                throw new ArgumentException(
                          "CharacterExtended already exists for this char - dont create a new instantce!", nameof(character));
            }

            PluginHandler.MyCharExtendedDic.Add(character.FileName, this);

            _MySINnerFile = new SINner
            {
                MyExtendedAttributes = new SINnerExtended(),
                SiNnerMetaData       = new SINnerMetaData(),
                Language             = GlobalOptions.Language
            };
            if (string.IsNullOrEmpty(fileElement))
            {
                MySINnerFile.SiNnerMetaData = new SINnerMetaData
                {
                    Id         = Guid.NewGuid(),
                    Tags       = new List <Tag>(),
                    Visibility = new SINnerVisibility()
                };
            }
            else
            {
                try
                {
                    MySINnerFile.SiNnerMetaData = JsonConvert.DeserializeObject <SINnerMetaData>(fileElement);
                }
                catch (Exception e)
                {
                    System.Diagnostics.Trace.TraceWarning(e.ToString());
                }
            }

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

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

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

            var cache = new frmCharacterRoster.CharacterCache(character.FileName);

            this.MySINnerFile.LastChange = MyCharacter.FileLastWriteTime;

            if (MySINnerIds.TryGetValue(MyCharacter.Alias, out var singuid))
            {
                MySINnerFile.Id = singuid;
            }
            else
            {
                MySINnerFile.Id = Guid.NewGuid();
                MySINnerIds.Add(MyCharacter.Alias, MySINnerFile.Id.Value);
                MySINnerIds = MySINnerIds; //Save it!
            }
            this.MySINnerFile.MyExtendedAttributes.JsonSummary = JsonConvert.SerializeObject(cache);
        }
コード例 #8
0
        public string PrepareModel()
        {
            string zipPath = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id + ".chum5z");

            if (PluginHandler.MySINnerLoading != null)
            {
                if (MySINnerIds.ContainsKey(MyCharacter.Alias))
                {
                    MySINnerIds.Remove(MyCharacter.Alias);
                }
            }
            if (MySINnerIds.TryGetValue(MyCharacter.Alias, out var singuid))
            {
                MySINnerFile.Id = singuid;
            }
            else
            {
                if (PluginHandler.MySINnerLoading != null)
                {
                    _MySINnerFile = PluginHandler.MySINnerLoading;
                    MySINnerIds.Add(MyCharacter.Alias, MySINnerFile.Id.Value);
                    return(zipPath);
                }
                else
                {
                    MySINnerFile.Id = Guid.NewGuid();
                }
                MySINnerIds.Add(MyCharacter.Alias, MySINnerFile.Id.Value);
                MySINnerIds = MySINnerIds; //Save it!
            }
            zipPath = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id.Value + ".chum5z");
            MySINnerFile.UploadDateTime = DateTime.Now;



            MySINnerFile.Alias      = MyCharacter.CharacterName;
            MySINnerFile.LastChange = MyCharacter.FileLastWriteTime;
            if (MySINnerFile.SiNnerMetaData.Visibility?.UserRights == null)
            {
                MySINnerFile.SiNnerMetaData.Visibility =
                    new SINnerVisibility
                {
                    Id             = Guid.NewGuid(),
                    IsGroupVisible = SINnersOptions.SINnerVisibility.IsGroupVisible,
                    IsPublic       = SINnersOptions.SINnerVisibility.IsPublic,
                    UserRights     = SINnersOptions.SINnerVisibility.UserRights
                };
            }
            if (MySINnerFile.SiNnerMetaData.Visibility.Id == SINnersOptions.SINnerVisibility.Id)
            {
                //make the visibility your own and dont reuse the id from the general options!
                MySINnerFile.SiNnerMetaData.Visibility.Id = Guid.NewGuid();
            }
            foreach (var ur in MySINnerFile.SiNnerMetaData.Visibility.UserRights)
            {
                if (SINnersOptions.SINnerVisibility.UserRights.Any(a => a.Id == ur.Id))
                {
                    ur.Id = Guid.NewGuid();
                }
            }

            if (!File.Exists(MyCharacter.FileName))
            {
                return(null);
            }

            var tempDir = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id.Value.ToString());

            if (!Directory.Exists(tempDir))
            {
                Directory.CreateDirectory(tempDir);
            }
            foreach (var file in Directory.GetFiles(tempDir))
            {
                FileInfo fi = new FileInfo(file);
                if (fi.LastWriteTimeUtc < MyCharacter.FileLastWriteTime)
                {
                    File.Delete(file);
                }
            }

            var summary = new frmCharacterRoster.CharacterCache(MyCharacter.FileName);

            MySINnerFile.JsonSummary = JsonConvert.SerializeObject(summary);
            MySINnerFile.LastChange  = MyCharacter.FileLastWriteTime;
            var tempfile = Path.Combine(tempDir, summary.FileName);

            if (!File.Exists(tempfile))
            {
                File.Copy(MyCharacter.FileName, tempfile);
            }

            ;
            if (File.Exists(zipPath))
            {
                ZipFilePath = zipPath;
                FileInfo fi = new FileInfo(zipPath);
                if (fi.LastWriteTimeUtc < MyCharacter.FileLastWriteTime)
                {
                    File.Delete(zipPath);
                }
            }

            if (!File.Exists(zipPath))
            {
                ZipFile.CreateFromDirectory(tempDir, zipPath);
                ZipFilePath = zipPath;
            }

            return(zipPath);
        }
コード例 #9
0
        public CharacterExtended(Character character, string fileElement = null, SINner mySINnerLoading = null, frmCharacterRoster.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);
                    }
                }
            }
        }
コード例 #10
0
        public async Task <string> PrepareModel()
        {
            string zipPath = Path.Combine(Properties.Settings.Default.TempDownloadPath, "SINner", MySINnerFile.Id + ".chum5z");

            if (PluginHandler.MySINnerLoading != null)
            {
                if (MySINnerIds.ContainsKey(MyCharacter.FileName))
                {
                    MySINnerIds.Remove(MyCharacter.FileName);
                }
            }
            object sinidob = null;

            if (MyCharacterCache?.MyPluginDataDic?.TryGetValue("SINnerId", out sinidob) == true)
            {
                MySINnerFile.Id = (Guid)sinidob;
            }
            else if (MySINnerIds.TryGetValue(MyCharacter.FileName, out var singuid))
            {
                MySINnerFile.Id = singuid;
            }
            else
            {
                if (PluginHandler.MySINnerLoading != null)
                {
                    MySINnerFile = PluginHandler.MySINnerLoading;
                    MySINnerIds.Add(MyCharacter.FileName, MySINnerFile.Id.Value);
                    if (File.Exists(zipPath))
                    {
                        return(zipPath);
                    }
                }
                else
                {
                    if (String.IsNullOrEmpty(MySINnerFile.Alias))
                    {
                        MySINnerFile.Alias = MyCharacter.Alias;
                        if (String.IsNullOrEmpty(MySINnerFile.Alias))
                        {
                            MySINnerFile.Alias = MyCharacter.Name;
                        }
                    }
                    var client = StaticUtils.GetClient();
                    HttpOperationResponse <ResultSinnerGetOwnedSINByAlias> res = null;
                    try
                    {
                        res = await client.SinnerGetOwnedSINByAliasWithHttpMessagesAsync(MySINnerFile.Alias);
                    }
                    catch (SerializationException e)
                    {
                        e.Data.Add("Alias", MySINnerFile.Alias);
                        e.Data.Add("MySINnerFile.Id", MySINnerFile.Id);
                        e.Data.Add("User", ChummerHub.Client.Properties.Settings.Default.UserEmail);
                        e.Data.Add("ResponseContent", e.Content);
                        throw;
                    }
                    catch (Exception e)
                    {
                        e.Data.Add("Alias", MySINnerFile.Alias);
                        e.Data.Add("MySINnerFile.Id", MySINnerFile.Id);
                        e.Data.Add("User", ChummerHub.Client.Properties.Settings.Default.UserEmail);
                        throw;
                    }
                    if (res.Response.StatusCode == HttpStatusCode.NotFound)
                    {
                        MySINnerFile.Id = Guid.NewGuid();
                    }
                    else if (res.Response.StatusCode == HttpStatusCode.OK)
                    {
                        string message = MySINnerFile.Alias +
                                         " is already available online, but the current client uses a local version of that file." +
                                         Environment.NewLine + Environment.NewLine;
                        message += "Do you want to use only one version and update it through SINner?" +
                                   Environment.NewLine + Environment.NewLine;
                        message += "YES:\tuse the same (= only one) version and get" +
                                   Environment.NewLine;
                        message += "\tupdates on this client when you save" + Environment.NewLine;
                        message += "\tthe chummer on another client(recommended)" + Environment.NewLine
                                   + Environment.NewLine;
                        message +=
                            "NO:\tgenerate a new \"Fork\" of this character," +
                            Environment.NewLine;
                        message += "\tthat is not linked to the online one" + Environment.NewLine;
                        message +=
                            "\tand use this new version from now on," + Environment.NewLine;
                        message += "but only on this client (NOT recommended)."
                                   + Environment.NewLine + Environment.NewLine;
                        var result = PluginHandler.MainForm.ShowMessageBox(message, "SIN already found online", MessageBoxButtons.YesNoCancel,
                                                                           MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
                        if (result == DialogResult.Cancel)
                        {
                            throw new ArgumentException("User aborted perparation for upload!");
                        }
                        else if (result == DialogResult.No)
                        {
                            MySINnerFile.Id = Guid.NewGuid();
                        }
                        else
                        {
                            var list = res.Body.MySINners;
                            foreach (var sin in list)
                            {
                                if (sin.Id != null)
                                {
                                    MySINnerFile.Id = sin.Id;
                                    break;
                                }
                            }
                        }
                    }
                }

                if (MySINnerIds.ContainsKey(MyCharacter.FileName))
                {
                    MySINnerIds.Remove(MyCharacter.FileName);
                }
                MySINnerIds.Add(MyCharacter.FileName, MySINnerFile.Id.Value);
                MySINnerIds = MySINnerIds; //Save it!
            }
            zipPath = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id.Value + ".chum5z");
            MySINnerFile.UploadDateTime = DateTime.Now;



            MySINnerFile.Alias = MyCharacter.CharacterName;
            if (MySINnerFile.SiNnerMetaData.Visibility?.UserRights == null)
            {
                MySINnerFile.SiNnerMetaData.Visibility =
                    new SINners.Models.SINnerVisibility
                {
                    Id             = Guid.NewGuid(),
                    IsGroupVisible = ucSINnersOptions.SINnerVisibility.IsGroupVisible,
                    IsPublic       = ucSINnersOptions.SINnerVisibility.IsPublic,
                    UserRights     = ucSINnersOptions.SINnerVisibility.UserRights
                };
            }
            if (MySINnerFile.SiNnerMetaData.Visibility.Id == ucSINnersOptions.SINnerVisibility.Id)
            {
                //make the visibility your own and dont reuse the id from the general options!
                MySINnerFile.SiNnerMetaData.Visibility.Id = Guid.NewGuid();
            }
            foreach (var visnow in ucSINnersOptions.SINnerVisibility.UserRights)
            {
                if (!MySINnerFile.SiNnerMetaData.Visibility.UserRights.Any(a => a.EMail?.ToLowerInvariant() == visnow.EMail.ToLowerInvariant()))
                {
                    MySINnerFile.SiNnerMetaData.Visibility.UserRights.Add(visnow);
                }
            }

            foreach (var ur in MySINnerFile.SiNnerMetaData.Visibility.UserRights)
            {
                if (ucSINnersOptions.SINnerVisibility.UserRights.Any(a => a.Id == ur.Id))
                {
                    ur.Id = Guid.NewGuid();
                }
            }



            var tempDir = Path.Combine(Path.GetTempPath(), "SINner", MySINnerFile.Id.Value.ToString());

            if (!Directory.Exists(tempDir))
            {
                Directory.CreateDirectory(tempDir);
            }
            foreach (var file in Directory.GetFiles(tempDir))
            {
                FileInfo fi = new FileInfo(file);
                if (fi.LastWriteTimeUtc < MyCharacter.FileLastWriteTime)
                {
                    File.Delete(file);
                }
            }
            var summary = new frmCharacterRoster.CharacterCache(MyCharacter.FileName);

            if (String.IsNullOrEmpty(summary.FileName))
            {
                return(null);
            }
            var tempfile = Path.Combine(tempDir, summary.FileName);

            if (File.Exists(tempfile))
            {
                File.Delete(tempfile);
            }

            bool readCallback = false;

            if (MyCharacter.OnSaveCompleted != null)
            {
                readCallback = true;
                MyCharacter.OnSaveCompleted = null;
            }

            if (!File.Exists(MyCharacter.FileName))
            {
                string path2 = MyCharacter.FileName.Substring(0, MyCharacter.FileName.LastIndexOf('\\'));
                CreateDirectoryRecursively(path2);
                MyCharacter.Save(MyCharacter.FileName, false, false);
            }

            MyCharacter.Save(tempfile, false, false);
            MySINnerFile.LastChange = MyCharacter.FileLastWriteTime;
            if (readCallback)
            {
                MyCharacter.OnSaveCompleted += PluginHandler.MyOnSaveUpload;
            }

            if (File.Exists(zipPath))
            {
                try
                {
                    File.Delete(zipPath);
                }
                catch (IOException e)
                {
                    Log.Warn(e, "Could not delete File " + zipPath + ": " + e.Message);
                }
            }

            if (!File.Exists(zipPath))
            {
                ZipFile.CreateFromDirectory(tempDir, zipPath);
                ZipFilePath = zipPath;
            }

            return(zipPath);
        }
コード例 #11
0
        public CharacterExtended(Character character, string fileElement = null, frmCharacterRoster.CharacterCache myCharacterCache = null)
        {
            MyCharacter      = character;
            MyCharacterCache = myCharacterCache;
            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 SINners.Models.SINnerVisibility()
                    {
                        IsGroupVisible = true,
                        IsPublic       = true
                    }
                };
            }

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

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

            var cache = new frmCharacterRoster.CharacterCache(character.FileName);

            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!
            }
        }
コード例 #12
0
        public async Task <IEnumerable <TreeNode> > GetCharacterRosterTreeNode(frmCharacterRoster frmCharRoster, bool forceUpdate)
        {
            try
            {
                ContextMenuStrip myContextMenuStrip = null;
                List <TreeNode>  list = new List <TreeNode>();
                using (new CursorWait(true, frmCharRoster))
                {
                    frmCharRoster.DoThreadSafe(() =>
                    {
                        myContextMenuStrip = frmCharRoster.CreateContextMenuStrip();
                        var menulist       = myContextMenuStrip.Items.Cast <ToolStripMenuItem>().ToList();
                        foreach (var item in menulist)
                        {
                            switch (item.Name)
                            {
                            case "tsToggleFav":
                                myContextMenuStrip.Items.Remove(item);
                                break;

                            case "tsCloseOpenCharacter":
                                myContextMenuStrip.Items.Remove(item);
                                break;

                            case "tsSort":
                                myContextMenuStrip.Items.Remove(item);
                                break;

                            case "tsDelete":
                                ToolStripMenuItem newDelete = new ToolStripMenuItem(item.Text, item.Image);
                                newDelete.Click            += frmCharRoster.tsDelete_Click;
                                myContextMenuStrip.Items.Add(newDelete);
                                break;

                            default:
                                break;
                            }
                        }
                        ToolStripMenuItem newShare = new ToolStripMenuItem("Share")
                        {
                            Name  = "tsShareChummer",
                            Tag   = "Menu_ShareChummer",
                            Text  = "Share chummer",
                            Size  = new System.Drawing.Size(177, 22),
                            Image = global::Chummer.Properties.Resources.link_add
                        };
                        newShare.Click += NewShareOnClick;
                        myContextMenuStrip.Items.Add(newShare);
                        LanguageManager.TranslateWinForm(GlobalOptions.Language, myContextMenuStrip);
                    });
                    if (ChummerHub.Client.Properties.Settings.Default.UserModeRegistered == true)
                    {
                        Log.Info("Loading CharacterRoster from SINners...");
                        Func <Task <HttpOperationResponse <ResultAccountGetSinnersByAuthorization> > > myMethodName = async() =>
                        {
                            try
                            {
                                var client = StaticUtils.GetClient();
                                var ret    = await client.GetSINnersByAuthorizationWithHttpMessagesAsync();

                                return(ret);
                            }
                            catch (Exception e)
                            {
                                Log.Error(e);
                                throw;
                            }
                        };
                        var res = await ChummerHub.Client.Backend.Utils.GetCharacterRosterTreeNode(forceUpdate, myMethodName);

                        if (res == null)
                        {
                            throw new ArgumentException("Could not load owned SINners from WebService.");
                        }
                        list = res.ToList();
                    }
                    var myadd     = MyTreeNodes2Add.ToList();
                    var mysortadd = (from a in myadd orderby a.Value.Text select a).ToList();
                    foreach (var addme in mysortadd)
                    {
                        list.Add(addme.Value);
                    }
                    AddContextMenuStripRecursive(list, myContextMenuStrip);
                    return(list);
                }
            }
            catch (Microsoft.Rest.SerializationException e)
            {
                if (e.Content.Contains("Log in - ChummerHub"))
                {
                    TreeNode node = new TreeNode("Online, but not logged in!")
                    {
                        ToolTipText = "Please log in (Options -> Plugins -> Sinners (Cloud) -> Login", Tag = e
                    };
                    Log.Warn(e, "Online, but not logged in!");
                    return(new List <TreeNode>()
                    {
                        node
                    });
                }
                else
                {
                    Log.Error(e);
                    TreeNode node = new TreeNode("Error: " + e.Message)
                    {
                        ToolTipText = e.ToString(), Tag = e
                    };
                    return(new List <TreeNode>()
                    {
                        node
                    });
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
                TreeNode node = new TreeNode("SINners Error: please log in")
                {
                    ToolTipText = e.ToString(), Tag = e
                };
                var objCache = new frmCharacterRoster.CharacterCache
                {
                    ErrorText = e.ToString()
                };
                node.Tag = objCache;
                return(new List <TreeNode>()
                {
                    node
                });
            }
        }
コード例 #13
0
        private static CharacterExtended GetMyCe(Character input)
        {
            CharacterShared found = null;

            if (MainForm?.OpenCharacterForms != null)
            {
                foreach (CharacterShared a in (MainForm?.OpenCharacterForms))
                {
                    if (a?.CharacterObject != input)
                    {
                        continue;
                    }
                    found = a;
                    break;
                }
            }
            TabPage sinnertab = null;

            if (found != null)
            {
                TabControl.TabPageCollection myCollection = null;
                switch (found)
                {
                case frmCreate foundcreate:
                    myCollection = foundcreate.TabCharacterTabs.TabPages;
                    break;

                case frmCareer foundcareer:
                    myCollection = foundcareer.TabCharacterTabs.TabPages;
                    break;
                }

                if (myCollection == null)
                {
                    return(null);
                }

                foreach (TabPage tab in myCollection)
                {
                    if (tab.Name == "SINners")
                    {
                        sinnertab = tab;
                        break;
                    }
                }
            }

            CharacterExtended ce;

            frmCharacterRoster.CharacterCache myCharacterCache = new frmCharacterRoster.CharacterCache(input?.FileName);
            if (sinnertab == null)
            {
                ce = new CharacterExtended(input, null, null, myCharacterCache);
            }
            else
            {
                ucSINnersUserControl myUcSIN = null;
                foreach (ucSINnersUserControl ucSIN in sinnertab.Controls)
                {
                    myUcSIN = ucSIN;
                    break;
                }

                ce = myUcSIN == null ? new CharacterExtended(input, null, null, myCharacterCache) : myUcSIN.MyCE;
            }
            return(ce);
        }
コード例 #14
0
        public CharacterExtended(Character character, string fileElement = null, SINner mySINnerLoading = null, frmCharacterRoster.CharacterCache myCharacterCache = null) : this(character, fileElement, myCharacterCache)
        {
            if (mySINnerLoading != null)
            {
                var backup = this._MySINnerFile;
                this._MySINnerFile = mySINnerLoading;
                if ((this._MySINnerFile?.SiNnerMetaData?.Id == null) ||
                    (this._MySINnerFile.SiNnerMetaData?.Id == Guid.Empty))
                {
                    if (this._MySINnerFile?.SiNnerMetaData != null)
                    {
                        this._MySINnerFile.SiNnerMetaData.Id = backup.SiNnerMetaData.Id;
                    }
                }

                if (this._MySINnerFile?.SiNnerMetaData?.Tags?.Count() < backup?.SiNnerMetaData?.Tags?.Count())
                {
                    this._MySINnerFile.SiNnerMetaData.Tags = backup.SiNnerMetaData.Tags;
                }
            }
        }