Cleanup.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. //---------------------------------------------------------------------
  2. #include <FormsPCH.h>
  3. #pragma hdrstop
  4. #include <PuttyTools.h>
  5. #include "Cleanup.h"
  6. //---------------------------------------------------------------------
  7. #pragma resource "*.dfm"
  8. //---------------------------------------------------------------------
  9. bool __fastcall DoCleanupDialog()
  10. {
  11. std::unique_ptr<TCleanupDialog> CleanupDialog(SafeFormCreate<TCleanupDialog>());
  12. return CleanupDialog->Execute();
  13. }
  14. //---------------------------------------------------------------------
  15. void __fastcall DoCleanupDialogIfAnyDataAndWanted()
  16. {
  17. std::unique_ptr<TCleanupDialog> CleanupDialog(SafeFormCreate<TCleanupDialog>());
  18. if (CleanupDialog->AnyData() &&
  19. (MessageDialog(LoadStr(UNINSTALL_CLEANUP), qtConfirmation, qaYes | qaNo, HELP_UNINSTALL_CLEANUP) == qaYes))
  20. {
  21. CleanupDialog->Execute();
  22. }
  23. }
  24. //---------------------------------------------------------------------
  25. __fastcall TCleanupDialog::TCleanupDialog(TComponent* AOwner)
  26. : TForm(AOwner)
  27. {
  28. FAnyData = false;
  29. FindData();
  30. UseSystemSettings(this);
  31. }
  32. //---------------------------------------------------------------------
  33. void __fastcall TCleanupDialog::AddLocation(int CaptionId, const UnicodeString & Location, TCleanupEvent Event)
  34. {
  35. FCaptions.push_back(LoadStr(CaptionId));
  36. FLocations.push_back(Location);
  37. FCleanupEvents.push_back(Event);
  38. FAnyData = true;
  39. }
  40. //---------------------------------------------------------------------
  41. void __fastcall TCleanupDialog::AddRegistryLocation(int CaptionId, const UnicodeString & Location, TCleanupEvent Event)
  42. {
  43. AddLocation(CaptionId, Configuration->RootKeyStr + L'\\' + Configuration->RegistryStorageKey + L'\\' + Location, Event);
  44. }
  45. //---------------------------------------------------------------------
  46. bool __fastcall TCleanupDialog::AnyData()
  47. {
  48. return FAnyData;
  49. }
  50. //---------------------------------------------------------------------
  51. void __fastcall TCleanupDialog::FindData()
  52. {
  53. // Add unconditionally (as it has a side effect of not saving the configuration)
  54. AddRegistryLocation(CLEANUP_CONFIG, Configuration->ConfigurationSubKey, Configuration->CleanupConfiguration);
  55. // But count as real data, only if it really exists
  56. FAnyData = Configuration->RegistryPathExists(Configuration->ConfigurationSubKey);
  57. if (Configuration->RegistryPathExists(Configuration->StoredSessionsSubKey))
  58. {
  59. AddRegistryLocation(CLEANUP_SESSIONS, Configuration->StoredSessionsSubKey, StoredSessions->Cleanup);
  60. }
  61. if (Configuration->HasAnyCache())
  62. {
  63. AddRegistryLocation(CLEANUP_CACHES, L"...", Configuration->CleanupCaches);
  64. }
  65. UnicodeString IniFilePath = ExpandEnvironmentVariables(Configuration->IniFileStorageNameForReading);
  66. if (FileExists(IniFilePath))
  67. {
  68. AddLocation(CLEANUP_INIFILE, IniFilePath, Configuration->CleanupIniFile);
  69. }
  70. if (RandomSeedExists())
  71. {
  72. AddLocation(CLEANUP_SEEDFILE, Configuration->RandomSeedFileName, Configuration->CleanupRandomSeedFile);
  73. }
  74. if (WinConfiguration->AnyTemporaryFolders())
  75. {
  76. AddLocation(CLEANUP_TEMP_FOLDERS, WinConfiguration->TemporaryDir(true), WinConfiguration->CleanupTemporaryFolders);
  77. }
  78. }
  79. //---------------------------------------------------------------------
  80. void __fastcall TCleanupDialog::InitControls()
  81. {
  82. DebugAssert(FCaptions.size() == FLocations.size());
  83. DebugAssert(FCaptions.size() == FCleanupEvents.size());
  84. // Particularly in response to WM_DPICHANGED, the form may re-show
  85. DataListView->Items->Clear();
  86. for (size_t Index = 0; Index < FCaptions.size(); Index++)
  87. {
  88. TListItem * Item = DataListView->Items->Add();
  89. Item->Caption = FCaptions[Index];
  90. Item->SubItems->Add(FLocations[Index]);
  91. }
  92. AutoSizeListColumnsWidth(DataListView);
  93. }
  94. //---------------------------------------------------------------------
  95. void __fastcall TCleanupDialog::UpdateControls()
  96. {
  97. EnableControl(OKButton, ListViewAnyChecked(DataListView));
  98. }
  99. //---------------------------------------------------------------------------
  100. void __fastcall TCleanupDialog::DataListViewMouseDown(
  101. TObject * /*Sender*/, TMouseButton /*Button*/, TShiftState /*Shift*/,
  102. int /*X*/, int /*Y*/)
  103. {
  104. UpdateControls();
  105. }
  106. //---------------------------------------------------------------------------
  107. void __fastcall TCleanupDialog::DataListViewKeyUp(
  108. TObject * /*Sender*/, WORD & /*Key*/, TShiftState /*Shift*/)
  109. {
  110. UpdateControls();
  111. }
  112. //---------------------------------------------------------------------------
  113. void __fastcall TCleanupDialog::FormShow(TObject * /*Sender*/)
  114. {
  115. InitControls();
  116. UpdateControls();
  117. }
  118. //---------------------------------------------------------------------------
  119. void __fastcall TCleanupDialog::CheckAllButtonClick(TObject * /*Sender*/)
  120. {
  121. ListViewCheckAll(DataListView, caToggle);
  122. UpdateControls();
  123. }
  124. //---------------------------------------------------------------------------
  125. void __fastcall TCleanupDialog::DataListViewInfoTip(TObject * /*Sender*/,
  126. TListItem * Item, UnicodeString & InfoTip)
  127. {
  128. InfoTip = Format(L"%s\nLocation: %s",
  129. ARRAYOFCONST((Item->Caption, Item->SubItems->Strings[0])));
  130. }
  131. //---------------------------------------------------------------------------
  132. void __fastcall TCleanupDialog::HelpButtonClick(TObject * /*Sender*/)
  133. {
  134. FormHelp(this);
  135. }
  136. //---------------------------------------------------------------------------
  137. bool __fastcall TCleanupDialog::Execute()
  138. {
  139. bool Result = (ShowModal() == DefaultResult(this));
  140. if (Result)
  141. {
  142. Configuration->Usage->Inc(L"Cleanups");
  143. for (int Index = 0; Index < DataListView->Items->Count; Index++)
  144. {
  145. if (DataListView->Items->Item[Index]->Checked)
  146. {
  147. try
  148. {
  149. FCleanupEvents[Index]();
  150. }
  151. catch (Exception & E)
  152. {
  153. ShowExtendedException(&E);
  154. }
  155. }
  156. }
  157. }
  158. return Result;
  159. }
  160. //---------------------------------------------------------------------------