Skip to content

Commit 03557cb

Browse files
committed
Prevent failed to retrieve filetime. Associate to store
1 parent 632a983 commit 03557cb

17 files changed

Lines changed: 84 additions & 97 deletions

FastCopy/FastCopy.vcxproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ xcopy "$(SolutionDir)$(Platform)\$(Configuration)\FastCopy\FastCopyShellExtensio
213213
<Manifest Include="app.manifest" />
214214
</ItemGroup>
215215
<ItemGroup>
216+
<ClInclude Include="..\Public\PackageConfig.h" />
216217
<ClInclude Include="AcrylicHelper.h" />
217218
<ClInclude Include="AnimatedValue.h" />
218219
<ClInclude Include="AnimatedWindowSize.h" />
@@ -605,6 +606,9 @@ xcopy "$(SolutionDir)$(Platform)\$(Configuration)\FastCopy\FastCopyShellExtensio
605606
<ItemGroup>
606607
<ResourceCompile Include="Resource.rc" />
607608
</ItemGroup>
609+
<ItemGroup>
610+
<None Include="Package.StoreAssociation.xml" />
611+
</ItemGroup>
608612
<!--
609613
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
610614
Explorer "Package and Publish" context menu entry to be enabled for this project even if
@@ -643,6 +647,7 @@ xcopy "$(SolutionDir)$(Platform)\$(Configuration)\FastCopy\FastCopyShellExtensio
643647
<PropertyGroup Label="Vcpkg">
644648
<VcpkgEnableManifest>false</VcpkgEnableManifest>
645649
<VcpkgXUseBuiltInApplocalDeps>true</VcpkgXUseBuiltInApplocalDeps>
650+
<GenerateTemporaryStoreCertificate>True</GenerateTemporaryStoreCertificate>
646651
</PropertyGroup>
647652
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
648653
<ImportGroup Label="ExtensionTargets">

FastCopy/FastCopy.vcxproj.filters

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,6 @@
9595
<ClCompile Include="ResourceHelper.cpp">
9696
<Filter>Utils</Filter>
9797
</ClCompile>
98-
<ClCompile Include="ImageUtils.cpp">
99-
<Filter>Utils</Filter>
100-
</ClCompile>
10198
<ClCompile Include="Global.cpp">
10299
<Filter>Utils</Filter>
103100
</ClCompile>
@@ -156,6 +153,9 @@
156153
<ClCompile Include="ProcessIoCounter.cpp">
157154
<Filter>Utils\ProcessIO</Filter>
158155
</ClCompile>
156+
<ClCompile Include="ImageUtils.cpp">
157+
<Filter>Utils\ImageUtils</Filter>
158+
</ClCompile>
159159
</ItemGroup>
160160
<ItemGroup>
161161
<ClInclude Include="pch.h" />
@@ -211,9 +211,6 @@
211211
<ClInclude Include="PathUtils.h">
212212
<Filter>Utils</Filter>
213213
</ClInclude>
214-
<ClInclude Include="ImageUtils.h">
215-
<Filter>Utils</Filter>
216-
</ClInclude>
217214
<ClInclude Include="Console.h">
218215
<Filter>Utils</Filter>
219216
</ClInclude>
@@ -284,9 +281,6 @@
284281
<ClInclude Include="Global.h">
285282
<Filter>Views</Filter>
286283
</ClInclude>
287-
<ClInclude Include="GdiplusInitializer.h">
288-
<Filter>Utils</Filter>
289-
</ClInclude>
290284
<ClInclude Include="FileTime.h">
291285
<Filter>Utils\FileTime</Filter>
292286
</ClInclude>
@@ -299,6 +293,13 @@
299293
<ClInclude Include="ProcessIOUpdater.hpp">
300294
<Filter>Utils\ProcessIO</Filter>
301295
</ClInclude>
296+
<ClInclude Include="ImageUtils.h">
297+
<Filter>Utils\ImageUtils</Filter>
298+
</ClInclude>
299+
<ClInclude Include="GdiplusInitializer.h">
300+
<Filter>Utils\ImageUtils</Filter>
301+
</ClInclude>
302+
<ClInclude Include="..\Public\PackageConfig.h" />
302303
</ItemGroup>
303304
<ItemGroup>
304305
<Image Include="Assets\Wide310x150Logo.scale-200.png">
@@ -546,6 +547,9 @@
546547
<Filter Include="Utils\ProcessIO">
547548
<UniqueIdentifier>{61d56c46-334a-402f-ad49-b86530a4e28f}</UniqueIdentifier>
548549
</Filter>
550+
<Filter Include="Utils\ImageUtils">
551+
<UniqueIdentifier>{857576f0-998d-43af-9b51-be9318494a6a}</UniqueIdentifier>
552+
</Filter>
549553
</ItemGroup>
550554
<ItemGroup>
551555
<Manifest Include="app.manifest" />
@@ -559,6 +563,7 @@
559563
<None Include="..\PackageDlls\boost_filesystem-vc143-mt-x64-1_82.dll" />
560564
<None Include="..\PackageDlls\fmt.dll" />
561565
<None Include="..\x64\Package\FastCopy\FastCopyShellExtension.dll" />
566+
<None Include="Package.StoreAssociation.xml" />
562567
</ItemGroup>
563568
<ItemGroup>
564569
<PRIResource Include="Strings\en-US\Resources.resw">

FastCopy/FileInfoViewModel.cpp

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,23 @@ namespace winrt::FastCopy::implementation
3333

3434
void FileInfoViewModel::Selected(bool value)
3535
{
36-
m_selected = value;
37-
auto robocopyViewModelImpl = winrt::get_self<RobocopyViewModel>(ViewModelLocator::GetInstance().RobocopyViewModel());
38-
value?
39-
(
40-
m_isSource?
41-
robocopyViewModelImpl->AddSource() :
42-
robocopyViewModelImpl->AddDestination()
43-
) :
44-
(
45-
m_isSource?
46-
robocopyViewModelImpl->RemoveSource() :
47-
robocopyViewModelImpl->RemoveDestination()
48-
);
36+
if(m_selected != value)
37+
{
38+
m_selected = value;
39+
raisePropertyChange(L"Selected");
40+
auto robocopyViewModelImpl = winrt::get_self<RobocopyViewModel>(ViewModelLocator::GetInstance().RobocopyViewModel());
41+
value?
42+
(
43+
m_isSource?
44+
robocopyViewModelImpl->AddSource() :
45+
robocopyViewModelImpl->AddDestination()
46+
) :
47+
(
48+
m_isSource?
49+
robocopyViewModelImpl->RemoveSource() :
50+
robocopyViewModelImpl->RemoveDestination()
51+
);
52+
}
4953
}
5054

5155
winrt::Microsoft::UI::Xaml::Media::ImageSource FileInfoViewModel::Bitmap()

FastCopy/FileInfoViewModel.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#pragma once
22
#include "FileInfoViewModel.g.h"
33
#include "WinRTFileTime.h"
4+
#include <include/PropertyChangeHelper.hpp>
45

56
namespace winrt::FastCopy::implementation
67
{
7-
struct FileInfoViewModel : FileInfoViewModelT<FileInfoViewModel>, WinRTFileTime
8+
struct FileInfoViewModel : FileInfoViewModelT<FileInfoViewModel>, WinRTFileTime, MvvmHelper::PropertyChangeHelper<FileInfoViewModel>
89
{
910
FileInfoViewModel(winrt::hstring path, bool isSource);
1011

FastCopy/FileInfoViewModel.idl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace FastCopy
88

99
[bindable]
1010
[default_interface]
11-
runtimeclass FileInfoViewModel
11+
runtimeclass FileInfoViewModel : Microsoft.UI.Xaml.Data.INotifyPropertyChanged
1212
{
1313
FileInfoViewModel(String path, Boolean isSource);
1414

FastCopy/FileTime.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55

66
FileTime::FileTime(HANDLE fileHandle)
77
{
8-
if (!GetFileTime(fileHandle, &createTime, &lastAccessTime, &lastWriteTime))
9-
throw std::runtime_error{"Failed to GetFileTime"};
8+
GetFileTime(fileHandle, &createTime, &lastAccessTime, &lastWriteTime);
109
}
1110

1211
FileTime::FileTime(std::wstring_view path) :

FastCopy/Package.appxmanifest

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,17 @@
88
xmlns:desktop5="http://schemas.microsoft.com/appx/manifest/desktop/windows10/5"
99
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
1010
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
11-
IgnorableNamespaces="uap rescap com desktop">
11+
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
12+
IgnorableNamespaces="uap rescap com desktop mp">
1213

1314
<Identity
14-
Name="FastCopy"
15-
Publisher="CN=Peter"
15+
Name="HO-COOH.RoboCopyEx"
16+
Publisher="CN=0000973C-93A8-4716-8C14-5EC442A69DBE"
1617
Version="1.0.6.0" />
1718

1819
<Properties>
19-
<DisplayName>FastCopy</DisplayName>
20-
<PublisherDisplayName>Administrator</PublisherDisplayName>
20+
<DisplayName>RoboCopyEx</DisplayName>
21+
<PublisherDisplayName>HO-COOH</PublisherDisplayName>
2122
<Logo>Assets\StoreLogo.png</Logo>
2223
</Properties>
2324

@@ -35,7 +36,7 @@
3536
Executable="$targetnametoken$.exe"
3637
EntryPoint="$targetentrypoint$">
3738
<uap:VisualElements
38-
DisplayName="FastCopy"
39+
DisplayName="RoboCopyEx"
3940
Description="FastCopy"
4041
BackgroundColor="transparent"
4142
Square150x150Logo="Assets\Square150x150Logo.png"
@@ -87,4 +88,6 @@
8788
<Capabilities>
8889
<rescap:Capability Name="runFullTrust" />
8990
</Capabilities>
91+
92+
<mp:PhoneIdentity PhoneProductId="c4e1a2d2-5997-4fd2-8c9c-9aff5913a3bc" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
9093
</Package>

FastCopy/ReadableUnitConverterWinRT.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77

88
namespace winrt::FastCopy::implementation
99
{
10+
static auto getNullFileTime()
11+
{
12+
return winrt::clock::from_FILETIME({});
13+
}
14+
1015
winrt::hstring ReadableUnitConverterWinRT::ConvertSize(uint64_t size)
1116
{
1217
return winrt::hstring{ size == 0? L"---" : ReadableUnitConverter::Size::ToString<wchar_t>(size)};
@@ -27,6 +32,9 @@ namespace winrt::FastCopy::implementation
2732
}
2833
winrt::hstring ReadableUnitConverterWinRT::ConvertDateTime(winrt::Windows::Foundation::DateTime dateTime)
2934
{
35+
if (static auto nullFileTime = getNullFileTime(); dateTime == nullFileTime)
36+
return L"---";
37+
3038
auto p2 = std::chrono::clock_cast<std::chrono::system_clock>(dateTime);
3139
auto result = (std::wstringstream{} << p2).str();
3240
result = result.substr(0, result.rfind(L"."));

FastCopy/RobocopyViewModel.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,16 @@ namespace winrt::FastCopy::implementation
3030
return;
3131

3232
m_recordFile.emplace(value);
33+
m_recordFile->GetNumFiles();
34+
m_iter = m_recordFile->begin();
35+
m_recordFileBegin = m_recordFile->begin();
36+
m_recordFileEnd = m_recordFile->end();
3337

3438
m_countItemTask = concurrency::create_task([this]
3539
{
36-
m_recordFile->GetNumFiles();
37-
m_iter = m_recordFile->begin();
38-
m_recordFileBegin = m_recordFile->begin();
39-
m_recordFileEnd = m_recordFile->end();
4040
m_totalSize = m_recordFile->GetTotalSize();
41-
4241
Global::UIThread.TryEnqueue([this] {
4342
raisePropertyChange(L"ItemCount");
44-
raisePropertyChange(L"Source");
4543
});
4644
});
4745
}
@@ -85,9 +83,7 @@ namespace winrt::FastCopy::implementation
8583
}
8684
winrt::hstring RobocopyViewModel::Source()
8785
{
88-
if (m_recordFile && m_iter && *m_iter >= m_recordFileBegin && *m_iter < m_recordFileEnd)
89-
return std::filesystem::path{ **m_iter }.filename().wstring().data();
90-
return L"---";
86+
return winrt::hstring{ m_sourceForUI ? m_sourceForUI->filename().wstring() : L"---" };
9187
}
9288
winrt::hstring RobocopyViewModel::Destination()
9389
{
@@ -139,7 +135,10 @@ namespace winrt::FastCopy::implementation
139135
//m_countItemTask.get();
140136
while (*m_iter != m_recordFile->end() && m_status == Status::Running)
141137
{
142-
Global::UIThread.TryEnqueue([this] {raisePropertyChange(L"Source"); });
138+
Global::UIThread.TryEnqueue([this, value = **m_iter] {
139+
m_sourceForUI.emplace(std::move(value));
140+
raisePropertyChange(L"Source");
141+
});
143142
if (canUseShellCopy())
144143
{
145144
auto currentItemSize = TaskFile::GetSizeOfPath(**m_iter);

FastCopy/RobocopyViewModel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ namespace winrt::FastCopy::implementation
7575
mutable std::optional<TaskFile::TaskFileIterator<typename std::vector<std::wstring>::iterator>> m_iter;
7676
TaskFile::TaskFileIterator<typename std::vector<std::wstring>::iterator> m_recordFileBegin;
7777
TaskFile::TaskFileIterator<typename std::vector<std::wstring>::iterator> m_recordFileEnd;
78+
std::optional<std::filesystem::path> m_sourceForUI;
7879

7980
std::optional<std::vector<winrt::FastCopy::FileCompareViewModel>> m_duplicateFileTask;
8081
std::optional<std::vector<winrt::FastCopy::FileCompareViewModel>::iterator> m_duplicateFileTaskIter;

0 commit comments

Comments
 (0)