From 3641f0b1a171e20a9aa899a3de076cfac92ada41 Mon Sep 17 00:00:00 2001 From: Sofiya Tepikin Date: Tue, 11 Dec 2018 23:06:10 +0100 Subject: [PATCH] Fixes the 2 csv files being created on export, in Downloads --- android/app/src/main/AndroidManifest.xml | 9 +++++++-- android/app/src/main/res/xml/filepaths.xml | 4 ++++ components/settings/export-dialog.js | 17 ++++++++++++++--- lib/import-export/export-to-csv.js | 14 +------------- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 207d90a..5c5243a 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,8 @@ - + @@ -36,9 +39,11 @@ android:grantUriPermissions="true" android:exported="false"> + + + \ No newline at end of file diff --git a/components/settings/export-dialog.js b/components/settings/export-dialog.js index 7104eba..97db9d3 100644 --- a/components/settings/export-dialog.js +++ b/components/settings/export-dialog.js @@ -1,13 +1,20 @@ import Share from 'react-native-share' + +import { getCycleDaysSortedByDate } from '../../db' import getDataAsCsvDataUri from '../../lib/import-export/export-to-csv' import alertError from './alert-error' import { settings } from '../../i18n/en/settings' +import RNFS from 'react-native-fs' -export default async function openShareDialogAndExport() { +export default async function exportData() { let data const labels = settings.export + const cycleDaysByDate = getCycleDaysSortedByDate() + + if (!cycleDaysByDate.length) return alertError(labels.errors.noData) + try { - data = getDataAsCsvDataUri() + data = getDataAsCsvDataUri(cycleDaysByDate) if (!data) { return alertError(labels.errors.noData) } @@ -17,13 +24,17 @@ export default async function openShareDialogAndExport() { } try { + const path = RNFS.DocumentDirectoryPath + '/data.csv' + await RNFS.writeFile(path, data) + await Share.open({ title: labels.title, - url: data, + url: `file://${path}`, subject: labels.subject, type: 'text/csv', showAppsToView: true }) + } catch (err) { console.error(err) return alertError(labels.errors.problemSharing) diff --git a/lib/import-export/export-to-csv.js b/lib/import-export/export-to-csv.js index 619c5e2..cb73126 100644 --- a/lib/import-export/export-to-csv.js +++ b/lib/import-export/export-to-csv.js @@ -1,19 +1,8 @@ import objectPath from 'object-path' -import { Base64 } from 'js-base64' -import { getCycleDaysSortedByDate } from '../../db' import getColumnNamesForCsv from './get-csv-column-names' -export default function makeDataURI() { - const cycleDaysSortedByDate = getCycleDaysSortedByDate() - if (!cycleDaysSortedByDate.length) return null - const csv = transformToCsv(cycleDaysSortedByDate) - const encoded = Base64.encodeURI(csv) - // this is the MIME type android/libcore/MimeUtils expects, so we oblige - return `data:text/comma-separated-values;base64,${encoded}` -} - -function transformToCsv(cycleDays) { +export default function transformToCsv(cycleDays) { const columnNames = getColumnNamesForCsv() const rows = cycleDays .map(day => { @@ -23,7 +12,6 @@ function transformToCsv(cycleDays) { }) }) .map(row => row.join(',')) - rows.unshift(columnNames.join(',')) return rows.join('\n') }