mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-01 22:56:33 +02:00
@@ -26,12 +26,12 @@ import org.json.JSONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.mail.Address;
|
||||
import javax.mail.internet.InternetAddress;
|
||||
@@ -1631,24 +1631,35 @@ public abstract class DB extends RoomDatabase {
|
||||
return jaddresses.toString();
|
||||
}
|
||||
|
||||
private static String JSPLIT = Pattern.quote("}],[{");
|
||||
|
||||
@TypeConverter
|
||||
public static Address[] decodeAddresses(String json) {
|
||||
if (json == null)
|
||||
return null;
|
||||
else if (json.startsWith("[[")) {
|
||||
// [[{"address":"...","personal":"..."}],[{... ...}]]
|
||||
// There is a slim chance somebody uses the split pattern in an email address
|
||||
String[] parts = json.substring(3, json.length() - 3).split(JSPLIT);
|
||||
Address[] addresses = new Address[parts.length];
|
||||
for (int i = 0; i < parts.length; i++)
|
||||
addresses[i] = InternetAddressJson.from(parts[i]);
|
||||
return addresses;
|
||||
} else {
|
||||
// [{"address":"...","personal":"..."}]
|
||||
return new Address[]{InternetAddressJson.from(json.substring(2, json.length() - 2))};
|
||||
List<Address> result = new ArrayList<>();
|
||||
try {
|
||||
JSONArray jroot = new JSONArray(json);
|
||||
JSONArray jaddresses = new JSONArray();
|
||||
for (int i = 0; i < jroot.length(); i++) {
|
||||
Object item = jroot.get(i);
|
||||
if (jroot.get(i) instanceof JSONArray)
|
||||
for (int j = 0; j < ((JSONArray) item).length(); j++)
|
||||
jaddresses.put(((JSONArray) item).get(j));
|
||||
else
|
||||
jaddresses.put(item);
|
||||
}
|
||||
for (int i = 0; i < jaddresses.length(); i++) {
|
||||
JSONObject jaddress = (JSONObject) jaddresses.get(i);
|
||||
String email = jaddress.getString("address");
|
||||
String personal = jaddress.optString("personal");
|
||||
if (TextUtils.isEmpty(personal))
|
||||
personal = null;
|
||||
result.add(new InternetAddress(email, personal, StandardCharsets.UTF_8.name()));
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
// Compose can store invalid addresses
|
||||
Log.w(ex);
|
||||
}
|
||||
return result.toArray(new Address[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user