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")); }
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")); }
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")); }
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); } }