diff --git a/PictureReposit/Form1.Designer.cs b/PictureReposit/Form1.Designer.cs
index 5652820..903b52c 100644
--- a/PictureReposit/Form1.Designer.cs
+++ b/PictureReposit/Form1.Designer.cs
@@ -41,6 +41,7 @@ namespace PictureReposit
this.btnReOrganize = new System.Windows.Forms.Button();
this.label3 = new System.Windows.Forms.Label();
this.txtRootDir = new System.Windows.Forms.TextBox();
+ this.pbReorgProcess = new System.Windows.Forms.ProgressBar();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
@@ -155,11 +156,20 @@ namespace PictureReposit
this.txtRootDir.Text = "D:\\Bildlabb\\LabRotCat";
this.txtRootDir.TextChanged += new System.EventHandler(this.txtRootDir_TextChanged);
//
+ // pbReorgProcess
+ //
+ this.pbReorgProcess.Location = new System.Drawing.Point(183, 72);
+ this.pbReorgProcess.Name = "pbReorgProcess";
+ this.pbReorgProcess.Size = new System.Drawing.Size(654, 79);
+ this.pbReorgProcess.TabIndex = 11;
+ this.pbReorgProcess.Visible = false;
+ //
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(869, 642);
+ this.Controls.Add(this.pbReorgProcess);
this.Controls.Add(this.txtRootDir);
this.Controls.Add(this.label3);
this.Controls.Add(this.btnReOrganize);
@@ -193,6 +203,7 @@ namespace PictureReposit
private System.Windows.Forms.Button btnReOrganize;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txtRootDir;
+ private System.Windows.Forms.ProgressBar pbReorgProcess;
}
}
diff --git a/PictureReposit/Form1.cs b/PictureReposit/Form1.cs
index 09c2637..194deed 100644
--- a/PictureReposit/Form1.cs
+++ b/PictureReposit/Form1.cs
@@ -1,4 +1,5 @@
-using Microsoft.Win32;
+using MetadataExtractor;
+using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -64,22 +65,16 @@ namespace PictureReposit
private void listLocalFiles()
{
DirectoryInfo di = new DirectoryInfo(lblPath.Text);
- FileInfo[] files = di.GetFiles("*.jpg");
+ FileInfo[] files = new string[] { "*.png", "*.jpg", "*.jpeg", "*.img", "*.mov" }
+ .SelectMany(i => di.GetFiles(i, SearchOption.AllDirectories))
+ .ToArray();
+
lstPicFiles.Items.Clear();
for (int i = 0; i < files.Length; i++)
{
lstPicFiles.Items.Add(files[i].Name);
}
- files = di.GetFiles("*.jpeg");
- for (int i = 0; i < files.Length; i++)
- {
- lstPicFiles.Items.Add(files[i].Name);
- }
- files = di.GetFiles("*.png");
- for (int i = 0; i < files.Length; i++)
- {
- lstPicFiles.Items.Add(files[i].Name);
- }
+
btnReOrganize.Enabled = true;
}
@@ -89,8 +84,16 @@ namespace PictureReposit
{
string fName = ((ListBox)sender).SelectedItem.ToString();
lblFileName.Text = fName;
- Image actPic = Image.FromFile(lblPath.Text + fName, true);
- lblCreated.Text = "Skapad: " + TakenDate(actPic);
+ Image actPic = null;
+ if (fName.ToUpper().EndsWith(".MOV"))
+ {
+ actPic = Image.FromFile("IMG_2994.jpg", true);
+ }
+ else
+ {
+ actPic = Image.FromFile(lblPath.Text + fName, true);
+ }
+ lblCreated.Text = "Skapad: " + GetOrigCreateDateTimeFromMediaFile(new FileInfo(lblPath.Text + fName)).ToString(); ;
int w = actPic.Width;
int h = actPic.Height;
int pw = pictureBox1.Width;
@@ -103,111 +106,87 @@ namespace PictureReposit
}
}
- private string TakenDate(Image actPic)
- {
- string sPropDatTaken = "";
- for (int i = 0; i < actPic.PropertyIdList.Length; i++)
- {
- if (actPic.PropertyIdList[i] == 306)
- {
- for (int j = 0; j < actPic.PropertyItems[i].Len; j++)
- {
- sPropDatTaken += Convert.ToChar(actPic.PropertyItems[i].Value[j]);
- }
- }
- }
- //actPic.Dispose();
- return sPropDatTaken;
- }
private void btnReOrganize_Click(object sender, EventArgs e)
{
- bool error_upd = false;
bool slaskDir = false;
int slaskFilNr = 0;
+ string fromPath = lblPath.Text.Trim();
+ pbReorgProcess.Visible = true;
+ pictureBox1.Visible = false;
if (txtRootDir.Text.Trim().Substring(txtRootDir.Text.Trim().Length - 1) != @"\")
txtRootDir.Text = txtRootDir.Text.Trim() + @"\";
DirectoryInfo di = new DirectoryInfo(txtRootDir.Text);
if (!di.Exists) di.Create();
Deleting = true;
+
pictureBox1.Image = null;
pictureBox1.Refresh();
- for (int i = lstPicFiles.Items.Count - 1; i > -1; i--)
+ try
{
- string lFileName = lstPicFiles.Items[i].ToString().Trim();
- string fName = lblPath.Text.Trim() + lFileName;
- lblFileName.Text = fName;
- Image actIm = Image.FromFile(fName, true);
- int w = actIm.Width;
- int h = actIm.Height;
- int pw = pictureBox1.Width;
- int ph = pictureBox1.Height;
- pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
- Bitmap to_bm = new Bitmap((Image)actIm.Clone(), w * ph / h, ph);
- pictureBox1.Image = to_bm;
- string td = TakenDate(actIm);
+ pbReorgProcess.Maximum = lstPicFiles.Items.Count;
+ pbReorgProcess.Minimum = 0;
- actIm.Dispose();
- if (td.Trim() != "")
+ for (int i = lstPicFiles.Items.Count - 1; i > -1; i--)
{
+ pbReorgProcess.Value = lstPicFiles.Items.Count-i;
+ string lFileName = lstPicFiles.Items[i].ToString().Trim();
+ string fName = fromPath + lFileName;
+ lblFileName.Text = fName;
+ FileInfo fi = new FileInfo(fName);
+ string td = GetOrigCreateDateTimeFromMediaFile(fi).ToString();
lblCreated.Text = "Skapad: " + td;
- td = td.Substring(0, 10);
- DateTime dttd = DateTime.Parse(td.Replace(":", "-"));
- string subDir1 = dttd.Year.ToString("0000") + "-" + dttd.Month.ToString("00") + @"\";
- string subDir2 = dttd.Year.ToString("0000") + "_" + dttd.Month.ToString("00") + "_" + dttd.Day.ToString("00") + @"\";
- DirectoryInfo dis = new DirectoryInfo(di.FullName + subDir1);
- if (!dis.Exists) dis.Create();
- DirectoryInfo diss = new DirectoryInfo(dis.FullName + subDir2);
- if (!diss.Exists) diss.Create();
-
- FileInfo fi = new FileInfo(fName);
- //Tommy
- fi.CopyTo(diss.FullName + lFileName);
- error_upd = false;
- do
+ if (td.Trim() != DateTime.MinValue.ToString())
{
- error_upd = false;
- try
- {
- lstPicFiles.BeginUpdate();
- }
- catch
- {
- error_upd = true;
- }
+ lblCreated.Text = "Skapad: " + td;
+ td = td.Substring(0, 10);
+ DateTime dttd = DateTime.Parse(td);
+ string subDir1 = dttd.Year.ToString("0000") + "-" + dttd.Month.ToString("00") + @"\";
+ string subDir2 = dttd.Year.ToString("0000") + "_" + dttd.Month.ToString("00") + "_" + dttd.Day.ToString("00") + @"\";
+ DirectoryInfo dis = new DirectoryInfo(di.FullName + subDir1);
+ if (!dis.Exists) dis.Create();
+ DirectoryInfo diss = new DirectoryInfo(dis.FullName + subDir2);
+ if (!diss.Exists) diss.Create();
+ lblPath.Text = diss.FullName;
+ lblFileName.Refresh();
+ lblCreated.Refresh();
+ lblPath.Refresh();
+ fi.CopyTo(diss.FullName + lFileName, true);
}
- while (error_upd);
- lstPicFiles.Items.RemoveAt(i);
- lstPicFiles.EndUpdate();
- lstPicFiles.Refresh();
- lblCreated.Refresh();
- lblFileName.Refresh();
- pictureBox1.Refresh();
- this.Refresh();
- }
- else
- {
- DirectoryInfo dis = new DirectoryInfo(di.FullName + "NoDateInExif\\");
- if (!slaskDir)
+ else
{
- if (!dis.Exists)
+ DirectoryInfo dis = new DirectoryInfo(di.FullName + "NoDateInExif\\");
+ if (!slaskDir)
{
- dis.Create();
- set_Last_number(dis.FullName, 0);
+ if (!dis.Exists)
+ {
+ dis.Create();
+ set_Last_number(dis.FullName, 0);
+ }
+ else
+ {
+ slaskFilNr = get_Last_number(dis.FullName);
+ }
+ slaskDir = true;
}
- else
- {
- slaskFilNr = get_Last_number(dis.FullName);
- }
- slaskDir = true;
- }
- FileInfo fi = new FileInfo(fName);
- //Tommy
- slaskFilNr++;
- fi.CopyTo(dis.FullName + slaskFilNr.ToString() + "_" + lFileName);
+ slaskFilNr++;
+ fi.CopyTo(dis.FullName + slaskFilNr.ToString() + "_" + lFileName);
+ }
}
}
+ catch (Exception ex)
+ {
+ MessageBox.Show($"Error msg: {ex.Message}");
+ }
+ finally
+ {
+ if (slaskFilNr > 0)
+ {
+ set_Last_number(di.FullName + "NoDateInExif\\", slaskFilNr);
+ }
+ }
+ lstPicFiles.Items.Clear();
Deleting = false;
lblCreated.Text = "";
lblFileName.Text = "";
@@ -217,6 +196,8 @@ namespace PictureReposit
{
set_Last_number(di.FullName + "NoDateInExif\\", slaskFilNr);
}
+ pbReorgProcess.Visible = false;
+ pictureBox1.Visible = true;
}
private void txtRootDir_TextChanged(object sender, EventArgs e)
@@ -250,11 +231,99 @@ namespace PictureReposit
outPut++;
return outPut;
}
+
private void set_Last_number(string path, int lastNr)
{
var lstNrFile = Path.Combine(path, "lastNrFile.txt");
var SavedNumber = lastNr.ToString();
File.WriteAllText(lstNrFile, SavedNumber);
}
+
+ //------------------------------------------------------------------------
+ // Nya funktioner för hantering av original datum
+ //------------------------------------------------------------------------
+
+ DateTime GetOrigCreateDateTimeFromMediaFile(FileInfo file)
+ {
+ DateTime origDateTime = DateTime.MinValue;
+ var creationDate = getCreationDate(file);
+ if (creationDate != "")
+ {
+ if (file.Extension.ToLower() != ".mov")
+ {
+ creationDate = prepDateString(creationDate);
+ }
+ else
+ {
+ creationDate = prepMovDateString(creationDate);
+ }
+ origDateTime = DateTime.Parse(creationDate);
+ }
+ return origDateTime;
+ }
+
+
+ private string prepMovDateString(string creationDate)
+ {
+ var x = creationDate.Split(" ");
+ return $"{x[0]} {x[2]} {x[1]} {x[4]} {x[3]}";
+ }
+
+ private string prepDateString(string creationDate)
+ {
+ creationDate = creationDate.Replace(" ", "T");
+ var x = creationDate.Split("T");
+ x[0] = x[0].Replace(":", "-");
+ return x[0] + "T" + x[1];
+ }
+
+ private string getCreationDate(FileInfo file)
+ {
+
+ string output = "";
+ switch (file.Extension.ToLower())
+ {
+ case ".jpg":
+ case ".jpeg":
+ {
+ output = getExifValue("Exif IFD0", "Date/Time", file);
+ if (output == "")
+ {
+ output = getExifValue("Exif SubIFD", "Date/Time Original", file);
+ }
+ break;
+ }
+ case ".png":
+ {
+ break;
+ }
+ case ".mov":
+ {
+ output = getExifValue("QuickTime Movie Header", "Created", file);
+ break;
+ }
+ }
+
+ return output;
+ }
+
+ private string getExifValue(string key1, string key2, FileInfo fileInfo)
+ {
+ string output = "";
+ foreach (var directory in ImageMetadataReader.ReadMetadata(fileInfo.FullName))
+ {
+ if (directory.Name == key1)
+ {
+ foreach (var tag in directory.Tags)
+ {
+ if (tag.Name == key2)
+ {
+ output = tag.Description;
+ }
+ }
+ }
+ }
+ return output;
+ }
}
}
diff --git a/PictureReposit/IMG_2994.jpg b/PictureReposit/IMG_2994.jpg
new file mode 100644
index 0000000..b8adbc0
Binary files /dev/null and b/PictureReposit/IMG_2994.jpg differ
diff --git a/PictureReposit/PictureReposit.csproj b/PictureReposit/PictureReposit.csproj
index a2d4310..3c73abb 100644
--- a/PictureReposit/PictureReposit.csproj
+++ b/PictureReposit/PictureReposit.csproj
@@ -6,4 +6,12 @@
true
+
+
+ PreserveNewest
+
+
+
+
+
\ No newline at end of file