public void Write20AsLatestVersion()
        {
            var userAgent = ".NET CLR 2.0";

            var expectedVersion = generateLatestVersionString(2, 0, "full", null);

            var actualVersion = JsonVersions.WriteLatestVersions(userAgent);

            Assert.AreEqual(expectedVersion, actualVersion);
        }
        public void Write35SP1ClientAsLatestVersion()
        {
            var userAgent = ".NET Client 3.5";

            var expectedVersion = generateLatestVersionString(3, 5, "client", 1);

            var actualVersion = JsonVersions.WriteLatestVersions(userAgent);

            Assert.AreEqual(expectedVersion, actualVersion);
        }
        public void Write35AsLatestVersion()
        {
            var userAgent = ".NET CLR 3.5.21022";

            var expectedVersion = generateLatestVersionString(3, 5, "full", null);

            var actualVersion = JsonVersions.WriteLatestVersions(userAgent);

            Assert.AreEqual(expectedVersion, actualVersion);
        }
        public void Write40ClientAsLatestVersion()
        {
            var userAgent = ".NET4.0C; .NET CLR 2.0";

            var expectedVersion = generateLatestVersionString(4, 0, "client", null);

            var actualVersion = JsonVersions.WriteLatestVersions(userAgent);

            Assert.AreEqual(expectedVersion, actualVersion);
        }
        public void WriteNullAsLatestVersion()
        {
            var userAgent = "";

            var expectedVersion = "SmallestDotNet.latestVersion = null;";

            var actualVersion = JsonVersions.WriteLatestVersions(userAgent);

            Assert.AreEqual(expectedVersion, actualVersion);
        }
        public async Task <bool> Update(JsonVersions jsonVersions, DataVersions dataVersions)
        {
            if (!(jsonVersions.Contents > dataVersions.Contents))
            {
                return(false);
            }

            await UpdateContents(jsonVersions, dataVersions);

            return(true);
        }
        public async Task Update()
        {
            DataBaseHelper.CreateDataBase();

            var dataVersionsEntiry = DataBaseHelper.Select <DataVersionsEntity>(q => q.Take(1)).First();
            var jsonVersionsJson   = await App.DIContainer.Resolve <ISourceDataProvider>().JsonDataVersions();

            var dataVersions = new DataVersions(dataVersionsEntiry);
            var jsonVersions = new JsonVersions(jsonVersionsJson);

            // コンテンツ
            await App.DIContainer.Resolve <IContentsUpdater>().Update(jsonVersions, dataVersions);

            foreach (var plugin in App.Plugins)
            {
                await plugin.DataUpdate();
            }
        }
        private async Task UpdateContents(JsonVersions jsonVersions, DataVersions dataVersions)
        {
            var jsonContents = await _sourceDataProvider.JsonContentSummariesAndDetails();

            _localDataProvider.UnzipImages(await _sourceDataProvider.Images());
            foreach (var(summary, detail) in jsonContents)
            {
                _localDataProvider.UnzipImages(await _sourceDataProvider.Images(summary?.ContentId));
            }

            using (var db = DataBaseHelper.CreateConnection())
            {
                var dbSummaries = _localDataProvider.ContentSummaries(db).ToList();
                var dbDetails   = _localDataProvider.ContentDetails(db).ToList();

                foreach (var(summary, detail) in jsonContents)
                {
                    var dbSummary = dbSummaries.Where(d => d.ContentId == summary.ContentId).FirstOrDefault() ?? new ContentSummaryEntity();
                    var dbDetail  = dbDetails.Where(d => d.ContentId == detail.ContentId).FirstOrDefault() ?? new ContentDetailEntity();

                    dbSummaries.Remove(dbSummary);
                    dbDetails.Remove(dbDetail);

                    _localDataProvider.InsertOrReplace(db, PropertyCopier.CopyTo(summary, dbSummary));
                    _localDataProvider.InsertOrReplace(db, PropertyCopier.CopyTo(detail, dbDetail));
                }

                foreach (var dbSummary in dbSummaries)
                {
                    db.Delete(dbSummary);
                }
                foreach (var dbDetail in dbDetails)
                {
                    db.Delete(dbDetail);
                }

                // バージョン
                dataVersions.Entity.Contents = jsonVersions.Json.Contents;
                _localDataProvider.InsertOrReplace(db, dataVersions.Entity);
            }
        }