Added simple search bar, refactor history filtering

This commit is contained in:
Jaex 2021-07-25 05:00:36 +03:00
parent 237cae6b1e
commit c13c0afec7
5 changed files with 416 additions and 191 deletions

View file

@ -31,8 +31,6 @@ private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HistoryForm));
this.scMain = new ShareX.HelpersLib.SplitContainerCustomSplitter();
this.pStats = new System.Windows.Forms.Panel();
this.rtbStats = new System.Windows.Forms.RichTextBox();
this.lvHistory = new ShareX.HelpersLib.MyListView();
this.chIcon = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chDateTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
@ -40,7 +38,6 @@ private void InitializeComponent()
this.chURL = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.nudMaxItemCount = new System.Windows.Forms.NumericUpDown();
this.pbThumbnail = new ShareX.HelpersLib.MyPictureBox();
this.btnShowStats = new System.Windows.Forms.Button();
this.lblMaxItemCount = new System.Windows.Forms.Label();
this.gbFilters = new System.Windows.Forms.GroupBox();
this.lblURLFilter = new System.Windows.Forms.Label();
@ -58,13 +55,22 @@ private void InitializeComponent()
this.cbDateFilter = new System.Windows.Forms.CheckBox();
this.dtpFilterTo = new System.Windows.Forms.DateTimePicker();
this.txtFilenameFilter = new System.Windows.Forms.TextBox();
this.tscHistory = new System.Windows.Forms.ToolStripContainer();
this.tssHistory = new System.Windows.Forms.ToolStrip();
this.tslSearch = new System.Windows.Forms.ToolStripLabel();
this.tstbSearch = new System.Windows.Forms.ToolStripTextBox();
this.tsbSearch = new System.Windows.Forms.ToolStripButton();
this.btnCopyStats = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit();
this.scMain.Panel1.SuspendLayout();
this.scMain.Panel2.SuspendLayout();
this.scMain.SuspendLayout();
this.pStats.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudMaxItemCount)).BeginInit();
this.gbFilters.SuspendLayout();
this.tscHistory.ContentPanel.SuspendLayout();
this.tscHistory.TopToolStripPanel.SuspendLayout();
this.tscHistory.SuspendLayout();
this.tssHistory.SuspendLayout();
this.SuspendLayout();
//
// scMain
@ -75,32 +81,19 @@ private void InitializeComponent()
//
// scMain.Panel1
//
this.scMain.Panel1.Controls.Add(this.pStats);
this.scMain.Panel1.Controls.Add(this.lvHistory);
this.scMain.Panel1.Controls.Add(this.tscHistory);
//
// scMain.Panel2
//
this.scMain.Panel2.Controls.Add(this.btnCopyStats);
this.scMain.Panel2.Controls.Add(this.nudMaxItemCount);
this.scMain.Panel2.Controls.Add(this.pbThumbnail);
this.scMain.Panel2.Controls.Add(this.btnShowStats);
this.scMain.Panel2.Controls.Add(this.lblMaxItemCount);
this.scMain.Panel2.Controls.Add(this.gbFilters);
this.scMain.SplitterColor = System.Drawing.Color.White;
this.scMain.SplitterLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(189)))), ((int)(((byte)(189)))), ((int)(((byte)(189)))));
this.scMain.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.scMain_SplitterMoved);
//
// pStats
//
this.pStats.Controls.Add(this.rtbStats);
resources.ApplyResources(this.pStats, "pStats");
this.pStats.Name = "pStats";
//
// rtbStats
//
this.rtbStats.BorderStyle = System.Windows.Forms.BorderStyle.None;
resources.ApplyResources(this.rtbStats, "rtbStats");
this.rtbStats.Name = "rtbStats";
//
// lvHistory
//
this.lvHistory.AllowColumnSort = true;
@ -160,13 +153,6 @@ private void InitializeComponent()
this.pbThumbnail.PictureBoxBackColor = System.Drawing.SystemColors.Control;
this.pbThumbnail.ShowImageSizeLabel = true;
//
// btnShowStats
//
resources.ApplyResources(this.btnShowStats, "btnShowStats");
this.btnShowStats.Name = "btnShowStats";
this.btnShowStats.UseVisualStyleBackColor = true;
this.btnShowStats.Click += new System.EventHandler(this.BtnShowStats_Click);
//
// lblMaxItemCount
//
resources.ApplyResources(this.lblMaxItemCount, "lblMaxItemCount");
@ -280,6 +266,58 @@ private void InitializeComponent()
this.txtFilenameFilter.Name = "txtFilenameFilter";
this.txtFilenameFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtFilenameFilter_KeyDown);
//
// tscHistory
//
//
// tscHistory.ContentPanel
//
this.tscHistory.ContentPanel.Controls.Add(this.lvHistory);
resources.ApplyResources(this.tscHistory.ContentPanel, "tscHistory.ContentPanel");
resources.ApplyResources(this.tscHistory, "tscHistory");
this.tscHistory.Name = "tscHistory";
//
// tscHistory.TopToolStripPanel
//
this.tscHistory.TopToolStripPanel.Controls.Add(this.tssHistory);
//
// tssHistory
//
resources.ApplyResources(this.tssHistory, "tssHistory");
this.tssHistory.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this.tssHistory.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tslSearch,
this.tstbSearch,
this.tsbSearch});
this.tssHistory.Name = "tssHistory";
this.tssHistory.ShowItemToolTips = false;
//
// tslSearch
//
this.tslSearch.Name = "tslSearch";
resources.ApplyResources(this.tslSearch, "tslSearch");
//
// tstbSearch
//
this.tstbSearch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
resources.ApplyResources(this.tstbSearch, "tstbSearch");
this.tstbSearch.Name = "tstbSearch";
this.tstbSearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tstbSearch_KeyDown);
//
// tsbSearch
//
this.tsbSearch.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.tsbSearch.Image = global::ShareX.HistoryLib.Properties.Resources.magnifier;
resources.ApplyResources(this.tsbSearch, "tsbSearch");
this.tsbSearch.Name = "tsbSearch";
this.tsbSearch.Click += new System.EventHandler(this.tsbSearch_Click);
//
// btnCopyStats
//
resources.ApplyResources(this.btnCopyStats, "btnCopyStats");
this.btnCopyStats.Name = "btnCopyStats";
this.btnCopyStats.UseVisualStyleBackColor = true;
this.btnCopyStats.Click += new System.EventHandler(this.btnCopyStats_Click);
//
// HistoryForm
//
resources.ApplyResources(this, "$this");
@ -296,10 +334,16 @@ private void InitializeComponent()
this.scMain.Panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.scMain)).EndInit();
this.scMain.ResumeLayout(false);
this.pStats.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.nudMaxItemCount)).EndInit();
this.gbFilters.ResumeLayout(false);
this.gbFilters.PerformLayout();
this.tscHistory.ContentPanel.ResumeLayout(false);
this.tscHistory.TopToolStripPanel.ResumeLayout(false);
this.tscHistory.TopToolStripPanel.PerformLayout();
this.tscHistory.ResumeLayout(false);
this.tscHistory.PerformLayout();
this.tssHistory.ResumeLayout(false);
this.tssHistory.PerformLayout();
this.ResumeLayout(false);
}
@ -329,10 +373,13 @@ private void InitializeComponent()
private System.Windows.Forms.Label lblFilenameFilter;
private System.Windows.Forms.Label lblURLFilter;
private System.Windows.Forms.TextBox txtURLFilter;
private System.Windows.Forms.Button btnShowStats;
private System.Windows.Forms.RichTextBox rtbStats;
private System.Windows.Forms.Panel pStats;
private System.Windows.Forms.Label lblMaxItemCount;
private System.Windows.Forms.NumericUpDown nudMaxItemCount;
private System.Windows.Forms.ToolStripContainer tscHistory;
private System.Windows.Forms.ToolStrip tssHistory;
private System.Windows.Forms.ToolStripLabel tslSearch;
private System.Windows.Forms.ToolStripTextBox tstbSearch;
private System.Windows.Forms.ToolStripButton tsbSearch;
private System.Windows.Forms.Button btnCopyStats;
}
}

View file

@ -30,7 +30,6 @@
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace ShareX.HistoryLib
@ -39,7 +38,6 @@ public partial class HistoryForm : Form
{
public string HistoryPath { get; private set; }
public HistorySettings Settings { get; private set; }
public bool SearchInTags { get; set; } = true;
private HistoryManager history;
private HistoryItemManager him;
@ -90,12 +88,12 @@ public HistoryForm(string historyPath, HistorySettings settings, Action<string>
private void RefreshHistoryItems()
{
allHistoryItems = GetHistoryItems();
ApplyFiltersAndAdd();
ApplyFilter();
}
private void OutputStats(HistoryItem[] historyItems)
{
rtbStats.ResetText();
/*rtbStats.ResetText();
rtbStats.SetFontBold();
rtbStats.AppendLine(Resources.HistoryItemCounts);
@ -145,7 +143,7 @@ private void OutputStats(HistoryItem[] historyItems)
OrderByDescending(x => x.Count()).
Select(x => string.Format("{0} ({1})", x.Key, x.Count()));
rtbStats.AppendLine(string.Join(Environment.NewLine, hosts));
rtbStats.AppendLine(string.Join(Environment.NewLine, hosts));*/
}
private HistoryItem[] him_GetHistoryItems()
@ -165,11 +163,36 @@ private HistoryItem[] GetHistoryItems()
return historyItems.ToArray();
}
private void ApplyFiltersAndAdd()
private void ApplyFilter()
{
HistoryFilter filter = new HistoryFilter()
{
FileName = txtFilenameFilter.Text,
URL = txtURLFilter.Text,
FilterDate = cbDateFilter.Checked,
FromDate = dtpFilterFrom.Value.Date,
ToDate = dtpFilterTo.Value.Date,
FilterType = cbTypeFilter.Checked,
Type = cbTypeFilterSelection.Text,
FilterHost = cbHostFilter.Checked,
Host = cbHostFilterSelection.Text
};
ApplyFilter(filter);
}
private void ApplyFilterSimple()
{
HistoryFilter filter = new HistoryFilter(tstbSearch.Text);
ApplyFilter(filter);
}
private void ApplyFilter(HistoryFilter filter)
{
if (allHistoryItems != null && allHistoryItems.Length > 0)
{
HistoryItem[] historyItems = ApplyFilters(allHistoryItems);
HistoryItem[] historyItems = filter.ApplyFilter(allHistoryItems);
if (Settings.MaxItemCount > 0 && historyItems.Length > Settings.MaxItemCount)
{
@ -180,63 +203,6 @@ private void ApplyFiltersAndAdd()
}
}
private HistoryItem[] ApplyFilters(HistoryItem[] historyItems)
{
if (!cbTypeFilter.Checked && !cbHostFilter.Checked && string.IsNullOrEmpty(txtFilenameFilter.Text) && string.IsNullOrEmpty(txtURLFilter.Text) && !cbDateFilter.Checked)
{
return historyItems;
}
IEnumerable<HistoryItem> result = historyItems.AsEnumerable();
if (cbTypeFilter.Checked)
{
string type = cbTypeFilterSelection.Text;
if (!string.IsNullOrEmpty(type))
{
result = result.Where(x => !string.IsNullOrEmpty(x.Type) && x.Type.Equals(type, StringComparison.InvariantCultureIgnoreCase));
}
}
if (cbHostFilter.Checked)
{
string host = cbHostFilterSelection.Text;
if (!string.IsNullOrEmpty(host))
{
result = result.Where(x => !string.IsNullOrEmpty(x.Host) && x.Host.Contains(host, StringComparison.InvariantCultureIgnoreCase));
}
}
string filenameFilter = txtFilenameFilter.Text;
if (!string.IsNullOrEmpty(filenameFilter))
{
string pattern = Regex.Escape(filenameFilter).Replace("\\?", ".").Replace("\\*", ".*");
Regex regex = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
result = result.Where(x => (x.FileName != null && regex.IsMatch(x.FileName)) ||
(SearchInTags && x.Tags != null && x.Tags.Any(tag => regex.IsMatch(tag.Value))));
}
string urlFilter = txtURLFilter.Text;
if (!string.IsNullOrEmpty(urlFilter))
{
result = result.Where(x => x.URL != null && x.URL.Contains(urlFilter, StringComparison.InvariantCultureIgnoreCase));
}
if (cbDateFilter.Checked)
{
DateTime fromDate = dtpFilterFrom.Value.Date;
DateTime toDate = dtpFilterTo.Value.Date;
result = result.Where(x => x.DateTime.Date >= fromDate && x.DateTime.Date <= toDate);
}
return result.ToArray();
}
private void AddHistoryItems(HistoryItem[] historyItems)
{
Cursor = Cursors.WaitCursor;
@ -395,13 +361,28 @@ private void scMain_SplitterMoved(object sender, SplitterEventArgs e)
Settings.SplitterDistance = scMain.SplitterDistance;
}
private void tstbSearch_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
e.SuppressKeyPress = true;
ApplyFilterSimple();
}
}
private void tsbSearch_Click(object sender, EventArgs e)
{
ApplyFilterSimple();
}
private void txtFilenameFilter_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
e.SuppressKeyPress = true;
ApplyFiltersAndAdd();
ApplyFilter();
txtFilenameFilter.Focus();
}
}
@ -412,14 +393,14 @@ private void txtURLFilter_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
e.SuppressKeyPress = true;
ApplyFiltersAndAdd();
ApplyFilter();
txtURLFilter.Focus();
}
}
private void btnApplyFilters_Click(object sender, EventArgs e)
{
ApplyFiltersAndAdd();
ApplyFilter();
}
private void btnRemoveFilters_Click(object sender, EventArgs e)
@ -427,9 +408,9 @@ private void btnRemoveFilters_Click(object sender, EventArgs e)
AddHistoryItems(allHistoryItems);
}
private void BtnShowStats_Click(object sender, EventArgs e)
private void btnCopyStats_Click(object sender, EventArgs e)
{
if (showingStats)
/*if (showingStats)
{
lvHistory.Visible = true;
pStats.Visible = false;
@ -445,7 +426,7 @@ private void BtnShowStats_Click(object sender, EventArgs e)
OutputStats(allHistoryItems);
Cursor = Cursors.Default;
showingStats = true;
}
}*/
}
private void nudMaxItemCount_ValueChanged(object sender, EventArgs e)

View file

@ -125,70 +125,22 @@
<data name="scMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="rtbStats.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
<data name="&gt;&gt;tscHistory.BottomToolStripPanel.Name" xml:space="preserve">
<value>tscHistory.BottomToolStripPanel</value>
</data>
<data name="rtbStats.Font" type="System.Drawing.Font, System.Drawing">
<value>Arial, 9.75pt</value>
<data name="&gt;&gt;tscHistory.BottomToolStripPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="rtbStats.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
<data name="&gt;&gt;tscHistory.BottomToolStripPanel.Parent" xml:space="preserve">
<value>tscHistory</value>
</data>
<data name="rtbStats.Size" type="System.Drawing.Size, System.Drawing">
<value>544, 635</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="rtbStats.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="rtbStats.Text" xml:space="preserve">
<value />
</data>
<data name="&gt;&gt;rtbStats.Name" xml:space="preserve">
<value>rtbStats</value>
</data>
<data name="&gt;&gt;rtbStats.Type" xml:space="preserve">
<value>System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;rtbStats.Parent" xml:space="preserve">
<value>pStats</value>
</data>
<data name="&gt;&gt;rtbStats.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="pStats.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="pStats.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="pStats.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="pStats.Size" type="System.Drawing.Size, System.Drawing">
<value>550, 641</value>
</data>
<data name="pStats.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="pStats.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;pStats.Name" xml:space="preserve">
<value>pStats</value>
</data>
<data name="&gt;&gt;pStats.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pStats.Parent" xml:space="preserve">
<value>scMain.Panel1</value>
</data>
<data name="&gt;&gt;pStats.ZOrder" xml:space="preserve">
<value>0</value>
<data name="&gt;&gt;tscHistory.BottomToolStripPanel.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="chIcon.Text" xml:space="preserve">
<value />
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="chIcon.Width" type="System.Int32, mscorlib">
<value>24</value>
</data>
@ -217,7 +169,7 @@
<value>0, 0</value>
</data>
<data name="lvHistory.Size" type="System.Drawing.Size, System.Drawing">
<value>550, 641</value>
<value>550, 616</value>
</data>
<data name="lvHistory.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -229,11 +181,134 @@
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.5.1.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvHistory.Parent" xml:space="preserve">
<value>scMain.Panel1</value>
<value>tscHistory.ContentPanel</value>
</data>
<data name="&gt;&gt;lvHistory.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tscHistory.ContentPanel.Size" type="System.Drawing.Size, System.Drawing">
<value>550, 616</value>
</data>
<data name="&gt;&gt;tscHistory.ContentPanel.Name" xml:space="preserve">
<value>tscHistory.ContentPanel</value>
</data>
<data name="&gt;&gt;tscHistory.ContentPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripContentPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tscHistory.ContentPanel.Parent" xml:space="preserve">
<value>tscHistory</value>
</data>
<data name="&gt;&gt;tscHistory.ContentPanel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tscHistory.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;tscHistory.LeftToolStripPanel.Name" xml:space="preserve">
<value>tscHistory.LeftToolStripPanel</value>
</data>
<data name="&gt;&gt;tscHistory.LeftToolStripPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tscHistory.LeftToolStripPanel.Parent" xml:space="preserve">
<value>tscHistory</value>
</data>
<data name="&gt;&gt;tscHistory.LeftToolStripPanel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tscHistory.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;tscHistory.RightToolStripPanel.Name" xml:space="preserve">
<value>tscHistory.RightToolStripPanel</value>
</data>
<data name="&gt;&gt;tscHistory.RightToolStripPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tscHistory.RightToolStripPanel.Parent" xml:space="preserve">
<value>tscHistory</value>
</data>
<data name="&gt;&gt;tscHistory.RightToolStripPanel.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="tscHistory.Size" type="System.Drawing.Size, System.Drawing">
<value>550, 641</value>
</data>
<data name="tscHistory.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tscHistory.Text" xml:space="preserve">
<value>toolStripContainer1</value>
</data>
<metadata name="tssHistory.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="tssHistory.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>None</value>
</data>
<data name="tslSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 22</value>
</data>
<data name="tslSearch.Text" xml:space="preserve">
<value>Search:</value>
</data>
<data name="tstbSearch.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="tstbSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 25</value>
</data>
<data name="tsbSearch.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="tssHistory.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 0</value>
</data>
<data name="tssHistory.Size" type="System.Drawing.Size, System.Drawing">
<value>373, 25</value>
</data>
<data name="tssHistory.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;tssHistory.Name" xml:space="preserve">
<value>tssHistory</value>
</data>
<data name="&gt;&gt;tssHistory.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tssHistory.Parent" xml:space="preserve">
<value>tscHistory.TopToolStripPanel</value>
</data>
<data name="&gt;&gt;tssHistory.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;tscHistory.TopToolStripPanel.Name" xml:space="preserve">
<value>tscHistory.TopToolStripPanel</value>
</data>
<data name="&gt;&gt;tscHistory.TopToolStripPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tscHistory.TopToolStripPanel.Parent" xml:space="preserve">
<value>tscHistory</value>
</data>
<data name="&gt;&gt;tscHistory.TopToolStripPanel.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;tscHistory.Name" xml:space="preserve">
<value>tscHistory</value>
</data>
<data name="&gt;&gt;tscHistory.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tscHistory.Parent" xml:space="preserve">
<value>scMain.Panel1</value>
</data>
<data name="&gt;&gt;tscHistory.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;scMain.Panel1.Name" xml:space="preserve">
<value>scMain.Panel1</value>
</data>
@ -249,6 +324,33 @@
<data name="scMain.Panel1MinSize" type="System.Int32, mscorlib">
<value>100</value>
</data>
<data name="btnCopyStats.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="btnCopyStats.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 608</value>
</data>
<data name="btnCopyStats.Size" type="System.Drawing.Size, System.Drawing">
<value>144, 23</value>
</data>
<data name="btnCopyStats.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="btnCopyStats.Text" xml:space="preserve">
<value>Copy stats</value>
</data>
<data name="&gt;&gt;btnCopyStats.Name" xml:space="preserve">
<value>btnCopyStats</value>
</data>
<data name="&gt;&gt;btnCopyStats.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnCopyStats.Parent" xml:space="preserve">
<value>scMain.Panel2</value>
</data>
<data name="&gt;&gt;btnCopyStats.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="nudMaxItemCount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
@ -274,7 +376,7 @@
<value>scMain.Panel2</value>
</data>
<data name="&gt;&gt;nudMaxItemCount.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="pbThumbnail.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
@ -283,7 +385,7 @@
<value>8, 8</value>
</data>
<data name="pbThumbnail.Size" type="System.Drawing.Size, System.Drawing">
<value>402, 352</value>
<value>400, 352</value>
</data>
<data name="pbThumbnail.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@ -298,36 +400,6 @@
<value>scMain.Panel2</value>
</data>
<data name="&gt;&gt;pbThumbnail.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="btnShowStats.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="btnShowStats.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnShowStats.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 604</value>
</data>
<data name="btnShowStats.Size" type="System.Drawing.Size, System.Drawing">
<value>144, 24</value>
</data>
<data name="btnShowStats.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="btnShowStats.Text" xml:space="preserve">
<value>Show stats</value>
</data>
<data name="&gt;&gt;btnShowStats.Name" xml:space="preserve">
<value>btnShowStats</value>
</data>
<data name="&gt;&gt;btnShowStats.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnShowStats.Parent" xml:space="preserve">
<value>scMain.Panel2</value>
</data>
<data name="&gt;&gt;btnShowStats.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="lblMaxItemCount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
@ -858,6 +930,24 @@
<data name="&gt;&gt;chURL.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tslSearch.Name" xml:space="preserve">
<value>tslSearch</value>
</data>
<data name="&gt;&gt;tslSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tstbSearch.Name" xml:space="preserve">
<value>tstbSearch</value>
</data>
<data name="&gt;&gt;tstbSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsbSearch.Name" xml:space="preserve">
<value>tsbSearch</value>
</data>
<data name="&gt;&gt;tsbSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>HistoryForm</value>
</data>

View file

@ -0,0 +1,106 @@
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright (c) 2007-2020 ShareX Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using ShareX.HelpersLib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace ShareX.HistoryLib
{
public class HistoryFilter
{
public string FileName { get; set; }
public string URL { get; set; }
public bool FilterDate { get; set; }
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public bool FilterType { get; set; }
public string Type { get; set; }
public bool FilterHost { get; set; }
public string Host { get; set; }
public bool SearchInTags { get; set; } = true;
public bool IsFiltered
{
get
{
return !string.IsNullOrEmpty(FileName) || !string.IsNullOrEmpty(URL) || FilterDate ||
(FilterType && !string.IsNullOrEmpty(Type)) || (FilterHost && !string.IsNullOrEmpty(Host));
}
}
public HistoryFilter()
{
}
public HistoryFilter(string filename)
{
FileName = filename;
}
public HistoryItem[] ApplyFilter(HistoryItem[] historyItems)
{
if (!IsFiltered)
{
return historyItems;
}
IEnumerable<HistoryItem> result = historyItems.AsEnumerable();
if (FilterType && !string.IsNullOrEmpty(Type))
{
result = result.Where(x => !string.IsNullOrEmpty(x.Type) && x.Type.Equals(Type, StringComparison.InvariantCultureIgnoreCase));
}
if (FilterHost && !string.IsNullOrEmpty(Host))
{
result = result.Where(x => !string.IsNullOrEmpty(x.Host) && x.Host.Contains(Host, StringComparison.InvariantCultureIgnoreCase));
}
if (!string.IsNullOrEmpty(FileName))
{
string pattern = Regex.Escape(FileName).Replace("\\?", ".").Replace("\\*", ".*");
Regex regex = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
result = result.Where(x => (x.FileName != null && regex.IsMatch(x.FileName)) ||
(SearchInTags && x.Tags != null && x.Tags.Any(tag => regex.IsMatch(tag.Value))));
}
if (!string.IsNullOrEmpty(URL))
{
result = result.Where(x => x.URL != null && x.URL.Contains(URL, StringComparison.InvariantCultureIgnoreCase));
}
if (FilterDate)
{
result = result.Where(x => x.DateTime.Date >= FromDate && x.DateTime.Date <= ToDate);
}
return result.ToArray();
}
}
}

View file

@ -86,6 +86,7 @@
<Compile Include="..\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="HistoryFilter.cs" />
<Compile Include="HistoryItemManager_ContextMenu.cs" />
<Compile Include="Forms\ImageHistoryForm.cs">
<SubType>Form</SubType>