Skip to content

Commit

Permalink
Improve and clean up some stuff. All ref args in Metadata changed to …
Browse files Browse the repository at this point in the history
…outs. GetDateTaken now returns just bool and not a tuple
  • Loading branch information
ellman12 committed Mar 18, 2022
1 parent 2510dac commit 6e59edb
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 20 deletions.
26 changes: 13 additions & 13 deletions PSS/PSS/Backend/Metadata.cs
Expand Up @@ -19,26 +19,25 @@ public enum DateTakenSrc

//Get the Date Taken for an item, if possible.
//Return true if date taken was found either in the metadata or filename, or false if using DateTime.Now
public static (bool, DateTakenSrc) GetDateTaken(string path, out DateTime dateTaken)
public static bool GetDateTaken(string path, out DateTime dateTaken, out DateTakenSrc dateTakenSrc)
{
bool hasData = false;
dateTaken = DateTime.Now;
var src = DateTakenSrc.Now;
dateTakenSrc = DateTakenSrc.Now;

string ext = Path.GetExtension(path).ToLower(); //Some files might have extension in all caps for no reason.
hasData = ext switch
bool hasData = ext switch
{
".jpg" or ".jpeg" or ".png" or ".gif" => GetImgDateTaken(path, out dateTaken, ref src),
".mp4" or ".mkv" or ".mov" => GetVideoDateTaken(path, out dateTaken, out src),
".jpg" or ".jpeg" or ".png" or ".gif" => GetImgDateTaken(path, out dateTaken, out dateTakenSrc),
".mp4" or ".mkv" or ".mov" => GetVideoDateTaken(path, out dateTaken, out dateTakenSrc),
_ => false
};

return (hasData, src);
return hasData;
}

//Try and examine metadata. If necessary, it analyzes filename. If can't find data in either, default to DateTime.Now.
//Returns true if had metadata.
private static bool GetImgDateTaken(string path, out DateTime dateTaken, ref DateTakenSrc src)
private static bool GetImgDateTaken(string path, out DateTime dateTaken, out DateTakenSrc src)
{
bool hasData;
try
Expand All @@ -55,7 +54,7 @@ private static bool GetImgDateTaken(string path, out DateTime dateTaken, ref Dat
}
catch (ExifLibException) //No metadata in file.
{
hasData = GetFilenameTimestamp(Path.GetFileName(path), out dateTaken, ref src);
hasData = GetFilenameTimestamp(Path.GetFileName(path), out dateTaken, out src);
if (!hasData) dateTaken = DateTime.Now;
}

Expand Down Expand Up @@ -83,7 +82,7 @@ private static bool GetVideoDateTaken(string path, out DateTime dateTaken, out D
catch (Exception)
{
src = DateTakenSrc.Now;
bool hasData = GetFilenameTimestamp(Path.GetFileName(path), out dateTaken, ref src);
bool hasData = GetFilenameTimestamp(Path.GetFileName(path), out dateTaken, out src);
if (hasData) return true;

dateTaken = DateTime.Now;
Expand All @@ -97,7 +96,7 @@ private static bool GetVideoDateTaken(string path, out DateTime dateTaken, out D
//Used if program can't find date/time metadata in the file. Often, filenames will have a timestamp in them.
//E.g., the Nintendo Switch generates pics/vids filenames like: 2018022016403700_s.mp4. This can be stripped and
//converted into an actual DateTime object.
private static bool GetFilenameTimestamp(string filename, out DateTime dateTaken, ref DateTakenSrc src)
private static bool GetFilenameTimestamp(string filename, out DateTime dateTaken, out DateTakenSrc src)
{
bool hasData;
string timestamp = ""; //The actual timestamp in the filename, without the extra chars we don't want. Converted to DateTime at the end.
Expand Down Expand Up @@ -162,19 +161,20 @@ private static bool GetFilenameTimestamp(string filename, out DateTime dateTaken
src = DateTakenSrc.Now;
}
else
hasData = ParseTimestamp(timestamp, out dateTaken, ref src);
hasData = ParseTimestamp(timestamp, out dateTaken, out src);
}

return hasData;
}

//Try parsing timestamp like this: "20211031155822"
//Returns false if unable to parse.
private static bool ParseTimestamp(string timestamp, out DateTime dateTime, ref DateTakenSrc src)
private static bool ParseTimestamp(string timestamp, out DateTime dateTime, out DateTakenSrc src)
{
if (timestamp.Length < 14 || DateTime.TryParse(timestamp, out dateTime))
{
dateTime = DateTime.Now;
src = DateTakenSrc.Now;
return false;
}

Expand Down
10 changes: 6 additions & 4 deletions PSS/PSS/Pages/ImportGPOFolder.razor
Expand Up @@ -66,7 +66,7 @@
@if (!allFiles[i].dataPresent && !allFiles[i].alreadyInLib){<span class="warnSpan">No DT found. DT set to now.</span>}
@if (allFiles[i].alreadyInLib){<span class="errorSpan">Item already in library. Won't upload.</span>}

<button class="iconBtn" title="Remove This Item From the Upload" @onclick="@(() => DeleteBtnClick(ii, allFiles[ii].fullPath))"><span class="material-icons">close</span></button>
<button class="iconBtn" title="Remove This Item From the Upload" @onclick="@(() => DeleteBtnClick(ii))"><span class="material-icons">close</span></button>
</div>
}
</div>
Expand Down Expand Up @@ -132,14 +132,16 @@
string day = data[2];

//Now try and get time
(hasTimeData, timeSrc) = Metadata.GetDateTaken(fullPath, out DateTime time);
hasTimeData = Metadata.GetDateTaken(fullPath, out DateTime time, out timeSrc);
fullDT = new DateTime(Int32.Parse(year), Int32.Parse(month), Int32.Parse(day), time.Hour, time.Month, time.Day);
}

string extLower = Path.GetExtension(fullPath).ToLower();
C.UAFile file = new()
{
fullPath = fullPath.Replace('\\', '/'),
shortPath = null,
thumbnail = fullPath.Contains(".mp4") || fullPath.Contains(".mkv") || fullPath.Contains(".mov") ? F.GenerateThumbnail(fullPath) : null,
thumbnail = extLower is ".mp4" or ".mkv" or ".mov" ? F.GenerateThumbnail(fullPath) : null,
dateTaken = fullDT,
dataPresent = hasTimeData,
dateTakenSrc = timeSrc,
Expand All @@ -160,7 +162,7 @@
private static void UpdateStatus() => status = allFiles.Count == 0 ? "No files found to add" : $"{allFiles.Select(f => f.thumbnail != null).Count()} pictures and {0} videos pending upload. {allFiles.Count(c => !c.dataPresent)} Warnings. {allFiles.Count(c => c.alreadyInLib)} Errors.";

//Clears an item from the Lists
private static void DeleteBtnClick(int index, string path)
private static void DeleteBtnClick(int index)
{
allFiles.RemoveAt(index);
UpdateStatus();
Expand Down
6 changes: 3 additions & 3 deletions PSS/PSS/Pages/UploadApply.razor
Expand Up @@ -67,7 +67,7 @@
@if (!allFiles[i].dataPresent && !allFiles[i].alreadyInLib){<span class="warnSpan">No DT found. DT set to now.</span>}
@if (allFiles[i].alreadyInLib){<span class="errorSpan">Item already in library. Won't upload.</span>}

<button class="iconBtn" title="Remove This Item From the Upload" @onclick="@(() => DeleteBtnClick(ii, allFiles[ii].fullPath))"><span class="material-icons">close</span></button>
<button class="iconBtn" title="Remove This Item From the Upload" @onclick="@(() => DeleteBtnClick(ii))"><span class="material-icons">close</span></button>
</div>
}
</div>
Expand Down Expand Up @@ -117,7 +117,7 @@
shortPath = null,
thumbnail = extLower is ".mp4" or ".mkv" or ".mov" ? F.GenerateThumbnail(path) : null
};
(file.dataPresent, file.dateTakenSrc) = Metadata.GetDateTaken(path, out file.dateTaken);
file.dataPresent = Metadata.GetDateTaken(path, out file.dateTaken, out file.dateTakenSrc);
file.alreadyInLib = ItemExists(Path.GetFileName(path), file.dateTaken);
allFiles.Add(file);
}
Expand All @@ -134,7 +134,7 @@
private static void UpdateStatus() => status = allFiles.Count == 0 ? "No files found to add" : $"{allFiles.Select(f => f.thumbnail != null).Count()} pictures and {0} videos pending upload. {allFiles.Count(c => !c.dataPresent)} Warnings. {allFiles.Count(c => c.alreadyInLib)} Errors.";

//Clears an item from the Lists
private static void DeleteBtnClick(int index, string path)
private static void DeleteBtnClick(int index)
{
allFiles.RemoveAt(index);
UpdateStatus();
Expand Down

0 comments on commit 6e59edb

Please sign in to comment.