diff --git a/ClearCache1C.sln b/ClearCache1C.sln
index 13eafed..3f83b6c 100644
--- a/ClearCache1C.sln
+++ b/ClearCache1C.sln
@@ -3,9 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28306.52
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClearCache1C", "ClearCache1C\ClearCache1C.csproj", "{CA37FAA9-7C77-4C16-81A4-3BBD93F235A1}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{083C60B7-90FE-4420-ACC6-6FCD7AF073A6}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClearCache1C", "ClearCache1C\ClearCache1C.csproj", "{2D3EA215-F5C4-435B-922E-F985AF0065CB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,15 +11,15 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {CA37FAA9-7C77-4C16-81A4-3BBD93F235A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CA37FAA9-7C77-4C16-81A4-3BBD93F235A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CA37FAA9-7C77-4C16-81A4-3BBD93F235A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CA37FAA9-7C77-4C16-81A4-3BBD93F235A1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2D3EA215-F5C4-435B-922E-F985AF0065CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2D3EA215-F5C4-435B-922E-F985AF0065CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2D3EA215-F5C4-435B-922E-F985AF0065CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2D3EA215-F5C4-435B-922E-F985AF0065CB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {BB1D2E8F-9657-45EA-B581-2CE59F7A8F53}
+ SolutionGuid = {45BC8D5D-5D6C-4E12-8ECB-154D6FA6A2F8}
EndGlobalSection
EndGlobal
diff --git a/ClearCache1C/1C_120.ico b/ClearCache1C/1C_120.ico
deleted file mode 100644
index b2e0d35..0000000
Binary files a/ClearCache1C/1C_120.ico and /dev/null differ
diff --git a/ClearCache1C/App.config b/ClearCache1C/App.config
index 731f6de..8e15646 100644
--- a/ClearCache1C/App.config
+++ b/ClearCache1C/App.config
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/ClearCache1C/Builds/Чистка кэша 1С v1.0.2.exe b/ClearCache1C/Builds/Чистка кэша 1С v1.0.2.exe
new file mode 100644
index 0000000..959b4a8
Binary files /dev/null and b/ClearCache1C/Builds/Чистка кэша 1С v1.0.2.exe differ
diff --git a/ClearCache1C/ClearCache1C.csproj b/ClearCache1C/ClearCache1C.csproj
index 58e602f..d52bc3c 100644
--- a/ClearCache1C/ClearCache1C.csproj
+++ b/ClearCache1C/ClearCache1C.csproj
@@ -4,15 +4,13 @@
Debug
AnyCPU
- {CA37FAA9-7C77-4C16-81A4-3BBD93F235A1}
+ {2D3EA215-F5C4-435B-922E-F985AF0065CB}
WinExe
ClearCache1C
- Чистка кэша 1С
- v4.6.1
+ ClearCache1C
+ v4.5
512
- true
true
- false
publish\
true
Disk
@@ -24,9 +22,9 @@
false
true
0
- 1.0.1.0
+ 1.0.0.%2a
+ false
false
- true
true
@@ -49,32 +47,11 @@
4
- Custom-Icon-Design-Mini-File-delete.ico
-
-
- 7AC4C8549D1C2C8FCD8E3679F8E21FC6168EC2BF
-
-
- ClearCache1C_TemporaryKey.pfx
-
-
- true
-
-
- LocalIntranet
-
-
- Properties\app.manifest
-
-
- true
+ app.ico
-
- ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll
-
@@ -86,34 +63,34 @@
-
+
Form
-
- Form1.cs
+
+ FormAbout.cs
-
+
Form
-
- Form2.cs
+
+ FormMain.cs
-
+
Form
-
- Form3.cs
+
+ FormResults.cs
-
- Form1.cs
+
+ FormAbout.cs
-
- Form2.cs
+
+ FormMain.cs
-
- Form3.cs
+
+ FormResults.cs
ResXFileCodeGenerator
@@ -125,9 +102,6 @@
Resources.resx
True
-
-
-
SettingsSingleFileGenerator
Settings.Designer.cs
@@ -141,9 +115,6 @@
-
-
-
@@ -151,23 +122,30 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- False
- Microsoft .NET Framework 4.6.1 %28x86 и x64%29
- true
-
False
.NET Framework 3.5 SP1
false
-
-
-
-
\ No newline at end of file
diff --git a/ClearCache1C/Form1.Designer.cs b/ClearCache1C/Form1.Designer.cs
deleted file mode 100644
index ab0731b..0000000
--- a/ClearCache1C/Form1.Designer.cs
+++ /dev/null
@@ -1,191 +0,0 @@
-namespace ClearCache1C
-{
- partial class FormMain
- {
- ///
- /// Обязательная переменная конструктора.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Освободить все используемые ресурсы.
- ///
- /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Код, автоматически созданный конструктором форм Windows
-
- ///
- /// Требуемый метод для поддержки конструктора — не изменяйте
- /// содержимое этого метода с помощью редактора кода.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
- this.ListBases = new System.Windows.Forms.CheckedListBox();
- this.btnClearCache = new System.Windows.Forms.Button();
- this.btnPurgeAll = new System.Windows.Forms.Button();
- this.InfoBox = new System.Windows.Forms.TextBox();
- this.btnExpand = new System.Windows.Forms.Button();
- this.btnSmartSelect = new System.Windows.Forms.Button();
- this.btnRemoveSelection = new System.Windows.Forms.Button();
- this.btnSelectAll = new System.Windows.Forms.Button();
- this.btnAbout = new System.Windows.Forms.Button();
- this.SuspendLayout();
- //
- // ListBases
- //
- this.ListBases.BackColor = System.Drawing.SystemColors.Window;
- this.ListBases.Cursor = System.Windows.Forms.Cursors.Arrow;
- this.ListBases.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
- this.ListBases.FormattingEnabled = true;
- this.ListBases.Location = new System.Drawing.Point(12, 42);
- this.ListBases.Name = "ListBases";
- this.ListBases.RightToLeft = System.Windows.Forms.RightToLeft.No;
- this.ListBases.Size = new System.Drawing.Size(400, 364);
- this.ListBases.TabIndex = 0;
- this.ListBases.SelectedIndexChanged += new System.EventHandler(this.ListBases_SelectedIndexChanged);
- //
- // btnClearCache
- //
- this.btnClearCache.Location = new System.Drawing.Point(12, 412);
- this.btnClearCache.Name = "btnClearCache";
- this.btnClearCache.Size = new System.Drawing.Size(198, 37);
- this.btnClearCache.TabIndex = 1;
- this.btnClearCache.Text = "Очистить кэш";
- this.btnClearCache.UseVisualStyleBackColor = true;
- this.btnClearCache.Click += new System.EventHandler(this.ButtonClearCache_Click);
- //
- // btnPurgeAll
- //
- this.btnPurgeAll.Location = new System.Drawing.Point(214, 412);
- this.btnPurgeAll.Name = "btnPurgeAll";
- this.btnPurgeAll.Size = new System.Drawing.Size(198, 37);
- this.btnPurgeAll.TabIndex = 4;
- this.btnPurgeAll.Text = "Удалить все";
- this.btnPurgeAll.UseVisualStyleBackColor = true;
- this.btnPurgeAll.Click += new System.EventHandler(this.ButtonPurgeAll_Click);
- //
- // InfoBox
- //
- this.InfoBox.BackColor = System.Drawing.SystemColors.Info;
- this.InfoBox.Cursor = System.Windows.Forms.Cursors.IBeam;
- this.InfoBox.Location = new System.Drawing.Point(445, 12);
- this.InfoBox.Multiline = true;
- this.InfoBox.Name = "InfoBox";
- this.InfoBox.ReadOnly = true;
- this.InfoBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
- this.InfoBox.Size = new System.Drawing.Size(400, 437);
- this.InfoBox.TabIndex = 6;
- this.InfoBox.WordWrap = false;
- //
- // btnExpand
- //
- this.btnExpand.FlatAppearance.BorderSize = 0;
- this.btnExpand.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.btnExpand.Location = new System.Drawing.Point(418, 42);
- this.btnExpand.Name = "btnExpand";
- this.btnExpand.Size = new System.Drawing.Size(21, 364);
- this.btnExpand.TabIndex = 7;
- this.btnExpand.Text = ">\r\n>\r\n>";
- this.btnExpand.UseVisualStyleBackColor = true;
- this.btnExpand.Click += new System.EventHandler(this.ButtonExpand_Click);
- //
- // btnSmartSelect
- //
- this.btnSmartSelect.Image = global::ClearCache1C.Properties.Resources.icon_smart_select_16;
- this.btnSmartSelect.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.btnSmartSelect.Location = new System.Drawing.Point(12, 12);
- this.btnSmartSelect.Name = "btnSmartSelect";
- this.btnSmartSelect.Size = new System.Drawing.Size(130, 27);
- this.btnSmartSelect.TabIndex = 8;
- this.btnSmartSelect.Text = "Выделить с кэшем";
- this.btnSmartSelect.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.btnSmartSelect.UseVisualStyleBackColor = true;
- this.btnSmartSelect.Click += new System.EventHandler(this.ButtonSmartSelect_Click);
- //
- // btnRemoveSelection
- //
- this.btnRemoveSelection.Image = ((System.Drawing.Image)(resources.GetObject("btnRemoveSelection.Image")));
- this.btnRemoveSelection.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.btnRemoveSelection.Location = new System.Drawing.Point(282, 12);
- this.btnRemoveSelection.Name = "btnRemoveSelection";
- this.btnRemoveSelection.Size = new System.Drawing.Size(130, 27);
- this.btnRemoveSelection.TabIndex = 3;
- this.btnRemoveSelection.Text = "Снять выделение";
- this.btnRemoveSelection.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.btnRemoveSelection.UseVisualStyleBackColor = true;
- this.btnRemoveSelection.Click += new System.EventHandler(this.ButtonRemoveSelection_Click);
- //
- // btnSelectAll
- //
- this.btnSelectAll.Image = ((System.Drawing.Image)(resources.GetObject("btnSelectAll.Image")));
- this.btnSelectAll.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.btnSelectAll.Location = new System.Drawing.Point(146, 12);
- this.btnSelectAll.Name = "btnSelectAll";
- this.btnSelectAll.Size = new System.Drawing.Size(130, 27);
- this.btnSelectAll.TabIndex = 2;
- this.btnSelectAll.Text = "Выделить все";
- this.btnSelectAll.UseVisualStyleBackColor = true;
- this.btnSelectAll.Click += new System.EventHandler(this.ButtonSelectAll_Click);
- //
- // btnAbout
- //
- this.btnAbout.Cursor = System.Windows.Forms.Cursors.Help;
- this.btnAbout.FlatAppearance.BorderSize = 0;
- this.btnAbout.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.btnAbout.Location = new System.Drawing.Point(418, 13);
- this.btnAbout.Name = "btnAbout";
- this.btnAbout.Size = new System.Drawing.Size(21, 26);
- this.btnAbout.TabIndex = 9;
- this.btnAbout.Text = "?";
- this.btnAbout.UseVisualStyleBackColor = true;
- this.btnAbout.Click += new System.EventHandler(this.ButtonAbout_Click);
- //
- // FormMain
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(854, 461);
- this.Controls.Add(this.btnAbout);
- this.Controls.Add(this.btnSmartSelect);
- this.Controls.Add(this.btnExpand);
- this.Controls.Add(this.InfoBox);
- this.Controls.Add(this.btnPurgeAll);
- this.Controls.Add(this.btnRemoveSelection);
- this.Controls.Add(this.btnSelectAll);
- this.Controls.Add(this.btnClearCache);
- this.Controls.Add(this.ListBases);
- this.Cursor = System.Windows.Forms.Cursors.Arrow;
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.MaximizeBox = false;
- this.MinimizeBox = false;
- this.Name = "FormMain";
- this.Text = "Чистка кэша 1С";
- this.Load += new System.EventHandler(this.FormMain_Load);
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
- private System.Windows.Forms.Button btnClearCache;
- private System.Windows.Forms.Button btnSelectAll;
- private System.Windows.Forms.Button btnRemoveSelection;
- private System.Windows.Forms.Button btnPurgeAll;
- private System.Windows.Forms.TextBox InfoBox;
- private System.Windows.Forms.Button btnExpand;
- private System.Windows.Forms.CheckedListBox ListBases;
- private System.Windows.Forms.Button btnSmartSelect;
- private System.Windows.Forms.Button btnAbout;
- }
-}
-
diff --git a/ClearCache1C/Form1.cs b/ClearCache1C/Form1.cs
deleted file mode 100644
index 211755e..0000000
--- a/ClearCache1C/Form1.cs
+++ /dev/null
@@ -1,437 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-// Using
-using System.IO;
-
-namespace ClearCache1C
-{
- public partial class FormMain : Form
- {
- public FormMain()
- {
- StartPosition = FormStartPosition.CenterScreen;
- InitializeComponent();
- }
- // ******************* Classes *******************
- public class BasesListItem
- {
- public string Name { get; set; }
- public string Path { get; set; }
- public string Id { get; set; }
- public bool FolderExists { get; set; }
- public float FolderSize { get; set; }
- public float CacheSize { get; set; }
- public List FolderPaths { get; set; }
- public List CachePaths { get; set; }
- public BasesListItem(string s_name, string s_path, string s_id,
- bool s_folder_exists,
- float s_folder_size, float s_cache_size,
- List s_folder_paths, List s_cache_paths)
- {
- Name = s_name;
- Path = s_path;
- Id = s_id;
- FolderExists = s_folder_exists;
- FolderSize = s_folder_size;
- CacheSize = s_cache_size;
- FolderPaths = s_folder_paths;
- CachePaths = s_cache_paths;
- }
- public override string ToString() {
- string f_size = String.Format("{0,3}", CacheSize.ToString("0"));
- return (CacheSize > 0 ? "[" + f_size + " Mb] ": "[------] ")
- + Name;
- }
- }
- // ******************* Events *******************
- private void FormMain_Load(object sender, EventArgs e)
- {
- RefreshListBases();
- ToggleInfoView();
- SetToolTips();
- }
- // ****** LIST CONTROL BUTTONS
- private void ButtonSmartSelect_Click(object sender, EventArgs e)
- {
- ModListBases(true, true);
- }
- private void ButtonSelectAll_Click(object sender, EventArgs e)
- {
- ModListBases(true, false);
- }
- private void ButtonRemoveSelection_Click(object sender, EventArgs e)
- {
- ModListBases(false, false);
- }
- private void ButtonExpand_Click(object sender, EventArgs e)
- {
- ToggleInfoView();
- }
- private void ToggleInfoView()
- {
- if (Size.Width != 870) // is collapsed
- {
- Size = new Size(870, Size.Height);
- btnExpand.Text = "<\r\n<\r\n<";
- InfoBox.Visible = true;
- ShowSelectedInfo();
- }
- else
- {
- int calc_width = btnExpand.Location.X + btnExpand.Size.Width + 22;
- Size = new Size(calc_width, Size.Height);
- btnExpand.Text = ">\r\n>\r\n>";
- InfoBox.Visible = false;
- }
- }
- private void ButtonAbout_Click(object sender, EventArgs e)
- {
- FormAbout aboutForm = new FormAbout();
- aboutForm.ShowDialog();
- }
- // ****** MAIN BUTTONS
- private void ButtonClearCache_Click(object sender, EventArgs e)
- {
- if (ListBases.CheckedItems.Count == 0)
- {
- MessageBox.Show("Ничего не выбрано.", "Meh...", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- return;
- }
- ClearFolders(false);
- RefreshListBases();
- ShowSelectedInfo();
- }
- private void ButtonPurgeAll_Click(object sender, EventArgs e)
- {
- if (ListBases.CheckedItems.Count == 0)
- {
- MessageBox.Show("Ничего не выбрано.", "Meh...", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- return;
- }
- DialogResult dialogResult = MessageBox.Show("Это удалит все локальные настройки пользователя в выбранных базах. \r\nВы уверены, что хотите этого?", "Внимание!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
- if (dialogResult == DialogResult.Yes)
- {
- ClearFolders(true);
- RefreshListBases();
- ShowSelectedInfo();
- }
- }
- // ****** FOR DEBUG
- private void ListBases_SelectedIndexChanged(object sender, EventArgs e)
- {
- ShowSelectedInfo();
- }
- // ******************* MAIN *******************
- private void ClearFolders(bool purge)
- {
- CheckedListBox.CheckedItemCollection items = ListBases.CheckedItems;
-
- int successfully_deleted = 0;
- int errors_on_delete = 0;
- float total_size_deleted = 0.0f;
-
- List list_success = new List();
- List list_error = new List();
- List list_exceptions = new List();
-
- for (int i = 0; i < items.Count; i++)
- {
- BasesListItem base_item = items[i] as BasesListItem;
- (bool is_error, float deleted_size, List exceptions) = DeleteFoldersContent(purge ? base_item.FolderPaths : base_item.CachePaths);
- if (!is_error)
- {
- successfully_deleted++;
- list_success.Add(base_item.Name);
- }
- else
- {
- errors_on_delete++;
- list_error.Add(base_item.Name);
- list_exceptions.AddRange(exceptions);
- }
- total_size_deleted += deleted_size;
- }
- ShowResults(successfully_deleted, errors_on_delete, total_size_deleted, list_success, list_error, list_exceptions);
- }
- private void ShowResults(int successfully_deleted, int errors_on_delete, float total_size_deleted,
- List list_success, List list_error, List list_exceptions)
- {
- FormResult resultForm = new FormResult();
- resultForm.SetInfoResult(successfully_deleted, errors_on_delete, total_size_deleted,
- list_success, list_error, list_exceptions);
- resultForm.ShowDialog();
- }
- private (bool is_error, float deleted_size, List exceptions) DeleteFoldersContent(List ListPaths)
- {
- bool is_error = false;
- float deleted_size = 0.0f;
- List exceptions = new List();
-
- foreach (string folder_path in ListPaths)
- {
- long folder_size = DirSize(new DirectoryInfo(folder_path));
- try
- {
- Directory.Delete(folder_path, true);
- deleted_size += folder_size;
- }
- catch (Exception e)
- {
- is_error = true;
- exceptions.Add(e.ToString());
- }
- }
- deleted_size = deleted_size / 1024 / 1024;
- return (is_error, deleted_size, exceptions);
- }
-
- // ******************* Added functions *******************
- private void ShowSelectedInfo()
- {
- if (!InfoBox.Visible) { return; }
- InfoBox.ResetText();
- BasesListItem curItem = ListBases.SelectedItem as BasesListItem;
- if (curItem is null) { return; }
- /*
- Console.WriteLine("Name: " + curItem.Name);
- Console.WriteLine("ID: " + curItem.Id);
- Console.WriteLine("Connect string: " + curItem.Path);
- Console.WriteLine("Cache exists: " + curItem.FolderExists);
- Console.WriteLine("Size total: " + curItem.FolderSize.ToString("0.00"));
- Console.WriteLine("Size cache: " + curItem.CacheSize.ToString("0.00"));
- Console.WriteLine("Root Folders: " + curItem.FolderPaths.Count);
- Console.WriteLine("Cache Folders: " + curItem.CachePaths.Count);
- */
- InfoBox.AppendText("--- Информация о базе ---");
- InfoBox.AppendText("\r\nИмя: " + curItem.Name);
- InfoBox.AppendText("\r\nID: " + curItem.Id);
- InfoBox.AppendText("\r\nСтрока подключения: " + curItem.Path);
-
- InfoBox.AppendText("\r\n");
- InfoBox.AppendText("\r\nКэш существует: " + ((curItem.CacheSize > 0) ? "Да" : "Нет"));
- InfoBox.AppendText("\r\nРазмер кэша: " + curItem.CacheSize.ToString("0.00") + " Mb");
- InfoBox.AppendText("\r\nРазмер всего: " + curItem.FolderSize.ToString("0.00") + " Mb");
-
- InfoBox.AppendText("\r\n");
- InfoBox.AppendText("\r\nКорневые каталоги: ");
- foreach (string s in curItem.FolderPaths)
- {
- InfoBox.AppendText("\r\n > " + s);
- }
- InfoBox.AppendText("\r\n");
-
- InfoBox.AppendText("\r\nКаталоги кэша: ");
- foreach (string s in curItem.CachePaths)
- {
- InfoBox.AppendText("\r\n > " + s);
- }
- InfoBox.AppendText("\r\n");
- }
- private void ModListBases(bool isChecked, bool onlyWithCache)
- {
- for (int i = 0; i < ListBases.Items.Count; i++)
- {
- if (onlyWithCache)
- {
- if ((ListBases.Items[i] as BasesListItem).CacheSize > 0)
- {
- ListBases.SetItemChecked(i, true);
- }
- else
- {
- ListBases.SetItemChecked(i, false);
- }
- }
- else
- {
- ListBases.SetItemChecked(i, isChecked);
- }
- }
- }
- private void RefreshListBases()
- {
- this.ListBases.Items.Clear();
-
- string base_path = @"%appdata%\1C\1CEStart\ibases.v8i";
- string[] lines = ReadFileContent(base_path);
- if (lines == null)
- {
- MessageBox.Show("Can't find ibases.v8i file in provided location: " + base_path, "Error reading file!",
- MessageBoxButtons.OK, MessageBoxIcon.Error);
- return;
- }
-
- var bases_dict = GetBasesDictionary(lines);
- foreach (string key in bases_dict.Keys)
- {
- var value = bases_dict[key];
- (bool s_folder_exists,
- float s_folder_size, float s_cache_size,
- List s_folder_paths, List s_cache_paths) = GetLocalFolderInfo(key);
- ListBases.Items.Add(new BasesListItem(value.Name, value.Path, key,
- s_folder_exists,
- s_folder_size, s_cache_size,
- s_folder_paths, s_cache_paths), false);
- }
- }
- private (bool s_folder_exists,
- float s_folder_size, float s_cache_size,
- List s_folder_paths, List s_cache_paths) GetLocalFolderInfo(string key)
- {
- // Local path of cache is:
- // %APPDATA%\1C\1cv8\$Id
- // %LOCALAPPDATA%\1C\1cv8\$Id
- // var cache_folders = ("Config", "ConfigSave", "SICache", "vrs-cache");
-
- string base_path_local = @"%LOCALAPPDATA%\1C\1cv8\" + key;
- string base_path_roaming = @"%APPDATA%\1C\1cv8\" + key;
-
- base_path_local = Environment.ExpandEnvironmentVariables(base_path_local);
- base_path_roaming = Environment.ExpandEnvironmentVariables(base_path_roaming);
-
- float s_folder_size = 0.0f;
- float s_cache_size = 0.0f;
-
- List s_folder_paths = new List();
- List s_cache_paths = new List();
-
- bool s_folder_exists = (Directory.Exists(base_path_local) || Directory.Exists(base_path_roaming)) ? true : false;
- if (s_folder_exists)
- {
- s_cache_paths = GetFoldersById(base_path_local, base_path_roaming);
- if (s_cache_paths.Count > 0)
- {
- foreach (string s in s_cache_paths)
- {
- s_cache_size += DirSize(new DirectoryInfo(s));
- }
- }
- if (Directory.Exists(base_path_local))
- {
- s_folder_size += DirSize(new DirectoryInfo(base_path_local));
- s_folder_paths.Add(base_path_local);
- }
- if (Directory.Exists(base_path_roaming))
- {
- s_folder_size += DirSize(new DirectoryInfo(base_path_roaming));
- s_folder_paths.Add(base_path_roaming);
- }
- }
- s_folder_size = s_folder_size / 1024 / 1024; // Mb
- s_cache_size = s_cache_size / 1024 / 1024; // Mb
- return (s_folder_exists,
- s_folder_size, s_cache_size,
- s_folder_paths, s_cache_paths);
- }
- private List GetFoldersById(string base_path_local, string base_path_roaming)
- {
- var found_folders = new List();
- if (Directory.Exists(base_path_local))
- {
- found_folders.AddRange(Directory.GetDirectories(base_path_local, "Config", SearchOption.AllDirectories).ToList());
- found_folders.AddRange(Directory.GetDirectories(base_path_local, "ConfigSave", SearchOption.AllDirectories).ToList());
- found_folders.AddRange(Directory.GetDirectories(base_path_local, "SICache", SearchOption.AllDirectories).ToList());
- }
- if (Directory.Exists(base_path_roaming))
- {
- found_folders.AddRange(Directory.GetDirectories(base_path_roaming, "vrs-cache", SearchOption.AllDirectories).ToList());
- }
- return found_folders;
- }
- private Dictionary GetBasesDictionary(string[] lines)
- {
- var bases_dict = new Dictionary();
- var (name, id, path) = ("", "", "");
- foreach (string line in lines)
- {
- /* ---------- EXAMPLE
- [Торговля(Рабочая)]
- Connect=Srvr="winserv";Ref="ut2014_work";
- ID=f8370086-654e-4807-b79b-3f51653c3699
- OrderInList = 0
- Folder=/Рабочие
- OrderInTree = 0
- External=1
- ClientConnectionSpeed=Normal
- App = Auto
- WA=1
- Version=8.2
- DefaultApp=ThickClient
- -------------------- */
- if (line.StartsWith("[")) // Start
- {
- name = line.Substring(1, line.Length - 2);
- id = "";
- path = "";
- }
- else if (line.StartsWith("Connect=")) // Connect string
- {
- path = line.Substring(8);
- }
- else if (line.StartsWith("ID=")) // ID string
- {
- id = line.Substring(3);
- }
- if (name != "" && path != "" && id != "")
- {
- bases_dict.Add(id, (name, path));
- name = "";
- id = "";
- path = "";
- }
- }
- return bases_dict;
- }
- private string[] ReadFileContent(string path_to_file)
- {
- string full_path_to_file = Environment.ExpandEnvironmentVariables(path_to_file);
- if (!File.Exists(full_path_to_file))
- {
- return null;
- }
- return System.IO.File.ReadAllLines(full_path_to_file);
- }
- private static long DirSize(DirectoryInfo d)
- {
- long size = 0;
- // Add file sizes.
- FileInfo[] fis = d.GetFiles();
- foreach (FileInfo fi in fis)
- {
- size += fi.Length;
- }
- // Add subdirectory sizes.
- DirectoryInfo[] dis = d.GetDirectories();
- foreach (DirectoryInfo di in dis)
- {
- size += DirSize(di);
- }
- return size;
- }
- private void SetToolTips()
- {
- ToolTip toolTip = new ToolTip();
-
- string ClearCache_ToolTip = "Для выбранных баз - удаляет только файлы кэша.\r\nПользовательские настройки сохраняются.";
- string PurgeAll_ToolTip = "Для выбранных баз - удаляет все найденные в корневых каталогах файлы.\r\nПользовательские настройки будут удалены.";
- string SmartSelect_ToolTip = "Выбрать только базы, в которых есть локальный кэш.";
- string SelectAll_ToolTip = "Выбрать все базы в списке.";
- string RemoveSelection_ToolTip = "Убрать выбор со всех баз в списке.";
- string About_ToolTip = "О программе";
-
- toolTip.SetToolTip(btnClearCache, ClearCache_ToolTip);
- toolTip.SetToolTip(btnPurgeAll, PurgeAll_ToolTip);
- toolTip.SetToolTip(btnSmartSelect, SmartSelect_ToolTip);
- toolTip.SetToolTip(btnSelectAll, SelectAll_ToolTip);
- toolTip.SetToolTip(btnRemoveSelection, RemoveSelection_ToolTip);
- toolTip.SetToolTip(btnAbout, About_ToolTip);
- }
- }
-}
diff --git a/ClearCache1C/Form2.cs b/ClearCache1C/Form2.cs
deleted file mode 100644
index 2fb8e64..0000000
--- a/ClearCache1C/Form2.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace ClearCache1C
-{
- public partial class FormResult : Form
- {
- public FormResult()
- {
- StartPosition = FormStartPosition.CenterScreen;
- InitializeComponent();
- }
-
- private void FormResult_Load(object sender, EventArgs e)
- {
- MaximizeBox = false;
- MinimizeBox = false;
- }
- public void SetInfoResult(int successfully_deleted, int errors_on_delete, float total_size_deleted,
- List list_success, List list_error, List list_exceptions)
- {
- InfoResult.ResetText();
- InfoResult.AppendText("--- Итоги ---");
- InfoResult.AppendText("\r\nВыполнено успешно: " + successfully_deleted);
- InfoResult.AppendText("\r\nВыполнено с ошибками: " + errors_on_delete);
- InfoResult.AppendText("\r\nВсего удалено: " + total_size_deleted.ToString("0.00") + " Mb");
- InfoResult.AppendText("\r\n");
- InfoResult.AppendText("\r\n--- Список обработанных успешно ---");
- foreach (string s in list_success)
- {
- InfoResult.AppendText("\r\n > " + s);
- }
- InfoResult.AppendText("\r\n");
- InfoResult.AppendText("\r\n--- Список обработанных с ошибками ---");
- foreach (string s in list_error)
- {
- InfoResult.AppendText("\r\n > " + s);
- }
- InfoResult.AppendText("\r\n");
- InfoResult.AppendText("\r\n--- Лог ошибок ---");
- foreach (string s in list_exceptions)
- {
- InfoResult.AppendText("\r\n > " + s);
- }
- }
- }
-}
diff --git a/ClearCache1C/Form2.resx b/ClearCache1C/Form2.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/ClearCache1C/Form2.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/ClearCache1C/Form3.Designer.cs b/ClearCache1C/FormAbout.Designer.cs
similarity index 52%
rename from ClearCache1C/Form3.Designer.cs
rename to ClearCache1C/FormAbout.Designer.cs
index aebe965..31e5f48 100644
--- a/ClearCache1C/Form3.Designer.cs
+++ b/ClearCache1C/FormAbout.Designer.cs
@@ -29,92 +29,98 @@
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAbout));
- this.pictureBoxAi = new System.Windows.Forms.PictureBox();
this.panel1 = new System.Windows.Forms.Panel();
- this.textBoxInfo = new System.Windows.Forms.TextBox();
+ this.pictureBoxAi = new System.Windows.Forms.PictureBox();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.lInfo = new System.Windows.Forms.Label();
+ this.labelVersion = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
- this.linkContact = new System.Windows.Forms.LinkLabel();
this.linkGit = new System.Windows.Forms.LinkLabel();
- this.label4 = new System.Windows.Forms.Label();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBoxAi)).BeginInit();
+ this.linkContact = new System.Windows.Forms.LinkLabel();
+ this.labelYear = new System.Windows.Forms.Label();
this.panel1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBoxAi)).BeginInit();
+ this.panel2.SuspendLayout();
this.SuspendLayout();
//
+ // panel1
+ //
+ this.panel1.Controls.Add(this.pictureBoxAi);
+ this.panel1.Controls.Add(this.panel2);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.panel1.Location = new System.Drawing.Point(0, 0);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(357, 136);
+ this.panel1.TabIndex = 0;
+ //
// pictureBoxAi
//
this.pictureBoxAi.Cursor = System.Windows.Forms.Cursors.Hand;
- this.pictureBoxAi.Image = global::ClearCache1C.Properties.Resources.ai_full_logo___clean;
- this.pictureBoxAi.InitialImage = global::ClearCache1C.Properties.Resources.ai_full_logo___clean;
- this.pictureBoxAi.Location = new System.Drawing.Point(12, 12);
+ this.pictureBoxAi.Image = global::ClearCache1C.Properties.Resources.ai_logo;
+ this.pictureBoxAi.InitialImage = null;
+ this.pictureBoxAi.Location = new System.Drawing.Point(4, 4);
this.pictureBoxAi.Name = "pictureBoxAi";
- this.pictureBoxAi.Size = new System.Drawing.Size(127, 119);
+ this.pictureBoxAi.Size = new System.Drawing.Size(142, 130);
this.pictureBoxAi.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBoxAi.TabIndex = 0;
this.pictureBoxAi.TabStop = false;
this.pictureBoxAi.Click += new System.EventHandler(this.pictureBoxAi_Click);
//
- // panel1
+ // panel2
//
- this.panel1.Controls.Add(this.textBoxInfo);
- this.panel1.Controls.Add(this.label1);
- this.panel1.Location = new System.Drawing.Point(147, 13);
- this.panel1.Name = "panel1";
- this.panel1.Size = new System.Drawing.Size(200, 118);
- this.panel1.TabIndex = 2;
+ this.panel2.Controls.Add(this.lInfo);
+ this.panel2.Controls.Add(this.labelVersion);
+ this.panel2.Controls.Add(this.label1);
+ this.panel2.Dock = System.Windows.Forms.DockStyle.Right;
+ this.panel2.Location = new System.Drawing.Point(152, 0);
+ this.panel2.Name = "panel2";
+ this.panel2.Size = new System.Drawing.Size(205, 136);
+ this.panel2.TabIndex = 1;
//
- // textBoxInfo
+ // lInfo
//
- this.textBoxInfo.BackColor = System.Drawing.SystemColors.Control;
- this.textBoxInfo.BorderStyle = System.Windows.Forms.BorderStyle.None;
- this.textBoxInfo.Cursor = System.Windows.Forms.Cursors.Default;
- this.textBoxInfo.Enabled = false;
- this.textBoxInfo.ForeColor = System.Drawing.SystemColors.WindowText;
- this.textBoxInfo.Location = new System.Drawing.Point(4, 28);
- this.textBoxInfo.Multiline = true;
- this.textBoxInfo.Name = "textBoxInfo";
- this.textBoxInfo.ReadOnly = true;
- this.textBoxInfo.Size = new System.Drawing.Size(193, 87);
- this.textBoxInfo.TabIndex = 2;
- this.textBoxInfo.TabStop = false;
- this.textBoxInfo.Text = "Все просто.\r\nПрограмма читает пользовательский файл ibases.v8i и на его основе ст" +
+ this.lInfo.Dock = System.Windows.Forms.DockStyle.Top;
+ this.lInfo.ForeColor = System.Drawing.Color.DimGray;
+ this.lInfo.Location = new System.Drawing.Point(0, 47);
+ this.lInfo.Name = "lInfo";
+ this.lInfo.Size = new System.Drawing.Size(205, 85);
+ this.lInfo.TabIndex = 1;
+ this.lInfo.Text = "Все просто.\r\nПрограмма читает пользовательский файл ibases.v8i и на его основе ст" +
"роит список баз.\r\nПо найденным ID и происходит вся магия удалений.";
+ this.lInfo.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // labelVersion
+ //
+ this.labelVersion.Dock = System.Windows.Forms.DockStyle.Top;
+ this.labelVersion.ForeColor = System.Drawing.Color.DarkRed;
+ this.labelVersion.Location = new System.Drawing.Point(0, 24);
+ this.labelVersion.Name = "labelVersion";
+ this.labelVersion.Size = new System.Drawing.Size(205, 23);
+ this.labelVersion.TabIndex = 3;
+ this.labelVersion.Text = "Версия: 1.0.0.0";
+ this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label1
//
- this.label1.AutoSize = true;
- this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
- this.label1.Location = new System.Drawing.Point(49, 12);
+ this.label1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label1.Location = new System.Drawing.Point(0, 0);
this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(103, 13);
- this.label1.TabIndex = 1;
- this.label1.Text = "Чистка кэша 1С";
- //
- // linkContact
- //
- this.linkContact.AutoSize = true;
- this.linkContact.LinkArea = new System.Windows.Forms.LinkArea(20, 15);
- this.linkContact.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
- this.linkContact.LinkColor = System.Drawing.SystemColors.HotTrack;
- this.linkContact.Location = new System.Drawing.Point(12, 134);
- this.linkContact.Name = "linkContact";
- this.linkContact.Size = new System.Drawing.Size(199, 17);
- this.linkContact.TabIndex = 6;
- this.linkContact.TabStop = true;
- this.linkContact.Text = "Автор: FuketsuBaka (ai@ai-frame.net)";
- this.linkContact.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.linkContact.UseCompatibleTextRendering = true;
- this.linkContact.VisitedLinkColor = System.Drawing.SystemColors.WindowFrame;
- this.linkContact.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkContact_LinkClicked);
+ this.label1.Size = new System.Drawing.Size(205, 24);
+ this.label1.TabIndex = 2;
+ this.label1.Text = "Чистка Кэша 1С";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// linkGit
//
- this.linkGit.AutoSize = true;
+ this.linkGit.Dock = System.Windows.Forms.DockStyle.Top;
this.linkGit.LinkArea = new System.Windows.Forms.LinkArea(5, 46);
- this.linkGit.LinkColor = System.Drawing.SystemColors.HotTrack;
- this.linkGit.Location = new System.Drawing.Point(12, 151);
+ this.linkGit.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
+ this.linkGit.LinkColor = System.Drawing.Color.DarkRed;
+ this.linkGit.Location = new System.Drawing.Point(0, 166);
this.linkGit.Name = "linkGit";
- this.linkGit.Size = new System.Drawing.Size(267, 17);
- this.linkGit.TabIndex = 7;
+ this.linkGit.Size = new System.Drawing.Size(357, 30);
+ this.linkGit.TabIndex = 2;
this.linkGit.TabStop = true;
this.linkGit.Text = "GIT: https://bitbucket.org/FuketsuBaka/clearcache1c";
this.linkGit.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@@ -122,26 +128,42 @@
this.linkGit.VisitedLinkColor = System.Drawing.SystemColors.WindowFrame;
this.linkGit.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkGit_LinkClicked);
//
- // label4
+ // linkContact
//
- this.label4.AutoSize = true;
- this.label4.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
- this.label4.Location = new System.Drawing.Point(149, 175);
- this.label4.Name = "label4";
- this.label4.Size = new System.Drawing.Size(42, 13);
- this.label4.TabIndex = 9;
- this.label4.Text = "2018 г.";
+ this.linkContact.Dock = System.Windows.Forms.DockStyle.Top;
+ this.linkContact.LinkArea = new System.Windows.Forms.LinkArea(20, 15);
+ this.linkContact.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
+ this.linkContact.LinkColor = System.Drawing.Color.DarkRed;
+ this.linkContact.Location = new System.Drawing.Point(0, 136);
+ this.linkContact.Name = "linkContact";
+ this.linkContact.Size = new System.Drawing.Size(357, 30);
+ this.linkContact.TabIndex = 3;
+ this.linkContact.TabStop = true;
+ this.linkContact.Text = "Автор: FuketsuBaka (ai@ai-frame.net)";
+ this.linkContact.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.linkContact.UseCompatibleTextRendering = true;
+ this.linkContact.VisitedLinkColor = System.Drawing.SystemColors.WindowFrame;
+ this.linkContact.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkContact_LinkClicked);
+ //
+ // labelYear
+ //
+ this.labelYear.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.labelYear.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
+ this.labelYear.Location = new System.Drawing.Point(0, 198);
+ this.labelYear.Name = "labelYear";
+ this.labelYear.Size = new System.Drawing.Size(357, 21);
+ this.labelYear.TabIndex = 4;
+ this.labelYear.Text = "-2018 г.-";
+ this.labelYear.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// FormAbout
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(356, 196);
- this.Controls.Add(this.label4);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.ClientSize = new System.Drawing.Size(357, 219);
+ this.Controls.Add(this.labelYear);
this.Controls.Add(this.linkGit);
this.Controls.Add(this.linkContact);
this.Controls.Add(this.panel1);
- this.Controls.Add(this.pictureBoxAi);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
@@ -150,23 +172,25 @@
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
- this.Text = "About";
- ((System.ComponentModel.ISupportInitialize)(this.pictureBoxAi)).EndInit();
+ this.Text = "О программе";
+ this.Load += new System.EventHandler(this.FormAbout_Load);
this.panel1.ResumeLayout(false);
- this.panel1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBoxAi)).EndInit();
+ this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
- this.PerformLayout();
}
#endregion
- private System.Windows.Forms.PictureBox pictureBoxAi;
private System.Windows.Forms.Panel panel1;
- private System.Windows.Forms.TextBox textBoxInfo;
+ private System.Windows.Forms.PictureBox pictureBoxAi;
+ private System.Windows.Forms.Label lInfo;
+ private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Label label1;
- private System.Windows.Forms.LinkLabel linkContact;
private System.Windows.Forms.LinkLabel linkGit;
- private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.LinkLabel linkContact;
+ private System.Windows.Forms.Label labelYear;
+ private System.Windows.Forms.Label labelVersion;
}
}
\ No newline at end of file
diff --git a/ClearCache1C/Form3.cs b/ClearCache1C/FormAbout.cs
similarity index 74%
rename from ClearCache1C/Form3.cs
rename to ClearCache1C/FormAbout.cs
index 7dcd03f..22c12f7 100644
--- a/ClearCache1C/Form3.cs
+++ b/ClearCache1C/FormAbout.cs
@@ -8,17 +8,26 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+// using
+using System.Reflection;
+using System.Diagnostics;
+
namespace ClearCache1C
{
public partial class FormAbout : Form
{
public FormAbout()
{
- StartPosition = FormStartPosition.CenterScreen;
InitializeComponent();
}
-
- private void LinkContact_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ private void FormAbout_Load(object sender, EventArgs e)
+ {
+ Assembly assembly = Assembly.GetExecutingAssembly();
+ FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
+ string version = fileVersionInfo.ProductVersion;
+ labelVersion.Text = "Версия: " + version;
+ }
+ private void linkContact_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
string url;
if (e.Link.LinkData != null)
@@ -47,7 +56,6 @@ namespace ClearCache1C
System.Diagnostics.Process.Start(url);
linkGit.LinkVisited = true;
}
-
private void pictureBoxAi_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("http://ai-frame.net/");
diff --git a/ClearCache1C/Form3.resx b/ClearCache1C/FormAbout.resx
similarity index 100%
rename from ClearCache1C/Form3.resx
rename to ClearCache1C/FormAbout.resx
diff --git a/ClearCache1C/FormMain.Designer.cs b/ClearCache1C/FormMain.Designer.cs
new file mode 100644
index 0000000..ebe73dd
--- /dev/null
+++ b/ClearCache1C/FormMain.Designer.cs
@@ -0,0 +1,460 @@
+namespace ClearCache1C
+{
+ partial class FormMain
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Освободить все используемые ресурсы.
+ ///
+ /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором форм Windows
+
+ ///
+ /// Требуемый метод для поддержки конструктора — не изменяйте
+ /// содержимое этого метода с помощью редактора кода.
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
+ this.BaseDataView = new System.Windows.Forms.DataGridView();
+ this.panBtnsBaseGrid = new System.Windows.Forms.Panel();
+ this.cbInfo = new System.Windows.Forms.CheckBox();
+ this.btnRefresh = new System.Windows.Forms.Button();
+ this.btnUnselect = new System.Windows.Forms.Button();
+ this.btnSelectAll = new System.Windows.Forms.Button();
+ this.btnSelectCache = new System.Windows.Forms.Button();
+ this.btnAbout = new System.Windows.Forms.Button();
+ this.panBtnsBaseSubmit = new System.Windows.Forms.Panel();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.cbOptSettingsUser = new System.Windows.Forms.CheckBox();
+ this.cbOptCacheProgram = new System.Windows.Forms.CheckBox();
+ this.cbOptCacheUser = new System.Windows.Forms.CheckBox();
+ this.cbOptAll = new System.Windows.Forms.CheckBox();
+ this.btnClear = new System.Windows.Forms.Button();
+ this.tbInfo = new System.Windows.Forms.TextBox();
+ this.panMain = new System.Windows.Forms.Panel();
+ this.splitMain = new System.Windows.Forms.SplitContainer();
+ this.panSearch = new System.Windows.Forms.Panel();
+ this.tbSearch = new System.Windows.Forms.TextBox();
+ this.lSearch = new System.Windows.Forms.Label();
+ this.btnDropSearch = new System.Windows.Forms.Button();
+ ((System.ComponentModel.ISupportInitialize)(this.BaseDataView)).BeginInit();
+ this.panBtnsBaseGrid.SuspendLayout();
+ this.panBtnsBaseSubmit.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.panMain.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitMain)).BeginInit();
+ this.splitMain.Panel1.SuspendLayout();
+ this.splitMain.Panel2.SuspendLayout();
+ this.splitMain.SuspendLayout();
+ this.panSearch.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // BaseDataView
+ //
+ this.BaseDataView.AllowUserToAddRows = false;
+ this.BaseDataView.AllowUserToDeleteRows = false;
+ this.BaseDataView.AllowUserToOrderColumns = true;
+ this.BaseDataView.AllowUserToResizeRows = false;
+ this.BaseDataView.BackgroundColor = System.Drawing.Color.White;
+ dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control;
+ dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.Yellow;
+ dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.Black;
+ dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.BaseDataView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4;
+ this.BaseDataView.ColumnHeadersHeight = 38;
+ this.BaseDataView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
+ this.BaseDataView.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.BaseDataView.GridColor = System.Drawing.Color.LightGray;
+ this.BaseDataView.Location = new System.Drawing.Point(0, 0);
+ this.BaseDataView.MinimumSize = new System.Drawing.Size(400, 0);
+ this.BaseDataView.Name = "BaseDataView";
+ this.BaseDataView.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
+ dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle5.BackColor = System.Drawing.Color.White;
+ dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle5.SelectionBackColor = System.Drawing.Color.LightYellow;
+ dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.ControlText;
+ dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.BaseDataView.RowHeadersDefaultCellStyle = dataGridViewCellStyle5;
+ this.BaseDataView.RowHeadersVisible = false;
+ this.BaseDataView.RowHeadersWidth = 20;
+ dataGridViewCellStyle6.SelectionBackColor = System.Drawing.Color.LightYellow;
+ dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.ControlText;
+ this.BaseDataView.RowsDefaultCellStyle = dataGridViewCellStyle6;
+ this.BaseDataView.RowTemplate.DefaultCellStyle.ForeColor = System.Drawing.Color.Black;
+ this.BaseDataView.RowTemplate.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.LightYellow;
+ this.BaseDataView.RowTemplate.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.Black;
+ this.BaseDataView.RowTemplate.Height = 18;
+ this.BaseDataView.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.BaseDataView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
+ this.BaseDataView.ShowEditingIcon = false;
+ this.BaseDataView.Size = new System.Drawing.Size(564, 411);
+ this.BaseDataView.TabIndex = 0;
+ //
+ // panBtnsBaseGrid
+ //
+ this.panBtnsBaseGrid.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.panBtnsBaseGrid.Controls.Add(this.cbInfo);
+ this.panBtnsBaseGrid.Controls.Add(this.btnRefresh);
+ this.panBtnsBaseGrid.Controls.Add(this.btnUnselect);
+ this.panBtnsBaseGrid.Controls.Add(this.btnSelectAll);
+ this.panBtnsBaseGrid.Controls.Add(this.btnSelectCache);
+ this.panBtnsBaseGrid.Dock = System.Windows.Forms.DockStyle.Top;
+ this.panBtnsBaseGrid.Location = new System.Drawing.Point(0, 0);
+ this.panBtnsBaseGrid.Name = "panBtnsBaseGrid";
+ this.panBtnsBaseGrid.Padding = new System.Windows.Forms.Padding(3, 3, 3, 0);
+ this.panBtnsBaseGrid.Size = new System.Drawing.Size(564, 35);
+ this.panBtnsBaseGrid.TabIndex = 4;
+ //
+ // cbInfo
+ //
+ this.cbInfo.Appearance = System.Windows.Forms.Appearance.Button;
+ this.cbInfo.Dock = System.Windows.Forms.DockStyle.Right;
+ this.cbInfo.FlatAppearance.BorderSize = 0;
+ this.cbInfo.FlatAppearance.CheckedBackColor = System.Drawing.SystemColors.ButtonFace;
+ this.cbInfo.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.ButtonHighlight;
+ this.cbInfo.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.ButtonHighlight;
+ this.cbInfo.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.cbInfo.Image = global::ClearCache1C.Properties.Resources.arrows_16_R;
+ this.cbInfo.Location = new System.Drawing.Point(534, 3);
+ this.cbInfo.Name = "cbInfo";
+ this.cbInfo.Size = new System.Drawing.Size(27, 32);
+ this.cbInfo.TabIndex = 7;
+ this.cbInfo.UseVisualStyleBackColor = true;
+ this.cbInfo.CheckedChanged += new System.EventHandler(this.CbInfo_CheckedChanged);
+ //
+ // btnRefresh
+ //
+ this.btnRefresh.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.btnRefresh.Dock = System.Windows.Forms.DockStyle.Left;
+ this.btnRefresh.FlatAppearance.BorderSize = 0;
+ this.btnRefresh.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.ButtonHighlight;
+ this.btnRefresh.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.ButtonHighlight;
+ this.btnRefresh.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btnRefresh.ForeColor = System.Drawing.SystemColors.ControlText;
+ this.btnRefresh.Image = global::ClearCache1C.Properties.Resources.icon_refresh_24;
+ this.btnRefresh.Location = new System.Drawing.Point(453, 3);
+ this.btnRefresh.Name = "btnRefresh";
+ this.btnRefresh.Size = new System.Drawing.Size(36, 32);
+ this.btnRefresh.TabIndex = 4;
+ this.btnRefresh.UseVisualStyleBackColor = true;
+ this.btnRefresh.Click += new System.EventHandler(this.BtnRefresh_Click);
+ //
+ // btnUnselect
+ //
+ this.btnUnselect.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.btnUnselect.Dock = System.Windows.Forms.DockStyle.Left;
+ this.btnUnselect.Image = ((System.Drawing.Image)(resources.GetObject("btnUnselect.Image")));
+ this.btnUnselect.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.btnUnselect.Location = new System.Drawing.Point(303, 3);
+ this.btnUnselect.Name = "btnUnselect";
+ this.btnUnselect.Size = new System.Drawing.Size(150, 32);
+ this.btnUnselect.TabIndex = 3;
+ this.btnUnselect.Text = "Снять выделение";
+ this.btnUnselect.UseVisualStyleBackColor = true;
+ this.btnUnselect.Click += new System.EventHandler(this.BtnUnselect_Click);
+ //
+ // btnSelectAll
+ //
+ this.btnSelectAll.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.btnSelectAll.Dock = System.Windows.Forms.DockStyle.Left;
+ this.btnSelectAll.Image = global::ClearCache1C.Properties.Resources.icon_select_16;
+ this.btnSelectAll.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.btnSelectAll.Location = new System.Drawing.Point(153, 3);
+ this.btnSelectAll.Name = "btnSelectAll";
+ this.btnSelectAll.Size = new System.Drawing.Size(150, 32);
+ this.btnSelectAll.TabIndex = 2;
+ this.btnSelectAll.Text = "Выделить все";
+ this.btnSelectAll.UseVisualStyleBackColor = true;
+ this.btnSelectAll.Click += new System.EventHandler(this.BtnSelectAll_Click);
+ //
+ // btnSelectCache
+ //
+ this.btnSelectCache.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.btnSelectCache.Dock = System.Windows.Forms.DockStyle.Left;
+ this.btnSelectCache.Image = global::ClearCache1C.Properties.Resources.icon_smart_select_16;
+ this.btnSelectCache.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.btnSelectCache.Location = new System.Drawing.Point(3, 3);
+ this.btnSelectCache.Name = "btnSelectCache";
+ this.btnSelectCache.Size = new System.Drawing.Size(150, 32);
+ this.btnSelectCache.TabIndex = 1;
+ this.btnSelectCache.Text = "Выделить с кэшем";
+ this.btnSelectCache.UseVisualStyleBackColor = true;
+ this.btnSelectCache.Click += new System.EventHandler(this.BtnSelectCache_Click);
+ //
+ // btnAbout
+ //
+ this.btnAbout.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.btnAbout.Dock = System.Windows.Forms.DockStyle.Right;
+ this.btnAbout.FlatAppearance.BorderSize = 0;
+ this.btnAbout.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.ButtonHighlight;
+ this.btnAbout.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.ButtonHighlight;
+ this.btnAbout.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btnAbout.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.btnAbout.ForeColor = System.Drawing.Color.DimGray;
+ this.btnAbout.Location = new System.Drawing.Point(514, 3);
+ this.btnAbout.Name = "btnAbout";
+ this.btnAbout.Size = new System.Drawing.Size(47, 48);
+ this.btnAbout.TabIndex = 14;
+ this.btnAbout.Text = "?";
+ this.btnAbout.UseVisualStyleBackColor = true;
+ this.btnAbout.Click += new System.EventHandler(this.BtnAbout_Click);
+ //
+ // panBtnsBaseSubmit
+ //
+ this.panBtnsBaseSubmit.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.panBtnsBaseSubmit.Controls.Add(this.panel1);
+ this.panBtnsBaseSubmit.Controls.Add(this.btnAbout);
+ this.panBtnsBaseSubmit.Controls.Add(this.cbOptAll);
+ this.panBtnsBaseSubmit.Controls.Add(this.btnClear);
+ this.panBtnsBaseSubmit.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.panBtnsBaseSubmit.Location = new System.Drawing.Point(0, 472);
+ this.panBtnsBaseSubmit.Name = "panBtnsBaseSubmit";
+ this.panBtnsBaseSubmit.Padding = new System.Windows.Forms.Padding(3);
+ this.panBtnsBaseSubmit.Size = new System.Drawing.Size(564, 54);
+ this.panBtnsBaseSubmit.TabIndex = 5;
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.cbOptSettingsUser);
+ this.panel1.Controls.Add(this.cbOptCacheProgram);
+ this.panel1.Controls.Add(this.cbOptCacheUser);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
+ this.panel1.Location = new System.Drawing.Point(283, 3);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(231, 48);
+ this.panel1.TabIndex = 8;
+ //
+ // cbOptSettingsUser
+ //
+ this.cbOptSettingsUser.Dock = System.Windows.Forms.DockStyle.Top;
+ this.cbOptSettingsUser.Location = new System.Drawing.Point(0, 34);
+ this.cbOptSettingsUser.Name = "cbOptSettingsUser";
+ this.cbOptSettingsUser.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
+ this.cbOptSettingsUser.Size = new System.Drawing.Size(231, 17);
+ this.cbOptSettingsUser.TabIndex = 13;
+ this.cbOptSettingsUser.Text = "Настройки пользователя";
+ this.cbOptSettingsUser.UseVisualStyleBackColor = true;
+ //
+ // cbOptCacheProgram
+ //
+ this.cbOptCacheProgram.Checked = true;
+ this.cbOptCacheProgram.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.cbOptCacheProgram.Dock = System.Windows.Forms.DockStyle.Top;
+ this.cbOptCacheProgram.Location = new System.Drawing.Point(0, 17);
+ this.cbOptCacheProgram.Name = "cbOptCacheProgram";
+ this.cbOptCacheProgram.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
+ this.cbOptCacheProgram.Size = new System.Drawing.Size(231, 17);
+ this.cbOptCacheProgram.TabIndex = 12;
+ this.cbOptCacheProgram.Text = "Кэш приложения";
+ this.cbOptCacheProgram.UseVisualStyleBackColor = true;
+ //
+ // cbOptCacheUser
+ //
+ this.cbOptCacheUser.Checked = true;
+ this.cbOptCacheUser.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.cbOptCacheUser.Dock = System.Windows.Forms.DockStyle.Top;
+ this.cbOptCacheUser.Location = new System.Drawing.Point(0, 0);
+ this.cbOptCacheUser.Name = "cbOptCacheUser";
+ this.cbOptCacheUser.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
+ this.cbOptCacheUser.Size = new System.Drawing.Size(231, 17);
+ this.cbOptCacheUser.TabIndex = 11;
+ this.cbOptCacheUser.Text = "Кэш пользователя";
+ this.cbOptCacheUser.UseVisualStyleBackColor = true;
+ //
+ // cbOptAll
+ //
+ this.cbOptAll.AutoSize = true;
+ this.cbOptAll.Dock = System.Windows.Forms.DockStyle.Left;
+ this.cbOptAll.Location = new System.Drawing.Point(223, 3);
+ this.cbOptAll.Name = "cbOptAll";
+ this.cbOptAll.Padding = new System.Windows.Forms.Padding(15, 0, 0, 0);
+ this.cbOptAll.Size = new System.Drawing.Size(60, 48);
+ this.cbOptAll.TabIndex = 10;
+ this.cbOptAll.Text = "Все";
+ this.cbOptAll.UseVisualStyleBackColor = true;
+ //
+ // btnClear
+ //
+ this.btnClear.Dock = System.Windows.Forms.DockStyle.Left;
+ this.btnClear.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.btnClear.Location = new System.Drawing.Point(3, 3);
+ this.btnClear.Name = "btnClear";
+ this.btnClear.Size = new System.Drawing.Size(220, 48);
+ this.btnClear.TabIndex = 9;
+ this.btnClear.Text = "Очистить";
+ this.btnClear.UseVisualStyleBackColor = true;
+ this.btnClear.Click += new System.EventHandler(this.BtnClear_Click);
+ //
+ // tbInfo
+ //
+ this.tbInfo.BackColor = System.Drawing.SystemColors.Info;
+ this.tbInfo.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tbInfo.Location = new System.Drawing.Point(0, 0);
+ this.tbInfo.MinimumSize = new System.Drawing.Size(400, 4);
+ this.tbInfo.Multiline = true;
+ this.tbInfo.Name = "tbInfo";
+ this.tbInfo.ReadOnly = true;
+ this.tbInfo.Size = new System.Drawing.Size(400, 100);
+ this.tbInfo.TabIndex = 6;
+ //
+ // panMain
+ //
+ this.panMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.panMain.Controls.Add(this.splitMain);
+ this.panMain.Controls.Add(this.panSearch);
+ this.panMain.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panMain.Location = new System.Drawing.Point(0, 35);
+ this.panMain.Name = "panMain";
+ this.panMain.Size = new System.Drawing.Size(564, 437);
+ this.panMain.TabIndex = 7;
+ //
+ // splitMain
+ //
+ this.splitMain.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitMain.Location = new System.Drawing.Point(0, 26);
+ this.splitMain.MinimumSize = new System.Drawing.Size(550, 0);
+ this.splitMain.Name = "splitMain";
+ //
+ // splitMain.Panel1
+ //
+ this.splitMain.Panel1.AutoScroll = true;
+ this.splitMain.Panel1.Controls.Add(this.BaseDataView);
+ //
+ // splitMain.Panel2
+ //
+ this.splitMain.Panel2.Controls.Add(this.tbInfo);
+ this.splitMain.Panel2Collapsed = true;
+ this.splitMain.Size = new System.Drawing.Size(564, 411);
+ this.splitMain.SplitterDistance = 282;
+ this.splitMain.SplitterWidth = 6;
+ this.splitMain.TabIndex = 7;
+ //
+ // panSearch
+ //
+ this.panSearch.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.panSearch.Controls.Add(this.tbSearch);
+ this.panSearch.Controls.Add(this.lSearch);
+ this.panSearch.Controls.Add(this.btnDropSearch);
+ this.panSearch.Dock = System.Windows.Forms.DockStyle.Top;
+ this.panSearch.Location = new System.Drawing.Point(0, 0);
+ this.panSearch.Name = "panSearch";
+ this.panSearch.Padding = new System.Windows.Forms.Padding(3);
+ this.panSearch.Size = new System.Drawing.Size(564, 26);
+ this.panSearch.TabIndex = 1;
+ //
+ // tbSearch
+ //
+ this.tbSearch.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tbSearch.Location = new System.Drawing.Point(48, 3);
+ this.tbSearch.Name = "tbSearch";
+ this.tbSearch.Size = new System.Drawing.Size(486, 20);
+ this.tbSearch.TabIndex = 5;
+ this.tbSearch.TextChanged += new System.EventHandler(this.TbSearch_TextChanged);
+ //
+ // lSearch
+ //
+ this.lSearch.Dock = System.Windows.Forms.DockStyle.Left;
+ this.lSearch.Location = new System.Drawing.Point(3, 3);
+ this.lSearch.Name = "lSearch";
+ this.lSearch.Size = new System.Drawing.Size(45, 20);
+ this.lSearch.TabIndex = 1;
+ this.lSearch.Text = "Поиск:";
+ this.lSearch.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // btnDropSearch
+ //
+ this.btnDropSearch.Dock = System.Windows.Forms.DockStyle.Right;
+ this.btnDropSearch.FlatAppearance.BorderSize = 0;
+ this.btnDropSearch.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.ButtonHighlight;
+ this.btnDropSearch.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.ButtonHighlight;
+ this.btnDropSearch.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btnDropSearch.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.btnDropSearch.Image = global::ClearCache1C.Properties.Resources.x_mark_16;
+ this.btnDropSearch.Location = new System.Drawing.Point(534, 3);
+ this.btnDropSearch.Name = "btnDropSearch";
+ this.btnDropSearch.Size = new System.Drawing.Size(27, 20);
+ this.btnDropSearch.TabIndex = 6;
+ this.btnDropSearch.UseVisualStyleBackColor = true;
+ this.btnDropSearch.Click += new System.EventHandler(this.BtnDropSearch_Click);
+ //
+ // FormMain
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(564, 526);
+ this.Controls.Add(this.panMain);
+ this.Controls.Add(this.panBtnsBaseSubmit);
+ this.Controls.Add(this.panBtnsBaseGrid);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.KeyPreview = true;
+ this.MinimumSize = new System.Drawing.Size(550, 39);
+ this.Name = "FormMain";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Чистка кэша 1C";
+ this.Load += new System.EventHandler(this.FormMain_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.BaseDataView)).EndInit();
+ this.panBtnsBaseGrid.ResumeLayout(false);
+ this.panBtnsBaseSubmit.ResumeLayout(false);
+ this.panBtnsBaseSubmit.PerformLayout();
+ this.panel1.ResumeLayout(false);
+ this.panMain.ResumeLayout(false);
+ this.splitMain.Panel1.ResumeLayout(false);
+ this.splitMain.Panel2.ResumeLayout(false);
+ this.splitMain.Panel2.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitMain)).EndInit();
+ this.splitMain.ResumeLayout(false);
+ this.panSearch.ResumeLayout(false);
+ this.panSearch.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.DataGridView BaseDataView;
+ private System.Windows.Forms.Button btnSelectCache;
+ private System.Windows.Forms.Button btnSelectAll;
+ private System.Windows.Forms.Button btnUnselect;
+ private System.Windows.Forms.Panel panBtnsBaseGrid;
+ private System.Windows.Forms.Panel panBtnsBaseSubmit;
+ private System.Windows.Forms.Button btnClear;
+ private System.Windows.Forms.CheckBox cbOptSettingsUser;
+ private System.Windows.Forms.CheckBox cbOptCacheProgram;
+ private System.Windows.Forms.CheckBox cbOptCacheUser;
+ private System.Windows.Forms.CheckBox cbOptAll;
+ private System.Windows.Forms.TextBox tbInfo;
+ private System.Windows.Forms.CheckBox cbInfo;
+ private System.Windows.Forms.Panel panMain;
+ private System.Windows.Forms.SplitContainer splitMain;
+ private System.Windows.Forms.Button btnRefresh;
+ private System.Windows.Forms.Panel panSearch;
+ private System.Windows.Forms.TextBox tbSearch;
+ private System.Windows.Forms.Label lSearch;
+ private System.Windows.Forms.Button btnDropSearch;
+ private System.Windows.Forms.Button btnAbout;
+ private System.Windows.Forms.Panel panel1;
+ }
+}
+
diff --git a/ClearCache1C/FormMain.cs b/ClearCache1C/FormMain.cs
new file mode 100644
index 0000000..30973c0
--- /dev/null
+++ b/ClearCache1C/FormMain.cs
@@ -0,0 +1,805 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+// Using
+using System.IO;
+
+namespace ClearCache1C
+{
+ public partial class FormMain : Form
+ {
+ // *********************************************************************************************
+ // LVARS START
+ // Data table
+ private BaseData baseData;
+ private string[] V8iContent;
+ // LVARS END
+ // *********************************************************************************************
+
+ // *********************************************************************************************
+ // TABLE INIT START
+ private void InitDataTable()
+ {
+ baseData = new BaseData();
+ }
+ private void InitDataGridView()
+ {
+ //BindingSource bs = new BindingSource();
+ //bs.DataSource = BaseData;
+ BaseDataView.DataSource = baseData.dataTable;
+ BaseDataView.Columns[baseData.col_Index.ColumnName].Visible = false;
+ BaseDataView.Columns[baseData.col_Id.ColumnName].Visible = false;
+ BaseDataView.Columns[baseData.col_ConnectString.ColumnName].Visible = false;
+ BaseDataView.Columns[baseData.col_LastEnteredUser.ColumnName].Visible = false;
+
+ // Formatting
+ BaseDataView.Columns[baseData.col_SizeCacheUser.ColumnName].DefaultCellStyle.Format = "0.00";
+ BaseDataView.Columns[baseData.col_SizeCacheProgram.ColumnName].DefaultCellStyle.Format = "0.00";
+ BaseDataView.Columns[baseData.col_SizeTotal.ColumnName].DefaultCellStyle.Format = "0.00";
+
+ // Columns formating
+ BaseDataView.Columns[baseData.col_Check.ColumnName].Width = 22;
+ BaseDataView.Columns[baseData.col_Check.ColumnName].ToolTipText = "Выбрано.";
+
+ BaseDataView.Columns[baseData.col_Locked.ColumnName].Visible = false;
+ BaseDataView.Columns[baseData.col_Locked.ColumnName].Width = 22;
+ BaseDataView.Columns[baseData.col_Locked.ColumnName].ToolTipText = "Заблокировано.";
+
+ BaseDataView.Columns[baseData.col_BaseName.ColumnName].Width = 200;
+ BaseDataView.Columns[baseData.col_SizeCacheUser.ColumnName].Width = 55;
+ BaseDataView.Columns[baseData.col_SizeCacheProgram.ColumnName].Width = 55;
+ BaseDataView.Columns[baseData.col_SizeTotal.ColumnName].Width = 55;
+
+ // Events handling
+ BaseDataView.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.BaseDataView_CellFormatting);
+ BaseDataView.CellPainting += new DataGridViewCellPaintingEventHandler(this.BaseDataView_CellPainting);
+ //deprecated
+ //BaseDataView.CellValueChanged += new DataGridViewCellEventHandler(this.BaseDataView_ValueChanged);
+ BaseDataView.CellClick += new DataGridViewCellEventHandler(this.BaseDataView_CellClick);
+ }
+
+ private void ReadV8iFile()
+ {
+ string PathV8i = @"%appdata%\1C\1CEStart\ibases.v8i";
+ V8iContent = ReadFileContent(PathV8i);
+ if (V8iContent is null)
+ {
+ MessageBox.Show("Не удалось найти файл ibases.v8i по указанному пути: " + PathV8i, "Ошибка чтения файла!",
+ MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ private void LoadBasesToData()
+ {
+ // In case we are doing a reload
+ baseData.dataTable.Rows.Clear();
+ // Check if we have any source to work with
+ if (V8iContent is null)
+ return;
+ // Fill Data
+ int i = 0;
+ var baseRow = new BaseRow();
+ foreach (string line in V8iContent)
+ {
+ /* ---------- EXAMPLE
+ [Торговля(Рабочая)]
+ Connect=Srvr="winserv";Ref="ut2014_work";
+ ID=f8370086-654e-4807-b79b-3f51653c3699
+ OrderInList = 0
+ Folder=/Рабочие
+ OrderInTree = 0
+ External=1
+ ClientConnectionSpeed=Normal
+ App = Auto
+ WA=1
+ Version=8.2
+ DefaultApp=ThickClient
+ -------------------- */
+ if (line.StartsWith("[")) // Start
+ {
+ baseRow.Name = line.Substring(1, line.Length - 2);
+ baseRow.Id = "";
+ baseRow.ConnectString = "";
+ }
+ else if (line.StartsWith("Connect=")) // Connect string
+ {
+ baseRow.ConnectString = line.Substring(8);
+ }
+ else if (line.StartsWith("ID=")) // ID string
+ {
+ baseRow.Id = line.Substring(3);
+ }
+ if (baseRow.Ready)
+ {
+ baseRow.Index = i;
+
+ baseRow.FillSizesInRow();
+ baseRow.GetLockedAndUserInfo();
+
+ object[] row = { baseRow.Check, baseRow.Locked,
+ baseRow.Index, baseRow.Id, baseRow.Name, baseRow.ConnectString, baseRow.LastEnteredUser,
+ baseRow.SizeCacheUser,
+ baseRow.SizeCacheProgram,
+ baseRow.SizeTotal };
+ baseData.dataTable.Rows.Add(row);
+ // Clear
+ baseRow = new BaseRow();
+ baseRow.Check = false;
+ i++;
+ }
+ }
+ }
+ // TABLE INIT END
+ // *********************************************************************************************
+
+ // *********************************************************************************************
+ // EVENTS START
+ public FormMain()
+ {
+ InitializeComponent();
+
+ //Create DataTable with needed columns
+ InitDataTable();
+ InitDataGridView();
+ // Read file into string[] collection
+ ReadV8iFile();
+ // Register keypressed event
+ KeyPress += new KeyPressEventHandler(Control_KeyPressed);
+ // CheckBoxes change
+ cbOptAll.CheckedChanged += new System.EventHandler(this.CbOptClear_CheckedChanged);
+ cbOptCacheUser.CheckedChanged += new System.EventHandler(this.CbOptClear_CheckedChanged);
+ cbOptCacheProgram.CheckedChanged += new System.EventHandler(this.CbOptClear_CheckedChanged);
+ cbOptSettingsUser.CheckedChanged += new System.EventHandler(this.CbOptClear_CheckedChanged);
+ SetToolTips();
+ }
+ private void FormMain_Load(object sender, EventArgs e)
+ {
+ LoadBasesToData();
+ //ToggleInfoView();
+ }
+ private void BaseDataView_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
+ {
+ if (BaseDataView.Columns[e.ColumnIndex].DefaultCellStyle.Format.Equals("0.00"))
+ if (e.Value.ToString().Equals("0"))
+ e.CellStyle.Format = "#.##";
+ }
+ /*
+ private void BaseDataView_ValueChanged(object sender, DataGridViewCellEventArgs e)
+ {
+ if (BaseDataView.Rows[e.RowIndex].DefaultCellStyle.BackColor == Color.LightCoral)
+ return;
+
+ bool isChecked = Convert.ToBoolean(BaseDataView.Rows[e.RowIndex].Cells[baseData.col_Check.ColumnName].Value);
+
+ if (isChecked)
+ BaseDataView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.PaleGreen;
+ else
+ BaseDataView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
+ }
+ */
+ private void BaseDataView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
+ {
+ if(e.RowIndex >= 0)
+ {
+ bool isLocked = Convert.ToBoolean(BaseDataView.Rows[e.RowIndex].Cells[baseData.col_Locked.ColumnName].Value);
+ if (isLocked)
+ {
+ BaseDataView.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.DarkRed;
+ //BaseDataView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.MistyRose;
+ BaseDataView.Rows[e.RowIndex].DefaultCellStyle.SelectionBackColor = Color.MistyRose;
+ }
+
+ bool isChecked = Convert.ToBoolean(BaseDataView.Rows[e.RowIndex].Cells[baseData.col_Check.ColumnName].Value);
+ if (isChecked && !isLocked)
+ BaseDataView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.PaleGreen;
+ else if (!isLocked)
+ BaseDataView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
+ }
+ }
+ private void BaseDataView_CellClick(object sender, DataGridViewCellEventArgs e)
+ {
+ if (e.RowIndex >= 0)
+ ShowRowInfo();
+ }
+ private void Control_KeyPressed(object sender, KeyPressEventArgs e)
+ {
+ if (tbSearch.Focused)
+ return;
+ // toggle selection in datagrid on spacebar
+ if (e.KeyChar == ' ')
+ BaseDataView.Focus();
+ ToggleCheck_Selected();
+ }
+ private void BtnRefresh_Click(object sender, EventArgs e)
+ {
+ BaseDataView_Refresh();
+ }
+ private void BtnSelectCache_Click(object sender, EventArgs e)
+ {
+ ToggleCheck(true, true);
+ }
+
+ private void BtnSelectAll_Click(object sender, EventArgs e)
+ {
+ ToggleCheck(true, false);
+ }
+
+ private void BtnUnselect_Click(object sender, EventArgs e)
+ {
+ ToggleCheck(false, false);
+ }
+
+ // Toggle InfoView
+ private void CbInfo_CheckedChanged(object sender, EventArgs e)
+ {
+ ToggleInfoView();
+ }
+
+ // CheckBoxes
+ private void CbOptClear_CheckedChanged(object sender, EventArgs e)
+ {
+ if (!cbOptAll.Checked && cbOptCacheUser.Checked && cbOptCacheProgram.Checked && cbOptSettingsUser.Checked)
+ {
+ cbOptAll.Checked = true;
+ cbOptCacheUser.Checked = false;
+ cbOptCacheProgram.Checked = false;
+ cbOptSettingsUser.Checked = false;
+ }
+
+ cbOptCacheUser.Enabled = !cbOptAll.Checked;
+ cbOptCacheProgram.Enabled = !cbOptAll.Checked;
+ cbOptSettingsUser.Enabled = !cbOptAll.Checked;
+ }
+ // Search field
+ private void TbSearch_TextChanged(object sender, EventArgs e)
+ {
+ Searh_ApplyFilter();
+ }
+ private void BtnDropSearch_Click(object sender, EventArgs e)
+ {
+ tbSearch.Text = "";
+ Searh_ApplyFilter();
+ }
+
+ // About
+ private void BtnAbout_Click(object sender, EventArgs e)
+ {
+ FormAbout aboutForm = new FormAbout();
+ aboutForm.ShowDialog();
+ }
+
+ // Button Clear Cache
+ private void BtnClear_Click(object sender, EventArgs e)
+ {
+ StartClear();
+ }
+ // EVENTS END
+ // *********************************************************************************************
+
+ // *********************************************************************************************
+ // CLASSES START
+ class BaseData
+ {
+ public DataTable dataTable;
+ public DataColumn col_Check;
+ public DataColumn col_Locked;
+ public DataColumn col_Index;
+ public DataColumn col_Id;
+ public DataColumn col_BaseName;
+ public DataColumn col_ConnectString;
+ public DataColumn col_LastEnteredUser;
+ public DataColumn col_SizeCacheUser;
+ public DataColumn col_SizeCacheProgram;
+ public DataColumn col_SizeTotal;
+ public BaseData()
+ {
+ this.dataTable = new DataTable();
+
+ this.col_Check = new DataColumn("В.", typeof(Boolean));
+ this.col_Check.ReadOnly = false;
+ this.col_Locked = new DataColumn("З.", typeof(Boolean));
+ this.col_Locked.ReadOnly = true;
+
+ // String columns
+ this.col_Index = new DataColumn("#", typeof(Int32));
+ this.col_Index.ReadOnly = true;
+ this.col_Id = new DataColumn("ID", typeof(String));
+ this.col_Id.ReadOnly = true;
+ this.col_BaseName = new DataColumn("Наименование базы данных", typeof(String));
+ this.col_BaseName.ReadOnly = true;
+ this.col_ConnectString = new DataColumn("Строка подключения", typeof(String));
+ this.col_ConnectString.ReadOnly = true;
+ this.col_LastEnteredUser = new DataColumn("LastUser", typeof(String));
+ this.col_LastEnteredUser.ReadOnly = true;
+ // Numeric columns
+ this.col_SizeCacheUser = new DataColumn("Кэш пользов.", typeof(Decimal));
+ this.col_SizeCacheUser.ReadOnly = true;
+ this.col_SizeCacheProgram = new DataColumn("Кэш прилож.", typeof(Decimal));
+ this.col_SizeCacheProgram.ReadOnly = true;
+ this.col_SizeTotal = new DataColumn("Всего", typeof(Decimal));
+ this.col_SizeTotal.ReadOnly = true;
+
+
+ DataColumn[] dataColumns = {
+ col_Check,
+ col_Locked,
+ col_Index,
+ col_Id,
+ col_BaseName,
+ col_ConnectString,
+ col_LastEnteredUser,
+ col_SizeCacheUser,
+ col_SizeCacheProgram,
+ col_SizeTotal
+ };
+ this.dataTable.Columns.AddRange(dataColumns);
+ }
+ }
+ class BaseRow
+ {
+ public bool Check;
+ public bool Locked;
+ public int Index;
+ public string Name;
+ public string Id;
+ public string ConnectString;
+ public string LastEnteredUser;
+ public decimal SizeCacheProgram;
+ public decimal SizeCacheUser;
+ public decimal SizeTotal;
+
+ // for separate usage
+ public List rootFolders;
+ public List localCacheFolders;
+ public List userCacheFolders;
+
+ public bool Ready => (!String.IsNullOrEmpty(this.Name) && !String.IsNullOrEmpty(this.Id) && !String.IsNullOrEmpty(this.ConnectString));
+
+ public void FillSizesInRow()
+ {
+ string basePathLocal = Environment.ExpandEnvironmentVariables(@"%LOCALAPPDATA%\1C\1cv8\" + this.Id);
+ string basePathRoaming = Environment.ExpandEnvironmentVariables(@"%APPDATA%\1C\1cv8\" + this.Id);
+ this.rootFolders = new List();
+ this.localCacheFolders = new List();
+ this.userCacheFolders = new List();
+ if (Directory.Exists(basePathLocal))
+ {
+ rootFolders.Add(basePathLocal);
+ string[] filterSearch = { "Config", "ConfigSave", "SICache", "vrs-cache" };
+ localCacheFolders.AddRange(GetFoldersById(basePathLocal, filterSearch));
+ if (localCacheFolders.Count() > 0)
+ foreach (string _Path in localCacheFolders)
+ this.SizeCacheProgram += DirSize(new DirectoryInfo(_Path), "");
+ }
+ if (Directory.Exists(basePathRoaming))
+ {
+ rootFolders.Add(basePathRoaming);
+ string[] filterSearch = { "vrs-cache" };
+ userCacheFolders.AddRange(GetFoldersById(basePathRoaming, filterSearch));
+ if (userCacheFolders.Count() > 0)
+ foreach (string _Path in userCacheFolders)
+ this.SizeCacheUser += DirSize(new DirectoryInfo(_Path), "");
+ }
+ this.SizeTotal += DirSize(new DirectoryInfo(basePathLocal), "");
+ this.SizeTotal += DirSize(new DirectoryInfo(basePathRoaming), "");
+
+ // Format to Mb
+ this.SizeCacheProgram = this.SizeCacheProgram / 1024 / 1024;
+ this.SizeCacheUser = this.SizeCacheUser / 1024 / 1024;
+ this.SizeTotal = this.SizeTotal / 1024 / 1024;
+ }
+ public void GetLockedAndUserInfo()
+ {
+ string basePathRoaming = Environment.ExpandEnvironmentVariables(@"%APPDATA%\1C\1cv8\" + this.Id);
+ if (Directory.Exists(basePathRoaming))
+ {
+ // Locked then file exists (1Cv8.lck)
+ this.Locked = File.Exists(basePathRoaming + "\\1Cv8.lck");
+ // Last entered user info (def.usr)
+ this.LastEnteredUser = "";
+ if (File.Exists(basePathRoaming + "\\def.usr"))
+ {
+ string[] lines = ReadFileContent(basePathRoaming + "\\def.usr");
+ if (lines != null)
+ if (lines.Count() > 0)
+ this.LastEnteredUser = lines[0].Substring(2, lines[0].Length - 4);
+ }
+ }
+ }
+ private string[] GetFoldersById(string _Path, string[] _Filter)
+ {
+ List foundFolders = new List();
+ foreach (string f in _Filter)
+ {
+ foundFolders.AddRange(Directory.GetDirectories(_Path, f, SearchOption.AllDirectories).ToList());
+ }
+ return foundFolders.ToArray();
+ }
+ }
+ class DeleteResults
+ {
+ public bool isError;
+ public double sizeDeleted;
+ public List listErrors;
+ }
+ // CLASSES END
+ // *********************************************************************************************
+
+ // *********************************************************************************************
+ // CLEAR START
+ private void StartClear()
+ {
+ var checkedRows = from DataGridViewRow row in BaseDataView.Rows
+ where Convert.ToBoolean(row.Cells[baseData.col_Check.ColumnName].Value) == true
+ select row;
+ if (checkedRows.Count() == 0)
+ {
+ MessageBox.Show("Ничего не выбрано.", "Meh...", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
+ return;
+ }
+ if (!cbOptAll.Checked && !cbOptCacheUser.Checked && !cbOptCacheProgram.Checked && !cbOptSettingsUser.Checked)
+ {
+ MessageBox.Show("Не указано, что очищать.", "Meh...", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
+ return;
+ }
+
+ if(cbOptAll.Checked || cbOptSettingsUser.Checked)
+ {
+ DialogResult dialogResult = MessageBox.Show("Это удалит все локальные настройки пользователя в выбранных базах. \r\nВы уверены, что хотите этого?", "Внимание!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
+ if (dialogResult != DialogResult.Yes)
+ return;
+ }
+
+ int successfullyDeleted = 0;
+ int errorsOnDelete = 0;
+ double totalSizeDeleted = 0;
+
+ List listSuccess = new List();
+ List listError = new List();
+ List listExceptions = new List();
+
+ foreach (DataGridViewRow row in checkedRows)
+ {
+ BaseRow baseRow = new BaseRow();
+ baseRow.Id = row.Cells[baseData.col_Id.ColumnName].Value.ToString();
+ baseRow.Name = row.Cells[baseData.col_BaseName.ColumnName].Value.ToString();
+ baseRow.ConnectString = row.Cells[baseData.col_ConnectString.ColumnName].Value.ToString();
+
+ baseRow.FillSizesInRow();
+ baseRow.GetLockedAndUserInfo();
+
+ if (cbOptAll.Checked) // Delete All
+ {
+ DeleteResults deleteResults = DeleteFoldersContent(baseRow.rootFolders, "");
+ if (!deleteResults.isError)
+ {
+ successfullyDeleted++;
+ listSuccess.Add("[Полное] - " + baseRow.Name);
+ }
+ else
+ {
+ errorsOnDelete++;
+ listError.Add("[Полное] - " + baseRow.Name);
+ listExceptions.AddRange(deleteResults.listErrors);
+ }
+ totalSizeDeleted += deleteResults.sizeDeleted;
+ }
+ else
+ {
+ if (cbOptCacheProgram.Checked) // Delete ProgramCache
+ {
+ DeleteResults deleteResults = DeleteFoldersContent(baseRow.localCacheFolders, "");
+ if (!deleteResults.isError)
+ {
+ successfullyDeleted++;
+ listSuccess.Add("[Кэш приложения] - " + baseRow.Name);
+ }
+ else
+ {
+ errorsOnDelete++;
+ listError.Add("[Кэш приложения] - " + baseRow.Name);
+ listExceptions.AddRange(deleteResults.listErrors);
+ }
+ totalSizeDeleted += deleteResults.sizeDeleted;
+ }
+ if (cbOptCacheUser.Checked) // Delete UserCache
+ {
+ DeleteResults deleteResults = DeleteFoldersContent(baseRow.userCacheFolders, "");
+ if (!deleteResults.isError)
+ {
+ successfullyDeleted++;
+ listSuccess.Add("[Кэш пользователя] - " + baseRow.Name);
+ }
+ else
+ {
+ errorsOnDelete++;
+ listError.Add("[Кэш пользователя] - " + baseRow.Name);
+ listExceptions.AddRange(deleteResults.listErrors);
+ }
+ totalSizeDeleted += deleteResults.sizeDeleted;
+ }
+ if (cbOptSettingsUser.Checked) // Delete UserSettings
+ {
+ DeleteResults deleteResults = DeleteFoldersContent(baseRow.rootFolders, "*.pfl");
+ if (!deleteResults.isError)
+ {
+ successfullyDeleted++;
+ listSuccess.Add("[Настройки пользователя] - " + baseRow.Name);
+ }
+ else
+ {
+ errorsOnDelete++;
+ listError.Add("[Настройки пользователя] - " + baseRow.Name);
+ listExceptions.AddRange(deleteResults.listErrors);
+ }
+ totalSizeDeleted += deleteResults.sizeDeleted;
+ }
+ }
+ }
+
+ // Show results of operation
+ FormResults resultForm = new FormResults();
+ resultForm.SetResults(successfullyDeleted, errorsOnDelete, totalSizeDeleted,
+ listSuccess, listError, listExceptions);
+ resultForm.ShowDialog();
+
+ BaseDataView_Refresh();
+ }
+
+ private DeleteResults DeleteFoldersContent(List ListOfFolders, string filterMask)
+ {
+ DeleteResults deleteResults = new DeleteResults();
+
+ deleteResults.isError = false;
+ deleteResults.sizeDeleted = 0;
+ deleteResults.listErrors = new List();
+ foreach (string folderPath in ListOfFolders)
+ {
+ double folderSize = Convert.ToDouble(DirSize(new DirectoryInfo(folderPath), filterMask));
+
+ if (filterMask.Equals("")) // Clear by dirs
+ {
+ try
+ {
+ Directory.Delete(folderPath, true);
+ deleteResults.sizeDeleted += folderSize;
+ }
+ catch (Exception e)
+ {
+ deleteResults.isError = true;
+ deleteResults.listErrors.Add(e.Message);
+ }
+ }
+ else // Clear by Files
+ {
+ var filesFound = Directory.EnumerateFiles(folderPath, filterMask, SearchOption.AllDirectories);
+ foreach (var fi in filesFound)
+ {
+ try
+ {
+ new FileInfo(fi).Delete();
+ deleteResults.sizeDeleted += folderSize;
+ }
+ catch (Exception e)
+ {
+ deleteResults.isError = true;
+ deleteResults.listErrors.Add(e.Message);
+ }
+ }
+ }
+ }
+
+ deleteResults.sizeDeleted = deleteResults.sizeDeleted / 1024 / 1024;
+ return deleteResults;
+ }
+
+ // CLEAR END
+ // *********************************************************************************************
+
+ private void Searh_ApplyFilter()
+ {
+ try
+ {
+ string queryString = String.Format("[{1}] LIKE '%{0}%' OR [{2}] LIKE '%{0}%'",
+ EscapeLikeValue(tbSearch.Text), baseData.col_BaseName.ColumnName, baseData.col_ConnectString.ColumnName);
+ baseData.dataTable.DefaultView.RowFilter = queryString;
+ }
+ catch { };
+ }
+ private void ToggleInfoView()
+ {
+ int currentSize = Size.Width;
+ int expandWidth = new int[] { tbInfo.MinimumSize.Width, tbInfo.Size.Width }.Max() + 20;
+ int collpaseWidth = splitMain.SplitterDistance + splitMain.SplitterWidth;
+
+ splitMain.Panel2Collapsed = !cbInfo.Checked;
+ cbInfo.Image = cbInfo.Checked ? Properties.Resources.arrows_16_L: Properties.Resources.arrows_16_R;
+
+ int widthInfo = tbInfo.Size.Width;
+ // Adapt sizing
+ if (WindowState != FormWindowState.Maximized)
+ {
+ if(cbInfo.Checked) // Show
+ {
+ Size = new System.Drawing.Size(currentSize + expandWidth, Size.Height);
+ splitMain.SplitterDistance = currentSize - splitMain.SplitterWidth;
+ ShowRowInfo();
+ }
+ else // Hide
+ {
+ Size = new System.Drawing.Size(collpaseWidth, Size.Height);
+ }
+ }
+ }
+ private void ShowRowInfo()
+ {
+ if (splitMain.Panel2Collapsed)
+ return;
+
+ DataGridViewRow row = BaseDataView.CurrentRow;
+
+ tbInfo.ResetText();
+ if (row is null)
+ return;
+ BaseRow baseRow = new BaseRow();
+ baseRow.Id = row.Cells[baseData.col_Id.ColumnName].Value.ToString();
+ baseRow.FillSizesInRow();
+ baseRow.GetLockedAndUserInfo();
+
+ tbInfo.AppendText("--- Информация о базе ---");
+ tbInfo.AppendText("\r\nИмя: " + row.Cells[baseData.col_BaseName.ColumnName].Value);
+ tbInfo.AppendText("\r\nID: " + row.Cells[baseData.col_Id.ColumnName].Value);
+ tbInfo.AppendText("\r\nСтрока подключения: " + row.Cells[baseData.col_ConnectString.ColumnName].Value);
+
+ tbInfo.AppendText("\r\n");
+ tbInfo.AppendText("\r\nЗаблокировано (база открыта?): " + (baseRow.Locked ? "Да" : "Нет"));
+ tbInfo.AppendText("\r\nИмя пользователя при входе: " + (String.IsNullOrEmpty(baseRow.LastEnteredUser) ? "нет данных" : baseRow.LastEnteredUser));
+
+ double _SizeCacheUser = Convert.ToDouble(row.Cells[baseData.col_SizeCacheUser.ColumnName].Value);
+ double _SizeCacheProgram = Convert.ToDouble(row.Cells[baseData.col_SizeCacheProgram.ColumnName].Value);
+ double _SizeTotal = Convert.ToDouble(row.Cells[baseData.col_SizeTotal.ColumnName].Value);
+ tbInfo.AppendText("\r\n");
+ tbInfo.AppendText("\r\nКэш пользователя: " + baseRow.SizeCacheUser.ToString("0.00") + " Mb");
+ tbInfo.AppendText("\r\nКэш приложения: " + baseRow.SizeCacheProgram.ToString("0.00") + " Mb");
+ tbInfo.AppendText("\r\nРазмер всего: " + baseRow.SizeTotal.ToString("0.00") + " Mb");
+
+ tbInfo.AppendText("\r\n");
+ tbInfo.AppendText("\r\nКорневые каталоги: ");
+ foreach (string s in baseRow.rootFolders)
+ tbInfo.AppendText("\r\n > " + s);
+
+ tbInfo.AppendText("\r\n");
+ tbInfo.AppendText("\r\nКаталоги кэша приложения: ");
+ foreach (string s in baseRow.localCacheFolders)
+ tbInfo.AppendText("\r\n > " + s);
+
+ tbInfo.AppendText("\r\n");
+ tbInfo.AppendText("\r\nКаталоги кэша пользователя: ");
+ foreach (string s in baseRow.userCacheFolders)
+ tbInfo.AppendText("\r\n > " + s);
+
+ tbInfo.AppendText("\r\n");
+ }
+ private void BaseDataView_Refresh()
+ {
+ ReadV8iFile();
+ LoadBasesToData();
+ ShowRowInfo();
+ }
+ private static string[] ReadFileContent(string pathToFile)
+ {
+ string fullPathToFile = Environment.ExpandEnvironmentVariables(pathToFile);
+ if (!File.Exists(fullPathToFile))
+ {
+ return null;
+ }
+ return System.IO.File.ReadAllLines(fullPathToFile);
+ }
+ private static long DirSize(DirectoryInfo d, string filterMask)
+ {
+ long size = 0;
+ if (filterMask.Equals(""))
+ filterMask = "*.*";
+ // Add file sizes.
+ if (!Directory.Exists(d.FullName))
+ return size;
+ var filesFound = Directory.EnumerateFiles(d.FullName, filterMask, SearchOption.AllDirectories);
+ foreach (var fi in filesFound)
+ size += new FileInfo(fi).Length;
+ /*
+ FileInfo[] fis = d.GetFiles();
+ foreach (FileInfo fi in fis)
+ {
+ size += fi.Length;
+ }
+ // Add subdirectory sizes.
+ DirectoryInfo[] dis = d.GetDirectories();
+ foreach (DirectoryInfo di in dis)
+ {
+ size += DirSize(di, filterMask);
+ }
+ */
+ return size;
+ }
+ private void ToggleCheck(bool checkState, bool cacheOnly)
+ {
+ foreach (DataGridViewRow row in BaseDataView.Rows)
+ {
+ if (checkState && cacheOnly) // Select only cache
+ row.Cells[baseData.col_Check.ColumnName].Value = Convert.ToDecimal(row.Cells[baseData.col_SizeCacheUser.ColumnName].Value) > 0;
+ else if (!cacheOnly) // Select/deselect all
+ row.Cells[baseData.col_Check.ColumnName].Value = checkState;
+ }
+ }
+ private void ToggleCheck_Selected()
+ {
+ var selectedRows = BaseDataView.SelectedRows;
+ bool nextState = true;
+ // Check the number of Cheked rows. If equals all - uncheck them
+ int checkedRows = 0;
+ foreach (DataGridViewRow row in selectedRows)
+ if (Convert.ToBoolean(row.Cells[baseData.col_Check.ColumnName].Value))
+ checkedRows++;
+ if (checkedRows == selectedRows.Count)
+ nextState = false;
+ // do the stuff
+ foreach (DataGridViewRow row in selectedRows)
+ row.Cells[baseData.col_Check.ColumnName].Value = nextState;
+ }
+ private static string EscapeLikeValue(string valueWithoutWildcards)
+ {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < valueWithoutWildcards.Length; i++)
+ {
+ char c = valueWithoutWildcards[i];
+ if (c == '*' || c == '%' || c == '[' || c == ']')
+ sb.Append("[").Append(c).Append("]");
+ else if (c == '\'')
+ sb.Append("''");
+ else
+ sb.Append(c);
+ }
+ return sb.ToString();
+ }
+ private void SetToolTips()
+ {
+ ToolTip toolTip = new ToolTip();
+
+ string ClearCacheUser_ToolTip = "Для выбранных баз - удаляет только файлы кэша пользователя.\r\nПользовательские настройки сохраняются.";
+ string ClearCacheProgram_ToolTip = "Для выбранных баз - удаляет только файлы кэша приложения.\r\nПользовательские настройки сохраняются.";
+ string ClearSettingsUser_ToolTip = "Для выбранных баз - удаляет только файлы настроек пользователя.\r\nФайлы кэша сохраняются.";
+ string PurgeAll_ToolTip = "Для выбранных баз - удаляет все найденные в корневых каталогах файлы.\r\nПользовательские настройки будут удалены.";
+ string SmartSelect_ToolTip = "Выбрать только базы, в которых есть локальный кэш пользователя.";
+ string SelectAll_ToolTip = "Выбрать все базы в списке.";
+ string RemoveSelection_ToolTip = "Убрать выбор со всех баз в списке.";
+
+ string Search_ToolTip = "Поиск по совпадению в имени базы или в строке подключения.";
+ string DropSearch_ToolTip = "Сбросить поиск.";
+ string Refresh_ToolTip = "Перезаполнить список баз.";
+ string Expand_ToolTip = "Показать\\Скрыть окно информации о выделенной строке.";
+
+ string About_ToolTip = "О программе...";
+
+ toolTip.SetToolTip(cbOptCacheUser, ClearCacheUser_ToolTip);
+ toolTip.SetToolTip(cbOptCacheProgram, ClearCacheProgram_ToolTip);
+ toolTip.SetToolTip(cbOptSettingsUser, ClearSettingsUser_ToolTip);
+ toolTip.SetToolTip(cbOptAll, PurgeAll_ToolTip);
+ toolTip.SetToolTip(btnSelectCache, SmartSelect_ToolTip);
+ toolTip.SetToolTip(btnSelectAll, SelectAll_ToolTip);
+ toolTip.SetToolTip(btnUnselect, RemoveSelection_ToolTip);
+
+ toolTip.SetToolTip(tbSearch, Search_ToolTip);
+ toolTip.SetToolTip(btnDropSearch, DropSearch_ToolTip);
+ toolTip.SetToolTip(btnRefresh, Refresh_ToolTip);
+ toolTip.SetToolTip(cbInfo, Expand_ToolTip);
+
+ toolTip.SetToolTip(btnAbout, About_ToolTip);
+ }
+ }
+}
diff --git a/ClearCache1C/Form1.resx b/ClearCache1C/FormMain.resx
similarity index 96%
rename from ClearCache1C/Form1.resx
rename to ClearCache1C/FormMain.resx
index b49c6e5..3637e5f 100644
--- a/ClearCache1C/Form1.resx
+++ b/ClearCache1C/FormMain.resx
@@ -118,27 +118,15 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGeYUxB9wAAAO1pQ0NQUGhv
dG9zaG9wIElDQyBwcm9maWxlAAAoz2NgYJzh6OLkyiTAwJCbV1LkHuQYGREZpcB+noGNgZkBDBKTiwsc
AwJ8QOy8/LxUBlTAyMDw7RqIZGC4rAsyi4E0wJpcUFQCpA8AsVFKanEykP4CxJnlJQVAccYEIFskKRvM
BqkTyQ4JcgayO4BsvpLUCpAYg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoK
UC3UDhDgdy9KrFRwT8zNTVQw0jNioDoAhSWE9TkEHEaMYucRYgiQXFpUBgtPJmMGBgBLGzgw6GaaaQAA
- AAlwSFlzAAALEwAACxMBAJqcGAAAACBJREFUOE9jAIL/FGKG/+SCUQNGDQCBUQOoaQD5mOE/ALwPSOI5
- CblOAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGeYUxB9wAAAO1pQ0NQUGhv
- dG9zaG9wIElDQyBwcm9maWxlAAAoz2NgYJzh6OLkyiTAwJCbV1LkHuQYGREZpcB+noGNgZkBDBKTiwsc
- AwJ8QOy8/LxUBlTAyMDw7RqIZGC4rAsyi4E0wJpcUFQCpA8AsVFKanEykP4CxJnlJQVAccYEIFskKRvM
- BqkTyQ4JcgayO4BsvpLUCpAYg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoK
- UC3UDhDgdy9KrFRwT8zNTVQw0jNioDoAhSWE9TkEHEaMYucRYgiQXFpUBgtPJmMGBgBLGzgw6GaaaQAA
- AAlwSFlzAAALEwAACxMBAJqcGAAAAFxJREFUOE/VjEsOgDAIBVlx/xujTYYqWPzUjU7yFjxgZMVeRmyW
- Hwp4YHoo8GfPrjsYmTa8z3vmYOtxqr5BVx/nZOiH1hBVZRthX5p7KtiPD66eG6eCO3xIMB+xBcMg0V0g
- dEfYAAAAAElFTkSuQmCC
+ AAlwSFlzAAALEwAACxMBAJqcGAAAACJJREFUOE9jUFBQ+E8JBhtALhg1YNQAEBg1gJoGkI8V/gMAfgFf
+ Yj42DjoAAAAASUVORK5CYII=
diff --git a/ClearCache1C/Form2.Designer.cs b/ClearCache1C/FormResults.Designer.cs
similarity index 52%
rename from ClearCache1C/Form2.Designer.cs
rename to ClearCache1C/FormResults.Designer.cs
index 25e5920..9337799 100644
--- a/ClearCache1C/Form2.Designer.cs
+++ b/ClearCache1C/FormResults.Designer.cs
@@ -1,6 +1,6 @@
namespace ClearCache1C
{
- partial class FormResult
+ partial class FormResults
{
///
/// Required designer variable.
@@ -28,32 +28,36 @@
///
private void InitializeComponent()
{
- this.InfoResult = new System.Windows.Forms.TextBox();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormResults));
+ this.tbResults = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
- // InfoResult
+ // tbResults
//
- this.InfoResult.BackColor = System.Drawing.SystemColors.Info;
- this.InfoResult.Dock = System.Windows.Forms.DockStyle.Fill;
- this.InfoResult.Location = new System.Drawing.Point(0, 0);
- this.InfoResult.Multiline = true;
- this.InfoResult.Name = "InfoResult";
- this.InfoResult.ReadOnly = true;
- this.InfoResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
- this.InfoResult.Size = new System.Drawing.Size(464, 461);
- this.InfoResult.TabIndex = 0;
+ this.tbResults.BackColor = System.Drawing.SystemColors.Info;
+ this.tbResults.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tbResults.Location = new System.Drawing.Point(0, 0);
+ this.tbResults.Multiline = true;
+ this.tbResults.Name = "tbResults";
+ this.tbResults.ReadOnly = true;
+ this.tbResults.Size = new System.Drawing.Size(454, 499);
+ this.tbResults.TabIndex = 0;
//
- // FormResult
+ // FormResults
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(464, 461);
- this.Controls.Add(this.InfoResult);
- this.Name = "FormResult";
+ this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.ClientSize = new System.Drawing.Size(454, 499);
+ this.Controls.Add(this.tbResults);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "FormResults";
this.ShowIcon = false;
this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Результат удаления";
- this.Load += new System.EventHandler(this.FormResult_Load);
this.ResumeLayout(false);
this.PerformLayout();
@@ -61,6 +65,6 @@
#endregion
- private System.Windows.Forms.TextBox InfoResult;
+ private System.Windows.Forms.TextBox tbResults;
}
}
\ No newline at end of file
diff --git a/ClearCache1C/FormResults.cs b/ClearCache1C/FormResults.cs
new file mode 100644
index 0000000..360fcc3
--- /dev/null
+++ b/ClearCache1C/FormResults.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ClearCache1C
+{
+ public partial class FormResults : Form
+ {
+ public FormResults()
+ {
+ InitializeComponent();
+ }
+
+ public void SetResults(int successfullyDeleted, int errorsOnDelete, double totalSizeDeleted,
+ List listSuccess, List listError, List listExceptions)
+ {
+ tbResults.ResetText();
+ tbResults.AppendText("--- Итоги ---");
+ tbResults.AppendText("\r\nВыполнено успешно: " + successfullyDeleted);
+ tbResults.AppendText("\r\nВыполнено с ошибками: " + errorsOnDelete);
+ tbResults.AppendText("\r\nВсего удалено: " + totalSizeDeleted.ToString("0.00") + " Mb");
+ tbResults.AppendText("\r\n");
+ tbResults.AppendText("\r\n--- Список обработанных успешно ---");
+ foreach (string s in listSuccess)
+ tbResults.AppendText("\r\n > " + s);
+ tbResults.AppendText("\r\n");
+ tbResults.AppendText("\r\n--- Список обработанных с ошибками ---");
+ foreach (string s in listError)
+ {
+ tbResults.AppendText("\r\n > " + s);
+ }
+ tbResults.AppendText("\r\n");
+ tbResults.AppendText("\r\n--- Лог ошибок ---");
+ foreach (string s in listExceptions)
+ tbResults.AppendText("\r\n > " + s);
+ }
+ }
+}
diff --git a/ClearCache1C/FormResults.resx b/ClearCache1C/FormResults.resx
new file mode 100644
index 0000000..a9887f0
--- /dev/null
+++ b/ClearCache1C/FormResults.resx
@@ -0,0 +1,418 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
+ IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMW
+ IRATFiFAFBciIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSoyMCosNDAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAExYh/xMWIf8TFiH/ExYh/xMWIf8TFiH/ExYh/xMWIf8TFiH/ExYh/xMW
+ If8TFiH/ExYh/xMWIf8TFiH/ExYh/xMWIf8TFiH/ExYh/xMWIf8TFiH/ExYh/xMWIf8TFiGAAAAAAAAA
+ AAAAAAAAExYhEBMWIc8UFyH/Fhkj7xgbJTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKjKfKiwz/ywu
+ Nf8uMDePAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExYh/xMWIf8TFiH/ExYh/xMWIf8TFiH/ExYh/xMW
+ If8TFiH/ExYh/xMWIf8TFiH/ExYh/xMWIf8TFiH/ExYh/xMWIf8TFiH/ExYh/xMWIf8TFiH/ExYh/xMW
+ If8TFiFgAAAAAAAAAAATFiEQExYhzxQXIf8WGSP/GBsl/xodJ+8cHygwAAAAAAAAAAAAAAAAAAAAACgq
+ Mp8qLDP/LC41/y4wN/8wMjj/MjQ6gAAAAAAAAAAAAAAAAAAAAAAAAAAAFBci/xQXIv8UFyL/FBci/xQX
+ Iv8UFyL/FBci/xQXIv8UFyL/FBci/xQXIv8UFyL/FBci/xQXIv8UFyL/FBci/xQXIv8UFyL/FBci/xQX
+ Iv8UFyL/FBci/xQXIWAAAAAAAAAAAAAAAAATFiFAFBch/xYZI/8YGyX/Gh0n/xwfKP8fISrvISMsMAAA
+ AAAAAAAAKCoynyosM/8sLjX/LjA3/zAyOP8zNDr/NTY87wAAAAAAAAAAAAAAAAAAAAAAAAAAFRgj/xUY
+ I/8VGCP/FRgj/xUYI/8VGCP/FRgj/xUYI/8VGCP/FRgj/xUYI/8VGCP/FRgj/xUYI/8VGCP/FRgj/xUY
+ I/8VGCP/FRgj/xUYI/8VGCP/FRgjvwAAAAAAAAAAAAAAAAAAAAAUFyIgFhkj7xgbJf8aHSf/HB8o/x8h
+ Kv8hIyz/IyUu7yUnMDAoKjKfKiwz/ywuNf8uMDf/MDI4/zM0Ov81Njz/Nzg9rwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAFxkk/xcZJP8XGST/Fxkk/xcZJP8XGST/Fxkk/xcZJP8XGST/Fxkk/xcZJP8XGST/Fxkk/xcZ
+ JP8XGST/Fxkk/xcZJP8XGST/Fxkk/xcZJP8XGST/Fxkk/xcZJJ8AAAAAAAAAAAAAAAAAAAAAGBslMBod
+ J+8cHyj/HyEq/yEjLP8jJS7/JScw/ycpMf8qLDP/LC41/y4wN/8wMjj/MzQ6/zU2PP83OD3PODk+EAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAGBsl/xgbJf8YGyX/GBsl/xgbJf8YGyX/GBsl/xgbJf8YGyX/GBsl/xgb
+ Jf8YGyX/GBsl/xgbJf8YGyX/GBsl/xgbJf8YGyX/GBsl/xgbJf8YGyX/GBsl/xgbJf8YGyWfAAAAAAAA
+ AAAAAAAAAAAAABwfKDAfISrvISMs/yMlLv8lJzD/Jykx/yosM/8sLjX/LjA3/zAyOP8zNDr/NTY8/zc4
+ Pc84OT4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRwm/xkcJv8ZHCb/GRwm/xkcJv8ZHCb/GRwm/xkc
+ Jv8ZHCb/GRwm/xkcJv8ZHCb/GRwm/xkcJv8ZHCb/GRwm/xkcJv8ZHCb/GRwm/xkcJv8ZHCb/GRwm/xkc
+ Jv8ZHCb/GRwmnwAAAAAAAAAAAAAAAAAAAAAhIywwIyUu7yUnMP8nKTH/Kiwz/ywuNf8uMDf/MDI4/zM0
+ Ov81Njz/Nzg9zzg5PhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGx0n/xsdJ/8bHSf/Gx0n/xsd
+ J/8bHSf/Gx0n/xsdJ/8bHSf/Gx0n/xsdJ/8bHSf/Gx0n/xsdJ/8bHSf/Gx0n/xsdJ/8bHSf/Gx0n/xsd
+ J/8bHSf/Gx0n/xsdJ/8bHSf/Gx0n/xsdJ58AAAAAAAAAAAAAAAAAAAAAJScwMCcpMf8qLDP/LC41/y4w
+ N/8wMjj/MzQ6/zU2PP83OD3PODk+EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB8o/xwf
+ KP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwf
+ KP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwfKP8cHyiPAAAAAAAAAAAAAAAAKCoynyos
+ M/8sLjX/LjA3/zAyOP8zNDr/NTY8/zc4Pv85Oj/vOzxBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAHSAp/x0gKf8dICn/HSAp/x0gKf8cHyj/HB8o/xwfKP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwf
+ KP8cHyj/HB8o/xwfKP8cHyj/HB8o/x0gKf8dICn/HSAp/x0gKf8dICn/HSAp/x0fKe8dHykwAAAAAAAA
+ AAAoKjKfKiwz/ywuNf8uMDf/MDI4/zM0Ov81Njz/Nzg+/zk6P/87PEH/Pj5D70BBRTAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAHyEq/x8hKv8fISr/HyEq/x8hKv8cHyj/HB8o/xwfKP8cHyj/HB8o/xwf
+ KP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwfKP8cHyj/HB8o/x8hKv8fISr/HyEq/x8hKv8fISr/HiEq7x4g
+ KjAAAAAAAAAAACgqMp8qLDP/LC41/y4wN/8wMjj/MzQ6/zU2PP83OD7/OTo//zs8Qf8+PkP/QEFF/0JD
+ Ru9ERUgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICIr/yAiK/8gIiv/ICIr/yAiK/8cHyj/HB8o/xwf
+ KP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwfKP8cHyj/HB8o/xwfKP8cHyj/HB8o/yAiK/8gIiv/ICIr/yAi
+ K/8gIivvHyIrMAAAAAAAAAAAKCoynyosM/8sLjX/LjA3/zAyOP8zNDr/NTY8/zc4Pc85Oj/vOzxB/z4+
+ Q/9AQUX/QkNG/0RFSP9GR0rvSUlMMAAAAAAAAAAAAAAAAAAAAAAAAAAAISQs/yEkLP8hJCz/ISQs/yEk
+ LP8hJCz/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISQs/yEkLP8hJCz/ISQs/yEk
+ LP8hJCz/ISQs/yEjLO8hIywwAAAAAAAAAAApKjIwKiwz/ywuNf8uMDf/MDI4/zM0Ov81Njz/Nzg9zzg5
+ PhA7PEEwPj5D70BBRf9CQ0b/REVI/0ZHSv9JSUz/S0tOzwAAAAAAAAAAAAAAAAAAAAAAAAAAIyUt/yMl
+ Lf8jJS3/IyUt/yMlLf8jJS3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyUt/yMl
+ Lf8jJS3/IyUt/yMlLf8jJS3/IiUt7yIkLTAAAAAAAAAAAAAAAAAqLDQwLC41/y4wN/8wMjj/MzQ6/zU2
+ PP83OD3PODk+EAAAAAAAAAAAQEFFMEJDRu9ERUj/RkdK/0lJTP9LS07/TU1PzwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAJCYv/yQmL/8kJi//JCYv/yQmL/8kJi//JCYv/yQmL/8kJi//JCYv/yQmL/8kJi//JCYv/yQm
+ L/8kJi//JCYv/yQmL/8kJi//JCYv/yQmL/8kJi//JCYv7yQmLzAAAAAAAAAAAAAAAAAAAAAALjA3nzAy
+ OP8zNDr/NTY8/zc4Pc84OT4QAAAAAAAAAAAAAAAAAAAAAERFSDBGR0rvSUlM/0tLTv9NTU/vTk5QMAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAJScw/yUnMP8lJzD/JScw/yUnMP8lJzD/JScw/yUnMP8lJzD/JScw/yUn
+ MP8lJzD/JScw/yUnMP8lJzD/JScw/yUnMP8lJzD/JScw/yUnMP8lJzD/JScw/yUnMO8mKDAwAAAAAAAA
+ AAAAAAAAAAAAADI0Oo81NjzvNzg9rzg5PhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJSUwwS0tO301N
+ T99OTlAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJykx/ycpMf8nKTH/Jykx/ycpMf8nKTH/Jykx/ycp
+ Mf8nKTH/Jykx/ycpMf8nKTH/Jykx/ycpMf8nKTH/Jykx/ycpMf8nKTH/Jykx/ycpMf8nKTH/Jykx/ycp
+ Mf8nKTHvJykxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcpMTAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCoy/ygqMv8oKjL/KCoy/ygq
+ Mv8oKjL/KCoy/ygqMv8oKjL/KCoy/ygqMv8oKjL/KCoy/ygqMv8oKjL/KCoy/ygqMv8oKjL/KCoy/ygq
+ Mv8oKjL/KCoy/ygqMv8oKjL/KCoy7ygqMjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCoyYCgq
+ Mr8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSsz/ykr
+ M/8pKzP/KSsz/ygqMv8oKjL/KCoy/ygqMv8oKjL/KCoy/ygqMv8oKjL/KCoy/ygqMv8oKjL/KCoy/ygq
+ Mv8oKjL/KCoy/ykrM/8pKzP/KSsz/ykrM/8pKzP/KSsz/ykrM+8qLDMwAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAqLDNgKSsz/ykrM78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAKy00/ystNP8rLTT/Ky00/ygqMv8oKjL/KCoy/ygqMv8oKjL/KCoy/ygqMv8oKjL/KCoy/ygq
+ Mv8oKjL/KCoy/ygqMv8oKjL/KCoy/ystNP8rLTT/Ky00/ystNP8rLTT/Ky00/ystNP8rLTTvKy00MAAA
+ AAAAAAAAAAAAACstNGArLTT/Ky00/ystNL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAALC41/ywuNf8sLjX/LC41/ywuNf8sLjX/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAALC41/ywuNf8sLjX/LC41/ywuNf8sLjX/LC41/ywuNf8sLjX/LC41/ywu
+ Nf8sLjX/LC417ywuNTAAAAAALC41YCwuNf8sLjX/LC41/ywuNb8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALS82/y0vNv8tLzb/LS82/y0vNv8tLzb/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALS82/y0vNv8tLzb/LS82/y0vNv8tLzb/LS82/y0v
+ Nv8tLzb/LS82/y0vNv8tLzb/LS82/y0vNu8uLzaALS82/y0vNv8tLzb/LS82/y0vNr8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALzA3/y8wN/8vMDf/LzA3/y8w
+ N/8vMDf/LzA3/y8wN/8vMDf/LzA3/y8wN/8vMDf/LzA3/y8wN/8vMDf/LzA3/y8wN/8vMDf/LzA3/y8w
+ N/8vMDf/LzA3/y8wN/8vMDf/LzA3/y8wN/8vMDf/LzA3/y8wN/8vMDf/LzA3/y8wN/8vMDf/LzA3/y8w
+ N78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDI4/zAy
+ OP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAy
+ OP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAy
+ OP8wMjj/MDI4/zAyOL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAMTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEz
+ Of8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEz
+ Of8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOb8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAMzQ6/zM0Ov8zNDr/MzQ6/zM0Ov8zNDr/MTM5/zEzOf8xMzn/MTM5/zEz
+ Of8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zM0Ov8zNDr/MzQ6/zM0
+ Ov8zNDr/MzQ6/zM0Ov8zNDr/MzQ6/zM0Ov8zNDr/MzQ6/zM0Or8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANDU7/zQ1O/80NTv/NDU7/zQ1O/80NTv/MTM5/zEz
+ Of8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zQ1
+ O/80NTv/NDU7/zQ1O/80NTv/NDU7/zQ1O/80NTv/NDU7/zQ1O/80NTv/NDU7/zQ1O78AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTc8/zU3PP81Nzz/NTc8/zU3
+ PP81Nzz/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEz
+ Of8xMzn/MTM5/zU3PP81Nzz/NTc8/zU3PP81Nzz/NTc8/zU3PP81Nzz/NTc8/zU3PP81Nzz/NTc8/zU3
+ PL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzg+/zc4
+ Pv83OD7/Nzg+/zc4Pv83OD7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAANzg+/zc4Pv83OD7/Nzg+/zc4Pv83OD7/Nzg+/zc4Pv83OD7/Nzg+/zc4
+ Pv83OD7/Nzg+/zc4Pr8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAODk//zg5P/84OT//ODk//zg5P/84OT//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODk//zg5P/84OT//ODk//zg5P/84OT//ODk//zg5
+ P/84OT//ODk//zg5P/84OT//ODk//zg5P78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAOjtA/zo7QP86O0D/OjtA/zo7QP86O0D/OjtA/zo7QP86O0D/OjtA/zo7
+ QP86O0D/OjtA/zo7QP86O0D/OjtA/zo7QP86O0D/OjtA/zo7QP86O0D/OjtA/zo7QP86O0D/OjtA/zo7
+ QP86O0D/OjtA/zo7QP86O0D/OjtA/zo7QP86O0D/OjtA/zo7QL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzxB/zs8Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8
+ Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8
+ Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8Qb8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPD1C/zw9Qv88PUL/PD1C/zw9
+ Qv88PUL/OzxB/zs8Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8Qf87PEH/OzxB/zs8
+ Qf87PEH/OzxB/zw9Qv88PUL/PD1Cvzw9Qr88PUK/PD1Cvzw9Qr88PUK/PD1Cvzw9Qr88PUK/PD1Cvzw9
+ Qo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj5D/z4+
+ Q/8+PkP/Pj5D/z4+Q/8+PkP/PD1C/zw9Qv88PUL/PD1C/zw9Qv88PUL/PD1C/zw9Qv88PUL/PD1C/zw9
+ Qv88PUL/PD1C/zw9Qv88PUL/PD1C/z4+Q/8+PkP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAP0BE/z9ARP8/QET/P0BE/z9ARP8/QET/PT1C/z09Qv89PUL/PT1C/z09Qv89PUL/PT1C/z09
+ Qv89PUL/PT1C/z09Qv89PUL/PT1C/z09Qv89PUL/PT1C/z9ARP8/QET/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAQEFF/0BBRf9AQUX/QEFF/0BBRf9AQUX/Pj5D/z4+Q/8+PkP/Pj5D/z4+
+ Q/8+PkP/Pj5D/z4+Q/8+PkP/Pj5D/z4+Q/8+PkP/Pj5D/z4+Q/8+PkP/Pj5D/0BBRf9AQUX/AAAAAAAA
+ AABAQUXXQEFFv0BBRb9AQUW/QEFFv0BBRb9AQUW/QEFFr0BBRRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQkJG/0JCRv9CQkb/QkJG/0JCRv9CQkb/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQkJG/0JC
+ Rv9CQkb/AAAAAAAAAABCQkb/QkJG/0JCRv9CQkb/QkJG/0JCRv9CQkb/QUJGYAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ0NH/0NDR/9DQ0f/Q0NH/0ND
+ R/9DQ0f/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAQ0NH/0NDR/9DQ0f/AAAAAAAAAABDQ0f/Q0NH/0NDR/9DQ0f/Q0NH/0NDR/9DQ0efAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREVI/0RF
+ SP9ERUj/REVI/0RFSP9ERUj/REVI/0RFSP9ERUj/REVI/0RFSP9ERUj/REVI/0RFSP9ERUj/REVI/0RF
+ SP9ERUj/REVI/0RFSP9ERUj/REVI/0RFSP9ERUj/AAAAAAAAAABERUj/REVI/0RFSP9ERUj/REVI/0RE
+ SM8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAARkZJ/0ZGSf9GRkn/RkZJ/0ZGSf9GRkn/RkZJ/0ZGSf9GRkn/RkZJ/0ZGSf9GRkn/RkZJ/0ZG
+ Sf9GRkn/RkZJ/0ZGSf9GRkn/RkZJ/0ZGSf9GRkn/RkZJ/0ZGSf9GRkn/AAAAAAAAAABGRkn/RkZJ/0ZG
+ Sf9GRkn/RUZJ70VGSSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAR0dK/0dHSv9HR0r/R0dK/0dHSv9HR0r/R0dK/0dHSv9HR0r/R0dK/0dH
+ Sv9HR0r/R0dK/0dHSv9HR0r/R0dK/0dHSv9HR0r/R0dK/0dHSv9HR0r/R0dK/0dHSv9HR0r/AAAAAAAA
+ AABHR0r/R0dK/0dHSv9HR0r/R0dKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASElL/0hJS/9ISUv/SElL/0hJS/9ISUv/SElL/0hJ
+ S/9ISUv/SElL/0hJS/9ISUv/SElL/0hJS/9ISUv/SElL/0hJS/9ISUv/SElL/0hJS/9ISUv/SElL/0hJ
+ S/9ISUv/AAAAAAAAAABISUv/SElL/0hJS/9ISEuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASkpN/0pKTf9KSk3/SkpN/0pK
+ Tf9KSk3/SkpN/0pKTf9KSk3/SkpN/0pKTf9KSk3/SkpN/0pKTf9KSk3/SkpN/0pKTf9KSk3/SkpN/0pK
+ Tf9KSk3/SkpN/0pKTf9KSk3/AAAAAAAAAABKSk3/SkpN/0lKTK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tO/0tL
+ Tv9LS07/S0tO/0tLTv9LS07/S0tO/0tLTv9LS07/S0tO/0tLTv9LS07/S0tO/0tLTv9LS07/S0tO/0tL
+ Tv9LS07/S0tO/0tLTv9LS07/S0tO/0tLTv9LS07/AAAAAAAAAABLS03vS0tN30pKTRAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAATExP/0xMT/9MTE//TExP/0xMT/9MTE//TExP/0xMT/9MTE//TExP/0xMT/9MTE//TExP/0xM
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAALC41/iwuNf8sLjX/LC41/ywuNf8sLjX+LC41/CwuNcctLjV8LC417Cwu
+ Nf4sLjXTMzQ6AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuMDb/LjA2/y4wNv4uMDb+LjA2/i4w
+ Nv0uMDb9LjA2/S4wNv0uMDb9LjA2/i4wNv4uMDb+LjA2/y4wNv8uMDb/LjA2/y4wNv4uMDb+LjA2/i4w
+ Nv4uMDb+LjA2/i8wN9MxMzkBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAyOP8wMjj/MDI4/zAy
+ OP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAyOP8wMjj/MDI4/zAy
+ OP8wMjj/MDI4/zAyOP8wMjj+MDI40zEzOQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjQ5/zIz
+ Of8yMzn+MjM5/jIzOf4yMzn+MjM5/jIzOf4yMzn+MjM5/jIzOf4yMzn+MjM5/jIzOf4yMzn+MjM5/jI0
+ Of4yNDn/MjQ5/zI0Of8yNDn/MjQ5/zI0Of4yMznTMjM5AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAA0Njv/NDU7/zQ1O/40NTv+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAA0NTv2NDY7/jQ2O/80Njv/NDY7/zQ2O/80Njv/NDY7/jQ1O9MzNDoBAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAADY4Pf82Nz3/Njc9/jY3Pf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAADY3Peo2OD3+Njg9/zY4Pf82OD3/Njg9/zY4Pf82OD3+Njc90zU2PAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAOTo//zo6P/87O0D/OztA/zs7QP87O0D/OztA/zs7QP87O0D/OztA/zs7
+ QP87O0D/OztA/zs7QP87O0D/ODo/+Dk6P/45Oj/+OTo//jk6P/45Oj/+OTo//jk6P/44OT7SNjc9AQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7O0D/OztA/zs7QP47O0D+OztA/js7QP47O0D+OztA/js7
+ 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
+ AAAA/wAAAI8AAD6PAAAAnwAAAL8AAA==
+
+
+
\ No newline at end of file
diff --git a/ClearCache1C/Properties/AssemblyInfo.cs b/ClearCache1C/Properties/AssemblyInfo.cs
index 8027dac..b60d67e 100644
--- a/ClearCache1C/Properties/AssemblyInfo.cs
+++ b/ClearCache1C/Properties/AssemblyInfo.cs
@@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// Общие сведения об этой сборке предоставляются следующим набором
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
// связанные со сборкой.
-[assembly: AssemblyTitle("Чистка кэша 1С")]
+[assembly: AssemblyTitle("ClearCache1C")]
[assembly: AssemblyDescription("Чистка кэша 1С")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ClearCache1C")]
-[assembly: AssemblyCopyright("Copyright © 2018")]
+[assembly: AssemblyCopyright("GNU GPL v3")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
-[assembly: Guid("ca37faa9-7c77-4c16-81a4-3bbd93f235a1")]
+[assembly: Guid("2d3ea215-f5c4-435b-922e-f985af0065cb")]
// Сведения о версии сборки состоят из следующих четырех значений:
//
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.1.0")]
-[assembly: AssemblyFileVersion("1.0.1.0")]
+[assembly: AssemblyVersion("1.0.2.0")]
+[assembly: AssemblyFileVersion("1.0.2.0")]
diff --git a/ClearCache1C/Properties/Resources.Designer.cs b/ClearCache1C/Properties/Resources.Designer.cs
index c312ffa..22b1124 100644
--- a/ClearCache1C/Properties/Resources.Designer.cs
+++ b/ClearCache1C/Properties/Resources.Designer.cs
@@ -63,9 +63,29 @@ namespace ClearCache1C.Properties {
///
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
///
- internal static System.Drawing.Bitmap ai_full_logo___clean {
+ internal static System.Drawing.Bitmap ai_logo {
get {
- object obj = ResourceManager.GetObject("ai-full logo - clean", resourceCulture);
+ object obj = ResourceManager.GetObject("ai_logo", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Поиск локализованного ресурса типа System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap arrows_16_L {
+ get {
+ object obj = ResourceManager.GetObject("arrows_16_L", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Поиск локализованного ресурса типа System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap arrows_16_R {
+ get {
+ object obj = ResourceManager.GetObject("arrows_16_R", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
@@ -80,6 +100,16 @@ namespace ClearCache1C.Properties {
}
}
+ ///
+ /// Поиск локализованного ресурса типа System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap icon_refresh_24 {
+ get {
+ object obj = ResourceManager.GetObject("icon_refresh_24", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
///
@@ -99,5 +129,15 @@ namespace ClearCache1C.Properties {
return ((System.Drawing.Bitmap)(obj));
}
}
+
+ ///
+ /// Поиск локализованного ресурса типа System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap x_mark_16 {
+ get {
+ object obj = ResourceManager.GetObject("x-mark_16", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
}
}
diff --git a/ClearCache1C/Properties/Resources.resx b/ClearCache1C/Properties/Resources.resx
index 00a5e3f..0ff9f93 100644
--- a/ClearCache1C/Properties/Resources.resx
+++ b/ClearCache1C/Properties/Resources.resx
@@ -118,16 +118,28 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- ..\Resources\icon_select_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\icon_smart_select_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icon_refresh_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\icon_deselect_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\icon_smart_select_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\icon_select_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\ai-full logo - clean.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\arrows_16_L.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ai-logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\arrows_16_R.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\x-mark_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
\ No newline at end of file
diff --git a/ClearCache1C/Properties/Settings.Designer.cs b/ClearCache1C/Properties/Settings.Designer.cs
index 4db35b4..23c2174 100644
--- a/ClearCache1C/Properties/Settings.Designer.cs
+++ b/ClearCache1C/Properties/Settings.Designer.cs
@@ -1,28 +1,24 @@
//------------------------------------------------------------------------------
//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
+// Этот код создан программой.
+// Исполняемая версия:4.0.30319.42000
//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
+// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+// повторной генерации кода.
//
//------------------------------------------------------------------------------
-namespace ClearCache1C.Properties
-{
-
-
+namespace ClearCache1C.Properties {
+
+
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
- {
-
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default
- {
- get
- {
+
+ public static Settings Default {
+ get {
return defaultInstance;
}
}
diff --git a/ClearCache1C/Properties/app.manifest b/ClearCache1C/Properties/app.manifest
deleted file mode 100644
index 5b8f607..0000000
--- a/ClearCache1C/Properties/app.manifest
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ClearCache1C/Resources/ai-full logo - clean.PNG b/ClearCache1C/Resources/ai-logo.png
similarity index 100%
rename from ClearCache1C/Resources/ai-full logo - clean.PNG
rename to ClearCache1C/Resources/ai-logo.png
diff --git a/ClearCache1C/Resources/arrows_16_L.png b/ClearCache1C/Resources/arrows_16_L.png
new file mode 100644
index 0000000..953e4ed
Binary files /dev/null and b/ClearCache1C/Resources/arrows_16_L.png differ
diff --git a/ClearCache1C/Resources/arrows_16_R.png b/ClearCache1C/Resources/arrows_16_R.png
new file mode 100644
index 0000000..5e2f2b1
Binary files /dev/null and b/ClearCache1C/Resources/arrows_16_R.png differ
diff --git a/ClearCache1C/Resources/icon_deselect_16.PNG b/ClearCache1C/Resources/icon_deselect_16.PNG
index 250200a..f1137b5 100644
Binary files a/ClearCache1C/Resources/icon_deselect_16.PNG and b/ClearCache1C/Resources/icon_deselect_16.PNG differ
diff --git a/ClearCache1C/Resources/icon_refresh_24.png b/ClearCache1C/Resources/icon_refresh_24.png
new file mode 100644
index 0000000..3962864
Binary files /dev/null and b/ClearCache1C/Resources/icon_refresh_24.png differ
diff --git a/ClearCache1C/Resources/x-mark_16.png b/ClearCache1C/Resources/x-mark_16.png
new file mode 100644
index 0000000..3563e83
Binary files /dev/null and b/ClearCache1C/Resources/x-mark_16.png differ
diff --git a/ClearCache1C/Custom-Icon-Design-Mini-File-delete.ico b/ClearCache1C/app.ico
similarity index 100%
rename from ClearCache1C/Custom-Icon-Design-Mini-File-delete.ico
rename to ClearCache1C/app.ico
diff --git a/ClearCache1C/packages.config b/ClearCache1C/packages.config
deleted file mode 100644
index 142ece2..0000000
--- a/ClearCache1C/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file