Skip to content

Latest commit

 

History

History
80 lines (69 loc) · 2.78 KB

File metadata and controls

80 lines (69 loc) · 2.78 KB
public class ClipBuddy {

    public static final Path PATH = Path.of("notes.md");
    private static String oldData = "";

    public static void main(String[] args) throws IOException, UnsupportedFlavorException, InterruptedException {
        clearClipboard();
        while (true) {
            readFromClipboard();
            TimeUnit.SECONDS.sleep(1);
        }
    }

    private static void readFromClipboard() throws IOException, UnsupportedFlavorException {
        var defaultToolkit = Toolkit.getDefaultToolkit();
        var systemClipboard = defaultToolkit.getSystemClipboard();
        var dataFlavorAvailable = systemClipboard.isDataFlavorAvailable(DataFlavor.stringFlavor);

        if (dataFlavorAvailable) {
            var data = systemClipboard.getData(DataFlavor.stringFlavor);
            if (data instanceof String s) {
                var normalizedText = TextCleaner.normalizeText(s);

                if (!oldData.equals(normalizedText)) {
                    System.out.println(normalizedText);
                    Files.writeString(PATH, normalizedText+ "\n\n", StandardOpenOption.APPEND);
                    oldData = normalizedText;
                }
            }
        }
    }

    private static void clearClipboard() {
        var defaultToolkit = Toolkit.getDefaultToolkit();
        var systemClipboard = defaultToolkit.getSystemClipboard();
        systemClipboard.setContents(new Transferable() {
            @Override
            public DataFlavor[] getTransferDataFlavors() {
                return new DataFlavor[0];
            }

            @Override
            public boolean isDataFlavorSupported(DataFlavor flavor) {
                return false;
            }

            @Override
            public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
                return null;
            }
        }, null);
    }
}
public class TextCleaner {

    public static String normalizeText(String text) {
        var finalText = new StringBuilder();
        var lines = text.split("\n");
        for (var line : lines) {
            var noSpaces = StringUtils.normalizeSpace(line).strip();
            if (noSpaces.endsWith("-")) {
                var joinWord = noSpaces.substring(0, noSpaces.length() - 1);
                finalText.append(joinWord);
            } else if (noSpaces.startsWith("")) {
                finalText.append(noSpaces.replace("", "\n*")).append(" ");
            } else if (noSpaces.endsWith(".PNG") || noSpaces.endsWith(".png")) {
                finalText.append("![").append(noSpaces).append("]").append("(pictures/").append(noSpaces).append(")");
            } else {
                finalText.append(noSpaces).append(" ");
            }
        }
        return finalText.toString().strip();
    }
}