Compare commits
10 Commits
688652a703
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 3044da0413 | |||
| 7cb819d401 | |||
| b3476e455a | |||
| a68b36c02e | |||
| 87914ff327 | |||
| 1726eb9301 | |||
| 8156351973 | |||
| fa80b22ad0 | |||
| 2ef355bb2d | |||
| a622e419a1 |
@ -15,6 +15,15 @@ namespace Snap2HTML
|
||||
public bool openInBrowser { get; set; }
|
||||
public bool linkFiles { get; set; }
|
||||
public string linkRoot { get; set; }
|
||||
|
||||
public SnapSettings()
|
||||
{
|
||||
this.skipHiddenItems = true;
|
||||
this.skipSystemItems = true;
|
||||
this.openInBrowser = false;
|
||||
this.linkFiles = false;
|
||||
this.linkRoot = "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -47,15 +56,34 @@ namespace Snap2HTML
|
||||
this.Path = path;
|
||||
this.Properties = new Dictionary<string, string>();
|
||||
this.Files = new List<SnappedFile>();
|
||||
this.FullPath = ( this.Path + "\\" + this.Name ).Replace( "\\\\", "\\" );
|
||||
}
|
||||
|
||||
public string Name { get; set; }
|
||||
public string Path { get; set; }
|
||||
public string FullPath { get; set; }
|
||||
public Dictionary<string, string> Properties { get; set; }
|
||||
public List<SnappedFile> Files { get; set; }
|
||||
|
||||
public string GetFullPath()
|
||||
{
|
||||
string path;
|
||||
|
||||
if( this.Path.EndsWith( @"\" ) )
|
||||
path = this.Path + this.Name;
|
||||
else
|
||||
path = this.Path + @"\" + this.Name;
|
||||
|
||||
if( path.EndsWith( @"\" ) ) // remove trailing backslash
|
||||
{
|
||||
if(!Utils.IsWildcardMatch( @"?:\", path, false )) // except for drive letters
|
||||
{
|
||||
path = path.Remove( path.Length - 1 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
public string GetProp( string key )
|
||||
{
|
||||
if( this.Properties.ContainsKey( key ) )
|
||||
|
||||
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion( "2.11.0.0" )]
|
||||
[assembly: AssemblyFileVersion( "2.11.0.0" )]
|
||||
[assembly: AssemblyVersion( "2.14.0.0" )]
|
||||
[assembly: AssemblyFileVersion( "2.14.0.0" )]
|
||||
|
||||
@ -99,9 +99,9 @@
|
||||
Starts the program with the given root path already set
|
||||
|
||||
|
||||
Full: Snap2HTMl.exe [-path:"root folder path"] [-outfile:"filename"]
|
||||
Full: Snap2HTMl.exe -path:"root folder path" -outfile:"filename"
|
||||
[-link:"link to path"] [-title:"page title"]
|
||||
[-hidden] [-system]
|
||||
[-hidden] [-system] [-silent]
|
||||
|
||||
-path:"root folder path" - The root path to load.
|
||||
Example: -path:"c:\temp"
|
||||
@ -113,23 +113,26 @@
|
||||
-link:"link to path" - The path to link files to.
|
||||
Example: -link:"c:\temp"
|
||||
|
||||
-title:"page title" - Set the page title
|
||||
-title:"page title" - Set the page title. If omitted, title
|
||||
is generated based on path.
|
||||
|
||||
-hidden - Include hidden items
|
||||
|
||||
-hidden - Include hidden items
|
||||
|
||||
-system - Include system items
|
||||
|
||||
-silent - Run without showing the window (only
|
||||
if both -path and -outfile are used)
|
||||
|
||||
|
||||
Notes: Using -path and -outfile will cause the program to automatically
|
||||
start generating the snapshot, and quit when done!
|
||||
Notes: When both -path and -outfile are specified, the program will
|
||||
automatically start generating the snapshot, and quit when done.
|
||||
|
||||
Always surround paths and filenames with quotes ("")!
|
||||
|
||||
Do not include the [sqaure brackets] when you write your command
|
||||
line. (Sqaure brackets signify optional command line parameters)
|
||||
In silent mode, in case or error the program will just quit
|
||||
without telling why.
|
||||
|
||||
Do not include the [square brackets] when you write your command
|
||||
line. (Square brackets signify optional command line parameters)
|
||||
|
||||
|
||||
--- Template Design ---------------------------------------------------------
|
||||
@ -229,6 +232,20 @@
|
||||
v2.11 (2020-04-18)
|
||||
Fixed a threading issue that caused the program to hang on some systems
|
||||
|
||||
v2.12 (2020-04-29)
|
||||
Reduced memory consumsion when generating HTML
|
||||
Parent folder link [..] is now sticky
|
||||
Reworked command line code to fix issues in 2.11
|
||||
A few small tweaks too
|
||||
|
||||
v2.13 (2020-05-05)
|
||||
Fixed an encoding issue causing EncoderFallbackException while saving
|
||||
|
||||
v2.14 (2020-08-09)
|
||||
UNC paths work again (including linking)
|
||||
Searches returning lots of items should be a bit faster now
|
||||
And a few smaller fixes as usual
|
||||
|
||||
|
||||
--- End User License Agreement -----------------------------------------------
|
||||
|
||||
|
||||
53
Snap2HTML/frmMain.Designer.cs
generated
53
Snap2HTML/frmMain.Designer.cs
generated
@ -54,6 +54,7 @@
|
||||
this.pictureBox4 = new System.Windows.Forms.PictureBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||
this.pictureBoxDonate = new System.Windows.Forms.PictureBox();
|
||||
this.groupBoxMoreApps = new System.Windows.Forms.GroupBox();
|
||||
this.label33 = new System.Windows.Forms.Label();
|
||||
this.label32 = new System.Windows.Forms.Label();
|
||||
@ -78,6 +79,7 @@
|
||||
this.tabPage3.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
|
||||
this.tabPage2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBoxDonate)).BeginInit();
|
||||
this.groupBoxMoreApps.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
|
||||
@ -354,6 +356,7 @@
|
||||
//
|
||||
// tabPage2
|
||||
//
|
||||
this.tabPage2.Controls.Add(this.pictureBoxDonate);
|
||||
this.tabPage2.Controls.Add(this.groupBoxMoreApps);
|
||||
this.tabPage2.Controls.Add(this.pictureBox1);
|
||||
this.tabPage2.Controls.Add(this.linkLabel1);
|
||||
@ -368,6 +371,18 @@
|
||||
this.tabPage2.Text = "About";
|
||||
this.tabPage2.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// pictureBoxDonate
|
||||
//
|
||||
this.pictureBoxDonate.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.pictureBoxDonate.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxDonate.Image")));
|
||||
this.pictureBoxDonate.Location = new System.Drawing.Point(193, 132);
|
||||
this.pictureBoxDonate.Name = "pictureBoxDonate";
|
||||
this.pictureBoxDonate.Size = new System.Drawing.Size(74, 21);
|
||||
this.pictureBoxDonate.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.pictureBoxDonate.TabIndex = 6;
|
||||
this.pictureBoxDonate.TabStop = false;
|
||||
this.pictureBoxDonate.Click += new System.EventHandler(this.pictureBoxDonate_Click);
|
||||
//
|
||||
// groupBoxMoreApps
|
||||
//
|
||||
this.groupBoxMoreApps.Controls.Add(this.label33);
|
||||
@ -378,9 +393,9 @@
|
||||
this.groupBoxMoreApps.Controls.Add(this.label11);
|
||||
this.groupBoxMoreApps.Controls.Add(this.pictureBox3);
|
||||
this.groupBoxMoreApps.Controls.Add(this.pictureBox2);
|
||||
this.groupBoxMoreApps.Location = new System.Drawing.Point(6, 174);
|
||||
this.groupBoxMoreApps.Location = new System.Drawing.Point(6, 176);
|
||||
this.groupBoxMoreApps.Name = "groupBoxMoreApps";
|
||||
this.groupBoxMoreApps.Size = new System.Drawing.Size(318, 130);
|
||||
this.groupBoxMoreApps.Size = new System.Drawing.Size(318, 128);
|
||||
this.groupBoxMoreApps.TabIndex = 5;
|
||||
this.groupBoxMoreApps.TabStop = false;
|
||||
this.groupBoxMoreApps.Text = "More utilities by me";
|
||||
@ -389,7 +404,7 @@
|
||||
//
|
||||
this.label33.AutoSize = true;
|
||||
this.label33.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.label33.Location = new System.Drawing.Point(210, 29);
|
||||
this.label33.Location = new System.Drawing.Point(209, 27);
|
||||
this.label33.Name = "label33";
|
||||
this.label33.Size = new System.Drawing.Size(91, 13);
|
||||
this.label33.TabIndex = 13;
|
||||
@ -399,18 +414,18 @@
|
||||
//
|
||||
this.label32.AutoSize = true;
|
||||
this.label32.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.label32.Location = new System.Drawing.Point(66, 29);
|
||||
this.label32.Location = new System.Drawing.Point(58, 27);
|
||||
this.label32.Name = "label32";
|
||||
this.label32.Size = new System.Drawing.Size(66, 13);
|
||||
this.label32.Size = new System.Drawing.Size(108, 13);
|
||||
this.label32.TabIndex = 10;
|
||||
this.label32.Text = "Snap2IMG";
|
||||
this.label32.Text = "Exif Tag Remover";
|
||||
//
|
||||
// linkLabel3
|
||||
//
|
||||
this.linkLabel3.AutoSize = true;
|
||||
this.linkLabel3.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
|
||||
this.linkLabel3.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
|
||||
this.linkLabel3.Location = new System.Drawing.Point(66, 100);
|
||||
this.linkLabel3.Location = new System.Drawing.Point(58, 100);
|
||||
this.linkLabel3.Name = "linkLabel3";
|
||||
this.linkLabel3.Size = new System.Drawing.Size(51, 13);
|
||||
this.linkLabel3.TabIndex = 12;
|
||||
@ -421,18 +436,18 @@
|
||||
//
|
||||
// label17
|
||||
//
|
||||
this.label17.Location = new System.Drawing.Point(66, 42);
|
||||
this.label17.Location = new System.Drawing.Point(58, 40);
|
||||
this.label17.Name = "label17";
|
||||
this.label17.Size = new System.Drawing.Size(100, 74);
|
||||
this.label17.Size = new System.Drawing.Size(108, 74);
|
||||
this.label17.TabIndex = 11;
|
||||
this.label17.Text = "Generate contact sheets (thumbnail index) for folders on your hard drive.";
|
||||
this.label17.Text = "Delete all metadata before publishing images to protect your privacy.";
|
||||
//
|
||||
// linkLabel2
|
||||
//
|
||||
this.linkLabel2.AutoSize = true;
|
||||
this.linkLabel2.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
|
||||
this.linkLabel2.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
|
||||
this.linkLabel2.Location = new System.Drawing.Point(210, 100);
|
||||
this.linkLabel2.Location = new System.Drawing.Point(209, 100);
|
||||
this.linkLabel2.Name = "linkLabel2";
|
||||
this.linkLabel2.Size = new System.Drawing.Size(51, 13);
|
||||
this.linkLabel2.TabIndex = 10;
|
||||
@ -443,16 +458,16 @@
|
||||
//
|
||||
// label11
|
||||
//
|
||||
this.label11.Location = new System.Drawing.Point(210, 42);
|
||||
this.label11.Location = new System.Drawing.Point(209, 40);
|
||||
this.label11.Name = "label11";
|
||||
this.label11.Size = new System.Drawing.Size(102, 71);
|
||||
this.label11.TabIndex = 9;
|
||||
this.label11.Text = "File renaming utility with lots of time saving automation features.";
|
||||
this.label11.Text = "Advanced file renaming utility that will save you lots of time.";
|
||||
//
|
||||
// pictureBox3
|
||||
//
|
||||
this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
|
||||
this.pictureBox3.Location = new System.Drawing.Point(169, 29);
|
||||
this.pictureBox3.Location = new System.Drawing.Point(169, 27);
|
||||
this.pictureBox3.Name = "pictureBox3";
|
||||
this.pictureBox3.Size = new System.Drawing.Size(39, 48);
|
||||
this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
@ -462,9 +477,9 @@
|
||||
// pictureBox2
|
||||
//
|
||||
this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
|
||||
this.pictureBox2.Location = new System.Drawing.Point(12, 29);
|
||||
this.pictureBox2.Location = new System.Drawing.Point(10, 27);
|
||||
this.pictureBox2.Name = "pictureBox2";
|
||||
this.pictureBox2.Size = new System.Drawing.Size(48, 48);
|
||||
this.pictureBox2.Size = new System.Drawing.Size(46, 39);
|
||||
this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.pictureBox2.TabIndex = 0;
|
||||
this.pictureBox2.TabStop = false;
|
||||
@ -484,7 +499,7 @@
|
||||
this.linkLabel1.AutoSize = true;
|
||||
this.linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
|
||||
this.linkLabel1.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
|
||||
this.linkLabel1.Location = new System.Drawing.Point(163, 104);
|
||||
this.linkLabel1.Location = new System.Drawing.Point(163, 101);
|
||||
this.linkLabel1.Name = "linkLabel1";
|
||||
this.linkLabel1.Size = new System.Drawing.Size(120, 13);
|
||||
this.linkLabel1.TabIndex = 3;
|
||||
@ -495,7 +510,7 @@
|
||||
// labelAboutSoftware
|
||||
//
|
||||
this.labelAboutSoftware.AutoSize = true;
|
||||
this.labelAboutSoftware.Location = new System.Drawing.Point(163, 87);
|
||||
this.labelAboutSoftware.Location = new System.Drawing.Point(163, 84);
|
||||
this.labelAboutSoftware.Name = "labelAboutSoftware";
|
||||
this.labelAboutSoftware.Size = new System.Drawing.Size(135, 13);
|
||||
this.labelAboutSoftware.TabIndex = 2;
|
||||
@ -564,6 +579,7 @@
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
|
||||
this.tabPage2.ResumeLayout(false);
|
||||
this.tabPage2.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBoxDonate)).EndInit();
|
||||
this.groupBoxMoreApps.ResumeLayout(false);
|
||||
this.groupBoxMoreApps.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
|
||||
@ -618,6 +634,7 @@
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.LinkLabel linkLabel5;
|
||||
private System.Windows.Forms.Label label8;
|
||||
private System.Windows.Forms.PictureBox pictureBoxDonate;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -11,8 +11,8 @@ namespace Snap2HTML
|
||||
{
|
||||
public partial class frmMain : Form
|
||||
{
|
||||
private string outFile = ""; // set when automating via command line
|
||||
private bool initDone = false;
|
||||
private bool runningAutomated = false;
|
||||
|
||||
public frmMain()
|
||||
{
|
||||
@ -61,44 +61,68 @@ namespace Snap2HTML
|
||||
{
|
||||
// parse command line
|
||||
var commandLine = Environment.CommandLine;
|
||||
commandLine = commandLine.Replace( "-output:", "-outfile:" ); // correct wrong parameter to avoid confusion
|
||||
var splitCommandLine = Arguments.SplitCommandLine(commandLine);
|
||||
var arguments = new Arguments(splitCommandLine);
|
||||
|
||||
// first test for single argument (ie path only)
|
||||
if (splitCommandLine.Length == 2 && !arguments.Exists("path"))
|
||||
{
|
||||
if (System.IO.Directory.Exists(splitCommandLine[1]))
|
||||
{
|
||||
if( splitCommandLine.Length == 2 && !arguments.Exists( "path" ) )
|
||||
{
|
||||
if( System.IO.Directory.Exists( splitCommandLine[1] ) )
|
||||
{
|
||||
SetRootPath( splitCommandLine[1] );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var autoRun = false;
|
||||
|
||||
if (arguments.IsTrue("hidden")) chkHidden.Checked = true;
|
||||
if (arguments.IsTrue("system")) chkSystem.Checked = true;
|
||||
if( arguments.Exists( "path" ) )
|
||||
var settings = new SnapSettings();
|
||||
if( arguments.Exists( "path" ) && arguments.Exists( "outfile" ) )
|
||||
{
|
||||
// note: relative paths not handled
|
||||
string path = arguments.Single( "path" );
|
||||
if( !System.IO.Directory.Exists( path ) ) path = Environment.CurrentDirectory + System.IO.Path.DirectorySeparatorChar + path;
|
||||
this.runningAutomated = true;
|
||||
|
||||
if( System.IO.Directory.Exists( path ) )
|
||||
{
|
||||
SetRootPath( path );
|
||||
settings.rootFolder = arguments.Single( "path" );
|
||||
settings.outputFile = arguments.Single( "outfile" );
|
||||
|
||||
// First validate paths
|
||||
if( !System.IO.Directory.Exists( settings.rootFolder ) )
|
||||
{
|
||||
if( !arguments.Exists( "silent" ) )
|
||||
{
|
||||
MessageBox.Show( "Input path does not exist: " + settings.rootFolder, "Automation Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
|
||||
}
|
||||
Application.Exit();
|
||||
}
|
||||
if( !System.IO.Directory.Exists( System.IO.Path.GetDirectoryName(settings.outputFile) ) )
|
||||
{
|
||||
if( !arguments.Exists( "silent" ) )
|
||||
{
|
||||
MessageBox.Show( "Output path does not exist: " + System.IO.Path.GetDirectoryName( settings.outputFile ), "Automation Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
|
||||
}
|
||||
Application.Exit();
|
||||
}
|
||||
|
||||
// Rest of settings
|
||||
|
||||
settings.skipHiddenItems = !arguments.Exists( "hidden" );
|
||||
settings.skipSystemItems = !arguments.Exists( "system" );
|
||||
settings.openInBrowser = false;
|
||||
|
||||
settings.linkFiles = false;
|
||||
if( arguments.Exists( "link" ) )
|
||||
{
|
||||
settings.linkFiles = true;
|
||||
settings.linkRoot = arguments.Single( "link" );
|
||||
}
|
||||
|
||||
settings.title = "Snapshot of " + settings.rootFolder;
|
||||
if( arguments.Exists( "title" ) )
|
||||
{
|
||||
settings.title = arguments.Single( "title" );
|
||||
}
|
||||
|
||||
// if outfile is also given, start generating snapshot
|
||||
if (arguments.Exists("outfile"))
|
||||
{
|
||||
autoRun = true;
|
||||
outFile = arguments.Single("outfile");
|
||||
cmdCreate.PerformClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// keep window hidden in silent mode
|
||||
if( arguments.IsTrue( "silent" ) && autoRun )
|
||||
if( arguments.IsTrue( "silent" ) && this.runningAutomated )
|
||||
{
|
||||
Visible = false;
|
||||
}
|
||||
@ -107,24 +131,17 @@ namespace Snap2HTML
|
||||
Opacity = 100;
|
||||
}
|
||||
|
||||
// run link/title after path, since path automatically updates title
|
||||
if( arguments.Exists( "link" ) )
|
||||
if( this.runningAutomated )
|
||||
{
|
||||
chkLinkFiles.Checked = true;
|
||||
txtLinkRoot.Text = arguments.Single( "link" );
|
||||
txtLinkRoot.Enabled = true;
|
||||
StartProcessing( settings );
|
||||
}
|
||||
if( arguments.Exists( "title" ) )
|
||||
{
|
||||
txtTitle.Text = arguments.Single( "title" );
|
||||
}
|
||||
}
|
||||
|
||||
private void frmMain_FormClosing( object sender, FormClosingEventArgs e )
|
||||
{
|
||||
if( backgroundWorker.IsBusy ) e.Cancel = true;
|
||||
|
||||
if( outFile == "" ) // don't save settings when automated through command line
|
||||
if( !this.runningAutomated ) // don't save settings when automated through command line
|
||||
{
|
||||
Snap2HTML.Properties.Settings.Default.WindowLeft = this.Left;
|
||||
Snap2HTML.Properties.Settings.Default.WindowTop = this.Top;
|
||||
@ -144,7 +161,7 @@ namespace Snap2HTML
|
||||
}
|
||||
catch( System.Exception ex )
|
||||
{
|
||||
MessageBox.Show( "Could not select folder: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
|
||||
MessageBox.Show( "Could not select folder:\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
|
||||
SetRootPath( "", false );
|
||||
}
|
||||
}
|
||||
@ -152,57 +169,25 @@ namespace Snap2HTML
|
||||
|
||||
private void cmdCreate_Click(object sender, EventArgs e)
|
||||
{
|
||||
// ensure source path format
|
||||
txtRoot.Text = System.IO.Path.GetFullPath( txtRoot.Text );
|
||||
if (txtRoot.Text.EndsWith(@"\")) txtRoot.Text = txtRoot.Text.Substring(0, txtRoot.Text.Length - 1);
|
||||
if( Utils.IsWildcardMatch( "?:", txtRoot.Text, false ) ) txtRoot.Text += @"\"; // add backslash to path if only letter and colon eg "c:"
|
||||
|
||||
// add slash or backslash to end of link (in cases where it is clearthat we we can)
|
||||
if( !txtLinkRoot.Text.EndsWith( @"/" ) && txtLinkRoot.Text.ToLower().StartsWith( @"http" ) ) // web site
|
||||
// ask for output file
|
||||
string fileName = new System.IO.DirectoryInfo( txtRoot.Text + @"\" ).Name;
|
||||
char[] invalid = System.IO.Path.GetInvalidFileNameChars();
|
||||
for (int i = 0; i < invalid.Length; i++)
|
||||
{
|
||||
txtLinkRoot.Text += @"/";
|
||||
}
|
||||
if( !txtLinkRoot.Text.EndsWith( @"\" ) && Utils.IsWildcardMatch( "?:*", txtLinkRoot.Text, false ) ) // local disk
|
||||
{
|
||||
txtLinkRoot.Text += @"\";
|
||||
fileName = fileName.Replace(invalid[i].ToString(), "");
|
||||
}
|
||||
|
||||
// get output file
|
||||
if( outFile == "" )
|
||||
{
|
||||
string fileName = new System.IO.DirectoryInfo( txtRoot.Text + @"\" ).Name;
|
||||
char[] invalid = System.IO.Path.GetInvalidFileNameChars();
|
||||
for (int i = 0; i < invalid.Length; i++)
|
||||
{
|
||||
fileName = fileName.Replace(invalid[i].ToString(), "");
|
||||
}
|
||||
|
||||
saveFileDialog1.DefaultExt = "html";
|
||||
if( !fileName.ToLower().EndsWith( ".html" ) ) fileName += ".html";
|
||||
saveFileDialog1.FileName = fileName;
|
||||
saveFileDialog1.Filter = "HTML files (*.html)|*.html|All files (*.*)|*.*";
|
||||
saveFileDialog1.InitialDirectory = System.IO.Path.GetDirectoryName(txtRoot.Text);
|
||||
if (saveFileDialog1.ShowDialog() != DialogResult.OK) return;
|
||||
}
|
||||
else // command line
|
||||
{
|
||||
saveFileDialog1.FileName = outFile;
|
||||
}
|
||||
saveFileDialog1.DefaultExt = "html";
|
||||
if( !fileName.ToLower().EndsWith( ".html" ) ) fileName += ".html";
|
||||
saveFileDialog1.FileName = fileName;
|
||||
saveFileDialog1.Filter = "HTML files (*.html)|*.html|All files (*.*)|*.*";
|
||||
saveFileDialog1.InitialDirectory = System.IO.Path.GetDirectoryName(txtRoot.Text);
|
||||
saveFileDialog1.CheckPathExists = true;
|
||||
if (saveFileDialog1.ShowDialog() != DialogResult.OK) return;
|
||||
|
||||
if( !saveFileDialog1.FileName.ToLower().EndsWith( ".html" ) ) saveFileDialog1.FileName += ".html";
|
||||
|
||||
// make sure output path exists
|
||||
if( !System.IO.Directory.Exists( System.IO.Path.GetDirectoryName( saveFileDialog1.FileName ) ) )
|
||||
{
|
||||
MessageBox.Show( "The output folder does not exists...\n\n" + System.IO.Path.GetDirectoryName( saveFileDialog1.FileName ), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
|
||||
return;
|
||||
}
|
||||
|
||||
// begin generating html
|
||||
Cursor.Current = Cursors.WaitCursor;
|
||||
this.Text = "Snap2HTML (Working... Press Escape to Cancel)";
|
||||
tabControl1.Enabled = false;
|
||||
|
||||
var settings = new SnapSettings()
|
||||
{
|
||||
rootFolder = txtRoot.Text,
|
||||
@ -214,8 +199,40 @@ namespace Snap2HTML
|
||||
linkFiles = chkLinkFiles.Checked,
|
||||
linkRoot = txtLinkRoot.Text,
|
||||
};
|
||||
backgroundWorker.RunWorkerAsync(argument: settings);
|
||||
StartProcessing(settings);
|
||||
}
|
||||
|
||||
private void StartProcessing(SnapSettings settings)
|
||||
{
|
||||
// ensure source path format
|
||||
settings.rootFolder = System.IO.Path.GetFullPath( settings.rootFolder );
|
||||
if( settings.rootFolder.EndsWith( @"\" ) ) settings.rootFolder = settings.rootFolder.Substring( 0, settings.rootFolder.Length - 1 );
|
||||
if( Utils.IsWildcardMatch( "?:", settings.rootFolder, false ) ) settings.rootFolder += @"\"; // add backslash to path if only letter and colon eg "c:"
|
||||
|
||||
// add slash or backslash to end of link (in cases where it is clear that we we can)
|
||||
if( settings.linkFiles )
|
||||
{
|
||||
if( !settings.linkRoot.EndsWith( @"/" ) )
|
||||
{
|
||||
if( settings.linkRoot.ToLower().StartsWith( @"http" ) ) // web site
|
||||
{
|
||||
settings.linkRoot += @"/";
|
||||
}
|
||||
if( Utils.IsWildcardMatch( "?:*", settings.linkRoot, false ) ) // local disk
|
||||
{
|
||||
settings.linkRoot += @"\";
|
||||
}
|
||||
if( settings.linkRoot.StartsWith( @"\\" ) ) // unc path
|
||||
{
|
||||
settings.linkRoot += @"\";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Cursor.Current = Cursors.WaitCursor;
|
||||
this.Text = "Snap2HTML (Working... Press Escape to Cancel)";
|
||||
tabControl1.Enabled = false;
|
||||
backgroundWorker.RunWorkerAsync( argument: settings );
|
||||
}
|
||||
|
||||
private void backgroundWorker_ProgressChanged( object sender, ProgressChangedEventArgs e )
|
||||
@ -233,7 +250,7 @@ namespace Snap2HTML
|
||||
this.Text = "Snap2HTML";
|
||||
|
||||
// Quit when finished if automated via command line
|
||||
if( outFile != "" )
|
||||
if( this.runningAutomated )
|
||||
{
|
||||
Application.Exit();
|
||||
}
|
||||
@ -254,11 +271,11 @@ namespace Snap2HTML
|
||||
}
|
||||
private void linkLabel3_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
|
||||
{
|
||||
System.Diagnostics.Process.Start( @"http://www.rlvision.com/snap2img/about.asp" );
|
||||
System.Diagnostics.Process.Start( @"https://rlvision.com/exif/about.php" );
|
||||
}
|
||||
private void linkLabel2_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
|
||||
{
|
||||
System.Diagnostics.Process.Start( @"http://www.rlvision.com/flashren/about.asp" );
|
||||
System.Diagnostics.Process.Start( @"http://www.rlvision.com/flashren/about.php" );
|
||||
}
|
||||
private void linkLabel4_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
|
||||
{
|
||||
@ -266,7 +283,11 @@ namespace Snap2HTML
|
||||
}
|
||||
private void linkLabel5_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
|
||||
{
|
||||
System.Diagnostics.Process.Start( @"http://www.rlvision.com/contact.asp" );
|
||||
System.Diagnostics.Process.Start( @"http://www.rlvision.com/contact.php" );
|
||||
}
|
||||
private void pictureBoxDonate_Click( object sender, EventArgs e )
|
||||
{
|
||||
System.Diagnostics.Process.Start( @"https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=U3E4HE8HMY9Q4&item_name=Snap2HTML¤cy_code=USD&source=url" );
|
||||
}
|
||||
|
||||
// Drag & Drop handlers
|
||||
|
||||
@ -494,6 +494,35 @@
|
||||
jTImu2uXMzlKjrHmOMi2HdX5XuWSJmvKfmgyh+cNp8H6sf+27Lsm+y3Dfgvqr611T/8VtDTJLpqNOUXr
|
||||
pv6L5CL5mS0+oHBCISJ/spaaoiaNUoPpu7oB1TR69G3yfkUeX0J/vgj+zvwzMC20NMkumo3v+d9Bs/E9
|
||||
/ztoNr7nfwfNxvf8rwDl/wALZf6ZRmxttQAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxDonate.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
BxNMsMEKB2zwv/8ifDALKZxgVEAAOw==
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
@ -552,110 +581,62 @@
|
||||
</data>
|
||||
<data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
|
||||
@ -53,14 +53,14 @@ namespace Snap2HTML
|
||||
var sbTemplate = new StringBuilder();
|
||||
try
|
||||
{
|
||||
using( System.IO.StreamReader reader = new System.IO.StreamReader( System.IO.Path.GetDirectoryName( Application.ExecutablePath ) + System.IO.Path.DirectorySeparatorChar + "template.html" ) )
|
||||
using( System.IO.StreamReader reader = new System.IO.StreamReader( System.IO.Path.GetDirectoryName( Application.ExecutablePath ) + System.IO.Path.DirectorySeparatorChar + "template.html", Encoding.UTF8 ) )
|
||||
{
|
||||
sbTemplate.Append(reader.ReadToEnd());
|
||||
}
|
||||
}
|
||||
catch( System.Exception ex )
|
||||
{
|
||||
MessageBox.Show( "Failed to open 'Template.html' for reading...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
|
||||
MessageBox.Show( "Failed to open 'Template.html' for reading:\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
|
||||
backgroundWorker.ReportProgress( 0, "An error occurred..." );
|
||||
return;
|
||||
}
|
||||
@ -75,7 +75,7 @@ namespace Snap2HTML
|
||||
sbTemplate.Replace( "[NUM FILES]", totFiles.ToString() );
|
||||
sbTemplate.Replace( "[NUM DIRS]", totDirs.ToString() );
|
||||
sbTemplate.Replace( "[TOT SIZE]", totSize.ToString() );
|
||||
if( chkLinkFiles.Checked )
|
||||
if( settings.linkFiles )
|
||||
{
|
||||
sbTemplate.Replace( "[LINK FILES]", "true" );
|
||||
sbTemplate.Replace( "[LINK ROOT]", settings.linkRoot.Replace( @"\", "/" ) );
|
||||
@ -86,10 +86,15 @@ namespace Snap2HTML
|
||||
{
|
||||
sbTemplate.Replace( "[LINK PROTOCOL]", @"file://" );
|
||||
}
|
||||
else if( link_root.StartsWith( "//" ) ) // for UNC paths e.g. \\server\path
|
||||
{
|
||||
sbTemplate.Replace( "[LINK PROTOCOL]", @"file://///" );
|
||||
}
|
||||
else
|
||||
{
|
||||
sbTemplate.Replace( "[LINK PROTOCOL]", "" );
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -102,8 +107,10 @@ namespace Snap2HTML
|
||||
// Write output file
|
||||
try
|
||||
{
|
||||
using( System.IO.StreamWriter writer = new System.IO.StreamWriter( settings.outputFile ) )
|
||||
using( System.IO.StreamWriter writer = new System.IO.StreamWriter( settings.outputFile, false, Encoding.UTF8 ) )
|
||||
{
|
||||
writer.AutoFlush = true;
|
||||
|
||||
var template = sbTemplate.ToString();
|
||||
var startOfData = template.IndexOf( "[DIR DATA]" );
|
||||
|
||||
@ -129,7 +136,7 @@ namespace Snap2HTML
|
||||
}
|
||||
catch( Exception ex )
|
||||
{
|
||||
MessageBox.Show( "Failed to open file for writing:\n\n" + ex, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
|
||||
MessageBox.Show( "Failed to open file for writing:\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
|
||||
backgroundWorker.ReportProgress( 0, "An error occurred..." );
|
||||
return;
|
||||
}
|
||||
@ -346,17 +353,19 @@ namespace Snap2HTML
|
||||
var dirIndexes = new Dictionary<string, string>();
|
||||
for( var i = 0; i < content.Count; i++ )
|
||||
{
|
||||
dirIndexes.Add( content[i].FullPath, ( i + startIndex ).ToString() );
|
||||
dirIndexes.Add( content[i].GetFullPath(), ( i + startIndex ).ToString() );
|
||||
}
|
||||
|
||||
// Build a lookup table with subfolder IDs for each folder
|
||||
var subdirs = new Dictionary<string, List<string>>();
|
||||
foreach( var dir in content )
|
||||
{
|
||||
subdirs.Add( dir.FullPath, new List<string>() );
|
||||
// add all folders as keys
|
||||
subdirs.Add( dir.GetFullPath(), new List<string>() );
|
||||
}
|
||||
if( !subdirs.ContainsKey( content[0].Path ) && content[0].Name != "" )
|
||||
{
|
||||
// ensure that root folder is not missed missed
|
||||
subdirs.Add( content[0].Path, new List<string>() );
|
||||
}
|
||||
foreach( var dir in content )
|
||||
@ -365,7 +374,8 @@ namespace Snap2HTML
|
||||
{
|
||||
try
|
||||
{
|
||||
subdirs[dir.Path].Add( dirIndexes[dir.FullPath] );
|
||||
// for each folder, add its index to its parent folder list of subdirs
|
||||
subdirs[dir.Path].Add( dirIndexes[dir.GetFullPath()] );
|
||||
}
|
||||
catch( Exception ex )
|
||||
{
|
||||
@ -380,7 +390,7 @@ namespace Snap2HTML
|
||||
{
|
||||
result.Append( "D.p([" + lineBreakSymbol );
|
||||
|
||||
var sDirWithForwardSlash = currentDir.FullPath.Replace( @"\", "/" );
|
||||
var sDirWithForwardSlash = currentDir.GetFullPath().Replace( @"\", "/" );
|
||||
result.Append( "\"" ).Append( Utils.MakeCleanJsString( sDirWithForwardSlash ) ).Append( "*" ).Append( "0" ).Append( "*" ).Append( currentDir.GetProp( "Modified" ) ).Append( "\"," + lineBreakSymbol );
|
||||
|
||||
long dirSize = 0;
|
||||
@ -395,7 +405,7 @@ namespace Snap2HTML
|
||||
result.Append( "" ).Append( dirSize ).Append( "," + lineBreakSymbol );
|
||||
|
||||
// Add reference to subdirs
|
||||
result.Append( "\"" ).Append( String.Join( "*", subdirs[currentDir.FullPath].ToArray() ) ).Append( "\"" + lineBreakSymbol ); // subdirs
|
||||
result.Append( "\"" ).Append( String.Join( "*", subdirs[currentDir.GetFullPath()].ToArray() ) ).Append( "\"" + lineBreakSymbol );
|
||||
|
||||
// Finalize
|
||||
result.Append( "])" );
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE HTML>
|
||||
<!DOCTYPE HTML>
|
||||
<!-- saved from url=(0016)http://localhost -->
|
||||
<!-- This file was generated by [APP NAME] [APP VER] at [GEN DATE] [GEN TIME]. See [APP LINK] for more information -->
|
||||
<html>
|
||||
@ -172,6 +172,22 @@
|
||||
|
||||
.list_files {
|
||||
overflow: auto;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.search_indicator {
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
background-color: white;
|
||||
opacity: 0.7;
|
||||
text-align: center;
|
||||
padding-top: 100px;
|
||||
font-size: 18px;
|
||||
display: none;
|
||||
z-index: 99;
|
||||
}
|
||||
|
||||
/* --- Splitter --- */
|
||||
@ -188,6 +204,7 @@
|
||||
font-family:arial;
|
||||
background-color: #cdcdcd;
|
||||
font-size: 8pt;
|
||||
line-height: 1.25em;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
border-spacing: 0px;
|
||||
@ -216,7 +233,11 @@
|
||||
border-top: 1px solid #e0e0e0;
|
||||
padding: 3px 4px 3px 4px;
|
||||
}
|
||||
#files.tablesorter tbody tr:nth-child(even) td {
|
||||
|
||||
#files.tablesorter:not(.has-parent-folder) tbody tr:nth-child(even) td {
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
#files.tablesorter.has-parent-folder tbody tr:nth-child(odd) td {
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
|
||||
@ -276,6 +297,28 @@
|
||||
}
|
||||
|
||||
|
||||
/* make room for [..] */
|
||||
#files.tablesorter.has-parent-folder th {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
#files.tablesorter.has-parent-folder tbody tr:first-child td {
|
||||
border-top: 20px solid white;
|
||||
}
|
||||
#parent_folder {
|
||||
position: absolute;
|
||||
top: 24px;
|
||||
left: 4px;
|
||||
}
|
||||
#parent_folder_border {
|
||||
background-color: #e0e0e0;
|
||||
height: 1px;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
top: 42px;
|
||||
}
|
||||
|
||||
|
||||
/* --- Breadcrumb --- */
|
||||
|
||||
.list_header {
|
||||
@ -369,7 +412,7 @@
|
||||
}
|
||||
.export_text {
|
||||
width: 100%;
|
||||
height: calc(100% - 5em); /* two .export_options => 4em + save link*/
|
||||
height: calc(100% - 5.25em); /* two .export_options => 4em + save link*/
|
||||
}
|
||||
.export_close:link, .export_close:visited {
|
||||
float: right;
|
||||
@ -773,6 +816,7 @@
|
||||
var originalHash = location.hash.replace(/#/,"");
|
||||
var SelectedFolderID = "-1";
|
||||
var currentView;
|
||||
var onlyLinkExtensions = []; // example: ["jpg","png"]
|
||||
|
||||
/* --- Init --- */
|
||||
|
||||
@ -942,13 +986,17 @@
|
||||
return;
|
||||
}
|
||||
|
||||
var showLocationColumn = true;
|
||||
|
||||
if( numberOfFiles > 5000 ) {
|
||||
$("#list_header").html( "Searching..." );
|
||||
$("#search_indicator").show();
|
||||
//$("#list_header").html( "Searching..." );
|
||||
showLocationColumn = false;
|
||||
}
|
||||
|
||||
location.hash = "";
|
||||
|
||||
setTimeout(function(){ // timeout allows redrawing screen before possible timeconsuming search
|
||||
setTimeout(function(){ // timeout allows redrawing screen before possible time consuming search
|
||||
|
||||
if( SelectedFolderID != -1 )
|
||||
{
|
||||
@ -1005,9 +1053,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
var locationHtml = "";
|
||||
|
||||
if(showLocationColumn) locationHtml = "<th>Folder</th>";
|
||||
|
||||
currentView = [];
|
||||
var table_html = "";
|
||||
table_html += "<table id='files' class='tablesorter'><thead><tr><th>Name</th><th>Folder</th><th>Size</th><th>Modified</th></tr></thead><tbody>\n";
|
||||
table_html += "<table id='files' class='tablesorter'><thead><tr><th>Name</th>" +
|
||||
locationHtml +
|
||||
"<th>Size</th><th>Modified</th></tr></thead><tbody>";
|
||||
|
||||
var countFiles = 0;
|
||||
var countDirs = 0;
|
||||
@ -1051,18 +1105,23 @@
|
||||
sizeDirs += SearchFilenames[index][1];
|
||||
var subdir_id = parent_folders[ SearchLocationsID[index] ];
|
||||
|
||||
var located_in = SearchLocations[index];
|
||||
if( located_in === "" ) located_in = "[.]"
|
||||
located_in = located_in.substring( 0, located_in.lastIndexOf("\\") );
|
||||
var timestamp = timestampToDate(SearchFilenames[index][2]);
|
||||
|
||||
locationHtml = "";
|
||||
if(showLocationColumn) {
|
||||
var located_in = SearchLocations[index];
|
||||
if( located_in === "" ) located_in = "[.]"
|
||||
located_in = located_in.substring( 0, located_in.lastIndexOf("\\") );
|
||||
locationHtml = "<td><span class='file_folder'><a href=\"#\" class=\"folder_link\" id=\"" + subdir_id + "\"> " + located_in + "</a></span></td>";
|
||||
}
|
||||
|
||||
table_html +=
|
||||
"<tr>" +
|
||||
"<td><span class='file_folder'><a href=\"#\" class=\"folder_link\" id=\"" + SearchLocationsID[index] + "\"> " + SearchFilenames[index][3] + "</a></span></td>" +
|
||||
"<td><span class='file_folder'><a href=\"#\" class=\"folder_link\" id=\"" + subdir_id + "\"> " + located_in + "</a></span></td>" +
|
||||
locationHtml +
|
||||
"<td class='size' data-sort='" + SearchFilenames[index][1] + "'>" + bytesToSize( SearchFilenames[index][1] ) + "</td>" +
|
||||
"<td class='date' data-sort='" + SearchFilenames[index][2] + "'>" + timestamp + "</td>" +
|
||||
"</tr>\n";
|
||||
"</tr>";
|
||||
currentView.push( { "name": SearchFilenames[index][3], "path": SearchLocationsRaw[index].replace(/\//g,"\\"), "type": "dir", "size": SearchFilenames[index][1], "date": SearchFilenames[index][2] } );
|
||||
}
|
||||
else // files
|
||||
@ -1074,41 +1133,51 @@
|
||||
|
||||
if( linkFiles )
|
||||
{
|
||||
file_tmp = linkProtocol + linkRoot + dir_tmp.replace("\\","/") + SearchFilenames[index][3] + "\">";
|
||||
if( navigator.userAgent.toLowerCase().indexOf("msie") !== -1 && linkProtocol.indexOf("file:") !== -1 )
|
||||
{
|
||||
file_tmp = "javascript:alert('Internet Explorer does not allow linking to local files...')" + "\">";
|
||||
}
|
||||
if( file_tmp.substr(0,1) === "/" ) file_tmp = file_tmp.substr(1);
|
||||
file_tmp = file_tmp.replace(/\\/g,"/");
|
||||
file_tmp = file_tmp.replace(/#/g,"%23");
|
||||
|
||||
var indx = file_tmp.indexOf("://");
|
||||
if( indx !== -1 )
|
||||
{
|
||||
var protocol_tmp = file_tmp.substr(0,indx+3);
|
||||
file_tmp = file_tmp.substr(indx+3);
|
||||
file_tmp = file_tmp.replace(/\/\//g,"/");
|
||||
file_tmp = protocol_tmp + file_tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
file_tmp = file_tmp.replace(/\/\//g,"/");
|
||||
}
|
||||
var ext = file_tmp.split('.').pop();
|
||||
if(onlyLinkExtensions.length === 0 || onlyLinkExtensions.indexOf(ext) !== -1) {
|
||||
|
||||
file_tmp = "<a href=\"" + file_tmp + SearchFilenames[index][3] + "</a>";
|
||||
file_tmp = linkProtocol + linkRoot + dir_tmp.replace("\\","/") + SearchFilenames[index][3] + "\">";
|
||||
if( navigator.userAgent.toLowerCase().indexOf("msie") !== -1 && linkProtocol.indexOf("file:") !== -1 )
|
||||
{
|
||||
file_tmp = "javascript:alert('Internet Explorer does not allow linking to local files...')" + "\">";
|
||||
}
|
||||
if( file_tmp.substr(0,1) === "/" ) file_tmp = file_tmp.substr(1);
|
||||
file_tmp = file_tmp.replace(/\\/g,"/");
|
||||
file_tmp = file_tmp.replace(/#/g,"%23");
|
||||
|
||||
var indx = file_tmp.indexOf("://");
|
||||
if( indx !== -1 )
|
||||
{
|
||||
var protocol_tmp = file_tmp.substr(0,indx+3);
|
||||
file_tmp = file_tmp.substr(indx+3);
|
||||
file_tmp = file_tmp.replace(/\/\//g,"/");
|
||||
file_tmp = protocol_tmp + file_tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
file_tmp = file_tmp.replace(/\/\//g,"/");
|
||||
}
|
||||
|
||||
file_tmp = "<a href=\"" + file_tmp + SearchFilenames[index][3] + "</a>";
|
||||
}
|
||||
}
|
||||
|
||||
var located_in = SearchLocations[index];
|
||||
if( located_in === "" ) located_in = "[.]"
|
||||
locationHtml = "";
|
||||
if(showLocationColumn) {
|
||||
var located_in = SearchLocations[index];
|
||||
if( located_in === "" ) located_in = "[.]"
|
||||
locationHtml = "<td><span class='file_folder'><a href=\"#\" class=\"folder_link\" id=\"" + SearchLocationsID[index] + "\"> " + located_in + "</a></span></td>";
|
||||
}
|
||||
|
||||
|
||||
var timestamp = timestampToDate(SearchFilenames[index][2]);
|
||||
table_html +=
|
||||
"<tr>" +
|
||||
"<td><span class='file'>" + file_tmp + "</span></td>" +
|
||||
"<td><span class='file_folder'><a href=\"#\" class=\"folder_link\" id=\"" + SearchLocationsID[index] + "\"> " + located_in + "</a></span></td>" +
|
||||
locationHtml +
|
||||
"<td class='size' data-sort='" + SearchFilenames[index][1] + "'>" + bytesToSize( SearchFilenames[index][1] ) + "</td>" +
|
||||
"<td class='date' data-sort='" + SearchFilenames[index][2] + "'>" + timestamp + "</td>" +
|
||||
"</tr>\n";
|
||||
"</tr>";
|
||||
|
||||
currentView.push( { "name": SearchFilenames[index][3], "path": SearchLocationsRaw[index].replace(/\//g,"\\"), "type": "file", "size": SearchFilenames[index][1], "date": SearchFilenames[index][2] } );
|
||||
|
||||
@ -1138,24 +1207,28 @@
|
||||
}
|
||||
}
|
||||
|
||||
table_html += "</tbody></table>\n";
|
||||
table_html += "</tbody></table>";
|
||||
|
||||
$("#list_header").html( "Search Results <span class='path_divider'></span>" );
|
||||
document.getElementById("list_files").innerHTML = table_html;
|
||||
$("#search_indicator").hide();
|
||||
addFolderClickEventHandlers();
|
||||
|
||||
var tablesorterHeaders = { 1 : { sorter: 'datasort' }, 2 : { sorter: 'datasort' } }
|
||||
if(showLocationColumn) {
|
||||
tablesorterHeaders = { 2 : { sorter: 'datasort' }, 3 : { sorter: 'datasort' } }
|
||||
}
|
||||
|
||||
$("#files").tablesorter({
|
||||
sortInitialOrder: "desc",
|
||||
headers: {
|
||||
2 : { sorter: 'datasort' },
|
||||
3 : { sorter: 'datasort' }
|
||||
}
|
||||
headers: tablesorterHeaders
|
||||
});
|
||||
|
||||
var sFiles = " files"; if(countFiles===1) sFiles = " file";
|
||||
var sDirs = " folders"; if(countDirs===1) sDirs = " folder";
|
||||
$("#list_footer_info_label").html( countDirs + sDirs + " (" + bytesToSize( sizeDirs , 0 ) + "), " + countFiles + sFiles + " (" + bytesToSize( sizeFiles , 0 ) + ")" );
|
||||
|
||||
}, 1); // end setTimeout before search
|
||||
}, 50); // end setTimeout before search
|
||||
}; // end doSearch()
|
||||
|
||||
|
||||
@ -1192,14 +1265,20 @@
|
||||
$("#list_header").html( breadcrumbs );
|
||||
|
||||
var table_html = "";
|
||||
table_html += "<table id='files' class='tablesorter'><thead><th>Name</th><th>Size</th><th>Modified</th></tr></thead><tbody>\n";
|
||||
var showParentFolderClass = "";
|
||||
if( FolderID != 0 ) {
|
||||
showParentFolderClass = " has-parent-folder"
|
||||
table_html += "<span id='parent_folder' class='file_folder'><a href=\"#\" class=\"folder_link\" id=\"" + parent_folders[FolderID] + "\"> [..]</a></span>\n";
|
||||
table_html += "<div id='parent_folder_border'></div>";
|
||||
}
|
||||
table_html += "<table id='files' class='tablesorter" + showParentFolderClass + "'><thead><th>Name</th><th>Size</th><th>Modified</th></tr></thead><tbody>\n";
|
||||
|
||||
currentView = [];
|
||||
var countFiles = 0;
|
||||
var countDirs = 0;
|
||||
var subdirTotSizes = 0;
|
||||
|
||||
// folders
|
||||
if( FolderID != 0 ) table_html += "<tr><td><span class='file_folder'><a href=\"#\" class=\"folder_link\" id=\"" + parent_folders[FolderID] + "\"> [..]</a></span></td><td></td><td></td></tr>\n";
|
||||
var subdirs = getSubdirs( SelectedFolderID );
|
||||
if( subdirs != "" )
|
||||
{
|
||||
@ -1231,29 +1310,33 @@
|
||||
if( dir_tmp != "" ) dir_tmp += "/";
|
||||
if( linkFiles )
|
||||
{
|
||||
file_tmp = linkProtocol + linkRoot + dir_tmp + sTmp[0] + "\">";
|
||||
if( navigator.userAgent.toLowerCase().indexOf("msie") !== -1 && linkProtocol.indexOf("file:") !== -1 )
|
||||
{
|
||||
file_tmp = "javascript:alert('Internet Explorer does not allow linking to local files...')" + "\">";
|
||||
}
|
||||
if( file_tmp.substr(0,1) === "/" ) file_tmp = file_tmp.substr(1);
|
||||
file_tmp = file_tmp.replace(/\\/g,"/");
|
||||
file_tmp = file_tmp.replace(/#/g,"%23");
|
||||
|
||||
var indx = file_tmp.indexOf("://");
|
||||
if( indx !== -1 )
|
||||
{
|
||||
var protocol_tmp = file_tmp.substr(0,indx+3);
|
||||
file_tmp = file_tmp.substr(indx+3);
|
||||
file_tmp = file_tmp.replace(/\/\//g,"/");
|
||||
file_tmp = protocol_tmp + file_tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
file_tmp = file_tmp.replace(/\/\//g,"/");
|
||||
}
|
||||
var ext = file_tmp.split('.').pop();
|
||||
if(onlyLinkExtensions.length === 0 || onlyLinkExtensions.indexOf(ext) !== -1) {
|
||||
file_tmp = linkProtocol + linkRoot + dir_tmp + sTmp[0] + "\">";
|
||||
if( navigator.userAgent.toLowerCase().indexOf("msie") !== -1 && linkProtocol.indexOf("file:") !== -1 )
|
||||
{
|
||||
file_tmp = "javascript:alert('Internet Explorer does not allow linking to local files...')" + "\">";
|
||||
}
|
||||
if( file_tmp.substr(0,1) === "/" ) file_tmp = file_tmp.substr(1);
|
||||
file_tmp = file_tmp.replace(/\\/g,"/");
|
||||
file_tmp = file_tmp.replace(/#/g,"%23");
|
||||
|
||||
file_tmp = "<a href=\"" + file_tmp + sTmp[0] + "</a>";
|
||||
var indx = file_tmp.indexOf("://");
|
||||
if( indx !== -1 )
|
||||
{
|
||||
var protocol_tmp = file_tmp.substr(0,indx+3);
|
||||
file_tmp = file_tmp.substr(indx+3);
|
||||
file_tmp = file_tmp.replace(/\/\//g,"/");
|
||||
file_tmp = protocol_tmp + file_tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
file_tmp = file_tmp.replace(/\/\//g,"/");
|
||||
}
|
||||
|
||||
file_tmp = "<a href=\"" + file_tmp + sTmp[0] + "</a>";
|
||||
}
|
||||
}
|
||||
|
||||
var timestamp = timestampToDate(sTmp[2]);
|
||||
@ -1600,7 +1683,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// Save export to local file. Based on https://stackoverflow.com/a/29304414/1087811
|
||||
function downloadToFile(content, fileName, mimeType) {
|
||||
var a = document.createElement('a');
|
||||
@ -1648,10 +1730,12 @@
|
||||
<div id="loading" class="loading"><b>Loading...</b><p class="loading_info">(if nothing happens, make sure javascript is enabled and allowed to execute, or try another browser)</p></div>
|
||||
|
||||
<div id="content" class="content">
|
||||
|
||||
<div id="treeview" class="treeview"></div>
|
||||
|
||||
<div id="list_container" class="list_container">
|
||||
<div id="search_indicator" class="search_indicator">
|
||||
Searching...
|
||||
</div>
|
||||
<div id="list_header" class="list_header"></div>
|
||||
<div id="list_files" class="list_files"></div>
|
||||
<div id="list_footer" class='list_footer'>
|
||||
@ -1659,7 +1743,6 @@
|
||||
<span id="list_footer_info_label"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user