diff --git a/src/modules/powerrename/PowerRenameUILib/PowerRenameXAML/MainWindow.xaml b/src/modules/powerrename/PowerRenameUILib/PowerRenameXAML/MainWindow.xaml index d049a0d067..7126a63604 100644 --- a/src/modules/powerrename/PowerRenameUILib/PowerRenameXAML/MainWindow.xaml +++ b/src/modules/powerrename/PowerRenameUILib/PowerRenameXAML/MainWindow.xaml @@ -184,6 +184,7 @@ + + + + + + + + + + + + Random string features + + Time used for replacement + + + Creation Time + + + Modification Time + + + Access Time + \ No newline at end of file diff --git a/src/modules/powerrename/lib/PowerRenameInterfaces.h b/src/modules/powerrename/lib/PowerRenameInterfaces.h index c545e9dc00..ea761d156a 100644 --- a/src/modules/powerrename/lib/PowerRenameInterfaces.h +++ b/src/modules/powerrename/lib/PowerRenameInterfaces.h @@ -18,7 +18,10 @@ enum PowerRenameFlags Lowercase = 0x400, Titlecase = 0x800, Capitalized = 0x1000, - RandomizeItems = 0x2000 + RandomizeItems = 0x2000, + CreationTime = 0x4000, + ModificationTime = 0x8000, + AccessTime = 0x10000, }; enum PowerRenameFilters @@ -67,7 +70,7 @@ interface __declspec(uuid("C7F59201-4DE1-4855-A3A2-26FC3279C8A5")) IPowerRenameI public: IFACEMETHOD(PutPath)(_In_opt_ PCWSTR newPath) = 0; IFACEMETHOD(GetPath)(_Outptr_ PWSTR * path) = 0; - IFACEMETHOD(GetTime)(_Outptr_ SYSTEMTIME* time) = 0; + IFACEMETHOD(GetTime)(_In_ DWORD flags, _Outptr_ SYSTEMTIME * time) = 0; IFACEMETHOD(GetShellItem)(_Outptr_ IShellItem** ppsi) = 0; IFACEMETHOD(GetOriginalName)(_Outptr_ PWSTR * originalName) = 0; IFACEMETHOD(PutOriginalName)(_In_opt_ PCWSTR originalName) = 0; diff --git a/src/modules/powerrename/lib/PowerRenameItem.cpp b/src/modules/powerrename/lib/PowerRenameItem.cpp index bd8fa48285..9a0652c451 100644 --- a/src/modules/powerrename/lib/PowerRenameItem.cpp +++ b/src/modules/powerrename/lib/PowerRenameItem.cpp @@ -56,12 +56,28 @@ IFACEMETHODIMP CPowerRenameItem::GetPath(_Outptr_ PWSTR* path) return hr; } -IFACEMETHODIMP CPowerRenameItem::GetTime(_Outptr_ SYSTEMTIME* time) +IFACEMETHODIMP CPowerRenameItem::GetTime(_In_ DWORD flags, _Outptr_ SYSTEMTIME* time) { CSRWSharedAutoLock lock(&m_lock); HRESULT hr = E_FAIL; + PowerRenameFlags parsedTimeType; - if (m_isTimeParsed) + // Get Time by PowerRenameFlags + if (flags & PowerRenameFlags::ModificationTime) + { + parsedTimeType = PowerRenameFlags::ModificationTime; + } + else if (flags & PowerRenameFlags::AccessTime) + { + parsedTimeType = PowerRenameFlags::AccessTime; + } + else + { + // Default to modification time if no specific flag is set + parsedTimeType = PowerRenameFlags::CreationTime; + } + + if (m_isTimeParsed && parsedTimeType == m_parsedTimeType) { hr = S_OK; } @@ -70,21 +86,43 @@ IFACEMETHODIMP CPowerRenameItem::GetTime(_Outptr_ SYSTEMTIME* time) HANDLE hFile = CreateFileW(m_path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hFile != INVALID_HANDLE_VALUE) { - FILETIME CreationTime; - if (GetFileTime(hFile, &CreationTime, NULL, NULL)) + FILETIME FileTime; + bool success = false; + + // Get Time by PowerRenameFlags + switch (parsedTimeType) + { + case PowerRenameFlags::CreationTime: + success = GetFileTime(hFile, &FileTime, NULL, NULL); + break; + case PowerRenameFlags::ModificationTime: + success = GetFileTime(hFile, NULL, NULL, &FileTime); + break; + case PowerRenameFlags::AccessTime: + success = GetFileTime(hFile, NULL, &FileTime, NULL); + break; + default: + // Default to modification time if no specific flag is set + success = GetFileTime(hFile, NULL, NULL, &FileTime); + break; + } + + if (success) { SYSTEMTIME SystemTime, LocalTime; - if (FileTimeToSystemTime(&CreationTime, &SystemTime)) + if (FileTimeToSystemTime(&FileTime, &SystemTime)) { if (SystemTimeToTzSpecificLocalTime(NULL, &SystemTime, &LocalTime)) { m_time = LocalTime; m_isTimeParsed = true; + m_parsedTimeType = parsedTimeType; hr = S_OK; } } } } + CloseHandle(hFile); } *time = m_time; diff --git a/src/modules/powerrename/lib/PowerRenameItem.h b/src/modules/powerrename/lib/PowerRenameItem.h index 83817b0699..6ced0a3ada 100644 --- a/src/modules/powerrename/lib/PowerRenameItem.h +++ b/src/modules/powerrename/lib/PowerRenameItem.h @@ -16,7 +16,7 @@ public: // IPowerRenameItem IFACEMETHODIMP PutPath(_In_opt_ PCWSTR newPath); IFACEMETHODIMP GetPath(_Outptr_ PWSTR* path); - IFACEMETHODIMP GetTime(_Outptr_ SYSTEMTIME* time); + IFACEMETHODIMP GetTime(_In_ DWORD flags, _Outptr_ SYSTEMTIME* time); IFACEMETHODIMP GetShellItem(_Outptr_ IShellItem** ppsi); IFACEMETHODIMP PutOriginalName(_In_opt_ PCWSTR originalName); IFACEMETHODIMP GetOriginalName(_Outptr_ PWSTR* originalName); @@ -54,6 +54,7 @@ protected: bool m_selected = true; bool m_isFolder = false; bool m_isTimeParsed = false; + PowerRenameFlags m_parsedTimeType = PowerRenameFlags::CreationTime; bool m_canRename = true; int m_id = -1; int m_iconIndex = -1; diff --git a/src/modules/powerrename/lib/Renaming.cpp b/src/modules/powerrename/lib/Renaming.cpp index bf27500529..aa21666783 100644 --- a/src/modules/powerrename/lib/Renaming.cpp +++ b/src/modules/powerrename/lib/Renaming.cpp @@ -78,7 +78,7 @@ bool DoRename(CComPtr& spRenameRegEx, unsigned long& itemEnum if (useFileTime) { - winrt::check_hresult(spItem->GetTime(&fileTime)); + winrt::check_hresult(spItem->GetTime(flags, &fileTime)); winrt::check_hresult(spRenameRegEx->PutFileTime(fileTime)); }