From 20cb565f2fd41d39413f396ce5c3aace670134df Mon Sep 17 00:00:00 2001 From: Isky Date: Sun, 4 Aug 2024 22:17:40 +0800 Subject: [PATCH] updated getEmail and getScannedEmail endpoints. Added Polling and Rescan Inbox feature for EmailScreen.tsx --- api/qrCodeAPI.tsx | 102 ++++++++++++++++---------- screens/EmailScreen.tsx | 159 +++++++++++++++++++++++++--------------- 2 files changed, 162 insertions(+), 99 deletions(-) diff --git a/api/qrCodeAPI.tsx b/api/qrCodeAPI.tsx index 9a6d038..ad4bdee 100644 --- a/api/qrCodeAPI.tsx +++ b/api/qrCodeAPI.tsx @@ -16,9 +16,9 @@ const API_URL_SET_BOOKMARK = "/v1/user/setBookmark"; const API_URL_DELETE_BOOKMARK = "/v1/user/deleteBookmark"; -const API_URL_GET_SCANNED_GMAILS = "/v1/gmail/getEmails"; -const API_URL_GET_USER = "/v1/user/getUser"; // New endpoint - +const API_URL_GET_EMAILS = "/v1/gmail/getEmails"; +const API_URL_GET_SCANNED_EMAILS = "/v1/gmail/getScannedEmails"; +const API_URL_GET_USER = "/v1/user/getUser"; // Create an Axios instance @@ -103,37 +103,6 @@ export const getQRCodeDetails = async (qrCodeId: string) => { }); }; -// Function to get scanned Gmail emails -export const getEmails = async (accessToken: string) => { - console.log("getEmails function called"); - - try { - console.log("Making API request to get scanned emails with accessToken:", accessToken); - const response = await apiRequest({ - method: 'get', - url: `${API_BASE_URL}${API_URL_GET_SCANNED_GMAILS}`, - headers: { - 'accessToken': accessToken, - }, - }); - - console.log("API Response:", response); - return response; - } catch (error) { - console.error("Error during getEmails API call:", error); - - if (error.response) { - console.error("Response error data:", error.response.data); - } else if (error.request) { - console.error("Request error, no response received:", error.request); - } else { - console.error("Error message:", error.message); - } - - throw error; - } -}; - //----------- // GET User's Scanned Histories @@ -187,14 +156,67 @@ export const deleteAllScannedHistories = async () => { }); }; -// GET Scan user's GMAILS -export const getScannedGmails = async () => { - return apiRequest({ - method: 'get', - url: `${API_BASE_URL}${API_URL_GET_SCANNED_GMAILS}` - }); +// GET already scanned emails from DB +export const getScannedEmails = async () => { + console.log("getScannedEmails function called"); + + try { + console.log("Making API request to get already scanned emails from the database"); + const response = await apiRequest({ + method: 'get', + url: `${API_BASE_URL}${API_URL_GET_SCANNED_EMAILS}` + }); + + console.log("API Response:", response); + return response; + } catch (error) { + console.error("Error during getScannedEmails API call:", error); + + if (error.response) { + console.error("Response error data:", error.response.data); + } else if (error.request) { + console.error("Request error, no response received:", error.request); + } else { + console.error("Error message:", error.message); + } + + throw error; + } }; +// Function to get start the scanning of inbox in server +export const getEmails = async (accessToken: string, refreshToken: string) => { + console.log("getEmails function called"); + + try { + console.log("Making API request to get Gmail emails with accessToken and refreshToken"); + const response = await apiRequest({ + method: 'get', + url: `${API_BASE_URL}${API_URL_GET_EMAILS}`, + headers: { + accessToken, + refreshToken, + }, + }); + + console.log("API Response:", response); + return response; + } catch (error) { + console.error("Error during getEmails API call:", error); + + if (error.response) { + console.error("Response error data:", error.response.data); + } else if (error.request) { + console.error("Request error, no response received:", error.request); + } else { + console.error("Error message:", error.message); + } + + throw error; + } +}; + + // Get user information export const getUserInfo = async () => { return apiRequest({ diff --git a/screens/EmailScreen.tsx b/screens/EmailScreen.tsx index f328627..727fb06 100644 --- a/screens/EmailScreen.tsx +++ b/screens/EmailScreen.tsx @@ -1,55 +1,83 @@ - import React, { useState, useEffect } from 'react'; import { View, Text, TouchableOpacity, FlatList, StyleSheet, ActivityIndicator, Alert } from 'react-native'; -import { getEmails } from '../api/qrCodeAPI'; +import { getEmails, getScannedEmails } from '../api/qrCodeAPI'; const EmailScreen: React.FC = () => { const [selectedMessage, setSelectedMessage] = useState(null); const [emailData, setEmailData] = useState(null); const [loading, setLoading] = useState(true); + const [rescanLoading, setRescanLoading] = useState(false); const [error, setError] = useState(null); - + useEffect(() => { - const fetchEmails = async () => { + startPollingForScannedEmails(); + }, []); + + // Function to initiate the email fetching process + const initiateEmailFetch = async () => { + setRescanLoading(true); + try { + // Call to start email fetching process + const response = await getEmails( + 'Access Token here', + 'Refresh Token here' + ); + setRescanLoading(false); + } catch (error) { + console.error('Error initiating email fetch:', error); + setError('Error rescanning inbox.'); + setRescanLoading(false); + } + }; + + // Function to poll for scanned emails + const startPollingForScannedEmails = () => { + const pollingInterval = setInterval(async () => { try { - const emails = await getEmails('access Token here!!!'); // Replace with actual token retrieval - setEmailData(emails); + const scannedEmails = await getScannedEmails(); + if (scannedEmails) { + setEmailData(scannedEmails); + clearInterval(pollingInterval); + setLoading(false); + } } catch (error) { + console.error('Error fetching scanned emails:', error); setError('Error fetching emails.'); - } finally { + clearInterval(pollingInterval); setLoading(false); } - }; - - fetchEmails(); - }, []); + }, 3000); // Poll every 3 seconds + }; const handleSelectMessage = (message) => { setSelectedMessage(selectedMessage === message ? null : message); }; - if (loading) { - return ( - - - Fetching emails... - - ); - } - - if (error) { - return ( - - {error} - - ); - } - return ( + {loading && ( + + + Fetching emails... + + )} + {error && ( + + {error} + + )} {emailData && ( <> - {emailData.emailAddress} + + + Rescan Inbox + + + {rescanLoading && ( + + Rescanning inbox... + + )} item.messageId} @@ -59,34 +87,34 @@ const EmailScreen: React.FC = () => { {item.date} {selectedMessage === item && ( - {item.qrCodeByContentId && ( - - QR Codes by Content ID: - {item.qrCodeByContentId.map((qrCode, index) => ( - - {qrCode.decodedContent.map((url, i) => ( - Alert.alert("Testing")}> - {url} - + {item.qrCodeByContentId && ( + + QR Codes by Content ID: + {item.qrCodeByContentId.map((qrCode, index) => ( + + {qrCode.decodedContent.map((url, i) => ( + Alert.alert("Testing")}> + {url} + + ))} + ))} - ))} - - )} + )} {item.qrCodeByURL && ( - - QR Codes by URL: - {item.qrCodeByURL.map((qrCode, index) => ( - - {qrCode.decodedContent.map((url, i) => ( - Alert.alert("Testing")}> - {url} - - ))} - - ))} - -)} + + QR Codes by URL: + {item.qrCodeByURL.map((qrCode, index) => ( + + {qrCode.decodedContent.map((url, i) => ( + Alert.alert("Testing")}> + {url} + + ))} + + ))} + + )} )} @@ -115,11 +143,24 @@ const styles = StyleSheet.create({ backgroundColor: '#f8f0fc', padding: 10, }, - loadingText: { - fontSize: 18, - color: '#ff69b4', - marginBottom: 10, - textAlign: 'center', + buttonContainer: { + justifyContent: 'center', + alignItems: 'center', + marginVertical: 20, + }, + button: { + backgroundColor: '#ff69b4', + padding: 10, + borderRadius: 5, + }, + buttonText: { + color: '#fff', + fontWeight: 'bold', + }, + rescanIndicator: { + justifyContent: 'center', + alignItems: 'center', + marginVertical: 10, }, emailListContainer: { flex: 1,