diff --git a/TVRename#/Custom Controls/TheTVDBCodeFinder.cs b/TVRename#/Custom Controls/TheTVDBCodeFinder.cs
index a352f1112..0c3d01bfb 100644
--- a/TVRename#/Custom Controls/TheTVDBCodeFinder.cs
+++ b/TVRename#/Custom Controls/TheTVDBCodeFinder.cs
@@ -15,6 +15,7 @@
namespace TVRename
{
+ ///
///
/// Summary for TheTVDBCodeFinder
///
@@ -62,6 +63,19 @@ public int SelectedCode()
return -1;
}
}
+ public string SelectedShowName()
+ {
+ try
+ {
+ if (this.lvMatches.SelectedItems.Count == 0) return "";
+
+ return (string)(this.lvMatches.SelectedItems[0].SubItems[1].Text);
+ }
+ catch
+ {
+ return "";
+ }
+ }
private void txtFindThis_TextChanged(object sender, EventArgs e)
{
@@ -186,4 +200,4 @@ private void lvMatches_ColumnClick(object sender, ColumnClickEventArgs e)
lvMatches.Sort();
}
}
-}
\ No newline at end of file
+}
diff --git a/TVRename#/Forms/AutoAddShow.Designer.cs b/TVRename#/Forms/AutoAddShow.Designer.cs
new file mode 100644
index 000000000..7b518f25f
--- /dev/null
+++ b/TVRename#/Forms/AutoAddShow.Designer.cs
@@ -0,0 +1,137 @@
+namespace TVRename.Forms
+{
+ partial class AutoAddShow
+ {
+ ///
+ /// 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()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AutoAddShow));
+ this.cbDirectory = new System.Windows.Forms.ComboBox();
+ this.btnOK = new System.Windows.Forms.Button();
+ this.btnCancel = new System.Windows.Forms.Button();
+ this.pnlCF = new System.Windows.Forms.Panel();
+ this.label1 = new System.Windows.Forms.Label();
+ this.lblDirectoryName = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // cbDirectory
+ //
+ this.cbDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.cbDirectory.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cbDirectory.FormattingEnabled = true;
+ this.cbDirectory.Location = new System.Drawing.Point(89, 317);
+ this.cbDirectory.Name = "cbDirectory";
+ this.cbDirectory.Size = new System.Drawing.Size(221, 21);
+ this.cbDirectory.Sorted = true;
+ this.cbDirectory.TabIndex = 0;
+ //
+ // btnOK
+ //
+ this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnOK.Location = new System.Drawing.Point(392, 350);
+ this.btnOK.Name = "btnOK";
+ this.btnOK.Size = new System.Drawing.Size(75, 23);
+ this.btnOK.TabIndex = 1;
+ this.btnOK.Text = "Quick Add";
+ this.btnOK.UseVisualStyleBackColor = true;
+ this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+ //
+ // btnCancel
+ //
+ this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.btnCancel.Location = new System.Drawing.Point(296, 350);
+ this.btnCancel.Name = "btnCancel";
+ this.btnCancel.Size = new System.Drawing.Size(90, 23);
+ this.btnCancel.TabIndex = 2;
+ this.btnCancel.Text = "Leave for later";
+ this.btnCancel.UseVisualStyleBackColor = true;
+ //
+ // pnlCF
+ //
+ this.pnlCF.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.pnlCF.Location = new System.Drawing.Point(10, 10);
+ this.pnlCF.Name = "pnlCF";
+ this.pnlCF.Size = new System.Drawing.Size(462, 301);
+ this.pnlCF.TabIndex = 3;
+ //
+ // label1
+ //
+ this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(13, 324);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(51, 13);
+ this.label1.TabIndex = 4;
+ this.label1.Text = "Location:";
+ //
+ // lblDirectoryName
+ //
+ this.lblDirectoryName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.lblDirectoryName.AutoSize = true;
+ this.lblDirectoryName.Location = new System.Drawing.Point(318, 322);
+ this.lblDirectoryName.Name = "lblDirectoryName";
+ this.lblDirectoryName.Size = new System.Drawing.Size(0, 13);
+ this.lblDirectoryName.TabIndex = 5;
+ //
+ // AutoAddShow
+ //
+ this.AcceptButton = this.btnOK;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.btnCancel;
+ this.ClientSize = new System.Drawing.Size(479, 385);
+ this.Controls.Add(this.lblDirectoryName);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.pnlCF);
+ this.Controls.Add(this.btnCancel);
+ this.Controls.Add(this.btnOK);
+ this.Controls.Add(this.cbDirectory);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "AutoAddShow";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "New Show Detected...";
+ this.Load += new System.EventHandler(this.AutoAddShow_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ComboBox cbDirectory;
+ private System.Windows.Forms.Button btnOK;
+ private System.Windows.Forms.Button btnCancel;
+ private System.Windows.Forms.Panel pnlCF;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label lblDirectoryName;
+ }
+}
diff --git a/TVRename#/Forms/AutoAddShow.cs b/TVRename#/Forms/AutoAddShow.cs
new file mode 100644
index 000000000..8abee20c0
--- /dev/null
+++ b/TVRename#/Forms/AutoAddShow.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Windows.Forms;
+
+namespace TVRename.Forms
+{
+ public partial class AutoAddShow : Form
+ {
+ private ShowItem mSI;
+ private readonly TheTVDBCodeFinder mTCCF;
+
+ public AutoAddShow(string hint)
+ {
+ InitializeComponent();
+ this.mSI = new ShowItem();
+ this.mTCCF = new TheTVDBCodeFinder("") {Dock = DockStyle.Fill};
+ this.mTCCF.SetHint(hint);
+ this.mTCCF.SelectionChanged += MTCCF_SelectionChanged;
+ this.pnlCF.SuspendLayout();
+ this.pnlCF.Controls.Add(this.mTCCF);
+ this.pnlCF.ResumeLayout();
+ this.ActiveControl = this.mTCCF; // set initial focus to the code entry/show finder control
+
+ this.cbDirectory.SuspendLayout();
+ this.cbDirectory.Items.Clear();
+ this.cbDirectory.Items.AddRange(TVSettings.Instance.MonitorFoldersNames.ToArray());
+ this.cbDirectory.SelectedIndex = 0;
+ this.cbDirectory.ResumeLayout();
+ }
+
+ private void MTCCF_SelectionChanged(object sender, EventArgs e)
+ {
+ this.lblDirectoryName.Text = System.IO.Path.DirectorySeparatorChar + TVSettings.Instance.FilenameFriendly(FileHelper.MakeValidPath(this.mTCCF.SelectedShowName( )));
+ }
+
+ public ShowItem ShowItem => this.mSI;
+
+ private void SetShowItem()
+ {
+ int code = this.mTCCF.SelectedCode();
+
+
+ this.mSI.TVDBCode = code;
+ this.mSI.AutoAdd_FolderBase = this.cbDirectory.Text+this.lblDirectoryName.Text;
+
+ }
+
+ private void btnOK_Click(object sender, EventArgs e)
+ {
+ if (!OkToClose())
+ {
+ this.DialogResult = DialogResult.None;
+ return;
+ }
+
+ SetShowItem();
+ this.DialogResult = DialogResult.OK;
+ Close();
+ }
+
+ private bool OkToClose()
+ {
+ if (TheTVDB.Instance.HasSeries(this.mTCCF.SelectedCode())) return true;
+
+ DialogResult dr = MessageBox.Show("tvdb code unknown, close anyway?", "TVRename Add/Edit Show",
+ MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
+
+ return dr != DialogResult.No;
+ }
+
+ private void AutoAddShow_Load(object sender, EventArgs e)
+ {
+
+ }
+ }
+}
diff --git a/TVRename#/Forms/AutoAddShow.resx b/TVRename#/Forms/AutoAddShow.resx
new file mode 100644
index 000000000..4693f4f49
--- /dev/null
+++ b/TVRename#/Forms/AutoAddShow.resx
@@ -0,0 +1,377 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA
+ AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9PT/9PT0//T09P/zk5
+ Of85OTn/OTk5/zc3N/83Nzf/Nzc3/zU1Nf81NTX/NTU1/zMzM/8zMzP/MzMz/zIyMv8yMjL/MjIy/zAw
+ MP8wMDD/MDAw/y4uLv8uLi7/Li4u/y0tLf8tLS3/LS0t/ysrK/8rKyv/Kysr/yoqKv8qKir/Kioq/ykp
+ Kf8pKSn/KSkp/ykpKf8pKSn/KSkp/ygoKP8oKCj/KCgo/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9P
+ T/9PT0//T09P/zk5Of85OTn/OTk5/zc3N/83Nzf/Nzc3/zU1Nf81NTX/NTU1/zMzM/8zMzP/MzMz/zIy
+ Mv8yMjL/MjIy/zAwMP8wMDD/MDAw/y4uLv8uLi7/Li4u/y0tLf8tLS3/LS0t/ysrK/8rKyv/Kysr/yoq
+ Kv8qKir/Kioq/ykpKf8pKSn/KSkp/ykpKf8pKSn/KSkp/ygoKP8oKCj/KCgo/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAE9PT/9PT0//T09P/zk5Of85OTn/OTk5/zc3N/83Nzf/Nzc3/zU1Nf81NTX/NTU1/zMz
+ M/8zMzP/MzMz/zIyMv8yMjL/MjIy/zAwMP8wMDD/MDAw/y4uLv8uLi7/Li4u/y0tLf8tLS3/LS0t/ysr
+ K/8rKyv/Kysr/yoqKv8qKir/Kioq/ykpKf8pKSn/KSkp/ykpKf8pKSn/KSkp/ygoKP8oKCj/KCgo/wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVlZf9lZWX/ZWVl/319ff99fX3/fX19/3p6ev96enr/enp6/3d3
+ d/93d3f/d3d3/3R0dP90dHT/dHR0/3Fxcf9xcXH/cXFx/25ubv9ubm7/bm5u/2tra/9ra2v/a2tr/2ho
+ aP9oaGj/aGho/2ZmZv9mZmb/ZmZm/2NjY/9jY2P/Y2Nj/2FhYf9hYWH/YWFh/19fX/9fX1//X19f/zEx
+ Mf8xMTH/MTEx/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVlZf9lZWX/ZWVl/319ff99fX3/fX19/3p6
+ ev96enr/enp6/3d3d/93d3f/d3d3/3R0dP90dHT/dHR0/3Fxcf9xcXH/cXFx/25ubv9ubm7/bm5u/2tr
+ a/9ra2v/a2tr/2hoaP9oaGj/aGho/2ZmZv9mZmb/ZmZm/2NjY/9jY2P/Y2Nj/2FhYf9hYWH/YWFh/19f
+ X/9fX1//X19f/zExMf8xMTH/MTEx/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVlZf9lZWX/ZWVl/319
+ ff99fX3/fX19/3p6ev96enr/enp6/3d3d/93d3f/d3d3/3R0dP90dHT/dHR0/3Fxcf9xcXH/cXFx/25u
+ bv9ubm7/bm5u/2tra/9ra2v/a2tr/2hoaP9oaGj/aGho/2ZmZv9mZmb/ZmZm/2NjY/9jY2P/Y2Nj/2Fh
+ Yf9hYWH/YWFh/19fX/9fX1//X19f/zExMf8xMTH/MTEx/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpq
+ av9qamr/ampq/4KCgv+CgoL/goKC/2FhYf9hYWH/YWFh/6ynfP8l/iH/rKd8/1lZWf9ZWVn/WVlZ/35+
+ fv9UVFT/fn5+/35+fv9+fn7/fn5+/35+fv9MTEz/fn5+/35+fv9+fn7/fn5+/35+fv9FRUX/fn5+/35+
+ fv9+fn7/fn5+/35+fv8/Pz//fn5+/2NjY/9jY2P/Y2Nj/zIyMv8yMjL/MjIy/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAGpqav9qamr/ampq/4KCgv+CgoL/goKC/2FhYf9hYWH/YWFh/yX+If8l/iH/Jv4i/1lZ
+ Wf9ZWVn/WVlZ/1RUVP9UVFT/VVVV/35+fv9+fn7/fn5+/0xMTP9MTEz/TExM/35+fv9+fn7/fn5+/0VF
+ Rf9FRUX/RUVF/35+fv9+fn7/fn5+/z8/P/8/Pz//Pz8//2NjY/9jY2P/Y2Nj/zIyMv8yMjL/MjIy/wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpqav9qamr/ampq/4KCgv+CgoL/goKC/2FhYf9hYWH/YWFh/6yn
+ fP8l/iH/rKd8/1lZWf9ZWVn/WVlZ/35+fv9UVFT/fn5+/35+fv9+fn7/fn5+/35+fv9MTEz/fn5+/35+
+ fv9+fn7/fn5+/35+fv9FRUX/fn5+/35+fv9+fn7/fn5+/35+fv8/Pz//fn5+/2NjY/9jY2P/Y2Nj/zIy
+ Mv8yMjL/MjIy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNjY/9jY2P/Y2Nj/xsAlf8bAJX/GwCV/xgA
+ n/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwA
+ zv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA
+ /v8AAP7/AAD+/zU1Nf81NTX/NTU1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNjY/9jY2P/Y2Nj/xsA
+ lf8bAJX/GwCV/xgAn/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4A
+ xf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA
+ 9P8CAPT/AgD0/wAA/v8AAP7/AAD+/zU1Nf81NTX/NTU1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNj
+ Y/9jY2P/Y2Nj/xsAlf8bAJX/GwCV/xgAn/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEA
+ u/8RALv/EQC7/w4Axf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA
+ 6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/zU1Nf81NTX/NTU1/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAGlpaf9paWn/aWlp/xsAlf8bAJX/GwCV/xgAn/8YAJ//GACf/xYAqP8WAKj/FgCo/xMA
+ sv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA
+ 4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/zc3N/83Nzf/Nzc3/wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlpaf9paWn/aWlp/xsAlf8bAJX/GwCV/xgAn/8YAJ//GACf/xYA
+ qP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA
+ 2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/zc3
+ N/83Nzf/Nzc3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlpaf9paWn/aWlp/xsAlf8bAJX/GwCV/xgA
+ n/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwA
+ zv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA
+ /v8AAP7/AAD+/zc3N/83Nzf/Nzc3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1tbf9tbW3/bW1t/xsA
+ lf8bAJX/GwCV/xgAn/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4A
+ xf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA
+ 9P8CAPT/AgD0/wAA/v8AAP7/AAD+/zk5Of85OTn/OTk5/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1t
+ bf9tbW3/bW1t/xsAlf8bAJX/GwCV/xgAn/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEA
+ u/8RALv/EQC7/w4Axf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA
+ 6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/zk5Of85OTn/OTk5/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAG1tbf9tbW3/bW1t/xsAlf8bAJX/GwCV/xgAn/8YAJ//GACf/xYAqP8WAKj/FgCo/xMA
+ sv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA
+ 4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/zk5Of85OTn/OTk5/wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcP9wcHD/cHBw/xsAlf8bAJX/GwCV/xgAn/8YAJ//GACf/xYA
+ qP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA
+ 2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/zw8
+ PP88PDz/PDw8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcP9wcHD/cHBw/xsAlf8bAJX/GwCV/xgA
+ n/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwA
+ zv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA
+ /v8AAP7/AAD+/zw8PP88PDz/PDw8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcP9wcHD/cHBw/xsA
+ lf8bAJX/GwCV/xgAn/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4A
+ xf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA
+ 9P8CAPT/AgD0/wAA/v8AAP7/AAD+/zw8PP88PDz/PDw8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZ2
+ dv92dnb/dnZ2/xsAlf8bAJX/GwCV/xgAn/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEA
+ u/8RALv/EQC7/w4Axf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA
+ 6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/z8/P/8/Pz//Pz8//wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAHZ2dv92dnb/dnZ2/xsAlf8bAJX/GwCV/xgAn/8YAJ//GACf/xYAqP8WAKj/FgCo/xMA
+ sv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA
+ 4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/z8/P/8/Pz//Pz8//wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZ2dv92dnb/dnZ2/xsAlf8bAJX/GwCV/xgAn/8YAJ//GACf/xYA
+ qP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwAzv8MAM7/DADO/wkA
+ 2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/z8/
+ P/8/Pz//Pz8//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHt7e/97e3v/e3t7/xsAlf8bAJX/GwCV/xgA
+ n/8YAJ//GACf/xYAqP8WAKj/FgCo/xMAsv8TALL/EwCy/xEAu/8RALv/EQC7/w4Axf8OAMX/DgDF/wwA
+ zv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA
+ /v8AAP7/AAD+/0JCQv9CQkL/QkJC/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fP98fHz/fHx8/xwA
+ lv8cAJb/HACW/xkAoP8ZAKD/GQCg/xcAqf8XAKn/FwCp/xQAs/8UALP/FACz/xIAvP8SALz/EgC8/w8A
+ xv8PAMb/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA
+ 9P8CAPT/AgD0/wAA/v8AAP7/AAD+/0JCQv9CQkL/QkJC/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8
+ fP98fHz/fHx8/xwAlv8cAJb/HACW/xkAoP8ZAKD/GQCg/xcAqf8XAKn/FwCp/xQAs/8UALP/FACz/xIA
+ vP8SALz/EgC8/w8Axv8PAMb/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA
+ 6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/0JCQv9CQkL/QkJC/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAH19ff99fX3/fX19/xwAlv8cAJb/HACW/xkAoP8ZAKD/GQCg/xcAqf8XAKn/FwCp/xQA
+ s/8UALP/FACz/xIAvP8SALz/EgC8/w8Axv8PAMb/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA
+ 4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/0VFRf9FRUX/RUVF/wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH19ff99fX3/fX19/xwAlv8cAJb/HACW/xkAoP8ZAKD/GQCg/xcA
+ qf8XAKn/FwCp/xQAs/8UALP/FACz/xIAvP8SALz/EgC8/w8Axv8PAMb/DgDF/wwAzv8MAM7/DADO/wkA
+ 2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/0VF
+ Rf9FRUX/RUVF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH19ff99fX3/fX19/xwAlv8cAJb/HACW/xkA
+ oP8ZAKD/GQCg/xcAqf8XAKn/FwCp/xQAs/8UALP/FACz/xIAvP8SALz/EgC8/w8Axv8PAMb/DgDF/wwA
+ zv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA
+ /v8AAP7/AAD+/0VFRf9FRUX/RUVF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNzc/5zc3P+c3Nz/hwA
+ lv8cAJb/HACW/xkAoP8ZAKD/GQCg/xcAqf8XAKn/FwCp/xQAs/8UALP/FACz/xIAvP8SALz/EgC8/w8A
+ xv8PAMb/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA
+ 9P8CAPT/AgD0/wAA/v8AAP7/AAD+/0pKSv5KSkr+SkpK/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNz
+ c/5zc3P+c3Nz/hwAlv8cAJb/HACW/xkAoP8ZAKD/GQCg/xcAqf8XAKn/FwCp/xQAs/8UALP/FACz/xIA
+ vP8SALz/EgC8/w8Axv8PAMb/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA4f8HAOH/BwDh/wQA
+ 6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/0pKSv5KSkr+SkpK/gAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAHNzc/5zc3P+c3Nz/hwAlv8cAJb/HACW/xkAoP8ZAKD/GQCg/xcAqf8XAKn/FwCp/xQA
+ s/8UALP/FACz/xIAvP8SALz/EgC8/w8Axv8PAMb/DgDF/wwAzv8MAM7/DADO/wkA2P8JANj/CQDY/wcA
+ 4f8HAOH/BwDh/wQA6/8EAOv/BADr/wIA9P8CAPT/AgD0/wAA/v8AAP7/AAD+/0pKSv5KSkr+SkpK/gAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHR0dIFzc3P/c3Nz/3NzdPxzc3T8c3N0/HJyc/xycnP8cnJz/HJy
+ c/xycnP8cnJz/HFxcvxxcXL8cXFy/IeHiP+Hh4j/h4eI/4eHiP+Hh4j/h4eI/4SEhf+EhIX/hISF/4KC
+ g/+CgoP/goKD/2trbPxra2z8a2ts/Gpqa/xqamv8ampr/GlpavxpaWr8aWlq/GZmZ/xmZmf8ZmZn/EpK
+ Sv9KSkr/W1tbgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHR0dIF0dHSBc3Nz/3R0dPx0dHT8dHR0/HNz
+ c/xzc3P8c3Nz/HNzc/xzc3P8c3Nz/HJycvxycnL8cnJy/IiIiP+IiIj/iIiI/4iIiP+IiIj/h4eH/4SE
+ hP+EhIT/hISE/4KCgv+CgoL/goKC/2tra/xra2v8a2tr/Gpqavxqamr8ampq/GlpafxpaWn8aWlp/GZm
+ ZvxmZmb8ZmZm/EpKSv9bW1uBW1tbgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0dHSBdHR0gXR0
+ dPx0dHT8dHR0/HNzc/xzc3P8c3Nz/HNzc/xzc3P8c3Nz/HJycvxycnL8cnJy/IiIiP+IiIj/iIiI/4iI
+ iP+IiIj/h4eH/4SEhP+EhIT/hISE/4KCgv+CgoL/goKC/2tra/xra2v8a2tr/Gpqavxqamr8ampq/Glp
+ afxpaWn8aWlp/GZmZvxmZmb8ZmZm/FtbW4FbW1uBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBjTwaQY08GkGNPBqmJduKpiXbiqYl24qWH
+ c+ulh3PrpIZy67ych+W8nIflck4/D2hIOQ+SdGH9knRh/Y9yX+uPcl/rj3Jf64ZmVOKGZlTihmZU4lI7
+ LAZSOywGUjssBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ Nf8zMzP/MzMz/zIyMv8yMjL/MDAw/zAwMP8uLi7/Li4u/y0tLf8tLS3/Kysr/ysrK/8qKir/Kioq/ykp
+ Kf8pKSn/KSkp/ykpKf8oKCj/KCgo/wAAAAAAAAAAAAAAAAAAAABlZWX/ZWVl/319ff99fX3/enp6/3p6
+ ev93d3f/d3d3/3R0dP90dHT/cXFx/3Fxcf9ubm7/bm5u/2tra/9ra2v/aGho/2hoaP9mZmb/ZmZm/2Nj
+ Y/9jY2P/YWFh/2FhYf9fX1//X19f/zExMf8xMTH/AAAAAAAAAAAAAAAAAAAAAGVlZf9lZWX/fX19/319
+ ff96enr/enp6/3d3d/93d3f/dHR0/3R0dP9xcXH/cXFx/25ubv9ubm7/a2tr/2tra/9oaGj/aGho/2Zm
+ Zv9mZmb/Y2Nj/2NjY/9hYWH/YWFh/19fX/9fX1//MTEx/zExMf8AAAAAAAAAAAAAAAAAAAAAampq/2pq
+ av+CgoL/goKC/2FhYf9hYWH/YddJ/2HXSf9ZWVn/WVlZ/2ZmZv9mZmb/fn5+/35+fv9iYmL/YmJi/35+
+ fv9+fn7/Xl5e/15eXv9+fn7/fn5+/1tbW/9bW1v/Y2Nj/2NjY/8yMjL/MjIy/wAAAAAAAAAAAAAAAAAA
+ AABqamr/ampq/4KCgv+CgoL/YWFh/2FhYf9h10n/YddJ/1lZWf9ZWVn/ZmZm/2ZmZv9+fn7/fn5+/2Ji
+ Yv9iYmL/fn5+/35+fv9eXl7/Xl5e/35+fv9+fn7/W1tb/1tbW/9jY2P/Y2Nj/zIyMv8yMjL/AAAAAAAA
+ AAAAAAAAAAAAAGNjY/9jY2P/GwCV/xsAlf8YAJ//GACf/xYAqP8WAKj/EwCy/xMAsv8RALv/EQC7/w0A
+ xP8OAMX/DADN/wwAzv8JANj/CQDY/wYA4f8HAOH/BADr/wQA6/8CAPT/AgD0/wAA/v8AAP7/NTU1/zU1
+ Nf8AAAAAAAAAAAAAAAAAAAAAY2Nj/2NjY/8bAJX/GwCV/xgAn/8YAJ//FgCo/xYAqP8TALL/EwCy/xEA
+ u/8RALv/DQDE/w0AxP8MAM3/DADN/wkA2P8JANj/BgDh/wYA4f8EAOv/BADr/wIA9P8CAPT/AAD+/wAA
+ /v81NTX/NTU1/wAAAAAAAAAAAAAAAAAAAABpaWn/aWlp/xsAlf8bAJX/GACf/xgAn/8WAKj/FgCo/xMA
+ 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
+ rEGAAaxBgAGsQfAPrEHhh6xBw8OsQYfhrEE=
+
+
+
\ No newline at end of file
diff --git a/TVRename#/Forms/Preferences.Designer.cs b/TVRename#/Forms/Preferences.Designer.cs
index 0e489cff1..9a5eb705b 100644
--- a/TVRename#/Forms/Preferences.Designer.cs
+++ b/TVRename#/Forms/Preferences.Designer.cs
@@ -128,6 +128,7 @@ private void InitializeComponent()
this.txtMissingCSV = new System.Windows.Forms.TextBox();
this.cbMissingCSV = new System.Windows.Forms.CheckBox();
this.tpScanOptions = new System.Windows.Forms.TabPage();
+ this.chkAutoMergeEpisodes = new System.Windows.Forms.CheckBox();
this.chkPreventMove = new System.Windows.Forms.CheckBox();
this.label40 = new System.Windows.Forms.Label();
this.cbxUpdateAirDate = new System.Windows.Forms.CheckBox();
@@ -234,7 +235,7 @@ private void InitializeComponent()
this.pyTivoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.mede8erToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.noneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.chkAutoMergeEpisodes = new System.Windows.Forms.CheckBox();
+ this.chkAutoSearchForDownloadedFiles = new System.Windows.Forms.CheckBox();
this.groupBox2.SuspendLayout();
this.tabControl1.SuspendLayout();
this.tbGeneral.SuspendLayout();
@@ -1183,6 +1184,7 @@ private void InitializeComponent()
//
// tpScanOptions
//
+ this.tpScanOptions.Controls.Add(this.chkAutoSearchForDownloadedFiles);
this.tpScanOptions.Controls.Add(this.chkAutoMergeEpisodes);
this.tpScanOptions.Controls.Add(this.chkPreventMove);
this.tpScanOptions.Controls.Add(this.label40);
@@ -1205,6 +1207,16 @@ private void InitializeComponent()
this.tpScanOptions.Text = "Scan Options";
this.tpScanOptions.UseVisualStyleBackColor = true;
//
+ // chkAutoMergeEpisodes
+ //
+ this.chkAutoMergeEpisodes.AutoSize = true;
+ this.chkAutoMergeEpisodes.Location = new System.Drawing.Point(9, 311);
+ this.chkAutoMergeEpisodes.Name = "chkAutoMergeEpisodes";
+ this.chkAutoMergeEpisodes.Size = new System.Drawing.Size(276, 17);
+ this.chkAutoMergeEpisodes.TabIndex = 13;
+ this.chkAutoMergeEpisodes.Text = "Automatically create merge rules for merged episodes";
+ this.chkAutoMergeEpisodes.UseVisualStyleBackColor = true;
+ //
// chkPreventMove
//
this.chkPreventMove.AutoSize = true;
@@ -2297,15 +2309,15 @@ private void InitializeComponent()
this.noneToolStripMenuItem.Tag = "4";
this.noneToolStripMenuItem.Text = "&None";
//
- // chkAutoMergeEpisodes
+ // chkAutoSearchForDownloadedFiles
//
- this.chkAutoMergeEpisodes.AutoSize = true;
- this.chkAutoMergeEpisodes.Location = new System.Drawing.Point(9, 311);
- this.chkAutoMergeEpisodes.Name = "chkAutoMergeEpisodes";
- this.chkAutoMergeEpisodes.Size = new System.Drawing.Size(276, 17);
- this.chkAutoMergeEpisodes.TabIndex = 13;
- this.chkAutoMergeEpisodes.Text = "Automatically create merge rules for merged episodes";
- this.chkAutoMergeEpisodes.UseVisualStyleBackColor = true;
+ this.chkAutoSearchForDownloadedFiles.AutoSize = true;
+ this.chkAutoSearchForDownloadedFiles.Location = new System.Drawing.Point(9, 334);
+ this.chkAutoSearchForDownloadedFiles.Name = "chkAutoSearchForDownloadedFiles";
+ this.chkAutoSearchForDownloadedFiles.Size = new System.Drawing.Size(186, 17);
+ this.chkAutoSearchForDownloadedFiles.TabIndex = 14;
+ this.chkAutoSearchForDownloadedFiles.Text = "Notify when new shows are found";
+ this.chkAutoSearchForDownloadedFiles.UseVisualStyleBackColor = true;
//
// Preferences
//
@@ -2578,5 +2590,6 @@ private void InitializeComponent()
private System.Windows.Forms.CheckBox chkHideMyShowsSpoilers;
private System.Windows.Forms.CheckBox chkPreventMove;
private System.Windows.Forms.CheckBox chkAutoMergeEpisodes;
+ private System.Windows.Forms.CheckBox chkAutoSearchForDownloadedFiles;
}
}
diff --git a/TVRename#/Forms/Preferences.cs b/TVRename#/Forms/Preferences.cs
index 38170e986..b0ab4dc86 100644
--- a/TVRename#/Forms/Preferences.cs
+++ b/TVRename#/Forms/Preferences.cs
@@ -169,6 +169,7 @@ private void OKButton_Click(object sender, System.EventArgs e)
S.MissingCheck = this.cbMissing.Checked;
S.CorrectFileDates = this.cbxUpdateAirDate.Checked;
S.SearchLocally = this.cbSearchLocally.Checked;
+ S.AutoSearchForDownloadedFiles = this.chkAutoSearchForDownloadedFiles.Checked;
S.LeaveOriginals = this.cbLeaveOriginals.Checked;
S.CheckuTorrent = this.cbCheckuTorrent.Checked;
S.LookForDateInFilename = this.cbLookForAirdate.Checked;
@@ -405,6 +406,7 @@ private void Preferences_Load(object sender, System.EventArgs e)
this.cbCleanUpDownloadDir.Checked = S.RemoveDownloadDirectoriesFiles;
this.cbMissing.Checked = S.MissingCheck;
this.cbxUpdateAirDate.Checked = S.CorrectFileDates;
+ this.chkAutoSearchForDownloadedFiles.Checked = S.AutoSearchForDownloadedFiles;
this.cbSearchLocally.Checked = S.SearchLocally;
this.cbLeaveOriginals.Checked = S.LeaveOriginals;
this.EnterPreferredLanguage = S.PreferredLanguage;
diff --git a/TVRename#/Forms/UI.cs b/TVRename#/Forms/UI.cs
index 4b7a9d746..09c074d27 100644
--- a/TVRename#/Forms/UI.cs
+++ b/TVRename#/Forms/UI.cs
@@ -18,6 +18,7 @@
using File = Alphaleonis.Win32.Filesystem.File;
using System.IO;
using System.Linq;
+using System.Text.RegularExpressions;
using TVRename.Ipc;
namespace TVRename
@@ -2979,6 +2980,141 @@ private void Scan(List shows)
this.FillActionList();
}
+ private void GetNewShows()
+ {
+ //for each directory in settings directory
+ //for each file in directory
+ //for each saved show (order by recent)
+ //does show match selected file?
+ //if so add series to list of series scanned
+ if (!TVSettings.Instance.AutoSearchForDownloadedFiles) return;
+
+ List possibleShowNames = new List();
+
+ foreach (string dirPath in this.mDoc.SearchFolders)
+ {
+ if (!Directory.Exists(dirPath)) continue;
+
+ foreach (string filePath in Directory.GetFiles(dirPath, "*", System.IO.SearchOption.AllDirectories))
+ {
+ if (!File.Exists(filePath)) continue;
+
+ FileInfo fi = new FileInfo(filePath);
+
+ if (!TVSettings.Instance.UsefulExtension(fi.Extension, false))
+ continue; // move on
+
+ if (TVSettings.Instance.IgnoreSamples && Helpers.Contains(fi.FullName, "sample", StringComparison.OrdinalIgnoreCase) && ((fi.Length / (1024 * 1024)) < TVSettings.Instance.SampleFileMaxSizeMB))
+ continue;
+
+ if (!LookForSeries(fi.Name)) possibleShowNames.Add(fi.RemoveExtension()+".");
+
+ }
+
+ foreach (string subDirPath in Directory.GetDirectories(dirPath, "*", System.IO.SearchOption.AllDirectories))
+ {
+ if (!Directory.Exists(subDirPath)) continue;
+
+ DirectoryInfo di = new DirectoryInfo(subDirPath);
+
+ if (!LookForSeries(di.Name)) possibleShowNames.Add(di.Name);
+ }
+
+
+ List addedShows = new List();
+
+ foreach (string hint in possibleShowNames)
+ {
+ //MessageBox.Show($"Search for {hint}");
+ //if hint doesn't match existing added shows
+ if (LookForSeries(hint, addedShows)) continue;
+
+ //Remove anything we can from hint to make it cleaner and hence more likely to match
+ string refinedHint = RemoveSeriesEpisodeIndicators(hint);
+
+ //popup dialog
+ AutoAddShow askForMatch = new AutoAddShow(refinedHint);
+ if (askForMatch.ShowDialog() == DialogResult.OK)
+ {
+ //If added add show to collection
+ addedShows.Add(askForMatch.ShowItem);
+ }
+
+ }
+ this.mDoc.ShowItems.AddRange(addedShows);
+
+
+ }
+ }
+
+ private string RemoveSeriesEpisodeIndicators(string hint)
+ {
+ string hint2 = Helpers.RemoveDiacritics(hint);
+ hint2 = RemoveSE(hint2);
+ hint2 = hint2.ToLower();
+ hint2 = hint2.Replace("'", "");
+ hint2 = hint2.Replace("&", "and");
+ hint2 = Regex.Replace(hint2, "[_\\W]+", " ");
+ hint2 = hint2.RemoveAfter("1080p") ;
+ hint2 = hint2.RemoveAfter("720p");
+ foreach (string seasonWord in this.mDoc.SeasonWords())
+ {
+ hint2 = hint2.RemoveAfter(seasonWord );
+ }
+ hint2 = hint2.Trim();
+ return hint2;
+
+ }
+
+ private string RemoveSE(string hint)
+ {
+ foreach (FilenameProcessorRE re in TVSettings.Instance.FNPRegexs)
+ {
+ if (!re.Enabled)
+ continue;
+ try
+ {
+ Match m = Regex.Match(hint, re.RE, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ if (!int.TryParse(m.Groups["s"].ToString(), out int seas))
+ seas = -1;
+ if (!int.TryParse(m.Groups["e"].ToString(), out int ep))
+ ep = -1;
+
+ int p = Math.Min(m.Groups["s"].Index, m.Groups["e"].Index);
+ int p2 = Math.Min(p, hint.IndexOf(m.Groups.SyncRoot.ToString()));
+
+ if ((seas != -1) && (ep != -1)) return hint.Remove(p2!=-1?p2:p);
+ }
+ }
+ catch (FormatException)
+ {
+ }
+ catch (ArgumentException)
+ { }
+ }
+
+ return hint;
+ }
+
+ private bool LookForSeries(string name)
+ {
+ return LookForSeries(name, this.mDoc.ShowItems);
+ }
+
+ private bool LookForSeries(string test,IEnumerable shows)
+ {
+ foreach (ShowItem si in shows)
+ {
+ if (si.getSimplifiedPossibleShowNames()
+ .Any(name => FileHelper.SimplifyAndCheckFilename(test, name)))
+ return true;
+ }
+
+ return false;
+ }
+
public void QuickScan()
{
logger.Info("*******************************");
@@ -2986,6 +3122,7 @@ public void QuickScan()
this.MoreBusy();
this.mDoc.QuickScan();
this.LessBusy();
+ GetNewShows();
this.FillMyShows(); // scanning can download more info to be displayed in my shows
this.FillActionList();
}
diff --git a/TVRename#/Settings/Settings.cs b/TVRename#/Settings/Settings.cs
index 84a456486..b5a728c20 100644
--- a/TVRename#/Settings/Settings.cs
+++ b/TVRename#/Settings/Settings.cs
@@ -365,6 +365,7 @@ public string[] OtherExtensionsArray
public bool HideWtWSpoilers = false;
public bool HideMyShowsSpoilers = false;
public bool ShowInTaskbar = true;
+ public bool AutoSearchForDownloadedFiles = false;
public string SpecialsFolderName = "Specials";
public int StartupTab = 0;
public Searchers TheSearchers = new Searchers();
@@ -374,6 +375,8 @@ public string[] VideoExtensionsArray
get { return VideoExtensionsString.Split(';'); }
}
+
+
public bool AutoMergeEpisodes = false;
public string VideoExtensionsString = "";
public int WTWRecentDays = 7;
@@ -587,6 +590,8 @@ public void load(XmlReader reader)
this.SearchLocally = reader.ReadElementContentAsBoolean();
else if (reader.Name == "LeaveOriginals")
this.LeaveOriginals = reader.ReadElementContentAsBoolean();
+ else if (reader.Name == "AutoSearchForDownloadedFiles")
+ this.AutoSearchForDownloadedFiles = reader.ReadElementContentAsBoolean();
else if (reader.Name == "LookForDateInFilename")
this.LookForDateInFilename = reader.ReadElementContentAsBoolean();
else if (reader.Name == "AutoMergeEpisodes")
@@ -871,6 +876,7 @@ public void WriteXML(XmlWriter writer)
XMLHelper.WriteElementToXML(writer,"RenameCheck",this.RenameCheck);
XMLHelper.WriteElementToXML(writer, "PreventMove", this.PreventMove);
XMLHelper.WriteElementToXML(writer,"MissingCheck",this.MissingCheck);
+ XMLHelper.WriteElementToXML(writer, "AutoSearchForDownloadedFiles", this.AutoSearchForDownloadedFiles);
XMLHelper.WriteElementToXML(writer, "UpdateFileDates", this.CorrectFileDates);
XMLHelper.WriteElementToXML(writer,"SearchLocally",this.SearchLocally);
XMLHelper.WriteElementToXML(writer,"LeaveOriginals",this.LeaveOriginals);
diff --git a/TVRename#/TVRename#.csproj b/TVRename#/TVRename#.csproj
index b37a1a7ab..5dc09f17a 100644
--- a/TVRename#/TVRename#.csproj
+++ b/TVRename#/TVRename#.csproj
@@ -100,6 +100,12 @@
+
+ Form
+
+
+ AutoAddShow.cs
+
Form
@@ -346,6 +352,9 @@
AddModifyRule.cs
Designer
+
+ AutoAddShow.cs
+
BugReport.cs
Designer
diff --git a/TVRename#/TVRename/TVDoc.cs b/TVRename#/TVRename/TVDoc.cs
index 9af741781..d47b50908 100644
--- a/TVRename#/TVRename/TVDoc.cs
+++ b/TVRename#/TVRename/TVDoc.cs
@@ -80,7 +80,8 @@ private IEnumerable GetSeasonWords()
}
private IEnumerable SeasonWordsCache;
- private IEnumerable SeasonWords()
+
+ internal IEnumerable SeasonWords()
{
if (SeasonWordsCache == null) SeasonWordsCache = GetSeasonWords();
return SeasonWordsCache;
diff --git a/TVRename#/Utility/Helpers.cs b/TVRename#/Utility/Helpers.cs
index 5c3a96bc0..ba620cfce 100644
--- a/TVRename#/Utility/Helpers.cs
+++ b/TVRename#/Utility/Helpers.cs
@@ -376,6 +376,20 @@ public static bool SimplifyAndCheckFilename(string filename, string showname)
}
internal static string TempPath(string v) => Path.GetTempPath() + v;
+
+ public static string MakeValidPath(string input)
+ {
+ string directoryName = input;
+ string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
+
+ foreach (char c in invalid)
+ {
+ directoryName = directoryName.Replace(c.ToString(), "");
+ }
+
+ return directoryName;
+
+ }
}
public static class HTTPHelper
@@ -846,6 +860,7 @@ public static string CompareName(string n)
}
+
public static string GetCommonStartString(List testValues)
{
string root = string.Empty;
@@ -873,6 +888,13 @@ public static string TrimEnd(this string root, string ending)
return root.Substring(0, root.Length - ending.Length);
}
+ public static string RemoveAfter(this string root, string ending)
+ {
+ if (root.IndexOf(ending) !=-1)
+ return root.Substring(0, root.IndexOf(ending));
+ return root;
+ }
+
public static string TrimEnd(this string root, string[] endings)
{
string trimmedString = root;