protected override void InitializeServiceCollection()
        {
            var gitHubApiV3Client    = RestService.For <IGitHubApiV3>(CreateServerErrorHttpClient(GitHubConstants.GitHubRestApiUrl));
            var gitHubGraphQLCLient  = RestService.For <IGitHubGraphQLApi>(BaseApiService.CreateHttpClient(GitHubConstants.GitHubGraphQLApi));
            var azureFunctionsClient = RestService.For <IAzureFunctionsApi>(BaseApiService.CreateHttpClient(AzureConstants.AzureFunctionsApiUrl));

            ServiceCollection.Initialize(azureFunctionsClient, gitHubApiV3Client, gitHubGraphQLCLient);
        }
예제 #2
0
        protected virtual void InitializeServiceCollection()
        {
            var gitHubApiV3Client    = RefitExtensions.For <IGitHubApiV3>(BaseApiService.CreateHttpClient(GitHubConstants.GitHubRestApiUrl));
            var gitHubGraphQLCLient  = RefitExtensions.For <IGitHubGraphQLApi>(BaseApiService.CreateHttpClient(GitHubConstants.GitHubGraphQLApi));
            var azureFunctionsClient = RefitExtensions.For <IAzureFunctionsApi>(BaseApiService.CreateHttpClient(AzureConstants.AzureFunctionsApiUrl));

            ServiceCollection.Initialize(azureFunctionsClient, gitHubApiV3Client, gitHubGraphQLCLient);
        }
예제 #3
0
 public MainPageViewModel()
 {
     ApiCommand = new Command(async() =>
     {
         var issue13ApiContract = RestService.For <IIssue13ApiContract>(BaseApiService.CreateHttpClient(AppConstants.ApiUrl));
         var service            = new Issue13ApiService(issue13ApiContract);
         await service.GetIsAlive();
     });
 }
예제 #4
0
        private async Task <string> GetFounderStringAsync(EventId id, string founder)
        {
            var founderName = await GetFullNationNameAsync(founder, id);

            var founderUrl    = $"https://www.nationstates.net/nation={BaseApiService.ToID(founder)}";
            var founderString = $"[{founderName}]({founderUrl})";

            return(founderString);
        }
예제 #5
0
        public async Task GetBasicStats(params string[] args)
        {
            var id = LogEventIdProvider.GetEventIdByType(LoggingEvent.GetRegionStats);

            try
            {
                string regionName = string.Join(" ", args);
                _logger.LogInformation(id, LogMessageBuilder.Build(id, $"BasicRegionStats for {regionName} requested."));
                XmlDocument regionStats = await dataService.GetRegionStatsAsync(regionName, id);

                if (regionStats != null)
                {
                    var name       = regionStats.GetElementsByTagName("NAME")[0].InnerText;
                    var numnations = regionStats.GetElementsByTagName("NUMNATIONS")[0].InnerText;
                    var wadelegate = regionStats.GetElementsByTagName("DELEGATE")[0].InnerText;
                    var founder    = regionStats.GetElementsByTagName("FOUNDER")[0].InnerText;
                    var founded    = regionStats.GetElementsByTagName("FOUNDED")[0].InnerText;
                    var flagUrl    = regionStats.GetElementsByTagName("FLAG")[0].InnerText;
                    var power      = regionStats.GetElementsByTagName("POWER")[0].InnerText;
                    var tags       = regionStats.GetElementsByTagName("TAGS")[0].ChildNodes;
                    var tagList    = "";
                    for (int i = 0; i < tags.Count; i++)
                    {
                        tagList += BaseApiService.FromID(tags.Item(i).InnerText) + ", ";
                    }
                    tagList = tagList.Remove(tagList.Length - 2);
                    var regionUrl = $"https://www.nationstates.net/region={BaseApiService.ToID(regionName)}";



                    var builder = new EmbedBuilder();
                    builder.WithThumbnailUrl(flagUrl);
                    builder.WithTitle($"BasicStats for Region");
                    builder.WithDescription($"**[{name}]({regionUrl})** {Environment.NewLine}" +
                                            $"[{numnations} nations]({regionUrl}/page=list_nations) | {founded} | Power: {power}");
                    builder.AddField("Founder", $"[{await GetFullNationName(founder, id)}](https://www.nationstates.net/nation={BaseApiService.ToID(founder)})");
                    builder.AddField("Delegate", await GetDelegateNationString(wadelegate, id));
                    builder.WithFooter($"NationStatesApiBot {AppSettings.VERSION} by drehtisch");
                    builder.WithColor(new Color(_rnd.Next(0, 256), _rnd.Next(0, 256), _rnd.Next(0, 256)));
                    await ReplyAsync(embed : builder.Build());
                }
                else
                {
                    var builder = new EmbedBuilder();
                    builder.WithTitle($"Something went wrong.");
                    builder.WithDescription("Probably no such region.");
                    await ReplyAsync(embed : builder.Build());
                }
            }
            catch (Exception ex)
            {
                _logger.LogCritical(id, ex, LogMessageBuilder.Build(id, "A critical error occured."));
                await ReplyAsync("Something went wrong. Sorry :(");
            }
        }
예제 #6
0
        private async Task <string> GetDelegateNationString(string name, EventId eventId)
        {
            XmlDocument nationStats = await dataService.GetDelegateString(name, eventId);

            var fullName       = nationStats.GetElementsByTagName("FULLNAME")[0].InnerText;
            var influence      = nationStats.GetElementsByTagName("INFLUENCE")[0].InnerText;
            var census         = nationStats.GetElementsByTagName("CENSUS")[0].ChildNodes;
            var influenceValue = census[0].ChildNodes[0].InnerText;
            var endorsements   = census[1].ChildNodes[0].InnerText;

            return($"[{fullName}](https://www.nationstates.net/nation={BaseApiService.ToID(name)}) | {endorsements} endorsements | {influenceValue} influence ({influence})");
        }
예제 #7
0
        private QueryResult <BaseItemDto> GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, string[] includeItemTypes)
        {
            var user = !request.UserId.Equals(Guid.Empty) ? _userManager.GetUserById(request.UserId) : null;

            var item = string.IsNullOrEmpty(request.Id) ?
                       (!request.UserId.Equals(Guid.Empty) ? _libraryManager.GetUserRootFolder() :
                        _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id);

            var dtoOptions = GetDtoOptions(_authContext, request);

            var query = new InternalItemsQuery(user)
            {
                Limit                  = request.Limit,
                IncludeItemTypes       = includeItemTypes,
                SimilarTo              = item,
                DtoOptions             = dtoOptions,
                EnableTotalRecordCount = false
            };

            // ExcludeArtistIds
            if (!string.IsNullOrEmpty(request.ExcludeArtistIds))
            {
                query.ExcludeArtistIds = BaseApiService.GetGuids(request.ExcludeArtistIds);
            }

            List <BaseItem> itemsResult;

            if (item is MusicArtist)
            {
                query.IncludeItemTypes = Array.Empty <string>();

                itemsResult = _libraryManager.GetArtists(query).Items.Select(i => i.Item1).ToList();
            }
            else
            {
                itemsResult = _libraryManager.GetItemList(query);
            }

            var returnList = _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user);

            var result = new QueryResult <BaseItemDto>
            {
                Items = returnList,

                TotalRecordCount = itemsResult.Count
            };

            return(result);
        }
        public async Task GetBasicStatsAsync(params string[] args)
        {
            var id = LogEventIdProvider.GetEventIdByType(LoggingEvent.GetNationStats);

            try
            {
                string nationName = string.Join(" ", args);
                _logger.LogInformation(id, LogMessageBuilder.Build(id, $"BasicNationStats for {nationName} requested."));
                XmlDocument nationStats = await _apiDataService.GetNationStatsAsync(nationName, id);

                if (nationStats != null)
                {
                    var demonymplural = nationStats.GetElementsByTagName("DEMONYM2PLURAL")[0].InnerText;
                    var category      = nationStats.GetElementsByTagName("CATEGORY")[0].InnerText;
                    var flagUrl       = nationStats.GetElementsByTagName("FLAG")[0].InnerText;
                    var fullname      = nationStats.GetElementsByTagName("FULLNAME")[0].InnerText;
                    var population    = nationStats.GetElementsByTagName("POPULATION")[0].InnerText;
                    var region        = nationStats.GetElementsByTagName("REGION")[0].InnerText;
                    var founded       = nationStats.GetElementsByTagName("FOUNDED")[0].InnerText;
                    var lastActivity  = nationStats.GetElementsByTagName("LASTACTIVITY")[0].InnerText;
                    var Influence     = nationStats.GetElementsByTagName("INFLUENCE")[0].InnerText;
                    var wa            = nationStats.GetElementsByTagName("UNSTATUS")[0].InnerText;

                    var freedom      = nationStats.GetElementsByTagName("FREEDOM")[0].ChildNodes;
                    var civilStr     = freedom[0].InnerText;
                    var economyStr   = freedom[1].InnerText;
                    var politicalStr = freedom[2].InnerText;

                    var census           = nationStats.GetElementsByTagName("CENSUS")[0].ChildNodes;
                    var civilRights      = census[0].ChildNodes[0].InnerText;
                    var economy          = census[1].ChildNodes[0].InnerText;
                    var politicalFreedom = census[2].ChildNodes[0].InnerText;
                    var influenceValue   = census[3].ChildNodes[0].InnerText;
                    var endorsementCount = census[4].ChildNodes[0].InnerText;
                    var residency        = census[5].ChildNodes[0].InnerText;
                    var residencyDbl     = Convert.ToDouble(residency, _locale);
                    var residencyYears   = (int)(residencyDbl / 365.242199);

                    var populationdbl = Convert.ToDouble(population);

                    var nationUrl = $"https://www.nationstates.net/nation={BaseApiService.ToID(nationName)}";
                    var regionUrl = $"https://www.nationstates.net/region={BaseApiService.ToID(region)}";

                    var builder = new EmbedBuilder();
                    builder.WithThumbnailUrl(flagUrl);
                    builder.WithTitle($"BasicStats for Nation");
                    builder.WithDescription($"**[{fullname}]({nationUrl})** {Environment.NewLine}" +
                                            $"{(populationdbl / 1000.0 < 1 ? populationdbl : populationdbl / 1000.0).ToString(_locale)} {(populationdbl / 1000.0 < 1 ? "million" : "billion")} {demonymplural} | " +
                                            $"Founded {founded} | " +
                                            $"Last active {lastActivity}");
                    builder.AddField("Region",
                                     $"[{region}]({regionUrl}) ", true);
                    int residencyDays = (int)(residencyDbl % 365.242199);
                    builder.AddField("Residency", $"Resident for " +
                                     $"{(residencyYears < 1 ? "" : $"{residencyYears} year" + $"{(residencyYears > 1 ? "s" : "")}")} " +
                                     $"{residencyDays} { (residencyDays != 1 ? $"days" : "day")}", true
                                     );
                    builder.AddField(category, $"C: {civilStr} ({civilRights}) | E: {economyStr} ({economy}) | P: {politicalStr} ({politicalFreedom})");
                    var waVoteString = "";
                    if (wa == "WA Member")
                    {
                        var gaVote = nationStats.GetElementsByTagName("GAVOTE")[0].InnerText;
                        var scVote = nationStats.GetElementsByTagName("SCVOTE")[0].InnerText;
                        if (!string.IsNullOrWhiteSpace(gaVote))
                        {
                            waVoteString += $"GA Vote: {gaVote} | ";
                        }
                        if (!string.IsNullOrWhiteSpace(scVote))
                        {
                            waVoteString += $"SC Vote: {scVote} | ";
                        }
                    }
                    builder.AddField(wa, $"{waVoteString} {endorsementCount} endorsements | {influenceValue} Influence ({Influence})", true);
                    builder.WithFooter(DiscordBotService.FooterString);
                    builder.WithColor(new Color(_rnd.Next(0, 256), _rnd.Next(0, 256), _rnd.Next(0, 256)));
                    await ReplyAsync(embed : builder.Build());
                }
                else
                {
                    var builder = new EmbedBuilder();
                    builder.WithTitle($"Something went wrong.");
                    builder.WithDescription("Probably no such nation.");
                    await ReplyAsync(embed : builder.Build());
                }
            }
 public PlayerController(BaseApiService <Player, int> ts) : base(ts)
 {
 }
 public BaseApiController(BaseApiService <T, Tid> service)
 {
     _service = service;
 }
예제 #11
0
        static IContainer CreateContainer()
        {
            Device.SetFlags(new[] { "Markup_Experimental", "IndicatorView_Experimental", "AppTheme_Experimental" });

            var builder = new ContainerBuilder();

            //Register Xamarin.Essentials
            builder.RegisterType <AppInfoImplementation>().As <IAppInfo>().SingleInstance();
            builder.RegisterType <BrowserImplementation>().As <IBrowser>().SingleInstance();
            builder.RegisterType <EmailImplementation>().As <IEmail>().SingleInstance();
            builder.RegisterType <FileSystemImplementation>().As <IFileSystem>().SingleInstance();
            builder.RegisterType <LauncherImplementation>().As <ILauncher>().SingleInstance();
            builder.RegisterType <MainThreadImplementation>().As <IMainThread>().SingleInstance();
            builder.RegisterType <PreferencesImplementation>().As <IPreferences>().SingleInstance();
            builder.RegisterType <SecureStorageImplementation>().As <ISecureStorage>().SingleInstance();
            builder.RegisterType <VersionTrackingImplementation>().As <IVersionTracking>().SingleInstance();

            //Register Services
            builder.RegisterType <AnalyticsService>().As <IAnalyticsService>().SingleInstance();
            builder.RegisterType <AzureFunctionsApiService>().AsSelf().SingleInstance();
            builder.RegisterType <BackgroundFetchService>().AsSelf().SingleInstance();
            builder.RegisterType <DeepLinkingService>().AsSelf().SingleInstance();
            builder.RegisterType <FavIconService>().AsSelf().SingleInstance();
            builder.RegisterType <FirstRunService>().AsSelf().SingleInstance();
            builder.RegisterType <GitHubApiV3Service>().AsSelf().SingleInstance();
            builder.RegisterType <GitHubApiRepositoriesService>().AsSelf().SingleInstance();
            builder.RegisterType <GitHubAuthenticationService>().AsSelf().SingleInstance();
            builder.RegisterType <GitHubUserService>().AsSelf().SingleInstance();
            builder.RegisterType <GitHubGraphQLApiService>().AsSelf().SingleInstance();
            builder.RegisterType <LanguageService>().AsSelf().SingleInstance();
            builder.RegisterType <MediaElementService>().AsSelf().SingleInstance();
            builder.RegisterType <NotificationService>().AsSelf().SingleInstance();
            builder.RegisterType <ReferringSitesDatabase>().AsSelf().SingleInstance();
            builder.RegisterType <RepositoryDatabase>().AsSelf().SingleInstance();
            builder.RegisterType <ReviewService>().AsSelf().SingleInstance();
            builder.RegisterType <MobileSortingService>().AsSelf().SingleInstance();
            builder.RegisterType <SyncfusionService>().AsSelf().SingleInstance();
            builder.RegisterType <ThemeService>().AsSelf().SingleInstance();
            builder.RegisterType <TrendsChartSettingsService>().AsSelf().SingleInstance();
            builder.RegisterInstance(ShinyHost.Resolve <INotificationManager>()).As <INotificationManager>().SingleInstance();
            builder.RegisterInstance(DependencyService.Resolve <IDeviceNotificationsService>()).As <IDeviceNotificationsService>().SingleInstance();
#if !AppStore
            builder.RegisterType <UITestsBackdoorService>().AsSelf().SingleInstance();
#endif

            //Register ViewModels
            builder.RegisterType <OnboardingViewModel>().AsSelf();
            builder.RegisterType <ReferringSitesViewModel>().AsSelf();
            builder.RegisterType <RepositoryViewModel>().AsSelf();
            builder.RegisterType <SettingsViewModel>().AsSelf();
            builder.RegisterType <SplashScreenViewModel>().AsSelf();
            builder.RegisterType <TrendsViewModel>().AsSelf();
            builder.RegisterType <WelcomeViewModel>().AsSelf();

            //Register Pages
            builder.RegisterType <ChartOnboardingPage>().AsSelf();
            builder.RegisterType <ConnectToGitHubOnboardingPage>().AsSelf();
            builder.RegisterType <GitTrendsOnboardingPage>().AsSelf();
            builder.RegisterType <NotificationsOnboardingPage>().AsSelf();
            builder.RegisterType <OnboardingCarouselPage>().AsSelf();
            builder.RegisterType <ReferringSitesPage>().AsSelf().WithParameter(new TypedParameter(typeof(Repository), nameof(Repository).ToLower()));
            builder.RegisterType <RepositoryPage>().AsSelf();
            builder.RegisterType <SettingsPage>().AsSelf();
            builder.RegisterType <SplashScreenPage>().AsSelf();
            builder.RegisterType <TrendsPage>().AsSelf().WithParameter(new TypedParameter(typeof(Repository), nameof(Repository).ToLower()));
            builder.RegisterType <WelcomePage>().AsSelf();

            //Register Refit Services
            var gitHubV3ApiClient       = RestService.For <IGitHubApiV3>(BaseApiService.CreateHttpClient(GitHubConstants.GitHubRestApiUrl));
            var gitHubGraphQLApiClient  = RestService.For <IGitHubGraphQLApi>(BaseApiService.CreateHttpClient(GitHubConstants.GitHubGraphQLApi));
            var azureFunctionsApiClient = RestService.For <IAzureFunctionsApi>(BaseApiService.CreateHttpClient(AzureConstants.AzureFunctionsApiUrl));

            builder.RegisterInstance(gitHubV3ApiClient).SingleInstance();
            builder.RegisterInstance(gitHubGraphQLApiClient).SingleInstance();
            builder.RegisterInstance(azureFunctionsApiClient).SingleInstance();

            return(builder.Build());
        }
예제 #12
0
        public async Task GetBasicStatsAsync(params string[] args)
        {
            var id = LogEventIdProvider.GetEventIdByType(LoggingEvent.GetRegionStats);

            try
            {
                string regionName = string.Join(" ", args);
                if (string.IsNullOrWhiteSpace(regionName))
                {
                    regionName = _defaultRegionName;
                }
                var mention = false;
                if (DumpDataService.IsUpdating)
                {
                    await ReplyAsync("Currently updating region information. This may take a few minutes. You will be pinged once the information is available.");

                    mention = true;
                }
                _logger.LogInformation(id, LogMessageBuilder.Build(id, $"BasicRegionStats for {regionName} requested."));
                XmlDocument regionStats = await _dataService.GetRegionStatsAsync(regionName, id);

                var region = await _dumpDataService.GetRegionAsync(BaseApiService.ToID(regionName));

                if (regionStats != null && region != null)
                {
                    var name                 = regionStats.GetElementsByTagName("NAME").Item(0)?.InnerText;
                    var numnations           = regionStats.GetElementsByTagName("NUMNATIONS").Item(0)?.InnerText;
                    var wadelegate           = regionStats.GetElementsByTagName("DELEGATE").Item(0)?.InnerText;
                    var founder              = region.FOUNDER;
                    var founded              = regionStats.GetElementsByTagName("FOUNDED").Item(0)?.InnerText;
                    var flagUrl              = region.FLAG;
                    var power                = regionStats.GetElementsByTagName("POWER").Item(0)?.InnerText;
                    var waNationCount        = region.WANATIONS.Count();
                    var endoCount            = region.WANATIONS.Sum(n => n.ENDORSEMENTS.Count);
                    var census               = regionStats.GetElementsByTagName("CENSUS").Item(0)?.ChildNodes;
                    var regionalAvgInfluence = census.Item(0)?.ChildNodes.Item(0)?.InnerText;

                    var regionUrl = $"https://www.nationstates.net/region={BaseApiService.ToID(regionName)}";
                    var builder   = new EmbedBuilder
                    {
                        ThumbnailUrl = flagUrl,
                        Title        = name,
                        Url          = regionUrl
                    };
                    if (!string.IsNullOrWhiteSpace(founder) && founder != "0")
                    {
                        string founderString = await GetFounderStringAsync(id, founder);

                        builder.AddField("Founder", $"{founderString}", true);
                    }
                    if (!string.IsNullOrWhiteSpace(founded) && founded != "0")
                    {
                        builder.AddField("Founded", $"{founded}", true);
                    }
                    builder.AddField("Nations", $"[{numnations}]({regionUrl}/page=list_nations)", true);
                    if (!string.IsNullOrWhiteSpace(regionalAvgInfluence) && double.TryParse(regionalAvgInfluence, NumberStyles.Number, _locale, out double avgInfluenceValue) && int.TryParse(numnations, out int numnationsValue))
                    {
                        var powerValue       = avgInfluenceValue * numnationsValue;
                        var powerValueString = powerValue > 1000 ? (powerValue / 1000.0).ToString("0.000", _locale) + "k" : powerValue.ToString(_locale);
                        builder.AddField("Regional Power", $"{power} | {powerValueString} Points", true);
                    }
                    else
                    {
                        builder.AddField("Regional Power", $"{power}", true);
                    }
                    var endoCountString = endoCount > 1000 ? (endoCount / 1000.0).ToString("0.000", _locale) + "k" : endoCount.ToString(_locale);
                    builder.AddField("World Assembly*", $"{waNationCount} member{(waNationCount > 1 ? "s" : string.Empty)} | {endoCountString} endos", true);
                    if (!string.IsNullOrWhiteSpace(wadelegate) && wadelegate != "0")
                    {
                        var delegatetuple = await GetDelegateNationStringAsync(wadelegate, id);

                        builder.AddField($"WA Delegate", $"[{delegatetuple.Item1}](https://www.nationstates.net/nation={BaseApiService.ToID(wadelegate)}) | {delegatetuple.Item2}");
                    }
                    builder.WithFooter(DiscordBotService.FooterString);
                    builder.WithColor(new Color(_rnd.Next(0, 256), _rnd.Next(0, 256), _rnd.Next(0, 256)));
                    builder.AddField("Datasource", "API, * Dump", true);
                    builder.AddField("As of", "Just now, * " + DateTime.UtcNow.Subtract(DumpDataService.LastDumpUpdateTimeUtc).ToString("h'h 'm'm 's's'") + " ago", true);
                    builder.AddField("Next Update in", "On demand, * " + DumpDataService.NextDumpDataUpdate.ToString("h'h 'm'm 's's'"), true);
                    await ReplyAsync(embed : builder.Build());
                }
                else
                {
                    var builder = new EmbedBuilder();
                    builder.WithTitle($"Something went wrong.");
                    builder.WithDescription("No API or No Dump data received. Probably no such region.");
                    await ReplyAsync(embed : builder.Build());
                }
                if (mention)
                {
                    await ReplyAsync($"{Context.User.Mention}");
                }
            }
            catch (Exception ex)
            {
                _logger.LogCritical(id, ex, LogMessageBuilder.Build(id, "A critical error occured."));
                await ReplyAsync("Something went wrong. Sorry :(");
            }
        }