Browse Source

extend mailFunctions.py to else provide mailbox folder + add gson hook to get actual java booleans from json + add serialized names to Message class + java access to fetchMailsFromBox function from python now supports custom imap ports + extend MailServerCredentials Class to hold a custom smtp port + experimentally list fetch all draft messages, get them as an arraylist of Message.class and print them out when adding a new email account

Noah Vogt 3 years ago
parent
commit
10a262b61c

+ 11 - 1
app/src/main/java/com/noahvogt/miniprojekt/DataBase/Message.java

@@ -5,6 +5,8 @@ import androidx.room.ColumnInfo;
 import androidx.room.Entity;
 import androidx.room.PrimaryKey;
 
+import com.google.gson.annotations.SerializedName;
+
 /* @Embedded to express entitys together
  *  https://developer.android.com/training/data-storage/room/relationships
  * to learn more */
@@ -18,34 +20,42 @@ public class Message {
     /* name of Columm */
     @NonNull
     @ColumnInfo(name = "to")
+    @SerializedName("to")
     private String mTo ;
 
-
     @ColumnInfo(name = "cc")
+    @SerializedName("cc")
     private String mCc;
 
     @ColumnInfo(name = "bcc")
+    @SerializedName("bcc")
     private String mBcc; //blind carpet copy, not see who sees mails
 
     @NonNull
     @ColumnInfo(name = "fromEmail")
+    @SerializedName("from")
     private String mFrom;
 
     @NonNull
     @ColumnInfo(name = "date")
+    @SerializedName("date")
     private String mDate;
 
     @ColumnInfo(name = "subject")
+    @SerializedName("subject")
     private String mSubject;
 
     @ColumnInfo(name = "textContent")
+    @SerializedName("content")
     private String mTextContent;
 
     @NonNull
     @ColumnInfo(name = "folder")
+    @SerializedName("folder")
     private String mFolder;
 
     @ColumnInfo(name = "seen")
+    @SerializedName("seen")
     private boolean mSeen;
 
     public String getTo(){return this.mTo;}

+ 4 - 1
app/src/main/java/com/noahvogt/miniprojekt/MailServerCredentials.java

@@ -6,6 +6,7 @@ public class MailServerCredentials {
     private String mUsername;
     private String mPassword;
     private int mImapPort;
+    private int mSmtpPort;
     private String mName;
     private String mSignature;
 
@@ -14,16 +15,18 @@ public class MailServerCredentials {
     public String getUsername () {return this.mUsername;}
     public String getPassword () {return this.mPassword;}
     public int getImapPort () {return this.mImapPort;}
+    public int getSmtpPort () {return  this.mSmtpPort;}
     public String getName () {return this.mName;}
     public String getSignature () {return this.mSignature;}
 
-    public MailServerCredentials(String name, String username, String password, String imapHost, String smtpHost, int imapPort, String signature) {
+    public MailServerCredentials(String name, String username, String password, String imapHost, String smtpHost, int imapPort, int smtpPort, String signature) {
         mName = name;
         mUsername = username;
         mPassword = password;
 
         mImapHost = imapHost;
         mImapPort = imapPort;
+        mSmtpPort = smtpPort;
         mSmtpHost = smtpHost;
 
         mSignature = signature;

+ 7 - 7
app/src/main/java/com/noahvogt/miniprojekt/MainActivity.java

@@ -382,25 +382,25 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
                     /* safe mail server login credentials */
                     MailServerCredentials newMailServerCredentials = new MailServerCredentials(
-                            name, password, email, MailFunctions.getImapHostFromEmail(email), MailFunctions.getSmtpHostFromEmail(email), 993, "");
+                            name, email, password, MailFunctions.getImapHostFromEmail(email), MailFunctions.getSmtpHostFromEmail(email), 993, "");
                     String newCredentialsJson = gson.toJson(newMailServerCredentials);
                     System.out.println(newCredentialsJson);
                     credentialsEditor.putString("data", newCredentialsJson);
                     credentialsEditor.apply();
 
-                    /* download all messages from mail server
+                    /* download all messages from mail server */
 
-                    /* read login credentials from SharedPreferences
+                    /* read login credentials from SharedPreferences */
                     SharedPreferences credentialsReader = getSharedPreferences("UserPreferences", Context.MODE_PRIVATE);
                     String readJsonData = credentialsReader.getString("data", "");
                     MailServerCredentials readMailServerCredentials = gson.fromJson(readJsonData, MailServerCredentials.class);
                     //System.out.println(newMailServerCredentials);
 
-                    /* print out draft messages
-                    String fetchedMails = MailFunctions.fetchMailsFromBox(MailFunctions.getIMAPConnection(newMailServerCredentials.getImapHost(), newMailServerCredentials.getUsername(),
-                            newMailServerCredentials.getPassword()), "Drafts");
+                    /* print out draft messages */
+                    String fetchedMails = MailFunctions.fetchMailsFromBox(MailFunctions.getIMAPConnection(newMailServerCredentials.getImapHost(),
+                            newMailServerCredentials.getUsername(), newMailServerCredentials.getPassword()), "Drafts");
                     System.out.println(fetchedMails);
-*/
+
                 } else {
                     askForChangeMailServerSettingsDialog(name, email, password);
                 }

+ 26 - 0
app/src/main/java/com/noahvogt/miniprojekt/data/BooleanTypeAdapter.java

@@ -0,0 +1,26 @@
+package com.noahvogt.miniprojekt.data;
+
+import java.lang.reflect.Type;
+import com.google.gson.*;
+public class BooleanTypeAdapter implements JsonDeserializer<Boolean> {
+    public Boolean deserialize(JsonElement json, Type typeOfT,
+                               JsonDeserializationContext context) throws JsonParseException {
+        if (((JsonPrimitive) json).isBoolean()) {
+            return json.getAsBoolean();
+        }
+        if (((JsonPrimitive) json).isString()) {
+            String jsonValue = json.getAsString();
+            if (jsonValue.equalsIgnoreCase("true")) {
+                return true;
+            } else if (jsonValue.equalsIgnoreCase("false")) {
+                return false;
+            } else {
+                return null;
+            }
+        }
+
+        int code = json.getAsInt();
+        return code == 0 ? false :
+                code == 1 ? true : null;
+    }
+}

+ 2 - 2
app/src/main/java/com/noahvogt/miniprojekt/data/MailFunctions.java

@@ -22,10 +22,10 @@ public class MailFunctions {
         pythonMailFunctions.callAttr("sendStarttls", host, sendingMail, receivingMail, password, message, subject, 587, cc, bcc);
     }
 
-    public static PyObject getIMAPConnection(String host, String email, String password) {
+    public static PyObject getIMAPConnection(String host, String email, String password, int port) {
         Python python = Python.getInstance();
         PyObject pythonMailFunctions = python.getModule("mailFunctions");
-        return pythonMailFunctions.callAttr("connect", host, email, password, 993);
+        return pythonMailFunctions.callAttr("connect", host, email, password, port);
     }
 
     public static List listMailboxes(PyObject IMAPConnection) {

+ 1 - 1
app/src/main/java/com/noahvogt/miniprojekt/data/ReadInMailsActivity.java

@@ -29,7 +29,7 @@ public class ReadInMailsActivity extends AppCompatActivity {
         if (MailFunctions.canConnect(MailFunctions.getImapHostFromEmail(mEmail), mEmail, mPassword) == Boolean.TRUE) {
             //showToast("was able to connect");
 
-            List folders = MailFunctions.listMailboxes(MailFunctions.getIMAPConnection(MailFunctions.getImapHostFromEmail(mEmail), mEmail, mPassword));
+            List folders = MailFunctions.listMailboxes(MailFunctions.getIMAPConnection(MailFunctions.getImapHostFromEmail(mEmail), mEmail, mPassword, 993));
             for (int i = 0; i < folders.size(); i++) {
                 //showToast(folders.get(i).toString());
                 // TODO: select right folder to store, Synchronization

+ 1 - 0
app/src/main/python/mailFunctions.py

@@ -168,6 +168,7 @@ def fetchMails(connection, inbox):
             output_dict['to'] = stringCompiling(raw_to)
             output_dict['date'] = stringCompiling(raw_date)
             output_dict['content'] = primitive_body
+            output_dict['folder'] = inbox
             if seentype == '(SEEN)':
                 output_dict['seen'] = "True"
             else: