예제 #1
0
        string IPlugin.GetSaveToFileElement(Character input)
        {
            CharacterExtended ce;

            if (MyCharExtendedDic.ContainsKey(input.FileName))
            {
                if (!MyCharExtendedDic.TryGetValue(input.FileName, out ce))
                {
                    throw new ArgumentException("Could not load char from Dic!", nameof(input));
                }
            }
            else
            {
                ce = new CharacterExtended(input, null);
            }

            if ((SINnersOptions.UploadOnSave == true) && (IsSaving == false))
            {
                IsSaving = true;
                //removing a handler that is not registered is legal - that way only one handler is registered EVER!
                try
                {
                    input.OnSaveCompleted -= MyOnSaveUpload;
                }
                catch (Exception e)
                {
                    System.Diagnostics.Trace.TraceInformation(e.ToString());
                }
                input.OnSaveCompleted += MyOnSaveUpload;
            }
            return(JsonConvert.SerializeObject(ce.MySINnerFile.SiNnerMetaData));
        }
예제 #2
0
        private async void MyOnSaveUpload(object sender, Character input)
        {
            try
            {
                input.OnSaveCompleted -= MyOnSaveUpload;
                CharacterExtended ce = new CharacterExtended(input, null);
                var found            = await StaticUtils.Client.GetByIdWithHttpMessagesAsync(ce.MySINnerFile.Id.Value);

                if (found.Response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    var sinjson = await found.Response.Content.ReadAsStringAsync();

                    var    foundobj = Newtonsoft.Json.JsonConvert.DeserializeObject <SINner>(sinjson);
                    SINner foundsin = foundobj as SINner;
                    if (foundsin.LastChange >= ce.MyCharacter.FileLastWriteTime)
                    {
                        //is already up to date!
                        return;
                    }
                }
                ce.MySINnerFile.SiNnerMetaData.Tags = ce.PopulateTags();
                ce.PrepareModel();
                await ChummerHub.Client.Backend.Utils.PostSINnerAsync(ce);

                await ChummerHub.Client.Backend.Utils.UploadChummerFileAsync(ce);
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.TraceError(e.ToString());
            }
            finally
            {
                IsSaving = false;
            }
        }
예제 #3
0
        public CharacterExtended SetCharacterFrom(CharacterShared mySINner)
        {
            InitializeComponent();
            _mySINner = mySINner;
            MyCE      = new CharacterExtended(mySINner.CharacterObject, null, PluginHandler.MySINnerLoading);
            MyCE.MySINnerFile.SiNnerMetaData.Tags = MyCE.PopulateTags();
            MyCE.ZipFilePath = MyCE.PrepareModel();
            TabSINnersBasic  = new SINnersBasic(this)
            {
                Visible = true
            };
            TabSINnersAdvanced = new SINnersAdvanced(this);
#if DEBUG
            TabSINnersAdvanced.Visible = true;
#else
            TabSINnersAdvanced.Visible = false;
#endif



            this.tabPageBasic.Controls.Add(TabSINnersBasic);
            this.tabPageAdvanced.Controls.Add(TabSINnersAdvanced);

            this.AutoSize = true;

            return(MyCE);
        }
예제 #4
0
 public frmSINnerGroupSearch(CharacterExtended ce, ucSINnersBasic parentBasic)
 {
     MyCE         = ce;
     MyParentForm = parentBasic;
     InitializeComponent();
     this.siNnerGroupSearch1.MyCE         = ce;
     this.siNnerGroupSearch1.MyParentForm = this;
 }
예제 #5
0
        private static CharacterExtended GetMyCe(Character input)
        {
            CharacterExtended ce = null;
            var found            = (from a in MainForm.OpenCharacterForms where a.CharacterObject == input select a)
                                   .FirstOrDefault();

            if (found == null)
            {
                return(ce);
            }

            TabPage sinnertab = null;

            TabControl.TabPageCollection myCollection = null;
            if (found is frmCreate foundcreate)
            {
                myCollection = foundcreate.TabCharacterTabs.TabPages;
            }

            if (found is frmCareer foundcareer)
            {
                myCollection = foundcareer.TabCharacterTabs.TabPages;
            }

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

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

            if (sinnertab == null)
            {
                return(ce);
            }
            ucSINnersUserControl myUcSIN = null;

            foreach (ucSINnersUserControl ucSIN in sinnertab.Controls)
            {
                myUcSIN = ucSIN;
                break;
            }

            if (myUcSIN == null)
            {
                return(ce);
            }

            ce = myUcSIN.MyCE;
            return(ce);
        }
예제 #6
0
        void IPlugin.LoadFileElement(Character input, string fileElement)
        {
            CharacterExtended ce;

            if (MyCharExtendedDic.TryGetValue(input.FileName, out ce))
            {
                ce.MyCharacter = input;
            }
            else
            {
                ce = new CharacterExtended(input, fileElement);
            }
        }
예제 #7
0
        public static async Task <HttpOperationResponse> PostSINnerAsync(CharacterExtended ce)
        {
            HttpOperationResponse res = null;

            try
            {
                UploadInfoObject uploadInfoObject = new UploadInfoObject();
                uploadInfoObject.Client         = PluginHandler.MyUploadClient;
                uploadInfoObject.UploadDateTime = DateTime.Now;
                ce.MySINnerFile.UploadDateTime  = DateTime.Now;
                uploadInfoObject.SiNners        = new List <SINner>()
                {
                    ce.MySINnerFile
                };
                System.Diagnostics.Trace.TraceInformation("Posting " + ce.MySINnerFile.Id + "...");
                var client = await StaticUtils.GetClient();

                if (!StaticUtils.IsUnitTest)
                {
                    res = await client.PostSINWithHttpMessagesAsync(uploadInfoObject);

                    if ((res.Response.StatusCode != HttpStatusCode.OK) &&
                        (res.Response.StatusCode != HttpStatusCode.Accepted) &&
                        (res.Response.StatusCode != HttpStatusCode.Created))
                    {
                        var msg = "Post of " + ce.MyCharacter.Alias + " completed with StatusCode: " + res?.Response?.StatusCode;
                        msg += Environment.NewLine + "Reason: " + res?.Response?.ReasonPhrase;
                        var content = await res.Response.Content.ReadAsStringAsync();

                        msg += Environment.NewLine + "Content: " + content;
                        System.Diagnostics.Trace.TraceWarning(msg);
                        PluginHandler.MainForm.DoThreadSafe(() =>
                        {
                            MessageBox.Show(msg);
                        });
                        throw new ArgumentException(msg);
                    }
                }
                else
                {
                    client.PostSINWithHttpMessagesAsync(uploadInfoObject).RunSynchronously();
                }
                System.Diagnostics.Trace.TraceInformation("Post of " + ce.MySINnerFile.Id + " finished.");
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.TraceError(ex.ToString());
                throw;
            }
            return(res);
        }
예제 #8
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).");
        }
예제 #9
0
        public async static void MyOnSaveUpload(object sender, Character input)
        {
            try
            {
                input.OnSaveCompleted -= MyOnSaveUpload;
                CharacterExtended ce = new CharacterExtended(input, null);
                await ce.Upload();

                var found = (from a in MainForm.OpenCharacterForms where a.CharacterObject == input select a)
                            .FirstOrDefault();
                if (found == null)
                {
                    return;
                }
                TabPage tabPage = null;
                if ((found is frmCreate frm) && (frm.TabCharacterTabs.TabPages.ContainsKey("SINners")))
                {
                    var index = frm.TabCharacterTabs.TabPages.IndexOfKey("SINners");
                    tabPage = frm.TabCharacterTabs.TabPages[index];
                }

                if ((found is frmCareer frm2) && (frm2.TabCharacterTabs.TabPages.ContainsKey("SINners")))
                {
                    var index = frm2.TabCharacterTabs.TabPages.IndexOfKey("SINners");
                    tabPage = frm2.TabCharacterTabs.TabPages[index];
                }

                if (tabPage == null)
                {
                    return;
                }
                var ucseq = tabPage.Controls.Find("SINnersBasic", true);
                foreach (var uc in ucseq)
                {
                    var sb = uc as SINnersBasic;
                    if (sb != null)
                    {
                        await sb?.CheckSINnerStatus();
                    }
                }
                var ucseq2 = tabPage.Controls.Find("SINnersAdvanced", true);
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.TraceError(e.ToString());
            }
            finally
            {
                IsSaving = false;
            }
        }
예제 #10
0
        void IPlugin.LoadFileElement(Character input, string fileElement)
        {
            try
            {
                CharacterExtended ce;
                ce = new CharacterExtended(input, fileElement, PluginHandler.MySINnerLoading);
            }
            catch (Exception e)
            {
                Log.Error(e);
#if DEBUG
                throw;
#endif
            }
        }
예제 #11
0
 public frmSINnerGroupSearch(CharacterExtended ce, ucSINnersBasic parentBasic)
 {
     MyCE         = ce;
     MyParentForm = parentBasic;
     InitializeComponent();
     siNnerGroupSearch1.MyCE         = ce;
     siNnerGroupSearch1.MyParentForm = this;
     VisibleChanged += (sender, args) =>
     {
         if (Visible)
         {
             ReallyCenterToScreen();
         }
     };
 }
예제 #12
0
        void IPlugin.LoadFileElement(Character input, string fileElement)
        {
            try
            {
                CharacterExtended ce;
                ce = new CharacterExtended(input, fileElement, PluginHandler.MySINnerLoading);
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.TraceError(e.ToString());
                Console.Write(e.ToString());
#if DEBUG
                throw;
#endif
            }
        }
예제 #13
0
        public CharacterExtended SetCharacterFrom(CharacterShared mySINner)
        {
            _mySINner                  = mySINner;
            TabSINnersBasic            = new SINnersBasic(this);
            TabSINnersBasic.Visible    = true;
            TabSINnersAdvanced         = new SINnersAdvanced(this);
            TabSINnersAdvanced.Visible = true;
            MyCE = new CharacterExtended(mySINner.CharacterObject, null);
            MyCE.MySINnerFile.SiNnerMetaData.Tags = MyCE.PopulateTags();
            MyCE.ZipFilePath = MyCE.PrepareModel();
            InitializeComponent();
            this.tabPageBasic.Controls.Add(TabSINnersBasic);
            this.tabPageAdvanced.Controls.Add(TabSINnersAdvanced);

            this.AutoSize = true;

            return(MyCE);
        }
예제 #14
0
        string IPlugin.GetSaveToFileElement(Character input)
        {
            CharacterExtended ce;

            if (MyCharExtendedDic.ContainsKey(input.FileName))
            {
                MyCharExtendedDic.Remove(input.FileName);
            }
            ce = new CharacterExtended(input, null);
            MyCharExtendedDic.Add(ce.MyCharacter.FileName, ce);
            if ((SINnersOptions.UploadOnSave == true) && (IsSaving == false))
            {
                IsSaving = true;
                //removing a handler that is not registered is legal - that way only one handler is registered EVER!
                input.OnSaveCompleted -= MyOnSaveUpload;
                input.OnSaveCompleted += MyOnSaveUpload;
            }
            return(JsonConvert.SerializeObject(ce.MySINnerFile.SiNnerMetaData));
        }
예제 #15
0
        public CharacterExtended SetCharacterFrom(CharacterShared mySINner)
        {
            InitializeComponent();
            _mySINner = mySINner;
            if (PluginHandler.MyCharExtendedDic.ContainsKey(mySINner.CharacterObject.FileName))
            {
                CharacterExtended outce;
                if (!PluginHandler.MyCharExtendedDic.TryGetValue(mySINner.CharacterObject.FileName, out outce))
                {
                    throw new ArgumentException("Could not get character from MyCharExtendedDic", nameof(mySINner));
                }

                MyCE = outce;
            }
            else
            {
                MyCE             = new CharacterExtended(mySINner.CharacterObject, null, PluginHandler.MySINnerLoading);
                MyCE.ZipFilePath = MyCE.PrepareModel();
            }
            MyCE.MySINnerFile.SiNnerMetaData.Tags = MyCE.PopulateTags();

            TabSINnersBasic = new SINnersBasic(this)
            {
                Visible = true
            };
            TabSINnersAdvanced = new SINnersAdvanced(this);
#if DEBUG
            TabSINnersAdvanced.Visible = true;
#else
            TabSINnersAdvanced.Visible = false;
#endif



            this.tabPageBasic.Controls.Add(TabSINnersBasic);
            this.tabPageAdvanced.Controls.Add(TabSINnersAdvanced);

            this.AutoSize = true;

            return(MyCE);
        }
예제 #16
0
        string IPlugin.GetSaveToFileElement(Character input)
        {
            CharacterExtended ce = GetMyCe(input);

            //ce = new CharacterExtended(input, null);
            if ((ucSINnersOptions.UploadOnSave == true) && (IsSaving == false))
            {
                IsSaving = true;
                //removing a handler that is not registered is legal - that way only one handler is registered EVER!
                try
                {
                    input.OnSaveCompleted -= MyOnSaveUpload;
                }
                catch (Exception e)
                {
                    System.Diagnostics.Trace.TraceInformation(e.ToString());
                }
                input.OnSaveCompleted += MyOnSaveUpload;
            }
            return(JsonConvert.SerializeObject(ce.MySINnerFile));
        }
예제 #17
0
        private 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
                {
                    Debug.WriteLine("Loading: " + file);
                    var c = new Character {
                        FileName = file
                    };
                    if (!c.Load())
                    {
                        continue;
                    }
                    Debug.WriteLine("Character loaded: " + c.Name);
                    CharacterExtended ce = new CharacterExtended(c, null);
                    ce.UploadInBackground();
                }
                catch (Exception ex)
                {
                    string msg = "Exception while loading " + file + ":";
                    msg += Environment.NewLine + ex.ToString();
                    Debug.Write(msg);
                    System.Diagnostics.Trace.TraceWarning(msg);
                    throw;
                }
            }
        }
예제 #18
0
        string IPlugin.GetSaveToFileElement(Character input)
        {
            CharacterExtended ce = GetMyCe(input);

            var jsonResolver = new PropertyRenameAndIgnoreSerializerContractResolver();
            //jsonResolver.IgnoreProperty(typeof(String), "MugshotBase64");
            //jsonResolver.IgnoreProperty(typeof(SINnerExtended), "jsonSummary");
            //jsonResolver.RenameProperty(typeof(Person), "FirstName", "firstName");
            JsonSerializerSettings settings = new JsonSerializerSettings
            {
                ContractResolver = jsonResolver,
            };
            //remove the reflection tag - no need to save it
            Tag    refTag   = null;
            string returnme = null;

            if (ce?.MySINnerFile?.SiNnerMetaData?.Tags != null)
            {
                var reflectionseq =
                    (from a in ce.MySINnerFile.SiNnerMetaData.Tags where a != null && a.TagName == "Reflection" select a);
                if (reflectionseq?.Any() == true)
                {
                    refTag = reflectionseq.FirstOrDefault();
                    ce.MySINnerFile.SiNnerMetaData.Tags.Remove(refTag);
                }
                returnme = JsonConvert.SerializeObject(ce.MySINnerFile, Formatting.Indented, settings);
                ce.MySINnerFile.SiNnerMetaData.Tags.Add(refTag);
                return(returnme);
            }
            else
            {
                if (ce != null)
                {
                    returnme = JsonConvert.SerializeObject(ce.MySINnerFile, Formatting.Indented, settings);
                }
            }

            return(returnme);
        }
예제 #19
0
        public async Task <CharacterExtended> SetCharacterFrom(CharacterShared mySINner)
        {
            InitializeComponent();
            _mySINner = mySINner;
            //if (PluginHandler.MyCharExtendedDic.ContainsKey(mySINner.CharacterObject.FileName))
            //{
            //    CharacterExtended outce;
            //    if (!PluginHandler.MyCharExtendedDic.TryGetValue(mySINner.CharacterObject.FileName, out outce))
            //    {
            //        throw new ArgumentException("Could not get character from MyCharExtendedDic", nameof(mySINner));
            //    }

            //    MyCE = outce;
            //}
            //else
            //{
            MyCE             = new CharacterExtended(mySINner.CharacterObject, null, PluginHandler.MySINnerLoading);
            MyCE.ZipFilePath = await MyCE.PrepareModel();

            //}
            MyCE.MySINnerFile.SiNnerMetaData.Tags = MyCE.PopulateTags();

            TabSINnersBasic = new ucSINnersBasic(this)
            {
                Visible = true
            };
            TabSINnersAdvanced = new ucSINnersAdvanced(this)
            {
                Visible = true
            };


            this.tabPageBasic.Controls.Add(TabSINnersBasic);
            this.tabPageAdvanced.Controls.Add(TabSINnersAdvanced);

            this.AutoSize = true;

            return(MyCE);
        }
예제 #20
0
        public async Task <CharacterExtended> SetCharacterFrom(CharacterShared mySINner)
        {
            InitializeComponent();
            _mySINner        = mySINner;
            MyCE             = new CharacterExtended(mySINner.CharacterObject, null, PluginHandler.MySINnerLoading);
            MyCE.ZipFilePath = await MyCE.PrepareModel();

            MyCE.MySINnerFile.SiNnerMetaData.Tags = MyCE.PopulateTags();

            TabSINnersBasic = new ucSINnersBasic(this)
            {
                Visible = true
            };
            TabSINnersAdvanced = new ucSINnersAdvanced(this)
            {
                Visible = true
            };


            this.tabPageBasic.Controls.Add(TabSINnersBasic);
            this.tabPageAdvanced.Controls.Add(TabSINnersAdvanced);

            this.AutoSize = true;

            if ((ucSINnersOptions.UploadOnSave == true))
            {
                try
                {
                    mySINner.CharacterObject.OnSaveCompleted  = null;
                    mySINner.CharacterObject.OnSaveCompleted += PluginHandler.MyOnSaveUpload;
                }
                catch (Exception e)
                {
                    System.Diagnostics.Trace.TraceInformation(e.ToString());
                }
            }
            return(MyCE);
        }
예제 #21
0
        public async Task <CharacterExtended> SetCharacterFrom(CharacterShared mySINner)
        {
            InitializeComponent();
            _mySINner        = mySINner ?? throw new ArgumentNullException(nameof(mySINner));
            MyCE             = new CharacterExtended(mySINner.CharacterObject, PluginHandler.MySINnerLoading);
            MyCE.ZipFilePath = await MyCE.PrepareModelAsync();

            TabSINnersBasic = new ucSINnersBasic(this)
            {
                Visible = true
            };
            TabSINnersAdvanced = new ucSINnersAdvanced(this)
            {
                Visible = true
            };


            tabPageBasic.Controls.Add(TabSINnersBasic);
            tabPageAdvanced.Controls.Add(TabSINnersAdvanced);
            AutoSize = true;

            if (ucSINnersOptions.UploadOnSave)
            {
                try
                {
                    if (await mySINner.CharacterObject.DoOnSaveCompletedAsync.RemoveAsync(PluginHandler.MyOnSaveUpload))
                    {
                        await mySINner.CharacterObject.DoOnSaveCompletedAsync.AddAsync(PluginHandler.MyOnSaveUpload);
                    }
                }
                catch (Exception e)
                {
                    Log.Warn(e);
                }
            }
            //MyCE.MySINnerFile.SiNnerMetaData.Tags = MyCE.PopulateTags();
            return(MyCE);
        }
예제 #22
0
        void IPlugin.LoadFileElement(Character input, string fileElement)
        {
            try
            {
                CharacterExtended ce;
                if (MyCharExtendedDic.TryGetValue(input.FileName, out ce))
                {
                    ce.MyCharacter = input;
                }
                else
                {
                    ce = new CharacterExtended(input, fileElement, PluginHandler.MySINnerLoading);
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.TraceError(e.ToString());
                Console.Write(e.ToString());
#if DEBUG
                throw;
#endif
            }
        }
예제 #23
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;
                }
            }

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

            TabPage sinnertab = 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;

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

                ce = myUcSIN == null ? new CharacterExtended(input, null) : myUcSIN.MyCE;
            }
            return(ce);
        }
예제 #24
0
 public ucSINnersSearch()
 {
     MySearchCharacter = new CharacterExtended(new Character(), null, null, new frmCharacterRoster.CharacterCache());
     InitializeComponent();
 }
예제 #25
0
        private async Task <SINSearchGroupResult> JoinGroupTask(SINnerSearchGroup searchgroup, CharacterExtended myCE)
        {
            bool exceptionlogged      = false;
            SINSearchGroupResult ssgr = null;

            try
            {
                DialogResult       result    = DialogResult.Cancel;
                frmSINnerGroupEdit groupEdit = null;
                if (searchgroup.HasPassword == true)
                {
                    SINnerGroup joinGroup = new SINnerGroup(searchgroup);
                    PluginHandler.MainForm.DoThreadSafe(() =>
                    {
                        groupEdit = new frmSINnerGroupEdit(joinGroup, true);
                        result    = groupEdit.ShowDialog(this);
                    });
                }

                if ((result == DialogResult.OK) || (searchgroup.HasPassword == false))
                {
                    try
                    {
                        using (new CursorWait(true, this))
                        {
                            var client   = StaticUtils.GetClient();
                            var response =
                                await client.PutSINerInGroupWithHttpMessagesAsync(searchgroup.Id, myCE.MySINnerFile.Id,
                                                                                  groupEdit?.MySINnerGroupCreate?.MyGroup?.PasswordHash);

                            if ((response.Response.StatusCode != HttpStatusCode.OK))
                            {
                                var rescontent = await response.Response.Content.ReadAsStringAsync();

                                if (response.Response.StatusCode == HttpStatusCode.BadRequest)
                                {
                                    if (rescontent.Contains("PW is wrong!"))
                                    {
                                        throw new ArgumentException("Wrong Password provided!");
                                    }

                                    string searchfor = "NoUserRightException\",\"Message\":\"";
                                    if (rescontent.Contains(searchfor))
                                    {
                                        string msg =
                                            rescontent.Substring(rescontent.IndexOf(searchfor) + searchfor.Length);
                                        msg = msg.Substring(0, msg.IndexOf("\""));
                                        throw new ArgumentException(msg);
                                    }

                                    throw new ArgumentException(rescontent);
                                }
                                else
                                {
                                    string msg = "StatusCode: " + response.Response.StatusCode + Environment.NewLine;
                                    msg += rescontent;
                                    throw new ArgumentException(msg);
                                }
                            }
                            else
                            {
                                var found = await client.GetGroupByIdWithHttpMessagesAsync(searchgroup.Id, null,
                                                                                           CancellationToken.None);

                                var res = Backend.Utils.HandleError(found);
                                if (found?.Response?.IsSuccessStatusCode == true)
                                {
                                    ssgr = new SINSearchGroupResult(found.Body.MyGroup);
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Error(e);
                        exceptionlogged = true;
                        throw;
                    }
                    finally
                    {
                        MyParentForm?.MyParentForm?.CheckSINnerStatus();
                    }
                }
            }
            catch (Exception e)
            {
                if (!exceptionlogged)
                {
                    Log.Error(e);
                }

                throw;
            }


            return(ssgr);
        }
예제 #26
0
        public static async Task <HttpOperationResponse> UploadChummerFileAsync(CharacterExtended ce)
        {
            HttpOperationResponse res = null;

            try
            {
                if (String.IsNullOrEmpty(ce.ZipFilePath))
                {
                    ce.ZipFilePath = await ce.PrepareModel();
                }

                using (FileStream fs = new FileStream(ce.ZipFilePath, FileMode.Open, FileAccess.Read))
                {
                    try
                    {
                        var client = await StaticUtils.GetClient();

                        if (!StaticUtils.IsUnitTest)
                        {
                            HttpStatusCode myStatus = HttpStatusCode.Unused;
                            res = await client.PutSINWithHttpMessagesAsync(ce.MySINnerFile.Id.Value, fs);

                            //var task = res.ContinueWith((sender) =>
                            //{

                            string msg = "Upload ended with statuscode: ";
                            msg += res?.Response?.StatusCode + Environment.NewLine;
                            msg += res?.Response?.ReasonPhrase;
                            msg += Environment.NewLine + res?.Response?.Content.ReadAsStringAsync().Result;
                            System.Diagnostics.Trace.TraceInformation(msg);
                            myStatus = res.Response.StatusCode;
                            if (!StaticUtils.IsUnitTest)
                            {
                                PluginHandler.MainForm.DoThreadSafe(() =>
                                {
                                    if (myStatus != HttpStatusCode.OK)
                                    {
                                        MessageBox.Show(msg);
                                    }
                                    using (new CursorWait(true, PluginHandler.MainForm))
                                    {
                                        Chummer.Plugins.PluginHandler.MainForm.CharacterRoster.LoadCharacters(false, false, false, true);
                                    }
                                });
                            }
                            else
                            {
                                System.Diagnostics.Trace.TraceInformation(msg);
                            }
                            //});
                        }
                        else
                        {
                            client.PutSIN(ce.MySINnerFile.Id.Value, fs);
                        }
                    }
                    catch (Exception e)
                    {
                        System.Diagnostics.Trace.TraceError(e.ToString());
                        PluginHandler.MainForm.DoThreadSafe(() =>
                        {
                            MessageBox.Show(e.Message);
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.TraceError(ex.ToString());
                throw;
            }
            return(res);
        }
예제 #27
0
        private async Task <MyUserState> ShareSingleChummer()
        {
            string hash = "";

            try
            {
                using (var op_shareChummer = Timekeeper.StartSyncron("Share Chummer", null,
                                                                     CustomActivity.OperationType.DependencyOperation, MyCharacterCache?.FilePath))
                {
                    MyUserState       myState = new MyUserState(this);
                    CharacterExtended ce      = null;
                    var    client             = StaticUtils.GetClient();
                    string sinnerid           = "";
                    Guid   SINid = Guid.Empty;

                    async Task <CharacterExtended> GetCharacterExtended(CustomActivity parentActivity)
                    {
                        using (var op_prepChummer = Timekeeper.StartSyncron("Loading Chummerfile", parentActivity,
                                                                            CustomActivity.OperationType.DependencyOperation, MyCharacterCache?.FilePath))
                        {
                            Character c = new Character()
                            {
                                FileName = MyCharacterCache.FilePath
                            };
                            var foundchar = (from a in PluginHandler.MainForm.OpenCharacters
                                             where a.FileName == MyCharacterCache.FilePath
                                             select a).ToList();
                            if (foundchar?.Any() == true)
                            {
                                c = foundchar?.FirstOrDefault();
                            }
                            else
                            {
                                using (frmLoading frmLoadingForm = new frmLoading
                                {
                                    CharacterFile = MyCharacterCache.FilePath
                                })
                                {
                                    frmLoadingForm.Reset(36);
                                    frmLoadingForm.TopMost = true;
                                    frmLoadingForm.Show();
                                    myState.StatusText       = "Loading chummer file...";
                                    myState.CurrentProgress += 10;
                                    ReportProgress(myState.CurrentProgress, myState);
                                    await c.Load(frmLoadingForm, false).ConfigureAwait(true);
                                }
                            }

                            if (c == null)
                            {
                                throw new ArgumentNullException("Could not load Character file " +
                                                                MyCharacterCache.FilePath +
                                                                ".");
                            }
                            ce = new CharacterExtended(c, null, null, MyCharacterCache);
                            if (ce?.MySINnerFile?.Id != null)
                            {
                                sinnerid = ce.MySINnerFile.Id.ToString();
                            }
                            hash = ce?.MySINnerFile?.MyHash;
                            return(ce);
                        }
                    }


                    if (MyCharacterCache.MyPluginDataDic.TryGetValue("SINnerId", out Object sinneridobj))
                    {
                        sinnerid = sinneridobj?.ToString();
                    }
                    else
                    {
                        ce = await GetCharacterExtended(op_shareChummer).ConfigureAwait(true);

                        sinnerid = ce.MySINnerFile.Id.ToString();
                        hash     = ce?.MySINnerFile?.MyHash;
                    }


                    if (string.IsNullOrEmpty(sinnerid) || !Guid.TryParse(sinnerid, out SINid))
                    {
                        myState.StatusText = "SINner Id is unknown or not issued!";
                        ReportProgress(30, myState);
                    }
                    else
                    {
                        myState.StatusText      = "SINner Id is " + SINid + ".";
                        myState.CurrentProgress = 30;
                        ReportProgress(myState.CurrentProgress, myState);
                    }


                    HttpOperationResponse <ResultSinnerGetSINById> checkresult = null;
                    //check if char is already online and updated
                    using (var op_checkOnlineVersionChummer = Timekeeper.StartSyncron(
                               "check if online", op_shareChummer,
                               CustomActivity.OperationType.DependencyOperation, MyCharacterCache?.FilePath))
                    {
                        checkresult = await client.GetSINByIdWithHttpMessagesAsync(SINid).ConfigureAwait(true);

                        if (checkresult == null)
                        {
                            throw new ArgumentException("Could not parse result from SINners Webservice!");
                        }
                        if (checkresult.Response.StatusCode != HttpStatusCode.NotFound)
                        {
                            if (checkresult.Body.CallSuccess != true)
                            {
                                if (checkresult.Body.MyException is Exception myException)
                                {
                                    throw new ArgumentException(
                                              "Error from SINners Webservice: " + checkresult.Body.ErrorText,
                                              myException);
                                }
                                throw new ArgumentException("Error from SINners Webservice: " +
                                                            checkresult.Body.ErrorText);
                            }
                            hash = checkresult.Body.MySINner.MyHash;
                        }
                    }


                    var lastWriteTimeUtc = System.IO.File.GetLastWriteTimeUtc(MyCharacterCache.FilePath);
                    if (checkresult.Response.StatusCode == HttpStatusCode.NotFound ||
                        checkresult.Body.MySINner.LastChange < lastWriteTimeUtc)
                    {
                        if (ce == null)
                        {
                            myState.StatusText      = "The Chummer is newer and has to be uploaded again.";
                            myState.CurrentProgress = 30;
                            ReportProgress(myState.CurrentProgress, myState);
                            ce = await GetCharacterExtended(op_shareChummer).ConfigureAwait(true);
                        }

                        using (var op_uploadChummer = Timekeeper.StartSyncron(
                                   "Uploading Chummer", op_shareChummer,
                                   CustomActivity.OperationType.DependencyOperation, MyCharacterCache?.FilePath))
                        {
                            myState.StatusText      = "Checking SINner availability (and if necessary upload it).";
                            myState.CurrentProgress = 35;
                            ReportProgress(myState.CurrentProgress, myState);
                            myState.ProgressSteps = 10;
                            var uploadtask = await ce.Upload(myState, op_uploadChummer).ConfigureAwait(true);

                            SINid = ce.MySINnerFile.Id.Value;
                            var result = await client.GetSINByIdWithHttpMessagesAsync(SINid).ConfigureAwait(true);

                            if (result == null)
                            {
                                throw new ArgumentException("Could not parse result from SINners Webservice!");
                            }
                            if (result.Body?.CallSuccess != true)
                            {
                                if (result.Body?.MyException is Exception myException)
                                {
                                    throw new ArgumentException(
                                              "Error from SINners Webservice: " + result.Body?.ErrorText,
                                              myException);
                                }
                                throw new ArgumentException(
                                          "Error from SINners Webservice: " + result.Body?.ErrorText);
                            }
                            hash = result.Body.MySINner.MyHash;
                        }
                    }

                    myState.StatusText      = "SINner is online available.";
                    myState.CurrentProgress = 90;
                    ReportProgress(myState.CurrentProgress, myState);

                    string url = client.BaseUri + "O";
                    url += "/" + hash;
                    if (Properties.Settings.Default.OpenChummerFromSharedLinks == true)
                    {
                        url += "?open=true";
                    }

                    myState.LinkText = url;
                    ReportProgress(100, myState);
                    RunWorkerCompleted(myState);
                    return(myState);
                }
            }
            catch (Exception exception)
            {
                Log.Warn(exception);
                throw;
            }
        }
예제 #28
0
 public ucSINnersSearch()
 {
     MySearchCharacter = new CharacterExtended(new Character(), null);
     InitializeComponent();
 }
예제 #29
0
        public async static void MyOnSaveUpload(object sender, Character input)
        {
            try
            {
                input.OnSaveCompleted -= MyOnSaveUpload;
                using (new CursorWait(true, MainForm))
                {
                    CharacterExtended ce;
                    if (MyCharExtendedDic.ContainsKey(input.FileName))
                    {
                        MyCharExtendedDic.TryGetValue(input.FileName, out ce);
                    }
                    else
                    {
                        ce = new CharacterExtended(input, null);
                        MyCharExtendedDic.Add(input.FileName, ce);
                    }

                    if (!ce.MySINnerFile.SiNnerMetaData.Tags.Any(a => a.TagName == "Reflection"))
                    {
                        ce.MySINnerFile.SiNnerMetaData.Tags = ce.PopulateTags();
                    }

                    await ce.Upload();

                    var found = (from a in MainForm.OpenCharacterForms where a.CharacterObject == input select a)
                                .FirstOrDefault();
                    if (found == null)
                    {
                        return;
                    }

                    TabPage tabPage = null;
                    if ((found is frmCreate frm) && (frm.TabCharacterTabs.TabPages.ContainsKey("SINners")))
                    {
                        var index = frm.TabCharacterTabs.TabPages.IndexOfKey("SINners");
                        tabPage = frm.TabCharacterTabs.TabPages[index];
                    }

                    if ((found is frmCareer frm2) && (frm2.TabCharacterTabs.TabPages.ContainsKey("SINners")))
                    {
                        var index = frm2.TabCharacterTabs.TabPages.IndexOfKey("SINners");
                        tabPage = frm2.TabCharacterTabs.TabPages[index];
                    }

                    if (tabPage == null)
                    {
                        return;
                    }
                    var ucseq = tabPage.Controls.Find("SINnersBasic", true);
                    foreach (var uc in ucseq)
                    {
                        var sb = uc as SINnersBasic;
                        if (sb != null)
                        {
                            await sb?.CheckSINnerStatus();
                        }
                    }

                    var ucseq2 = tabPage.Controls.Find("SINnersAdvanced", true);
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.TraceError(e.ToString());
            }
            finally
            {
                IsSaving = false;
            }
        }
예제 #30
0
        private async Task <MyUserState> ShareSingleChummer()
        {
            if (MyCharacterCache == null)
            {
                throw new ArgumentNullException(nameof(MyCharacterCache));
            }
            string hash = string.Empty;

            try
            {
                using (CustomActivity op_shareChummer = Timekeeper.StartSyncron("Share Chummer", null,
                                                                                CustomActivity.OperationType.DependencyOperation, MyCharacterCache.FilePath))
                {
                    MyUserState       myState  = new MyUserState(this);
                    CharacterExtended ce       = null;
                    SinnersClient     client   = StaticUtils.GetClient();
                    string            sinnerid = string.Empty;
                    Guid SINid = Guid.Empty;

                    try
                    {
                        async Task <CharacterExtended> GetCharacterExtended(CustomActivity parentActivity)
                        {
                            using (_ = Timekeeper.StartSyncron("Loading Chummerfile", parentActivity,
                                                               CustomActivity.OperationType.DependencyOperation, MyCharacterCache.FilePath))
                            {
                                Character c          = PluginHandler.MainForm.OpenCharacters.FirstOrDefault(a => a.FileName == MyCharacterCache.FilePath);
                                bool      blnSuccess = true;
                                if (c == null)
                                {
                                    c = new Character {
                                        FileName = MyCharacterCache.FilePath
                                    };
                                    using (LoadingBar frmLoadingForm = new LoadingBar {
                                        CharacterFile = MyCharacterCache.FilePath
                                    })
                                    {
                                        frmLoadingForm.Reset(36);
                                        frmLoadingForm.Show();
                                        myState.StatusText       = "Loading chummer file...";
                                        myState.CurrentProgress += 10;
                                        ReportProgress(myState.CurrentProgress, myState);
                                        blnSuccess = await c.LoadAsync(frmLoadingForm, false);
                                    }
                                }

                                if (!blnSuccess)
                                {
                                    throw new ArgumentNullException("Could not load Character file " +
                                                                    MyCharacterCache.FilePath +
                                                                    ".");
                                }
                                ce = new CharacterExtended(c, null, MyCharacterCache);
                                if (ce?.MySINnerFile?.Id != null)
                                {
                                    sinnerid = ce.MySINnerFile.Id.ToString();
                                }
                                hash = ce?.MySINnerFile?.MyHash;
                                return(ce);
                            }
                        }

                        if (MyCharacterCache.MyPluginDataDic.TryGetValue("SINnerId", out object sinneridobj))
                        {
                            sinnerid = sinneridobj?.ToString() ?? string.Empty;
                        }
                        else
                        {
                            ce = await GetCharacterExtended(op_shareChummer);

                            sinnerid = ce.MySINnerFile.Id.ToString();
                            hash     = ce?.MySINnerFile?.MyHash ?? string.Empty;
                        }


                        if (string.IsNullOrEmpty(sinnerid) || !Guid.TryParse(sinnerid, out SINid))
                        {
                            myState.StatusText = "SINner Id is unknown or not issued!";
                            ReportProgress(30, myState);
                        }
                        else
                        {
                            myState.StatusText      = "SINner Id is " + SINid + ".";
                            myState.CurrentProgress = 30;
                            ReportProgress(myState.CurrentProgress, myState);
                        }


                        try
                        {
                            //check if char is already online and updated
                            ResultSinnerGetSINById checkresult;
                            using (_ = Timekeeper.StartSyncron(
                                       "check if online", op_shareChummer,
                                       CustomActivity.OperationType.DependencyOperation, MyCharacterCache?.FilePath))
                            {
                                checkresult = await client.GetSINByIdAsync(SINid);

                                if (checkresult == null)
                                {
                                    throw new ArgumentException("Could not parse result from SINners Webservice!");
                                }
                                if (!checkresult.CallSuccess)
                                {
                                    if (checkresult.MyException != null)
                                    {
                                        throw new ArgumentException(
                                                  "Error from SINners Webservice: " + checkresult.ErrorText,
                                                  checkresult.MyException.ToString());
                                    }
                                    throw new ArgumentException("Error from SINners Webservice: " +
                                                                checkresult.ErrorText);
                                }

                                hash = checkresult.MySINner.MyHash;
                            }


                            DateTime lastWriteTimeUtc = MyCharacterCache != null?File.GetLastWriteTimeUtc(MyCharacterCache.FilePath) : DateTime.MinValue;

                            if (checkresult.MySINner.LastChange < lastWriteTimeUtc)
                            {
                                if (ce == null)
                                {
                                    myState.StatusText      = "The Chummer is newer and has to be uploaded again.";
                                    myState.CurrentProgress = 30;
                                    ReportProgress(myState.CurrentProgress, myState);
                                    ce = await GetCharacterExtended(op_shareChummer);
                                }

                                if (ce != null)
                                {
                                    using (CustomActivity op_uploadChummer = Timekeeper.StartSyncron(
                                               "Uploading Chummer", op_shareChummer,
                                               CustomActivity.OperationType.DependencyOperation, MyCharacterCache?.FilePath))
                                    {
                                        myState.StatusText      = "Checking SINner availability (and if necessary upload it).";
                                        myState.CurrentProgress = 35;
                                        ReportProgress(myState.CurrentProgress, myState);
                                        myState.ProgressSteps = 10;
                                        await ce.Upload(myState, op_uploadChummer);

                                        if (ce.MySINnerFile.Id != null)
                                        {
                                            SINid = ce.MySINnerFile.Id.Value;
                                        }
                                        ResultSinnerGetSINById result = await client.GetSINByIdAsync(SINid);

                                        if (result == null)
                                        {
                                            throw new ArgumentException(
                                                      "Could not parse result from SINners Webservice!");
                                        }
                                        if (!result.CallSuccess)
                                        {
                                            if (result.MyException != null)
                                            {
                                                throw new ArgumentException(
                                                          "Error from SINners Webservice: " + result.ErrorText,
                                                          result.MyException.ToString());
                                            }
                                            throw new ArgumentException(
                                                      "Error from SINners Webservice: " + result.ErrorText);
                                        }

                                        hash = result.MySINner.MyHash;
                                    }
                                }
                            }
                        }
                        finally
                        {
                            //checkresult?.Dispose();
                        }
                    }
                    finally
                    {
                        ce?.Dispose();
                    }

                    myState.StatusText      = "SINner is online available.";
                    myState.CurrentProgress = 90;
                    ReportProgress(myState.CurrentProgress, myState);

                    string url = client.BaseUrl + "O";
                    url += "/" + hash;
                    if (Settings.Default.OpenChummerFromSharedLinks)
                    {
                        url += "?open=true";
                    }

                    myState.LinkText = url;
                    ReportProgress(100, myState);
                    RunWorkerCompleted(myState);
                    return(myState);
                }
            }
            catch (Exception exception)
            {
                Log.Warn(exception);
                throw;
            }
        }