22
33#include " App.h"
44
5+ #include < winrt/Windows.ApplicationModel.h>
6+ #include < winrt/Windows.ApplicationModel.DataTransfer.h>
7+ #include < winrt/Windows.ApplicationModel.DataTransfer.ShareTarget.h>
8+ #include < winrt/Windows.Foundation.h>
9+ #include < winrt/Windows.Foundation.Collections.h>
10+ #include < winrt/Windows.Storage.h>
11+
512#include < Mile.Xaml.h>
613
14+ #include " ../ThirdParty/LZMA/CPP/Common/Common.h"
15+ #include " ../SevenZip/CPP/7zip/UI/Common/CompressCall.h"
16+
17+ namespace winrt
18+ {
19+ using winrt::Windows::ApplicationModel::AppInstance;
20+ using winrt::Windows::ApplicationModel::Activation::ActivationKind;
21+ using winrt::Windows::ApplicationModel::Activation::IActivatedEventArgs;
22+ using winrt::Windows::ApplicationModel::DataTransfer::StandardDataFormats;
23+ using winrt::Windows::ApplicationModel::DataTransfer::ShareTarget::ShareOperation;
24+ using winrt::Windows::Foundation::Collections::IVectorView;
25+ using winrt::Windows::Storage::IStorageItem;
26+ using winrt::Windows::Storage::IStorageItem2;
27+ }
28+
29+
730namespace winrt ::NanaZip::implementation
831{
932 App::App ()
@@ -16,4 +39,47 @@ namespace winrt::NanaZip::implementation
1639 Exit ();
1740 ::MileXamlGlobalUninitialize ();
1841 }
42+
43+ void App::OnLaunched (winrt::LaunchActivatedEventArgs const & args)
44+ {
45+ UNREFERENCED_PARAMETER (args);
46+ if (winrt::IActivatedEventArgs e = winrt::AppInstance::GetActivatedEventArgs ())
47+ {
48+ switch (e.Kind ())
49+ {
50+ case winrt::ActivationKind::ShareTarget:
51+ this ->OnShareTargetActivated (e.as <winrt::ShareTargetActivatedEventArgs>());
52+ break ;
53+ default :
54+ break ;
55+ }
56+ }
57+ }
58+
59+ void App::OnShareTargetActivated (winrt::ShareTargetActivatedEventArgs const & args)
60+ {
61+ if (args.ShareOperation ().Data ().Contains (winrt::StandardDataFormats::StorageItems ()))
62+ {
63+ winrt::IVectorView<winrt::IStorageItem> items = args.ShareOperation ().Data ().GetStorageItemsAsync ().get ();
64+ UStringVector fileNames;
65+ for (winrt::IStorageItem const item : items)
66+ {
67+ fileNames.Add (item.Path ().c_str ());
68+ }
69+ winrt::IStorageItem2 baseFolder = items.GetAt (0 ).as <winrt::IStorageItem2>().GetParentAsync ().get ();
70+
71+ winrt::check_hresult (::CompressFiles (
72+ baseFolder.Path ().c_str (),
73+ baseFolder.Name ().c_str (),
74+ L" " ,
75+ true ,
76+ fileNames,
77+ true ,
78+ true ,
79+ false ));
80+ }
81+
82+ args.ShareOperation ().ReportCompleted ();
83+ ::ExitProcess (0 );
84+ }
1985}
0 commit comments