diff --git a/app/src/main/java/org/houxg/leanotelite/service/NoteService.java b/app/src/main/java/org/houxg/leanotelite/service/NoteService.java
index 2ba2252..bc3299d 100644
--- a/app/src/main/java/org/houxg/leanotelite/service/NoteService.java
+++ b/app/src/main/java/org/houxg/leanotelite/service/NoteService.java
@@ -25,8 +25,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
@@ -152,57 +150,11 @@ public class NoteService {
AppDataBase.deleteFileExcept(noteLocalId, excepts);
}
- public static String replace(String content, String tagExp, String targetExp, Replacer replacer, Object... extraData) {
- Pattern tagPattern = Pattern.compile(tagExp);
- Pattern targetPattern = Pattern.compile(targetExp);
- Matcher tagMather = tagPattern.matcher(content);
- StringBuilder contentBuilder = new StringBuilder(content);
- int offset = 0;
- while (tagMather.find()) {
- String tag = tagMather.group();
- Matcher targetMatcher = targetPattern.matcher(tag);
- if (!targetMatcher.find()) {
- continue;
- }
- String original = targetMatcher.group();
- int originalLen = original.length();
- String modified = replacer.replaceWith(original, extraData);
- contentBuilder.replace(tagMather.start() + targetMatcher.start() + offset,
- tagMather.end() - (tag.length() - targetMatcher.end()) + offset,
- modified);
- offset += modified.length() - originalLen;
- }
- return contentBuilder.toString();
- }
-
- public static void find(String content, String tagExp, String targetExp, Finder finder, Object... extraData) {
- Pattern tagPattern = Pattern.compile(tagExp);
- Pattern targetPattern = Pattern.compile(targetExp);
- Matcher tagMather = tagPattern.matcher(content);
- while (tagMather.find()) {
- String tag = tagMather.group();
- Matcher targetMatcher = targetPattern.matcher(tag);
- if (!targetMatcher.find()) {
- continue;
- }
- String original = targetMatcher.group();
- finder.onFound(original);
- }
- }
-
- public interface Finder {
- void onFound(String original, Object... extraData);
- }
-
- public interface Replacer {
- String replaceWith(String original, Object... extraData);
- }
-
private static String convertToLocalImageLinkForRichText(long noteLocalId, String noteContent) {
- return replace(noteContent,
+ return StringUtils.replace(noteContent,
"
]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>",
String.format(Locale.US, "\\ssrc\\s*=\\s*\"%s/api/file/getImage\\?fileId=.*?\"", AccountService.getCurrent().getHost()),
- new Replacer() {
+ new StringUtils.Replacer() {
@Override
public String replaceWith(String original, Object... extraData) {
Log.i(TAG, "in=" + original);
@@ -225,10 +177,10 @@ public class NoteService {
}
private static String convertToLocalImageLinkForMD(long noteLocalId, String noteContent) {
- return replace(noteContent,
+ return StringUtils.replace(noteContent,
String.format(Locale.US, "!\\[.*?\\]\\(%s/api/file/getImage\\?fileId=.*?\\)", AccountService.getCurrent().getHost()),
String.format(Locale.US, "\\(%s/api/file/getImage\\?fileId=.*?\\)", AccountService.getCurrent().getHost()),
- new Replacer() {
+ new StringUtils.Replacer() {
@Override
public String replaceWith(String original, Object... extraData) {
Uri linkUri = Uri.parse(original.substring(1, original.length() - 1));
@@ -276,10 +228,10 @@ public class NoteService {
}
private static String convertToServerImageLinkForMD(String noteContent) {
- return replace(noteContent,
+ return StringUtils.replace(noteContent,
"!\\[.*?\\]\\(file:/getImage\\?id=.*?\\)",
"\\(file:/getImage\\?id=.*?\\)",
- new Replacer() {
+ new StringUtils.Replacer() {
@Override
public String replaceWith(String original, Object... extraData) {
Uri linkUri = Uri.parse(original.substring(1, original.length() - 1));
@@ -294,10 +246,10 @@ public class NoteService {
}
private static String convertToServerImageLinkForRichText(String noteContent) {
- return replace(noteContent,
+ return StringUtils.replace(noteContent,
"
]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>",
"\\ssrc\\s*=\\s*\"file:/getImage\\?id=.*?\"",
- new Replacer() {
+ new StringUtils.Replacer() {
@Override
public String replaceWith(String original, Object... extraData) {
Uri linkUri = Uri.parse(original.substring(6, original.length() - 1));
@@ -361,9 +313,8 @@ public class NoteService {
requestBodyMap.put("Content", createPartFromString(content));
requestBodyMap.put("IsMarkdown", createPartFromString(getBooleanString(note.isMarkDown())));
requestBodyMap.put("IsBlog", createPartFromString(getBooleanString(note.isPublicBlog())));
- long current = System.currentTimeMillis();
- requestBodyMap.put("CreatedTime", createPartFromString(TimeUtils.toServerTime(current)));
- requestBodyMap.put("UpdatedTime", createPartFromString(TimeUtils.toServerTime(current)));
+ requestBodyMap.put("CreatedTime", createPartFromString(TimeUtils.toServerTime(note.getCreatedTimeVal())));
+ requestBodyMap.put("UpdatedTime", createPartFromString(TimeUtils.toServerTime(note.getUpdatedTimeVal())));
List imageLocalIds;
if (note.isMarkDown()) {
@@ -392,10 +343,10 @@ public class NoteService {
private static List getImagesFromContentForRichText(String noteContent) {
final List localIds = new ArrayList<>();
- find(noteContent,
+ StringUtils.find(noteContent,
"
]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>",
"\\ssrc\\s*=\\s*\"file:/getImage\\?id=.*?\"",
- new Finder() {
+ new StringUtils.Finder() {
@Override
public void onFound(String original, Object... extraData) {
Uri linkUri = Uri.parse(original.substring(6, original.length() - 1));
@@ -408,10 +359,10 @@ public class NoteService {
private static List getImagesFromContentForMD(String noteContent) {
final List localIds = new ArrayList<>();
- find(noteContent,
+ StringUtils.find(noteContent,
"!\\[.*?\\]\\(file:/getImage\\?id=.*?\\)",
"\\(file:/getImage\\?id=.*?\\)",
- new Finder() {
+ new StringUtils.Finder() {
@Override
public void onFound(String original, Object... extraData) {
Uri linkUri = Uri.parse(original.substring(1, original.length() - 1));
diff --git a/app/src/main/java/org/houxg/leanotelite/utils/StringUtils.java b/app/src/main/java/org/houxg/leanotelite/utils/StringUtils.java
index 558b8bd..cb194c9 100644
--- a/app/src/main/java/org/houxg/leanotelite/utils/StringUtils.java
+++ b/app/src/main/java/org/houxg/leanotelite/utils/StringUtils.java
@@ -1,8 +1,57 @@
package org.houxg.leanotelite.utils;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
public class StringUtils {
public static String notNullStr(String str) {
return str == null ? "" : str;
}
+
+ public static void find(String content, String tagExp, String targetExp, Finder finder, Object... extraData) {
+ Pattern tagPattern = Pattern.compile(tagExp);
+ Pattern targetPattern = Pattern.compile(targetExp);
+ Matcher tagMather = tagPattern.matcher(content);
+ while (tagMather.find()) {
+ String tag = tagMather.group();
+ Matcher targetMatcher = targetPattern.matcher(tag);
+ if (!targetMatcher.find()) {
+ continue;
+ }
+ String original = targetMatcher.group();
+ finder.onFound(original);
+ }
+ }
+
+ public static String replace(String content, String tagExp, String targetExp, Replacer replacer, Object... extraData) {
+ Pattern tagPattern = Pattern.compile(tagExp);
+ Pattern targetPattern = Pattern.compile(targetExp);
+ Matcher tagMather = tagPattern.matcher(content);
+ StringBuilder contentBuilder = new StringBuilder(content);
+ int offset = 0;
+ while (tagMather.find()) {
+ String tag = tagMather.group();
+ Matcher targetMatcher = targetPattern.matcher(tag);
+ if (!targetMatcher.find()) {
+ continue;
+ }
+ String original = targetMatcher.group();
+ int originalLen = original.length();
+ String modified = replacer.replaceWith(original, extraData);
+ contentBuilder.replace(tagMather.start() + targetMatcher.start() + offset,
+ tagMather.end() - (tag.length() - targetMatcher.end()) + offset,
+ modified);
+ offset += modified.length() - originalLen;
+ }
+ return contentBuilder.toString();
+ }
+
+ public interface Finder {
+ void onFound(String original, Object... extraData);
+ }
+
+ public interface Replacer {
+ String replaceWith(String original, Object... extraData);
+ }
}
diff --git a/app/src/main/java/org/houxg/leanotelite/utils/TimeUtils.java b/app/src/main/java/org/houxg/leanotelite/utils/TimeUtils.java
index b72e2ab..08df60f 100644
--- a/app/src/main/java/org/houxg/leanotelite/utils/TimeUtils.java
+++ b/app/src/main/java/org/houxg/leanotelite/utils/TimeUtils.java
@@ -9,14 +9,29 @@ import java.util.Locale;
public class TimeUtils {
- private static final SimpleDateFormat mServerWithMillsFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX", Locale.US);
- private static final SimpleDateFormat mServerFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.US);
+ private static final SimpleDateFormat mServerWithMillsFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.US);
+ private static final SimpleDateFormat mServerFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.US);
private static final SimpleDateFormat mTimeFormat = new SimpleDateFormat("H:mm:ss", Locale.US);
private static final SimpleDateFormat mDateFormat = new SimpleDateFormat("M-dd H:mm:ss", Locale.US);
private static final SimpleDateFormat mYearFormat = new SimpleDateFormat("yyyy-M-dd H:mm:ss", Locale.US);
public static long toTimestamp(String serverTime) {
try {
+ serverTime = StringUtils.replace(serverTime,
+ "T\\d{2}:\\d{2}:\\d{2}.\\d+\\+",
+ "\\.\\d+",
+ new StringUtils.Replacer() {
+ @Override
+ public String replaceWith(String original, Object... extraData) {
+ String modified;
+ if (original.length() > 4) {
+ modified = original.substring(0, 4);
+ } else {
+ modified = original;
+ }
+ return modified;
+ }
+ });
Date date = mServerWithMillsFormat.parse(serverTime);
return date.getTime();
} catch (ParseException e) {