diff --git a/WinFormsApp1/App.config b/WinFormsApp1/App.config index 279cf4d..483bcf7 100644 --- a/WinFormsApp1/App.config +++ b/WinFormsApp1/App.config @@ -34,6 +34,12 @@ + + + + + + \ No newline at end of file diff --git a/WinFormsApp1/ChaturbateLoginForm.Designer.cs b/WinFormsApp1/ChaturbateLoginForm.Designer.cs new file mode 100644 index 0000000..edf7869 --- /dev/null +++ b/WinFormsApp1/ChaturbateLoginForm.Designer.cs @@ -0,0 +1,39 @@ +namespace WinFormsApp1 +{ + partial class ChaturbateLoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Text = "ChaturbateLoginForm"; + } + + #endregion + } +} \ No newline at end of file diff --git a/WinFormsApp1/ChaturbateLoginForm.cs b/WinFormsApp1/ChaturbateLoginForm.cs new file mode 100644 index 0000000..6f7b8fd --- /dev/null +++ b/WinFormsApp1/ChaturbateLoginForm.cs @@ -0,0 +1,107 @@ +using System; +using System.Linq; +using System.Windows.Forms; +using Microsoft.Web.WebView2.WinForms; +using Microsoft.Web.WebView2.Core; + +namespace WinFormsApp1 +{ + public partial class ChaturbateLoginForm : Form + { + private readonly WebView2 _webView; + private readonly Button _btnDone; + + // Einzeln gespeicherte Werte + public string? CfClearance { get; private set; } + public string? SessionId { get; private set; } + + // Kombinierter String für den Recorder: + // "cf_clearance=...; sessionid=..." + public string? SessionCookie { get; private set; } + + public ChaturbateLoginForm() + { + Text = "Chaturbate Login"; + Width = 1000; + Height = 800; + + _webView = new WebView2 + { + Dock = DockStyle.Fill + }; + + _btnDone = new Button + { + Text = "Login fertig", + Dock = DockStyle.Bottom, + Height = 40 + }; + _btnDone.Click += BtnDone_Click; + + Controls.Add(_webView); + Controls.Add(_btnDone); + + Shown += ChaturbateLoginForm_Shown; + } + + private async void ChaturbateLoginForm_Shown(object? sender, EventArgs e) + { + try + { + await _webView.EnsureCoreWebView2Async(); + _webView.CoreWebView2.Navigate("https://chaturbate.com/"); + } + catch (Exception ex) + { + MessageBox.Show("Browser konnte nicht initialisiert werden:\n" + ex.Message, + "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private async void BtnDone_Click(object? sender, EventArgs e) + { + try + { + if (_webView.CoreWebView2 == null) + { + MessageBox.Show("Browser noch nicht bereit."); + return; + } + + CoreWebView2CookieManager cookieManager = _webView.CoreWebView2.CookieManager; + var cookies = await cookieManager.GetCookiesAsync("https://chaturbate.com/"); + + // beide Cookies holen + var cfClearance = cookies.FirstOrDefault(c => c.Name == "cf_clearance"); + var sessionId = cookies.FirstOrDefault(c => c.Name == "sessionid"); + + if (cfClearance == null || sessionId == null) + { + MessageBox.Show( + "Die nötigen Cookies wurden nicht gefunden.\n\n" + + "Stelle sicher, dass du auf Chaturbate eingeloggt bist\n" + + "und ggf. die Seite einmal neu lädst.", + "Hinweis", + MessageBoxButtons.OK, + MessageBoxIcon.Information); + return; + } + + // Einzelwerte speichern + CfClearance = cfClearance.Value; + SessionId = sessionId.Value; + + // kombinierten Header bauen, wie du ihn an recorder.exe übergibst + SessionCookie = $"cf_clearance={CfClearance}; sessionid={SessionId}"; + + DialogResult = DialogResult.OK; + Close(); + } + catch (Exception ex) + { + MessageBox.Show("Fehler beim Lesen der Cookies:\n" + ex.Message, + "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/WinFormsApp1/ChaturbateLoginForm.resx b/WinFormsApp1/ChaturbateLoginForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/WinFormsApp1/ChaturbateLoginForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/Form1.Designer.cs b/WinFormsApp1/Form1.Designer.cs index ea4f6d4..fdd585f 100644 --- a/WinFormsApp1/Form1.Designer.cs +++ b/WinFormsApp1/Form1.Designer.cs @@ -81,9 +81,7 @@ imageList_Thumbnails_Temp = new ImageList(components); tabPage_Editor = new TabPage(); splitContainer_Editor_Player_Timestamps = new SplitContainer(); - splitContainer_Editor_PlayerDetails = new SplitContainer(); - splitContainer_Editor_VLC = new SplitContainer(); - label_Editor_Label = new Label(); + tableLayoutPanel_Editor_Player = new TableLayoutPanel(); flyleafHost_Editor = new FlyleafLib.Controls.WinForms.FlyleafHost(); tableLayoutPanel_Editor_VLC = new TableLayoutPanel(); comboBox_Editor_VLC_PlaybackSpeed = new ComboBox(); @@ -106,14 +104,9 @@ label_Date_Trim_Value = new Label(); label_Size_Trim = new Label(); label_Size_Trim_Value = new Label(); - splitContainer_Editor_cutClips = new SplitContainer(); - splitContainer_Editor_Timestamps = new SplitContainer(); - listView_Split = new ListView(); - columnHeader_Trim_Checkbox = new ColumnHeader(); - columnHeader_Trim_Start = new ColumnHeader(); - columnHeader_Trim_End = new ColumnHeader(); - columnHeader_Trim_Duration = new ColumnHeader(); - columnHeader_Trim_Label = new ColumnHeader(); + tableLayoutPanel_AI = new TableLayoutPanel(); + button_AddSplit = new Button(); + button_editClip_scanAI_Results = new Button(); groupBox_editClip_Options = new GroupBox(); tableLayoutPanel_scanAI_Options = new TableLayoutPanel(); checkBox_scanAI_UseThresholdForPredictionLabel = new CheckBox(); @@ -129,11 +122,15 @@ trackBar_scanAI_sexyThreshold = new TrackBar(); label_scanAI_hentaiThreshold_Value = new Label(); checkBox_scanAI_HentaiThreshold = new CheckBox(); - tableLayoutPanel_editClip_ScanAI = new TableLayoutPanel(); - button_editClip_scanAI = new Button(); - button_editClip_scanAI_Results = new Button(); - button_AddSplit = new Button(); + listView_Split = new ListView(); + columnHeader_Trim_Checkbox = new ColumnHeader(); + columnHeader_Trim_Start = new ColumnHeader(); + columnHeader_Trim_End = new ColumnHeader(); + columnHeader_Trim_Duration = new ColumnHeader(); + columnHeader_Trim_Label = new ColumnHeader(); button_SplitFiles = new Button(); + button_editClip_scanAI = new Button(); + button_Editor_Options = new Button(); tabPage_Player = new TabPage(); splitContainer_Player = new SplitContainer(); splitContainer_Player_VLC = new SplitContainer(); @@ -280,11 +277,10 @@ checkBox_dateTime_AutoShutdown = new CheckBox(); numericUpDown_warnFreeDiskSpace = new NumericUpDown(); checkBox_PausePlaybackWhenSwitchingTabs = new CheckBox(); - label_checkSpeed = new Label(); - comboBox_checkSpeed = new ComboBox(); - label_Thumbnail = new Label(); - comboBox_Thumbnail = new ComboBox(); button_SaveEntries = new Button(); + label_ChaturbateLoginStatus = new Label(); + button_ChaturbateLogin = new Button(); + checkBox_AutoQuickScan = new CheckBox(); groupBox_Settings_Downloads = new GroupBox(); tableLayoutPanel_Settings_Downloads = new TableLayoutPanel(); checkBox_MaxConcurrentDownloads = new CheckBox(); @@ -363,33 +359,18 @@ splitContainer_Editor_Player_Timestamps.Panel1.SuspendLayout(); splitContainer_Editor_Player_Timestamps.Panel2.SuspendLayout(); splitContainer_Editor_Player_Timestamps.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)splitContainer_Editor_PlayerDetails).BeginInit(); - splitContainer_Editor_PlayerDetails.Panel1.SuspendLayout(); - splitContainer_Editor_PlayerDetails.Panel2.SuspendLayout(); - splitContainer_Editor_PlayerDetails.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)splitContainer_Editor_VLC).BeginInit(); - splitContainer_Editor_VLC.Panel1.SuspendLayout(); - splitContainer_Editor_VLC.Panel2.SuspendLayout(); - splitContainer_Editor_VLC.SuspendLayout(); + tableLayoutPanel_Editor_Player.SuspendLayout(); tableLayoutPanel_Editor_VLC.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)trackBar_Editor_VLC).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackBar_Editor_VLC_Volume).BeginInit(); tableLayoutPanel_Editor_PlayerTrim.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBox_HotIcon_Trim).BeginInit(); - ((System.ComponentModel.ISupportInitialize)splitContainer_Editor_cutClips).BeginInit(); - splitContainer_Editor_cutClips.Panel1.SuspendLayout(); - splitContainer_Editor_cutClips.Panel2.SuspendLayout(); - splitContainer_Editor_cutClips.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)splitContainer_Editor_Timestamps).BeginInit(); - splitContainer_Editor_Timestamps.Panel1.SuspendLayout(); - splitContainer_Editor_Timestamps.Panel2.SuspendLayout(); - splitContainer_Editor_Timestamps.SuspendLayout(); + tableLayoutPanel_AI.SuspendLayout(); groupBox_editClip_Options.SuspendLayout(); tableLayoutPanel_scanAI_Options.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)trackBar_scanAI_hentaiThreshold).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackBar_scanAI_pornThreshold).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackBar_scanAI_sexyThreshold).BeginInit(); - tableLayoutPanel_editClip_ScanAI.SuspendLayout(); tabPage_Player.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)splitContainer_Player).BeginInit(); splitContainer_Player.Panel1.SuspendLayout(); @@ -866,69 +847,32 @@ // // splitContainer_Editor_Player_Timestamps.Panel1 // - splitContainer_Editor_Player_Timestamps.Panel1.Controls.Add(splitContainer_Editor_PlayerDetails); + splitContainer_Editor_Player_Timestamps.Panel1.Controls.Add(tableLayoutPanel_Editor_Player); // // splitContainer_Editor_Player_Timestamps.Panel2 // - splitContainer_Editor_Player_Timestamps.Panel2.Controls.Add(splitContainer_Editor_cutClips); + splitContainer_Editor_Player_Timestamps.Panel2.Controls.Add(tableLayoutPanel_AI); splitContainer_Editor_Player_Timestamps.Size = new Size(820, 417); - splitContainer_Editor_Player_Timestamps.SplitterDistance = 500; + splitContainer_Editor_Player_Timestamps.SplitterDistance = 520; splitContainer_Editor_Player_Timestamps.TabIndex = 27; // - // splitContainer_Editor_PlayerDetails + // tableLayoutPanel_Editor_Player // - splitContainer_Editor_PlayerDetails.Dock = DockStyle.Fill; - splitContainer_Editor_PlayerDetails.FixedPanel = FixedPanel.Panel2; - splitContainer_Editor_PlayerDetails.IsSplitterFixed = true; - splitContainer_Editor_PlayerDetails.Location = new Point(0, 0); - splitContainer_Editor_PlayerDetails.Name = "splitContainer_Editor_PlayerDetails"; - splitContainer_Editor_PlayerDetails.Orientation = Orientation.Horizontal; - // - // splitContainer_Editor_PlayerDetails.Panel1 - // - splitContainer_Editor_PlayerDetails.Panel1.Controls.Add(splitContainer_Editor_VLC); - // - // splitContainer_Editor_PlayerDetails.Panel2 - // - splitContainer_Editor_PlayerDetails.Panel2.Controls.Add(tableLayoutPanel_Editor_PlayerTrim); - splitContainer_Editor_PlayerDetails.Size = new Size(500, 417); - splitContainer_Editor_PlayerDetails.SplitterDistance = 391; - splitContainer_Editor_PlayerDetails.SplitterWidth = 1; - splitContainer_Editor_PlayerDetails.TabIndex = 0; - // - // splitContainer_Editor_VLC - // - splitContainer_Editor_VLC.Dock = DockStyle.Fill; - splitContainer_Editor_VLC.FixedPanel = FixedPanel.Panel2; - splitContainer_Editor_VLC.IsSplitterFixed = true; - splitContainer_Editor_VLC.Location = new Point(0, 0); - splitContainer_Editor_VLC.Name = "splitContainer_Editor_VLC"; - splitContainer_Editor_VLC.Orientation = Orientation.Horizontal; - // - // splitContainer_Editor_VLC.Panel1 - // - splitContainer_Editor_VLC.Panel1.Controls.Add(label_Editor_Label); - splitContainer_Editor_VLC.Panel1.Controls.Add(flyleafHost_Editor); - // - // splitContainer_Editor_VLC.Panel2 - // - splitContainer_Editor_VLC.Panel2.Controls.Add(tableLayoutPanel_Editor_VLC); - splitContainer_Editor_VLC.Size = new Size(500, 391); - splitContainer_Editor_VLC.SplitterDistance = 352; - splitContainer_Editor_VLC.TabIndex = 1; - // - // label_Editor_Label - // - label_Editor_Label.AutoSize = true; - label_Editor_Label.Dock = DockStyle.Bottom; - label_Editor_Label.Font = new Font("Segoe UI", 8.25F); - label_Editor_Label.Location = new Point(0, 339); - label_Editor_Label.Name = "label_Editor_Label"; - label_Editor_Label.Size = new Size(74, 13); - label_Editor_Label.TabIndex = 18; - label_Editor_Label.Text = "Pornography"; - label_Editor_Label.TextAlign = ContentAlignment.MiddleLeft; - label_Editor_Label.Visible = false; + tableLayoutPanel_Editor_Player.ColumnCount = 1; + tableLayoutPanel_Editor_Player.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); + tableLayoutPanel_Editor_Player.Controls.Add(flyleafHost_Editor, 0, 0); + tableLayoutPanel_Editor_Player.Controls.Add(tableLayoutPanel_Editor_VLC, 0, 1); + tableLayoutPanel_Editor_Player.Controls.Add(tableLayoutPanel_Editor_PlayerTrim, 0, 2); + tableLayoutPanel_Editor_Player.Dock = DockStyle.Fill; + tableLayoutPanel_Editor_Player.Location = new Point(0, 0); + tableLayoutPanel_Editor_Player.Name = "tableLayoutPanel_Editor_Player"; + tableLayoutPanel_Editor_Player.RowCount = 3; + tableLayoutPanel_Editor_Player.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); + tableLayoutPanel_Editor_Player.RowStyles.Add(new RowStyle(SizeType.Absolute, 40F)); + tableLayoutPanel_Editor_Player.RowStyles.Add(new RowStyle(SizeType.Absolute, 85F)); + tableLayoutPanel_Editor_Player.RowStyles.Add(new RowStyle(SizeType.Absolute, 40F)); + tableLayoutPanel_Editor_Player.Size = new Size(520, 417); + tableLayoutPanel_Editor_Player.TabIndex = 2; // // flyleafHost_Editor // @@ -938,14 +882,14 @@ flyleafHost_Editor.DragMove = true; flyleafHost_Editor.IsFullScreen = false; flyleafHost_Editor.KeyBindings = true; - flyleafHost_Editor.Location = new Point(0, 0); + flyleafHost_Editor.Location = new Point(3, 3); flyleafHost_Editor.Name = "flyleafHost_Editor"; flyleafHost_Editor.OpenOnDrop = false; flyleafHost_Editor.PanMoveOnCtrl = true; flyleafHost_Editor.PanRotateOnShiftWheel = true; flyleafHost_Editor.PanZoomOnCtrlWheel = true; flyleafHost_Editor.Player = null; - flyleafHost_Editor.Size = new Size(500, 352); + flyleafHost_Editor.Size = new Size(514, 286); flyleafHost_Editor.SwapDragEnterOnShift = true; flyleafHost_Editor.SwapOnDrop = true; flyleafHost_Editor.TabIndex = 0; @@ -955,18 +899,18 @@ // tableLayoutPanel_Editor_VLC // tableLayoutPanel_Editor_VLC.ColumnCount = 12; - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 70F)); - tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 60F)); + tableLayoutPanel_Editor_VLC.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F)); tableLayoutPanel_Editor_VLC.Controls.Add(comboBox_Editor_VLC_PlaybackSpeed, 10, 0); tableLayoutPanel_Editor_VLC.Controls.Add(button_Editor_VLC_Fullscreen, 11, 0); tableLayoutPanel_Editor_VLC.Controls.Add(button_Editor_VLC_PlayPause, 0, 0); @@ -977,11 +921,11 @@ tableLayoutPanel_Editor_VLC.Controls.Add(button_Editor_VLC_VolumeMute, 2, 0); tableLayoutPanel_Editor_VLC.Controls.Add(trackBar_Editor_VLC_Volume, 3, 0); tableLayoutPanel_Editor_VLC.Dock = DockStyle.Fill; - tableLayoutPanel_Editor_VLC.Location = new Point(0, 0); + tableLayoutPanel_Editor_VLC.Location = new Point(3, 295); tableLayoutPanel_Editor_VLC.Name = "tableLayoutPanel_Editor_VLC"; tableLayoutPanel_Editor_VLC.RowCount = 1; tableLayoutPanel_Editor_VLC.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); - tableLayoutPanel_Editor_VLC.Size = new Size(500, 35); + tableLayoutPanel_Editor_VLC.Size = new Size(514, 34); tableLayoutPanel_Editor_VLC.TabIndex = 0; // // comboBox_Editor_VLC_PlaybackSpeed @@ -992,10 +936,10 @@ comboBox_Editor_VLC_PlaybackSpeed.FormattingEnabled = true; comboBox_Editor_VLC_PlaybackSpeed.ItemHeight = 13; comboBox_Editor_VLC_PlaybackSpeed.Items.AddRange(new object[] { "x0,25", "x0,5", "x1", "x1,5", "x2", "x4", "x8", "x16" }); - comboBox_Editor_VLC_PlaybackSpeed.Location = new Point(398, 7); + comboBox_Editor_VLC_PlaybackSpeed.Location = new Point(427, 7); comboBox_Editor_VLC_PlaybackSpeed.Margin = new Padding(3, 7, 3, 7); comboBox_Editor_VLC_PlaybackSpeed.Name = "comboBox_Editor_VLC_PlaybackSpeed"; - comboBox_Editor_VLC_PlaybackSpeed.Size = new Size(64, 21); + comboBox_Editor_VLC_PlaybackSpeed.Size = new Size(54, 21); comboBox_Editor_VLC_PlaybackSpeed.TabIndex = 9; comboBox_Editor_VLC_PlaybackSpeed.SelectedIndexChanged += comboBox_Editor_VLC_PlaybackSpeed_SelectedIndexChanged; // @@ -1004,9 +948,9 @@ button_Editor_VLC_Fullscreen.BackgroundImage = (Image)resources.GetObject("button_Editor_VLC_Fullscreen.BackgroundImage"); button_Editor_VLC_Fullscreen.BackgroundImageLayout = ImageLayout.Zoom; button_Editor_VLC_Fullscreen.Dock = DockStyle.Fill; - button_Editor_VLC_Fullscreen.Location = new Point(468, 3); + button_Editor_VLC_Fullscreen.Location = new Point(487, 3); button_Editor_VLC_Fullscreen.Name = "button_Editor_VLC_Fullscreen"; - button_Editor_VLC_Fullscreen.Size = new Size(29, 29); + button_Editor_VLC_Fullscreen.Size = new Size(24, 28); button_Editor_VLC_Fullscreen.TabIndex = 7; button_Editor_VLC_Fullscreen.UseVisualStyleBackColor = true; button_Editor_VLC_Fullscreen.Click += button_Editor_VLC_Fullscreen_Click; @@ -1018,7 +962,7 @@ button_Editor_VLC_PlayPause.Dock = DockStyle.Fill; button_Editor_VLC_PlayPause.Location = new Point(3, 3); button_Editor_VLC_PlayPause.Name = "button_Editor_VLC_PlayPause"; - button_Editor_VLC_PlayPause.Size = new Size(29, 29); + button_Editor_VLC_PlayPause.Size = new Size(24, 28); button_Editor_VLC_PlayPause.TabIndex = 0; button_Editor_VLC_PlayPause.UseVisualStyleBackColor = true; button_Editor_VLC_PlayPause.Click += button_Editor_VLC_PlayPause_Click; @@ -1028,9 +972,9 @@ button_Editor_VLC_Stop.BackgroundImage = (Image)resources.GetObject("button_Editor_VLC_Stop.BackgroundImage"); button_Editor_VLC_Stop.BackgroundImageLayout = ImageLayout.Zoom; button_Editor_VLC_Stop.Dock = DockStyle.Fill; - button_Editor_VLC_Stop.Location = new Point(38, 3); + button_Editor_VLC_Stop.Location = new Point(33, 3); button_Editor_VLC_Stop.Name = "button_Editor_VLC_Stop"; - button_Editor_VLC_Stop.Size = new Size(29, 29); + button_Editor_VLC_Stop.Size = new Size(24, 28); button_Editor_VLC_Stop.TabIndex = 1; button_Editor_VLC_Stop.UseVisualStyleBackColor = true; button_Editor_VLC_Stop.Click += button_Editor_VLC_Stop_Click; @@ -1040,9 +984,9 @@ label_Editor_VLC_Starttime.AutoSize = true; tableLayoutPanel_Editor_VLC.SetColumnSpan(label_Editor_VLC_Starttime, 2); label_Editor_VLC_Starttime.Dock = DockStyle.Fill; - label_Editor_VLC_Starttime.Location = new Point(178, 0); + label_Editor_VLC_Starttime.Location = new Point(153, 0); label_Editor_VLC_Starttime.Name = "label_Editor_VLC_Starttime"; - label_Editor_VLC_Starttime.Size = new Size(64, 35); + label_Editor_VLC_Starttime.Size = new Size(54, 34); label_Editor_VLC_Starttime.TabIndex = 2; label_Editor_VLC_Starttime.Text = "00:00:00"; label_Editor_VLC_Starttime.TextAlign = ContentAlignment.MiddleCenter; @@ -1051,10 +995,10 @@ // trackBar_Editor_VLC.Dock = DockStyle.Fill; trackBar_Editor_VLC.LargeChange = 10; - trackBar_Editor_VLC.Location = new Point(248, 3); + trackBar_Editor_VLC.Location = new Point(213, 3); trackBar_Editor_VLC.Maximum = 100; trackBar_Editor_VLC.Name = "trackBar_Editor_VLC"; - trackBar_Editor_VLC.Size = new Size(74, 29); + trackBar_Editor_VLC.Size = new Size(148, 28); trackBar_Editor_VLC.SmallChange = 5; trackBar_Editor_VLC.TabIndex = 4; trackBar_Editor_VLC.TickStyle = TickStyle.None; @@ -1066,9 +1010,9 @@ label_Editor_VLC_Endtime.AutoSize = true; tableLayoutPanel_Editor_VLC.SetColumnSpan(label_Editor_VLC_Endtime, 2); label_Editor_VLC_Endtime.Dock = DockStyle.Fill; - label_Editor_VLC_Endtime.Location = new Point(328, 0); + label_Editor_VLC_Endtime.Location = new Point(367, 0); label_Editor_VLC_Endtime.Name = "label_Editor_VLC_Endtime"; - label_Editor_VLC_Endtime.Size = new Size(64, 35); + label_Editor_VLC_Endtime.Size = new Size(54, 34); label_Editor_VLC_Endtime.TabIndex = 3; label_Editor_VLC_Endtime.Text = "00:00:00"; label_Editor_VLC_Endtime.TextAlign = ContentAlignment.MiddleCenter; @@ -1078,9 +1022,9 @@ button_Editor_VLC_VolumeMute.BackgroundImage = (Image)resources.GetObject("button_Editor_VLC_VolumeMute.BackgroundImage"); button_Editor_VLC_VolumeMute.BackgroundImageLayout = ImageLayout.Zoom; button_Editor_VLC_VolumeMute.Dock = DockStyle.Fill; - button_Editor_VLC_VolumeMute.Location = new Point(73, 3); + button_Editor_VLC_VolumeMute.Location = new Point(63, 3); button_Editor_VLC_VolumeMute.Name = "button_Editor_VLC_VolumeMute"; - button_Editor_VLC_VolumeMute.Size = new Size(29, 29); + button_Editor_VLC_VolumeMute.Size = new Size(24, 28); button_Editor_VLC_VolumeMute.TabIndex = 5; button_Editor_VLC_VolumeMute.UseVisualStyleBackColor = true; button_Editor_VLC_VolumeMute.Click += button_Editor_VLC_VolumeMute_Click; @@ -1090,10 +1034,10 @@ tableLayoutPanel_Editor_VLC.SetColumnSpan(trackBar_Editor_VLC_Volume, 2); trackBar_Editor_VLC_Volume.Dock = DockStyle.Fill; trackBar_Editor_VLC_Volume.LargeChange = 0; - trackBar_Editor_VLC_Volume.Location = new Point(108, 3); + trackBar_Editor_VLC_Volume.Location = new Point(93, 3); trackBar_Editor_VLC_Volume.Maximum = 100; trackBar_Editor_VLC_Volume.Name = "trackBar_Editor_VLC_Volume"; - trackBar_Editor_VLC_Volume.Size = new Size(64, 29); + trackBar_Editor_VLC_Volume.Size = new Size(54, 28); trackBar_Editor_VLC_Volume.SmallChange = 0; trackBar_Editor_VLC_Volume.TabIndex = 6; trackBar_Editor_VLC_Volume.TickStyle = TickStyle.None; @@ -1118,23 +1062,23 @@ tableLayoutPanel_Editor_PlayerTrim.Controls.Add(label_Size_Trim, 2, 2); tableLayoutPanel_Editor_PlayerTrim.Controls.Add(label_Size_Trim_Value, 3, 2); tableLayoutPanel_Editor_PlayerTrim.Dock = DockStyle.Fill; - tableLayoutPanel_Editor_PlayerTrim.Location = new Point(0, 0); + tableLayoutPanel_Editor_PlayerTrim.Location = new Point(3, 335); tableLayoutPanel_Editor_PlayerTrim.Name = "tableLayoutPanel_Editor_PlayerTrim"; tableLayoutPanel_Editor_PlayerTrim.RowCount = 4; - tableLayoutPanel_Editor_PlayerTrim.RowStyles.Add(new RowStyle(SizeType.Absolute, 21F)); - tableLayoutPanel_Editor_PlayerTrim.RowStyles.Add(new RowStyle(SizeType.Absolute, 21F)); - tableLayoutPanel_Editor_PlayerTrim.RowStyles.Add(new RowStyle(SizeType.Absolute, 21F)); - tableLayoutPanel_Editor_PlayerTrim.RowStyles.Add(new RowStyle(SizeType.Absolute, 21F)); - tableLayoutPanel_Editor_PlayerTrim.Size = new Size(500, 25); + tableLayoutPanel_Editor_PlayerTrim.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); + tableLayoutPanel_Editor_PlayerTrim.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); + tableLayoutPanel_Editor_PlayerTrim.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); + tableLayoutPanel_Editor_PlayerTrim.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); + tableLayoutPanel_Editor_PlayerTrim.Size = new Size(514, 79); tableLayoutPanel_Editor_PlayerTrim.TabIndex = 29; // // linkLabel_Modelname_Trim_Value // linkLabel_Modelname_Trim_Value.AutoSize = true; linkLabel_Modelname_Trim_Value.Dock = DockStyle.Fill; - linkLabel_Modelname_Trim_Value.Location = new Point(147, 21); + linkLabel_Modelname_Trim_Value.Location = new Point(147, 20); linkLabel_Modelname_Trim_Value.Name = "linkLabel_Modelname_Trim_Value"; - linkLabel_Modelname_Trim_Value.Size = new Size(350, 21); + linkLabel_Modelname_Trim_Value.Size = new Size(364, 20); linkLabel_Modelname_Trim_Value.TabIndex = 33; linkLabel_Modelname_Trim_Value.TabStop = true; linkLabel_Modelname_Trim_Value.Text = "Modelname"; @@ -1149,7 +1093,7 @@ label_FavLikesIcon_Trim.Margin = new Padding(0); label_FavLikesIcon_Trim.Name = "label_FavLikesIcon_Trim"; tableLayoutPanel_Editor_PlayerTrim.SetRowSpan(label_FavLikesIcon_Trim, 4); - label_FavLikesIcon_Trim.Size = new Size(32, 84); + label_FavLikesIcon_Trim.Size = new Size(32, 80); label_FavLikesIcon_Trim.TabIndex = 31; label_FavLikesIcon_Trim.Text = "♥"; label_FavLikesIcon_Trim.TextAlign = ContentAlignment.MiddleCenter; @@ -1164,7 +1108,7 @@ pictureBox_HotIcon_Trim.Margin = new Padding(0); pictureBox_HotIcon_Trim.Name = "pictureBox_HotIcon_Trim"; tableLayoutPanel_Editor_PlayerTrim.SetRowSpan(pictureBox_HotIcon_Trim, 4); - pictureBox_HotIcon_Trim.Size = new Size(32, 84); + pictureBox_HotIcon_Trim.Size = new Size(32, 80); pictureBox_HotIcon_Trim.TabIndex = 32; pictureBox_HotIcon_Trim.TabStop = false; // @@ -1175,7 +1119,7 @@ label_Filename_Trim.Font = new Font("Segoe UI", 8.25F); label_Filename_Trim.Location = new Point(67, 0); label_Filename_Trim.Name = "label_Filename_Trim"; - label_Filename_Trim.Size = new Size(74, 21); + label_Filename_Trim.Size = new Size(74, 20); label_Filename_Trim.TabIndex = 17; label_Filename_Trim.Text = "Dateiname:"; label_Filename_Trim.TextAlign = ContentAlignment.MiddleLeft; @@ -1187,7 +1131,7 @@ label_Filename_Trim_Value.Font = new Font("Segoe UI", 8.25F); label_Filename_Trim_Value.Location = new Point(147, 0); label_Filename_Trim_Value.Name = "label_Filename_Trim_Value"; - label_Filename_Trim_Value.Size = new Size(350, 21); + label_Filename_Trim_Value.Size = new Size(364, 20); label_Filename_Trim_Value.TabIndex = 3; label_Filename_Trim_Value.Text = "Filename"; label_Filename_Trim_Value.TextAlign = ContentAlignment.MiddleLeft; @@ -1197,9 +1141,9 @@ label_Modelname_Trim.AutoSize = true; label_Modelname_Trim.Dock = DockStyle.Fill; label_Modelname_Trim.Font = new Font("Segoe UI", 8.25F); - label_Modelname_Trim.Location = new Point(67, 21); + label_Modelname_Trim.Location = new Point(67, 20); label_Modelname_Trim.Name = "label_Modelname_Trim"; - label_Modelname_Trim.Size = new Size(74, 21); + label_Modelname_Trim.Size = new Size(74, 20); label_Modelname_Trim.TabIndex = 19; label_Modelname_Trim.Text = "Model:"; label_Modelname_Trim.TextAlign = ContentAlignment.MiddleLeft; @@ -1209,9 +1153,9 @@ label_Date_Trim.AutoSize = true; label_Date_Trim.Dock = DockStyle.Fill; label_Date_Trim.Font = new Font("Segoe UI", 8.25F); - label_Date_Trim.Location = new Point(67, 63); + label_Date_Trim.Location = new Point(67, 60); label_Date_Trim.Name = "label_Date_Trim"; - label_Date_Trim.Size = new Size(74, 21); + label_Date_Trim.Size = new Size(74, 20); label_Date_Trim.TabIndex = 20; label_Date_Trim.Text = "Datum:"; label_Date_Trim.TextAlign = ContentAlignment.MiddleLeft; @@ -1221,9 +1165,9 @@ label_Date_Trim_Value.AutoSize = true; label_Date_Trim_Value.Dock = DockStyle.Fill; label_Date_Trim_Value.Font = new Font("Segoe UI", 8.25F); - label_Date_Trim_Value.Location = new Point(147, 63); + label_Date_Trim_Value.Location = new Point(147, 60); label_Date_Trim_Value.Name = "label_Date_Trim_Value"; - label_Date_Trim_Value.Size = new Size(350, 21); + label_Date_Trim_Value.Size = new Size(364, 20); label_Date_Trim_Value.TabIndex = 21; label_Date_Trim_Value.Text = "Datum"; label_Date_Trim_Value.TextAlign = ContentAlignment.MiddleLeft; @@ -1232,9 +1176,9 @@ // label_Size_Trim.AutoSize = true; label_Size_Trim.Dock = DockStyle.Fill; - label_Size_Trim.Location = new Point(67, 42); + label_Size_Trim.Location = new Point(67, 40); label_Size_Trim.Name = "label_Size_Trim"; - label_Size_Trim.Size = new Size(74, 21); + label_Size_Trim.Size = new Size(74, 20); label_Size_Trim.TabIndex = 22; label_Size_Trim.Text = "Größe:"; label_Size_Trim.TextAlign = ContentAlignment.MiddleLeft; @@ -1243,108 +1187,71 @@ // label_Size_Trim_Value.AutoSize = true; label_Size_Trim_Value.Dock = DockStyle.Fill; - label_Size_Trim_Value.Location = new Point(147, 42); + label_Size_Trim_Value.Location = new Point(147, 40); label_Size_Trim_Value.Name = "label_Size_Trim_Value"; - label_Size_Trim_Value.Size = new Size(350, 21); + label_Size_Trim_Value.Size = new Size(364, 20); label_Size_Trim_Value.TabIndex = 23; label_Size_Trim_Value.Text = "Größe"; label_Size_Trim_Value.TextAlign = ContentAlignment.MiddleLeft; // - // splitContainer_Editor_cutClips + // tableLayoutPanel_AI // - splitContainer_Editor_cutClips.Dock = DockStyle.Fill; - splitContainer_Editor_cutClips.FixedPanel = FixedPanel.Panel2; - splitContainer_Editor_cutClips.IsSplitterFixed = true; - splitContainer_Editor_cutClips.Location = new Point(0, 0); - splitContainer_Editor_cutClips.Name = "splitContainer_Editor_cutClips"; - splitContainer_Editor_cutClips.Orientation = Orientation.Horizontal; + tableLayoutPanel_AI.ColumnCount = 2; + tableLayoutPanel_AI.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel_AI.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel_AI.Controls.Add(button_AddSplit, 0, 3); + tableLayoutPanel_AI.Controls.Add(button_editClip_scanAI_Results, 1, 4); + tableLayoutPanel_AI.Controls.Add(groupBox_editClip_Options, 0, 2); + tableLayoutPanel_AI.Controls.Add(listView_Split, 0, 0); + tableLayoutPanel_AI.Controls.Add(button_SplitFiles, 1, 3); + tableLayoutPanel_AI.Controls.Add(button_editClip_scanAI, 0, 4); + tableLayoutPanel_AI.Controls.Add(button_Editor_Options, 0, 1); + tableLayoutPanel_AI.Dock = DockStyle.Fill; + tableLayoutPanel_AI.Location = new Point(0, 0); + tableLayoutPanel_AI.Name = "tableLayoutPanel_AI"; + tableLayoutPanel_AI.RowCount = 5; + tableLayoutPanel_AI.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); + tableLayoutPanel_AI.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_AI.RowStyles.Add(new RowStyle(SizeType.Absolute, 227F)); + tableLayoutPanel_AI.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_AI.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F)); + tableLayoutPanel_AI.Size = new Size(296, 417); + tableLayoutPanel_AI.TabIndex = 1; // - // splitContainer_Editor_cutClips.Panel1 + // button_AddSplit // - splitContainer_Editor_cutClips.Panel1.Controls.Add(splitContainer_Editor_Timestamps); - splitContainer_Editor_cutClips.Panel1.Controls.Add(button_AddSplit); + button_AddSplit.BackgroundImageLayout = ImageLayout.Zoom; + button_AddSplit.Dock = DockStyle.Fill; + button_AddSplit.Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + button_AddSplit.Location = new Point(3, 360); + button_AddSplit.Name = "button_AddSplit"; + button_AddSplit.Size = new Size(142, 24); + button_AddSplit.TabIndex = 31; + button_AddSplit.Text = "Hinzufügen"; + button_AddSplit.UseVisualStyleBackColor = true; + button_AddSplit.Click += button_AddSplit_Click; // - // splitContainer_Editor_cutClips.Panel2 + // button_editClip_scanAI_Results // - splitContainer_Editor_cutClips.Panel2.Controls.Add(button_SplitFiles); - splitContainer_Editor_cutClips.Panel2MinSize = 30; - splitContainer_Editor_cutClips.Size = new Size(316, 417); - splitContainer_Editor_cutClips.SplitterDistance = 386; - splitContainer_Editor_cutClips.SplitterWidth = 1; - splitContainer_Editor_cutClips.TabIndex = 0; - // - // splitContainer_Editor_Timestamps - // - splitContainer_Editor_Timestamps.Dock = DockStyle.Fill; - splitContainer_Editor_Timestamps.FixedPanel = FixedPanel.Panel2; - splitContainer_Editor_Timestamps.Location = new Point(0, 0); - splitContainer_Editor_Timestamps.Name = "splitContainer_Editor_Timestamps"; - splitContainer_Editor_Timestamps.Orientation = Orientation.Horizontal; - // - // splitContainer_Editor_Timestamps.Panel1 - // - splitContainer_Editor_Timestamps.Panel1.Controls.Add(listView_Split); - // - // splitContainer_Editor_Timestamps.Panel2 - // - splitContainer_Editor_Timestamps.Panel2.Controls.Add(groupBox_editClip_Options); - splitContainer_Editor_Timestamps.Size = new Size(316, 357); - splitContainer_Editor_Timestamps.SplitterDistance = 90; - splitContainer_Editor_Timestamps.TabIndex = 37; - // - // listView_Split - // - listView_Split.CheckBoxes = true; - listView_Split.Columns.AddRange(new ColumnHeader[] { columnHeader_Trim_Checkbox, columnHeader_Trim_Start, columnHeader_Trim_End, columnHeader_Trim_Duration, columnHeader_Trim_Label }); - listView_Split.Dock = DockStyle.Fill; - listView_Split.Font = new Font("Segoe UI", 9F); - listView_Split.FullRowSelect = true; - listView_Split.GridLines = true; - listView_Split.Location = new Point(0, 0); - listView_Split.Name = "listView_Split"; - listView_Split.OwnerDraw = true; - listView_Split.Size = new Size(316, 90); - listView_Split.Sorting = SortOrder.Ascending; - listView_Split.TabIndex = 1; - listView_Split.UseCompatibleStateImageBehavior = false; - listView_Split.View = View.Details; - listView_Split.ColumnClick += listView_Split_ColumnClick; - listView_Split.DrawColumnHeader += listView_Split_DrawColumnHeader; - listView_Split.DrawItem += listView_Split_DrawItem; - listView_Split.DrawSubItem += listView_Split_DrawSubItem; - listView_Split.ItemSelectionChanged += listView_Split_ItemSelectionChanged; - listView_Split.MouseClick += listView_Split_MouseClick; - // - // columnHeader_Trim_Checkbox - // - columnHeader_Trim_Checkbox.Text = ""; - columnHeader_Trim_Checkbox.Width = 25; - // - // columnHeader_Trim_Start - // - columnHeader_Trim_Start.Text = "Start"; - // - // columnHeader_Trim_End - // - columnHeader_Trim_End.Text = "Ende"; - // - // columnHeader_Trim_Duration - // - columnHeader_Trim_Duration.Text = "Dauer"; - // - // columnHeader_Trim_Label - // - columnHeader_Trim_Label.Text = "Kategorie"; - columnHeader_Trim_Label.Width = 90; + button_editClip_scanAI_Results.Dock = DockStyle.Fill; + button_editClip_scanAI_Results.Enabled = false; + button_editClip_scanAI_Results.Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + button_editClip_scanAI_Results.Location = new Point(151, 390); + button_editClip_scanAI_Results.Name = "button_editClip_scanAI_Results"; + button_editClip_scanAI_Results.Size = new Size(142, 24); + button_editClip_scanAI_Results.TabIndex = 40; + button_editClip_scanAI_Results.Text = "Ergebnis..."; + button_editClip_scanAI_Results.UseVisualStyleBackColor = true; + button_editClip_scanAI_Results.Click += button_editClip_scanAI_Results_Click; // // groupBox_editClip_Options // + tableLayoutPanel_AI.SetColumnSpan(groupBox_editClip_Options, 2); groupBox_editClip_Options.Controls.Add(tableLayoutPanel_scanAI_Options); - groupBox_editClip_Options.Controls.Add(tableLayoutPanel_editClip_ScanAI); groupBox_editClip_Options.Dock = DockStyle.Fill; - groupBox_editClip_Options.Location = new Point(0, 0); + groupBox_editClip_Options.Location = new Point(3, 133); groupBox_editClip_Options.Name = "groupBox_editClip_Options"; - groupBox_editClip_Options.Size = new Size(316, 263); + groupBox_editClip_Options.Size = new Size(290, 221); groupBox_editClip_Options.TabIndex = 37; groupBox_editClip_Options.TabStop = false; groupBox_editClip_Options.Text = "Optionen"; @@ -1380,7 +1287,7 @@ tableLayoutPanel_scanAI_Options.RowStyles.Add(new RowStyle(SizeType.Absolute, 25F)); tableLayoutPanel_scanAI_Options.RowStyles.Add(new RowStyle(SizeType.Absolute, 25F)); tableLayoutPanel_scanAI_Options.RowStyles.Add(new RowStyle(SizeType.Absolute, 25F)); - tableLayoutPanel_scanAI_Options.Size = new Size(310, 207); + tableLayoutPanel_scanAI_Options.Size = new Size(284, 200); tableLayoutPanel_scanAI_Options.TabIndex = 10; // // checkBox_scanAI_UseThresholdForPredictionLabel @@ -1388,11 +1295,12 @@ checkBox_scanAI_UseThresholdForPredictionLabel.AutoSize = true; checkBox_scanAI_UseThresholdForPredictionLabel.Dock = DockStyle.Fill; checkBox_scanAI_UseThresholdForPredictionLabel.Enabled = false; - checkBox_scanAI_UseThresholdForPredictionLabel.Location = new Point(155, 25); + checkBox_scanAI_UseThresholdForPredictionLabel.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); + checkBox_scanAI_UseThresholdForPredictionLabel.Location = new Point(142, 25); checkBox_scanAI_UseThresholdForPredictionLabel.Margin = new Padding(0); checkBox_scanAI_UseThresholdForPredictionLabel.Name = "checkBox_scanAI_UseThresholdForPredictionLabel"; checkBox_scanAI_UseThresholdForPredictionLabel.Padding = new Padding(5, 2, 5, 2); - checkBox_scanAI_UseThresholdForPredictionLabel.Size = new Size(155, 25); + checkBox_scanAI_UseThresholdForPredictionLabel.Size = new Size(142, 25); checkBox_scanAI_UseThresholdForPredictionLabel.TabIndex = 13; checkBox_scanAI_UseThresholdForPredictionLabel.Text = "auch für Kategorien"; checkBox_scanAI_UseThresholdForPredictionLabel.UseVisualStyleBackColor = true; @@ -1403,13 +1311,14 @@ checkBox_scanAI_PornThreshold.AutoSize = true; checkBox_scanAI_PornThreshold.Dock = DockStyle.Fill; checkBox_scanAI_PornThreshold.Enabled = false; + checkBox_scanAI_PornThreshold.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); checkBox_scanAI_PornThreshold.Location = new Point(0, 50); checkBox_scanAI_PornThreshold.Margin = new Padding(0); checkBox_scanAI_PornThreshold.Name = "checkBox_scanAI_PornThreshold"; checkBox_scanAI_PornThreshold.Padding = new Padding(5, 2, 5, 2); - checkBox_scanAI_PornThreshold.Size = new Size(155, 25); + checkBox_scanAI_PornThreshold.Size = new Size(142, 25); checkBox_scanAI_PornThreshold.TabIndex = 11; - checkBox_scanAI_PornThreshold.Text = "[AI] Porn Schwellwert"; + checkBox_scanAI_PornThreshold.Text = "[AI] Porn"; checkBox_scanAI_PornThreshold.UseVisualStyleBackColor = true; checkBox_scanAI_PornThreshold.CheckedChanged += checkBox_scanAI_PornThreshold_CheckedChanged; // @@ -1417,11 +1326,12 @@ // checkBox_scanAI_addToResults.AutoSize = true; checkBox_scanAI_addToResults.Dock = DockStyle.Fill; - checkBox_scanAI_addToResults.Location = new Point(155, 0); + checkBox_scanAI_addToResults.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); + checkBox_scanAI_addToResults.Location = new Point(142, 0); checkBox_scanAI_addToResults.Margin = new Padding(0); checkBox_scanAI_addToResults.Name = "checkBox_scanAI_addToResults"; checkBox_scanAI_addToResults.Padding = new Padding(5, 2, 5, 2); - checkBox_scanAI_addToResults.Size = new Size(155, 25); + checkBox_scanAI_addToResults.Size = new Size(142, 25); checkBox_scanAI_addToResults.TabIndex = 11; checkBox_scanAI_addToResults.Text = "Ergebnisse hinzufügen"; checkBox_scanAI_addToResults.UseVisualStyleBackColor = true; @@ -1430,11 +1340,12 @@ // checkBox_editClip_removeOriginal.AutoSize = true; checkBox_editClip_removeOriginal.Dock = DockStyle.Fill; + checkBox_editClip_removeOriginal.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); checkBox_editClip_removeOriginal.Location = new Point(0, 0); checkBox_editClip_removeOriginal.Margin = new Padding(0); checkBox_editClip_removeOriginal.Name = "checkBox_editClip_removeOriginal"; checkBox_editClip_removeOriginal.Padding = new Padding(5, 2, 5, 2); - checkBox_editClip_removeOriginal.Size = new Size(155, 25); + checkBox_editClip_removeOriginal.Size = new Size(142, 25); checkBox_editClip_removeOriginal.TabIndex = 2; checkBox_editClip_removeOriginal.Text = "Original entfernen"; checkBox_editClip_removeOriginal.UseVisualStyleBackColor = true; @@ -1443,11 +1354,12 @@ // checkBox_scanAI_UseThresholds.AutoSize = true; checkBox_scanAI_UseThresholds.Dock = DockStyle.Fill; + checkBox_scanAI_UseThresholds.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); checkBox_scanAI_UseThresholds.Location = new Point(0, 25); checkBox_scanAI_UseThresholds.Margin = new Padding(0); checkBox_scanAI_UseThresholds.Name = "checkBox_scanAI_UseThresholds"; checkBox_scanAI_UseThresholds.Padding = new Padding(5, 2, 5, 2); - checkBox_scanAI_UseThresholds.Size = new Size(155, 25); + checkBox_scanAI_UseThresholds.Size = new Size(142, 25); checkBox_scanAI_UseThresholds.TabIndex = 12; checkBox_scanAI_UseThresholds.Text = "Schwellwerte beachten"; checkBox_scanAI_UseThresholds.UseVisualStyleBackColor = true; @@ -1458,13 +1370,14 @@ checkBox_scanAI_SexyThreshold.AutoSize = true; checkBox_scanAI_SexyThreshold.Dock = DockStyle.Fill; checkBox_scanAI_SexyThreshold.Enabled = false; + checkBox_scanAI_SexyThreshold.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); checkBox_scanAI_SexyThreshold.Location = new Point(0, 100); checkBox_scanAI_SexyThreshold.Margin = new Padding(0); checkBox_scanAI_SexyThreshold.Name = "checkBox_scanAI_SexyThreshold"; checkBox_scanAI_SexyThreshold.Padding = new Padding(5, 2, 5, 2); - checkBox_scanAI_SexyThreshold.Size = new Size(155, 25); + checkBox_scanAI_SexyThreshold.Size = new Size(142, 25); checkBox_scanAI_SexyThreshold.TabIndex = 10; - checkBox_scanAI_SexyThreshold.Text = "[AI] Sexy Schwellwert"; + checkBox_scanAI_SexyThreshold.Text = "[AI] Sexy"; checkBox_scanAI_SexyThreshold.UseVisualStyleBackColor = true; checkBox_scanAI_SexyThreshold.CheckedChanged += checkBox_scanAI_SexyThreshold_CheckedChanged; // @@ -1477,7 +1390,7 @@ trackBar_scanAI_hentaiThreshold.Margin = new Padding(0); trackBar_scanAI_hentaiThreshold.Maximum = 100; trackBar_scanAI_hentaiThreshold.Name = "trackBar_scanAI_hentaiThreshold"; - trackBar_scanAI_hentaiThreshold.Size = new Size(310, 32); + trackBar_scanAI_hentaiThreshold.Size = new Size(284, 25); trackBar_scanAI_hentaiThreshold.TabIndex = 8; trackBar_scanAI_hentaiThreshold.TickFrequency = 10; trackBar_scanAI_hentaiThreshold.Value = 50; @@ -1487,10 +1400,11 @@ // label_scanAI_pornThreshold_Value.AutoSize = true; label_scanAI_pornThreshold_Value.Dock = DockStyle.Fill; - label_scanAI_pornThreshold_Value.Location = new Point(155, 50); + label_scanAI_pornThreshold_Value.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); + label_scanAI_pornThreshold_Value.Location = new Point(142, 50); label_scanAI_pornThreshold_Value.Margin = new Padding(0); label_scanAI_pornThreshold_Value.Name = "label_scanAI_pornThreshold_Value"; - label_scanAI_pornThreshold_Value.Size = new Size(155, 25); + label_scanAI_pornThreshold_Value.Size = new Size(142, 25); label_scanAI_pornThreshold_Value.TabIndex = 2; label_scanAI_pornThreshold_Value.Text = "0,5"; label_scanAI_pornThreshold_Value.TextAlign = ContentAlignment.MiddleCenter; @@ -1504,7 +1418,7 @@ trackBar_scanAI_pornThreshold.Margin = new Padding(0); trackBar_scanAI_pornThreshold.Maximum = 100; trackBar_scanAI_pornThreshold.Name = "trackBar_scanAI_pornThreshold"; - trackBar_scanAI_pornThreshold.Size = new Size(310, 25); + trackBar_scanAI_pornThreshold.Size = new Size(284, 25); trackBar_scanAI_pornThreshold.TabIndex = 0; trackBar_scanAI_pornThreshold.TickFrequency = 10; trackBar_scanAI_pornThreshold.Value = 50; @@ -1514,10 +1428,11 @@ // label_scanAI_sexyThreshold_Value.AutoSize = true; label_scanAI_sexyThreshold_Value.Dock = DockStyle.Fill; - label_scanAI_sexyThreshold_Value.Location = new Point(155, 100); + label_scanAI_sexyThreshold_Value.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); + label_scanAI_sexyThreshold_Value.Location = new Point(142, 100); label_scanAI_sexyThreshold_Value.Margin = new Padding(0); label_scanAI_sexyThreshold_Value.Name = "label_scanAI_sexyThreshold_Value"; - label_scanAI_sexyThreshold_Value.Size = new Size(155, 25); + label_scanAI_sexyThreshold_Value.Size = new Size(142, 25); label_scanAI_sexyThreshold_Value.TabIndex = 4; label_scanAI_sexyThreshold_Value.Text = "0,5"; label_scanAI_sexyThreshold_Value.TextAlign = ContentAlignment.MiddleCenter; @@ -1531,7 +1446,7 @@ trackBar_scanAI_sexyThreshold.Margin = new Padding(0); trackBar_scanAI_sexyThreshold.Maximum = 100; trackBar_scanAI_sexyThreshold.Name = "trackBar_scanAI_sexyThreshold"; - trackBar_scanAI_sexyThreshold.Size = new Size(310, 25); + trackBar_scanAI_sexyThreshold.Size = new Size(284, 25); trackBar_scanAI_sexyThreshold.TabIndex = 5; trackBar_scanAI_sexyThreshold.TickFrequency = 10; trackBar_scanAI_sexyThreshold.Value = 50; @@ -1541,10 +1456,11 @@ // label_scanAI_hentaiThreshold_Value.AutoSize = true; label_scanAI_hentaiThreshold_Value.Dock = DockStyle.Fill; - label_scanAI_hentaiThreshold_Value.Location = new Point(155, 150); + label_scanAI_hentaiThreshold_Value.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); + label_scanAI_hentaiThreshold_Value.Location = new Point(142, 150); label_scanAI_hentaiThreshold_Value.Margin = new Padding(0); label_scanAI_hentaiThreshold_Value.Name = "label_scanAI_hentaiThreshold_Value"; - label_scanAI_hentaiThreshold_Value.Size = new Size(155, 25); + label_scanAI_hentaiThreshold_Value.Size = new Size(142, 25); label_scanAI_hentaiThreshold_Value.TabIndex = 7; label_scanAI_hentaiThreshold_Value.Text = "0,5"; label_scanAI_hentaiThreshold_Value.TextAlign = ContentAlignment.MiddleCenter; @@ -1554,80 +1470,101 @@ checkBox_scanAI_HentaiThreshold.AutoSize = true; checkBox_scanAI_HentaiThreshold.Dock = DockStyle.Fill; checkBox_scanAI_HentaiThreshold.Enabled = false; + checkBox_scanAI_HentaiThreshold.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); checkBox_scanAI_HentaiThreshold.Location = new Point(0, 150); checkBox_scanAI_HentaiThreshold.Margin = new Padding(0); checkBox_scanAI_HentaiThreshold.Name = "checkBox_scanAI_HentaiThreshold"; checkBox_scanAI_HentaiThreshold.Padding = new Padding(5, 2, 5, 2); - checkBox_scanAI_HentaiThreshold.Size = new Size(155, 25); + checkBox_scanAI_HentaiThreshold.Size = new Size(142, 25); checkBox_scanAI_HentaiThreshold.TabIndex = 9; - checkBox_scanAI_HentaiThreshold.Text = "[AI] Hentai Schwellwert"; + checkBox_scanAI_HentaiThreshold.Text = "[AI] Hentai"; checkBox_scanAI_HentaiThreshold.UseVisualStyleBackColor = true; checkBox_scanAI_HentaiThreshold.CheckedChanged += checkBox_scanAI_HentaiThreshold_CheckedChanged; // - // tableLayoutPanel_editClip_ScanAI + // listView_Split // - tableLayoutPanel_editClip_ScanAI.ColumnCount = 2; - tableLayoutPanel_editClip_ScanAI.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); - tableLayoutPanel_editClip_ScanAI.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); - tableLayoutPanel_editClip_ScanAI.Controls.Add(button_editClip_scanAI, 0, 0); - tableLayoutPanel_editClip_ScanAI.Controls.Add(button_editClip_scanAI_Results, 1, 0); - tableLayoutPanel_editClip_ScanAI.Dock = DockStyle.Bottom; - tableLayoutPanel_editClip_ScanAI.Location = new Point(3, 225); - tableLayoutPanel_editClip_ScanAI.Name = "tableLayoutPanel_editClip_ScanAI"; - tableLayoutPanel_editClip_ScanAI.RowCount = 1; - tableLayoutPanel_editClip_ScanAI.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); - tableLayoutPanel_editClip_ScanAI.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); - tableLayoutPanel_editClip_ScanAI.Size = new Size(310, 35); - tableLayoutPanel_editClip_ScanAI.TabIndex = 9; + listView_Split.CheckBoxes = true; + listView_Split.Columns.AddRange(new ColumnHeader[] { columnHeader_Trim_Checkbox, columnHeader_Trim_Start, columnHeader_Trim_End, columnHeader_Trim_Duration, columnHeader_Trim_Label }); + tableLayoutPanel_AI.SetColumnSpan(listView_Split, 2); + listView_Split.Dock = DockStyle.Fill; + listView_Split.Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + listView_Split.FullRowSelect = true; + listView_Split.GridLines = true; + listView_Split.Location = new Point(3, 3); + listView_Split.Name = "listView_Split"; + listView_Split.OwnerDraw = true; + listView_Split.Size = new Size(290, 94); + listView_Split.Sorting = SortOrder.Ascending; + listView_Split.TabIndex = 1; + listView_Split.UseCompatibleStateImageBehavior = false; + listView_Split.View = View.Details; + listView_Split.ColumnClick += listView_Split_ColumnClick; + listView_Split.DrawColumnHeader += listView_Split_DrawColumnHeader; + listView_Split.DrawItem += listView_Split_DrawItem; + listView_Split.DrawSubItem += listView_Split_DrawSubItem; + listView_Split.ItemSelectionChanged += listView_Split_ItemSelectionChanged; + listView_Split.MouseClick += listView_Split_MouseClick; // - // button_editClip_scanAI + // columnHeader_Trim_Checkbox // - button_editClip_scanAI.Dock = DockStyle.Bottom; - button_editClip_scanAI.Enabled = false; - button_editClip_scanAI.Location = new Point(3, 3); - button_editClip_scanAI.Name = "button_editClip_scanAI"; - button_editClip_scanAI.Size = new Size(149, 29); - button_editClip_scanAI.TabIndex = 41; - button_editClip_scanAI.Text = "Mit AI analysieren"; - button_editClip_scanAI.UseVisualStyleBackColor = true; - button_editClip_scanAI.Click += button_editClip_scanAI_Click; + columnHeader_Trim_Checkbox.Text = ""; + columnHeader_Trim_Checkbox.Width = 25; // - // button_editClip_scanAI_Results + // columnHeader_Trim_Start // - button_editClip_scanAI_Results.Dock = DockStyle.Bottom; - button_editClip_scanAI_Results.Enabled = false; - button_editClip_scanAI_Results.Location = new Point(158, 3); - button_editClip_scanAI_Results.Name = "button_editClip_scanAI_Results"; - button_editClip_scanAI_Results.Size = new Size(149, 29); - button_editClip_scanAI_Results.TabIndex = 40; - button_editClip_scanAI_Results.Text = "Ergebnis..."; - button_editClip_scanAI_Results.UseVisualStyleBackColor = true; - button_editClip_scanAI_Results.Click += button_editClip_scanAI_Results_Click; + columnHeader_Trim_Start.Text = "Start"; // - // button_AddSplit + // columnHeader_Trim_End // - button_AddSplit.BackgroundImageLayout = ImageLayout.Zoom; - button_AddSplit.Dock = DockStyle.Bottom; - button_AddSplit.Location = new Point(0, 357); - button_AddSplit.Name = "button_AddSplit"; - button_AddSplit.Size = new Size(316, 29); - button_AddSplit.TabIndex = 31; - button_AddSplit.Text = "Hinzufügen"; - button_AddSplit.UseVisualStyleBackColor = true; - button_AddSplit.Click += button_AddSplit_Click; + columnHeader_Trim_End.Text = "Ende"; + // + // columnHeader_Trim_Duration + // + columnHeader_Trim_Duration.Text = "Dauer"; + // + // columnHeader_Trim_Label + // + columnHeader_Trim_Label.Text = "Kategorie"; + columnHeader_Trim_Label.Width = 90; // // button_SplitFiles // button_SplitFiles.BackgroundImageLayout = ImageLayout.Zoom; button_SplitFiles.Dock = DockStyle.Fill; - button_SplitFiles.Location = new Point(0, 0); + button_SplitFiles.Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + button_SplitFiles.Location = new Point(151, 360); button_SplitFiles.Name = "button_SplitFiles"; - button_SplitFiles.Size = new Size(316, 30); + button_SplitFiles.Size = new Size(142, 24); button_SplitFiles.TabIndex = 26; button_SplitFiles.Text = "Schneiden"; button_SplitFiles.UseVisualStyleBackColor = true; button_SplitFiles.Click += button_StartSplit_Click; // + // button_editClip_scanAI + // + button_editClip_scanAI.Dock = DockStyle.Fill; + button_editClip_scanAI.Enabled = false; + button_editClip_scanAI.Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + button_editClip_scanAI.Location = new Point(3, 390); + button_editClip_scanAI.Name = "button_editClip_scanAI"; + button_editClip_scanAI.Size = new Size(142, 24); + button_editClip_scanAI.TabIndex = 41; + button_editClip_scanAI.Text = "Mit AI analysieren"; + button_editClip_scanAI.UseVisualStyleBackColor = true; + button_editClip_scanAI.Click += button_editClip_scanAI_Click; + // + // button_Editor_Options + // + tableLayoutPanel_AI.SetColumnSpan(button_Editor_Options, 2); + button_Editor_Options.Dock = DockStyle.Fill; + button_Editor_Options.Location = new Point(3, 103); + button_Editor_Options.Name = "button_Editor_Options"; + button_Editor_Options.Size = new Size(290, 24); + button_Editor_Options.TabIndex = 42; + button_Editor_Options.Text = "Optionen ausblenden"; + button_Editor_Options.UseVisualStyleBackColor = true; + button_Editor_Options.Click += button_Editor_Options_Click; + // // tabPage_Player // tabPage_Player.Controls.Add(splitContainer_Player); @@ -3261,29 +3198,28 @@ tableLayoutPanel_Settings_Main.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F)); tableLayoutPanel_Settings_Main.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F)); tableLayoutPanel_Settings_Main.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F)); - tableLayoutPanel_Settings_Main.Controls.Add(checkBox_checkMFCModels, 6, 1); - tableLayoutPanel_Settings_Main.Controls.Add(checkBox_useCBApi, 0, 1); + tableLayoutPanel_Settings_Main.Controls.Add(checkBox_checkMFCModels, 6, 2); + tableLayoutPanel_Settings_Main.Controls.Add(checkBox_useCBApi, 0, 2); tableLayoutPanel_Settings_Main.Controls.Add(label_AudioDevice, 0, 9); - tableLayoutPanel_Settings_Main.Controls.Add(checkBox_HiddenMode, 0, 0); + tableLayoutPanel_Settings_Main.Controls.Add(checkBox_HiddenMode, 0, 1); tableLayoutPanel_Settings_Main.Controls.Add(button_isFfmpegInstalled, 0, 10); tableLayoutPanel_Settings_Main.Controls.Add(button_deleteObsoleteThumbnails, 6, 10); tableLayoutPanel_Settings_Main.Controls.Add(button_ReloadAudioDevice, 10, 9); - tableLayoutPanel_Settings_Main.Controls.Add(checkBox_warnFreeDiskSpace, 0, 2); - tableLayoutPanel_Settings_Main.Controls.Add(label_AutoShutdown, 10, 6); - tableLayoutPanel_Settings_Main.Controls.Add(comboBox_dateTimePicker_AutoShutdown, 4, 6); - tableLayoutPanel_Settings_Main.Controls.Add(label_warnFreeDiskSpace, 5, 2); + tableLayoutPanel_Settings_Main.Controls.Add(checkBox_warnFreeDiskSpace, 0, 3); + tableLayoutPanel_Settings_Main.Controls.Add(label_AutoShutdown, 10, 8); + tableLayoutPanel_Settings_Main.Controls.Add(comboBox_dateTimePicker_AutoShutdown, 4, 8); + tableLayoutPanel_Settings_Main.Controls.Add(label_warnFreeDiskSpace, 5, 3); tableLayoutPanel_Settings_Main.Controls.Add(comboBox_AudioDevice, 4, 9); - tableLayoutPanel_Settings_Main.Controls.Add(dateTimePicker_AutoShutdown, 2, 6); - tableLayoutPanel_Settings_Main.Controls.Add(checkBox_warnFreeDiskSpace_StopDownloads, 1, 3); - tableLayoutPanel_Settings_Main.Controls.Add(checkBox_useInternalPlayer, 0, 4); - tableLayoutPanel_Settings_Main.Controls.Add(checkBox_dateTime_AutoShutdown, 0, 6); - tableLayoutPanel_Settings_Main.Controls.Add(numericUpDown_warnFreeDiskSpace, 4, 2); - tableLayoutPanel_Settings_Main.Controls.Add(checkBox_PausePlaybackWhenSwitchingTabs, 0, 5); - tableLayoutPanel_Settings_Main.Controls.Add(label_checkSpeed, 0, 7); - tableLayoutPanel_Settings_Main.Controls.Add(comboBox_checkSpeed, 4, 7); - tableLayoutPanel_Settings_Main.Controls.Add(label_Thumbnail, 0, 8); - tableLayoutPanel_Settings_Main.Controls.Add(comboBox_Thumbnail, 4, 8); + tableLayoutPanel_Settings_Main.Controls.Add(dateTimePicker_AutoShutdown, 2, 8); + tableLayoutPanel_Settings_Main.Controls.Add(checkBox_warnFreeDiskSpace_StopDownloads, 1, 4); + tableLayoutPanel_Settings_Main.Controls.Add(checkBox_useInternalPlayer, 0, 5); + tableLayoutPanel_Settings_Main.Controls.Add(checkBox_dateTime_AutoShutdown, 0, 8); + tableLayoutPanel_Settings_Main.Controls.Add(numericUpDown_warnFreeDiskSpace, 4, 3); + tableLayoutPanel_Settings_Main.Controls.Add(checkBox_PausePlaybackWhenSwitchingTabs, 0, 6); tableLayoutPanel_Settings_Main.Controls.Add(button_SaveEntries, 0, 11); + tableLayoutPanel_Settings_Main.Controls.Add(label_ChaturbateLoginStatus, 0, 0); + tableLayoutPanel_Settings_Main.Controls.Add(button_ChaturbateLogin, 3, 0); + tableLayoutPanel_Settings_Main.Controls.Add(checkBox_AutoQuickScan, 0, 7); tableLayoutPanel_Settings_Main.Dock = DockStyle.Fill; tableLayoutPanel_Settings_Main.Location = new Point(3, 18); tableLayoutPanel_Settings_Main.Name = "tableLayoutPanel_Settings_Main"; @@ -3308,7 +3244,7 @@ // tableLayoutPanel_Settings_Main.SetColumnSpan(checkBox_checkMFCModels, 5); checkBox_checkMFCModels.Dock = DockStyle.Fill; - checkBox_checkMFCModels.Location = new Point(207, 25); + checkBox_checkMFCModels.Location = new Point(207, 47); checkBox_checkMFCModels.Name = "checkBox_checkMFCModels"; checkBox_checkMFCModels.Size = new Size(188, 16); checkBox_checkMFCModels.TabIndex = 76; @@ -3319,7 +3255,7 @@ // tableLayoutPanel_Settings_Main.SetColumnSpan(checkBox_useCBApi, 6); checkBox_useCBApi.Dock = DockStyle.Fill; - checkBox_useCBApi.Location = new Point(3, 25); + checkBox_useCBApi.Location = new Point(3, 47); checkBox_useCBApi.Name = "checkBox_useCBApi"; checkBox_useCBApi.Size = new Size(198, 16); checkBox_useCBApi.TabIndex = 74; @@ -3346,7 +3282,7 @@ checkBox_HiddenMode.CheckState = CheckState.Checked; tableLayoutPanel_Settings_Main.SetColumnSpan(checkBox_HiddenMode, 11); checkBox_HiddenMode.Dock = DockStyle.Fill; - checkBox_HiddenMode.Location = new Point(3, 3); + checkBox_HiddenMode.Location = new Point(3, 25); checkBox_HiddenMode.Name = "checkBox_HiddenMode"; checkBox_HiddenMode.Size = new Size(392, 16); checkBox_HiddenMode.TabIndex = 13; @@ -3404,7 +3340,7 @@ // tableLayoutPanel_Settings_Main.SetColumnSpan(checkBox_warnFreeDiskSpace, 4); checkBox_warnFreeDiskSpace.Dock = DockStyle.Fill; - checkBox_warnFreeDiskSpace.Location = new Point(3, 47); + checkBox_warnFreeDiskSpace.Location = new Point(3, 69); checkBox_warnFreeDiskSpace.Name = "checkBox_warnFreeDiskSpace"; checkBox_warnFreeDiskSpace.Size = new Size(98, 16); checkBox_warnFreeDiskSpace.TabIndex = 49; @@ -3417,7 +3353,7 @@ label_AutoShutdown.AutoSize = true; label_AutoShutdown.Dock = DockStyle.Fill; label_AutoShutdown.Font = new Font("Segoe UI", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 0); - label_AutoShutdown.Location = new Point(287, 135); + label_AutoShutdown.Location = new Point(287, 179); label_AutoShutdown.Margin = new Padding(3); label_AutoShutdown.Name = "label_AutoShutdown"; label_AutoShutdown.Size = new Size(108, 16); @@ -3432,7 +3368,7 @@ comboBox_dateTimePicker_AutoShutdown.DropDownStyle = ComboBoxStyle.DropDownList; comboBox_dateTimePicker_AutoShutdown.FormattingEnabled = true; comboBox_dateTimePicker_AutoShutdown.Items.AddRange(new object[] { "Programm beenden", "Computer herunterfahren" }); - comboBox_dateTimePicker_AutoShutdown.Location = new Point(104, 132); + comboBox_dateTimePicker_AutoShutdown.Location = new Point(104, 176); comboBox_dateTimePicker_AutoShutdown.Margin = new Padding(0); comboBox_dateTimePicker_AutoShutdown.Name = "comboBox_dateTimePicker_AutoShutdown"; comboBox_dateTimePicker_AutoShutdown.Size = new Size(180, 21); @@ -3442,7 +3378,7 @@ // tableLayoutPanel_Settings_Main.SetColumnSpan(label_warnFreeDiskSpace, 6); label_warnFreeDiskSpace.Dock = DockStyle.Fill; - label_warnFreeDiskSpace.Location = new Point(157, 47); + label_warnFreeDiskSpace.Location = new Point(157, 69); label_warnFreeDiskSpace.Margin = new Padding(3); label_warnFreeDiskSpace.Name = "label_warnFreeDiskSpace"; label_warnFreeDiskSpace.Size = new Size(238, 16); @@ -3469,7 +3405,7 @@ dateTimePicker_AutoShutdown.CustomFormat = "HH:mm"; dateTimePicker_AutoShutdown.Dock = DockStyle.Fill; dateTimePicker_AutoShutdown.Format = DateTimePickerFormat.Custom; - dateTimePicker_AutoShutdown.Location = new Point(52, 132); + dateTimePicker_AutoShutdown.Location = new Point(52, 176); dateTimePicker_AutoShutdown.Margin = new Padding(0); dateTimePicker_AutoShutdown.Name = "dateTimePicker_AutoShutdown"; dateTimePicker_AutoShutdown.ShowUpDown = true; @@ -3482,7 +3418,7 @@ tableLayoutPanel_Settings_Main.SetColumnSpan(checkBox_warnFreeDiskSpace_StopDownloads, 10); checkBox_warnFreeDiskSpace_StopDownloads.Dock = DockStyle.Fill; checkBox_warnFreeDiskSpace_StopDownloads.Enabled = false; - checkBox_warnFreeDiskSpace_StopDownloads.Location = new Point(29, 69); + checkBox_warnFreeDiskSpace_StopDownloads.Location = new Point(29, 91); checkBox_warnFreeDiskSpace_StopDownloads.Name = "checkBox_warnFreeDiskSpace_StopDownloads"; checkBox_warnFreeDiskSpace_StopDownloads.Size = new Size(366, 16); checkBox_warnFreeDiskSpace_StopDownloads.TabIndex = 52; @@ -3495,7 +3431,7 @@ checkBox_useInternalPlayer.CheckState = CheckState.Checked; tableLayoutPanel_Settings_Main.SetColumnSpan(checkBox_useInternalPlayer, 11); checkBox_useInternalPlayer.Dock = DockStyle.Fill; - checkBox_useInternalPlayer.Location = new Point(3, 91); + checkBox_useInternalPlayer.Location = new Point(3, 113); checkBox_useInternalPlayer.Name = "checkBox_useInternalPlayer"; checkBox_useInternalPlayer.Size = new Size(392, 16); checkBox_useInternalPlayer.TabIndex = 42; @@ -3508,7 +3444,7 @@ checkBox_dateTime_AutoShutdown.AutoSize = true; tableLayoutPanel_Settings_Main.SetColumnSpan(checkBox_dateTime_AutoShutdown, 2); checkBox_dateTime_AutoShutdown.Dock = DockStyle.Fill; - checkBox_dateTime_AutoShutdown.Location = new Point(3, 135); + checkBox_dateTime_AutoShutdown.Location = new Point(3, 179); checkBox_dateTime_AutoShutdown.Name = "checkBox_dateTime_AutoShutdown"; checkBox_dateTime_AutoShutdown.Size = new Size(46, 16); checkBox_dateTime_AutoShutdown.TabIndex = 61; @@ -3520,7 +3456,7 @@ // numericUpDown_warnFreeDiskSpace.Dock = DockStyle.Fill; numericUpDown_warnFreeDiskSpace.Enabled = false; - numericUpDown_warnFreeDiskSpace.Location = new Point(104, 44); + numericUpDown_warnFreeDiskSpace.Location = new Point(104, 66); numericUpDown_warnFreeDiskSpace.Margin = new Padding(0); numericUpDown_warnFreeDiskSpace.Name = "numericUpDown_warnFreeDiskSpace"; numericUpDown_warnFreeDiskSpace.Size = new Size(50, 22); @@ -3535,67 +3471,13 @@ checkBox_PausePlaybackWhenSwitchingTabs.CheckState = CheckState.Checked; tableLayoutPanel_Settings_Main.SetColumnSpan(checkBox_PausePlaybackWhenSwitchingTabs, 11); checkBox_PausePlaybackWhenSwitchingTabs.Dock = DockStyle.Fill; - checkBox_PausePlaybackWhenSwitchingTabs.Location = new Point(3, 113); + checkBox_PausePlaybackWhenSwitchingTabs.Location = new Point(3, 135); checkBox_PausePlaybackWhenSwitchingTabs.Name = "checkBox_PausePlaybackWhenSwitchingTabs"; checkBox_PausePlaybackWhenSwitchingTabs.Size = new Size(392, 16); checkBox_PausePlaybackWhenSwitchingTabs.TabIndex = 70; checkBox_PausePlaybackWhenSwitchingTabs.Text = "Wiedergabe pausieren bei Tabwechsel"; checkBox_PausePlaybackWhenSwitchingTabs.UseVisualStyleBackColor = true; // - // label_checkSpeed - // - label_checkSpeed.AutoSize = true; - tableLayoutPanel_Settings_Main.SetColumnSpan(label_checkSpeed, 4); - label_checkSpeed.Dock = DockStyle.Fill; - label_checkSpeed.Location = new Point(3, 157); - label_checkSpeed.Margin = new Padding(3); - label_checkSpeed.Name = "label_checkSpeed"; - label_checkSpeed.Size = new Size(98, 16); - label_checkSpeed.TabIndex = 29; - label_checkSpeed.Text = "Geschwindigkeit:"; - label_checkSpeed.TextAlign = ContentAlignment.MiddleLeft; - // - // comboBox_checkSpeed - // - tableLayoutPanel_Settings_Main.SetColumnSpan(comboBox_checkSpeed, 6); - comboBox_checkSpeed.Dock = DockStyle.Fill; - comboBox_checkSpeed.DropDownStyle = ComboBoxStyle.DropDownList; - comboBox_checkSpeed.FormattingEnabled = true; - comboBox_checkSpeed.Items.AddRange(new object[] { "Sehr langsam", "Langsam", "Normal", "Schnell", "Sofort" }); - comboBox_checkSpeed.Location = new Point(104, 154); - comboBox_checkSpeed.Margin = new Padding(0); - comboBox_checkSpeed.Name = "comboBox_checkSpeed"; - comboBox_checkSpeed.Size = new Size(180, 21); - comboBox_checkSpeed.TabIndex = 28; - comboBox_checkSpeed.SelectedIndexChanged += comboBox_checkSpeed_SelectedIndexChanged; - // - // label_Thumbnail - // - label_Thumbnail.AutoSize = true; - tableLayoutPanel_Settings_Main.SetColumnSpan(label_Thumbnail, 4); - label_Thumbnail.Dock = DockStyle.Fill; - label_Thumbnail.Location = new Point(3, 179); - label_Thumbnail.Margin = new Padding(3); - label_Thumbnail.Name = "label_Thumbnail"; - label_Thumbnail.Size = new Size(98, 16); - label_Thumbnail.TabIndex = 72; - label_Thumbnail.Text = "Vorschau:"; - label_Thumbnail.TextAlign = ContentAlignment.MiddleLeft; - // - // comboBox_Thumbnail - // - tableLayoutPanel_Settings_Main.SetColumnSpan(comboBox_Thumbnail, 6); - comboBox_Thumbnail.Dock = DockStyle.Fill; - comboBox_Thumbnail.DropDownStyle = ComboBoxStyle.DropDownList; - comboBox_Thumbnail.Enabled = false; - comboBox_Thumbnail.FormattingEnabled = true; - comboBox_Thumbnail.Items.AddRange(new object[] { "Statisches Bild", "Animiertes Bild" }); - comboBox_Thumbnail.Location = new Point(104, 176); - comboBox_Thumbnail.Margin = new Padding(0); - comboBox_Thumbnail.Name = "comboBox_Thumbnail"; - comboBox_Thumbnail.Size = new Size(180, 21); - comboBox_Thumbnail.TabIndex = 71; - // // button_SaveEntries // tableLayoutPanel_Settings_Main.SetColumnSpan(button_SaveEntries, 10); @@ -3607,6 +3489,45 @@ button_SaveEntries.UseVisualStyleBackColor = true; button_SaveEntries.Click += button_SaveEntries_Click; // + // label_ChaturbateLoginStatus + // + label_ChaturbateLoginStatus.AutoSize = true; + tableLayoutPanel_Settings_Main.SetColumnSpan(label_ChaturbateLoginStatus, 3); + label_ChaturbateLoginStatus.Dock = DockStyle.Fill; + label_ChaturbateLoginStatus.Location = new Point(3, 0); + label_ChaturbateLoginStatus.Name = "label_ChaturbateLoginStatus"; + label_ChaturbateLoginStatus.Size = new Size(72, 22); + label_ChaturbateLoginStatus.TabIndex = 77; + label_ChaturbateLoginStatus.Text = "Chaturbate:"; + label_ChaturbateLoginStatus.TextAlign = ContentAlignment.MiddleLeft; + // + // button_ChaturbateLogin + // + tableLayoutPanel_Settings_Main.SetColumnSpan(button_ChaturbateLogin, 3); + button_ChaturbateLogin.Dock = DockStyle.Fill; + button_ChaturbateLogin.Location = new Point(78, 0); + button_ChaturbateLogin.Margin = new Padding(0); + button_ChaturbateLogin.Name = "button_ChaturbateLogin"; + button_ChaturbateLogin.Size = new Size(126, 22); + button_ChaturbateLogin.TabIndex = 78; + button_ChaturbateLogin.Text = "Anmelden"; + button_ChaturbateLogin.UseVisualStyleBackColor = true; + button_ChaturbateLogin.Click += button_ChaturbateLogin_Click; + // + // checkBox_AutoQuickScan + // + checkBox_AutoQuickScan.AutoSize = true; + checkBox_AutoQuickScan.Checked = true; + checkBox_AutoQuickScan.CheckState = CheckState.Checked; + tableLayoutPanel_Settings_Main.SetColumnSpan(checkBox_AutoQuickScan, 11); + checkBox_AutoQuickScan.Dock = DockStyle.Fill; + checkBox_AutoQuickScan.Location = new Point(3, 157); + checkBox_AutoQuickScan.Name = "checkBox_AutoQuickScan"; + checkBox_AutoQuickScan.Size = new Size(392, 16); + checkBox_AutoQuickScan.TabIndex = 79; + checkBox_AutoQuickScan.Text = "Videos nach Abschluss automatisch Schnellscannen"; + checkBox_AutoQuickScan.UseVisualStyleBackColor = true; + // // groupBox_Settings_Downloads // groupBox_Settings_Downloads.Controls.Add(tableLayoutPanel_Settings_Downloads); @@ -4438,15 +4359,7 @@ splitContainer_Editor_Player_Timestamps.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)splitContainer_Editor_Player_Timestamps).EndInit(); splitContainer_Editor_Player_Timestamps.ResumeLayout(false); - splitContainer_Editor_PlayerDetails.Panel1.ResumeLayout(false); - splitContainer_Editor_PlayerDetails.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)splitContainer_Editor_PlayerDetails).EndInit(); - splitContainer_Editor_PlayerDetails.ResumeLayout(false); - splitContainer_Editor_VLC.Panel1.ResumeLayout(false); - splitContainer_Editor_VLC.Panel1.PerformLayout(); - splitContainer_Editor_VLC.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)splitContainer_Editor_VLC).EndInit(); - splitContainer_Editor_VLC.ResumeLayout(false); + tableLayoutPanel_Editor_Player.ResumeLayout(false); tableLayoutPanel_Editor_VLC.ResumeLayout(false); tableLayoutPanel_Editor_VLC.PerformLayout(); ((System.ComponentModel.ISupportInitialize)trackBar_Editor_VLC).EndInit(); @@ -4454,21 +4367,13 @@ tableLayoutPanel_Editor_PlayerTrim.ResumeLayout(false); tableLayoutPanel_Editor_PlayerTrim.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureBox_HotIcon_Trim).EndInit(); - splitContainer_Editor_cutClips.Panel1.ResumeLayout(false); - splitContainer_Editor_cutClips.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)splitContainer_Editor_cutClips).EndInit(); - splitContainer_Editor_cutClips.ResumeLayout(false); - splitContainer_Editor_Timestamps.Panel1.ResumeLayout(false); - splitContainer_Editor_Timestamps.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)splitContainer_Editor_Timestamps).EndInit(); - splitContainer_Editor_Timestamps.ResumeLayout(false); + tableLayoutPanel_AI.ResumeLayout(false); groupBox_editClip_Options.ResumeLayout(false); tableLayoutPanel_scanAI_Options.ResumeLayout(false); tableLayoutPanel_scanAI_Options.PerformLayout(); ((System.ComponentModel.ISupportInitialize)trackBar_scanAI_hentaiThreshold).EndInit(); ((System.ComponentModel.ISupportInitialize)trackBar_scanAI_pornThreshold).EndInit(); ((System.ComponentModel.ISupportInitialize)trackBar_scanAI_sexyThreshold).EndInit(); - tableLayoutPanel_editClip_ScanAI.ResumeLayout(false); tabPage_Player.ResumeLayout(false); splitContainer_Player.Panel1.ResumeLayout(false); splitContainer_Player.Panel2.ResumeLayout(false); @@ -4652,8 +4557,6 @@ private Button button_RecordingsFolder; private Label label_RecordingsFolder; private GroupBox groupBox_Settings_Main; - private ComboBox comboBox_Thumbnail; - private Label label_Thumbnail; private CheckBox checkBox_PausePlaybackWhenSwitchingTabs; private Button button_ReloadAudioDevice; private ComboBox comboBox_AudioDevice; @@ -4679,9 +4582,7 @@ private CheckBox checkBox_moveOnlyManuallyDeletedFiles; private CheckBox checkBox_moveToRecycleBin; private CheckBox checkBox_useInternalPlayer; - private ComboBox comboBox_checkSpeed; private NumericUpDown numericUpDown_MaxConcurrentDownloads; - private Label label_checkSpeed; private CheckBox checkBox_MaxConcurrentDownloads; private CheckBox checkBox_loopFavorites; private TabPage tabPage_Likes; @@ -4782,8 +4683,6 @@ private Label label_Size_Value; private TabPage tabPage_Editor; private SplitContainer splitContainer_Editor_Player_Timestamps; - private SplitContainer splitContainer_Editor_PlayerDetails; - private SplitContainer splitContainer_Editor_VLC; private FlyleafLib.Controls.WinForms.FlyleafHost flyleafHost_Editor; private TableLayoutPanel tableLayoutPanel_Editor_VLC; private Button button_Editor_VLC_Fullscreen; @@ -4804,8 +4703,6 @@ private Label label_Date_Trim_Value; private Label label_Size_Trim; private Label label_Size_Trim_Value; - private SplitContainer splitContainer_Editor_cutClips; - private SplitContainer splitContainer_Editor_Timestamps; private ListView listView_Split; private ColumnHeader columnHeader_Trim_Start; private ColumnHeader columnHeader_Trim_End; @@ -4823,12 +4720,9 @@ private CheckBox checkBox_scanAI_HentaiThreshold; private CheckBox checkBox_scanAI_UseThresholds; private CheckBox checkBox_scanAI_addToResults; - private TableLayoutPanel tableLayoutPanel_editClip_ScanAI; private Button button_editClip_scanAI; private Button button_editClip_scanAI_Results; private CheckBox checkBox_editClip_removeOriginal; - private Button button_AddSplit; - private Button button_SplitFiles; private TabPage tabPage_scanAI_Result; private ListView listView_AI_Result; private ColumnHeader columnHeader_AI_Results_Filename; @@ -4839,7 +4733,6 @@ private ToolStripMenuItem anheftenToolStripMenuItem; private ToolStripMenuItem loslösenToolStripMenuItem; private ColumnHeader columnHeader_Trim_Label; - private Label label_Editor_Label; private ColumnHeader columnHeader_Trim_Checkbox; private Button button_deleteObsoleteThumbnails; private TableLayoutPanel tableLayoutPanel_Likes; @@ -4894,6 +4787,14 @@ private CheckBox checkBox_checkMFCModels; private Button button_player_Unwatch; private Button button_player_Watch; + private Button button_SplitFiles; + private Button button_AddSplit; + private TableLayoutPanel tableLayoutPanel_AI; + private TableLayoutPanel tableLayoutPanel_Editor_Player; + private Button button_Editor_Options; + private Label label_ChaturbateLoginStatus; + private Button button_ChaturbateLogin; + private CheckBox checkBox_AutoQuickScan; } } diff --git a/WinFormsApp1/Form1.cs b/WinFormsApp1/Form1.cs index f05bda8..7547ab2 100644 --- a/WinFormsApp1/Form1.cs +++ b/WinFormsApp1/Form1.cs @@ -60,6 +60,7 @@ namespace WinFormsApp1 HashSet enabledCompletedDownloadTags = new HashSet(); HashSet enabledArchiveTags = new HashSet(); Regex regex_filename = new Regex(@"(0[1-9]|1[012])_(0[1-9]|1[0-9]|2[0-9]|3[0-1])_(19|20\d{2})__(0[0-9]|1[0-9]|2[0-3])-(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])-(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])"); + private List _aiHotspots = new(); int sortColumn = -1; int stoppedCounterTries = 20; int selectedSpeed = 2; // Normal @@ -69,6 +70,7 @@ namespace WinFormsApp1 int itemsBeforeAfterToCheck = 3; int modelProgressCounter = 0; int modelProgressTotal = 0; + private string? _cbSessionCookie; System.Windows.Forms.Timer labelUpdateTimer; private static readonly HashSet onlineStates = new(StringComparer.OrdinalIgnoreCase) { "public", "online" }; @@ -88,6 +90,9 @@ namespace WinFormsApp1 string latestmedia2 = ""; private TrackBarScrubber _playerScrub; private TrackBarScrubber _editorScrub; + private static readonly SemaphoreSlim _downloadStartSemaphore = new SemaphoreSlim(1, 1); + private static DateTime _lastDownloadStart = DateTime.MinValue; + private static readonly TimeSpan _downloadStartGap = TimeSpan.FromSeconds(4); NsfwSpy nsfwSpy = new NsfwSpy(); private static readonly HttpClient _httpClient = new() { @@ -108,14 +113,10 @@ namespace WinFormsApp1 int media1Volume = 100; int media2Volume = 100; DateTime lastActivity; - DateTime loadedModelOnlineStatus; - DateTime loadedOnlineroomsAPI; DateTime? shutdownTime; System.Windows.Forms.ToolTip modelDetailsToolTip = new System.Windows.Forms.ToolTip(); int idleTime = 5; // Time in seconds - int ReloadOnlineroomsTime = 300; // Time in seconds - int likedModelsOnline = 0; - int favoritedModelsOnline = 0; + bool editorOptionsMinimized = true; bool saveChanges = false; bool getProcessInfoRunning = false; bool loadingCompleted = false; @@ -138,7 +139,6 @@ namespace WinFormsApp1 bool invalidLikesCheckRunning = false; bool userDraggingTrackbar = false; bool saveInProgress = false; - bool editorResolutionInitialized = false; string recordingFileFormat = ".mp4"; string latestClipboardItem = ""; string[] startParams = Array.Empty(); @@ -298,6 +298,18 @@ namespace WinFormsApp1 MessageBox.Show(ex.Message, "ReloadDatabase"))); } }; + + + var cf = Properties.Settings.Default.chaturbateSessionToken; + var sid = Properties.Settings.Default.chaturbateSessionID; + + if (!string.IsNullOrWhiteSpace(cf) && !string.IsNullOrWhiteSpace(sid)) + { + _cbSessionCookie = $"cf_clearance={cf}; sessionid={sid}"; + + button_ChaturbateLogin.Text = "Angemeldet"; + button_ChaturbateLogin.ForeColor = Color.Green; + } } catch (System.Exception ex) { @@ -441,39 +453,34 @@ namespace WinFormsApp1 return; } - ImageList imageList = imageList_Thumbnails; - imageList.Images.Clear(); - - if (listView == null || listView.View != View.Tile) - { + // Nur im Tile-Mode Thumbnails laden + if (listView.View != View.Tile) return; - } - if (listView == listView_AI_Result) - { - imageList = imageList_Thumbnails_Temp; - thumbnails = temp_folder!.GetFiles(); - } - else - { - imageList = imageList_Thumbnails; - thumbnails = thumbnailPath!.GetFiles(); - } + // Richtige ImageList wählen + bool isAiResult = listView == listView_AI_Result; + ImageList imageList = isAiResult ? imageList_Thumbnails_Temp : imageList_Thumbnails; - if (!imageList.Images.ContainsKey(validProvider.Keys.ToArray()[0])) - { - imageList.Images.Add(validProvider.Keys.ToArray()[0], Properties.Resources.no_picture_cb); - } + // ❌ WICHTIG: NICHT MEHR LÖSCHEN! + // imageList.Images.Clear(); - if (!imageList.Images.ContainsKey(validProvider.Keys.ToArray()[1])) + // Provider-Placeholders einmalig sicherstellen + var providerKeys = validProvider.Keys.ToArray(); + if (providerKeys.Length >= 2) { - imageList.Images.Add(validProvider.Keys.ToArray()[1], Properties.Resources.no_picture_mfc); + if (!imageList.Images.ContainsKey(providerKeys[0])) + { + imageList.Images.Add(providerKeys[0], Properties.Resources.no_picture_cb); + } + + if (!imageList.Images.ContainsKey(providerKeys[1])) + { + imageList.Images.Add(providerKeys[1], Properties.Resources.no_picture_mfc); + } } if (listView.Items.Count == 0) - { return; - } // Sichtbarer Bereich der ListView System.Drawing.Rectangle visibleArea = listView.ClientRectangle; @@ -485,64 +492,78 @@ namespace WinFormsApp1 if (item.SubItems.Count > 5 && item.SubItems[6] != null) { filename = System.IO.Path.GetFileName(item.SubItems[6].Text); - filename = filename.Replace("HOT ", ""); } else { filename = System.IO.Path.GetFileName(item.SubItems[0].Text); - filename = filename.Replace("HOT ", ""); } + filename = filename.Replace("HOT ", ""); string filenameWithoutExt = System.IO.Path.GetFileNameWithoutExtension(filename); - // Überprüfen, ob das Element im sichtbaren Bereich ist + // Nur Items im sichtbaren Bereich interessieren uns if (item.Bounds.IntersectsWith(visibleArea)) { string modelname = GetModelFromFilename(filename); - var imageData = new ConcurrentDictionary(); - if (!imageList.Images.ContainsKey(filenameWithoutExt)) // Nur wenn Bild noch nicht geladen + // Nur laden, wenn das Bild in der ImageList noch nicht existiert + if (!imageList.Images.ContainsKey(filenameWithoutExt)) { - FileInfo thumbnailfile = new FileInfo(System.IO.Path.Combine(thumbnailPath!.FullName, filenameWithoutExt.Replace("HOT ", "") + ".jpg")); + string thumbPath; - if (listView == listView_AI_Result) + if (isAiResult) { - thumbnailfile = new FileInfo(System.IO.Path.Combine(temp_folder!.FullName, filenameWithoutExt.Replace("HOT ", "") + ".jpg")); + thumbPath = System.IO.Path.Combine( + temp_folder!.FullName, + filenameWithoutExt + ".jpg"); + } + else + { + thumbPath = System.IO.Path.Combine( + thumbnailPath!.FullName, + filenameWithoutExt + ".jpg"); } - if (File.Exists(thumbnailfile.FullName)) + if (File.Exists(thumbPath)) { - using (var stream = new FileStream(thumbnailfile.FullName, FileMode.Open, FileAccess.Read)) + using (var stream = new FileStream(thumbPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { var image = System.Drawing.Image.FromStream(stream); - if (!imageList.Images.ContainsKey(filenameWithoutExt.Replace("HOT ", ""))) + // Key = filenameWithoutExt (ohne „HOT “, ohne Extension) + if (!imageList.Images.ContainsKey(filenameWithoutExt)) { imageList.Images.Add(filenameWithoutExt, image); } } } + } - string url = GetModelURL(modelname); + // ImageIndex setzen: zuerst Thumbnail, sonst Provider-Fallback + string url = GetModelURL(modelname); - if (item.Index != -1 && imageList.Images.ContainsKey(filenameWithoutExt.Replace("HOT ", ""))) + if (item.Index != -1 && imageList.Images.ContainsKey(filenameWithoutExt)) + { + item.ImageIndex = imageList.Images.IndexOfKey(filenameWithoutExt); + } + else + { + foreach (string providerKey in validProvider.Keys) { - item.ImageIndex = imageList.Images.IndexOfKey(filenameWithoutExt.Replace("HOT ", "")); - } - else - { - foreach (string _provider in validProvider.Keys) + if (GetStreamProviderURL(url) == providerKey && + imageList.Images.ContainsKey(providerKey)) { - if (GetStreamProviderURL(url) == _provider) - { - item.ImageIndex = imageList.Images.IndexOfKey(_provider); - } + item.ImageIndex = imageList.Images.IndexOfKey(providerKey); + break; } } } } else { - if (imageList.Images.ContainsKey(filenameWithoutExt)) + // Item nicht sichtbar → Thumbnail wieder aus ImageList schmeißen + // (Provider-Icons lassen wir in Ruhe) + if (!validProvider.Keys.Contains(filenameWithoutExt) && + imageList.Images.ContainsKey(filenameWithoutExt)) { imageList.Images.RemoveByKey(filenameWithoutExt); } @@ -555,6 +576,7 @@ namespace WinFormsApp1 } } + private async void InitializePlayer() { await this.InvokeAsync(() => @@ -562,32 +584,29 @@ namespace WinFormsApp1 Engine.Start(new EngineConfig() { FFmpegPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Resources\ffmpeg"), - -#if RELEASE - LogLevel = LogLevel.Quiet, -#else LogLevel = LogLevel.Debug, LogOutput = ":debug", -#endif UIRefresh = false, UIRefreshInterval = 250 }); Config_Player = new Config(); - Config_Player.Player.VolumeMax = 100; - Config_Player.Player.VolumeOffset = 1; + Config_Player.Audio.VolumeMax = 100; + Config_Player.Audio.VolumeOffset = 1; Config_Editor = new Config(); - Config_Editor.Player.VolumeMax = 100; - Config_Editor.Player.VolumeOffset = 1; + Config_Editor.Audio.VolumeMax = 100; + Config_Editor.Audio.VolumeOffset = 1; flyleafHost_Player.Player?.Dispose(); flyleafHost_Player.Player = new Player(Config_Player); flyleafHost_Player.ToggleFullScreenOnDoubleClick = false; + flyleafHost_Player.Player.PropertyChanged += Player_PropertyChanged; flyleafHost_Editor.Player?.Dispose(); flyleafHost_Editor.Player = new Player(Config_Editor); flyleafHost_Editor.ToggleFullScreenOnDoubleClick = false; + flyleafHost_Editor.Player.PropertyChanged += Editor_PropertyChanged; }); await reloadAudioDevices(); @@ -757,15 +776,16 @@ namespace WinFormsApp1 await AddFileToListView(filepath); } - tabPage_CompletedDownloads.Text = $"Abgeschlossene Downloads ({listView_CompletedDownloads.Items.Count})"; + // statt direktem Text-Setzen: + UpdateCompletedDownloadsTab(); } catch (System.Exception ex) { - // Logging statt MessageBox Console.WriteLine($"Fehler beim Hinzufügen zu CompletedDownloads: {ex.Message}"); } } + private async Task AddFileToListView(string filepath) { FileInfo file = new FileInfo(filepath); @@ -1085,6 +1105,285 @@ namespace WinFormsApp1 } } + private async Task QuickScanVideoForHotspotsAsync(FileInfo video) + { + try + { + const int stepSeconds = 10; // z.B. alle 10 Sekunden ein Frame + + var hotspots = new List(); + + // temp-Folder wie beim großen Scan vorbereiten + if (temp_folder == null || !temp_folder.Exists) + { + temp_folder = new DirectoryInfo( + Path.Combine(executeableFolder.FullName, "temp")); + if (!temp_folder.Exists) + temp_folder.Create(); + } + + // Dauer per ffprobe holen + double duration = await GetVideoDurationSecondsAsync(video.FullName) + .ConfigureAwait(false); + if (duration <= 0) + return; + + // Analyse-Objekt aus Deinem Dictionary holen oder anlegen + if (!analysedFilesAI.TryGetValue(video.Name, out var analysis) || analysis == null) + { + analysis = new AnalyzedFilesAIResults + { + filesize = GetFilesize(video), + ai = new Dictionary() + }; + analysedFilesAI[video.Name] = analysis; + } + else if (analysis.ai == null) + { + analysis.ai = new Dictionary(); + } + + // KEIN using, weil NsfwSpy nicht IDisposable ist + var nsfw = new NsfwSpy(); + + for (int t = 0; t < duration; t += stepSeconds) + { + // Dateiname wie bei Dir, nur einmal aufgebaut + string frameFileName = + $"{Path.GetFileNameWithoutExtension(video.Name)}_{t:D6}.jpg"; + string framePath = Path.Combine(temp_folder.FullName, frameFileName); + + // Frame schnell extrahieren + string args = + $"-ss {t} -i \"{video.FullName}\" -frames:v 1 -qscale:v 7 -y \"{framePath}\""; + + int exitCode = await RunFfmpegAsync(args).ConfigureAwait(false); + if (exitCode != 0 || !File.Exists(framePath)) + continue; + + // --- analysedFilesAI benutzen wie beim kompletten Scan --- + NsfwSpyResult result; + + // Key ist immer der reine Dateiname, so wie du ihn überall verwendest + string key = frameFileName; + + if (!analysis.ai.TryGetValue(key, out result)) + { + // Noch nicht analysiert → jetzt klassifizieren und in analysedFilesAI speichern + result = nsfw.ClassifyImage(framePath); + analysis.ai[key] = result; + } + + // Ergebnisse auch in deine globale results-Liste übernehmen + results.Add(new NsfwSpyValue(framePath, result)); + + // Label aus dem Ergebnis holen + string label = result?.PredictedLabel ?? "Unknown"; + + // nur nicht-neutrale Stellen sammeln + if (!string.Equals(label, "Neutral", StringComparison.OrdinalIgnoreCase)) + { + hotspots.Add(new AiHotspot + { + Start = t, + End = t + stepSeconds, + Label = label + // Score könntest du später noch ergänzen + }); + } + } + + if (hotspots.Count > 0) + { + // JSON neben dem Video, z.B. foo.mp4.ai.quick.json + string jsonPath = Path.ChangeExtension(video.FullName, ".ai.quick.json"); + var json = System.Text.Json.JsonSerializer.Serialize( + hotspots, + new System.Text.Json.JsonSerializerOptions { WriteIndented = true } + ); + + await File.WriteAllTextAsync(jsonPath, json).ConfigureAwait(false); + } + } + catch (Exception ex) + { + WriteToFile($"QuickScanVideoForHotspotsAsync: {ex}"); + } + } + + + private async Task LoadQuickScanIntoSplitListAsync(FileInfo video) + { + try + { + // Pfad zu foo.mp4.ai.quick.json + string quickJsonPath = Path.ChangeExtension(video.FullName, ".ai.quick.json"); + if (!File.Exists(quickJsonPath)) + return; + + string json = await File.ReadAllTextAsync(quickJsonPath); + var hotspots = System.Text.Json.JsonSerializer.Deserialize>(json); + + if (hotspots == null || hotspots.Count == 0) + return; + + // Nach Startzeit sortieren + hotspots = hotspots.OrderBy(h => h.Start).ToList(); + + // Videolänge (falls Player schon geladen ist) + double videoDuration = 0; + if (flyleafHost_Editor.Player != null) + { + videoDuration = flyleafHost_Editor.Player.Duration; + } + + foreach (var hs in hotspots) + { + // Start/End etwas absichern + double start = Math.Max(0, hs.Start); + double end = hs.End <= 0 ? start : hs.End; + + if (videoDuration > 0 && end > videoDuration) + end = videoDuration; + + if (end <= start) + continue; + + string startStr = TimeSpan.FromSeconds(start).ToString(@"hh\:mm\:ss"); + string endStr = TimeSpan.FromSeconds(end).ToString(@"hh\:mm\:ss"); + string durationStr = TimeSpan.FromSeconds(end - start).ToString(@"hh\:mm\:ss"); + + // Duplikate vermeiden (falls schon Einträge vorhanden sind) + bool exists = false; + foreach (ListViewItem existing in listView_Split.Items) + { + if (existing.SubItems.Count > 2 && + existing.SubItems[1].Text == startStr && + existing.SubItems[2].Text == endStr) + { + exists = true; + break; + } + } + if (exists) + continue; + + // 0: Checkbox-Spalte + var item = new ListViewItem(""); + // 1: Start + item.SubItems.Add(startStr); + // 2: End + item.SubItems.Add(endStr); + // 3: Dauer + item.SubItems.Add(durationStr); + // 4: Kategorie / Label aus QuickScan + item.SubItems.Add(hs.Label ?? string.Empty); + + // Optional: automatisch anhaken + if (hs.Label == "Pornography") + { + item.Checked = true; + } + + listView_Split.Items.Add(item); + } + + // Spalten ggf. anpassen + listView_Split.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); + } + catch (Exception ex) + { + WriteToFile($"LoadQuickScanIntoSplitListAsync: {ex}"); + } + } + + + + private Task RunFfmpegAsync(string arguments) + { + return Task.Run(() => + { + try + { + string baseDir = AppDomain.CurrentDomain.BaseDirectory; + string ffmpegExe = System.IO.Path.Combine(baseDir, "ffmpeg.exe"); + + var psi = new ProcessStartInfo + { + FileName = ffmpegExe, + Arguments = arguments, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true + }; + + using (var proc = new Process { StartInfo = psi }) + { + proc.Start(); + // Ausgaben weglesen, damit die Puffer nicht voll laufen + proc.StandardOutput.ReadToEnd(); + proc.StandardError.ReadToEnd(); + proc.WaitForExit(); + return proc.ExitCode; + } + } + catch (Exception ex) + { + WriteToFile($"RunFfmpegAsync: {ex}"); + return -1; + } + }); + } + + private async Task GetVideoDurationSecondsAsync(string filePath) + { + try + { + string ffprobePath = Path.Combine( + AppDomain.CurrentDomain.BaseDirectory, + "ffprobe.exe" + ); + + var psi = new ProcessStartInfo + { + FileName = ffprobePath, + Arguments = "-v error -show_entries format=duration " + + "-of default=noprint_wrappers=1:nokey=1 " + + $"\"{filePath}\"", + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true + }; + + using (var proc = new Process { StartInfo = psi }) + { + proc.Start(); + + string output = await proc.StandardOutput.ReadToEndAsync().ConfigureAwait(false); + await Task.Run(() => proc.WaitForExit()).ConfigureAwait(false); + + output = output.Trim(); + + if (double.TryParse( + output, + NumberStyles.Float, + CultureInfo.InvariantCulture, + out double seconds)) + { + return seconds; + } + } + } + catch (Exception ex) + { + WriteToFile($"GetVideoDurationSecondsAsync: {ex}"); + } + + return 0.0; + } + private bool IsLargeFile(FileInfo file) { @@ -1476,8 +1775,6 @@ namespace WinFormsApp1 { int count = listView_Downloads.Items.Count + 1; - this.Invoke(new MethodInvoker(delegate () { selectedSpeed = comboBox_checkSpeed.SelectedIndex; })); - switch (selectedSpeed) { // Sehr langsam @@ -1972,12 +2269,24 @@ namespace WinFormsApp1 if (File.Exists(sourcePath)) { + // sicherstellen, dass Zielordner existiert + Directory.CreateDirectory(finishedPath!.FullName); File.Move(sourcePath, destinationPath); } + // Optional: nur scannen, wenn Auto-QuickScan aktiv ist + if (checkBox_AutoQuickScan.Checked && File.Exists(destinationPath)) + { + var fileInfo = new FileInfo(destinationPath); + + // QuickScan im Hintergrund starten (nicht blockierend) + _ = QuickScanVideoForHotspotsAsync(fileInfo); + } + return Task.FromResult(destinationPath); } + async Task CheckNextFavLikeItemIfNeeded(System.Windows.Forms.ListViewItem item) { string url = item.SubItems[1].Text; @@ -2679,42 +2988,62 @@ namespace WinFormsApp1 bool isMFC = provider == validProvider.Keys.ElementAt(1); // "MyFreeCams" bool isCB = provider == validProvider.Keys.ElementAt(0); // "Chaturbate" + string outFile = Path.Combine(recordingpath!.FullName, filename); + if (isMFC) { - // ffmpeg.exe vom App-Verzeichnis sicher in PATH prependen - string baseDir = AppDomain.CurrentDomain.BaseDirectory; - string ffmpegExe = System.IO.Path.Combine(baseDir, "ffmpeg.exe"); - string currentPath = Environment.GetEnvironmentVariable("PATH") ?? string.Empty; - if (System.IO.File.Exists(ffmpegExe)) - proc.StartInfo.EnvironmentVariables["PATH"] = baseDir + ";" + currentPath; - - string outFile = System.IO.Path.Combine(recordingpath!.FullName, filename); + // MFC → neuer Modus in recorder.exe proc.StartInfo.Arguments = $"\"{url}\" -o \"{outFile}\""; + // recorder.exe erkennt myfreecams.com und geht in RecordStreamMFC() } else if (isCB) { - proc.StartInfo.Arguments = url + " best -o \"" + System.IO.Path.Combine(recordingpath!.FullName, filename) + "\" -f"; + // Chaturbate → wie gehabt, aber mit Cookie + string baseDir = AppDomain.CurrentDomain.BaseDirectory; + string ffmpegExe = Path.Combine(baseDir, "ffmpeg.exe"); + string currentPath = Environment.GetEnvironmentVariable("PATH") ?? string.Empty; + if (File.Exists(ffmpegExe)) + proc.StartInfo.EnvironmentVariables["PATH"] = baseDir + ";" + currentPath; + + if (!string.IsNullOrWhiteSpace(_cbSessionCookie)) + proc.StartInfo.Arguments = + $"\"{url}\" --http-cookie \"{_cbSessionCookie}\" -o \"{outFile}\""; + else + proc.StartInfo.Arguments = + $"\"{url}\" -o \"{outFile}\""; } else { - proc.StartInfo.Arguments = url + " best -o \"" + System.IO.Path.Combine(recordingpath!.FullName, filename) + "\" -f"; + // alles andere (falls je später weitere Provider dazukommen) + proc.StartInfo.Arguments = $"\"{url}\" -o \"{outFile}\""; } - // Start-Verzögerung - this.Invoke(new MethodInvoker(delegate () { selectedSpeed = comboBox_checkSpeed.SelectedIndex; })); - switch (selectedSpeed) + + // Globale Start-"Ampel": immer mind. 3 Sekunden Abstand zwischen Starts + await _downloadStartSemaphore.WaitAsync(); + try { - case 0: await Task.Delay(3000); break; - case 1: await Task.Delay(2000); break; - case 2: await Task.Delay(1000); break; - case 3: await Task.Delay(500); break; - case 4: await Task.Delay(0); break; - default: await Task.Delay(1000); break; + var now = DateTime.UtcNow; + var earliestNext = _lastDownloadStart + _downloadStartGap; + + if (earliestNext > now) + { + var wait = earliestNext - now; + await Task.Delay(wait); + } + + _lastDownloadStart = DateTime.UtcNow; + + // Prozess wirklich starten + await Task.Run(() => proc.Start()); + } + finally + { + _downloadStartSemaphore.Release(); } - await Task.Run(() => proc.Start()); - // PID + // PID ins ListView schreiben if (listView_Downloads.InvokeRequired) listView_Downloads.Invoke(new MethodInvoker(() => item.SubItems[6].Text = proc.Id.ToString())); else @@ -2723,7 +3052,6 @@ namespace WinFormsApp1 // MFC: prüfen, ob Output wirklich entsteht if (checkBox_useCBApi.Checked && isMFC) { - string outFile = System.IO.Path.Combine(recordingpath!.FullName, filename); bool ok = await WaitForOutputOrExitAsync(outFile, proc.Id, TimeSpan.FromSeconds(15)); if (!ok) { @@ -2731,7 +3059,6 @@ namespace WinFormsApp1 await UpdateItemStatus(item, "Stopped"); await RemoveItemFromDownloadlist(item, modelname); - // Nur wenn deine MFC-Checkbox aktiv ist und Favorit überwacht → zum nächsten MFC-☑ if (checkBox_checkMFCModels.Checked && IsFavoriteWatched(url)) { if (await modelAccessLock.WaitAsync(0)) @@ -2746,7 +3073,10 @@ namespace WinFormsApp1 } } } - catch { /* optional logging */ } + catch + { + // optional logging + } } // ======================================================= @@ -3302,33 +3632,7 @@ namespace WinFormsApp1 private void GenerateVideoThumbnail(FileInfo file) { - if (comboBox_Thumbnail.InvokeRequired) - { - comboBox_Thumbnail.Invoke(new MethodInvoker(delegate - { - if (comboBox_Thumbnail.SelectedIndex == 0) - { - GenerateStaticImage(file); - } - - if (comboBox_Thumbnail.SelectedIndex == 1) - { - //GenerateGif(file); - } - })); - } - else - { - if (comboBox_Thumbnail.SelectedIndex == 0) - { - GenerateStaticImage(file); - } - - if (comboBox_Thumbnail.SelectedIndex == 1) - { - //GenerateGif(file); - } - } + GenerateStaticImage(file); } private void GenerateStaticImage(FileInfo file) @@ -4705,14 +5009,9 @@ namespace WinFormsApp1 private void RebuildTagLists() { - var all = modelDetails.Values - .SelectMany(m => m.tags ?? Enumerable.Empty()) - .Distinct(StringComparer.OrdinalIgnoreCase) - .OrderBy(t => t, StringComparer.OrdinalIgnoreCase) - .ToList(); - - UpdateTagFilterCheckedListBox(all, checkedListBox_CompletedDownloads_Tags); - UpdateTagFilterCheckedListBox(all, checkedListBox_Archive_Tags); + // nimmt nur Tags aus den aktuell gefüllten ListViews + RefreshEnabledCompletedDownloadTags(); + RefreshEnabledArchiveTags(); } @@ -5350,6 +5649,108 @@ namespace WinFormsApp1 } } + private void RefreshEnabledArchiveTags() + { + var foundTags = new HashSet(StringComparer.OrdinalIgnoreCase); + + // Tags aus listView_AllArchivedDownloads einsammeln + if (listView_AllArchivedDownloads.InvokeRequired) + { + listView_AllArchivedDownloads.Invoke(new MethodInvoker(() => + { + CollectTagsFromArchivedDownloads(foundTags); + })); + } + else + { + CollectTagsFromArchivedDownloads(foundTags); + } + + // Enabled-Menge setzen + enabledArchiveTags = foundTags; + + // CheckedListBox komplett aus diesen Tags neu aufbauen + UpdateTagFilterCheckedListBox(enabledArchiveTags, checkedListBox_Archive_Tags); + } + + private void CollectTagsFromArchivedDownloads(HashSet foundTags) + { + foreach (System.Windows.Forms.ListViewItem item in listView_AllArchivedDownloads.Items) + { + string modelname = item.SubItems[1].Text; + if (modelDetails.TryGetValue(modelname, out var details) && details.tags != null) + { + foreach (var tag in details.tags) + { + if (!string.IsNullOrWhiteSpace(tag)) + foundTags.Add(tag); + } + } + } + } + + private void ApplyEnabledStateToArchiveTags() + { + checkedListBox_Archive_Tags.BeginUpdate(); + + for (int i = 0; i < checkedListBox_Archive_Tags.Items.Count; i++) + { + string tag = checkedListBox_Archive_Tags.Items[i].ToString()!; + + // Wenn Tag nicht mehr enabled ist, ggf. abhaken + if (!enabledArchiveTags.Contains(tag) && + checkedListBox_Archive_Tags.GetItemChecked(i)) + { + checkedListBox_Archive_Tags.SetItemChecked(i, false); + } + } + + checkedListBox_Archive_Tags.EndUpdate(); + checkedListBox_Archive_Tags.Invalidate(); + } + + + private void RefreshEnabledCompletedDownloadTags() + { + var foundTags = new HashSet(StringComparer.OrdinalIgnoreCase); + + // Tags aus listView_CompletedDownloads einsammeln + if (listView_CompletedDownloads.InvokeRequired) + { + listView_CompletedDownloads.Invoke(new MethodInvoker(() => + { + CollectTagsFromCompletedDownloads(foundTags); + })); + } + else + { + CollectTagsFromCompletedDownloads(foundTags); + } + + // Enabled-Menge setzen + enabledCompletedDownloadTags = foundTags; + + // CheckedListBox komplett aus diesen Tags neu aufbauen + UpdateTagFilterCheckedListBox(enabledCompletedDownloadTags, checkedListBox_CompletedDownloads_Tags); + } + + + private void CollectTagsFromCompletedDownloads(HashSet foundTags) + { + foreach (System.Windows.Forms.ListViewItem item in listView_CompletedDownloads.Items) + { + string modelname = item.SubItems[1].Text; + if (modelDetails.TryGetValue(modelname, out var details) && details.tags != null) + { + foreach (var tag in details.tags) + { + if (!string.IsNullOrWhiteSpace(tag)) + foundTags.Add(tag); + } + } + } + } + private async Task CreateListViewItemAsync(FileInfo file, bool highlight) { if (!file.Exists || file.Length == 0) @@ -5438,46 +5839,13 @@ namespace WinFormsApp1 } } - // Alle aktiven Tags sammeln im UI-Thread - HashSet foundTags = new(); + // Tags anhand der Archive-Liste aktualisieren + CheckBoxen anpassen + RefreshEnabledArchiveTags(); - if (listView_AllArchivedDownloads.InvokeRequired) - { - listView_AllArchivedDownloads.Invoke(new MethodInvoker(() => - { - foreach (System.Windows.Forms.ListViewItem item in listView_AllArchivedDownloads.Items) - { - string modelname = item.SubItems[1].Text; - if (modelDetails.TryGetValue(modelname, out var details) && details.tags != null) - { - foreach (var tag in details.tags) - { - foundTags.Add(tag); - } - } - } - })); - } - else - { - foreach (System.Windows.Forms.ListViewItem item in listView_AllArchivedDownloads.Items) - { - string modelname = item.SubItems[1].Text; - if (modelDetails.TryGetValue(modelname, out var details) && details.tags != null) - { - foreach (var tag in details.tags) - { - foundTags.Add(tag); - } - } - } - } - - // Tags setzen + Redraw triggern - enabledArchiveTags = foundTags; - checkedListBox_Archive_Tags.Invalidate(); + Cursor.Current = Cursors.Default; } + private async Task loadArchiveDownloadsOfModel(System.Windows.Forms.ListView listview, string modelname) { try @@ -5742,7 +6110,6 @@ namespace WinFormsApp1 this.BeginInvoke(new MethodInvoker(() => checkBox_moveToRecycleBin.Enabled = true)); this.BeginInvoke(new MethodInvoker(() => checkBox_warnFreeDiskSpace.Enabled = true)); this.BeginInvoke(new MethodInvoker(() => checkBox_dateTime_AutoShutdown.Enabled = true)); - this.BeginInvoke(new MethodInvoker(() => comboBox_checkSpeed.Enabled = true)); this.BeginInvoke(new MethodInvoker(() => comboBox_AutoShutdownAction.Enabled = true)); this.BeginInvoke(new MethodInvoker(() => comboBox_dateTimePicker_AutoShutdown.Enabled = true)); this.BeginInvoke(new MethodInvoker(() => numericUpDown_deleteSmallFiles.Enabled = true)); @@ -5753,7 +6120,6 @@ namespace WinFormsApp1 this.BeginInvoke(new MethodInvoker(() => button_KeepFolder.Enabled = true)); this.BeginInvoke(new MethodInvoker(() => button_download_favorites.Enabled = true)); this.BeginInvoke(new MethodInvoker(() => button_download_likes.Enabled = true)); - this.BeginInvoke(new MethodInvoker(() => label_checkSpeed.Enabled = true)); this.BeginInvoke(new MethodInvoker(() => label_deleteSmallFiles.Enabled = true)); this.BeginInvoke(new MethodInvoker(() => label_warnFreeDiskSpace.Enabled = true)); } @@ -5778,7 +6144,6 @@ namespace WinFormsApp1 this.BeginInvoke(new MethodInvoker(() => checkBox_moveToRecycleBin.Enabled = false)); this.BeginInvoke(new MethodInvoker(() => checkBox_warnFreeDiskSpace.Enabled = false)); this.BeginInvoke(new MethodInvoker(() => checkBox_dateTime_AutoShutdown.Enabled = false)); - this.BeginInvoke(new MethodInvoker(() => comboBox_checkSpeed.Enabled = false)); this.BeginInvoke(new MethodInvoker(() => comboBox_AutoShutdownAction.Enabled = false)); this.BeginInvoke(new MethodInvoker(() => comboBox_dateTimePicker_AutoShutdown.Enabled = false)); this.BeginInvoke(new MethodInvoker(() => numericUpDown_deleteSmallFiles.Enabled = false)); @@ -5789,7 +6154,6 @@ namespace WinFormsApp1 this.BeginInvoke(new MethodInvoker(() => button_KeepFolder.Enabled = false)); this.BeginInvoke(new MethodInvoker(() => button_download_favorites.Enabled = false)); this.BeginInvoke(new MethodInvoker(() => button_download_likes.Enabled = false)); - this.BeginInvoke(new MethodInvoker(() => label_checkSpeed.Enabled = false)); this.BeginInvoke(new MethodInvoker(() => label_deleteSmallFiles.Enabled = false)); this.BeginInvoke(new MethodInvoker(() => label_warnFreeDiskSpace.Enabled = false)); } @@ -6199,8 +6563,10 @@ namespace WinFormsApp1 private void UpdateCompletedDownloadsTab() { tabPage_CompletedDownloads.Text = $"Abgeschlossene Downloads ({listView_CompletedDownloads.Items.Count})"; + RefreshEnabledCompletedDownloadTags(); } + private FileInfo? GetFileInfo(System.Windows.Forms.ListViewItem item, System.Windows.Forms.ListView listview) { string filename = item.SubItems[2].Text; @@ -6504,6 +6870,7 @@ namespace WinFormsApp1 await Task.Run(() => deleteThumbnail(file.Name)); } } + /* else { if (System.IO.File.Exists(file.FullName)) @@ -6516,6 +6883,7 @@ namespace WinFormsApp1 } } } + */ } private async Task addItemToDownloadliste(System.Windows.Forms.ListViewItem item) @@ -6693,7 +7061,6 @@ namespace WinFormsApp1 if (flyleafHost_Player.Player != null) { flyleafHost_Player.Player.Open(newFile.FullName); - flyleafHost_Player.Player.PropertyChanged += Player_PropertyChanged; flyleafHost_Player.Player.Pause(); latestmedia1 = newFile.FullName; } @@ -6841,17 +7208,70 @@ namespace WinFormsApp1 if (checkBox_moveToRecycleBin.Checked && checkBox_moveOnlyManuallyDeletedFiles.Checked) { - await Task.Run(() => FileSystem.DeleteFile(file.FullName, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin)); + await Task.Run(() => + FileSystem.DeleteFile(file.FullName, + UIOption.OnlyErrorDialogs, + RecycleOption.SendToRecycleBin)); } else { await DeleteFileAsync(file.FullName); } + // Thumbnail löschen await Task.Run(() => deleteThumbnail(file.Name)); + // --- NEU: Quick-/Fullscan-Tempframes löschen --- + try + { + if (temp_folder != null && temp_folder.Exists) + { + string nameWithExt = file.Name; + string nameWithoutExt = Path.GetFileNameWithoutExtension(file.Name); + + // Fullscan: "fileName.ext-*.jpg" + string patternFull = nameWithExt + "-*.jpg"; + foreach (var img in temp_folder.GetFiles(patternFull)) + { + try { img.Delete(); } catch { } + } + + // Quickscan: "fileName_*.jpg" + string patternQuick = nameWithoutExt + "_*.jpg"; + foreach (var img in temp_folder.GetFiles(patternQuick)) + { + try { img.Delete(); } catch { } + } + } + } + catch { } + + // --- NEU: AI-Ergebnisse aus analysedFilesAI + JSON löschen --- + try + { + if (analysedFilesAI.ContainsKey(file.Name)) + { + analysedFilesAI.Remove(file.Name); + } + + string aiFullJson = Path.ChangeExtension(file.FullName, ".ai.json"); + string aiQuickJson = Path.ChangeExtension(file.FullName, ".ai.quick.json"); + + if (File.Exists(aiFullJson)) + { + try { File.Delete(aiFullJson); } catch { } + } + if (File.Exists(aiQuickJson)) + { + try { File.Delete(aiQuickJson); } catch { } + } + } + catch { } + DirectoryInfo parentDir = new DirectoryInfo(file.DirectoryName!); - if (parentDir.FullName == finishedPath!.FullName || parentDir.FullName == keepPath!.FullName || parentDir.FullName == keepArchivePath!.FullName) + if (parentDir.FullName == finishedPath!.FullName + || parentDir.FullName == keepPath!.FullName + || parentDir.FullName == keepArchivePath!.FullName) { return; } @@ -6861,7 +7281,10 @@ namespace WinFormsApp1 Directory.Delete(parentDir.FullName); } - if (listview != null && (listview == listView_CompletedDownloads || listview == listView_AI_Result || listview == listView_AllArchivedDownloads)) + if (listview != null && + (listview == listView_CompletedDownloads + || listview == listView_AI_Result + || listview == listView_AllArchivedDownloads)) { Task.Run(() => LoadVisibleThumbnails(listview)); } @@ -6873,6 +7296,7 @@ namespace WinFormsApp1 } + private async void button_Download_Click(object sender, EventArgs e) { try @@ -7650,8 +8074,6 @@ namespace WinFormsApp1 HttpResponseMessage response = await client.GetAsync("https://chaturbate.com/api/biocontext/" + modelname); if (response.IsSuccessStatusCode) { - loadedModelOnlineStatus = DateTime.Now; - if (!modelDetails!.ContainsKey(modelname)) { modelDetails.Add(modelname, new ModelDetails @@ -8263,17 +8685,15 @@ namespace WinFormsApp1 // Tags nur aktualisieren, wenn welche geliefert wurden if (updatedInfo.Values.Any(m => m.tags?.Count > 0)) { + // weiter für ModelDetail etc. LoadTagsFromModelDetails(); - var allTags = modelDetails.Values - .SelectMany(md => md.tags ?? Enumerable.Empty()) - .Distinct() - .ToList(); - - UpdateTagFilterCheckedListBox(allTags, checkedListBox_CompletedDownloads_Tags); - UpdateTagFilterCheckedListBox(allTags, checkedListBox_Archive_Tags); + // Tag-Filter nur aus den aktuellen ListViews neu aufbauen + RefreshEnabledCompletedDownloadTags(); + RefreshEnabledArchiveTags(); } + UpdateStatusLabel(""); // fertig }); @@ -8837,13 +9257,7 @@ namespace WinFormsApp1 } splitContainer_Player.SplitterDistance = 375; splitContainer_Player_VLC.SplitterDistance = 336; - splitContainer_Editor_cutClips.SplitterDistance = 376; - splitContainer_Editor_PlayerDetails.SplitterDistance = 322; - splitContainer_Editor_Timestamps.SplitterDistance = 63; splitContainer_Editor_Player_Timestamps.SplitterDistance = 500; - splitContainer_Editor_VLC.SplitterDistance = 283; - comboBox_checkSpeed.SelectedIndex = selectedSpeed; - comboBox_Thumbnail.SelectedIndex = 0; comboBox_AutoShutdownAction.SelectedIndex = 0; comboBox_dateTimePicker_AutoShutdown.SelectedIndex = 0; comboBox_completedDownloadsView.SelectedIndex = 0; @@ -8917,7 +9331,6 @@ namespace WinFormsApp1 Properties.Settings.Default.Save(); } } - comboBox_checkSpeed.SelectedIndex = selectedSpeed; } if (startParams[i] == "/max") { @@ -9717,8 +10130,6 @@ namespace WinFormsApp1 { await this.InvokeAsync(async () => { - flyleafHost_Player.Player.PropertyChanged += Player_PropertyChanged; - int durSec = (int)TimeSpan .FromTicks(flyleafHost_Player.Player.Duration) .TotalSeconds; @@ -10077,13 +10488,6 @@ namespace WinFormsApp1 } else { - /* - foreach (System.Windows.Forms.ListViewItem focusedItem in listview.SelectedItems) - { - await deleteFile(focusedItem); - await deleteItemFromListview(focusedItem, listview); - } - */ var deleteTasks = listview.SelectedItems .Cast() .Select(async item => @@ -12007,12 +12411,6 @@ namespace WinFormsApp1 } } - private void comboBox_checkSpeed_SelectedIndexChanged(object sender, EventArgs e) - { - if (!loadingCompleted) return; - TrySaveSelectedSpeed(comboBox_checkSpeed.SelectedIndex); - } - private static void EnsureSettingsGroupName() { // Vollqualifizierter Settings-Typname -> gültiger Abschnittsname @@ -12811,7 +13209,6 @@ namespace WinFormsApp1 catch { /* defensiv */ } flyleafHost_Editor.Player.Pause(); - flyleafHost_Editor.Player.PropertyChanged += Editor_PropertyChanged; trackBar_Editor_VLC.Minimum = 0; trackBar_Editor_VLC.Maximum = trackBar_Player_VLC.Maximum; @@ -12865,24 +13262,37 @@ namespace WinFormsApp1 listView_Split.Items.Clear(); System.Windows.Forms.ListViewItem lvi = listView_Split.Items.Add(""); + // 0: Checkbox-Spalte ist leer double starttime = 0; System.TimeSpan starttime_time = System.TimeSpan.FromSeconds(starttime); + // 1: Start lvi.SubItems.Add(starttime_time.ToString(@"hh\:mm\:ss")); + // 2: Ende long endtime = trackBar_Editor_VLC.Maximum; System.TimeSpan endtime_time = System.TimeSpan.FromSeconds(endtime); lvi.SubItems.Add(endtime_time.ToString(@"hh\:mm\:ss")); + // 3: Dauer double duration = endtime - starttime; System.TimeSpan duration_time = System.TimeSpan.FromSeconds(duration); lvi.SubItems.Add(duration_time.ToString(@"hh\:mm\:ss")); + + // 4: Kategorie (für die Gesamtlänge leer lassen) + lvi.SubItems.Add(string.Empty); + + // ► QuickScan-Ergebnisse in listView_Split einfügen, falls JSON vorhanden + await LoadQuickScanIntoSplitListAsync(file); + } catch (System.Exception ex) { - System.Windows.Forms.MessageBox.Show(ex.Message, "button_Trim_Video_Click"); + System.Windows.Forms.MessageBox.Show(ex.Message, "button_player_Trim_Video_Click"); } } + + private async void Editor_PropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) @@ -14424,14 +14834,6 @@ namespace WinFormsApp1 } }); } - - // *** UI-Label hier aktualisieren *** - var label = result.PredictedLabel; - if (!string.IsNullOrEmpty(label)) - { - await UpdateLabelVisibility(label_Editor_Label, true); - await UpdateLabelText(label_Editor_Label, label); - } } EnableEditorControls(); @@ -14439,7 +14841,6 @@ namespace WinFormsApp1 if (!scanAIisRunning) { - await UpdateLabelVisibility(label_Editor_Label, false); await UpdateStatusLabel("Abgebrochen!"); EnableEditorControls(); return; @@ -14452,6 +14853,10 @@ namespace WinFormsApp1 // Zeitstempel finden und hinzufügen var relevantTimestamps = FindRelevantTimestamps(results, timestamps); + + // AI-Hotspots-Liste zurücksetzen + _aiHotspots = new List(); + if (relevantTimestamps.Count == 0) { await AddTimestampToEditor(0, false); @@ -14460,11 +14865,16 @@ namespace WinFormsApp1 { foreach (var tsStr in relevantTimestamps) { - double ts = System.TimeSpan.Parse(tsStr).TotalSeconds; + double ts = TimeSpan.Parse(tsStr).TotalSeconds; + _aiHotspots.Add(ts); await AddTimestampToEditor(ts, true); } + + // sortieren & Index zurücksetzen + _aiHotspots = _aiHotspots.Distinct().OrderBy(x => x).ToList(); } + // Labels aktualisieren List itemsToUpdate = new(); listView_Split.Invoke(() => @@ -14486,7 +14896,6 @@ namespace WinFormsApp1 await checkPornographyLabel(item, item.SubItems[4].Text); await UpdateStatusLabel("Alle Zeitstempel hinzugefügt!"); - await UpdateLabelVisibility(label_Editor_Label, false); scanAIisRunning = false; BeginInvoke(() => button_editClip_scanAI.Text = "Mit AI analysieren"); @@ -15386,62 +15795,49 @@ namespace WinFormsApp1 } } + private int MapTrackbarToVolume(TrackBar bar, int maxLibraryVolume = 100) + { + // 0..1 + double t = bar.Value / (double)bar.Maximum; + + // dB-Bereich (unten leiser, oben 0 dB = volle Lautstärke) + const double minDb = -60.0; // kannst du z.B. auf -40, -70 etc. anpassen + double db = minDb + (0 - minDb) * t; // [-60 .. 0] + + // dB → linearer Faktor + double linear = Math.Pow(10.0, db / 20.0); // ca. 0..1 + + // auf 0..maxLibraryVolume skalieren + int vol = (int)Math.Round(linear * maxLibraryVolume); + + // numerisch stumm sauber machen + if (bar.Value == 0) + vol = 0; + + return vol; + } + + private void trackBar_Player_VLC_Volume_Scroll(object sender, EventArgs e) { - if (trackBar_Player_VLC_Volume.InvokeRequired) - { - trackBar_Player_VLC_Volume.Invoke(new MethodInvoker(delegate - { - double normalized = trackBar_Player_VLC_Volume.Value / 100.0; - double logVolume = Math.Pow(normalized, 2); // Quadratische Kurve - media1Volume = (int)(logVolume * 100); - })); - } - else - { - double normalized = trackBar_Player_VLC_Volume.Value / 100.0; - double logVolume = Math.Pow(normalized, 2); // Quadratische Kurve - media1Volume = (int)(logVolume * 100); - } + media1Volume = MapTrackbarToVolume(trackBar_Player_VLC_Volume, 100); flyleafHost_Player.Player.Audio.Volume = media1Volume; - if (media1Volume > 0) - { - button_Player_VLC_VolumeMute.BackgroundImage = Properties.Resources.volume; - } - else - { - button_Player_VLC_VolumeMute.BackgroundImage = Properties.Resources.mute; - } + + button_Player_VLC_VolumeMute.BackgroundImage = + media1Volume > 0 ? Properties.Resources.volume : Properties.Resources.mute; } + private void trackBar_Editor_VLC_Volume_Scroll(object sender, EventArgs e) { - if (trackBar_Editor_VLC_Volume.InvokeRequired) - { - trackBar_Editor_VLC_Volume.Invoke(new MethodInvoker(delegate - { - double normalized = trackBar_Editor_VLC_Volume.Value / 100.0; - double logVolume = Math.Pow(normalized, 2); // Quadratische Kurve - media2Volume = (int)(logVolume * 100); - })); - } - else - { - double normalized = trackBar_Editor_VLC_Volume.Value / 100.0; - double logVolume = Math.Pow(normalized, 2); // Quadratische Kurve - media2Volume = (int)(logVolume * 100); - } + media2Volume = MapTrackbarToVolume(trackBar_Editor_VLC_Volume, 100); flyleafHost_Editor.Player.Audio.Volume = media2Volume; - if (media2Volume > 0) - { - button_Editor_VLC_VolumeMute.BackgroundImage = Properties.Resources.volume; - } - else - { - button_Editor_VLC_VolumeMute.BackgroundImage = Properties.Resources.mute; - } + + button_Editor_VLC_VolumeMute.BackgroundImage = + media2Volume > 0 ? Properties.Resources.volume : Properties.Resources.mute; } + private async void button_ReloadArchivedDownloads_Click(object sender, EventArgs e) { lastActivity = DateTime.Now; @@ -15546,20 +15942,18 @@ namespace WinFormsApp1 } } - private async void button_SetAudioDevice_Click(object sender, EventArgs e) + private void button_SetAudioDevice_Click(object sender, EventArgs e) { try { - foreach (AudioEngine.AudioEndpoint soundDevice in Engine.Audio.Devices) + if (comboBox_AudioDevice.SelectedItem is AudioEngine.AudioEndpoint device) { - if (soundDevice.Name == comboBox_AudioDevice.SelectedItem!.ToString()) - { - flyleafHost_Player.Player.Audio.Device = soundDevice; - flyleafHost_Editor.Player.Audio.Device = soundDevice; - } + flyleafHost_Player.Player.Audio.Device = device; + flyleafHost_Editor.Player.Audio.Device = device; + UpdateStatusLabel("Wiedergabegerät: " + device.Name); } } - catch (System.Exception ex) + catch (Exception ex) { UpdateStatusLabel("Fehler beim Setzen des Wiedergabegeräts: " + ex.Message); } @@ -15569,33 +15963,38 @@ namespace WinFormsApp1 { try { + void FillDevices() + { + comboBox_AudioDevice.Items.Clear(); + + // Optional, damit der Name angezeigt wird + comboBox_AudioDevice.DisplayMember = "Name"; + + foreach (AudioEngine.AudioEndpoint soundDevice in Engine.Audio.Devices) + { + // Ganzes Objekt einfügen, nicht nur den Namen + comboBox_AudioDevice.Items.Add(soundDevice); + } + } + if (comboBox_AudioDevice.InvokeRequired) { - comboBox_AudioDevice.Invoke(new MethodInvoker(delegate - { - foreach (AudioEngine.AudioEndpoint soundDevice in Engine.Audio.Devices) - { - comboBox_AudioDevice.Items.Add(soundDevice.Name); - } - })); + comboBox_AudioDevice.Invoke(new MethodInvoker(FillDevices)); } else { - foreach (AudioEngine.AudioEndpoint soundDevice in Engine.Audio.Devices) - { - comboBox_AudioDevice.Items.Add(soundDevice.Name); - } + FillDevices(); } } - catch (System.Exception ex) + catch (Exception ex) { UpdateStatusLabel("Fehler beim Laden der Wiedergabegeräte: " + ex.Message); } } + private async void button_ReloadAudioDevice_Click(object sender, EventArgs e) { - comboBox_AudioDevice.Items.Clear(); await reloadAudioDevices(); } @@ -15975,20 +16374,21 @@ namespace WinFormsApp1 } } - private async void comboBox_AudioDevice_SelectedIndexChanged(object sender, EventArgs e) + private void comboBox_AudioDevice_SelectedIndexChanged(object sender, EventArgs e) { try { - foreach (AudioEngine.AudioEndpoint soundDevice in Engine.Audio.Devices) + // Wir erwarten hier direkt einen AudioEndpoint aus Items + if (comboBox_AudioDevice.SelectedItem is AudioEngine.AudioEndpoint device) { - if (soundDevice.Name == comboBox_AudioDevice.SelectedItem!.ToString()) - { - flyleafHost_Player.Player.Audio.Device = soundDevice; - flyleafHost_Editor.Player.Audio.Device = soundDevice; - } + flyleafHost_Player.Player.Audio.Device = device; + flyleafHost_Editor.Player.Audio.Device = device; + + // Optional: Status anzeigen + UpdateStatusLabel("Wiedergabegerät: " + device.Name); } } - catch (System.Exception ex) + catch (Exception ex) { UpdateStatusLabel("Fehler beim Setzen des Wiedergabegeräts: " + ex.Message); } @@ -16067,16 +16467,20 @@ namespace WinFormsApp1 { if (checkedListBox_CompletedDownloads_Tags.InvokeRequired) { - checkedListBox_CompletedDownloads_Tags.Invoke(new MethodInvoker(() => ResetCheckedTags(listView_CompletedDownloads, checkedListBox_CompletedDownloads_Tags))); - Task.Run(() => UpdateTagFilterCheckedListBox(tags, checkedListBox_CompletedDownloads_Tags)); + checkedListBox_CompletedDownloads_Tags.Invoke(new MethodInvoker(() => + { + ResetCheckedTags(listView_CompletedDownloads, checkedListBox_CompletedDownloads_Tags); + RefreshEnabledCompletedDownloadTags(); + })); } else { ResetCheckedTags(listView_CompletedDownloads, checkedListBox_CompletedDownloads_Tags); - Task.Run(() => UpdateTagFilterCheckedListBox(tags, checkedListBox_CompletedDownloads_Tags)); + RefreshEnabledCompletedDownloadTags(); } } + private void ResetCheckedTags(System.Windows.Forms.ListView listView, System.Windows.Forms.CheckedListBox checkedListBox) { checkedListBox.BeginUpdate(); @@ -16095,16 +16499,20 @@ namespace WinFormsApp1 { if (checkedListBox_Archive_Tags.InvokeRequired) { - checkedListBox_Archive_Tags.Invoke(new MethodInvoker(() => ResetCheckedTags(listView_AllArchivedDownloads, checkedListBox_Archive_Tags))); - Task.Run(() => UpdateTagFilterCheckedListBox(tags, checkedListBox_Archive_Tags)); + checkedListBox_Archive_Tags.Invoke(new MethodInvoker(() => + { + ResetCheckedTags(listView_AllArchivedDownloads, checkedListBox_Archive_Tags); + RefreshEnabledArchiveTags(); + })); } else { ResetCheckedTags(listView_AllArchivedDownloads, checkedListBox_Archive_Tags); - Task.Run(() => UpdateTagFilterCheckedListBox(tags, checkedListBox_Archive_Tags)); + RefreshEnabledArchiveTags(); } } + private void checkedListBox_Archive_Tags_ItemCheck(object sender, ItemCheckEventArgs e) { string tag = checkedListBox_Archive_Tags.Items[e.Index].ToString()!; @@ -16120,6 +16528,7 @@ namespace WinFormsApp1 })); } + private async void linkLabel_Modelname_Value_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { lastActivity = DateTime.Now; @@ -16502,6 +16911,58 @@ namespace WinFormsApp1 UpdateOne(listView_Favorites, false); } } + + private void button_Editor_Options_Click(object sender, EventArgs e) + { + if (editorOptionsMinimized) + { + editorOptionsMinimized = false; + tableLayoutPanel_AI.RowStyles[2].Height = 0; + button_Editor_Options.Text = "Optionen einblenden"; + + foreach (Control ctl in tableLayoutPanel_AI.Controls) + { + if (tableLayoutPanel_AI.GetRow(ctl) == 2) + ctl.Visible = false; + } + } + else + { + editorOptionsMinimized = true; + tableLayoutPanel_AI.RowStyles[2].Height = 227; + button_Editor_Options.Text = "Optionen ausblenden"; + + foreach (Control ctl in tableLayoutPanel_AI.Controls) + { + if (tableLayoutPanel_AI.GetRow(ctl) == 2) + ctl.Visible = true; + } + } + tableLayoutPanel_AI.PerformLayout(); // zur Sicherheit neu layouten + } + + private void button_ChaturbateLogin_Click(object sender, EventArgs e) + { + using (var loginForm = new ChaturbateLoginForm()) + { + var result = loginForm.ShowDialog(this); + if (result == DialogResult.OK && !string.IsNullOrEmpty(loginForm.SessionCookie)) + { + // 1. In dein Feld speichern (für die aktuelle Laufzeit) + _cbSessionCookie = loginForm.SessionCookie; + + // 2. Zusätzlich im Property "chaturbateSession" persistieren + Properties.Settings.Default.chaturbateSessionToken = loginForm.SessionCookie; + Properties.Settings.Default.chaturbateSessionID = loginForm.SessionCookie; + Properties.Settings.Default.Save(); // nicht vergessen, sonst geht es beim Beenden verloren + + // Optional: Status im UI anzeigen + button_ChaturbateLogin.Text = "Angemeldet"; + button_ChaturbateLogin.ForeColor = Color.Green; + } + } + } + } @@ -16836,3 +17297,11 @@ public sealed class TrackBarScrubber : IDisposable _bar.Scroll -= Bar_Scroll; } } + +class AiHotspot +{ + public int Start { get; set; } + public int End { get; set; } + public string Label { get; set; } = string.Empty; + public float Score { get; set; } +} diff --git a/WinFormsApp1/Form1.resx b/WinFormsApp1/Form1.resx index 08f58f3..27febec 100644 --- a/WinFormsApp1/Form1.resx +++ b/WinFormsApp1/Form1.resx @@ -5557,7 +5557,7 @@ 424, 64 - 100 + 88 diff --git a/WinFormsApp1/Properties/PublishProfiles/FolderProfile.pubxml.user b/WinFormsApp1/Properties/PublishProfiles/FolderProfile.pubxml.user index 600b764..18854db 100644 --- a/WinFormsApp1/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/WinFormsApp1/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -2,7 +2,7 @@ - True|2025-11-24T12:27:08.9306938Z||;True|2025-11-24T12:11:16.9389361+01:00||;True|2025-11-24T08:50:56.2419082+01:00||;True|2025-11-17T10:09:19.4598326+01:00||;True|2025-11-17T10:01:39.8843258+01:00||;True|2025-11-17T09:40:23.3639389+01:00||;True|2025-11-13T14:18:25.1199192+01:00||;True|2025-11-10T09:34:59.9819614+01:00||;True|2025-11-10T09:31:52.9893994+01:00||;True|2025-11-07T07:27:09.2818809+01:00||;True|2025-10-28T07:54:43.4835993+01:00||;True|2025-10-28T07:49:48.9691140+01:00||;False|2025-10-28T07:48:40.9934972+01:00||;True|2025-10-28T07:41:40.9364570+01:00||;True|2025-10-28T07:34:30.3216200+01:00||;True|2025-10-27T07:38:02.5307378+01:00||;True|2025-10-24T12:49:33.3476720+02:00||;True|2025-10-24T12:45:56.3409114+02:00||;True|2025-10-24T12:37:06.7053780+02:00||;True|2025-10-24T12:21:52.0779529+02:00||;True|2025-10-24T11:39:34.0711190+02:00||;True|2025-10-24T11:32:06.8084304+02:00||;True|2025-10-24T10:49:19.8451151+02:00||;True|2025-10-24T10:35:58.7368296+02:00||;True|2025-09-22T09:12:21.1738434+02:00||;True|2025-09-22T08:41:28.2063145+02:00||;True|2025-09-11T09:25:26.7487573+02:00||;True|2025-09-05T10:35:16.3265491+02:00||;True|2025-08-13T07:12:45.6489499+02:00||;True|2025-08-08T07:25:38.8935816+02:00||;True|2025-08-08T07:19:07.3835648+02:00||;True|2025-08-06T07:38:46.3420158+02:00||;True|2025-07-16T07:41:34.3557961+02:00||;True|2025-07-15T11:01:48.5566218+02:00||;True|2025-07-07T14:59:37.1240379+02:00||;False|2025-07-07T14:57:39.0613209+02:00||;True|2025-07-07T06:29:53.8853096+02:00||;True|2025-07-06T23:39:21.1017631+02:00||;True|2025-07-06T23:24:37.7792733+02:00||;False|2025-07-06T23:19:52.7135594+02:00||;True|2025-07-06T05:55:51.5281444+02:00||;True|2025-07-06T05:14:26.6590895+02:00||;True|2025-07-06T05:07:43.4335057+02:00||;False|2025-07-06T05:06:42.5442365+02:00||;True|2025-06-27T09:56:34.6625992+02:00||;True|2025-06-27T09:55:33.6399545+02:00||;True|2025-06-27T09:35:44.7409289+02:00||;True|2025-06-27T09:35:11.7955472+02:00||;True|2025-06-27T09:23:44.1433728+02:00||;True|2025-06-27T09:10:34.1084041+02:00||;True|2025-06-27T09:06:49.8646149+02:00||;True|2025-06-27T08:55:00.3110860+02:00||;True|2025-06-27T08:47:18.4476580+02:00||;True|2025-06-11T14:42:56.1622930+02:00||;True|2025-06-11T12:33:26.7419370+02:00||;True|2025-06-11T07:48:58.3963584+02:00||;True|2025-06-11T07:42:53.0277862+02:00||;False|2025-06-11T07:39:31.7470335+02:00||;True|2025-06-03T19:58:59.1868907+02:00||;True|2025-06-03T14:33:55.4389500+02:00||;True|2025-06-03T14:16:34.6963918+02:00||;True|2025-06-03T13:26:58.4834917+02:00||;True|2025-06-02T19:01:22.1305699+02:00||;True|2025-06-02T18:27:48.1629252+02:00||;True|2025-06-02T18:12:01.0339452+02:00||;True|2025-04-25T14:02:07.8958669+02:00||;True|2025-04-24T07:32:32.3215936+02:00||;True|2025-04-23T14:24:27.8051379+02:00||;True|2025-04-22T07:23:33.4961515+02:00||;True|2025-04-22T07:16:30.0019927+02:00||;True|2025-04-17T07:35:19.5003910+02:00||;True|2025-04-16T07:51:44.2105982+02:00||;True|2025-04-15T17:39:22.9354819+02:00||;True|2025-04-15T13:59:38.1491035+02:00||;True|2025-04-15T13:26:09.1911007+02:00||;False|2025-04-15T13:24:05.8283613+02:00||;True|2025-04-15T12:05:53.7928484+02:00||;True|2025-04-14T11:46:19.0213400+02:00||;True|2025-04-14T11:19:57.9110025+02:00||;False|2025-04-14T11:18:49.2970157+02:00||;True|2025-04-14T10:56:19.4313583+02:00||;True|2025-04-14T10:09:57.0472222+02:00||;True|2025-04-11T09:36:58.9281719+02:00||;True|2025-04-11T07:56:15.1143584+02:00||;True|2025-04-10T08:08:20.7849097+02:00||;True|2025-04-09T12:56:06.8510589+02:00||;True|2025-04-09T12:39:21.5101756+02:00||;True|2025-04-09T12:35:02.6306664+02:00||;True|2025-04-09T07:53:00.7307516+02:00||;True|2025-04-07T15:17:24.3233000+02:00||;True|2025-04-04T18:09:18.8844877+02:00||;True|2025-04-03T12:27:18.9922316+02:00||;True|2025-04-03T09:48:50.2518754+02:00||;True|2025-03-31T13:53:07.3910797+02:00||;True|2025-03-31T12:46:18.3638787+02:00||;True|2025-03-31T11:01:06.0182900+02:00||;True|2025-03-31T10:55:30.7399322+02:00||;True|2025-03-31T10:41:08.8975919+02:00||;True|2025-03-31T10:15:29.6315309+02:00||;True|2025-03-31T08:53:20.4511304+02:00||; + True|2025-12-15T14:34:06.0764806Z||;True|2025-12-15T15:13:58.2708640+01:00||;True|2025-12-15T14:28:31.8323947+01:00||;True|2025-12-15T12:38:44.4600400+01:00||;True|2025-12-15T12:00:10.7148329+01:00||;True|2025-12-15T10:47:44.3271483+01:00||;False|2025-12-15T09:51:11.4851593+01:00||;True|2025-12-09T17:44:41.8380665+01:00||;True|2025-12-08T19:14:47.6239639+01:00||;True|2025-12-03T07:35:15.9379692+01:00||;True|2025-12-03T07:17:26.7122909+01:00||;True|2025-12-02T15:25:48.5989059+01:00||;True|2025-12-02T14:59:28.2560453+01:00||;True|2025-12-02T08:06:01.5389512+01:00||;True|2025-12-02T07:59:25.8295867+01:00||;True|2025-12-01T15:00:28.3098572+01:00||;True|2025-12-01T13:55:57.5952509+01:00||;True|2025-11-24T13:27:08.9306938+01:00||;True|2025-11-24T12:11:16.9389361+01:00||;True|2025-11-24T08:50:56.2419082+01:00||;True|2025-11-17T10:09:19.4598326+01:00||;True|2025-11-17T10:01:39.8843258+01:00||;True|2025-11-17T09:40:23.3639389+01:00||;True|2025-11-13T14:18:25.1199192+01:00||;True|2025-11-10T09:34:59.9819614+01:00||;True|2025-11-10T09:31:52.9893994+01:00||;True|2025-11-07T07:27:09.2818809+01:00||;True|2025-10-28T07:54:43.4835993+01:00||;True|2025-10-28T07:49:48.9691140+01:00||;False|2025-10-28T07:48:40.9934972+01:00||;True|2025-10-28T07:41:40.9364570+01:00||;True|2025-10-28T07:34:30.3216200+01:00||;True|2025-10-27T07:38:02.5307378+01:00||;True|2025-10-24T12:49:33.3476720+02:00||;True|2025-10-24T12:45:56.3409114+02:00||;True|2025-10-24T12:37:06.7053780+02:00||;True|2025-10-24T12:21:52.0779529+02:00||;True|2025-10-24T11:39:34.0711190+02:00||;True|2025-10-24T11:32:06.8084304+02:00||;True|2025-10-24T10:49:19.8451151+02:00||;True|2025-10-24T10:35:58.7368296+02:00||;True|2025-09-22T09:12:21.1738434+02:00||;True|2025-09-22T08:41:28.2063145+02:00||;True|2025-09-11T09:25:26.7487573+02:00||;True|2025-09-05T10:35:16.3265491+02:00||;True|2025-08-13T07:12:45.6489499+02:00||;True|2025-08-08T07:25:38.8935816+02:00||;True|2025-08-08T07:19:07.3835648+02:00||;True|2025-08-06T07:38:46.3420158+02:00||;True|2025-07-16T07:41:34.3557961+02:00||;True|2025-07-15T11:01:48.5566218+02:00||;True|2025-07-07T14:59:37.1240379+02:00||;False|2025-07-07T14:57:39.0613209+02:00||;True|2025-07-07T06:29:53.8853096+02:00||;True|2025-07-06T23:39:21.1017631+02:00||;True|2025-07-06T23:24:37.7792733+02:00||;False|2025-07-06T23:19:52.7135594+02:00||;True|2025-07-06T05:55:51.5281444+02:00||;True|2025-07-06T05:14:26.6590895+02:00||;True|2025-07-06T05:07:43.4335057+02:00||;False|2025-07-06T05:06:42.5442365+02:00||;True|2025-06-27T09:56:34.6625992+02:00||;True|2025-06-27T09:55:33.6399545+02:00||;True|2025-06-27T09:35:44.7409289+02:00||;True|2025-06-27T09:35:11.7955472+02:00||;True|2025-06-27T09:23:44.1433728+02:00||;True|2025-06-27T09:10:34.1084041+02:00||;True|2025-06-27T09:06:49.8646149+02:00||;True|2025-06-27T08:55:00.3110860+02:00||;True|2025-06-27T08:47:18.4476580+02:00||;True|2025-06-11T14:42:56.1622930+02:00||;True|2025-06-11T12:33:26.7419370+02:00||;True|2025-06-11T07:48:58.3963584+02:00||;True|2025-06-11T07:42:53.0277862+02:00||;False|2025-06-11T07:39:31.7470335+02:00||;True|2025-06-03T19:58:59.1868907+02:00||;True|2025-06-03T14:33:55.4389500+02:00||;True|2025-06-03T14:16:34.6963918+02:00||;True|2025-06-03T13:26:58.4834917+02:00||;True|2025-06-02T19:01:22.1305699+02:00||;True|2025-06-02T18:27:48.1629252+02:00||;True|2025-06-02T18:12:01.0339452+02:00||;True|2025-04-25T14:02:07.8958669+02:00||;True|2025-04-24T07:32:32.3215936+02:00||;True|2025-04-23T14:24:27.8051379+02:00||;True|2025-04-22T07:23:33.4961515+02:00||;True|2025-04-22T07:16:30.0019927+02:00||;True|2025-04-17T07:35:19.5003910+02:00||;True|2025-04-16T07:51:44.2105982+02:00||;True|2025-04-15T17:39:22.9354819+02:00||;True|2025-04-15T13:59:38.1491035+02:00||;True|2025-04-15T13:26:09.1911007+02:00||;False|2025-04-15T13:24:05.8283613+02:00||;True|2025-04-15T12:05:53.7928484+02:00||;True|2025-04-14T11:46:19.0213400+02:00||;True|2025-04-14T11:19:57.9110025+02:00||;False|2025-04-14T11:18:49.2970157+02:00||;True|2025-04-14T10:56:19.4313583+02:00||;True|2025-04-14T10:09:57.0472222+02:00||;True|2025-04-11T09:36:58.9281719+02:00||; \ No newline at end of file diff --git a/WinFormsApp1/Properties/Settings.Designer.cs b/WinFormsApp1/Properties/Settings.Designer.cs index 3237f5e..519b6dc 100644 --- a/WinFormsApp1/Properties/Settings.Designer.cs +++ b/WinFormsApp1/Properties/Settings.Designer.cs @@ -130,5 +130,29 @@ namespace WinFormsApp1.Properties { this["recorderExe"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string chaturbateSessionToken { + get { + return ((string)(this["chaturbateSessionToken"])); + } + set { + this["chaturbateSessionToken"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string chaturbateSessionID { + get { + return ((string)(this["chaturbateSessionID"])); + } + set { + this["chaturbateSessionID"] = value; + } + } } } diff --git a/WinFormsApp1/Properties/Settings.settings b/WinFormsApp1/Properties/Settings.settings index 862f181..8f8871f 100644 --- a/WinFormsApp1/Properties/Settings.settings +++ b/WinFormsApp1/Properties/Settings.settings @@ -29,5 +29,11 @@ + + + + + + \ No newline at end of file diff --git a/WinFormsApp1/Resources/recorder.exe b/WinFormsApp1/Resources/recorder.exe index dfb1f53..6814f7f 100644 Binary files a/WinFormsApp1/Resources/recorder.exe and b/WinFormsApp1/Resources/recorder.exe differ diff --git a/WinFormsApp1/WinFormsApp1.csproj b/WinFormsApp1/WinFormsApp1.csproj index bebbadf..6e72a60 100644 --- a/WinFormsApp1/WinFormsApp1.csproj +++ b/WinFormsApp1/WinFormsApp1.csproj @@ -65,19 +65,22 @@ - - + + - + + - + + + - + @@ -157,15 +160,15 @@ - + - + - + \ No newline at end of file diff --git a/WinFormsApp1/WinFormsApp1.csproj.user b/WinFormsApp1/WinFormsApp1.csproj.user index 959d7b4..f4644dc 100644 --- a/WinFormsApp1/WinFormsApp1.csproj.user +++ b/WinFormsApp1/WinFormsApp1.csproj.user @@ -4,6 +4,9 @@ <_LastSelectedProfileId>C:\Users\Rother\fork\WinFormsApp1\WinFormsApp1\Properties\PublishProfiles\FolderProfile.pubxml + + Form + Form