summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/app/fedilab/android/mastodon/helper/ComposeHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/app/fedilab/android/mastodon/helper/ComposeHelper.java')
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/helper/ComposeHelper.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/ComposeHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/ComposeHelper.java
new file mode 100644
index 000000000..faec45de5
--- /dev/null
+++ b/app/src/main/java/app/fedilab/android/mastodon/helper/ComposeHelper.java
@@ -0,0 +1,98 @@
+package app.fedilab.android.mastodon.helper;
+/* Copyright 2023 Thomas Schneider
+ *
+ * This file is a part of Fedilab
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with Fedilab; if not,
+ * see <http://www.gnu.org/licenses>. */
+
+import static app.fedilab.android.mastodon.helper.Helper.mentionLongPattern;
+import static app.fedilab.android.mastodon.helper.Helper.mentionPattern;
+
+import java.util.ArrayList;
+import java.util.regex.Matcher;
+
+public class ComposeHelper {
+
+
+ /**
+ * Allows to split the toot by dot "." for sentences - adds number at the end automatically
+ *
+ * @param content String initial content
+ * @param maxChars int the max chars per toot
+ * @return ArrayList<String> split toot
+ */
+ public static ArrayList<String> splitToots(String content, int maxChars) {
+ String[] splitContent = content.split("\\s");
+
+
+ ArrayList<String> mentions = new ArrayList<>();
+ int mentionLength = 0;
+ StringBuilder mentionString = new StringBuilder();
+ Matcher matcher = mentionLongPattern.matcher(content);
+ while (matcher.find()) {
+ String mentionLong = matcher.group(1);
+ if (!mentions.contains(mentionLong)) {
+ mentions.add(mentionLong);
+ }
+ }
+ matcher = mentionPattern.matcher(content);
+ while (matcher.find()) {
+ String mention = matcher.group(1);
+ if (!mentions.contains(mention)) {
+ mentions.add(mention);
+ }
+ }
+ for (String mention : mentions) {
+ mentionString.append(mention).append(" ");
+ }
+ mentionLength = mentionString.length() + 1;
+ int maxCharsPerMessage = maxChars - mentionLength;
+ int totalCurrent = 0;
+ ArrayList<String> reply = new ArrayList<>();
+ int index = 0;
+ for (String s : splitContent) {
+ if ((totalCurrent + s.length() + 1) < maxCharsPerMessage) {
+ totalCurrent += (s.length() + 1);
+ } else {
+ if (content.length() > totalCurrent && totalCurrent > 0) {
+ String tempContent = content.substring(0, (totalCurrent));
+ content = content.substring(totalCurrent);
+
+ reply.add(index, tempContent);
+ index++;
+ totalCurrent = s.length() + 1;
+ }
+ }
+ }
+ if (totalCurrent > 0) {
+ reply.add(index, content);
+ }
+ if (reply.size() > 1) {
+ int i = 0;
+ for (String r : reply) {
+ if (mentions.size() > 0) {
+ String tmpMention = mentionString.toString();
+ for (String mention : mentions) {
+ if (r.contains(mention)) {
+ tmpMention = tmpMention.replace(mention, "");
+ }
+ }
+ reply.set(i, r + " " + tmpMention);
+ } else {
+ reply.set(i, r);
+ }
+ i++;
+ }
+ }
+ return reply;
+ }
+}