From c3868f17444396e9e84981f41cac5dd0f538083e Mon Sep 17 00:00:00 2001 From: Victor Melnik Date: Fri, 2 Oct 2020 20:13:54 +0000 Subject: [PATCH] Fix filtering removed posts --- .gitignore | 5 +++ .../annimon/similarimagesbot/BotHandler.java | 31 ++++++++++++------- .../annimon/similarimagesbot/data/Post.java | 5 +++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 11d2870..15c04f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,9 @@ .idea +.vscode .gradle +.classpath +.project +.settings +bin build *.db \ No newline at end of file diff --git a/src/main/java/com/annimon/similarimagesbot/BotHandler.java b/src/main/java/com/annimon/similarimagesbot/BotHandler.java index 33f242e..f8d110b 100644 --- a/src/main/java/com/annimon/similarimagesbot/BotHandler.java +++ b/src/main/java/com/annimon/similarimagesbot/BotHandler.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Objects; +import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.imageio.ImageIO; @@ -44,27 +45,27 @@ public class BotHandler { public void run() { bot.setUpdatesListener(updates -> { - processAdminCommands(updates); - processUpdates(updates); + final var removedPosts = processAdminCommands(updates); + processUpdates(updates, removedPosts); return UpdatesListener.CONFIRMED_UPDATES_ALL; }); } public void runOnce() { final var updates = bot.execute(new GetUpdates()).updates(); - processAdminCommands(updates); - processUpdates(updates); + final var removedPosts = processAdminCommands(updates); + processUpdates(updates, removedPosts); } - private void processAdminCommands(List updates) { + private Set processAdminCommands(List updates) { final var delPattern = Pattern.compile("/del(\\d+)m(\\d+)"); - updates.stream() + return updates.stream() .map(Update::message) .filter(Objects::nonNull) .filter(msg -> msg.chat().id() == adminId) .map(Message::text) .filter(Objects::nonNull) - .forEach(command -> { + .map(command -> { final var m = delPattern.matcher(command); if (m.find()) { final var channelId = Long.parseLong("-100" + m.group(1)); @@ -72,21 +73,29 @@ public class BotHandler { bot.execute(new DeleteMessage(channelId, messageId)); try { indexer.deleteImage(channelId, messageId); - } catch (SQLException ignored) {} + } catch (SQLException ex) { + System.err.println("Cannot delete image in db"); + } + return new Post(channelId, messageId); } - }); + return null; + }) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); } - private void processUpdates(List updates) { + private void processUpdates(List updates, Set ignoredPosts) { final List channelPosts = getChannelPostsWithPhotos(updates); final var similarImagesInfos = new ArrayList(); for (var post : channelPosts) { + final var originalPost = new Post(post.chat().id(), post.messageId()); + if (ignoredPosts.contains(originalPost)) continue; + final PhotoSize photo = getSmallestPhoto(post.photo()); try { final var tgFile = bot.execute(new GetFile(photo.fileId())).file(); final var url = new URL(bot.getFullFilePath(tgFile)); final BufferedImage image = ImageIO.read(url); - final var originalPost = new Post(post.chat().id(), post.messageId()); final SimilarImagesInfo info = indexer.processImage(originalPost, image); if (info.hasResults()) { similarImagesInfos.add(info); diff --git a/src/main/java/com/annimon/similarimagesbot/data/Post.java b/src/main/java/com/annimon/similarimagesbot/data/Post.java index 014ba16..b60ec61 100644 --- a/src/main/java/com/annimon/similarimagesbot/data/Post.java +++ b/src/main/java/com/annimon/similarimagesbot/data/Post.java @@ -33,4 +33,9 @@ public class Post { public int hashCode() { return Objects.hash(channelId, messageId); } + + @Override + public String toString() { + return "{" + channelId + ":" + messageId + "}"; + } }