This repository has been archived on 2023-05-27. You can view files and clone it, but cannot push or open issues or pull requests.
BirdsiteLIVE/src/BirdsiteLive/Services/AboutPageService.cs
2021-07-17 17:30:52 -04:00

75 lines
2.8 KiB
C#

using System;
using System.Linq;
using System.Threading.Tasks;
using BirdsiteLive.Common.Settings;
using BirdsiteLive.DAL.Contracts;
using BirdsiteLive.Domain.Repository;
namespace BirdsiteLive.Services
{
public interface IAboutPageService
{
Task<AboutPageData> GetAboutPageDataAsync();
}
public class AboutPageService : IAboutPageService
{
private readonly ITwitterUserDal _twitterUserDal;
private static AboutPageData _aboutPageData;
private readonly InstanceSettings _instanceSettings;
private readonly IModerationRepository _moderationRepository;
#region Ctor
public AboutPageService(ITwitterUserDal twitterUserDal, InstanceSettings instanceSettings, IModerationRepository moderationRepository)
{
_twitterUserDal = twitterUserDal;
_instanceSettings = instanceSettings;
_moderationRepository = moderationRepository;
}
#endregion
public async Task<AboutPageData> GetAboutPageDataAsync()
{
if (_aboutPageData == null ||
(DateTime.UtcNow - _aboutPageData.RefreshedTime).TotalMinutes > 15)
{
var twitterUserMax = _instanceSettings.MaxUsersCapacity;
var twitterUserCount = await _twitterUserDal.GetTwitterUsersCountAsync();
var saturation = (int)((double)twitterUserCount / twitterUserMax * 100);
_aboutPageData = new AboutPageData
{
RefreshedTime = DateTime.UtcNow,
Saturation = saturation,
UnlistedUsers = _instanceSettings.UnlistedTwitterAccounts.Length > 0 ? string.Join("\n", _instanceSettings.UnlistedTwitterAccounts.Split(";").Select(i => "<li>" + i + "</li>")) : "(none)",
Settings = _instanceSettings,
ModerationStatus = new ModerationStatus
{
Followers = _moderationRepository.GetModerationType(ModerationEntityTypeEnum.Follower),
TwitterAccounts = _moderationRepository.GetModerationType(ModerationEntityTypeEnum.TwitterAccount),
Repository = _moderationRepository
}
};
}
return _aboutPageData;
}
}
public class AboutPageData
{
public DateTime RefreshedTime { get; set; }
public int Saturation { get; set; }
public string UnlistedUsers { get; set; }
public InstanceSettings Settings { get; set; }
public ModerationStatus ModerationStatus { get; set; }
}
public class ModerationStatus
{
public ModerationTypeEnum Followers { get; set; }
public ModerationTypeEnum TwitterAccounts { get; set; }
public IModerationRepository Repository { get; set; }
}
}