Пример #1
0
        public async Task <ActionResult> Download(int setId)
        {
            var ctx = new LanguageDownloadContext(setId)
            {
                AvailableResources = await CheckAvailableResources()
            };

            if (ctx.AvailableResources.Resources.Any())
            {
                var task = AsyncRunner.Run((c, ct, obj) => DownloadCore(c, ct, obj as LanguageDownloadContext), ctx);
            }

            return(RedirectToAction("List"));
        }
Пример #2
0
        public async Task <ActionResult> Download(int setId)
        {
            if (_services.Permissions.Authorize(StandardPermissionProvider.ManageLanguages))
            {
                var ctx = new LanguageDownloadContext(setId)
                {
                    AvailableResources = await CheckAvailableResources()
                };

                if (ctx.AvailableResources.Resources.Any())
                {
                    var task = AsyncRunner.Run((c, ct, obj) => DownloadCore(c, ct, obj as LanguageDownloadContext), ctx);
                }
            }

            return(RedirectToAction("List"));
        }
Пример #3
0
        public async Task <ActionResult> Download(int setId)
        {
            if (_services.Permissions.Authorize(StandardPermissionProvider.ManageLanguages))
            {
                var ctx = new LanguageDownloadContext(setId);
                ctx.AvailableResources = await CheckAvailableResources();

                if (ctx.AvailableResources.Resources.Any())
                {
                    var task = AsyncRunner.Run(
                        (container, ct, obj) => DownloadCore(container, ct, obj as LanguageDownloadContext),
                        ctx,
                        CancellationToken.None,
                        TaskCreationOptions.None,
                        TaskScheduler.Default).ConfigureAwait(false);
                }
            }

            return(RedirectToAction("List"));
        }
Пример #4
0
        private void DownloadCore(ILifetimeScope scope, CancellationToken ct, LanguageDownloadContext context)
        {
            var    asyncState              = scope.Resolve <IAsyncState>();
            var    services                = scope.Resolve <ICommonServices>();
            var    languageService         = scope.Resolve <ILanguageService>();
            var    genericAttributeService = scope.Resolve <IGenericAttributeService>();
            var    logger       = scope.Resolve <ILogger>();
            string tempFilePath = null;

            try
            {
                // 1. Download resources
                var state = asyncState.Get <LanguageDownloadState>() ?? new LanguageDownloadState
                {
                    Id = context.SetId,
                    ProgressMessage = T("Admin.Configuration.Languages.DownloadingResources")
                };
                asyncState.Set(state);

                var resources = context.AvailableResources.Resources.First(x => x.Id == context.SetId);
                tempFilePath = DownloadAvailableResources(resources.DownloadUrl, services.StoreContext.CurrentStore.Url).Result;

                state.ProgressMessage = T("Admin.Configuration.Languages.ImportResources");
                asyncState.Set(state);

                // 2. Create language entity (if required)
                var allLanguages = languageService.GetAllLanguages();
                var lastLanguage = allLanguages.OrderByDescending(x => x.DisplayOrder).FirstOrDefault();

                var language = languageService.GetLanguageByCulture(resources.Language.Culture);
                if (language == null)
                {
                    language = new Language();
                    language.LanguageCulture   = resources.Language.Culture;
                    language.UniqueSeoCode     = resources.Language.TwoLetterIsoCode;
                    language.Name              = GetCultureDisplayName(resources.Language.Culture) ?? resources.Name;
                    language.FlagImageFileName = GetFlagFileName(resources.Language.Culture);
                    language.Rtl          = resources.Language.Rtl;
                    language.Published    = false;
                    language.DisplayOrder = lastLanguage != null ? lastLanguage.DisplayOrder + 1 : 0;

                    languageService.InsertLanguage(language);
                }

                // 3. Import resources
                var xmlDoc = new XmlDocument();
                xmlDoc.Load(tempFilePath);

                services.Localization.ImportResourcesFromXml(language, xmlDoc);

                var str = JsonConvert.SerializeObject(new LastResourcesImportInfo
                {
                    TranslatedPercentage = resources.TranslatedPercentage,
                    ImportedOn           = DateTime.UtcNow
                });
                genericAttributeService.SaveAttribute(language, "LastResourcesImportInfo", str);
            }
            catch (Exception ex)
            {
                logger.ErrorsAll(ex);
            }
            finally
            {
                if (asyncState.Exists <LanguageDownloadState>())
                {
                    asyncState.Remove <LanguageDownloadState>();
                }

                FileSystemHelper.DeleteFile(tempFilePath);
            }
        }