v1.0.2 Release

This commit is contained in:
FuketsuBaka 2018-11-25 16:57:34 +07:00
parent 51fdc754e5
commit e95ddfbe9f
31 changed files with 1990 additions and 1091 deletions

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>

View File

@ -4,15 +4,13 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{CA37FAA9-7C77-4C16-81A4-3BBD93F235A1}</ProjectGuid>
<ProjectGuid>{2D3EA215-F5C4-435B-922E-F985AF0065CB}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>ClearCache1C</RootNamespace>
<AssemblyName>Чистка кэша 1С</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<AssemblyName>ClearCache1C</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -24,9 +22,9 @@
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.1.0</ApplicationVersion>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@ -49,32 +47,11 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Custom-Icon-Design-Mini-File-delete.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>7AC4C8549D1C2C8FCD8E3679F8E21FC6168EC2BF</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>ClearCache1C_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<TargetZone>LocalIntranet</TargetZone>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
<ApplicationIcon>app.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@ -86,34 +63,34 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<Compile Include="FormAbout.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
<Compile Include="FormAbout.Designer.cs">
<DependentUpon>FormAbout.cs</DependentUpon>
</Compile>
<Compile Include="Form2.cs">
<Compile Include="FormMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form2.Designer.cs">
<DependentUpon>Form2.cs</DependentUpon>
<Compile Include="FormMain.Designer.cs">
<DependentUpon>FormMain.cs</DependentUpon>
</Compile>
<Compile Include="Form3.cs">
<Compile Include="FormResults.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form3.Designer.cs">
<DependentUpon>Form3.cs</DependentUpon>
<Compile Include="FormResults.Designer.cs">
<DependentUpon>FormResults.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
<EmbeddedResource Include="FormAbout.resx">
<DependentUpon>FormAbout.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Form2.resx">
<DependentUpon>Form2.cs</DependentUpon>
<EmbeddedResource Include="FormMain.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Form3.resx">
<DependentUpon>Form3.cs</DependentUpon>
<EmbeddedResource Include="FormResults.resx">
<DependentUpon>FormResults.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
@ -125,9 +102,6 @@
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="ClearCache1C_TemporaryKey.pfx" />
<None Include="packages.config" />
<None Include="Properties\app.manifest" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@ -141,9 +115,6 @@
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icon_deselect_16.PNG" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icon_select_16.PNG" />
</ItemGroup>
@ -151,23 +122,30 @@
<None Include="Resources\icon_smart_select_16.PNG" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\ai-full logo - clean.PNG" />
<None Include="Resources\icon_refresh_24.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\arrows_16_L.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\arrows_16_R.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icon_deselect_16.PNG" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\ai-logo.png" />
</ItemGroup>
<ItemGroup>
<Content Include="app.ico" />
<None Include="Resources\x-mark_16.png" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6.1 %28x86 и x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Content Include="1C_120.ico" />
<Content Include="Custom-Icon-Design-Mini-File-delete.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -1,191 +0,0 @@
namespace ClearCache1C
{
partial class FormMain
{
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором форм Windows
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
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;
}
}

View File

@ -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<string> FolderPaths { get; set; }
public List<string> 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<string> s_folder_paths, List<string> 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<string> list_success = new List<string>();
List<string> list_error = new List<string>();
List<string> list_exceptions = new List<string>();
for (int i = 0; i < items.Count; i++)
{
BasesListItem base_item = items[i] as BasesListItem;
(bool is_error, float deleted_size, List<string> 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<string> list_success, List<string> list_error, List<string> 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<string> exceptions) DeleteFoldersContent(List<string> ListPaths)
{
bool is_error = false;
float deleted_size = 0.0f;
List<string> exceptions = new List<string>();
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<string> s_folder_paths, List<string> 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<string> s_folder_paths, List<string> 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<string> s_folder_paths = new List<string>();
List<string> s_cache_paths = new List<string>();
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<string> GetFoldersById(string base_path_local, string base_path_roaming)
{
var found_folders = new List<string>();
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<string, (string Name, string Path)> GetBasesDictionary(string[] lines)
{
var bases_dict = new Dictionary<string, (string Name, string Path)>();
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);
}
}
}

View File

@ -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<string> list_success, List<string> list_error, List<string> 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);
}
}
}
}

View File

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -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;
}
}

View File

@ -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/");

460
ClearCache1C/FormMain.Designer.cs generated Normal file
View File

@ -0,0 +1,460 @@
namespace ClearCache1C
{
partial class FormMain
{
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором форм Windows
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
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;
}
}

805
ClearCache1C/FormMain.cs Normal file
View File

@ -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<string> rootFolders;
public List<string> localCacheFolders;
public List<string> 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<string>();
this.localCacheFolders = new List<string>();
this.userCacheFolders = new List<string>();
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<string> foundFolders = new List<string>();
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<string> 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<string> listSuccess = new List<string>();
List<string> listError = new List<string>();
List<string> listExceptions = new List<string>();
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<string> ListOfFolders, string filterMask)
{
DeleteResults deleteResults = new DeleteResults();
deleteResults.isError = false;
deleteResults.sizeDeleted = 0;
deleteResults.listErrors = new List<string>();
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);
}
}
}

View File

@ -118,27 +118,15 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnRemoveSelection.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="btnUnselect.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGeYUxB9wAAAO1pQ0NQUGhv
dG9zaG9wIElDQyBwcm9maWxlAAAoz2NgYJzh6OLkyiTAwJCbV1LkHuQYGREZpcB+noGNgZkBDBKTiwsc
AwJ8QOy8/LxUBlTAyMDw7RqIZGC4rAsyi4E0wJpcUFQCpA8AsVFKanEykP4CxJnlJQVAccYEIFskKRvM
BqkTyQ4JcgayO4BsvpLUCpAYg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoK
UC3UDhDgdy9KrFRwT8zNTVQw0jNioDoAhSWE9TkEHEaMYucRYgiQXFpUBgtPJmMGBgBLGzgw6GaaaQAA
AAlwSFlzAAALEwAACxMBAJqcGAAAACBJREFUOE9jAIL/FGKG/+SCUQNGDQCBUQOoaQD5mOE/ALwPSOI5
CblOAAAAAElFTkSuQmCC
</value>
</data>
<data name="btnSelectAll.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGeYUxB9wAAAO1pQ0NQUGhv
dG9zaG9wIElDQyBwcm9maWxlAAAoz2NgYJzh6OLkyiTAwJCbV1LkHuQYGREZpcB+noGNgZkBDBKTiwsc
AwJ8QOy8/LxUBlTAyMDw7RqIZGC4rAsyi4E0wJpcUFQCpA8AsVFKanEykP4CxJnlJQVAccYEIFskKRvM
BqkTyQ4JcgayO4BsvpLUCpAYg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoK
UC3UDhDgdy9KrFRwT8zNTVQw0jNioDoAhSWE9TkEHEaMYucRYgiQXFpUBgtPJmMGBgBLGzgw6GaaaQAA
AAlwSFlzAAALEwAACxMBAJqcGAAAAFxJREFUOE/VjEsOgDAIBVlx/xujTYYqWPzUjU7yFjxgZMVeRmyW
Hwp4YHoo8GfPrjsYmTa8z3vmYOtxqr5BVx/nZOiH1hBVZRthX5p7KtiPD66eG6eCO3xIMB+xBcMg0V0g
dEfYAAAAAElFTkSuQmCC
AAlwSFlzAAALEwAACxMBAJqcGAAAACJJREFUOE9jUFBQ+E8JBhtALhg1YNQAEBg1gJoGkI8V/gMAfgFf
Yj42DjoAAAAASUVORK5CYII=
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

View File

@ -1,6 +1,6 @@
namespace ClearCache1C
{
partial class FormResult
partial class FormResults
{
/// <summary>
/// Required designer variable.
@ -28,32 +28,36 @@
/// </summary>
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;
}
}

View File

@ -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<string> listSuccess, List<string> listError, List<string> 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);
}
}
}

View File

@ -0,0 +1,418 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
QP47O0D+OztA/js7QP47O0D+OztA/js7QP46O0D+OjtA/zo7QOg6O0DoOjtA6Do7QOg6O0DoOjtA5zo7
QMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD09Qv89PUL/PT1C/j09Qv49PUL+PT1C/j09
Qv49PUL+PT1C/j09Qv49PUL+PT1C/j09Qv49PUL+PT1C/jw9Qv48PUL/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9D/z8/Q/8/P0P+Pz9D/gAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj9D+j4/Q/0AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQUX/QUFF/0FB
Rf5BQUX+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQUXsQEFF+T9A
RAFDQ0b/Q0NG/0BARehAQETnQEBEwj4/QysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEND
Rv9EREf/RUVI/0VFSP9FRUj/RUVI/kVFSP5FRUj+RUVI/kVFSP5FRUj+RUVI/kVFSP5FRUj+RUVI/0JD
RvNCQ0b7QUJGAUNER/9DREf+QkNG/kJCRvJBQUVGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAARUVI/0VFSP9FRUj+RUVI/kVFSP5FRUj+RUVI/kVFSP5FRUj+RUVI/kVFSP5FRUj+RUVI/kVF
SP5FRUj+RERI/kRESP9CQkYBRUVI/kVFSP1EREj6Q0RHjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABHR0r/R0dK/0dHSv9HR0r/R0dK/0dHSv9HR0r/R0dK/0dHSv9HR0r/R0dK/0dH
Sv9HR0r/R0dK/0dHSv9GRkn+RkZJ/0RESAFGRkn5RkZJ7kVGSZtEREcOAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAElJTP9JSUz/SUlM/0lJTP9JSUz/SUlM/0lJTP9JSUz/SUlM/0lJ
TP9JSUz/SUlM/0lJTP9JSUz/SUlM/0hIS/5ISEv/RUVIAUdISvJHSErZRUVIHAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tN/0tLTf9LS03/S0tN/0tLTf9LS03/S0tN/0tL
Tf9LS03/S0tN/0tLTf9LS03/S0tN/0tLTf9LS03/SkpN/kpKTf9FRkkBSkpNikhISz4AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTE7/TExO/0xMTv9MTE7/TExO/0xM
Tv9MTE7/TExO/0xMTv9MTE7/TExO/0xMTv9MTE7/TExO/0xMTv9MTE7+TExO/0ZGSgFHR0ogRkdKBQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//488AAEOHAABAAwAA
QAMAAEADAAAgBwAAEA8AAAAPAAAAAw/wAAMP8EADAABBgwAAPP8AABz/D/AAfw/wAH8AAAB/AAAAfwAA
AH8P/gB/D/4AfwAAAH8AAAD/AAB//w/+f/8P/gD/AAAB/wAAA/8AAAP/AAAH/wAAD/8AAA//KAAAABgA
AAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBYhARQWIQEUFiEBFBYhARQW
IQEUFiEBExYhARMWIQETFiEBAAAAAAAAAAAAAAAAFhkjBBcaJBgAAAAAAAAAAAAAAAAAAAAAKiwzGAAA
AAAAAAAAAAAAABQXIv4UFyL+FBci/xQXIv8UFyL/FBci/xQXIv8UFyL/FBci/xQXIv8UFyL/ExYhvRUY
IjcWGSMEExYhqRYZI/kcHyhTJCYuASYoMAEoKjKOLC41/S8wN4IAAAAAAAAAABQXIv4UFyL9FBci/hQX
Iv4UFyL+FBci/hQXIv4UFyL+FBci/hQXIv4UFyL+FRgihxgaJAEXGSQYFhkj+RodJv4eISr5JCYuVCgq
Mo8sLjX+LzE3/jQ1OuUAAAAAAAAAABcZJP4XGST+Fxkk/xcZJP8XGST/Fxkk/xcZJP8XGST/Fxkk/xcZ
JP8XGST+Fxok5hkbJSgcHicBGx4nUx4hKvkiJS3+Jykx/iwtNP4wMTf+NDU68TU3PDsAAAAAAAAAABkc
Jv4ZHCb+GRwm/xkcJv8ZHCb/GRwm/xkcJv8ZHCb/GRwm/xkcJv8ZHCb+Ghwm/hocJuUcHygnICIrASMl
LVQnKTH+Ky00/zAxOP40NTvyNjc8PAAAAAAAAAAAAAAAABweKP4cHij+HB4o/hweKP4cHij+HB4o/hwe
KP4cHij+HB4o/hweKP4cHij/HB4o/hwfKP0cHyiqIiUtAScpMY8rLTT+MDE4/jQ2O/44OT76OjtAUwAA
AAAAAAAAAAAAAB4hKv4eISr+HiEq/hweKP8cHij/HB4o/xweKP8cHij/HB4o/x8hKv4eISr+HiEq/h8h
KsIhJCwNJigwjistNP4vMTf+NDU78jg5Pvo8PUL+QUJF+UFCRlMAAAAAAAAAACEjLP4hIyz+ISMs/gAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACEjLP4hIyz+ISMswiIlLQ0mKDAZKy00/S8xN/40NTrxNTY8PDo7
QFNBQkX5RUZJ/UpKTOUAAAAAAAAAACQmLv4kJi7+JCYu/iQmLv4kJi79JCYu/SQmLv0kJi79JCYu/iQm
Lv4kJi7+JCYuwiUnLw0nKTEBLS81ijQ1OuU0NTs7AAAAADU2PAFBQkVTSkpM7UhIS1MAAAAAAAAAACYo
MP4mKDD+Jigx/iYoMf4mKDH+Jigx/iYoMf4mKDH+Jigx/iYoMf4nKTH+Jykx/icpMcIpKzINKiwzASwu
NQEuMDYBKiwzUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkrM/4pKzP+KSsz/iYoMf8mKDH/Jigx/yYo
Mf8mKDH/Jigx/ykrM/4pKzP/KSsz/ikrM/4qLDPCKy00DS0uNQErLTRvKiwz3AAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACwuNf4sLjX+LC41/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwuNf4sLjX/LC41/ywu
Nf4sLjX+LC41wi0vNXcsLjX9LC413TM0OgEAAAAAAAAAAAAAAAAAAAAAAAAAAC4wN/4uMDf+LzA3/i8w
N/4vMDf9LzA3/S8wN/0vMDf9LzA3/i8wN/4vMDf/LzA3/y8wN/8vMDf+LzA3/i8wN/4vMDf+LzE33TEz
OQEAAAAAAAAAAAAAAAAAAAAAAAAAADEzOf4xMzn+MTM5/jEzOf4xMzn+MTM5/jEzOf4xMzn+MTM5/jEz
Of4xMzn+MTM5/jEzOf4xMzn/MTM5/zEzOf8xMzn+MTM53TIzOQEAAAAAAAAAAAAAAAAAAAAAAAAAADQ1
O/40NTv+NDU7/jEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zEzOf8xMzn/MTM5/zQ1O/40NTv/NDU7/zQ1
O/80NTv+NDU73TM0OgEAAAAAAAAAAAAAAAAAAAAAAAAAADY4Pf42OD3+Nzg9/gAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANjg94jc4Pf43OD3/Nzg9/zc4Pf83OD3+Njc93TU2PAEAAAAAAAAAAAAA
AAAAAAAAAAAAADk6P/45Oj/+OjpA/jo6QP46OkD9OjpA/To6QP06OkD9Ojo//Tk6P/05Oj/+OTo//jk6
P/45Oj/+OTo//jk6P/45Oj/9OTo/3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw9Qv48PUL+PD1C/jw9
Qv48PUL+PD1C/jw9Qv48PUL+PD1C/jw9Qv48PUL+PD1C/jw9Qv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/RP4/P0T+Pz9E/jw9Qv88PUL/PD1C/zw9Qv88PUL/PD1C/zw9
Qv88PUL/Pz9E9T8/RPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFC
Rf5BQkX+QkJG/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUJF4kFCRfAAAAAAQUFF/UFB
Rf1BQUXlP0BEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERER/5EREf+REVI/kRFSP5ERUj9REVI/URF
SP1ERUj9REVI/URFSP1ERUj+RERH/URER/4AAAAARERH/UNER/lCQ0Y7AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAEZHSf5GR0n+R0dK/0dHSv9HR0r/R0dK/0dHSv9HR0r/R0dK/0dHSv9HR0r/RkdJ/kZH
Sf4AAAAARkdJ/EVFSG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElJTP5JSUz+SkpM/0pK
TP9KSkz/SkpM/0pKTP9KSkz/SkpM/0pKTP9KSkz/SUlM/klJTP4AAAAASUlLpURFSAEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTv5MTE7+TExO/0xMTv9MTE7/TExO/0xMTv9MTE7/TExO/0xM
Tv9MTE7/TExO/kxMTv4AAAAAR0dKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAc
9wAAAAMAAAADAAAAAwAAAAcAAAAHAAAAAwAfgAMAAABDAAAAPwAAAD8AH4AfAAAAHwAAAB8AAAAfAB/g
HwAAAD8AAAf/AAAH/wAf5D8AAAR/AAAE/wAABP8AAAX/ACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUYIw8WGSQbGBslRiIk
LAEmKDABKSszVC4vNhAAAAAAFBci/hQXIvwUFyL9FBci/RQXIv0UFyL9FBci/RQXIscXGiQLFBcirRod
JvoiJC1iKCoyii0vNvwxMzmPAAAAABgaJP8YGiT+GBol/xgaJf8YGiX/GBol/xgaJf4YGiXyGRwmQBwf
KCcgIyziJykx/S0vNv0zNDrXNDY7GwAAAAAbHSf/Gx0n/hsdJ/4bHSf+Gx0n/hsdJ/4bHif+HB4o/hwe
KO8gIysXJykxmi0vNv40NTv+ODk+dDc4PQEAAAAAHyEq/h8hKv0AAAAAAAAAAAAAAAAAAAAAHyEq/iAi
K/sgIitiJigwfS0vNfwzNDrYOjtA4kFBRfpAQUVXAAAAACMlLv4jJS79Jykx/ycpMf4nKTH+Jykx/ycp
Mf8jJS7KJScvBystNHozNDrRMjQ6HDg5PiZHSErcRUVJVwAAAAAnKTH+Jykx/ScpMf0nKTH9Jykx/Scp
Mf0nKTH+KCox/igqMq4qLDMHLS82AistNGA1NzwBAAAAAAAAAAAAAAAAKy00/istNP0AAAAAAAAAAAAA
AAAAAAAAKy00/iwtNf4sLTX9LC41ri0uNXgsLjXmNDU7AQAAAAAAAAAAAAAAAC8xN/4vMTf9LzE3/S8x
N/0vMTf9LzE3/S8xN/4wMTj+MDE4/jAxOP4wMTj+MDE45zIzOQEAAAAAAAAAAAAAAAAzNDr+MzQ6/S8x
N/8vMTf/LzE3/y8xN/8vMTf/MzU77DQ1O/40NTv/NDU7/jM1O+czNDoBAAAAAAAAAAAAAAAANzg+/jc4
Pv0AAAAAAAAAAAAAAAAAAAAAAAAAADc4PsE3OD7+Nzg+/jc4Pv43OD7mNjc9AQAAAAAAAAAAAAAAADs8
Qf47PEH9PDxB/Tw8Qf08PUH8OzxB/Ds8Qf07PEH9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA/QET+P0BE/Tw8Qf48PEH+PD1B/js8Qf47PEH+OzxB/wAAAAA/P0R8Pj9Ekz0+Q1EAAAAAAAAAAAAA
AAAAAAAAQ0RH/kNER/0AAAAAAAAAAAAAAAAAAAAAAAAAAENDR+IAAAAAQ0NH0kNDR9xAQUURAAAAAAAA
AAAAAAAAAAAAAEdHSv9HR0r+SEhL/khIS/5ISEv+SEhL/khIS/5HR0r9AAAAAEdHSshERUgxAAAAAAAA
AAAAAAAAAAAAAAAAAABLS07/S0tO/ktLTv9LS07/S0tO/0tLTv9LS07/S0tO/QAAAABISEs8AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA/wEAAAABAAAAAQAAAAEAADwBAAAAAQAAAAcAADwHAAAABwAAAAcAAD4H
AAAA/wAAAI8AAD6PAAAAnwAAAL8AAA==
</value>
</data>
</root>

View File

@ -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")]

View File

@ -63,9 +63,29 @@ namespace ClearCache1C.Properties {
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
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));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrows_16_L {
get {
object obj = ResourceManager.GetObject("arrows_16_L", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
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 {
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icon_refresh_24 {
get {
object obj = ResourceManager.GetObject("icon_refresh_24", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
@ -99,5 +129,15 @@ namespace ClearCache1C.Properties {
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap x_mark_16 {
get {
object obj = ResourceManager.GetObject("x-mark_16", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -118,16 +118,28 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="icon_select_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon_select_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="icon_smart_select_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon_smart_select_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icon_refresh_24" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon_refresh_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icon_deselect_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon_deselect_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icon_smart_select_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon_smart_select_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="icon_select_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon_select_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ai-full logo - clean" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ai-full logo - clean.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="arrows_16_L" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrows_16_L.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ai_logo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ai-logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrows_16_R" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrows_16_R.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="x-mark_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\x-mark_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -1,28 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
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;
}
}

View File

@ -1,70 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- Параметры манифеста UAC
Если вы хотите изменить уровень контроля учетных записей Windows, замените узел
requestedExecutionLevel на один из следующих.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
При указании элемента requestedExecutionLevel будет отключена виртуализация файлов и реестра.
Удалите этот элемент, если виртуализация требуется приложению для обратной
совместимости.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Список версий Windows, на которых это приложение было протестировано
и будет работать. Раскомментируйте соответствующие элементы, чтобы ОС Windows
автоматически выбрала наиболее совместимое окружение. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Указывает, что приложение поддерживает определение DPI и не будет автоматически масштабироваться Windows при более высоких
значениях DPI. Приложения Windows Presentation Foundation (WPF) по умолчанию поддерживают определение DPI, им не нужно
специально включать параметр для этого. Для приложений Windows Forms на платформе .NET Framework 4.6, для которых задан этот параметр, необходимо
также задать для "EnableWindowsFormsHighDpiAutoResizing" значение "true" в файле app.config.-->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- Включите темы для общих элементов управления и диалоговых окон Windows (Windows XP и более поздние версии) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

View File

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 415 B

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />
</packages>