Эх сурвалжийг харах

reading in messages in DB works

Simon Hammer 3 жил өмнө
parent
commit
d133df0d99

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

@@ -52,6 +52,7 @@ import com.noahvogt.miniprojekt.data.BooleanTypeAdapter;
 
 import java.lang.reflect.Type;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -68,6 +69,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
     public static final int NEW_WORD_ACTIVITY_REQUEST_CODE = 1;
     public static final String emailData = "Email";
     public static final String passwordData = "Password";
+    public static final String nameData = "Name";
     public static EmailViewModel mEmailViewModel;
     public static RecyclerView recyclerView;
 
@@ -289,6 +291,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         dialog.show();
     }
 
+    public static MailServerCredentials newMailServerCredentials;
+    public static SharedPreferences.Editor credentialsEditor;
+
     public void createNewEmailDialog(){
         /* define View window */
         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
@@ -311,7 +316,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         dialog.show();
 
         SharedPreferences.Editor preferencesEditor = preferences.edit();
-        SharedPreferences.Editor credentialsEditor = mailServerCredentials.edit();
+        credentialsEditor = mailServerCredentials.edit();
 
         if (! Python.isStarted()) {
             Python.start(new AndroidPlatform(this));
@@ -329,7 +334,8 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
                 Data.Builder builder = new Data.Builder();
                 builder.putString(emailData, email)
-                        .putString(passwordData, password);
+                        .putString(passwordData, password)
+                        .putString(nameData, name);
 
                 if (!MailFunctions.validateEmail(newemail_email) | !MailFunctions.validateName(newemail_name) | !MailFunctions.validatePassword(newemail_password)) {
                     return;
@@ -339,10 +345,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                 if (MailFunctions.canConnect(MailFunctions.getImapHostFromEmail(email), email, password) == Boolean.TRUE) {
                     showToast("was able to connect");
 
-<<<<<<< HEAD
-                    dialog.dismiss();
-                    /*makes request to worker and gives data to it*/
-                    mEmailViewModel.applyDownload(builder.build());
 
                     /*
                     Intent intent = new Intent(getBaseContext(), DownloadWorker.class);
@@ -398,12 +400,12 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                     preferencesEditor.apply();
 
                     /* init custom gson with hook to parse booleans correctly */
-                    GsonBuilder builder = new GsonBuilder();
-                    builder.registerTypeAdapter(Boolean.class, new BooleanTypeAdapter());
-                    Gson gson = builder.create();
+                    GsonBuilder gsonBuilder = new GsonBuilder();
+                    gsonBuilder.registerTypeAdapter(Boolean.class, new BooleanTypeAdapter());
+                    Gson gson = gsonBuilder.create();
 
                     /* safe mail server login credentials */
-                    MailServerCredentials newMailServerCredentials = new MailServerCredentials(
+                    newMailServerCredentials = new MailServerCredentials(
                             name, email, password, MailFunctions.getImapHostFromEmail(email), MailFunctions.getSmtpHostFromEmail(email), 993, 587, "");
                     String newCredentialsJson = gson.toJson(newMailServerCredentials);
                     System.out.println(newCredentialsJson);
@@ -417,6 +419,10 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                     String readJsonData = credentialsReader.getString("data", "");
                     MailServerCredentials readMailServerCredentials = gson.fromJson(readJsonData, MailServerCredentials.class);
 
+                    dialog.dismiss();
+                    /*makes request to worker and gives data to it*/
+                    mEmailViewModel.applyDownload(builder.build());
+
                     /* fetch and print draft messages */
                     String fetchedMails = MailFunctions.fetchMailsFromBox(MailFunctions.getIMAPConnection(newMailServerCredentials.getImapHost(),
                             newMailServerCredentials.getUsername(), newMailServerCredentials.getPassword(), newMailServerCredentials.getImapPort()), "Drafts");
@@ -436,17 +442,8 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         });
 
 
-<<<<<<< HEAD
         newemail_cancel_button.setOnClickListener(v -> dialog.dismiss());
 
-=======
-        newemail_cancel_button.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                dialog.dismiss();
-            }
-        });
->>>>>>> 5f6a1c7705d3f893ac179bbc5641f5813f31fb08
     }
 
 

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

@@ -55,13 +55,15 @@ public class EmailViewHolder extends RecyclerView.ViewHolder {
         if (message.length() > 30){
             message = message.substring(0,30) + "...";
         }
-        if (date.length() > 9){
+        /*if (date.length() > 9){
             date = "INVALID";
         }
         if (!isDate(date)){
             date = "INVALID";
         }
 
+         */
+
         fromItemView.setText(from);
         subjectItemView.setText(subject);
         dateItemView.setText(date);

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

@@ -34,19 +34,11 @@ public class MailFunctions {
         return pythonMailFunctions.callAttr("listMailboxes", IMAPConnection).asList();
     }
 
-<<<<<<< HEAD
-    public static PyObject fetchMailsFromBox(PyObject IMAPConnection, String Folder) {
-        Python python = Python.getInstance();
-        PyObject pythonMailFunctions = python.getModule("mailFunctions");
-        System.out.println(pythonMailFunctions);
-        System.out.println("YAAAAAAYYYY " + pythonMailFunctions.callAttr("fetchMails", IMAPConnection, Folder).toString() + "\n For REAAALLL");
-        return pythonMailFunctions.callAttr("fetchMails", IMAPConnection, Folder);
-=======
+
     public static String fetchMailsFromBox(PyObject IMAPConnection, String Folder) {
         Python python = Python.getInstance();
         PyObject pythonMailFunctions = python.getModule("mailFunctions");
         return pythonMailFunctions.callAttr("fetchMails", IMAPConnection, Folder).toString();
->>>>>>> 5f6a1c7705d3f893ac179bbc5641f5813f31fb08
     }
 
 

+ 59 - 4
app/src/main/java/com/noahvogt/miniprojekt/workers/DownloadWorker.java

@@ -1,6 +1,7 @@
 package com.noahvogt.miniprojekt.workers;
 
 import android.content.Context;
+import android.content.SharedPreferences;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
@@ -8,13 +9,24 @@ import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
 import com.chaquo.python.PyObject;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
+import com.noahvogt.miniprojekt.DataBase.Message;
+import com.noahvogt.miniprojekt.MailServerCredentials;
 import com.noahvogt.miniprojekt.MainActivity;
+import com.noahvogt.miniprojekt.data.BooleanTypeAdapter;
 import com.noahvogt.miniprojekt.data.MailFunctions;
 
 import org.jetbrains.annotations.NotNull;
 
+import java.lang.reflect.Type;
+import java.util.ArrayList;
 import java.util.List;
 
+import static com.noahvogt.miniprojekt.MainActivity.mEmailViewModel;
+import static com.noahvogt.miniprojekt.MainActivity.newMailServerCredentials;
+
 public class DownloadWorker extends Worker {
 
     public DownloadWorker(
@@ -33,20 +45,63 @@ public class DownloadWorker extends Worker {
             try {
                 String mEmail = getInputData().getString(MainActivity.emailData);
                 String mPassword = getInputData().getString(MainActivity.passwordData);
+                String mName = getInputData().getString(MainActivity.nameData);
 
-                    List folders = MailFunctions.listMailboxes(MailFunctions.getIMAPConnection(MailFunctions.getImapHostFromEmail(mEmail), mEmail, mPassword));
+                    /*List folders = MailFunctions.listMailboxes(MailFunctions.getIMAPConnection(MailFunctions.getImapHostFromEmail(mEmail), mEmail, mPassword, 993));
                     System.out.println(folders);
                     for (int i = 0; i < folders.size(); i++) {
                         //showToast(folders.get(i).toString());
                         // TODO: select right folder to store, Synchronization
                         /*gives list of Message Objects/dictionaries */
-                        PyObject messages = MailFunctions.fetchMailsFromBox(
+                        /*String messages = MailFunctions.fetchMailsFromBox(
                                 MailFunctions.getIMAPConnection(
-                                        MailFunctions.getImapHostFromEmail(mEmail), mEmail, mPassword),
+                                        MailFunctions.getImapHostFromEmail(mEmail), mEmail, mPassword, 993),
                                 folders.get(i).toString());
                         System.out.println(folders.get(i).toString());
                         System.out.println(messages);
-                    }
+
+                         */
+
+                /* init custom gson with hook to parse booleans correctly */
+                GsonBuilder gsonBuilder = new GsonBuilder();
+                gsonBuilder.registerTypeAdapter(Boolean.class, new BooleanTypeAdapter());
+                Gson gson = gsonBuilder.create();
+
+                /* safe mail server login credentials */
+                newMailServerCredentials = new MailServerCredentials(
+                        mName, mEmail, mPassword, MailFunctions.getImapHostFromEmail(mEmail), MailFunctions.getSmtpHostFromEmail(mEmail), 993, 587, "");
+                String newCredentialsJson = gson.toJson(newMailServerCredentials);
+                System.out.println(newCredentialsJson);
+                MainActivity.credentialsEditor.putString("data", newCredentialsJson);
+                MainActivity.credentialsEditor.apply();
+
+                /* download all messages from mail server */
+
+                /* read login credentials from SharedPreferences */
+                SharedPreferences credentialsReader = getApplicationContext().getSharedPreferences("UserPreferences", Context.MODE_PRIVATE);
+                String readJsonData = credentialsReader.getString("data", "");
+                MailServerCredentials readMailServerCredentials = gson.fromJson(readJsonData, MailServerCredentials.class);
+
+
+                /* fetch and print draft messages */
+                String fetchedMails = MailFunctions.fetchMailsFromBox(MailFunctions.getIMAPConnection(newMailServerCredentials.getImapHost(),
+                        newMailServerCredentials.getUsername(), newMailServerCredentials.getPassword(), newMailServerCredentials.getImapPort()), "INBOX");
+                System.out.println("Yaaay" + fetchedMails + "\n MAANCBJC");
+
+                /* parse messages in arraylist of Message class and loop through it */
+                Type messageType = new TypeToken<ArrayList<Message>>(){}.getType();
+                ArrayList<Message> messages = gson.fromJson(fetchedMails, messageType);
+                for (int i = 0; i < messages.size(); i++) {
+                    Message message = messages.get(i);
+                    mEmailViewModel.insert(message);
+                    System.out.println("Message #" + i);
+                    System.out.println("Date: " + message.getDate());
+                    System.out.println("Subject: " + message.getSubject());
+                    System.out.println(messages.get(i).toString());
+                }
+
+
+
 
 
                 return Result.success();