Skip to content

Commit

Permalink
Merge pull request #1160 from the-bay-kay/fix_log_email
Browse files Browse the repository at this point in the history
✉️📭 Refractored `emailService.ts` into `shareLocalDBFile.ts`
  • Loading branch information
shankari authored Jul 8, 2024
2 parents a1be7dd + f3211a0 commit 3af54b7
Show file tree
Hide file tree
Showing 8 changed files with 135 additions and 70 deletions.
2 changes: 0 additions & 2 deletions package.cordovabuild.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@
"ANDROID_HOST": " ",
"ANDROID_PATHPREFIX": "/"
},
"cordova-plugin-email-composer": {},
"cordova-plugin-x-socialsharing": {
"PHOTO_LIBRARY_ADD_USAGE_DESCRIPTION": "This app requires photo library access to share photos on social media.",
"PHOTO_LIBRARY_USAGE_DESCRIPTION": "This app requires photo library access to share photos on social media."
Expand Down Expand Up @@ -128,7 +127,6 @@
"cordova-plugin-em-settings": "git+https://github.com/e-mission/cordova-connection-settings.git#v1.2.3",
"cordova-plugin-em-unifiedlogger": "git+https://github.com/e-mission/cordova-unified-logger.git#v1.3.6",
"cordova-plugin-em-usercache": "git+https://github.com/e-mission/cordova-usercache.git#v1.1.9",
"cordova-plugin-email-composer": "git+https://github.com/katzer/cordova-plugin-email-composer.git#0.10.1",
"cordova-plugin-file": "8.0.0",
"cordova-plugin-inappbrowser": "5.0.0",
"cordova-plugin-ionic-keyboard": "2.2.0",
Expand Down
12 changes: 5 additions & 7 deletions www/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"force-sync": "Force sync",
"share": "Share",
"download-json-dump": "Download json dump",
"email-log": "Email log",
"share-log": "Share log",
"upload-log": "Upload log",
"view-privacy": "View Privacy Policy",
"user-data": "User data",
Expand Down Expand Up @@ -278,16 +278,14 @@
"reading-unprocessed-data": "Reading unprocessed data..."
},

"email-service": {
"email-account-not-configured": "Email account is not configured, cannot send email",
"email-account-mail-app": "You must have the mail app on your phone configured with an email address. Otherwise, this won't work",
"going-to-email": "Going to email database from {{parentDir}}",
"email-log": {
"shareFile-service": {
"send-to": "Please send this file to [email protected], or another OpenPATH team member.",
"send-log": {
"subject-logs": "emission logs",
"body-please-fill-in-what-is-wrong": "please fill in what is wrong"
},
"no-email-address-configured": "No email address configured.",
"email-data": {
"send-data": {
"subject-data-dump-from-to": "Data dump from {{start}} to {{end}}",
"body-data-consists-of-list-of-entries": "Data consists of a list of entries.\nEntry formats are at https://github.com/e-mission/e-mission-server/tree/master/emission/core/wrapper \nData can be loaded locally using instructions at https://github.com/e-mission/e-mission-server#loading-test-data \n and can be manipulated using the example at https://github.com/e-mission/e-mission-server/blob/master/Timeseries_Sample.ipynb"
}
Expand Down
4 changes: 2 additions & 2 deletions www/js/control/LogPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
import { FlashList } from '@shopify/flash-list';
import { DateTime } from 'luxon';
import { AlertManager } from '../components/AlertBar';
import { sendEmail } from './emailService';
import { sendLocalDBFile } from '../services/shareLocalDBFile';
import { displayError, logDebug } from '../plugin/logger';
import NavBar from '../components/NavBar';

Expand Down Expand Up @@ -93,7 +93,7 @@ const LogPage = ({ pageVis, setPageVis }) => {
}

function emailLog() {
sendEmail('loggerDB');
sendLocalDBFile('loggerDB');
}

const separator = () => <View style={{ height: 8 }} />;
Expand Down
6 changes: 3 additions & 3 deletions www/js/control/ProfileSettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import useAppConfig from '../useAppConfig';
import { AlertManager } from '../components/AlertBar';
import DataDatePicker from './DataDatePicker';
import PrivacyPolicyModal from './PrivacyPolicyModal';
import { sendEmail } from './emailService';
import { sendLocalDBFile } from '../services/shareLocalDBFile';
import { uploadFile } from './uploadService';
import ActionMenu from '../components/ActionMenu';
import SensedPage from './SensedPage';
Expand Down Expand Up @@ -448,9 +448,9 @@ const ProfileSettings = () => {
action={() => setDateDumpVis(true)}></SettingRow>
{logUploadSection}
<SettingRow
textKey="control.email-log"
textKey="control.share-log"
iconName="email"
action={() => sendEmail('loggerDB')}></SettingRow>
action={() => sendLocalDBFile('loggerDB')}></SettingRow>
<SettingRow
textKey="control.refresh-app-config"
desc={t('control.current-version', { version: appConfig?.version })}
Expand Down
4 changes: 2 additions & 2 deletions www/js/control/SensedPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useTheme, Appbar, IconButton, Text } from 'react-native-paper';
import { useTranslation } from 'react-i18next';
import { FlashList } from '@shopify/flash-list';
import { DateTime } from 'luxon';
import { sendEmail } from './emailService';
import { sendLocalDBFile } from '../services/shareLocalDBFile';
import NavBar from '../components/NavBar';

const SensedPage = ({ pageVis, setPageVis }) => {
Expand Down Expand Up @@ -60,7 +60,7 @@ const SensedPage = ({ pageVis, setPageVis }) => {
<View
style={{ paddingHorizontal: 15, flexDirection: 'row', justifyContent: 'space-between' }}>
<IconButton icon="refresh" onPress={() => updateEntries()} />
<IconButton icon="email" onPress={() => sendEmail('userCacheDB')} />
<IconButton icon="email" onPress={() => sendLocalDBFile('userCacheDB')} />
</View>

<FlashList
Expand Down
52 changes: 0 additions & 52 deletions www/js/control/emailService.ts

This file was deleted.

4 changes: 2 additions & 2 deletions www/js/services/controlHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ export function getMyDataHelpers(fileName: string, startTimeString: string, endT
const shareObj = {
files: [attachFile],
message: i18next.t(
'email-service.email-data.body-data-consists-of-list-of-entries',
'shareFile-service.send-data.body-data-consists-of-list-of-entries',
),
subject: i18next.t('email-service.email-data.subject-data-dump-from-to', {
subject: i18next.t('shareFile-service.send-data.subject-data-dump-from-to', {
start: startTimeString,
end: endTimeString,
}),
Expand Down
121 changes: 121 additions & 0 deletions www/js/services/shareLocalDBFile.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
import i18next from 'i18next';
import { displayError, displayErrorMsg, logDebug, logWarn } from '../plugin/logger';

function localDBHelpers(fileName: string, fileExtension: string = '.txt') {
async function localCopyFile() {
return new Promise<void>((resolve, reject) => {
let pathToFile, parentDirectory;
if (window['cordova'].platformId == 'android') {
// parentDirectory: file:///data/user/0/edu.berkeley.eecs.emission/files/
parentDirectory = window['cordova'].file.dataDirectory.replace('files', 'databases');
// pathToFile: /data/user/0/edu.berkeley.eecs.emission/files/
pathToFile = parentDirectory.replace('file://', '') + fileName;
} else if (window['cordova'].platformId == 'ios') {
// parentDirectory: file:///var/mobile/Containers/Data/Application/<32-hex-digit-id>/Library/NoCloud/../
parentDirectory = window['cordova'].file.dataDirectory + '../';
pathToFile = 'LocalDatabase/' + fileName;
} else {
displayErrorMsg('Error: Unknown OS!');
throw new Error('Error: Unknown OS!');
}

window['resolveLocalFileSystemURL'](parentDirectory, (fs) => {
// On iOS, pass in relative path to getFile https://github.com/e-mission/e-mission-phone/pull/1160#issuecomment-2192112472
// On Android, pass in absolute path to getFile https://github.com/e-mission/e-mission-phone/pull/1160#issuecomment-2204297874
fs.filesystem.root.getFile(pathToFile, { create: false, exclusive: false }, (fileEntry) => {
// logDebug(`fileEntry ${fileEntry.nativeURL} is file? ${fileEntry.isFile.toString()}`);
logDebug(`fileEntry is: ${JSON.stringify(fileEntry, null, 2)}`);
window['resolveLocalFileSystemURL'](window['cordova'].file.cacheDirectory, (copyDir) => {
logDebug(`DirectoryEntry is: ${JSON.stringify(copyDir.filesystem.root, null, 2)}`);

fileEntry.copyTo(
copyDir.filesystem.root,
fileName + fileExtension,
(res) => {
logDebug(`Res: ${res}`);
resolve();
},
(rej) => {
displayErrorMsg(`Rej: ${JSON.stringify(rej, null, 2)}`);
reject();
},
);
});
});
});
});
}

function localShareFile() {
return new Promise<void>((resolve, reject) => {
window['resolveLocalFileSystemURL'](window['cordova'].file.cacheDirectory, (fs) => {
fs.filesystem.root.getFile(
fileName + fileExtension,
null,
(fileEntry) => {
const shareObj = {
files: [fileEntry.nativeURL],
message: i18next.t('shareFile-service.send-log.body-please-fill-in-what-is-wrong'),
subject: i18next.t('shareFile-service.send-log.subject-logs'),
};
window['plugins'].socialsharing.shareWithOptions(
shareObj,
(result) => {
logDebug(`Share Completed? ${result.completed}`); // On Android, most likely returns false
logDebug(`Shared to app: ${result.app}`);
resolve();
},
(error) => {
displayError(error, `Sharing failed with error`);
},
);
},
(error) => {
displayError(error, 'Error while sharing logs');
reject(error);
},
);
});
});
}

function localClearTmpFile() {
return new Promise<void>((resolve, reject) => {
window['resolveLocalFileSystemURL'](window['cordova'].file.cacheDirectory, (fs) => {
fs.filesystem.root.getFile(fileName + fileExtension, null, (fileEntry) => {
fileEntry.remove(
() => {
logDebug(`Successfully cleaned up file ${fileName}`);
resolve();
},
(err) => {
displayError(err, `Error deleting ${fileName}`);
reject(err);
},
);
});
});
});
}

return {
copyFile: localCopyFile,
shareData: localShareFile,
clearTmpFile: localClearTmpFile,
};
}
export async function sendLocalDBFile(database: string) {
alert(i18next.t('shareFile-service.send-to'));

const dataMethods = localDBHelpers(database);
dataMethods
.copyFile()
.then(dataMethods.shareData)
.then(dataMethods.clearTmpFile)
.then(() => {
logDebug(`File Shared!`);
})
.catch((err) => {
displayError(err);
});
}

0 comments on commit 3af54b7

Please sign in to comment.