| | 1 | | // unset:none |
| | 2 | | using DCL; |
| | 3 | | using System; |
| | 4 | | using System.Collections.Generic; |
| | 5 | | using System.Linq; |
| | 6 | | using Variables.RealmsInfo; |
| | 7 | |
|
| | 8 | | public class ExploreV2ComponentRealmsController: IDisposable |
| | 9 | | { |
| | 10 | | private readonly DataStore_Realm realmModel; |
| | 11 | | private readonly IExploreV2MenuComponentView view; |
| | 12 | |
|
| 54 | 13 | | internal readonly List<RealmRowComponentModel> currentAvailableRealms = new (); |
| | 14 | |
|
| 54 | 15 | | public ExploreV2ComponentRealmsController(DataStore_Realm realmModel, IExploreV2MenuComponentView view) |
| | 16 | | { |
| 54 | 17 | | this.realmModel = realmModel; |
| 54 | 18 | | this.view = view; |
| 54 | 19 | | } |
| | 20 | |
|
| | 21 | | public void Initialize() |
| | 22 | | { |
| 52 | 23 | | realmModel.realmName.OnChange += UpdateRealmInfo; |
| 52 | 24 | | realmModel.realmsInfo.OnSet += UpdateAvailableRealmsInfo; |
| | 25 | |
|
| 52 | 26 | | UpdateRealmInfo(realmModel.realmName.Get()); |
| 52 | 27 | | UpdateAvailableRealmsInfo(realmModel.realmsInfo.Get()); |
| 52 | 28 | | } |
| | 29 | |
|
| | 30 | | public void Dispose() |
| | 31 | | { |
| 52 | 32 | | realmModel.realmName.OnChange -= UpdateRealmInfo; |
| 52 | 33 | | realmModel.realmsInfo.OnSet -= UpdateAvailableRealmsInfo; |
| 52 | 34 | | } |
| | 35 | |
|
| | 36 | | internal void UpdateRealmInfo(string realmName, string _ = "") |
| | 37 | | { |
| 53 | 38 | | if (string.IsNullOrEmpty(realmName)) |
| 52 | 39 | | return; |
| | 40 | |
|
| | 41 | | // Get the name of the current realm |
| 1 | 42 | | view.currentRealmViewer.SetRealm(realmName); |
| 1 | 43 | | view.currentRealmSelectorModal.SetCurrentRealm(realmName); |
| | 44 | |
|
| | 45 | | // Calculate number of users in the current realm |
| 1 | 46 | | var realmList = DataStore.i.realm.realmsInfo.Get()?.ToList(); |
| 2 | 47 | | RealmModel currentRealmModel = realmList?.FirstOrDefault(r => r.serverName == realmName); |
| 1 | 48 | | var realmUsers = 0; |
| | 49 | |
|
| 1 | 50 | | if (currentRealmModel != null) |
| 1 | 51 | | realmUsers = currentRealmModel.usersCount; |
| | 52 | |
|
| 1 | 53 | | view.currentRealmViewer.SetNumberOfUsers(realmUsers); |
| 1 | 54 | | } |
| | 55 | |
|
| | 56 | | internal void UpdateAvailableRealmsInfo(IEnumerable<RealmModel> currentRealmList) |
| | 57 | | { |
| 54 | 58 | | var realmList = currentRealmList?.ToList(); |
| | 59 | |
|
| 54 | 60 | | if (!NeedToRefreshRealms(realmList)) |
| 52 | 61 | | return; |
| | 62 | |
|
| 2 | 63 | | currentAvailableRealms.Clear(); |
| | 64 | |
|
| 2 | 65 | | if (realmList != null) |
| | 66 | | { |
| 2 | 67 | | string serverName = ServerNameForCurrentRealm(); |
| | 68 | |
|
| 12 | 69 | | foreach (RealmModel realm in realmList) |
| 4 | 70 | | currentAvailableRealms.Add(new RealmRowComponentModel |
| | 71 | | { |
| | 72 | | name = realm.serverName, |
| | 73 | | players = realm.usersCount, |
| | 74 | | isConnected = realm.serverName == serverName, |
| | 75 | | }); |
| | 76 | | } |
| | 77 | |
|
| 2 | 78 | | view.currentRealmSelectorModal.SetAvailableRealms(currentAvailableRealms); |
| 2 | 79 | | } |
| | 80 | |
|
| | 81 | | private bool NeedToRefreshRealms(IEnumerable<RealmModel> newRealmList) |
| | 82 | | { |
| 54 | 83 | | if (newRealmList == null) |
| 0 | 84 | | return true; |
| | 85 | |
|
| 54 | 86 | | var needToRefresh = false; |
| | 87 | |
|
| 54 | 88 | | IEnumerable<RealmModel> realmModels = newRealmList as RealmModel[] ?? newRealmList.ToArray(); |
| | 89 | |
|
| 54 | 90 | | if (realmModels.Count() != currentAvailableRealms.Count) |
| 2 | 91 | | needToRefresh = true; |
| | 92 | | else |
| 104 | 93 | | foreach (RealmModel realm in realmModels) |
| 0 | 94 | | if (!currentAvailableRealms.Exists(x => x.name == realm.serverName && x.players == realm.usersCount)) |
| | 95 | | { |
| 0 | 96 | | needToRefresh = true; |
| 0 | 97 | | break; |
| | 98 | | } |
| | 99 | |
|
| 54 | 100 | | return needToRefresh; |
| | 101 | | } |
| | 102 | |
|
| | 103 | | private static string ServerNameForCurrentRealm() |
| | 104 | | { |
| 2 | 105 | | if (DataStore.i.realm.playerRealm.Get() != null) |
| 1 | 106 | | return DataStore.i.realm.playerRealm.Get().serverName; |
| | 107 | |
|
| 1 | 108 | | if (DataStore.i.realm.playerRealmAboutConfiguration.Get() != null) |
| 0 | 109 | | return DataStore.i.realm.playerRealmAboutConfiguration.Get().RealmName; |
| | 110 | |
|
| 1 | 111 | | return ""; |
| | 112 | | } |
| | 113 | | } |