diff --git a/src/main/java/net/thauvin/erik/mobibot/FeedReader.java b/src/main/java/net/thauvin/erik/mobibot/FeedReader.java index 99c68bd..9188758 100644 --- a/src/main/java/net/thauvin/erik/mobibot/FeedReader.java +++ b/src/main/java/net/thauvin/erik/mobibot/FeedReader.java @@ -52,9 +52,6 @@ class FeedReader implements Runnable { // Maximum number of feed items to display private static final int MAX_ITEMS = 5; - // Tab indent (4 spaces) - private static final String TAB_INDENT = " "; - // Bot private final Mobibot bot; @@ -94,7 +91,7 @@ class FeedReader implements Runnable { for (int i = 0; (i < items.size()) && (i < MAX_ITEMS); i++) { item = items.get(i); bot.send(sender, item.getTitle(), false); - bot.send(sender, TAB_INDENT + Utils.green(item.getLink()), false); + bot.send(sender, Utils.helpIndent(Utils.green(item.getLink()), false), false); } } } catch (MalformedURLException e) { diff --git a/src/main/java/net/thauvin/erik/mobibot/Mobibot.java b/src/main/java/net/thauvin/erik/mobibot/Mobibot.java index 4907b96..0ed1aa7 100644 --- a/src/main/java/net/thauvin/erik/mobibot/Mobibot.java +++ b/src/main/java/net/thauvin/erik/mobibot/Mobibot.java @@ -141,7 +141,7 @@ public class Mobibot extends PircBot { // Tell object public final Tell tell; // Commands - private final List commands = new ArrayList<>(); + private final List commands = new ArrayList<>(20); // Commands Names private final List commandsNames = new ArrayList<>(); // Main channel diff --git a/src/main/java/net/thauvin/erik/mobibot/Pinboard.java b/src/main/java/net/thauvin/erik/mobibot/Pinboard.java index 61e58d8..0291ff3 100644 --- a/src/main/java/net/thauvin/erik/mobibot/Pinboard.java +++ b/src/main/java/net/thauvin/erik/mobibot/Pinboard.java @@ -35,7 +35,7 @@ package net.thauvin.erik.mobibot; import net.thauvin.erik.mobibot.entries.EntryLink; import net.thauvin.erik.pinboard.PinboardPoster; -import javax.swing.*; +import javax.swing.SwingWorker; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; @@ -58,8 +58,8 @@ class Pinboard { /** * Creates a new {@link Pinboard} instance. * - * @param bot The bot's instance. - * @param apiToken The API end point. + * @param bot The bot's instance. + * @param apiToken The API end point. */ Pinboard(final Mobibot bot, final String apiToken) { pinboard = new PinboardPoster(apiToken); diff --git a/src/main/java/net/thauvin/erik/mobibot/commands/tell/Tell.java b/src/main/java/net/thauvin/erik/mobibot/commands/tell/Tell.java index 44938bf..5d7ba31 100644 --- a/src/main/java/net/thauvin/erik/mobibot/commands/tell/Tell.java +++ b/src/main/java/net/thauvin/erik/mobibot/commands/tell/Tell.java @@ -32,7 +32,6 @@ package net.thauvin.erik.mobibot.commands.tell; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import net.thauvin.erik.mobibot.Mobibot; import net.thauvin.erik.mobibot.Utils; import net.thauvin.erik.mobibot.commands.links.View; @@ -53,7 +52,8 @@ public class Tell { * The tell command. */ public static final String TELL_CMD = "tell"; - + // Arrow + private static final String ARROW = " --> "; // Default maximum number of days to keep messages private static final int DEFAULT_TELL_MAX_DAYS = 7; // Default message max queue size @@ -64,7 +64,6 @@ public class Tell { private static final String TELL_ALL_KEYWORD = "all"; //T he delete command. private static final String TELL_DEL_KEYWORD = "del"; - // Bot instance private final Mobibot bot; // Maximum number of days to keep messages @@ -111,6 +110,58 @@ public class Tell { return TellMessagesMgr.clean(messages, maxDays); } + // Delete message. + private void deleteMessage(final String sender, final String cmds, final boolean isPrivate) { + final String[] split = cmds.split(" "); + + if (split.length == 2) { + final String id = split[1]; + boolean deleted = false; + + if (TELL_ALL_KEYWORD.equalsIgnoreCase(id)) { + for (final TellMessage message : messages) { + if (message.getSender().equalsIgnoreCase(sender) && message.isReceived()) { + messages.remove(message); + deleted = true; + } + } + + if (deleted) { + save(); + bot.send(sender, "Delivered messages have been deleted.", isPrivate); + } else { + bot.send(sender, "No delivered messages were found.", isPrivate); + } + + } else { + boolean found = false; + + for (final TellMessage message : messages) { + found = message.isMatchId(id); + + if (found && (message.getSender().equalsIgnoreCase(sender) || bot.isOp(sender))) { + messages.remove(message); + + save(); + bot.send(sender, "Your message was deleted from the queue.", isPrivate); + deleted = true; + break; + } + } + + if (!deleted) { + if (found) { + bot.send(sender, "Only messages that you sent can be deleted.", isPrivate); + } else { + bot.send(sender, "The specified message [ID " + id + "] could not be found.", isPrivate); + } + } + } + } else { + helpResponse(sender, isPrivate); + } + } + /** * Responds with Constants. * @@ -138,6 +189,28 @@ public class Tell { return maxSize > 0 && maxDays > 0; } + // New message. + private void newMessage(final String sender, final String cmds, final boolean isPrivate) { + final String[] split = cmds.split(" ", 2); + + if (split.length == 2 && (StringUtils.isNotBlank(split[1]) && split[1].contains(" "))) { + if (messages.size() < maxSize) { + final TellMessage message = new TellMessage(sender, split[0], split[1].trim()); + + messages.add(message); + + save(); + + bot.send(sender, "Message [ID " + message.getId() + "] was queued for " + + Utils.bold(message.getRecipient()), true); + } else { + bot.send(sender, "Sorry, the messages queue is currently full.", true); + } + } else { + helpResponse(sender, isPrivate); + } + } + /** * Processes the commands. * @@ -145,133 +218,19 @@ public class Tell { * @param cmds The commands string. * @param isPrivate The private flag. */ - @SuppressFBWarnings(value = "CC_CYCLOMATIC_COMPLEXITY", - justification = "Working on it.") public void response(final String sender, final String cmds, final boolean isPrivate) { - final String arrow = " --> "; if (StringUtils.isBlank(cmds)) { helpResponse(sender, isPrivate); } else if (cmds.startsWith(View.VIEW_CMD)) { if (bot.isOp(sender) && (View.VIEW_CMD + ' ' + TELL_ALL_KEYWORD).equals(cmds)) { - if (!messages.isEmpty()) { - for (final TellMessage message : messages) { - bot.send(sender, Utils.bold(message.getSender()) + arrow + Utils.bold(message.getRecipient()) - + " [ID: " + message.getId() + ", " - + (message.isReceived() ? "DELIVERED" : "QUEUED") + ']', - isPrivate); - } - } else { - bot.send(sender, "There are no messages in the queue.", isPrivate); - } + viewAll(sender, isPrivate); } else { - boolean hasMessage = false; - - for (final TellMessage message : messages) { - if (message.isMatch(sender)) { - if (!hasMessage) { - hasMessage = true; - bot.send(sender, "Here are your messages: ", isPrivate); - } - - if (message.isReceived()) { - bot.send(sender, - Utils.bold(message.getSender()) + arrow + Utils.bold(message.getRecipient()) - + " [" + Utils.utcDateTime(message.getReceived()) + ", ID: " - + message.getId() + ", DELIVERED]", - isPrivate); - - } else { - bot.send(sender, - Utils.bold(message.getSender()) + arrow + Utils.bold(message.getRecipient()) - + " [" + Utils.utcDateTime(message.getQueued()) + ", ID: " - + message.getId() + ", QUEUED]", - isPrivate); - } - - bot.send(sender, Utils.helpIndent(message.getMessage()), isPrivate); - } - } - - if (!hasMessage) { - bot.send(sender, "You have no messages in the queue.", isPrivate); - } else { - bot.send(sender, "To delete one or all delivered messages:", isPrivate); - bot.send(sender, - Utils.helpIndent(bot.getNick() + ": " + TELL_CMD + ' ' + TELL_DEL_KEYWORD + " '), isPrivate); - bot.send(sender, - "Messages are kept for " + Utils.bold(maxDays) + Utils.plural(maxDays, " day.", " days."), - isPrivate); - } + viewMessages(sender, isPrivate); } } else if (cmds.startsWith(TELL_DEL_KEYWORD + ' ')) { - final String[] split = cmds.split(" "); - - if (split.length == 2) { - final String id = split[1]; - boolean deleted = false; - - if (TELL_ALL_KEYWORD.equalsIgnoreCase(id)) { - for (final TellMessage message : messages) { - if (message.getSender().equalsIgnoreCase(sender) && message.isReceived()) { - messages.remove(message); - deleted = true; - } - } - - if (deleted) { - save(); - bot.send(sender, "Delivered messages have been deleted.", isPrivate); - } else { - bot.send(sender, "No delivered messages were found.", isPrivate); - } - - } else { - boolean found = false; - - for (final TellMessage message : messages) { - found = message.isMatchId(id); - - if (found && (message.getSender().equalsIgnoreCase(sender) || bot.isOp(sender))) { - messages.remove(message); - - save(); - bot.send(sender, "Your message was deleted from the queue.", isPrivate); - deleted = true; - break; - } - } - - if (!deleted) { - if (found) { - bot.send(sender, "Only messages that you sent can be deleted.", isPrivate); - } else { - bot.send(sender, "The specified message [ID " + id + "] could not be found.", isPrivate); - } - } - } - } else { - helpResponse(sender, isPrivate); - } + deleteMessage(sender, cmds, isPrivate); } else { - final String[] split = cmds.split(" ", 2); - - if (split.length == 2 && (StringUtils.isNotBlank(split[1]) && split[1].contains(" "))) { - if (messages.size() < maxSize) { - final TellMessage message = new TellMessage(sender, split[0], split[1].trim()); - - messages.add(message); - - save(); - - bot.send(sender, "Message [ID " + message.getId() + "] was queued for " - + Utils.bold(message.getRecipient()), true); - } else { - bot.send(sender, "Sorry, the messages queue is currently full.", true); - } - } else { - helpResponse(sender, isPrivate); - } + newMessage(sender, cmds, isPrivate); } if (clean()) { @@ -351,4 +310,61 @@ public class Tell { public int size() { return messages.size(); } + + // View all messages. + private void viewAll(final String sender, final boolean isPrivate) { + if (!messages.isEmpty()) { + for (final TellMessage message : messages) { + bot.send(sender, Utils.bold(message.getSender()) + ARROW + Utils.bold(message.getRecipient()) + + " [ID: " + message.getId() + ", " + + (message.isReceived() ? "DELIVERED" : "QUEUED") + ']', + isPrivate); + } + } else { + bot.send(sender, "There are no messages in the queue.", isPrivate); + } + } + + // View messages. + private void viewMessages(final String sender, final boolean isPrivate) { + boolean hasMessage = false; + + for (final TellMessage message : messages) { + if (message.isMatch(sender)) { + if (!hasMessage) { + hasMessage = true; + bot.send(sender, "Here are your messages: ", isPrivate); + } + + if (message.isReceived()) { + bot.send(sender, + Utils.bold(message.getSender()) + ARROW + Utils.bold(message.getRecipient()) + + " [" + Utils.utcDateTime(message.getReceived()) + ", ID: " + + Utils.bold(message.getId()) + ", DELIVERED]", + isPrivate); + + } else { + bot.send(sender, + Utils.bold(message.getSender()) + ARROW + Utils.bold(message.getRecipient()) + + " [" + Utils.utcDateTime(message.getQueued()) + ", ID: " + + Utils.bold(message.getId()) + ", QUEUED]", + isPrivate); + } + + bot.send(sender, Utils.helpIndent(message.getMessage()), isPrivate); + } + } + + if (!hasMessage) { + bot.send(sender, "You have no messages in the queue.", isPrivate); + } else { + bot.send(sender, "To delete one or all delivered messages:", isPrivate); + bot.send(sender, + Utils.helpIndent(bot.getNick() + ": " + TELL_CMD + ' ' + TELL_DEL_KEYWORD + " '), isPrivate); + bot.send(sender, + "Messages are kept for " + Utils.bold(maxDays) + Utils.plural(maxDays, " day.", " days."), + isPrivate); + } + } } diff --git a/src/main/java/net/thauvin/erik/mobibot/modules/GoogleSearch.java b/src/main/java/net/thauvin/erik/mobibot/modules/GoogleSearch.java index 9e92783..e8b6597 100644 --- a/src/main/java/net/thauvin/erik/mobibot/modules/GoogleSearch.java +++ b/src/main/java/net/thauvin/erik/mobibot/modules/GoogleSearch.java @@ -66,8 +66,6 @@ public final class GoogleSearch extends ThreadedModule { static final String GOOGLE_CSE_KEY_PROP = "google-cse-cx"; // Google command private static final String GOOGLE_CMD = "google"; - // Tab indent (4 spaces) - private static final String TAB_INDENT = " "; /** * Creates a new {@link GoogleSearch} instance. @@ -126,7 +124,7 @@ public final class GoogleSearch extends ThreadedModule { final JSONObject j = ja.getJSONObject(i); results.add(new NoticeMessage(Utils.unescapeXml(j.getString("title")))); results.add( - new NoticeMessage(TAB_INDENT + j.getString("link"), Colors.DARK_GREEN)); + new NoticeMessage(Utils.helpIndent(j.getString("link"), false), Colors.DARK_GREEN)); } } } catch (IOException e) { @@ -135,7 +133,7 @@ public final class GoogleSearch extends ThreadedModule { return results; } else { - throw new ModuleException("Invalid query."); + throw new ModuleException("Invalid query. Please try again."); } }