Exemplo n.º 1
0
        private void GetItemsLocalesAsync(IEnumerable <WowApiLocalizedData> items)
        {
            CultureInfo   culture   = Settings.LocalizationCulture;
            var           apiKey    = Services.ViewModels.SettingsViewModel.GetBattleNetApiKey();
            IDataProvider provider  = DataProviderManager.GetHttpCachedProvider();
            var           grabber   = new WowApiClient(provider, culture, apiKey);
            Type          dataType  = SelectedDataType.DataType;
            int           batchSize = 50; // for query throttling, this is the number of items per second we allow to be processed
            TimeSpan      throttle  = TimeSpan.FromMilliseconds(1000d / batchSize);

            Observable.Start(() =>
            {
                var unprocessed = items.Where(o => o.Status == LocalizationStatus.Unprocessed);
                while (unprocessed.Any())
                {
                    var item = unprocessed.First();
                    try
                    {
                        item.Query = grabber.GetUrl(dataType, item.ItemId);
                        item.Data  = provider.ProvideData(item.Query);
                    }
                    catch (Exception ex)
                    {
                        // if we got an error, keep it to investigate
                        item.Error = ex.Message;
                        break;     // stop processing if any error
                    }
                    System.Threading.Thread.Sleep((int)throttle.TotalMilliseconds);
                }
            });
        }
        private void GetItemsLocalesAsync(IEnumerable <LocalizedItem> items)
        {
            CultureInfo   culture  = Settings.LocalizationCulture;
            IDataProvider provider = DataProviderManager.GetHttpCachedProvider();
            var           grabber  = new WowheadClient(provider, culture);

            Observable.Start(() =>
                             Parallel.ForEach(items, item =>
            {
                try
                {
                    // update translated item
                    item.TranslatedEntity = grabber.GetItem(item.DatabaseEntity.Id);
                    item.Error            = null;
                }
                catch (Exception ex)
                {
                    // if we got an error, keep it to investigate
                    item.Error = ex.Message;
                }
            }));
        }
Exemplo n.º 3
0
        private void GetItemsLocalesAsync(IEnumerable <LocalizedItem> items, LocalizationSource localizationSource)
        {
            CultureInfo   culture  = Settings.LocalizationCulture;
            IDataProvider provider = DataProviderManager.GetHttpCachedProvider();

            Func <int, dbItem> grabItem = null;
            object             grabber;

            if (localizationSource == LocalizationSource.Wowhead)
            {
                grabber  = new WowheadApi.WowheadClient(provider, culture);
                grabItem = (id) =>
                {
                    var data = ((WowheadApi.WowheadClient)grabber).GetItem(id);
                    var item = new dbItem {
                        Id = id
                    };
                    if (data != null)
                    {
                        item.Name = data.Name;
                        if (string.IsNullOrEmpty(data.Description) == false)
                        {
                            item.Description = data.Description;
                        }
                    }
                    return(item);
                };
            }
            else if (localizationSource == LocalizationSource.BattleNet)
            {
                var apiKey = Services.ViewModels.SettingsViewModel.GetBattleNetApiKey();
                grabber  = new WowApi.WowApiClient(provider, culture, apiKey);
                grabItem = (id) =>
                {
                    var data = ((WowApi.WowApiClient)grabber).GetItem(id);
                    var item = new dbItem {
                        Id = id
                    };
                    if (data != null)
                    {
                        item.Name = data.Name;
                        if (string.IsNullOrEmpty(data.Description) == false)
                        {
                            item.Description = data.Description;
                        }
                    }
                    return(item);
                };
            }

            Parallel.ForEach(items, item => item.ResetStatus());

            Observable.Start(() =>
                             Parallel.ForEach(items, item =>
            {
                try
                {
                    // update translated item
                    item.TranslatedEntity = grabItem(item.DatabaseEntity.Id);
                    item.Error            = null;
                }
                catch (Exception ex)
                {
                    // if we got an error, keep it to investigate
                    item.Error = ex.Message;
                }
            }));
        }