HexRx avatar HexRx committed 071dadc

Rename project "DropboxSave" to "KPDataSave" and fixed login error

Comments (0)

Files changed (69)

 syntax: glob
 
-DropboxSave/*.exe
+KPtoDropbox/*.exe
 *.suo
 *.user
 [Bb]in
-DropboxSave 0.0.2
+KPDataSave 0.0.3
+-----------------------
+ # Fixed login error
+ ! Rename project "DropboxSave" to "KPDataSave"
+
+KPDataSave 0.0.2
 -----------------------
  # Fixed save db at first login
  ! Public release

DropboxSave.sln

-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DropboxSave", "DropboxSave\DropboxSave.csproj", "{501C2AE6-F26F-4170-8056-A22A6B43ABDA}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{501C2AE6-F26F-4170-8056-A22A6B43ABDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{501C2AE6-F26F-4170-8056-A22A6B43ABDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{501C2AE6-F26F-4170-8056-A22A6B43ABDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{501C2AE6-F26F-4170-8056-A22A6B43ABDA}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal

DropboxSave/AccountState.cs

-/*
-    DropboxSave - KeePass plugin which save database in Dropbox service
-    Copyright (C) 2011 HexRx
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-using System;
-
-namespace DropboxSave
-{
-    public struct AccountState
-    {
-        public string Email;
-        public string Token;
-        public string Secret;
-    }
-}

DropboxSave/Config.cs

-/*
-    DropboxSave - KeePass plugin which save database in Dropbox service
-    Copyright (C) 2011 HexRx
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using KeePass.Plugins;
-
-namespace DropboxSave
-{
-    public static class Config
-    {
-        // Ключ под которым сохраняем в конфигах
-        private static string key = "DropboxSave";
-        // User data
-        private static AccountState acc;
-
-        // Сохраняем значения токенов и email
-        public static void SaveAccountState(IPluginHost host, string email, string token, string secret)
-        {
-            // Сохраняем данные в памяти
-            acc.Email = email;
-            acc.Token = token;
-            acc.Secret = secret;
-            string param = String.Format("{0};{1}", email, ToSString(token, secret));
-            // Пишем в конфиг
-            host.CustomConfig.SetString(key, param);
-        }
-
-        // Получение данных аккаунта
-        public static AccountState GetAccountState(IPluginHost host)
-        {
-            if (acc.Token != null)
-                return acc;
-            string state = host.CustomConfig.GetString(key);
-            // Если есть запись, но она пустая
-            if (state.Length == 0)
-                throw new NullReferenceException();
-            // Получем части строки
-            string[] parts = state.Split(';');
-            // Токены
-            string[] tokens = ToDString(parts[1]);
-            acc.Email = parts[0];
-            acc.Token = tokens[0];
-            acc.Secret = tokens[1];
-            return acc;
-        }
-
-        // Удаление инфомации об аккаунте
-        public static void RemoveAccountState(IPluginHost host)
-        {
-            // Чистим в памяти
-            acc = new AccountState();
-            // Чистим в конфигах
-            host.CustomConfig.SetString(key, "");
-        }
-
-        // Проверка существования записи в конфигах
-        public static bool IsAccountState(IPluginHost host)
-        {
-            if (acc.Token != null)
-                return true;
-            string state = host.CustomConfig.GetString(key);
-            if (state == null)
-                return false;
-            // Проверка на валидность
-            if (state.IndexOf(';') == -1)
-                return false;
-            return true;
-        }
-
-        // Две строки в одну
-        private static string ToSString(string str1, string str2)
-        {
-            // Две строки должны быть одинаковой длинны
-            if (str1.Length != str2.Length)
-                throw new PlgxException("String length not equal");
-            char[] arr_out = new char[str1.Length * 2];
-            int[] stri = new int[2];
-            for (int i = 0; i < str1.Length * 2; i++)
-            {
-                if (i % 2 == 0)
-                {
-                    arr_out[i] = str1[stri[0]];
-                    stri[0]++;
-                }
-                else
-                {
-                    arr_out[i] = str2[stri[1]];
-                    stri[1]++;
-                }
-            }
-            return new String(arr_out);
-        }
-
-        // Одна строка => две
-        private static string[] ToDString(string str)
-        {
-            char[] arr1 = new char[str.Length / 2];
-            char[] arr2 = new char[str.Length / 2];
-            int[] stri = new int[2];
-            for (int i = 0; i < str.Length; i++)
-            {
-                if (i % 2 == 0)
-                {
-                    arr1[stri[0]] = str[i];
-                    stri[0]++;
-                }
-                else
-                {
-                    arr2[stri[1]] = str[i];
-                    stri[1]++;
-                }
-            }
-            // Возвращаем две строки
-            return new String[2] { new String(arr1), new String(arr2) };
-        }
-    }
-}

DropboxSave/Controls/TextBoxWatermark.cs

-/*
-    DropboxSave - KeePass plugin which save database in Dropbox service
-    Copyright (C) 2011 HexRx
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using System.Drawing;
-
-namespace Controls
-{
-    public class TextBoxWatermark : TextBox
-    {
-        // Фоновый текст
-        private string _backText;
-        // Цвет текста на фоне
-        public Color BackTextColor { get; set; }
-        // Старые значения
-        private Color _oldTextColor;
-        private char _oldPasswordChar;
-        // Флаг начала ввода
-        private bool _editFlag;
-
-        public TextBoxWatermark()
-        {
-            // Цвет текста по дефолту
-            this.BackTextColor = Color.FromName(KnownColor.ScrollBar.ToString());
-        }
-
-        public string BackText
-        {
-            get { return _backText; }
-            set
-            {
-                _backText = value;
-                this.Text = value;
-            }
-        }
-
-        // Смена фона
-        private void SetBackText()
-        {
-            _oldPasswordChar = this.PasswordChar;
-            // Если поле предназначено для пароля
-            if (_oldPasswordChar != Convert.ToChar(0))
-                this.PasswordChar = new char();
-            // Сохраняем изначальный цвет текста
-            _oldTextColor = this.ForeColor;
-            // Меняем на новый
-            this.ForeColor = this.BackTextColor;
-        }
-
-        // Восстановление фона
-        private void UnSetBackText()
-        {
-            // Восстанавливаем символ пароля
-            if (_oldPasswordChar != Convert.ToChar(0))
-                this.PasswordChar = _oldPasswordChar;
-            this.ForeColor = _oldTextColor;
-        }
-
-        #region Events
-
-        // Событие создания контрола
-        protected override void OnCreateControl()
-        {
-            // Устанавливаем фоновый текст
-            SetBackText();
-        }
-
-        // Нажатие на текстовое поле
-        protected override void OnClick(EventArgs e)
-        {
-            // Если текст равен фоновому, значит необходимо отчистить поле и выставить обычный фон
-            if (this.Text == _backText)
-            {
-                // Восстанавливаем фоновый цвет
-                UnSetBackText();
-                this.Text = "";
-            }
-        }
-
-        // Уход фокуса
-        protected override void OnLeave(EventArgs e)
-        {
-            // Если ничего не написано, ставим фоновый текст
-            if (this.Text.Length == 0)
-            {
-                SetBackText();
-                this.Text = _backText;
-                // Меняем флаг ввода
-                _editFlag = false;
-            }
-        }
-
-        // Событие начала ввода
-        // Необходимо для правельной работы с переключением фокуса между элементами
-        protected override void OnKeyPress(KeyPressEventArgs e)
-        {
-            // Меняем фон только при первом вводе
-            if (!_editFlag)
-            {
-                _editFlag = true;
-                UnSetBackText();
-            }
-        }
-
-        #endregion Events
-
-        // Проверка поля на пустоту
-        public bool IsEmpty()
-        {
-            if (_backText != this.Text)
-                return false;
-            return true;
-        }
-
-    }
-}

DropboxSave/DropboxSave.csproj

-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{501C2AE6-F26F-4170-8056-A22A6B43ABDA}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>DropboxSave</RootNamespace>
-    <AssemblyName>DropboxSave</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="DropNet, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>Libs\DropNet.dll</HintPath>
-    </Reference>
-    <Reference Include="KeePass">
-      <HintPath>.\KeePass.exe</HintPath>
-    </Reference>
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Windows.Forms" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="AccountState.cs" />
-    <Compile Include="Config.cs" />
-    <Compile Include="Controls\TextBoxWatermark.cs">
-      <SubType>Component</SubType>
-    </Compile>
-    <Compile Include="DropboxSaveExt.cs" />
-    <Compile Include="Forms\DropboxSave.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="Forms\DropboxSave.Designer.cs">
-      <DependentUpon>DropboxSave.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Libs\7zip\Common\CRC.cs" />
-    <Compile Include="Libs\7zip\Compress\LZMA\LzmaBase.cs" />
-    <Compile Include="Libs\7zip\Compress\LZMA\LzmaDecoder.cs" />
-    <Compile Include="Libs\7zip\Compress\LZMA\LzmaEncoder.cs" />
-    <Compile Include="Libs\7zip\Compress\LZ\IMatchFinder.cs" />
-    <Compile Include="Libs\7zip\Compress\LZ\LzBinTree.cs" />
-    <Compile Include="Libs\7zip\Compress\LZ\LzInWindow.cs" />
-    <Compile Include="Libs\7zip\Compress\LZ\LzOutWindow.cs" />
-    <Compile Include="Libs\7zip\Compress\RangeCoder\RangeCoder.cs" />
-    <Compile Include="Libs\7zip\Compress\RangeCoder\RangeCoderBit.cs" />
-    <Compile Include="Libs\7zip\Compress\RangeCoder\RangeCoderBitTree.cs" />
-    <Compile Include="Libs\7zip\ICoder.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Properties\Resources.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DesignTime>True</DesignTime>
-      <DependentUpon>Resources.resx</DependentUpon>
-    </Compile>
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Forms\DropboxSave.resx">
-      <DependentUpon>DropboxSave.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Properties\Resources.resx">
-      <Generator>ResXFileCodeGenerator</Generator>
-      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
-    </EmbeddedResource>
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="Icons\dropbox_16x16.png" />
-    <Content Include="Icons\dropbox_48x48.png" />
-    <Content Include="Libs\DropNet.dll" />
-    <None Include="Libs\DropNetMerge.dll" />
-    <Content Include="Libs\Newtonsoft.Json.Net35.dll" />
-    <Content Include="Libs\RestSharp.dll" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PostBuildEvent>cd $(TargetDir)
-del DropNet.dll
-del RestSharp.dll
-del Newtonsoft.Json.Net35.dll</PostBuildEvent>
-  </PropertyGroup>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>

DropboxSave/DropboxSaveExt.cs

-/*
-    DropboxSave - KeePass plugin which save database in Dropbox service
-    Copyright (C) 2011 HexRx
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Windows.Forms;
-using System.IO;
-using System.Threading;
-using System.Reflection;
-
-// KeePass
-using KeePass.Plugins;
-
-// DropNet
-using DropNet;
-
-namespace DropboxSave
-{
-    public sealed class DropboxSaveExt : Plugin
-    {
-        private IPluginHost m_host;
-        // Меню
-        private ToolStripSeparator tsSep;
-        private ToolStripMenuItem tsMenuItem;
-
-        // Инициализация
-        public override bool Initialize(IPluginHost host)
-        {
-            // Динамическая загрузка сборок
-            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
-
-            m_host = host;
-
-            ToolStripItemCollection tsMenu = m_host.MainWindow.ToolsMenu.DropDownItems;
-            // Разделитель
-            tsSep = new ToolStripSeparator();
-            tsMenu.Add(tsSep);
-            // DropboxSave
-            tsMenuItem = new ToolStripMenuItem("DropboxSave", Properties.Resources.dropbox_16x16);
-            tsMenuItem.Click += new EventHandler(tsMenuItem_Click);
-            tsMenu.Add(tsMenuItem);
-
-            // Подписываемся на открытия базы
-            m_host.MainWindow.FileOpened += new EventHandler<KeePass.Forms.FileOpenedEventArgs>(MainWindow_FileOpened);
-
-            return true;
-        }
-
-        // Грузим сборку из ресурсов приложения
-        private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
-        {
-            if (args.Name.Contains("DropNet"))
-            {
-                byte[] data = Properties.Resources.DropNetMerge;
-                // Разархивируем сборку
-                SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder();
-                MemoryStream istream = new MemoryStream(data);
-                MemoryStream ostream = new MemoryStream();
-                // Считываем настройки архивации
-                byte[] properties = new byte[5];
-                if (istream.Read(properties, 0, 5) != 5)
-                    throw new PlgxException("DropboxSave Exception:78");
-                decoder.SetDecoderProperties(properties);
-                // Получаем оригинальный размер
-                long outSize = 0;
-                for (int i = 0; i < 8; i++)
-                {
-                    int v = istream.ReadByte();
-                    if (v < 0)
-                        throw new PlgxException("DropboxSave Exception:86");
-                    outSize |= ((long)(byte)v) << (8 * i);
-                }
-                decoder.Code(istream, ostream, -1, outSize, null);
-                return Assembly.Load(ostream.ToArray());
-            }
-            return null;
-        }
-
-        // Событие открытия базы
-        private void MainWindow_FileOpened(object sender, KeePass.Forms.FileOpenedEventArgs e)
-        {
-            // Пописываемся на событие по завершению сохранения данных в файл
-            m_host.MainWindow.FileSaved += new EventHandler<KeePass.Forms.FileSavedEventArgs>(MainWindow_FileSaved);
-        }
-
-        // Событие сохранения данных
-        private void MainWindow_FileSaved(object sender, KeePass.Forms.FileSavedEventArgs e)
-        {
-            // Информация об акке
-            AccountState acc;
-            try
-            {
-                acc = Config.GetAccountState(m_host);
-            }
-            catch (NullReferenceException)
-            {
-                // Если не произведен вход под акком, выходим из этого метода
-                return;
-            }
-            // Сообщение в статуc баре
-            m_host.MainWindow.SetStatusEx("Saving in Dropbox...");
-            // Отображаем прогресс бар
-            m_host.MainWindow.MainProgressBar.Visible = true;
-            m_host.MainWindow.MainProgressBar.Style = ProgressBarStyle.Marquee;
-            // Блокируем окно
-            m_host.MainWindow.UIBlockInteraction(true);
-            // Путь к файлу базы
-            string db_file = m_host.Database.IOConnectionInfo.Path;
-            DropNetClient client = new DropNetClient("hhekhlyshoqxt5s", "h0oh21e8y2seixx", acc.Token, acc.Secret);
-            // Сохранение файла базы на сервере Dropbox
-            FileInfo file = new FileInfo(db_file);
-
-            // Поток для выполнения асинхронной загрузки файла
-            new Thread(delegate() { this.UploadFileAsync(client, file); }).Start(); 
-        }
-
-        // Клик на пункте меню DropboxSave
-        void tsMenuItem_Click(object sender, EventArgs e)
-        {
-            // Форма настроек
-            using (Forms.DropboxSave ds = new Forms.DropboxSave(m_host))
-            {
-                ds.ShowDialog();
-            }
-        }
-
-        // Завершение приложения
-        public override void Terminate()
-        {
-            ToolStripItemCollection tsMenu = m_host.MainWindow.ToolsMenu.DropDownItems;
-            // Сносим пункты меню
-            tsMenu.Remove(tsSep);
-            tsMenu.Remove(tsMenuItem);
-        }
-
-        // Асинхронная загрузка
-        private void UploadFileAsync(DropNetClient client, FileInfo file)
-        {
-            // Превращаем файл в массив байт
-            byte[] content = File.ReadAllBytes(file.FullName);
-            // Выполняем загрузку файла
-            DropNet.Models.DropNetResult result = client.UploadFile("/", file.Name, content);
-            if (result.StatusCode == System.Net.HttpStatusCode.OK)
-                m_host.MainWindow.SetStatusEx("Dropbox save complete!");
-            // Скрываем прогресс
-            m_host.MainWindow.MainProgressBar.Visible = false;
-            // Разблокируем окно
-            m_host.MainWindow.UIBlockInteraction(false);
-        }
-    }
-}

DropboxSave/Forms/DropboxSave.Designer.cs

-/*
-    DropboxSave - KeePass plugin which save database in Dropbox service
-    Copyright (C) 2011 HexRx
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-namespace DropboxSave.Forms
-{
-    partial class DropboxSave
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Windows Form Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.picTopImage = new System.Windows.Forms.PictureBox();
-            this.btLogin = new System.Windows.Forms.Button();
-            this.container = new System.Windows.Forms.Panel();
-            this.tbEmail = new Controls.TextBoxWatermark();
-            this.tbPassword = new Controls.TextBoxWatermark();
-            ((System.ComponentModel.ISupportInitialize)(this.picTopImage)).BeginInit();
-            this.container.SuspendLayout();
-            this.SuspendLayout();
-            // 
-            // picTopImage
-            // 
-            this.picTopImage.Dock = System.Windows.Forms.DockStyle.Top;
-            this.picTopImage.Location = new System.Drawing.Point(0, 0);
-            this.picTopImage.Name = "picTopImage";
-            this.picTopImage.Size = new System.Drawing.Size(284, 60);
-            this.picTopImage.TabIndex = 0;
-            this.picTopImage.TabStop = false;
-            // 
-            // btLogin
-            // 
-            this.btLogin.Location = new System.Drawing.Point(101, 55);
-            this.btLogin.Name = "btLogin";
-            this.btLogin.Size = new System.Drawing.Size(75, 23);
-            this.btLogin.TabIndex = 3;
-            this.btLogin.Text = "Login";
-            this.btLogin.UseVisualStyleBackColor = true;
-            this.btLogin.Click += new System.EventHandler(this.btLogin_Click);
-            // 
-            // container
-            // 
-            this.container.Controls.Add(this.tbEmail);
-            this.container.Controls.Add(this.btLogin);
-            this.container.Controls.Add(this.tbPassword);
-            this.container.Dock = System.Windows.Forms.DockStyle.Top;
-            this.container.Location = new System.Drawing.Point(0, 60);
-            this.container.Name = "container";
-            this.container.Size = new System.Drawing.Size(284, 84);
-            this.container.TabIndex = 4;
-            // 
-            // tbEmail
-            // 
-            this.tbEmail.BackText = "Email";
-            this.tbEmail.Location = new System.Drawing.Point(71, 3);
-            this.tbEmail.Name = "tbEmail";
-            this.tbEmail.Size = new System.Drawing.Size(136, 20);
-            this.tbEmail.TabIndex = 1;
-            this.tbEmail.Text = "Email";
-            // 
-            // tbPassword
-            // 
-            this.tbPassword.BackText = "Password";
-            this.tbPassword.Location = new System.Drawing.Point(71, 29);
-            this.tbPassword.Name = "tbPassword";
-            this.tbPassword.PasswordChar = '*';
-            this.tbPassword.Size = new System.Drawing.Size(136, 20);
-            this.tbPassword.TabIndex = 2;
-            this.tbPassword.Text = "Password";
-            // 
-            // DropboxSave
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(284, 148);
-            this.Controls.Add(this.container);
-            this.Controls.Add(this.picTopImage);
-            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
-            this.Name = "DropboxSave";
-            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
-            this.Text = "DropboxSave";
-            ((System.ComponentModel.ISupportInitialize)(this.picTopImage)).EndInit();
-            this.container.ResumeLayout(false);
-            this.container.PerformLayout();
-            this.ResumeLayout(false);
-
-        }
-
-        #endregion
-
-        private System.Windows.Forms.PictureBox picTopImage;
-        private Controls.TextBoxWatermark tbEmail;
-        private Controls.TextBoxWatermark tbPassword;
-        private System.Windows.Forms.Button btLogin;
-        private System.Windows.Forms.Panel container;
-    }
-}

DropboxSave/Forms/DropboxSave.cs

-/*
-    DropboxSave - KeePass plugin which save database in Dropbox service
-    Copyright (C) 2011 HexRx
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-
-// KeePass
-using KeePass.Plugins;
-using KeePass.UI;
-
-// DropNet
-using DropNet;
-
-namespace DropboxSave.Forms
-{
-    public partial class DropboxSave : Form
-    {
-        private IPluginHost m_host;
-        //private AccountState acc;
-
-        public DropboxSave(IPluginHost host)
-        {
-            this.m_host = host;
-
-            InitializeComponent();
-
-            // Верхняя картинка
-            BannerFactory.CreateBannerEx(this, picTopImage, Properties.Resources.dropbox_48x48, "DropboxSave", "Options");
-
-            AccountState acc; 
-            try
-            {
-                acc = Config.GetAccountState(m_host);
-            }
-            // Исключение, если в конфигах нет нашей записи или она есть, но пустая
-            catch (NullReferenceException)
-            {
-                // Состояние формы входа
-                FormLogin();
-                return;
-            }
-            // Состояние формы выхода
-            FormLogout(acc.Email);
-        }
-
-        // Вход в аккаунт
-        private void btLogin_Click(object sender, EventArgs e)
-        {
-            // Токены приложения
-            DropNetClient client = new DropNetClient("hhekhlyshoqxt5s", "h0oh21e8y2seixx");
-            // Проверяем поля на заполненность
-            if (tbEmail.IsEmpty() && tbPassword.IsEmpty())
-            {
-                MessageBox.Show("Please input email and password!", "Authentication", MessageBoxButtons.OK, MessageBoxIcon.Information);
-                return;
-            }
-            if (tbEmail.IsEmpty())
-            {
-                MessageBox.Show("Please input email!", "Authentication", MessageBoxButtons.OK, MessageBoxIcon.Information);
-                return;
-            }
-            if (tbPassword.IsEmpty())
-            {
-                MessageBox.Show("Please input password!", "Authentication", MessageBoxButtons.OK, MessageBoxIcon.Information);
-                return;
-            }
-            try
-            {
-                // Входим под мылом и паролем
-                client.Login(tbEmail.Text, tbPassword.Text);
-            }
-            // Неверные данные
-            catch (DropNet.Exceptions.DropboxException)
-            {
-                MessageBox.Show("Email or password incorrect!", "Authentication", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
-                return;
-            }
-            // Имейл аккаунта
-            string email = client.Account_Info().email;
-            // Сохраняем полученные токены и email
-            Config.SaveAccountState(m_host, email, client.UserLogin.Token, client.UserLogin.Secret);
-            FormLogout(email);
-        }        
-
-        // Переключение формы в состоняние logout
-        private void FormLogout(string email)
-        {
-            // Скрываем поля email, password и кнопку входа
-            tbEmail.Visible = false;
-            tbPassword.Visible = false;
-            btLogin.Visible = false;
-            // Метка
-            LinkLabel lbLogout = new LinkLabel();
-            lbLogout.Name = "lbLogout";
-            lbLogout.AutoSize = true;
-            // Ровняем более-мение по центру контейнера
-            lbLogout.Location = new Point(container.Width / 2 - lbLogout.Width, container.Height / 2 - lbLogout.Height);
-            lbLogout.Text = String.Format("Logout with {0}", email);
-            // Нажатие на метки
-            lbLogout.Click += new EventHandler(lbLogout_Click);
-            // Вставляем метку в контейнер
-            container.Controls.Add(lbLogout); 
-        }
-
-        // Форма в состоянии login
-        private void FormLogin()
-        {
-            // Сносим элемент lbLogout с контейнера
-            container.Controls.RemoveByKey("lbLogout");
-            // Отображаем необходимые элементы
-            tbEmail.Visible = true;
-            tbPassword.Visible = true;
-            btLogin.Visible = true;
-        }
-
-        // Клик на метке выхода
-        private void lbLogout_Click(object sender, EventArgs e)
-        {
-            FormLogin();
-            // Отчищаем данные аккаунта
-            Config.RemoveAccountState(m_host);
-        }
-
-    }
-}

DropboxSave/Forms/DropboxSave.resx

-<?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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Add a comment to this file

DropboxSave/Icons/dropbox_16x16.png

Removed
Old image
Add a comment to this file

DropboxSave/Icons/dropbox_48x48.png

Removed
Old image

DropboxSave/Libs/7zip/Common/CRC.cs

-// Common/CRC.cs
-
-namespace SevenZip
-{
-	class CRC
-	{
-		public static readonly uint[] Table;
-
-		static CRC()
-		{
-			Table = new uint[256];
-			const uint kPoly = 0xEDB88320;
-			for (uint i = 0; i < 256; i++)
-			{
-				uint r = i;
-				for (int j = 0; j < 8; j++)
-					if ((r & 1) != 0)
-						r = (r >> 1) ^ kPoly;
-					else
-						r >>= 1;
-				Table[i] = r;
-			}
-		}
-
-		uint _value = 0xFFFFFFFF;
-
-		public void Init() { _value = 0xFFFFFFFF; }
-
-		public void UpdateByte(byte b)
-		{
-			_value = Table[(((byte)(_value)) ^ b)] ^ (_value >> 8);
-		}
-
-		public void Update(byte[] data, uint offset, uint size)
-		{
-			for (uint i = 0; i < size; i++)
-				_value = Table[(((byte)(_value)) ^ data[offset + i])] ^ (_value >> 8);
-		}
-
-		public uint GetDigest() { return _value ^ 0xFFFFFFFF; }
-
-		static uint CalculateDigest(byte[] data, uint offset, uint size)
-		{
-			CRC crc = new CRC();
-			// crc.Init();
-			crc.Update(data, offset, size);
-			return crc.GetDigest();
-		}
-
-		static bool VerifyDigest(uint digest, byte[] data, uint offset, uint size)
-		{
-			return (CalculateDigest(data, offset, size) == digest);
-		}
-	}
-}

DropboxSave/Libs/7zip/Compress/LZ/IMatchFinder.cs

-// IMatchFinder.cs
-
-using System;
-
-namespace SevenZip.Compression.LZ
-{
-	interface IInWindowStream
-	{
-		void SetStream(System.IO.Stream inStream);
-		void Init();
-		void ReleaseStream();
-		Byte GetIndexByte(Int32 index);
-		UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit);
-		UInt32 GetNumAvailableBytes();
-	}
-
-	interface IMatchFinder : IInWindowStream
-	{
-		void Create(UInt32 historySize, UInt32 keepAddBufferBefore,
-				UInt32 matchMaxLen, UInt32 keepAddBufferAfter);
-		UInt32 GetMatches(UInt32[] distances);
-		void Skip(UInt32 num);
-	}
-}

DropboxSave/Libs/7zip/Compress/LZ/LzBinTree.cs

-// LzBinTree.cs
-
-using System;
-
-namespace SevenZip.Compression.LZ
-{
-	public class BinTree : InWindow, IMatchFinder
-	{
-		UInt32 _cyclicBufferPos;
-		UInt32 _cyclicBufferSize = 0;
-		UInt32 _matchMaxLen;
-
-		UInt32[] _son;
-		UInt32[] _hash;
-
-		UInt32 _cutValue = 0xFF;
-		UInt32 _hashMask;
-		UInt32 _hashSizeSum = 0;
-
-		bool HASH_ARRAY = true;
-
-		const UInt32 kHash2Size = 1 << 10;
-		const UInt32 kHash3Size = 1 << 16;
-		const UInt32 kBT2HashSize = 1 << 16;
-		const UInt32 kStartMaxLen = 1;
-		const UInt32 kHash3Offset = kHash2Size;
-		const UInt32 kEmptyHashValue = 0;
-		const UInt32 kMaxValForNormalize = ((UInt32)1 << 31) - 1;
-	
-		UInt32 kNumHashDirectBytes = 0;
-		UInt32 kMinMatchCheck = 4;
-		UInt32 kFixHashSize = kHash2Size + kHash3Size;
-		
-		public void SetType(int numHashBytes)
-		{
-			HASH_ARRAY = (numHashBytes > 2);
-			if (HASH_ARRAY)
-			{
-				kNumHashDirectBytes = 0;
-				kMinMatchCheck = 4;
-				kFixHashSize = kHash2Size + kHash3Size;
-			}
-			else
-			{
-				kNumHashDirectBytes = 2;
-				kMinMatchCheck = 2 + 1;
-				kFixHashSize = 0;
-			}
-		}
-
-		public new void SetStream(System.IO.Stream stream) { base.SetStream(stream); }
-		public new void ReleaseStream() { base.ReleaseStream(); }
-		
-		public new void Init()
-		{
-			base.Init();
-			for (UInt32 i = 0; i < _hashSizeSum; i++)
-				_hash[i] = kEmptyHashValue;
-			_cyclicBufferPos = 0;
-			ReduceOffsets(-1);
-		}
-
-		public new void MovePos()
-		{
-			if (++_cyclicBufferPos >= _cyclicBufferSize)
-				_cyclicBufferPos = 0;
-			base.MovePos();
-			if (_pos == kMaxValForNormalize)
-				Normalize();
-		}
-
-		public new Byte GetIndexByte(Int32 index) { return base.GetIndexByte(index); }
-
-		public new UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit)
-		{ return base.GetMatchLen(index, distance, limit); }
-
-		public new UInt32 GetNumAvailableBytes() { return base.GetNumAvailableBytes(); }
-
-		public void Create(UInt32 historySize, UInt32 keepAddBufferBefore,
-				UInt32 matchMaxLen, UInt32 keepAddBufferAfter)
-		{
-			if (historySize > kMaxValForNormalize - 256)
-				throw new Exception();
-			_cutValue = 16 + (matchMaxLen >> 1);
-				
-			UInt32 windowReservSize = (historySize + keepAddBufferBefore +
-					matchMaxLen + keepAddBufferAfter) / 2 + 256;
-
-			base.Create(historySize + keepAddBufferBefore, matchMaxLen + keepAddBufferAfter, windowReservSize);
-
-			_matchMaxLen = matchMaxLen;
-
-			UInt32 cyclicBufferSize = historySize + 1;
-			if (_cyclicBufferSize != cyclicBufferSize)
-				_son = new UInt32[(_cyclicBufferSize = cyclicBufferSize) * 2];
-
-			UInt32 hs = kBT2HashSize;
-
-			if (HASH_ARRAY)
-			{
-				hs = historySize - 1;
-				hs |= (hs >> 1);
-				hs |= (hs >> 2);
-				hs |= (hs >> 4);
-				hs |= (hs >> 8);
-				hs >>= 1;
-				hs |= 0xFFFF;
-				if (hs > (1 << 24))
-					hs >>= 1;
-				_hashMask = hs;
-				hs++;
-				hs += kFixHashSize;
-			}
-			if (hs != _hashSizeSum)
-				_hash = new UInt32[_hashSizeSum = hs];
-		}
-
-		public UInt32 GetMatches(UInt32[] distances)
-		{
-			UInt32 lenLimit;
-			if (_pos + _matchMaxLen <= _streamPos)
-				lenLimit = _matchMaxLen;
-			else
-			{
-				lenLimit = _streamPos - _pos;
-				if (lenLimit < kMinMatchCheck)
-				{
-					MovePos();
-					return 0;
-				}
-			}
-
-			UInt32 offset = 0;
-			UInt32 matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0;
-			UInt32 cur = _bufferOffset + _pos;
-			UInt32 maxLen = kStartMaxLen; // to avoid items for len < hashSize;
-			UInt32 hashValue, hash2Value = 0, hash3Value = 0;
-
-			if (HASH_ARRAY)
-			{
-				UInt32 temp = CRC.Table[_bufferBase[cur]] ^ _bufferBase[cur + 1];
-				hash2Value = temp & (kHash2Size - 1);
-				temp ^= ((UInt32)(_bufferBase[cur + 2]) << 8);
-				hash3Value = temp & (kHash3Size - 1);
-				hashValue = (temp ^ (CRC.Table[_bufferBase[cur + 3]] << 5)) & _hashMask;
-			}
-			else
-				hashValue = _bufferBase[cur] ^ ((UInt32)(_bufferBase[cur + 1]) << 8);
-
-			UInt32 curMatch = _hash[kFixHashSize + hashValue];
-			if (HASH_ARRAY)
-			{
-				UInt32 curMatch2 = _hash[hash2Value];
-				UInt32 curMatch3 = _hash[kHash3Offset + hash3Value];
-				_hash[hash2Value] = _pos;
-				_hash[kHash3Offset + hash3Value] = _pos;
-				if (curMatch2 > matchMinPos)
-					if (_bufferBase[_bufferOffset + curMatch2] == _bufferBase[cur])
-					{
-						distances[offset++] = maxLen = 2;
-						distances[offset++] = _pos - curMatch2 - 1;
-					}
-				if (curMatch3 > matchMinPos)
-					if (_bufferBase[_bufferOffset + curMatch3] == _bufferBase[cur])
-					{
-						if (curMatch3 == curMatch2)
-							offset -= 2;
-						distances[offset++] = maxLen = 3;
-						distances[offset++] = _pos - curMatch3 - 1;
-						curMatch2 = curMatch3;
-					}
-				if (offset != 0 && curMatch2 == curMatch)
-				{
-					offset -= 2;
-					maxLen = kStartMaxLen;
-				}
-			}
-
-			_hash[kFixHashSize + hashValue] = _pos;
-
-			UInt32 ptr0 = (_cyclicBufferPos << 1) + 1;
-			UInt32 ptr1 = (_cyclicBufferPos << 1);
-
-			UInt32 len0, len1;
-			len0 = len1 = kNumHashDirectBytes;
-			
-			if (kNumHashDirectBytes != 0)
-			{
-				if (curMatch > matchMinPos)
-				{
-					if (_bufferBase[_bufferOffset + curMatch + kNumHashDirectBytes] !=
-							_bufferBase[cur + kNumHashDirectBytes])
-					{
-						distances[offset++] = maxLen = kNumHashDirectBytes;
-						distances[offset++] = _pos - curMatch - 1;
-					}
-				}
-			}
-			
-			UInt32 count = _cutValue;
-			
-			while(true)
-			{
-				if(curMatch <= matchMinPos || count-- == 0)
-				{
-					_son[ptr0] = _son[ptr1] = kEmptyHashValue;
-					break;
-				}
-				UInt32 delta = _pos - curMatch;
-				UInt32 cyclicPos = ((delta <= _cyclicBufferPos) ?
-							(_cyclicBufferPos - delta) :
-							(_cyclicBufferPos - delta + _cyclicBufferSize)) << 1;
-
-				UInt32 pby1 = _bufferOffset + curMatch;
-				UInt32 len = Math.Min(len0, len1);
-				if (_bufferBase[pby1 + len] == _bufferBase[cur + len])
-				{
-					while(++len != lenLimit)
-						if (_bufferBase[pby1 + len] != _bufferBase[cur + len])
-							break;
-					if (maxLen < len)
-					{
-						distances[offset++] = maxLen = len;
-						distances[offset++] = delta - 1;
-						if (len == lenLimit)
-						{
-							_son[ptr1] = _son[cyclicPos];
-							_son[ptr0] = _son[cyclicPos + 1];
-							break;
-						}
-					}
-				}
-				if (_bufferBase[pby1 + len] < _bufferBase[cur + len])
-				{
-					_son[ptr1] = curMatch;
-					ptr1 = cyclicPos + 1;
-					curMatch = _son[ptr1];
-					len1 = len;
-				}
-				else
-				{
-					_son[ptr0] = curMatch;
-					ptr0 = cyclicPos;
-					curMatch = _son[ptr0];
-					len0 = len;
-				}
-			}
-			MovePos();
-			return offset;
-		}
-
-		public void Skip(UInt32 num)
-		{
-			do
-			{
-				UInt32 lenLimit;
-				if (_pos + _matchMaxLen <= _streamPos)
-					lenLimit = _matchMaxLen;
-				else
-				{
-					lenLimit = _streamPos - _pos;
-					if (lenLimit < kMinMatchCheck)
-					{
-						MovePos();
-						continue;
-					}
-				}
-
-				UInt32 matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0;
-				UInt32 cur = _bufferOffset + _pos;
-
-				UInt32 hashValue;
-
-				if (HASH_ARRAY)
-				{
-					UInt32 temp = CRC.Table[_bufferBase[cur]] ^ _bufferBase[cur + 1];
-					UInt32 hash2Value = temp & (kHash2Size - 1);
-					_hash[hash2Value] = _pos;
-					temp ^= ((UInt32)(_bufferBase[cur + 2]) << 8);
-					UInt32 hash3Value = temp & (kHash3Size - 1);
-					_hash[kHash3Offset + hash3Value] = _pos;
-					hashValue = (temp ^ (CRC.Table[_bufferBase[cur + 3]] << 5)) & _hashMask;
-				}
-				else
-					hashValue = _bufferBase[cur] ^ ((UInt32)(_bufferBase[cur + 1]) << 8);
-
-				UInt32 curMatch = _hash[kFixHashSize + hashValue];
-				_hash[kFixHashSize + hashValue] = _pos;
-
-				UInt32 ptr0 = (_cyclicBufferPos << 1) + 1;
-				UInt32 ptr1 = (_cyclicBufferPos << 1);
-
-				UInt32 len0, len1;
-				len0 = len1 = kNumHashDirectBytes;
-
-				UInt32 count = _cutValue;
-				while (true)
-				{
-					if (curMatch <= matchMinPos || count-- == 0)
-					{
-						_son[ptr0] = _son[ptr1] = kEmptyHashValue;
-						break;
-					}
-
-					UInt32 delta = _pos - curMatch;
-					UInt32 cyclicPos = ((delta <= _cyclicBufferPos) ?
-								(_cyclicBufferPos - delta) :
-								(_cyclicBufferPos - delta + _cyclicBufferSize)) << 1;
-
-					UInt32 pby1 = _bufferOffset + curMatch;
-					UInt32 len = Math.Min(len0, len1);
-					if (_bufferBase[pby1 + len] == _bufferBase[cur + len])
-					{
-						while (++len != lenLimit)
-							if (_bufferBase[pby1 + len] != _bufferBase[cur + len])
-								break;
-						if (len == lenLimit)
-						{
-							_son[ptr1] = _son[cyclicPos];
-							_son[ptr0] = _son[cyclicPos + 1];
-							break;
-						}
-					}
-					if (_bufferBase[pby1 + len] < _bufferBase[cur + len])
-					{
-						_son[ptr1] = curMatch;
-						ptr1 = cyclicPos + 1;
-						curMatch = _son[ptr1];
-						len1 = len;
-					}
-					else
-					{
-						_son[ptr0] = curMatch;
-						ptr0 = cyclicPos;
-						curMatch = _son[ptr0];
-						len0 = len;
-					}
-				}
-				MovePos();
-			}
-			while (--num != 0);
-		}
-
-		void NormalizeLinks(UInt32[] items, UInt32 numItems, UInt32 subValue)
-		{
-			for (UInt32 i = 0; i < numItems; i++)
-			{
-				UInt32 value = items[i];
-				if (value <= subValue)
-					value = kEmptyHashValue;
-				else
-					value -= subValue;
-				items[i] = value;
-			}
-		}
-
-		void Normalize()
-		{
-			UInt32 subValue = _pos - _cyclicBufferSize;
-			NormalizeLinks(_son, _cyclicBufferSize * 2, subValue);
-			NormalizeLinks(_hash, _hashSizeSum, subValue);
-			ReduceOffsets((Int32)subValue);
-		}
-
-		public void SetCutValue(UInt32 cutValue) { _cutValue = cutValue; }
-	}
-}

DropboxSave/Libs/7zip/Compress/LZ/LzInWindow.cs

-// LzInWindow.cs
-
-using System;
-
-namespace SevenZip.Compression.LZ
-{
-	public class InWindow
-	{
-		public Byte[] _bufferBase = null; // pointer to buffer with data
-		System.IO.Stream _stream;
-		UInt32 _posLimit; // offset (from _buffer) of first byte when new block reading must be done
-		bool _streamEndWasReached; // if (true) then _streamPos shows real end of stream
-
-		UInt32 _pointerToLastSafePosition;
-
-		public UInt32 _bufferOffset;
-
-		public UInt32 _blockSize; // Size of Allocated memory block
-		public UInt32 _pos; // offset (from _buffer) of curent byte
-		UInt32 _keepSizeBefore; // how many BYTEs must be kept in buffer before _pos
-		UInt32 _keepSizeAfter; // how many BYTEs must be kept buffer after _pos
-		public UInt32 _streamPos; // offset (from _buffer) of first not read byte from Stream
-
-		public void MoveBlock()
-		{
-			UInt32 offset = (UInt32)(_bufferOffset) + _pos - _keepSizeBefore;
-			// we need one additional byte, since MovePos moves on 1 byte.
-			if (offset > 0)
-				offset--;
-			
-			UInt32 numBytes = (UInt32)(_bufferOffset) + _streamPos - offset;
-
-			// check negative offset ????
-			for (UInt32 i = 0; i < numBytes; i++)
-				_bufferBase[i] = _bufferBase[offset + i];
-			_bufferOffset -= offset;
-		}
-
-		public virtual void ReadBlock()
-		{
-			if (_streamEndWasReached)
-				return;
-			while (true)
-			{
-				int size = (int)((0 - _bufferOffset) + _blockSize - _streamPos);
-				if (size == 0)
-					return;
-				int numReadBytes = _stream.Read(_bufferBase, (int)(_bufferOffset + _streamPos), size);
-				if (numReadBytes == 0)
-				{
-					_posLimit = _streamPos;
-					UInt32 pointerToPostion = _bufferOffset + _posLimit;
-					if (pointerToPostion > _pointerToLastSafePosition)
-						_posLimit = (UInt32)(_pointerToLastSafePosition - _bufferOffset);
-
-					_streamEndWasReached = true;
-					return;
-				}
-				_streamPos += (UInt32)numReadBytes;
-				if (_streamPos >= _pos + _keepSizeAfter)
-					_posLimit = _streamPos - _keepSizeAfter;
-			}
-		}
-
-		void Free() { _bufferBase = null; }
-
-		public void Create(UInt32 keepSizeBefore, UInt32 keepSizeAfter, UInt32 keepSizeReserv)
-		{
-			_keepSizeBefore = keepSizeBefore;
-			_keepSizeAfter = keepSizeAfter;
-			UInt32 blockSize = keepSizeBefore + keepSizeAfter + keepSizeReserv;
-			if (_bufferBase == null || _blockSize != blockSize)
-			{
-				Free();
-				_blockSize = blockSize;
-				_bufferBase = new Byte[_blockSize];
-			}
-			_pointerToLastSafePosition = _blockSize - keepSizeAfter;
-		}
-
-		public void SetStream(System.IO.Stream stream) { _stream = stream; }
-		public void ReleaseStream() { _stream = null; }
-
-		public void Init()
-		{
-			_bufferOffset = 0;
-			_pos = 0;
-			_streamPos = 0;
-			_streamEndWasReached = false;
-			ReadBlock();
-		}
-
-		public void MovePos()
-		{
-			_pos++;
-			if (_pos > _posLimit)
-			{
-				UInt32 pointerToPostion = _bufferOffset + _pos;
-				if (pointerToPostion > _pointerToLastSafePosition)
-					MoveBlock();
-				ReadBlock();
-			}
-		}
-
-		public Byte GetIndexByte(Int32 index) { return _bufferBase[_bufferOffset + _pos + index]; }
-
-		// index + limit have not to exceed _keepSizeAfter;
-		public UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit)
-		{
-			if (_streamEndWasReached)
-				if ((_pos + index) + limit > _streamPos)
-					limit = _streamPos - (UInt32)(_pos + index);
-			distance++;
-			// Byte *pby = _buffer + (size_t)_pos + index;
-			UInt32 pby = _bufferOffset + _pos + (UInt32)index;
-
-			UInt32 i;
-			for (i = 0; i < limit && _bufferBase[pby + i] == _bufferBase[pby + i - distance]; i++);
-			return i;
-		}
-
-		public UInt32 GetNumAvailableBytes() { return _streamPos - _pos; }
-
-		public void ReduceOffsets(Int32 subValue)
-		{
-			_bufferOffset += (UInt32)subValue;
-			_posLimit -= (UInt32)subValue;
-			_pos -= (UInt32)subValue;
-			_streamPos -= (UInt32)subValue;
-		}
-	}
-}

DropboxSave/Libs/7zip/Compress/LZ/LzOutWindow.cs

-// LzOutWindow.cs
-
-namespace SevenZip.Compression.LZ
-{
-	public class OutWindow
-	{
-		byte[] _buffer = null;
-		uint _pos;
-		uint _windowSize = 0;
-		uint _streamPos;
-		System.IO.Stream _stream;
-
-		public uint TrainSize = 0;
-
-		public void Create(uint windowSize)
-		{
-			if (_windowSize != windowSize)
-			{
-				// System.GC.Collect();
-				_buffer = new byte[windowSize];
-			}
-			_windowSize = windowSize;
-			_pos = 0;
-			_streamPos = 0;
-		}
-
-		public void Init(System.IO.Stream stream, bool solid)
-		{
-			ReleaseStream();
-			_stream = stream;
-			if (!solid)
-			{
-				_streamPos = 0;
-				_pos = 0;
-				TrainSize = 0;
-			}
-		}
-	
-		public bool Train(System.IO.Stream stream)
-		{
-			long len = stream.Length;
-			uint size = (len < _windowSize) ? (uint)len : _windowSize;
-			TrainSize = size;
-			stream.Position = len - size;
-			_streamPos = _pos = 0;
-			while (size > 0)
-			{
-				uint curSize = _windowSize - _pos;
-				if (size < curSize)
-					curSize = size;
-				int numReadBytes = stream.Read(_buffer, (int)_pos, (int)curSize);
-				if (numReadBytes == 0)
-					return false;
-				size -= (uint)numReadBytes;
-				_pos += (uint)numReadBytes;
-				_streamPos += (uint)numReadBytes;
-				if (_pos == _windowSize)
-					_streamPos = _pos = 0;
-			}
-			return true;
-		}
-
-		public void ReleaseStream()
-		{
-			Flush();
-			_stream = null;
-		}
-
-		public void Flush()
-		{
-			uint size = _pos - _streamPos;
-			if (size == 0)
-				return;
-			_stream.Write(_buffer, (int)_streamPos, (int)size);
-			if (_pos >= _windowSize)
-				_pos = 0;
-			_streamPos = _pos;
-		}
-
-		public void CopyBlock(uint distance, uint len)
-		{
-			uint pos = _pos - distance - 1;
-			if (pos >= _windowSize)
-				pos += _windowSize;
-			for (; len > 0; len--)
-			{
-				if (pos >= _windowSize)
-					pos = 0;
-				_buffer[_pos++] = _buffer[pos++];
-				if (_pos >= _windowSize)
-					Flush();
-			}
-		}
-
-		public void PutByte(byte b)
-		{
-			_buffer[_pos++] = b;
-			if (_pos >= _windowSize)
-				Flush();
-		}
-
-		public byte GetByte(uint distance)
-		{
-			uint pos = _pos - distance - 1;
-			if (pos >= _windowSize)
-				pos += _windowSize;
-			return _buffer[pos];
-		}
-	}
-}

DropboxSave/Libs/7zip/Compress/LZMA/LzmaBase.cs

-// LzmaBase.cs
-
-namespace SevenZip.Compression.LZMA
-{
-	internal abstract class Base
-	{
-		public const uint kNumRepDistances = 4;
-		public const uint kNumStates = 12;
-
-		// static byte []kLiteralNextStates  = {0, 0, 0, 0, 1, 2, 3, 4,  5,  6,   4, 5};
-		// static byte []kMatchNextStates    = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10};
-		// static byte []kRepNextStates      = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11};
-		// static byte []kShortRepNextStates = {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11};
-
-		public struct State
-		{
-			public uint Index;
-			public void Init() { Index = 0; }
-			public void UpdateChar()
-			{
-				if (Index < 4) Index = 0;
-				else if (Index < 10) Index -= 3;
-				else Index -= 6;
-			}
-			public void UpdateMatch() { Index = (uint)(Index < 7 ? 7 : 10); }
-			public void UpdateRep() { Index = (uint)(Index < 7 ? 8 : 11); }
-			public void UpdateShortRep() { Index = (uint)(Index < 7 ? 9 : 11); }
-			public bool IsCharState() { return Index < 7; }
-		}
-
-		public const int kNumPosSlotBits = 6;
-		public const int kDicLogSizeMin = 0;
-		// public const int kDicLogSizeMax = 30;
-		// public const uint kDistTableSizeMax = kDicLogSizeMax * 2;
-
-		public const int kNumLenToPosStatesBits = 2; // it's for speed optimization
-		public const uint kNumLenToPosStates = 1 << kNumLenToPosStatesBits;
-
-		public const uint kMatchMinLen = 2;
-
-		public static uint GetLenToPosState(uint len)
-		{
-			len -= kMatchMinLen;
-			if (len < kNumLenToPosStates)
-				return len;
-			return (uint)(kNumLenToPosStates - 1);
-		}
-
-		public const int kNumAlignBits = 4;
-		public const uint kAlignTableSize = 1 << kNumAlignBits;
-		public const uint kAlignMask = (kAlignTableSize - 1);
-
-		public const uint kStartPosModelIndex = 4;
-		public const uint kEndPosModelIndex = 14;
-		public const uint kNumPosModels = kEndPosModelIndex - kStartPosModelIndex;
-
-		public const uint kNumFullDistances = 1 << ((int)kEndPosModelIndex / 2);
-
-		public const uint kNumLitPosStatesBitsEncodingMax = 4;
-		public const uint kNumLitContextBitsMax = 8;
-
-		public const int kNumPosStatesBitsMax = 4;
-		public const uint kNumPosStatesMax = (1 << kNumPosStatesBitsMax);
-		public const int kNumPosStatesBitsEncodingMax = 4;
-		public const uint kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax);
-
-		public const int kNumLowLenBits = 3;
-		public const int kNumMidLenBits = 3;
-		public const int kNumHighLenBits = 8;
-		public const uint kNumLowLenSymbols = 1 << kNumLowLenBits;
-		public const uint kNumMidLenSymbols = 1 << kNumMidLenBits;
-		public const uint kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols +
-				(1 << kNumHighLenBits);
-		public const uint kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1;
-	}
-}

DropboxSave/Libs/7zip/Compress/LZMA/LzmaDecoder.cs

-// LzmaDecoder.cs
-
-using System;
-
-namespace SevenZip.Compression.LZMA
-{
-	using RangeCoder;
-
-	public class Decoder : ICoder, ISetDecoderProperties // ,System.IO.Stream
-	{
-		class LenDecoder
-		{
-			BitDecoder m_Choice = new BitDecoder();
-			BitDecoder m_Choice2 = new BitDecoder();
-			BitTreeDecoder[] m_LowCoder = new BitTreeDecoder[Base.kNumPosStatesMax];
-			BitTreeDecoder[] m_MidCoder = new BitTreeDecoder[Base.kNumPosStatesMax];
-			BitTreeDecoder m_HighCoder = new BitTreeDecoder(Base.kNumHighLenBits);
-			uint m_NumPosStates = 0;
-
-			public void Create(uint numPosStates)
-			{
-				for (uint posState = m_NumPosStates; posState < numPosStates; posState++)
-				{
-					m_LowCoder[posState] = new BitTreeDecoder(Base.kNumLowLenBits);
-					m_MidCoder[posState] = new BitTreeDecoder(Base.kNumMidLenBits);
-				}
-				m_NumPosStates = numPosStates;
-			}
-
-			public void Init()
-			{
-				m_Choice.Init();
-				for (uint posState = 0; posState < m_NumPosStates; posState++)
-				{
-					m_LowCoder[posState].Init();
-					m_MidCoder[posState].Init();
-				}
-				m_Choice2.Init();
-				m_HighCoder.Init();
-			}
-
-			public uint Decode(RangeCoder.Decoder rangeDecoder, uint posState)
-			{
-				if (m_Choice.Decode(rangeDecoder) == 0)
-					return m_LowCoder[posState].Decode(rangeDecoder);
-				else
-				{
-					uint symbol = Base.kNumLowLenSymbols;
-					if (m_Choice2.Decode(rangeDecoder) == 0)
-						symbol += m_MidCoder[posState].Decode(rangeDecoder);
-					else
-					{
-						symbol += Base.kNumMidLenSymbols;
-						symbol += m_HighCoder.Decode(rangeDecoder);
-					}
-					return symbol;
-				}
-			}
-		}
-
-		class LiteralDecoder
-		{
-			struct Decoder2
-			{
-				BitDecoder[] m_Decoders;
-				public void Create() { m_Decoders = new BitDecoder[0x300]; }
-				public void Init() { for (int i = 0; i < 0x300; i++) m_Decoders[i].Init(); }
-
-				public byte DecodeNormal(RangeCoder.Decoder rangeDecoder)
-				{
-					uint symbol = 1;
-					do
-						symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder);
-					while (symbol < 0x100);
-					return (byte)symbol;
-				}
-
-				public byte DecodeWithMatchByte(RangeCoder.Decoder rangeDecoder, byte matchByte)
-				{
-					uint symbol = 1;
-					do
-					{
-						uint matchBit = (uint)(matchByte >> 7) & 1;
-						matchByte <<= 1;
-						uint bit = m_Decoders[((1 + matchBit) << 8) + symbol].Decode(rangeDecoder);
-						symbol = (symbol << 1) | bit;
-						if (matchBit != bit)
-						{
-							while (symbol < 0x100)
-								symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder);
-							break;
-						}
-					}
-					while (symbol < 0x100);
-					return (byte)symbol;
-				}
-			}
-
-			Decoder2[] m_Coders;
-			int m_NumPrevBits;
-			int m_NumPosBits;
-			uint m_PosMask;
-
-			public void Create(int numPosBits, int numPrevBits)
-			{
-				if (m_Coders != null && m_NumPrevBits == numPrevBits &&
-					m_NumPosBits == numPosBits)
-					return;
-				m_NumPosBits = numPosBits;
-				m_PosMask = ((uint)1 << numPosBits) - 1;
-				m_NumPrevBits = numPrevBits;
-				uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits);
-				m_Coders = new Decoder2[numStates];
-				for (uint i = 0; i < numStates; i++)
-					m_Coders[i].Create();
-			}
-
-			public void Init()
-			{
-				uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits);
-				for (uint i = 0; i < numStates; i++)
-					m_Coders[i].Init();
-			}
-
-			uint GetState(uint pos, byte prevByte)
-			{ return ((pos & m_PosMask) << m_NumPrevBits) + (uint)(prevByte >> (8 - m_NumPrevBits)); }
-
-			public byte DecodeNormal(RangeCoder.Decoder rangeDecoder, uint pos, byte prevByte)
-			{ return m_Coders[GetState(pos, prevByte)].DecodeNormal(rangeDecoder); }
-
-			public byte DecodeWithMatchByte(RangeCoder.Decoder rangeDecoder, uint pos, byte prevByte, byte matchByte)
-			{ return m_Coders[GetState(pos, prevByte)].DecodeWithMatchByte(rangeDecoder, matchByte); }
-		};
-
-		LZ.OutWindow m_OutWindow = new LZ.OutWindow();
-		RangeCoder.Decoder m_RangeDecoder = new RangeCoder.Decoder();
-
-		BitDecoder[] m_IsMatchDecoders = new BitDecoder[Base.kNumStates << Base.kNumPosStatesBitsMax];
-		BitDecoder[] m_IsRepDecoders = new BitDecoder[Base.kNumStates];
-		BitDecoder[] m_IsRepG0Decoders = new BitDecoder[Base.kNumStates];
-		BitDecoder[] m_IsRepG1Decoders = new BitDecoder[Base.kNumStates];
-		BitDecoder[] m_IsRepG2Decoders = new BitDecoder[Base.kNumStates];
-		BitDecoder[] m_IsRep0LongDecoders = new BitDecoder[Base.kNumStates << Base.kNumPosStatesBitsMax];
-
-		BitTreeDecoder[] m_PosSlotDecoder = new BitTreeDecoder[Base.kNumLenToPosStates];
-		BitDecoder[] m_PosDecoders = new BitDecoder[Base.kNumFullDistances - Base.kEndPosModelIndex];
-
-		BitTreeDecoder m_PosAlignDecoder = new BitTreeDecoder(Base.kNumAlignBits);
-
-		LenDecoder m_LenDecoder = new LenDecoder();
-		LenDecoder m_RepLenDecoder = new LenDecoder();
-
-		LiteralDecoder m_LiteralDecoder = new LiteralDecoder();
-
-		uint m_DictionarySize;
-		uint m_DictionarySizeCheck;
-
-		uint m_PosStateMask;
-
-		public Decoder()
-		{
-			m_DictionarySize = 0xFFFFFFFF;
-			for (int i = 0; i < Base.kNumLenToPosStates; i++)
-				m_PosSlotDecoder[i] = new BitTreeDecoder(Base.kNumPosSlotBits);
-		}
-
-		void SetDictionarySize(uint dictionarySize)
-		{
-			if (m_DictionarySize != dictionarySize)
-			{
-				m_DictionarySize = dictionarySize;
-				m_DictionarySizeCheck = Math.Max(m_DictionarySize, 1);
-				uint blockSize = Math.Max(m_DictionarySizeCheck, (1 << 12));
-				m_OutWindow.Create(blockSize);
-			}
-		}
-
-		void SetLiteralProperties(int lp, int lc)
-		{
-			if (lp > 8)
-				throw new InvalidParamException();
-			if (lc > 8)
-				throw new InvalidParamException();
-			m_LiteralDecoder.Create(lp, lc);
-		}
-
-		void SetPosBitsProperties(int pb)
-		{
-			if (pb > Base.kNumPosStatesBitsMax)
-				throw new InvalidParamException();
-			uint numPosStates = (uint)1 << pb;
-			m_LenDecoder.Create(numPosStates);
-			m_RepLenDecoder.Create(numPosStates);
-			m_PosStateMask = numPosStates - 1;
-		}
-
-		bool _solid = false;
-		void Init(System.IO.Stream inStream, System.IO.Stream outStream)
-		{