|
@@ -1,7 +1,8 @@
|
|
|
using System;
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
-
|
|
|
+using System.Xml;
|
|
|
+using Sfs2X.Util;
|
|
|
using UnityEngine;
|
|
|
using UnityEngine.UI;
|
|
|
|
|
@@ -57,14 +58,18 @@ public class FriendPanel : Regist
|
|
|
public static bool HaveNewApplicant;
|
|
|
public static bool HaveNewPrivateMessage
|
|
|
{
|
|
|
- get { return haveNewPrivateMessage; }
|
|
|
- set
|
|
|
+ get
|
|
|
{
|
|
|
- haveNewPrivateMessage = value;
|
|
|
- UpdateFriendButtonOutlineStatus();
|
|
|
+ foreach (var friendItem in FriendItems)
|
|
|
+ {
|
|
|
+ if (HaveNewMessage(friendItem.AccountData.SerialNumber))
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
}
|
|
|
}
|
|
|
- public static bool haveNewPrivateMessage;
|
|
|
public static TweenOutline OpenPanelButtonOutlineTween;
|
|
|
|
|
|
public static int ActivateLevel = TutorialManager.VisitTutorialLevel;
|
|
@@ -102,13 +107,13 @@ public class FriendPanel : Regist
|
|
|
FriendScrollRect = ResourceManager.Get<VirtualScrollRectPlus>(ObjectLabel.AF_FriendScrollRect);
|
|
|
ApplicantScrollRect = ResourceManager.Get<VirtualScrollRectPlus>(ObjectLabel.AF_ApplicantScrollRect);
|
|
|
|
|
|
- LanguageManager.Add(NicknameTitle, Language.GetStr(LanguageLabel.UI__AF_NicknameTitle));
|
|
|
- LanguageManager.Add(ContentTitle, Language.GetStr(LanguageLabel.UI__AF_ContentTitle));
|
|
|
- LanguageManager.Add(CloseButtonTitle, Language.GetStr(LanguageLabel.UI__AF_CloseButtonTitle));
|
|
|
- LanguageManager.Add(ApplicantTitle, Language.GetStr(LanguageLabel.UI__AF_ApplicantTitle));
|
|
|
- LanguageManager.Add(PanelTitle, Language.GetStr(LanguageLabel.UI__AF_PanelTitle));
|
|
|
- LanguageManager.Add(AcceptAllButtonTitle, Language.GetStr(LanguageLabel.UI__AF_AcceptAllButtonTitle));
|
|
|
- LanguageManager.Add(AddFriendTitle, Language.GetStr(LanguageLabel.UI__AF_AddFriendTitle));
|
|
|
+ LanguageManager.Add(NicknameTitle, new MulLanStr(LanguageLabel.UI__AF_NicknameTitle));
|
|
|
+ LanguageManager.Add(ContentTitle, new MulLanStr(LanguageLabel.UI__AF_ContentTitle));
|
|
|
+ LanguageManager.Add(CloseButtonTitle, new MulLanStr(LanguageLabel.UI__AF_CloseButtonTitle));
|
|
|
+ LanguageManager.Add(ApplicantTitle, new MulLanStr(LanguageLabel.UI__AF_ApplicantTitle));
|
|
|
+ LanguageManager.Add(PanelTitle, new MulLanStr(LanguageLabel.UI__AF_PanelTitle));
|
|
|
+ LanguageManager.Add(AcceptAllButtonTitle, new MulLanStr(LanguageLabel.UI__AF_AcceptAllButtonTitle));
|
|
|
+ LanguageManager.Add(AddFriendTitle, new MulLanStr(LanguageLabel.UI__AF_AddFriendTitle));
|
|
|
|
|
|
OpenPanelButton.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
|
|
|
FriendPanelParentMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
|
|
@@ -127,6 +132,8 @@ public class FriendPanel : Regist
|
|
|
{
|
|
|
if (level >= ActivateLevel) OpenPanelButton.TweenForCG();
|
|
|
};
|
|
|
+
|
|
|
+ MessagePanel.OnHaveNewMessage += SortFriendItems;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -230,9 +237,47 @@ public class FriendPanel : Regist
|
|
|
{
|
|
|
OnFriendListRefresh.Invoke(accountDatas);
|
|
|
}
|
|
|
+ SortFriendItems(null);
|
|
|
RefreshPrivateMessage();
|
|
|
}
|
|
|
|
|
|
+ public static void SortFriendItems(string targetSerialNumber)
|
|
|
+ {
|
|
|
+ FriendItem friendItem = null;
|
|
|
+ List<FriendItem> haveNewPrivateMessageItems = new List<FriendItem>();
|
|
|
+ List<FriendItem> dontHaveNewPrivateMessageItems = new List<FriendItem>();
|
|
|
+ foreach (var item in FriendItems)
|
|
|
+ {
|
|
|
+ if (item.AccountData.SerialNumber == targetSerialNumber)
|
|
|
+ {
|
|
|
+ friendItem = item;
|
|
|
+ }
|
|
|
+ else if (HaveNewMessage(item.AccountData.SerialNumber))
|
|
|
+ {
|
|
|
+ haveNewPrivateMessageItems.Add(item);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ dontHaveNewPrivateMessageItems.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ haveNewPrivateMessageItems.MySort((item0, item1) => item0.AccountData.LastLoginDate.Ticks < item1.AccountData.LastLoginDate.Ticks);
|
|
|
+ dontHaveNewPrivateMessageItems.MySort((item0, item1) => item0.AccountData.LastLoginDate.Ticks < item1.AccountData.LastLoginDate.Ticks);
|
|
|
+
|
|
|
+ List<FriendItem> friendItems = new List<FriendItem>();
|
|
|
+ friendItems.AddRange(haveNewPrivateMessageItems);
|
|
|
+ friendItems.AddRange(dontHaveNewPrivateMessageItems);
|
|
|
+ for (int i = 0; i < friendItems.Count; i++)
|
|
|
+ {
|
|
|
+ friendItems[i].transform.SetSiblingIndex(i);
|
|
|
+ }
|
|
|
+ if (friendItem != null)
|
|
|
+ {
|
|
|
+ friendItem.transform.SetAsFirstSibling();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
public static void AddApplicantItem(AccountData accountData)
|
|
|
{
|
|
@@ -324,10 +369,6 @@ public class FriendPanel : Regist
|
|
|
{
|
|
|
foreach (var friendAccountData in FriendAccountDatas)
|
|
|
{
|
|
|
- if (!MessagePanel.PrivateMessageDataDictionary.ContainsKey(friendAccountData.SerialNumber))
|
|
|
- {
|
|
|
- MessagePanel.PrivateMessageDataDictionary.Add(friendAccountData.SerialNumber, new PrivateMessageDataStash());
|
|
|
- }
|
|
|
HttpManager.GetPrivateMessage(friendAccountData.SerialNumber, "0", MessagePanel.RefreshPrivateMessageSucceedCallback, MessagePanel.RefreshPrivateMessageFailedCallback);
|
|
|
}
|
|
|
}
|
|
@@ -411,4 +452,82 @@ public class FriendPanel : Regist
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ public static bool IsPrivateMessageNew(string targetSerialNumber, DateTime dateTime)
|
|
|
+ {
|
|
|
+ XmlNodeList nodes = ConfigManager.ConfigRootNode.SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate).SelectNodes(PlayerConfigLabel.LastPrivateMessageDate);
|
|
|
+ for (int i = 0; i < nodes.Count; i++)
|
|
|
+ {
|
|
|
+ string[] strings = nodes[i].Attributes[0].Value.Split('|');
|
|
|
+ string serialNumber = strings[0];
|
|
|
+ DateTime lastDateTime = DateTime.Parse(strings[1]);
|
|
|
+ //Debug.Log(dateTime + " " + lastDateTime);
|
|
|
+ //Debug.Log(targetSerialNumber == serialNumber && dateTime == lastDateTime);
|
|
|
+ if (targetSerialNumber == serialNumber && dateTime == lastDateTime)
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static bool HaveNewMessage(string targetSerialNumber)
|
|
|
+ {
|
|
|
+ if (MessagePanel.PrivateMessageDataDictionary.ContainsKey(targetSerialNumber))
|
|
|
+ {
|
|
|
+ PrivateMessageDataStash dataStash = MessagePanel.PrivateMessageDataDictionary[targetSerialNumber];
|
|
|
+ if (dataStash.PrivateMessageDatas.Count > 0)
|
|
|
+ {
|
|
|
+ return IsPrivateMessageNew(targetSerialNumber, dataStash.PrivateMessageDatas[0].Date);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void SaveLastPrivateMessageDate(string targetSerialNumber, DateTime dateTime)
|
|
|
+ {
|
|
|
+ XmlNode parentNode = ConfigManager.ConfigRootNode.SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate);
|
|
|
+ XmlNodeList nodes = parentNode.SelectNodes(PlayerConfigLabel.LastPrivateMessageDate);
|
|
|
+ for (int i = 0; i < nodes.Count; i++)
|
|
|
+ {
|
|
|
+ string[] strings = nodes[i].Attributes[0].Value.Split('|');
|
|
|
+ string serialNumber = strings[0];
|
|
|
+ if (targetSerialNumber == serialNumber)
|
|
|
+ {
|
|
|
+ nodes[i].Attributes[0].Value = $"{targetSerialNumber}|{dateTime}";
|
|
|
+ //ConfigManager.SaveConfigDocument();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ XmlNode node = ConfigManager.ConfigDocument.CreateNode(XmlNodeType.Element, PlayerConfigLabel.LastPrivateMessageDate, null);
|
|
|
+ XmlAttribute attribute = node.Attributes.Append(ConfigManager.ConfigDocument.CreateAttribute(PlayerConfigLabel.AttributeName));
|
|
|
+ attribute.Value = $"{targetSerialNumber}|{dateTime}";
|
|
|
+ parentNode.AppendChild(node);
|
|
|
+ //ConfigManager.SaveConfigDocument();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void DeleteLastPrivateMessageDate(string targetSerialNumber)
|
|
|
+ {
|
|
|
+ XmlNode parentNode = ConfigManager.ConfigRootNode.SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate);
|
|
|
+ XmlNodeList nodes = parentNode.SelectNodes(PlayerConfigLabel.LastPrivateMessageDate);
|
|
|
+ for (int i = 0; i < nodes.Count; i++)
|
|
|
+ {
|
|
|
+ string[] strings = nodes[i].Attributes[0].Value.Split('|');
|
|
|
+ string serialNumber = strings[0];
|
|
|
+ if (targetSerialNumber == serialNumber)
|
|
|
+ {
|
|
|
+ parentNode.RemoveChild(nodes[i]);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|