Beispiel #1
0
        public static void Update(this DatabaseInfo info,
                                  Func <DatabaseInfo, bool> queryUpdate,
                                  ReportUpdateResult report)
        {
            switch (info.Details.Source)
            {
            case DROPBOX_UPDATER:
                var dropbox = new Synchronizer(info,
                                               new DropBoxAdapter(), queryUpdate);

                dropbox.Synchronize(report);
                break;

            case WEBDAV_UPDATER:
                var webdav = new Synchronizer(info,
                                              new WebDavAdapter(), queryUpdate);

                webdav.Synchronize(report);
                break;

            case SKYDRIVE_UPDATER:
                var skyDrive = new Synchronizer(info,
                                                new SkyDriveAdapter(), queryUpdate);

                skyDrive.Synchronize(report);
                break;

            case WEB_UPDATER:
                WebUpdater.Update(info,
                                  queryUpdate, report);
                break;
            }
        }
Beispiel #2
0
        public static void Update(DatabaseInfo info,
            Func<DatabaseInfo, bool> queryUpdate,
            ReportUpdateResult report)
        {
            if (info == null) throw new ArgumentNullException("info");
            if (queryUpdate == null) throw new ArgumentNullException("queryUpdate");
            if (report == null) throw new ArgumentNullException("report");

            var details = info.Details;
            var url = new Uri(details.Url);

            var client = CreateClient(url.UserInfo);
            client.DownloadAsync(url.LocalPath, x =>
            {
                if (!queryUpdate(info))
                    return;

                if (x == null)
                {
                    report(info, false,
                        DropBoxResources.DownloadError);

                    return;
                }

                info.SetDatabase(x, details);
                report(info, true, null);
            });
        }
Beispiel #3
0
        public static void Update(this DatabaseInfo info,
            Func<DatabaseInfo, bool> queryUpdate,
            ReportUpdateResult report)
        {
            switch (info.Details.Source)
            {
                case DROPBOX_UPDATER:
                    var dropbox = new Synchronizer(info,
                        new DropBoxAdapter(), queryUpdate);

                    dropbox.Synchronize(report);
                    break;

                case WEBDAV_UPDATER:
                    var webdav = new Synchronizer(info,
                        new WebDavAdapter(), queryUpdate);

                    webdav.Synchronize(report);
                    break;

                case SKYDRIVE_UPDATER:
                    var skyDrive = new Synchronizer(info,
                        new SkyDriveAdapter(), queryUpdate);

                    skyDrive.Synchronize(report);
                    break;

                case WEB_UPDATER:
                    WebUpdater.Update(info,
                        queryUpdate, report);
                    break;
            }
        }
Beispiel #4
0
        public void Synchronize(ReportUpdateResult reporter)
        {
            if (reporter == null)
                throw new ArgumentNullException("reporter");

            _reporter = reporter;
            Try(x => x.List(Listed));
        }
Beispiel #5
0
        public void Synchronize(ReportUpdateResult reporter)
        {
            if (reporter == null)
            {
                throw new ArgumentNullException("reporter");
            }

            _reporter = reporter;
            Try(x => x.List(Listed));
        }
Beispiel #6
0
        public static void Update(DatabaseInfo info,
            Func<DatabaseInfo, bool> queryUpdate,
            ReportUpdateResult report)
        {
            if (info == null) throw new ArgumentNullException("info");
            if (queryUpdate == null) throw new ArgumentNullException("queryUpdate");
            if (report == null) throw new ArgumentNullException("report");

            var details = info.Details;
            var urlInfo = WebUtils.Deserialize(details.Url);
            var credentials = WebUtils.CreateCredentials(
                urlInfo.User, urlInfo.Password, urlInfo.Domain);

            WebUtils.Download(urlInfo.Url, credentials, (req, getResponse) =>
            {
                if (!queryUpdate(info))
                    return;

                HttpWebResponse res;

                try
                {
                    res = getResponse();
                }
                catch (WebException ex)
                {
                    report(info, SyncResults.Failed, ex.Message);
                    return;
                }

                using (var buffer = new MemoryStream())
                {
                    using (var stream = res.GetResponseStream())
                    {
                        BufferEx.CopyStream(stream, buffer);
                        buffer.Position = 0;
                    }

                    var check = DatabaseVerifier
                        .VerifyUnattened(buffer);

                    if (check.Result == VerifyResultTypes.Error)
                    {
                        report(info, SyncResults.Failed,
                            check.Message);

                        return;
                    }

                    info.SetDatabase(buffer, details);
                    report(info, SyncResults.Downloaded, null);
                }
            });
        }
Beispiel #7
0
        public static void Update(DatabaseInfo info,
            Func<DatabaseInfo, bool> queryUpdate,
            ReportUpdateResult report)
        {
            switch (info.Details.Source)
            {
                case DROPBOX_UPDATER:
                    DropBoxUpdater.Update(info, queryUpdate,
                        x => Report(info, x, report));
                    break;

                case WEB_UPDATER:
                    WebUpdater.Update(info,
                        queryUpdate, report);
                    break;
            }
        }
Beispiel #8
0
        private static void Report(DatabaseInfo info,
            SyncCompleteInfo result, ReportUpdateResult report)
        {
            string msg = null;
            var details = info.Details;

            switch (result.Result)
            {
                case SyncResults.Downloaded:
                    using (var buffer = new MemoryStream(result.Database))
                        info.SetDatabase(buffer, details);
                    break;

                case SyncResults.Uploaded:
                    details.Modified = result.Modified;
                    info.SaveDetails();
                    break;

                case SyncResults.Conflict:
                    details.Url = result.Path;
                    details.Modified = result.Modified;
                    info.SaveDetails();

                    msg = string.Format(
                        Properties.Resources.Conflict,
                        new Uri(result.Path).LocalPath);
                    break;

                case SyncResults.Failed:
                    msg = Properties.Resources
                        .DownloadError;
                    break;
            }

            report(info, result.Result, msg);
        }
Beispiel #9
0
        public static async void Update(DatabaseInfo info,
                                        Func <DatabaseInfo, bool> queryUpdate,
                                        ReportUpdateResult report)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }
            if (queryUpdate == null)
            {
                throw new ArgumentNullException("queryUpdate");
            }
            if (report == null)
            {
                throw new ArgumentNullException("report");
            }

            // Connect to the current SD card.
            ExternalStorageDevice _sdCard = (await ExternalStorage.GetExternalStorageDevicesAsync()).FirstOrDefault();

            // If the SD card is present, add KDBX files to the Files collection.
            if (_sdCard != null)
            {
                try
                {
                    // Look for a folder on the SD card named Files.
                    ExternalStorageFolder dbFolder = await _sdCard.GetFolderAsync("CodeSafe");

                    // Get all files from the CodeSafe folder.
                    IEnumerable <ExternalStorageFile> routeFiles = await dbFolder.GetFilesAsync();

                    bool found = false;
                    foreach (ExternalStorageFile esf in routeFiles)
                    {
                        if (esf.Name.RemoveKdbx() == info.Details.Name)
                        {
                            found = true;
                            Stream stream = await esf.OpenForReadAsync();

                            var check = DatabaseVerifier
                                        .VerifyUnattened(stream);

                            if (check.Result == VerifyResultTypes.Error)
                            {
                                report(info, SyncResults.Failed,
                                       check.Message);
                                return;
                            }

                            info.SetDatabase(stream, info.Details);
                            report(info, SyncResults.Downloaded, null);

                            break;
                        }
                    }

                    if (!found)
                    {
                        MessageBox.Show("The original database file is not found in CodeSafe folder on your SD card anymore. Did you delete it?");
                    }
                }
                catch (FileNotFoundException)
                {
                    // No CodeSafe folder is present.
                    MessageBox.Show("The CodeSafe folder is missing on your SD card. Add a CodeSafe folder containing at least one .kdbx file and try again.");
                }
            }
            else
            {
                // No SD card is present.
                MessageBox.Show("The SD card is mssing. Insert an SD card that has a CodeSafe folder containing at least one .kdbx file and try again.");
            }
        }
Beispiel #10
0
        public static async void Update(DatabaseInfo info,
            Func<DatabaseInfo, bool> queryUpdate,
            ReportUpdateResult report)
        {
            if (info == null) throw new ArgumentNullException("info");
            if (queryUpdate == null) throw new ArgumentNullException("queryUpdate");
            if (report == null) throw new ArgumentNullException("report");

            // Connect to the current SD card.
            ExternalStorageDevice _sdCard = (await ExternalStorage.GetExternalStorageDevicesAsync()).FirstOrDefault();

            // If the SD card is present, add KDBX files to the Files collection.
            if (_sdCard != null)
            {
                try
                {
                    // Look for a folder on the SD card named Files.
                    ExternalStorageFolder dbFolder = await _sdCard.GetFolderAsync("CodeSafe");

                    // Get all files from the CodeSafe folder.
                    IEnumerable<ExternalStorageFile> routeFiles = await dbFolder.GetFilesAsync();

                    bool found = false;
                    foreach (ExternalStorageFile esf in routeFiles)
                    {
                        if (esf.Name.RemoveKdbx() == info.Details.Name)
                        {
                            found = true;
                            Stream stream = await esf.OpenForReadAsync();

                            var check = DatabaseVerifier
                                .VerifyUnattened(stream);

                            if (check.Result == VerifyResultTypes.Error)
                            {
                                report(info, SyncResults.Failed,
                                    check.Message);
                                return;
                            }

                            info.SetDatabase(stream, info.Details);
                            report(info, SyncResults.Downloaded, null);

                            break;
                        }
                    }

                    if (!found)
                        MessageBox.Show("The original database file is not found in CodeSafe folder on your SD card anymore. Did you delete it?");
                }
                catch (FileNotFoundException)
                {
                    // No CodeSafe folder is present.
                    MessageBox.Show("The CodeSafe folder is missing on your SD card. Add a CodeSafe folder containing at least one .kdbx file and try again.");
                }

            }
            else
            {
                // No SD card is present.
                MessageBox.Show("The SD card is mssing. Insert an SD card that has a CodeSafe folder containing at least one .kdbx file and try again.");
            }
        }
Beispiel #11
0
        public static void Update(DatabaseInfo info,
                                  Func <DatabaseInfo, bool> queryUpdate,
                                  ReportUpdateResult report)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }
            if (queryUpdate == null)
            {
                throw new ArgumentNullException("queryUpdate");
            }
            if (report == null)
            {
                throw new ArgumentNullException("report");
            }

            var details     = info.Details;
            var urlInfo     = WebUtils.Deserialize(details.Url);
            var credentials = WebUtils.CreateCredentials(
                urlInfo.User, urlInfo.Password, urlInfo.Domain);

            WebUtils.Download(urlInfo.Url, credentials, (req, getResponse) =>
            {
                if (!queryUpdate(info))
                {
                    return;
                }

                HttpWebResponse res;

                try
                {
                    res = getResponse();
                }
                catch (WebException ex)
                {
                    report(info, SyncResults.Failed, ex.Message);
                    return;
                }

                using (var buffer = new MemoryStream())
                {
                    using (var stream = res.GetResponseStream())
                    {
                        BufferEx.CopyStream(stream, buffer);
                        buffer.Position = 0;
                    }

                    var check = DatabaseVerifier
                                .VerifyUnattened(buffer);

                    if (check.Result == VerifyResultTypes.Error)
                    {
                        report(info, SyncResults.Failed,
                               check.Message);

                        return;
                    }

                    info.SetDatabase(buffer, details);
                    report(info, SyncResults.Downloaded, null);
                }
            });
        }