From 2fd3bc316c427e297b260982765fdcb603d3fdd8 Mon Sep 17 00:00:00 2001 From: Marc Baloup Date: Fri, 15 May 2015 02:23:25 +0200 Subject: [PATCH] =?UTF-8?q?Les=20joueurs=20peuvent=20maintenant=20voir=20l?= =?UTF-8?q?eurs=20derni=C3=A8res=20discussions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- make_jar.jardesc | 2 +- resources/plugin.yml | 2 +- .../pandacraftutils/commands/CommandTell.java | 52 ++++++++++++++- .../modules/PrivateMessagesManager.java | 63 +++++++++---------- 4 files changed, 80 insertions(+), 39 deletions(-) diff --git a/make_jar.jardesc b/make_jar.jardesc index 8ad80c1..1aa63b4 100644 --- a/make_jar.jardesc +++ b/make_jar.jardesc @@ -1,6 +1,6 @@ - + diff --git a/resources/plugin.yml b/resources/plugin.yml index f5a9242..584a61a 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,6 +1,6 @@ name: PandacraftUtils main: net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils -version: 4.3 +version: 4.4 diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandTell.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandTell.java index 507f0f1..6442ed6 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandTell.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandTell.java @@ -1,7 +1,13 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.commands; +import java.text.DateFormat; +import java.util.List; +import java.util.Locale; + +import mkremins.fanciful.FancyMessage; import net.mc_pandacraft.java.plugin.pandacraftutils.modules.PrivateMessagesManager.MessageSender; import net.mc_pandacraft.java.plugin.pandacraftutils.modules.PrivateMessagesManager.MessageSendingException; +import net.mc_pandacraft.java.plugin.pandacraftutils.modules.PrivateMessagesManager.PrivateDiscussion; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; import org.bukkit.ChatColor; @@ -20,11 +26,12 @@ public class CommandTell extends AbstractCommandExecutor { String[] args) { if (args.length == 0 && sender instanceof Player) { - plugin.privateMessagesManager.displayUnreadMessages((Player)sender); + Player player = (Player) sender; + onCommandDiscussionsList(player); return true; } else if (args.length == 0) { - sender.sendMessage(ChatColor.RED+"Seul un joueur en ligne peut lire ses messages non lus."); + sender.sendMessage(ChatColor.RED+"Seul un joueur en ligne peut voir la liste de ses discussions."); return false; } @@ -60,5 +67,46 @@ public class CommandTell extends AbstractCommandExecutor { } + + + private void onCommandDiscussionsList(Player player) { + List lastDiscussions = plugin.privateMessagesManager.getLastDiscussions(player, 5); + + + player.sendMessage(ChatColor.GOLD+"--- Messagerie privée - Liste des conversations ---"); + + for (PrivateDiscussion pvd : lastDiscussions) { + String name = (pvd.name == null) ? + new MessageSender(pvd.name).getDisplayName() : + (pvd.name.toLowerCase().startsWith("g:")) ? + ChatColor.GOLD+pvd.name.substring(2) : + new MessageSender(pvd.name).getDisplayName(); + + String line = name+ChatColor.RESET; + + int nbM = pvd.nbUnread; + + if (nbM > 0) + line += ChatColor.GRAY+" - "+ChatColor.RED+nbM+" message"+((nbM > 1)?"s":"")+" non lu"+((nbM > 1)?"s":""); + + + DateFormat date = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.FRANCE); + DateFormat hour = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.FRANCE); + + String affDate = date.format(pvd.timeLastMessage) + " à " + hour.format(pvd.timeLastMessage); + + line += ChatColor.GRAY+" - "+affDate; + + + new FancyMessage("").then(line).color(ChatColor.GRAY).command("/m d:"+((pvd.name == null)?"null":pvd.name)).send(player); + + } + + player.sendMessage(ChatColor.GOLD+"Cliquez sur une conversation pour voir les messages"); + player.sendMessage(ChatColor.GOLD+"----------------------------------------------"); + + } + + } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/PrivateMessagesManager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/PrivateMessagesManager.java index f6a1186..2f3e37c 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/PrivateMessagesManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/PrivateMessagesManager.java @@ -24,6 +24,7 @@ import net.mc_pandacraft.java.plugin.pandacraftutils.players.OffPlayer; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; +import org.apache.commons.lang.NullArgumentException; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -262,37 +263,21 @@ public class PrivateMessagesManager extends BukkitRunnable { + + + + /** - * - * @param player le joueur qui veut voir ses messages non lus - * @return vrai si le joueur a bien des messages non lu, faux sinon. Retourne vrai en cas d'erreur lors de la récupération des messages + * Retourne les dernières discussions auquel a participé le joueur passé en paramètre. + * @param p le joueur pour lequel on doit retourner les dernières discussions + * @param nbLastMin le nombre de discussion minimum qui doit être retourné (si il en existe au moins ce nombre minimum)
+ * Si le nombre de discussion totale est inférieur ou égale à nbLastMin, aucune suppression n'est faite.
+ * Dans le cas contraire, la méthode supprime itérativement la discussion déjà lu la plus ancienne, jusqu'à ce que le nombre de discussion restante + * soit égale à nbLastMin ou jusqu'à ce qu'il ne reste que des discussion non lus. + * @return les discussions, dans l'ordre chronologique inverse des derniers messages de chaque discussions. Plus clairement, la discussion la + * plus récente est placé à l'indice 0 de la liste. */ - public boolean displayUnreadMessages(Player player) { - try { - List messages = ((MPMessageTable)ORM.getTable("mp_message")).getAllUnreadForPlayer(player.getName()); - if (messages.size() == 0) { - player.sendMessage(ChatColor.GRAY+"Vous n'avez pas de messages non lus"); - return false; - } - - for(MPMessageElement mess : messages) - tryDisplayMessage(mess); - - return true; - - } catch (SQLException e) { - e.printStackTrace(); - player.sendMessage(ChatColor.RED+"Impossible de lire les messages non lus"); - return true; - } - } - - - - - - - public List getLastDiscussions(Player p, Integer nbLast) { + public List getLastDiscussions(Player p, Integer nbLastMin) { try { // récupère les messages, triés de la plus vieille à la plus récente List messages = ORM.getTable(MPMessageTable.class).getForPlayer(p.getName(), false, 1000); @@ -321,9 +306,11 @@ public class PrivateMessagesManager extends BukkitRunnable { } - if (nbLast != null && nbLast >= 0) { - while (discussionList.size()>nbLast.intValue()) { - discussionList.remove(discussionList.size()-1); + if (nbLastMin != null && nbLastMin >= 0) { + for (int i = discussionList.size()-1; i >= 0 && discussionList.size() > nbLastMin; i--) { + if (discussionList.get(i).nbUnread == 0) { + discussionList.remove(i); + } } } @@ -342,6 +329,7 @@ public class PrivateMessagesManager extends BukkitRunnable { public class PrivateDiscussion { /** * Le pseudo du joueur ou du groupe de discussion (avec "g:" devant) + * ou null si il s'agit d'un message système (hors groupe) */ public final String name; public int nbUnread; @@ -383,6 +371,8 @@ public class PrivateMessagesManager extends BukkitRunnable { */ private void tryDisplayMessage(MPMessageElement message) { + if (message == null) throw new NullArgumentException("message doit être non null"); + try { OffPlayer offP = new OffPlayer(message.getViewerNick()); @@ -546,12 +536,15 @@ public class PrivateMessagesManager extends BukkitRunnable { try { List messages = ((MPMessageTable)ORM.getTable("mp_message")).getAllUnreadForPlayer(event.getPlayer().getName()); - if (messages.size() == 0) return; + int nbMess = messages.size(); + + if (nbMess == 0) return; + String[] m = new String[] { ChatColor.GOLD+"--------------- Messagerie privée ---------------", - ChatColor.GOLD+"Vous avez "+messages.size()+" message"+((messages.size()>1)?"s":"")+" non lu"+((messages.size()>1)?"s":""), - ChatColor.GOLD+"Faites "+ChatColor.GRAY+"/m"+ChatColor.GOLD+" pour voir le"+((messages.size()>1)?"s":"")+" message"+((messages.size()>1)?"s":""), + ChatColor.GOLD+"Vous avez "+nbMess+" message"+((nbMess>1)?"s":"")+" non lu"+((nbMess>1)?"s":""), + ChatColor.GOLD+"Faites "+ChatColor.GRAY+"/m"+ChatColor.GOLD+" pour voir le"+((nbMess>1)?"s":"")+" message"+((nbMess>1)?"s":""), ChatColor.GOLD+"----------------------------------------------", };