private void BtnSendToArchive_Click(object sender, EventArgs e) { foreach (ListViewItem i in lstvwDelete.SelectedItems) { DiscardFile discardFile = i.Tag as DiscardFile; //Shows the save file dialog SaveFileDialog dia = new SaveFileDialog() { Title = "Archive " + DiscardFile.GetRealName(discardFile.Source.Name) }; //Add extension filters if (discardFile.Source is FileInfo f) { dia.Filter = $"Current extension (*{f.Extension})|*{f.Extension}|Any extension (*.*)|*"; dia.FileName = DiscardFile.GetRealName(discardFile.Source.Name); } else if (discardFile.Source is DirectoryInfo d) { dia.Filter = "File Directory|*"; dia.FileName = DiscardFile.GetRealName(discardFile.Source.Name); } //Shows the dialog if (dia.ShowDialog() == DialogResult.Cancel) { //If the user hit cancel, continue to the next file in the selection continue; } try { discardFile.Archive(dia.FileName); } catch (Exception) { MessageBox.Show("Could not archive file, Please try again, or in another location", "Archive failed", MessageBoxButtons.OK, MessageBoxIcon.Error); continue; } lstvwDelete.Items.Remove(i); } }
/// <summary> /// Creates a ToolStripMenuItem from a discard file /// </summary> /// <param name="file"></param> /// <returns></returns> private ToolStripMenuItem CreateContextMenuForDiscardFile(DiscardFile file) { //Create the button for the file ToolStripMenuItem fileButton = new ToolStripMenuItem() { Text = DiscardFile.GetRealName(file.Source.Name) + (file.Source is DirectoryInfo ? "\\" : ""), Image = ThumbnailGenerator.WindowsThumbnailProvider.GetThumbnail(file.Source.FullName, 16, 16, ThumbnailGenerator.ThumbnailOptions.None), Font = Control.DefaultFont }; fileButton.Click += (s, e) => Process.Start(file.Source.FullName); /* * Colorization */ //Based on extended timers if (file.DaysLeft > Properties.Settings.Default.DefaultDays) { fileButton.ForeColor = Color.FromArgb(75, 75, 75); fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " has an extended timer"; } //Based on modification time switch ((DateTime.Now - file.Source.LastWriteTime).Days) { case 0: fileButton.ForeColor = Color.Red; fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " was edited less than 24 hours ago"; break; case 1: fileButton.ForeColor = Color.Orange; fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " was edited less than 48 hours ago"; break; case 2: fileButton.ForeColor = Color.Goldenrod; fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " was edited less than 72 hours ago"; break; } //Based on tracking if (file.Untracked) { fileButton.ForeColor = Color.DodgerBlue; fileButton.BackColor = Color.LightSkyBlue; fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " is untracked"; } //Based on emptyness if ((file.Source is FileInfo f && f.Length == 0) || (file.Source is DirectoryInfo d && !d.EnumerateFileSystemInfos().Any())) { fileButton.ForeColor = Color.Green; fileButton.ToolTipText = "This " + (file.Source is FileInfo ? "file" : "directory") + " is empty and can safely be deleted"; } //Backcolor if (file.DaysLeft <= 0) { fileButton.BackColor = Color.Pink; } else if (file.DaysLeft == 1 && !file.Untracked) { fileButton.BackColor = Color.Wheat; } /* * Sub-buttons */ fileButton.DropDown.Items.Add("Open", null, (s, e) => { Process.Start(file.Source.FullName); }); fileButton.DropDown.Items.Add("Open file location", null, (s, e) => { if (file.Source is FileInfo fi) { Process.Start(fi.DirectoryName); } else if (file.Source is DirectoryInfo di) { Process.Start(di.Parent.FullName); } }); fileButton.DropDown.Items.Add("-"); if (file.HasExternalCounter) { fileButton.DropDown.Items.Add("Merge external tracker file", null, (s, e) => { file.MergeCounterFile(); }); } else { fileButton.DropDown.Items.Add("Create external tracker file", null, (s, e) => { file.CreateCounterFile(); }); } fileButton.DropDown.Items.Add("Archive...", null, (s, e) => { //Copied from the discard dialog //Shows the save file dialog SaveFileDialog dia = new SaveFileDialog() { Title = "Archive " + DiscardFile.GetRealName(file.Source.Name) }; //Add extension filters if (file.Source is FileInfo fi) { dia.Filter = $"Current extension (*{fi.Extension})|*{fi.Extension}|Any extension (*.*)|*"; dia.FileName = DiscardFile.GetRealName(file.Source.Name); } else if (file.Source is DirectoryInfo) { dia.Filter = "File Directory|*"; dia.FileName = DiscardFile.GetRealName(file.Source.Name); } //Shows the dialog if (dia.ShowDialog() == DialogResult.Cancel) { //If the user hit cancel, continue to the next file in the selection return; } try { file.Archive(dia.FileName); } catch (Exception) { MessageBox.Show("Could not archive file, Please try again, or in another location", "Archive failed", MessageBoxButtons.OK, MessageBoxIcon.Error); } }); fileButton.DropDown.Items.Add("Delete now...", null, (s, e) => { if (MessageBox.Show("Are you sure you want to permanently delete this file?", "Delete now", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK) { file.Delete(); } }); fileButton.DropDown.Items.Add("-"); (fileButton.DropDown.Items.Add("Set days left...") as ToolStripMenuItem).DropDown.Items.AddRange(new ToolStripItem[] { new ToolStripMenuItem("1 day", null, (s, e) => file.DaysLeft = 1), new ToolStripMenuItem("3 days", null, (s, e) => file.DaysLeft = 3), new ToolStripMenuItem("5 days", null, (s, e) => file.DaysLeft = 5), new ToolStripMenuItem("7 days", null, (s, e) => file.DaysLeft = 7), new ToolStripMenuItem("14 days", null, (s, e) => file.DaysLeft = 14), new ToolStripMenuItem("30 days", null, (s, e) => file.DaysLeft = 30), new ToolStripMenuItem("60 days", null, (s, e) => file.DaysLeft = 60), new ToolStripMenuItem("999 days", null, (s, e) => file.DaysLeft = 999), }); fileButton.DropDown.Items.Add(new ToolStripMenuItem("Warn before deletion", null, (s, e) => { file.NoWarning = !file.NoWarning; }) { Checked = !file.NoWarning }); return(fileButton); }