public static void Report(SessionPreference preference, ChatSession session, int id, TimeSpan idleTimeElapsed, TimeSpan cameraTimeElapsed, TimeSpan talkTimeElapsed, int cameraCount) { string[] scopes = { SheetsService.Scope.Spreadsheets }; var applicationName = "Data Poster"; UserCredential credential; using (var stream = new FileStream("client.json", FileMode.Open, FileAccess.Read)) { string credPath = Environment.CurrentDirectory; credPath = Path.Combine(credPath, "data.json"); credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, scopes, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result; } // Create Google Sheets API service. var service = new SheetsService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = applicationName, }); IList <IList <Object> > objNeRecords = GenerateData(preference, session, id, idleTimeElapsed, cameraTimeElapsed, talkTimeElapsed, cameraCount); if (objNeRecords == null) { return; } string spreadsheetId = ""; string list = ""; switch (preference.Name) { case "User Perspective V2": spreadsheetId = OffTableId; list = OffTableListMod1V2; break; case "Default v2": spreadsheetId = OffTableId; list = OffTableListMod24v7; break; case "Unfiltered v2": spreadsheetId = OffTableId; list = SecondTableListMod3v7; break; } UpdateGoogleSheetInBatch(objNeRecords, spreadsheetId, $"{list}!A:AA", service); }
private static IList <IList <Object> > GenerateData(SessionPreference preference, ChatSession session, int id, TimeSpan idleTimeElapsed, TimeSpan cameraTimeElapsed, TimeSpan talkTimeElapsed, int cameraCount) { switch (preference.Name) { case "Default v2": case "User Perspective V2": case "Unfiltered v2": return(GenerateOffTableData(preference, session, idleTimeElapsed, cameraTimeElapsed, talkTimeElapsed, cameraCount)); } return(null); }
private static IList <IList <Object> > GenerateData(SessionPreference preference, ChatSession session, int id, TimeSpan idleTimeElapsed, TimeSpan cameraTimeElapsed, TimeSpan talkTimeElapsed, int cameraCount) { switch (preference.Name) { case "Default (disabled)": case "Default (enabled)": case "Default (experimental)": case "Default (experimental highscore)": case "Default (without random)": case "User Perspective (Disabled)": case "User Perspective (Enabled)": case "User Perspective (experimental)": case "User Perspective (experimental highscore)": case "Unfiltered": return(GenerateOffTableData(preference, session, idleTimeElapsed, cameraTimeElapsed, talkTimeElapsed, cameraCount)); } return(null); }
private static IList <IList <object> > GenerateOffTableData(SessionPreference preference, ChatSession session, TimeSpan idleTimeElapsed, TimeSpan cameraTimeElapsed, TimeSpan talkTimeElapsed, int cameraCount) { List <IList <Object> > objNewRecords = new List <IList <Object> >(); IList <Object> obj = new List <Object>(); obj.Add(session.DateStart.ToString("dd.MM.yyyy")); obj.Add(preference.Mod); if (session.DateEnd.HasValue) { obj.Add($"{session.DateStart:HH}-{session.DateEnd:HH}"); } else { obj.Add($"{session.DateStart:HH}-{session.DateStart:HH}"); } var inappropriate = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Inappropriate); var hiddenInappropriate = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.HiddenInappropriate); var nobody = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Nobody); var blanket = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Blanket); var cp = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Cp); var male = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Male); var female = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Female); var onePlus = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.OnePlus); var performer = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Performer); var spam = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Spam1 || x.Result == ChatConnectionResultEnum.Spam2 || x.Result == ChatConnectionResultEnum.Spam3 ); obj.Add(inappropriate); obj.Add(hiddenInappropriate); obj.Add(nobody); obj.Add(blanket); obj.Add(cp); obj.Add(male); obj.Add(female); obj.Add(onePlus); obj.Add(performer); obj.Add(spam); obj.Add("session link"); obj.Add(""); obj.Add(""); obj.Add(""); var connections = inappropriate + hiddenInappropriate + nobody + blanket + cp + male + female + onePlus + performer; var lowQualityCount = inappropriate + hiddenInappropriate + nobody + blanket + cp; var lowQuality = connections == 0 ? 0 : Convert.ToDouble(lowQualityCount) / Convert.ToDouble(connections); var percentExplicit = connections == 0 ? 0 : Convert.ToDouble(inappropriate) / Convert.ToDouble(connections); obj.Add(percentExplicit); obj.Add(lowQuality); obj.Add(connections); obj.Add(idleTimeElapsed); var avgIdle = connections < 1 ? idleTimeElapsed : TimeSpan.FromMilliseconds(idleTimeElapsed.TotalMilliseconds / (connections - 1)); obj.Add(avgIdle); obj.Add(talkTimeElapsed); var avgTalk = connections == 0 ? talkTimeElapsed : TimeSpan.FromMilliseconds(talkTimeElapsed.TotalMilliseconds / connections); obj.Add(avgTalk); obj.Add(cameraCount); obj.Add(cameraTimeElapsed); var avgCamera = cameraCount == 0 ? cameraTimeElapsed : TimeSpan.FromMilliseconds(cameraTimeElapsed.TotalMilliseconds / cameraCount); obj.Add(avgCamera); objNewRecords.Add(obj); return(objNewRecords); }
public BrowserController(SessionPreference sessionPreference, Logger logger) { this._sessionPreference = sessionPreference; this._logger = logger; if (!Cef.IsInitialized) { var cefSettings = new CefSettings { BrowserSubprocessPath = Path.Combine( AppDomain.CurrentDomain.SetupInformation.ApplicationBase, Environment.Is64BitProcess ? "x64" : "x86", "CefSharp.BrowserSubprocess.exe") }; cefSettings.CefCommandLineArgs.Add("enable-media-stream", "1"); if (File.Exists(Path.Combine(Environment.CurrentDirectory, "video.y4m"))) { cefSettings.CefCommandLineArgs.Add("use-fake-device-for-media-stream"); cefSettings.CefCommandLineArgs.Add("--use-file-for-fake-video-capture", "video.y4m"); } Cef.Initialize(cefSettings, performDependencyCheck: false, browserProcessHandler: null); } this._isv2 = this._sessionPreference.Name.ToLower().Contains("v2"); if (this._isv2) { this._url = "https://chatroulette.com"; } else { this._url = "https://chatroulette.com"; } if (this._sessionPreference.Mod != "-1") { var m = this._sessionPreference.Mod; if (_isv2) { m = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODUxOTM5ODYsInZhbHVlIjoiLT1TaDNyMWZmPS0ifQ.YM7YIilD-mhLmqIrl8KqcP0faV09MsGEiBDAqAB28fs"; } else { if (this._sessionPreference.Mod != "0") { if (this._sessionPreference.WithBan) { m = "0"; } else { Cef.GetGlobalCookieManager().SetCookie(this._url, new Cookie() { Path = "/", Domain = this._url.Replace("https://", ""), Name = "counter", Value = this._sessionPreference.Mod }); m = "-100"; } } } this._logger.Trace("mod for current session: " + m); Cef.GetGlobalCookieManager().SetCookie(this._url, new Cookie() { Path = "/", Domain = this._url.Replace("https://", ""), Name = "mod", Value = m }); } this._browser = new ChromiumWebBrowser(this._url); this._browser.ConsoleMessage += (sender, args) => { if (args.Message == "Couldn't fetch stats due to GetStats is not possible: OT.Subscriber is not connected cannot getStats") { return; } this._logger.Trace($"Browser console message: {args.Message}"); if (args.Message.Contains("partner banned by moderator")) { this.BrowserBanState = true; } if (args.Message.Contains("Stream started")) { this.BrowserBanState = false; } if (args.Message.Contains("Search started.")) { this.Status = Status.Wait; } if (args.Message.Contains("Client is now ready to begin.")) { this.Status = Status.EnableCamera; } if (args.Message.Contains("Setup publisher and camera turned on")) { this.Status = Status.Start; } if (args.Message.Contains("Setup subscriber - success")) { this.Status = Status.PartnerConnected; } if (args.Message.Contains("partner skipped") || args.Message.Contains("partner banned by moderator")) { this.Status = Status.PutResult; } }; this._browser.LoadingStateChanged += this.ChromeBrowserOnLoadingStateChanged; if (this._isv2) { var backgroundWorker = new BackgroundWorker(); backgroundWorker.DoWork += BackgroundWorkerOnDoWork; backgroundWorker.RunWorkerCompleted += BackgroundWorkerOnRunWorkerCompleted; backgroundWorker.RunWorkerAsync(); } }