示例#1
0
        public async Task ProcessSetup()
        {
            string apiKey = await BrowserViewModel.Instance.SettingsGetApiKey();

            string username = await BrowserViewModel.Instance.SettingsGetUsername();

            bool processSettings = true;

            if (!ApiHelper.IsUserValid(apiKey, username))
            {
                BrowserViewModel.Instance.SendNotification(NotificationType.Danger, StringStorage.Get("Message.NoAPIorUsername"));
                processSettings = false;
            }

            if (processSettings)
            {
                SettingsManager.Instance.Settings["api"]["key"]  = apiKey;
                SettingsManager.Instance.Settings["api"]["user"] = username;
                SettingsManager.Instance.SettingsSave();
                BrowserViewModel.Instance.SendNotification(NotificationType.Success, StringStorage.Get("Message.SettingsSaved"));
                //StartupFinished?.Invoke(null, null);
                System.Diagnostics.Process.Start(FileManager.GetExecutablePath());
                Environment.Exit(0);
            }
        }
        public List <Release> GetAvailableUpdates()
        {
            string data = "";

            try
            {
                data = ApiHelper.GetData(StringStorage.Get("URL.APIRepository") + "/releases");
            }
            catch (Exception)
            {
                data = "[]";
            }

            List <Release> releases = JsonConvert.DeserializeObject <List <Release> >(data);

            Version currentVersion = new Version(AppVersion.Version);

            releases.RemoveAll(delegate(Release release)
            {
                string _v = release.Version;
                Version v = new Version(_v);
                bool res  = currentVersion >= v;
                return(res);
            });

            return(releases);
        }
 public void Dispose()
 {
     if (stringStorage != null)
     {
         stringStorage.Dispose();
         stringStorage = null;
     }
 }
示例#4
0
        /// <summary>Define a new <see cref="StringMemoryPool"/> configuration</summary>
        /// <param name="method">Text storage definition</param>
        /// <param name="implicitNull">Is a null string entry atomically added?</param>
        /// <param name="baseAddress">Base address for string references</param>
        /// <remarks><see cref="AddressSize"/> is determined from <see cref="baseAddress"/></remarks>
        public StringMemoryPoolSettings(StringStorage method, bool implicitNull, Values.PtrHandle baseAddress)
        {
            { Storage = method; AllowDuplicates = false; }

            mAddressSize = baseAddress.Is64bit ? Shell.ProcessorSize.x64 : Shell.ProcessorSize.x32;
            ImplicitNull = implicitNull;
            BaseAddress  = baseAddress;
        }
示例#5
0
        /// <summary>Define a new <see cref="StringMemoryPool"/> configuration</summary>
        /// <param name="method">Text storage definition</param>
        /// <param name="implicitNull">Is a null string entry atomically added?</param>
        /// <param name="addressSize">Size of string address references</param>
        /// <remarks>Base address defaults to the null equivlent on <paramref name="addressSize"/> platforms</remarks>
        public StringMemoryPoolSettings(StringStorage method, bool implicitNull, Shell.ProcessorSize addressSize)
        {
            { Storage = method; AllowDuplicates = false; }

            mAddressSize = addressSize;
            ImplicitNull = implicitNull;

            BaseAddress = mAddressSize == Shell.ProcessorSize.x64 ?
                          Values.PtrHandle.Null64 : Values.PtrHandle.Null32;
        }
示例#6
0
        public void Read(KSoft.IO.EndianReader s)
        {
            var storage = new StringStorage(); storage.Read(s);

            Storage = storage;

            mAddressSize    = (Shell.ProcessorSize)s.ReadByte();
            ImplicitNull    = s.ReadBoolean();
            AllowDuplicates = s.ReadBoolean();
            s.Seek(sizeof(byte));

            var base_addr = new Values.PtrHandle(mAddressSize); base_addr.Read(s);

            BaseAddress.Read(s);
        }
        private void OnUpdate()
        {
            if (!NetworkManager.Instance.HasConnection())
            {
                BrowserViewModel.Instance.SendNotification(NotificationType.Warning, StringStorage.Get("Message.NoInternet"));
                return;
            }

            //BrowserViewModel.Instance.SendNotification(NotificationType.Success, "Test: session iteration");
            OsuUser currentUserData = null;

            try
            {
                currentUserData = OsuApi.GetUser(CurrentSession.Username, (OsuMode)Enum.Parse(typeof(OsuMode), SettingsManager.Instance.Settings["api"]["gamemode"]));
            }
            catch (Exception)
            {
                BrowserViewModel.Instance.SendNotification(NotificationType.Danger, StringStorage.Get("Message.UserDataError"));
            }

            if (currentUserData != null)
            {
                if (CurrentSession.InitialData == null)
                {
                    CurrentSession.InitialData = SessionData.FromUser(currentUserData);
                }

                CurrentSession.CurrentData    = SessionData.FromUser(currentUserData);
                CurrentSession.DifferenceData = CurrentSession.CurrentData - CurrentSession.InitialData;

                BrowserViewModel.Instance.ApplySession(CurrentSession);
                BrowserViewModel.Instance.ApplyUser(currentUserData);

                int updateRate = Convert.ToInt32(SettingsManager.Instance.Settings["api"]["updateRate"]);
                if (updateRate != SessionThread.SleepTime)
                {
                    SessionThread.SleepTime = updateRate;
                }
            }

            lastIteration = DateTimeOffset.Now.ToUnixTimeSeconds();
            nextIteration = DateTimeOffset.Now.ToUnixTimeSeconds() + SessionThread.SleepTime;
        }
示例#8
0
        private void Proceed()
        {
            //BrowserViewModel.Instance.AttachedBrowser.ExecuteScriptAsyncWhenPageLoaded("$(\"#tab_session_default_view\").show();");
            BrowserViewModel.Instance.AttachedBrowser.ExecuteScriptAsyncWhenPageLoaded("$(\"#tab_session_loader_view\").show();");
            Thread.Sleep(1000);
            BrowserViewModel.Instance.AttachedBrowser.ExecuteScriptAsyncWhenPageLoaded("appReady();");
            Thread.Sleep(100);
            PopulateSettings();


            BrowserViewModel.Instance.SetAppVersionText(AppVersion.Version);
            BrowserViewModel.Instance.SetChromiumVersionText("CEF: " + Cef.CefSharpVersion + ", Chromium: " + Cef.ChromiumVersion);

            if (!NetworkManager.Instance.HasConnection())
            {
                BrowserViewModel.Instance.SendNotification(NotificationType.Warning, StringStorage.Get("Message.NoInternet"));
            }
            SessionManager.Instance.PrepareSession();
            UpdateManager.Instance.Start();
            //ToolLocalApi.Instance.Start();
        }
示例#9
0
 public unsafe void IncorrectPointerCrashTest() =>
 Assert.Throws <WatchDogEffluentException>(() =>
 {
     var invalid = (StrRef *)ulong.MaxValue;
     StringStorage.GetString(invalid, null);
 });
示例#10
0
 public static StringStorage Take(
     StringStorage source)
 {
     StringStorage taker = new StringStorage((StringStorageFactory)source.factory);
     taker.lines = source.lines;
     source.lines = new FragmentList<string>();
     return taker;
 }
        public void PrepareUpdate(Release update)
        {
            BrowserViewModel.Instance.AttachedJavascriptWrapper.Show("#cardUpdateReady");
            BrowserViewModel.Instance.AttachedJavascriptWrapper.SetHtml("#updatemanagerVersionID", update.Version);

            BrowserViewModel.Instance.AttachedJavascriptWrapper.Show("#navigationUpdateWarning");
            BrowserViewModel.Instance.AttachedJavascriptWrapper.SetHtml("#updatemanagerVersionBody", StringStorage.Get("Text.NoUpdate"));
            Markdown md           = new Markdown();
            string   updateString = "<div style=\"-webkit-text-size-adjust: 50%;\">";

            updateString += md.Transform(update.Body);
            updateString += "</div>";
            BrowserViewModel.Instance.AttachedJavascriptWrapper.SetHtml("#updatemanagerVersionBody", HttpUtility.JavaScriptStringEncode(updateString));
        }
示例#12
0
 /// <summary>Define a new <see cref="StringMemoryPool"/> configuration</summary>
 /// <param name="method">Text storage definition</param>
 /// <remarks>
 /// A null string entry <b>is</b> added by default.
 ///
 /// <see cref="AddressSize"/> is determined from <see cref="Shell.Platform.Environment"/>
 /// </remarks>
 public StringMemoryPoolSettings(StringStorage method)
     : this(method, true,
            Shell.Platform.Environment.ProcessorType.ProcessorSize)
 {
 }
示例#13
0
 /// <summary>Define a new <see cref="StringMemoryPool"/> configuration</summary>
 /// <param name="method">Text storage definition</param>
 /// <param name="implicitNull">Is a null string entry atomically added?</param>
 /// <remarks><see cref="AddressSize"/> is determined from <see cref="Shell.Platform.Environment"/></remarks>
 public StringMemoryPoolSettings(StringStorage method, bool implicitNull)
     : this(method, implicitNull,
            Shell.Platform.Environment.ProcessorType.ProcessorSize)
 {
 }
示例#14
0
        private async void PopulateTabData()
        {
            string             tabsDataTask = "getTabFields();";
            JavascriptResponse result_data  = null;

            int jsAttempts = 0;

            do
            {
                try
                {
                    jsAttempts++;
                    JavascriptResponse res = await BrowserViewModel.Instance.AttachedBrowser.EvaluateScriptAsync(tabsDataTask);

                    result_data = res;
                    if (res != null && res.Result != null)
                    {
                        break;
                    }
                }
                catch (Exception e)
                {
                    if (jsAttempts == 5)
                    {
                        throw e;
                    }

                    await Task.Delay(1000);
                }
            } while (true);
            List <object> data = (List <object>)result_data.Result;

            data.ForEach(element =>
            {
                string name = (string)element;
                string path = "wwwroot/tabs/tab_" + name + ".html";
                if (File.Exists(path))
                {
                    string file_data     = FileManager.ReadAllText(path);
                    string prepared_file = HttpUtility.JavaScriptStringEncode(file_data);
                    BrowserViewModel.Instance.AttachedBrowser.ExecuteScriptAsyncWhenPageLoaded("populateTab('" + name + "','" + prepared_file + "');");
                }
                else
                {
                    BrowserViewModel.Instance.SendNotification(NotificationType.Danger, String.Format(StringStorage.Get("Message.MissingTabContent"), name));
                }
            });
            Thread.Sleep(1000);
            PopulateAddons();
        }
        public SessionManager()
        {
            SessionFiles = new List <SessionFileData>();
            if (File.Exists("Data/stored_sessions.json"))
            {
                string data = string.Empty;
                try
                {
                    data = File.ReadAllText("Data/stored_sessions.json");
                }
                catch (Exception)
                {
                    BrowserViewModel.Instance.SendNotification(NotificationType.Warning, StringStorage.Get("Message.UnreadableSession"));
                }

                if (!string.IsNullOrEmpty(data))
                {
                    List <SessionFileData> storedSessions = null;
                    try
                    {
                        storedSessions = JsonConvert.DeserializeObject <List <SessionFileData> >(data);
                    }
                    catch (Exception)
                    {
                        BrowserViewModel.Instance.SendNotification(NotificationType.Warning, StringStorage.Get("Message.UnreadableSession"));
                    }
                    if (storedSessions != null || storedSessions.Count > 0)
                    {
                        SessionFiles.AddRange(storedSessions);
                        PopulateLoadList();
                    }
                }
            }
        }
示例#16
0
        public void CheckSetup()
        {
            bool exists         = SettingsManager.Instance.LoadOrCreateSettings();
            bool validApiOrUser = ApiHelper.IsKeyValid(SettingsManager.Instance.Settings["api"]["key"]) &&
                                  ApiHelper.IsUserValid(SettingsManager.Instance.Settings["api"]["key"], SettingsManager.Instance.Settings["api"]["user"]);

            if (!exists || !validApiOrUser)
            {
                if (exists && !validApiOrUser)
                {
                    BrowserViewModel.Instance.SendNotification(NotificationType.Danger, StringStorage.Get("Message.NoAPIorUsername"));
                }

                BrowserViewModel.Instance.AttachedJavascriptWrapper.Modal.Show("#generateSettingsModal");
                cefOsuApp.SetupFinished += (object sender, EventArgs e) =>
                {
                    cefOsuApp.GetWindow().Dispatcher.Invoke(() =>
                    {
                        Task.Run(async() =>
                        {
                            BrowserViewModel.Instance.AttachedJavascriptWrapper.SetElementDisabled("#settingsConfirmButton", true);
                            BrowserViewModel.Instance.AttachedJavascriptWrapper.SetHtml("#settingsConfirmButton", "<span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span> saving");

                            Task task = ProcessSetup();
                            if (await Task.WhenAny(task, Task.Delay(5000)) != task)
                            {
                                BrowserViewModel.Instance.SendNotification(NotificationType.Danger, StringStorage.Get("Message.SomethingWrong"));
                            }

                            //MessageBox.Show(apiKey);
                            BrowserViewModel.Instance.AttachedJavascriptWrapper.SetElementDisabled("#settingsConfirmButton", false);
                            BrowserViewModel.Instance.AttachedJavascriptWrapper.SetHtml("#settingsConfirmButton", "Save");
                        });
                    });
                };
            }
            else
            {
                StartupFinished?.Invoke(null, null);
            }
        }
示例#17
0
 /// <summary>Define a new <see cref="StringMemoryPool"/> configuration</summary>
 /// <param name="method">Text storage definition</param>
 /// <param name="baseAddress">Base address for string references</param>
 /// <remarks>A null string entry <b>is</b> added by default</remarks>
 public StringMemoryPoolSettings(StringStorage method, Values.PtrHandle baseAddress)
     : this(method, true, baseAddress)
 {
 }
        //Prepare a new session
        public void PrepareSession(Session session = null)
        {
            SessionThread?.Join();

            if (session == null)
            {
                CurrentSession = new Session
                {
                    Username = SettingsManager.Instance.Settings["api"]["user"]
                };
            }
            else
            {
                CurrentSession = session;
            }

            if (CurrentSession.ReadOnly)
            {
                OsuUser currentUserData = null;
                try
                {
                    currentUserData = OsuApi.GetUser(CurrentSession.Username, (OsuMode)Enum.Parse(typeof(OsuMode), SettingsManager.Instance.Settings["api"]["gamemode"]));
                }
                catch (Exception)
                {
                    BrowserViewModel.Instance.SendNotification(NotificationType.Danger, StringStorage.Get("Message.UserDataError"));
                    return;
                }
                BrowserViewModel.Instance.ApplySession(CurrentSession);
                BrowserViewModel.Instance.ApplyUser(currentUserData);

                StopProgressHandler();
                BrowserViewModel.Instance.AttachedJavascriptWrapper.Hide("#sessionProgressTime");
                BrowserViewModel.Instance.AttachedJavascriptWrapper.Show("#sessionProgressReadonly");

                string startDate = DateTimeOffset.FromUnixTimeSeconds(CurrentSession.SessionDate).ToString("MMMM dd yyyy HH:mm:ss");
                string endDate   = DateTimeOffset.FromUnixTimeSeconds(CurrentSession.SessionEndDate).ToString("MMMM dd yyyy HH:mm:ss");

                BrowserViewModel.Instance.AttachedJavascriptWrapper.SetHtml("#sessionProgressReadonlyText", startDate + " to " + endDate);
            }
            else
            {
                SessionThread = new ExtendedThread(() => OnUpdate(), Convert.ToInt32(SettingsManager.Instance.Settings["api"]["updateRate"]));

                lastIteration = DateTimeOffset.Now.ToUnixTimeSeconds();
                nextIteration = DateTimeOffset.Now.ToUnixTimeSeconds() + SessionThread.SleepTime;

                StartProgressHandler();
                SessionThread.Start();

                BrowserViewModel.Instance.AttachedJavascriptWrapper.Hide("#sessionProgressReadonly");

                if (SettingsManager.Instance.Settings["display"]["showTimer"] == "true")
                {
                    BrowserViewModel.Instance.AttachedJavascriptWrapper.Show("#sessionProgressTime");
                }
            }
        }