Added catalogue features pages + add some extra checks in catalogue index + pages
							parent
							
								
									e20079bc2c
								
							
						
					
					
						commit
						f56198e9cb
					
				|  | @ -25,10 +25,13 @@ public class GetCatalogIndexEvent : IMessageEvent | |||
|             await _gameSessionManager.CloseAsync("Not logged in", gameSession); | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         var categories = _catalogueManager.Pages.Values.Where(p => p.Parent is null); | ||||
| 
 | ||||
|         await gameSession.SendComposerAsync(new CatalogPagesListComposer(categories, | ||||
|             request.ReadString() ?? "normal")); | ||||
|         var mode = request.ReadString() ?? "normal"; | ||||
|          | ||||
|         var categories = | ||||
|             _catalogueManager.Pages.Values.Where( | ||||
|                 p => p.Parent is null && p.Modes.Contains(mode) && p.MinRank <= gameSession.Habbo.Rank); | ||||
| 
 | ||||
|         await gameSession.SendComposerAsync(new CatalogPagesListComposer(categories, mode)); | ||||
|     } | ||||
| } | ||||
|  | @ -30,11 +30,16 @@ public class GetCatalogPageEvent : IMessageEvent | |||
|         var offerId = request.ReadInt32() ?? 0; | ||||
|         var mode = request.ReadString() ?? "normal"; | ||||
| 
 | ||||
|         if (!_catalogueManager.Pages.TryGetValue(pageId, out var page)) | ||||
|         if (!_catalogueManager.Pages.TryGetValue(pageId, out var page) || !page.Enabled || | ||||
|             page.MinRank > gameSession.Habbo.Rank || !page.Modes.Contains(mode)) | ||||
|         { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         await gameSession.SendComposerAsync(new CatalogPageMessageComposer(page, offerId, mode)); | ||||
|         var featuredPages = page.Layout.Equals("frontpage4") | ||||
|             ? _catalogueManager.FeaturedPages.Values | ||||
|             : new List<CatalogueFeaturedPage>(); | ||||
| 
 | ||||
|         await gameSession.SendComposerAsync(new CatalogPageMessageComposer(page, offerId, mode, featuredPages)); | ||||
|     } | ||||
| } | ||||
|  | @ -9,12 +9,15 @@ public class CatalogPageMessageComposer : IMessageComposer | |||
|     private readonly CataloguePage _page; | ||||
|     private readonly int _offerId; | ||||
|     private readonly string _mode; | ||||
|     private readonly ICollection<CatalogueFeaturedPage> _featuredPages; | ||||
| 
 | ||||
|     public CatalogPageMessageComposer(CataloguePage page, int offerId, string mode) | ||||
|     public CatalogPageMessageComposer(CataloguePage page, int offerId, string mode, | ||||
|         ICollection<CatalogueFeaturedPage> featuredPages) | ||||
|     { | ||||
|         _page = page; | ||||
|         _offerId = offerId; | ||||
|         _mode = mode; | ||||
|         _featuredPages = featuredPages; | ||||
|     } | ||||
| 
 | ||||
|     public OutgoingHeaders Header => OutgoingHeaders.CatalogPage; | ||||
|  | @ -40,5 +43,26 @@ public class CatalogPageMessageComposer : IMessageComposer | |||
|         message.AppendInt32(0); | ||||
|         message.AppendInt32(_offerId); | ||||
|         message.AppendBoolean(_page.SeasonalCurrency); | ||||
|         message.AppendInt32(_featuredPages.Count); | ||||
| 
 | ||||
|         foreach (var featuredPage in _featuredPages) | ||||
|         { | ||||
|             message.AppendInt32(featuredPage.SlotId); | ||||
|             message.AppendString(featuredPage.Caption); | ||||
|             message.AppendString(featuredPage.Image); | ||||
|             message.AppendInt32((int)featuredPage.Type); | ||||
|             switch (featuredPage.Type) | ||||
|             { | ||||
|                 default: | ||||
|                 case CatalogueFeaturedPageType.PageName: | ||||
|                 case CatalogueFeaturedPageType.ProductName: | ||||
|                     message.AppendString(featuredPage.Data); | ||||
|                     break; | ||||
|                 case CatalogueFeaturedPageType.PageId: | ||||
|                     message.AppendInt32(int.TryParse(featuredPage.Data, out var pageId) ? pageId : -1); | ||||
|                     break; | ||||
|             } | ||||
|             message.AppendInt32((int)(DateTime.Now - featuredPage.Expire).TotalSeconds); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -21,7 +21,7 @@ public class CatalogPagesListComposer : IMessageComposer | |||
|         message.AppendBoolean(true); | ||||
|         message.AppendInt32(0); | ||||
|         message.AppendInt32(-1); | ||||
|         message.AppendString(string.Empty); | ||||
|         message.AppendString("root"); | ||||
|         message.AppendString(string.Empty); | ||||
|         message.AppendInt32(0); | ||||
|         message.AppendInt32(_pages.Count()); | ||||
|  |  | |||
|  | @ -0,0 +1,11 @@ | |||
| namespace Tiger.Game.Catalogue; | ||||
| 
 | ||||
| public class CatalogueFeaturedPage | ||||
| { | ||||
|     public virtual int SlotId { get; set; } | ||||
|     public virtual string Image { get; set; } = null!; | ||||
|     public virtual string Caption { get; set; } = null!; | ||||
|     public virtual CatalogueFeaturedPageType Type { get; set; } | ||||
|     public virtual DateTime Expire { get; set; } | ||||
|     public virtual string Data { get; set; } = null!; | ||||
| } | ||||
|  | @ -0,0 +1,17 @@ | |||
| using FluentNHibernate.Mapping; | ||||
| 
 | ||||
| namespace Tiger.Game.Catalogue; | ||||
| 
 | ||||
| public class CatalogueFeaturedPageMap : ClassMap<CatalogueFeaturedPage> | ||||
| { | ||||
|     public CatalogueFeaturedPageMap() | ||||
|     { | ||||
|         Table("catalogue_featured_pages"); | ||||
|         Id(fp => fp.SlotId).Column("slot_id").GeneratedBy.Identity(); | ||||
|         Map(fp => fp.Image).Column("image").Not.Nullable(); | ||||
|         Map(fp => fp.Caption).Column("caption").Not.Nullable(); | ||||
|         Map(fp => fp.Type).CustomType<int>().Column("type").Not.Nullable(); | ||||
|         Map(fp => fp.Expire).Column("expire").Not.Nullable(); | ||||
|         Map(fp => fp.Data).Column("data").Not.Nullable(); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,8 @@ | |||
| namespace Tiger.Game.Catalogue; | ||||
| 
 | ||||
| public enum CatalogueFeaturedPageType | ||||
| { | ||||
|     PageName, | ||||
|     PageId, | ||||
|     ProductName | ||||
| } | ||||
|  | @ -7,14 +7,19 @@ public class CatalogueManager : ICatalogueManager | |||
| { | ||||
|     private readonly IRepository<CataloguePage> _pagesRepository; | ||||
|     private readonly ILogger<ICatalogueManager> _logger; | ||||
|     private readonly IRepository<CatalogueFeaturedPage> _featuredPagesRepository; | ||||
|      | ||||
|     public IDictionary<int, CataloguePage> Pages { get; private set; } | ||||
|     public IDictionary<int, CatalogueFeaturedPage> FeaturedPages { get; private set; } | ||||
| 
 | ||||
|     public CatalogueManager(IRepository<CataloguePage> pagesRepository, ILogger<ICatalogueManager> logger) | ||||
|     public CatalogueManager(IRepository<CataloguePage> pagesRepository, ILogger<ICatalogueManager> logger, | ||||
|         IRepository<CatalogueFeaturedPage> featuredPagesRepository) | ||||
|     { | ||||
|         _pagesRepository = pagesRepository; | ||||
|         _logger = logger; | ||||
|         _featuredPagesRepository = featuredPagesRepository; | ||||
|         Pages = new Dictionary<int, CataloguePage>(); | ||||
|         FeaturedPages = new Dictionary<int, CatalogueFeaturedPage>(); | ||||
|     } | ||||
| 
 | ||||
|     public async Task LoadPagesAsync() | ||||
|  | @ -23,4 +28,12 @@ public class CatalogueManager : ICatalogueManager | |||
|          | ||||
|         _logger.LogInformation("Loaded {Count} catalogue pages", Pages.Count); | ||||
|     } | ||||
|      | ||||
|     public async Task LoadFeaturedPagesAsync() | ||||
|     { | ||||
|         FeaturedPages =(await _featuredPagesRepository.FindByAsync()) | ||||
|             .ToDictionary(p => p.SlotId, p => p); | ||||
|          | ||||
|         _logger.LogInformation("Loaded {Count} catalogue featured pages", FeaturedPages.Count); | ||||
|     } | ||||
| } | ||||
|  | @ -3,5 +3,7 @@ namespace Tiger.Game.Catalogue; | |||
| public interface ICatalogueManager | ||||
| { | ||||
|     public IDictionary<int, CataloguePage> Pages { get; } | ||||
|     public IDictionary<int, CatalogueFeaturedPage> FeaturedPages { get; } | ||||
|     Task LoadPagesAsync(); | ||||
|     Task LoadFeaturedPagesAsync(); | ||||
| } | ||||
|  | @ -47,6 +47,7 @@ var provider = collection.BuildServiceProvider(); | |||
| 
 | ||||
| await provider.GetRequiredService<ISettingManager>().ReloadSettingsAsync(); | ||||
| await provider.GetRequiredService<ICatalogueManager>().LoadPagesAsync(); | ||||
| await provider.GetRequiredService<ICatalogueManager>().LoadFeaturedPagesAsync(); | ||||
| provider.GetRequiredService<IFigureDataManager>(); | ||||
| await provider.GetRequiredService<ILandingViewManager>().LoadPromoArticlesAsync(); | ||||
| await provider.GetRequiredService<IAchievementManager>().LoadAchievementsAsync(); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue