From 9d1562d9c74ff2407e988c87a18af29287cddc28 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Fri, 6 Aug 2021 11:11:10 +0530
Subject: [PATCH 01/23] fix passphrase field error not visible
---
src/components/SingleInputForm.tsx | 38 ++++++++++++++++--------------
1 file changed, 20 insertions(+), 18 deletions(-)
diff --git a/src/components/SingleInputForm.tsx b/src/components/SingleInputForm.tsx
index 006d30b36..99432ad73 100644
--- a/src/components/SingleInputForm.tsx
+++ b/src/components/SingleInputForm.tsx
@@ -18,8 +18,11 @@ interface Props {
buttonText: string;
}
-const Group = styled.div`
- display: flex;
+const PositioningDiv = styled.div`
+ float:right;
+ position:absolute;
+ top:0;
+ right:0;
`;
const Button = styled.button`
@@ -58,26 +61,25 @@ export default function SingleInputForm(props: Props) {
values, touched, errors, handleChange, handleSubmit,
}) => (
-
-
- {
- props.fieldType === 'password' &&
+
+
+
+ {props.fieldType === 'password' &&
setShowPassword(!showPassword)}>
{showPassword ? : }
}
-
+
{errors.passphrase}
From bfb60d820f45b7f24edc74b384db751ba53ce518 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Fri, 6 Aug 2021 13:07:29 +0530
Subject: [PATCH 02/23] seperated error into server and custom errors
---
src/utils/common/errorUtil.ts | 51 +++++++++++++++++++----------------
1 file changed, 28 insertions(+), 23 deletions(-)
diff --git a/src/utils/common/errorUtil.ts b/src/utils/common/errorUtil.ts
index bede27368..75e58d18e 100644
--- a/src/utils/common/errorUtil.ts
+++ b/src/utils/common/errorUtil.ts
@@ -1,41 +1,46 @@
import constants from 'utils/strings/constants';
-export const errorCodes = {
- ERR_STORAGE_LIMIT_EXCEEDED: '426',
- ERR_NO_ACTIVE_SUBSCRIPTION: '402',
- ERR_NO_INTERNET_CONNECTION: '1',
- ERR_SESSION_EXPIRED: '401',
- ERR_KEY_MISSING: '2',
- ERR_FORBIDDEN: '403',
+export const ServerErrorCodes = {
+ SESSION_EXPIRED: '401',
+ NO_ACTIVE_SUBSCRIPTION: '402',
+ FORBIDDEN: '403',
+ STORAGE_LIMIT_EXCEEDED: '426',
};
-export const SUBSCRIPTION_VERIFICATION_ERROR = 'Subscription verification failed';
+export const CustomError ={
+ SUBSCRIPTION_VERIFICATION_ERROR: 'Subscription verification failed',
+ THUMBNAIL_GENERATION_FAILED: 'thumbnail generation failed',
+ VIDEO_PLAYBACK_FAILED: 'video playback failed',
+ ETAG_MISSING: 'no header/etag present in response body',
+ KEY_MISSING: 'encrypted key missing from localStorage',
+};
-export const THUMBNAIL_GENERATION_FAILED = 'thumbnail generation failed';
-export const VIDEO_PLAYBACK_FAILED = 'video playback failed';
export function parseError(error) {
- let errorMessage = null;
+ let parsedMessage = null;
if (error?.status) {
const errorCode = error.status.toString();
switch (errorCode) {
- case errorCodes.ERR_NO_ACTIVE_SUBSCRIPTION:
- errorMessage = constants.SUBSCRIPTION_EXPIRED;
+ case ServerErrorCodes.NO_ACTIVE_SUBSCRIPTION:
+ parsedMessage = constants.SUBSCRIPTION_EXPIRED;
break;
- case errorCodes.ERR_STORAGE_LIMIT_EXCEEDED:
- errorMessage = constants.STORAGE_QUOTA_EXCEEDED;
+ case ServerErrorCodes.STORAGE_LIMIT_EXCEEDED:
+ parsedMessage = constants.STORAGE_QUOTA_EXCEEDED;
break;
- case errorCodes.ERR_NO_INTERNET_CONNECTION:
- errorMessage = constants.NO_INTERNET_CONNECTION;
- break;
- case errorCodes.ERR_SESSION_EXPIRED:
- errorMessage = constants.SESSION_EXPIRED_MESSAGE;
+ case ServerErrorCodes.SESSION_EXPIRED:
+ parsedMessage = constants.SESSION_EXPIRED_MESSAGE;
break;
}
+ } else if (error?.message) {
+ const errorMessage = error.message.toString();
+ switch (errorMessage) {
+ case CustomError.ETAG_MISSING:
+ parsedMessage=CustomError.ETAG_MISSING;
+ }
}
- if (errorMessage) {
- return { parsedError: new Error(errorMessage), parsed: true };
+ if (parsedMessage) {
+ return { parsedError: new Error(parsedMessage), parsed: true };
} else {
return ({
parsedError: new Error(`${constants.UNKNOWN_ERROR} ${error}`), parsed: false,
@@ -48,6 +53,6 @@ export function handleError(error) {
if (parsed) {
throw parsedError;
} else {
- // shallow error don't break the caller flow
+ // swallow error don't break the caller flow
}
}
From 75aa02ca51db1d8e8e403fd43af57067196f2f19 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Fri, 6 Aug 2021 13:08:09 +0530
Subject: [PATCH 03/23] updated gallery for those errorParsing changes
---
src/pages/gallery/index.tsx | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/src/pages/gallery/index.tsx b/src/pages/gallery/index.tsx
index 3a927ae88..84b40e2aa 100644
--- a/src/pages/gallery/index.tsx
+++ b/src/pages/gallery/index.tsx
@@ -39,7 +39,6 @@ import { LoadingOverlay } from 'components/LoadingOverlay';
import PhotoFrame from 'components/PhotoFrame';
import { getSelectedFileIds, sortFilesIntoCollections } from 'utils/file';
import { addFilesToCollection } from 'utils/collection';
-import { errorCodes } from 'utils/common/errorUtil';
import SearchBar, { DateValue } from 'components/SearchBar';
import { Bbox } from 'services/searchService';
import SelectedFileOptions from 'components/pages/gallery/SelectedFileOptions';
@@ -55,6 +54,7 @@ import PlanSelector from 'components/pages/gallery/PlanSelector';
import Upload from 'components/pages/gallery/Upload';
import Collections from 'components/pages/gallery/Collections';
import { AppContext } from 'pages/_app';
+import { CustomError, ServerErrorCodes } from 'utils/common/errorUtil';
export enum FILE_TYPE {
IMAGE,
@@ -200,7 +200,7 @@ export default function Gallery() {
try {
checkConnectivity();
if (!(await isTokenValid())) {
- throw new Error(errorCodes.ERR_SESSION_EXPIRED);
+ throw new Error(ServerErrorCodes.SESSION_EXPIRED);
}
!silent && loadingBar.current?.continuousStart();
await billingService.syncSubscription();
@@ -209,7 +209,7 @@ export default function Gallery() {
await initDerivativeState(collections, files);
} catch (e) {
switch (e.message) {
- case errorCodes.ERR_SESSION_EXPIRED:
+ case ServerErrorCodes.SESSION_EXPIRED:
setBannerMessage(constants.SESSION_EXPIRED_MESSAGE);
setDialogMessage({
title: constants.SESSION_EXPIRED,
@@ -219,11 +219,9 @@ export default function Gallery() {
text: constants.LOGIN,
action: logoutUser,
variant: 'success',
- },
- nonClosable: true,
- });
+ } });
break;
- case errorCodes.ERR_KEY_MISSING:
+ case CustomError.KEY_MISSING:
clearKeys();
router.push('/credentials');
break;
@@ -308,7 +306,7 @@ export default function Gallery() {
} catch (e) {
loadingBar.current.complete();
switch (e.status?.toString()) {
- case errorCodes.ERR_FORBIDDEN:
+ case ServerErrorCodes.FORBIDDEN:
setDialogMessage({
title: constants.ERROR,
staticBackdrop: true,
From 65dda03cc536f2addd91b4d8cdfb9d5081abf2c1 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Fri, 6 Aug 2021 13:08:52 +0530
Subject: [PATCH 04/23] handled etag missing error by showing dialog
---
src/components/pages/gallery/Upload.tsx | 16 +++++++++++++++-
src/services/uploadService.ts | 8 ++++----
src/utils/common/index.ts | 2 +-
src/utils/strings/englishConstants.tsx | 13 +++++++++++++
4 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/src/components/pages/gallery/Upload.tsx b/src/components/pages/gallery/Upload.tsx
index 082ec8668..d2a81a3e4 100644
--- a/src/components/pages/gallery/Upload.tsx
+++ b/src/components/pages/gallery/Upload.tsx
@@ -13,6 +13,8 @@ import { SetFiles, SetLoading } from 'pages/gallery';
import { AppContext } from 'pages/_app';
import { logError } from 'utils/sentry';
import { FileRejection } from 'react-dropzone';
+import { CustomError } from 'utils/common/errorUtil';
+import { DESKTOP_APP_DOWNLOAD_URL, downloadApp } from 'utils/common';
interface Props {
syncWithRemote: (force?: boolean, silent?: boolean) => Promise;
@@ -213,7 +215,19 @@ export default function Upload(props: Props) {
props.setFiles,
);
} catch (err) {
- props.setBannerMessage(err.message);
+ if (err?.message===CustomError.ETAG_MISSING) {
+ props. setDialogMessage({ title: constants.UPLOAD_FAILED,
+ staticBackdrop: true,
+ close: { variant: 'danger', text: constants.CLOSE },
+ content: constants.ETAGS_BLOCKED(DESKTOP_APP_DOWNLOAD_URL),
+ proceed: {
+ text: constants.DOWNLOAD,
+ action: downloadApp,
+ variant: 'success',
+ } });
+ } else {
+ props.setBannerMessage(err.message);
+ }
setProgressView(false);
throw err;
} finally {
diff --git a/src/services/uploadService.ts b/src/services/uploadService.ts
index ff20969f8..2f0ce3256 100644
--- a/src/services/uploadService.ts
+++ b/src/services/uploadService.ts
@@ -8,7 +8,7 @@ import { retryAsyncFunction, sleep } from 'utils/common';
import {
handleError,
parseError,
- THUMBNAIL_GENERATION_FAILED,
+ CustomError,
} from 'utils/common/errorUtil';
import { ComlinkWorker, getDedicatedCryptoWorker } from 'utils/crypto';
import * as convert from 'xml-js';
@@ -691,7 +691,7 @@ class UploadService {
} catch (e) {
reject(e);
logError(e);
- reject(Error(`${THUMBNAIL_GENERATION_FAILED} err: ${e}`));
+ reject(Error(`${CustomError.THUMBNAIL_GENERATION_FAILED} err: ${e}`));
}
};
timeout = setTimeout(
@@ -729,7 +729,7 @@ class UploadService {
} catch (e) {
reject(e);
logError(e);
- reject(Error(`${THUMBNAIL_GENERATION_FAILED} err: ${e}`));
+ reject(Error(`${CustomError.THUMBNAIL_GENERATION_FAILED} err: ${e}`));
}
});
video.preload = 'metadata';
@@ -954,7 +954,7 @@ class UploadService {
this.trackUploadProgress(filename, percentPerPart, index),
);
if (!resp?.headers?.etag) {
- const err=Error('no header/etag present in response body');
+ const err=Error(CustomError.ETAG_MISSING);
logError(err);
throw err;
}
diff --git a/src/utils/common/index.ts b/src/utils/common/index.ts
index dda85b719..d6785c83b 100644
--- a/src/utils/common/index.ts
+++ b/src/utils/common/index.ts
@@ -1,6 +1,6 @@
import constants from 'utils/strings/constants';
-const DESKTOP_APP_DOWNLOAD_URL = 'https://github.com/ente-io/bhari-frame/releases/';
+export const DESKTOP_APP_DOWNLOAD_URL = 'https://github.com/ente-io/bhari-frame/releases/latest';
const retrySleepTime = [2000, 5000, 10000];
diff --git a/src/utils/strings/englishConstants.tsx b/src/utils/strings/englishConstants.tsx
index f2d65f8a0..d1d361dea 100644
--- a/src/utils/strings/englishConstants.tsx
+++ b/src/utils/strings/englishConstants.tsx
@@ -452,6 +452,19 @@ const englishConstants = {
SEND_OTT: 'send otp',
EMAIl_ALREADY_OWNED: 'email already taken',
EMAIL_UDPATE_SUCCESSFUL: 'your email has been udpated successfully',
+ UPLOAD_FAILED: 'upload failed',
+ ETAGS_BLOCKED: (url:string)=>(<>
+ we were unable to upload the following files because of your browser configuration.
+ please disable any addons that might be preventing ente from using eTags
to upload large files, or use our
+ {' '}
+
+ desktop app
+
+ {' '}
+ for a more reliable import experience.
+ >),
};
From 61dfe4f73f9c771c308a4ce7931135c25dccc69e Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Fri, 6 Aug 2021 13:23:02 +0530
Subject: [PATCH 05/23] build fix
---
src/components/PhotoFrame.tsx | 4 ++--
src/services/billingService.ts | 4 ++--
src/utils/billingUtil.ts | 6 +++---
src/utils/common/key.ts | 4 ++--
4 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/src/components/PhotoFrame.tsx b/src/components/PhotoFrame.tsx
index 9aa0a3a4a..dc26d43bc 100644
--- a/src/components/PhotoFrame.tsx
+++ b/src/components/PhotoFrame.tsx
@@ -19,7 +19,7 @@ import { VariableSizeList as List } from 'react-window';
import PhotoSwipe from 'components/PhotoSwipe/PhotoSwipe';
import { isInsideBox, isSameDay as isSameDayAnyYear } from 'utils/search';
import { SetDialogMessage } from './MessageDialog';
-import { VIDEO_PLAYBACK_FAILED } from 'utils/common/errorUtil';
+import { CustomError } from 'utils/common/errorUtil';
import {
GAP_BTW_TILES, DATE_CONTAINER_HEIGHT, IMAGE_CONTAINER_MAX_HEIGHT,
IMAGE_CONTAINER_MAX_WIDTH, MIN_COLUMNS, SPACE_BTW_DATES,
@@ -306,7 +306,7 @@ const PhotoFrame = ({
const t = setTimeout(
() => {
reject(
- Error(`${VIDEO_PLAYBACK_FAILED} err: wait time exceeded`),
+ Error(`${CustomError.VIDEO_PLAYBACK_FAILED} err: wait time exceeded`),
);
},
WAIT_FOR_VIDEO_PLAYBACK,
diff --git a/src/services/billingService.ts b/src/services/billingService.ts
index d56920946..671088ae0 100644
--- a/src/services/billingService.ts
+++ b/src/services/billingService.ts
@@ -4,7 +4,7 @@ import { checkConnectivity, runningInBrowser } from 'utils/common/';
import { setData, LS_KEYS } from 'utils/storage/localStorage';
import { convertToHumanReadable } from 'utils/billingUtil';
import { loadStripe, Stripe } from '@stripe/stripe-js';
-import { SUBSCRIPTION_VERIFICATION_ERROR } from 'utils/common/errorUtil';
+import { CustomError } from 'utils/common/errorUtil';
import HTTPService from './HTTPService';
import { logError } from 'utils/sentry';
@@ -142,7 +142,7 @@ class billingService {
try {
await this.verifySubscription();
} catch (e) {
- throw new Error(SUBSCRIPTION_VERIFICATION_ERROR);
+ throw new Error(CustomError.SUBSCRIPTION_VERIFICATION_ERROR);
}
}
diff --git a/src/utils/billingUtil.ts b/src/utils/billingUtil.ts
index 9dfdb7af4..5f6aeb215 100644
--- a/src/utils/billingUtil.ts
+++ b/src/utils/billingUtil.ts
@@ -9,7 +9,7 @@ import { NextRouter } from 'next/router';
import { SetDialogMessage } from 'components/MessageDialog';
import { SetLoading } from 'pages/gallery';
import { getData, LS_KEYS } from './storage/localStorage';
-import { SUBSCRIPTION_VERIFICATION_ERROR } from './common/errorUtil';
+import { CustomError } from './common/errorUtil';
const STRIPE = 'stripe';
@@ -123,7 +123,7 @@ export async function updateSubscription(
close: { text: constants.CANCEL },
});
break;
- case SUBSCRIPTION_VERIFICATION_ERROR:
+ case CustomError.SUBSCRIPTION_VERIFICATION_ERROR:
setDialogMessage({
title: constants.ERROR,
content: constants.SUBSCRIPTION_VERIFICATION_FAILED,
@@ -239,7 +239,7 @@ export async function checkSubscriptionPurchase(
} catch (e) {
setDialogMessage({
title: constants.ERROR,
- content: SUBSCRIPTION_VERIFICATION_ERROR,
+ content: CustomError.SUBSCRIPTION_VERIFICATION_ERROR,
close: {},
});
}
diff --git a/src/utils/common/key.ts b/src/utils/common/key.ts
index c70d20475..4c1e2d8d5 100644
--- a/src/utils/common/key.ts
+++ b/src/utils/common/key.ts
@@ -2,7 +2,7 @@ import { B64EncryptionResult } from 'services/uploadService';
import CryptoWorker from 'utils/crypto';
import { getData, LS_KEYS } from 'utils/storage/localStorage';
import { getKey, SESSION_KEYS } from 'utils/storage/sessionStorage';
-import { errorCodes } from './errorUtil';
+import { CustomError } from './errorUtil';
export const getActualKey = async () => {
try {
@@ -18,7 +18,7 @@ export const getActualKey = async () => {
);
return key;
} catch (e) {
- throw new Error(errorCodes.ERR_KEY_MISSING);
+ throw new Error(CustomError.KEY_MISSING);
}
};
From 02032041e1c49266a3f7a142603428130c277d3e Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Fri, 6 Aug 2021 13:36:04 +0530
Subject: [PATCH 06/23] fix typo
---
src/components/pages/gallery/Upload.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/pages/gallery/Upload.tsx b/src/components/pages/gallery/Upload.tsx
index d2a81a3e4..01d658be7 100644
--- a/src/components/pages/gallery/Upload.tsx
+++ b/src/components/pages/gallery/Upload.tsx
@@ -216,7 +216,7 @@ export default function Upload(props: Props) {
);
} catch (err) {
if (err?.message===CustomError.ETAG_MISSING) {
- props. setDialogMessage({ title: constants.UPLOAD_FAILED,
+ props.setDialogMessage({ title: constants.UPLOAD_FAILED,
staticBackdrop: true,
close: { variant: 'danger', text: constants.CLOSE },
content: constants.ETAGS_BLOCKED(DESKTOP_APP_DOWNLOAD_URL),
From 7222e21eb601b588de54e7032a7ea1779d7808fe Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Thu, 29 Jul 2021 15:40:37 +0530
Subject: [PATCH 07/23] enhanced files upload result
---
src/components/pages/gallery/Upload.tsx | 4 +++
.../pages/gallery/UploadProgress.tsx | 36 +++++++++++++------
src/services/uploadService.ts | 8 +++--
src/utils/strings/englishConstants.tsx | 23 ++++++++++--
4 files changed, 56 insertions(+), 15 deletions(-)
diff --git a/src/components/pages/gallery/Upload.tsx b/src/components/pages/gallery/Upload.tsx
index 01d658be7..4c909604c 100644
--- a/src/components/pages/gallery/Upload.tsx
+++ b/src/components/pages/gallery/Upload.tsx
@@ -40,6 +40,7 @@ interface AnalysisResult {
suggestedCollectionName: string;
multipleFolders: boolean;
}
+
export default function Upload(props: Props) {
const [progressView, setProgressView] = useState(false);
const [uploadStage, setUploadStage] = useState(
@@ -47,6 +48,7 @@ export default function Upload(props: Props) {
);
const [fileCounter, setFileCounter] = useState({ current: 0, total: 0 });
const [fileProgress, setFileProgress] = useState(new Map());
+ const [uploadResult, setUploadResult]=useState(new Map());
const [percentComplete, setPercentComplete] = useState(0);
const [choiceModalView, setChoiceModalView] = useState(false);
const [fileAnalysisResult, setFileAnalysisResult] = useState(null);
@@ -211,6 +213,7 @@ export default function Upload(props: Props) {
setFileCounter,
setUploadStage,
setFileProgress,
+ setUploadResult,
},
props.setFiles,
);
@@ -272,6 +275,7 @@ export default function Upload(props: Props) {
closeModal={() => setProgressView(false)}
retryFailed={retryFailed}
fileRejections={props.fileRejections}
+ uploadResult={uploadResult}
/>
>
);
diff --git a/src/components/pages/gallery/UploadProgress.tsx b/src/components/pages/gallery/UploadProgress.tsx
index d76d0b226..7b446b320 100644
--- a/src/components/pages/gallery/UploadProgress.tsx
+++ b/src/components/pages/gallery/UploadProgress.tsx
@@ -3,7 +3,7 @@ import {
Alert, Button, Modal, ProgressBar,
} from 'react-bootstrap';
import { FileRejection } from 'react-dropzone';
-import { UPLOAD_STAGES, FileUploadErrorCode } from 'services/uploadService';
+import { UPLOAD_STAGES } from 'services/uploadService';
import constants from 'utils/strings/constants';
interface Props {
@@ -15,6 +15,7 @@ interface Props {
fileProgress: Map;
show;
fileRejections:FileRejection[]
+ uploadResult:Map;
}
interface FileProgressStatuses{
fileName:string;
@@ -22,16 +23,18 @@ interface FileProgressStatuses{
}
export default function UploadProgress(props: Props) {
const fileProgressStatuses = [] as FileProgressStatuses[];
+ const fileResultStatuses = [] as FileProgressStatuses[];
if (props.fileProgress) {
for (const [fileName, progress] of props.fileProgress) {
fileProgressStatuses.push({ fileName, progress });
}
- for (const { file } of props.fileRejections) {
- fileProgressStatuses.push({ fileName: file.name, progress: FileUploadErrorCode.UNSUPPORTED });
+ }
+ if (props.uploadResult) {
+ for (const [fileName, progress] of props.uploadResult) {
+ if (progress<0) {
+ fileResultStatuses.push({ fileName, progress });
+ }
}
- fileProgressStatuses.sort((a, b) => {
- if (b.progress !== -1 && a.progress === -1) return 1;
- });
}
return (
{props.uploadStage===UPLOAD_STAGES.FINISH ? (
- fileProgressStatuses.length !== 0 && (
+ fileResultStatuses.length !== 0 && (
{constants.FAILED_UPLOAD_FILE_LIST}
@@ -77,7 +80,7 @@ export default function UploadProgress(props: Props) {
variant="upload-progress-bar"
/>
)}
- {fileProgressStatuses?.length > 0 && (
+ {(fileProgressStatuses?.length > 0 || fileResultStatuses?.length>0) && (
+ ))}
+ {fileResultStatuses.map(({ fileName, progress }) => (
+
+ {
+ constants.FILE_UPLOAD_RESULT(
+ fileName,
+ progress,
+ )
+ }
))}
)}
{props.uploadStage === UPLOAD_STAGES.FINISH && (
- {props.uploadStage===UPLOAD_STAGES.FINISH && (fileProgressStatuses?.length === 0 ? (
+ {props.uploadStage===UPLOAD_STAGES.FINISH && (props.retryFailed.length===0 ? (
- {constants.RETRY}
+ {constants.RETRY_FAILED}
))}
)}
diff --git a/src/services/uploadService.ts b/src/services/uploadService.ts
index 2f0ce3256..c149977b6 100644
--- a/src/services/uploadService.ts
+++ b/src/services/uploadService.ts
@@ -142,6 +142,7 @@ class UploadService {
private filesCompleted: number;
private totalFileCount: number;
private fileProgress: Map;
+ private uploadResult:Map;
private metadataMap: Map;
private filesToBeUploaded: FileWithCollection[];
private progressBarProps;
@@ -160,6 +161,7 @@ class UploadService {
this.filesCompleted = 0;
this.fileProgress = new Map();
+ this.uploadResult = new Map();
this.failedFiles = [];
this.metadataMap = new Map();
this.progressBarProps = progressBarProps;
@@ -288,7 +290,6 @@ class UploadService {
uploadFile = null;
- this.fileProgress.delete(rawFile.name);
this.filesCompleted++;
}
} catch (e) {
@@ -301,6 +302,8 @@ class UploadService {
file=null;
encryptedFile=null;
}
+ this.uploadResult.set(rawFile.name, this.fileProgress.get(rawFile.name));
+ this.fileProgress.delete(rawFile.name);
this.updateProgressBarUI();
if (this.filesToBeUploaded.length > 0) {
@@ -316,7 +319,7 @@ class UploadService {
}
private updateProgressBarUI() {
- const { setPercentComplete, setFileCounter, setFileProgress } =
+ const { setPercentComplete, setFileCounter, setFileProgress, setUploadResult } =
this.progressBarProps;
setFileCounter({
finished: this.filesCompleted,
@@ -335,6 +338,7 @@ class UploadService {
}
setPercentComplete(percentComplete);
setFileProgress(this.fileProgress);
+ setUploadResult(this.uploadResult);
}
private fileAlreadyInCollection(
diff --git a/src/utils/strings/englishConstants.tsx b/src/utils/strings/englishConstants.tsx
index d1d361dea..ee77ef4ab 100644
--- a/src/utils/strings/englishConstants.tsx
+++ b/src/utils/strings/englishConstants.tsx
@@ -94,7 +94,7 @@ const englishConstants = {
UPLOADING_FILES: 'file upload',
FAILED_UPLOAD_FILE_LIST: 'upload failed for following files',
UNSUPPORTED_FILE_LIST: 'unsupported files',
- FILE_UPLOAD_PROGRESS: (name, progress) => (
+ FILE_UPLOAD_PROGRESS: (name:string, progress:number) => (
{name}
{' - '}
@@ -105,13 +105,31 @@ const englishConstants = {
case -2:
return 'already uploaded, skipping...';
case -3:
- return 'unsupported file format, ignored';
+ return ',unsupported file format, skipping....';
default:
return `${progress}%`;
}
})()}
),
+ FILE_UPLOAD_RESULT: (name:string, progress:number) => (
+
+ {name}
+ {' - '}
+ {(() => {
+ switch (progress) {
+ case -1:
+ return 'failed';
+ case -2:
+ return 'skipped duplicate';
+ case -3:
+ return 'skipped unsupported format';
+ default:
+ return `uploaded`;
+ }
+ })()}
+
+ ),
SUBSCRIPTION_EXPIRED: 'your subscription has expired, please renew it',
STORAGE_QUOTA_EXCEEDED:
@@ -466,6 +484,7 @@ const englishConstants = {
for a more reliable import experience.
>),
+ RETRY_FAILED: 'retry failed files',
};
export default englishConstants;
From 617f217e6873b08d0ec64c0d323364ba52fd04bc Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Thu, 29 Jul 2021 16:02:51 +0530
Subject: [PATCH 08/23] show retry button if files files exist
---
src/components/pages/gallery/UploadProgress.tsx | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/components/pages/gallery/UploadProgress.tsx b/src/components/pages/gallery/UploadProgress.tsx
index 7b446b320..e85385eac 100644
--- a/src/components/pages/gallery/UploadProgress.tsx
+++ b/src/components/pages/gallery/UploadProgress.tsx
@@ -3,7 +3,7 @@ import {
Alert, Button, Modal, ProgressBar,
} from 'react-bootstrap';
import { FileRejection } from 'react-dropzone';
-import { UPLOAD_STAGES } from 'services/uploadService';
+import { FileUploadErrorCode, UPLOAD_STAGES } from 'services/uploadService';
import constants from 'utils/strings/constants';
interface Props {
@@ -24,6 +24,7 @@ interface FileProgressStatuses{
export default function UploadProgress(props: Props) {
const fileProgressStatuses = [] as FileProgressStatuses[];
const fileResultStatuses = [] as FileProgressStatuses[];
+ let filesHaveFailed=false;
if (props.fileProgress) {
for (const [fileName, progress] of props.fileProgress) {
fileProgressStatuses.push({ fileName, progress });
@@ -34,6 +35,9 @@ export default function UploadProgress(props: Props) {
if (progress<0) {
fileResultStatuses.push({ fileName, progress });
}
+ if (progress===FileUploadErrorCode.FAILED) {
+ filesHaveFailed=true;
+ }
}
}
return (
@@ -113,7 +117,7 @@ export default function UploadProgress(props: Props) {
)}
{props.uploadStage === UPLOAD_STAGES.FINISH && (
- {props.uploadStage===UPLOAD_STAGES.FINISH && (props.retryFailed.length===0 ? (
+ {props.uploadStage===UPLOAD_STAGES.FINISH && (!filesHaveFailed? (
Date: Fri, 6 Aug 2021 17:42:38 +0530
Subject: [PATCH 09/23] updated progress bar ui
---
src/components/icons/ExpandLess.tsx | 26 +++
src/components/icons/ExpandMore.tsx | 26 +++
src/components/pages/gallery/Upload.tsx | 1 +
.../pages/gallery/UploadProgress.tsx | 170 +++++++++++++-----
src/services/uploadService.ts | 11 +-
src/utils/strings/englishConstants.tsx | 28 +--
6 files changed, 190 insertions(+), 72 deletions(-)
create mode 100644 src/components/icons/ExpandLess.tsx
create mode 100644 src/components/icons/ExpandMore.tsx
diff --git a/src/components/icons/ExpandLess.tsx b/src/components/icons/ExpandLess.tsx
new file mode 100644
index 000000000..db7c95f82
--- /dev/null
+++ b/src/components/icons/ExpandLess.tsx
@@ -0,0 +1,26 @@
+
+
+import React from 'react';
+export default function ExpandLess(props) {
+ return (
+
+
+ );
+}
+
+ExpandLess.defaultProps = {
+ height: 24,
+ width: 24,
+ viewBox: '0 0 24 24',
+ open: false,
+};
diff --git a/src/components/icons/ExpandMore.tsx b/src/components/icons/ExpandMore.tsx
new file mode 100644
index 000000000..80bae822b
--- /dev/null
+++ b/src/components/icons/ExpandMore.tsx
@@ -0,0 +1,26 @@
+
+
+import React from 'react';
+export default function ExpandMore(props) {
+ return (
+
+
+ );
+}
+
+ExpandMore.defaultProps = {
+ height: 24,
+ width: 24,
+ viewBox: '0 0 24 24',
+ open: false,
+};
diff --git a/src/components/pages/gallery/Upload.tsx b/src/components/pages/gallery/Upload.tsx
index 4c909604c..d0549a96f 100644
--- a/src/components/pages/gallery/Upload.tsx
+++ b/src/components/pages/gallery/Upload.tsx
@@ -81,6 +81,7 @@ export default function Upload(props: Props) {
setUploadStage(UPLOAD_STAGES.START);
setFileCounter({ current: 0, total: 0 });
setFileProgress(new Map());
+ setUploadResult(new Map());
setPercentComplete(0);
setProgressView(true);
};
diff --git a/src/components/pages/gallery/UploadProgress.tsx b/src/components/pages/gallery/UploadProgress.tsx
index e85385eac..1f05a7db9 100644
--- a/src/components/pages/gallery/UploadProgress.tsx
+++ b/src/components/pages/gallery/UploadProgress.tsx
@@ -1,9 +1,12 @@
-import React from 'react';
+import ExpandLess from 'components/icons/ExpandLess';
+import ExpandMore from 'components/icons/ExpandMore';
+import React, { useEffect, useState } from 'react';
import {
Alert, Button, Modal, ProgressBar,
} from 'react-bootstrap';
import { FileRejection } from 'react-dropzone';
-import { FileUploadErrorCode, UPLOAD_STAGES } from 'services/uploadService';
+import { FileUploadResults, UPLOAD_STAGES } from 'services/uploadService';
+import styled from 'styled-components';
import constants from 'utils/strings/constants';
interface Props {
@@ -17,14 +20,47 @@ interface Props {
fileRejections:FileRejection[]
uploadResult:Map;
}
-interface FileProgressStatuses{
+interface FileProgresses{
fileName:string;
progress:number;
}
+
+const FileList =styled.ul<{collapsed:boolean, sm?:boolean}>`
+ margin-top: 10px;
+ overflow: auto;
+ height:${(props)=> props.collapsed?'0px':props.sm?'144px':'200px'};
+ transition: height 0.2s ease-out;
+`;
+
+const SectionHeader =styled.div`
+ display:flex;
+ justify-content:space-between;
+ padding:0 20px;
+ color:#eee;
+ font-size:17px;
+ cursor:pointer;
+`;
+
+
export default function UploadProgress(props: Props) {
- const fileProgressStatuses = [] as FileProgressStatuses[];
- const fileResultStatuses = [] as FileProgressStatuses[];
- let filesHaveFailed=false;
+ const [failedFilesView, setFailedView]=useState(false);
+ const [skippedFilesView, setSkippedFilesView]=useState(false);
+ const [unsupportedFilesView, setUnsupportedFilesView]=useState(false);
+ const [uploadedFileView, setUploadedFileView]=useState(false);
+
+ useEffect(()=>{
+ if (props.show) {
+ setFailedView(false);
+ setSkippedFilesView(false);
+ setUnsupportedFilesView(false);
+ setUploadedFileView(false);
+ }
+ }, [props.show]);
+
+ const fileProgressStatuses = [] as FileProgresses[];
+ const fileUploadResults = new Map();
+ let filesNotUploaded=false;
+
if (props.fileProgress) {
for (const [fileName, progress] of props.fileProgress) {
fileProgressStatuses.push({ fileName, progress });
@@ -32,14 +68,17 @@ export default function UploadProgress(props: Props) {
}
if (props.uploadResult) {
for (const [fileName, progress] of props.uploadResult) {
+ if (!fileUploadResults.has(progress)) {
+ fileUploadResults.set(progress, []);
+ }
if (progress<0) {
- fileResultStatuses.push({ fileName, progress });
- }
- if (progress===FileUploadErrorCode.FAILED) {
- filesHaveFailed=true;
+ filesNotUploaded=true;
}
+ const fileList= fileUploadResults.get(progress);
+ fileUploadResults.set(progress, [...fileList, fileName]);
}
}
+
return (
{props.uploadStage===UPLOAD_STAGES.FINISH ? (
- fileResultStatuses.length !== 0 && (
+ filesNotUploaded && (
- {constants.FAILED_UPLOAD_FILE_LIST}
+
+ {constants.FILE_NOT_UPLOADED_LIST}
)
) :
@@ -83,55 +123,91 @@ export default function UploadProgress(props: Props) {
animated
variant="upload-progress-bar"
/>
- )}
- {(fileProgressStatuses?.length > 0 || fileResultStatuses?.length>0) && (
-
- {fileProgressStatuses.map(({ fileName, progress }) => (
+ )
+ }
+ {fileProgressStatuses.length>0 &&
+
+ {fileProgressStatuses.map(({ fileName, progress }) => (
+
+ {props.uploadStage===UPLOAD_STAGES.FINISH ?
+ fileName :
+ constants.FILE_UPLOAD_PROGRESS(
+ fileName,
+ progress,
+ )
+ }
+
+ ))}
+
+ }
+ {fileUploadResults?.get(FileUploadResults.FAILED)?.length>0 &&(<>
+ setFailedView(!failedFilesView)}>failed files {failedFilesView? : }
+
+ unable to upload files because of network issue, you can retry upload this files
+ {fileUploadResults.get(FileUploadResults.FAILED).map((fileName) => (
+
- {props.uploadStage===UPLOAD_STAGES.FINISH ?
- fileName :
- constants.FILE_UPLOAD_PROGRESS(
- fileName,
- progress,
- )
- }
+ {fileName}
))}
- {fileResultStatuses.map(({ fileName, progress }) => (
+
+ >)}
+
+ {fileUploadResults?.get(FileUploadResults.SKIPPED)?.length>0 &&(<>
+ setSkippedFilesView(!skippedFilesView)}> duplicate files {skippedFilesView? : }
+
+ these files already existed in the album
+ {fileUploadResults.get(FileUploadResults.SKIPPED).map((fileName) => (
+
- {
- constants.FILE_UPLOAD_RESULT(
- fileName,
- progress,
- )
- }
+ {fileName}
))}
-
- )}
+
+ >)}
+
+ {fileUploadResults?.get(FileUploadResults.UNSUPPORTED)?.length>0 &&(<>
+ setUnsupportedFilesView(!unsupportedFilesView)} > unsupported files {unsupportedFilesView? : }
+
+ {fileUploadResults.get(FileUploadResults.UNSUPPORTED).map((fileName) => (
+
+
+ {fileName}
+
+ ))}
+
+ >)}
+
+ {fileUploadResults?.get(FileUploadResults.UPLOADED)?.length>0 &&(<>
+ setUploadedFileView(!uploadedFileView)} > successfully uploaded files {uploadedFileView? : }
+
+ {fileUploadResults.get(FileUploadResults.UPLOADED).map((fileName) => (
+
+
+ {fileName}
+
+ ))}
+
+ >)}
+
{props.uploadStage === UPLOAD_STAGES.FINISH && (
- {props.uploadStage===UPLOAD_STAGES.FINISH && (!filesHaveFailed? (
-
- {constants.CLOSE}
- ) : (
+ {props.uploadStage===UPLOAD_STAGES.FINISH && (fileUploadResults?.get(FileUploadResults.FAILED)?.length>0? (
{constants.RETRY_FAILED}
- ))}
+
+ ) : (
+ {constants.CLOSE}
+
+ ))}
)}
diff --git a/src/services/uploadService.ts b/src/services/uploadService.ts
index c149977b6..cb487fa12 100644
--- a/src/services/uploadService.ts
+++ b/src/services/uploadService.ts
@@ -46,10 +46,11 @@ const FILE_UPLOAD_COMPLETED = 100;
const EDITED_FILE_SUFFIX = '-edited';
const TwoSecondInMillSeconds = 2000;
-export enum FileUploadErrorCode {
+export enum FileUploadResults {
FAILED = -1,
SKIPPED = -2,
UNSUPPORTED = -3,
+ UPLOADED = 100,
}
interface Location {
@@ -261,11 +262,9 @@ class UploadService {
if (this.fileAlreadyInCollection(file, collection)) {
// set progress to -2 indicating that file upload was skipped
- this.fileProgress.set(rawFile.name, FileUploadErrorCode.SKIPPED);
+ this.fileProgress.set(rawFile.name, FileUploadResults.SKIPPED);
this.updateProgressBarUI();
await sleep(TwoSecondInMillSeconds);
- // remove completed files for file progress list
- this.fileProgress.delete(rawFile.name);
} else {
encryptedFile = await this.encryptFile(worker, file, collection.key);
@@ -289,14 +288,14 @@ class UploadService {
this.setFiles(this.existingFiles);
uploadFile = null;
-
+ this.fileProgress.set(rawFile.name, FileUploadResults.UPLOADED);
this.filesCompleted++;
}
} catch (e) {
logError(e, 'file upload failed');
this.failedFiles.push(fileWithCollection);
// set progress to -1 indicating that file upload failed but keep it to show in the file-upload list progress
- this.fileProgress.set(rawFile.name, FileUploadErrorCode.FAILED);
+ this.fileProgress.set(rawFile.name, FileUploadResults.FAILED);
handleError(e);
} finally {
file=null;
diff --git a/src/utils/strings/englishConstants.tsx b/src/utils/strings/englishConstants.tsx
index ee77ef4ab..623d0b781 100644
--- a/src/utils/strings/englishConstants.tsx
+++ b/src/utils/strings/englishConstants.tsx
@@ -92,7 +92,7 @@ const englishConstants = {
3: 'backup complete!',
},
UPLOADING_FILES: 'file upload',
- FAILED_UPLOAD_FILE_LIST: 'upload failed for following files',
+ FILE_NOT_UPLOADED_LIST: 'following files were not uploaded',
UNSUPPORTED_FILE_LIST: 'unsupported files',
FILE_UPLOAD_PROGRESS: (name:string, progress:number) => (
@@ -112,24 +112,6 @@ const englishConstants = {
})()}
),
- FILE_UPLOAD_RESULT: (name:string, progress:number) => (
-
- {name}
- {' - '}
- {(() => {
- switch (progress) {
- case -1:
- return 'failed';
- case -2:
- return 'skipped duplicate';
- case -3:
- return 'skipped unsupported format';
- default:
- return `uploaded`;
- }
- })()}
-
- ),
SUBSCRIPTION_EXPIRED: 'your subscription has expired, please renew it',
STORAGE_QUOTA_EXCEEDED:
@@ -485,6 +467,14 @@ const englishConstants = {
>),
RETRY_FAILED: 'retry failed files',
+ FAILED_FILES: 'failed files ',
+ SKIPPED_FILES: 'duplicate files',
+ UNSUPPORTED_FILES: 'unsupported files',
+ UPLOADED_FILES: 'successfully uploaded files',
+ FAILED_INFO: ' unable to upload these files because of network issue, you can retry upload these files',
+ SKIPPED_INFO: 'these files already existed in the album',
+ UNSUPPORTED_INFO: 'these files are currently not supported by ente',
+ UPLOADED_INFO: 'successfully backed-up memories',
};
export default englishConstants;
From 0e025986c1ec8dba2cf585096a94d723ec0d67d4 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Fri, 6 Aug 2021 17:52:45 +0530
Subject: [PATCH 10/23] extracted out strings
---
src/components/ChangeEmail.tsx | 3 +--
.../pages/gallery/SelectedFileOptions.tsx | 2 +-
src/components/pages/gallery/UploadProgress.tsx | 14 ++++++++------
src/utils/strings/englishConstants.tsx | 1 -
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/components/ChangeEmail.tsx b/src/components/ChangeEmail.tsx
index 668e498bb..f7adf1c7d 100644
--- a/src/components/ChangeEmail.tsx
+++ b/src/components/ChangeEmail.tsx
@@ -9,7 +9,6 @@ import router from 'next/router';
import { changeEmail, getOTTForEmailChange } from 'services/userService';
import styled from 'styled-components';
import { AppContext } from 'pages/_app';
-import englishConstants from 'utils/strings/englishConstants';
interface formValues {
email: string;
@@ -125,7 +124,7 @@ function ChangeEmailForm(props:Props) {
setShowOttInputVisibility(false)}>
- {englishConstants.CHANGE}
+ {constants.CHANGE}
diff --git a/src/components/pages/gallery/SelectedFileOptions.tsx b/src/components/pages/gallery/SelectedFileOptions.tsx
index 7c7c827df..84dc2e420 100644
--- a/src/components/pages/gallery/SelectedFileOptions.tsx
+++ b/src/components/pages/gallery/SelectedFileOptions.tsx
@@ -7,7 +7,7 @@ import DeleteIcon from 'components/icons/DeleteIcon';
import CrossIcon from 'components/icons/CrossIcon';
import AddIcon from 'components/icons/AddIcon';
import { IconButton } from 'components/Container';
-import constants from 'utils/strings/englishConstants';
+import constants from 'utils/strings/constants';
interface Props {
addToCollectionHelper: (collectionName, collection) => void;
diff --git a/src/components/pages/gallery/UploadProgress.tsx b/src/components/pages/gallery/UploadProgress.tsx
index 1f05a7db9..37202b2a9 100644
--- a/src/components/pages/gallery/UploadProgress.tsx
+++ b/src/components/pages/gallery/UploadProgress.tsx
@@ -141,9 +141,9 @@ export default function UploadProgress(props: Props) {
}
{fileUploadResults?.get(FileUploadResults.FAILED)?.length>0 &&(<>
- setFailedView(!failedFilesView)}>failed files {failedFilesView? : }
+ setFailedView(!failedFilesView)}>{constants.FAILED_FILES} {failedFilesView? : }
- unable to upload files because of network issue, you can retry upload this files
+ {constants.FAILED_INFO}
{fileUploadResults.get(FileUploadResults.FAILED).map((fileName) => (
@@ -154,9 +154,9 @@ export default function UploadProgress(props: Props) {
>)}
{fileUploadResults?.get(FileUploadResults.SKIPPED)?.length>0 &&(<>
- setSkippedFilesView(!skippedFilesView)}> duplicate files {skippedFilesView? : }
+ setSkippedFilesView(!skippedFilesView)}>{constants.SKIPPED_FILES} {skippedFilesView? : }
- these files already existed in the album
+ {constants.SKIPPED_INFO}
{fileUploadResults.get(FileUploadResults.SKIPPED).map((fileName) => (
@@ -167,7 +167,8 @@ export default function UploadProgress(props: Props) {
>)}
{fileUploadResults?.get(FileUploadResults.UNSUPPORTED)?.length>0 &&(<>
- setUnsupportedFilesView(!unsupportedFilesView)} > unsupported files {unsupportedFilesView? : }
+ setUnsupportedFilesView(!unsupportedFilesView)} >{constants.UNSUPPORTED_FILES}{unsupportedFilesView? : }
+ {constants.UNSUPPORTED_INFO}
{fileUploadResults.get(FileUploadResults.UNSUPPORTED).map((fileName) => (
@@ -179,7 +180,8 @@ export default function UploadProgress(props: Props) {
>)}
{fileUploadResults?.get(FileUploadResults.UPLOADED)?.length>0 &&(<>
- setUploadedFileView(!uploadedFileView)} > successfully uploaded files {uploadedFileView? : }
+ setUploadedFileView(!uploadedFileView)} > {constants.UPLOADED_FILES} {uploadedFileView? : }
+ {constants.UPLOADED_INFO}
{fileUploadResults.get(FileUploadResults.UPLOADED).map((fileName) => (
diff --git a/src/utils/strings/englishConstants.tsx b/src/utils/strings/englishConstants.tsx
index 623d0b781..082e061b3 100644
--- a/src/utils/strings/englishConstants.tsx
+++ b/src/utils/strings/englishConstants.tsx
@@ -93,7 +93,6 @@ const englishConstants = {
},
UPLOADING_FILES: 'file upload',
FILE_NOT_UPLOADED_LIST: 'following files were not uploaded',
- UNSUPPORTED_FILE_LIST: 'unsupported files',
FILE_UPLOAD_PROGRESS: (name:string, progress:number) => (
{name}
From be27d72ee1956ae88863adb344919957681fd196 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Fri, 6 Aug 2021 18:05:08 +0530
Subject: [PATCH 11/23] moved etag blocked message to upload progress bar
---
src/components/pages/gallery/Upload.tsx | 16 +-----------
.../pages/gallery/UploadProgress.tsx | 25 ++++++++++++++++---
src/services/uploadService.ts | 10 +++++---
src/utils/common/errorUtil.ts | 6 -----
src/utils/strings/englishConstants.tsx | 2 +-
5 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/src/components/pages/gallery/Upload.tsx b/src/components/pages/gallery/Upload.tsx
index d0549a96f..bcbc4a8ff 100644
--- a/src/components/pages/gallery/Upload.tsx
+++ b/src/components/pages/gallery/Upload.tsx
@@ -13,8 +13,6 @@ import { SetFiles, SetLoading } from 'pages/gallery';
import { AppContext } from 'pages/_app';
import { logError } from 'utils/sentry';
import { FileRejection } from 'react-dropzone';
-import { CustomError } from 'utils/common/errorUtil';
-import { DESKTOP_APP_DOWNLOAD_URL, downloadApp } from 'utils/common';
interface Props {
syncWithRemote: (force?: boolean, silent?: boolean) => Promise;
@@ -219,19 +217,7 @@ export default function Upload(props: Props) {
props.setFiles,
);
} catch (err) {
- if (err?.message===CustomError.ETAG_MISSING) {
- props.setDialogMessage({ title: constants.UPLOAD_FAILED,
- staticBackdrop: true,
- close: { variant: 'danger', text: constants.CLOSE },
- content: constants.ETAGS_BLOCKED(DESKTOP_APP_DOWNLOAD_URL),
- proceed: {
- text: constants.DOWNLOAD,
- action: downloadApp,
- variant: 'success',
- } });
- } else {
- props.setBannerMessage(err.message);
- }
+ props.setBannerMessage(err.message);
setProgressView(false);
throw err;
} finally {
diff --git a/src/components/pages/gallery/UploadProgress.tsx b/src/components/pages/gallery/UploadProgress.tsx
index 37202b2a9..c9856cae0 100644
--- a/src/components/pages/gallery/UploadProgress.tsx
+++ b/src/components/pages/gallery/UploadProgress.tsx
@@ -7,7 +7,9 @@ import {
import { FileRejection } from 'react-dropzone';
import { FileUploadResults, UPLOAD_STAGES } from 'services/uploadService';
import styled from 'styled-components';
+import { DESKTOP_APP_DOWNLOAD_URL } from 'utils/common';
import constants from 'utils/strings/constants';
+import englishConstants from 'utils/strings/englishConstants';
interface Props {
fileCounter;
@@ -46,14 +48,16 @@ export default function UploadProgress(props: Props) {
const [failedFilesView, setFailedView]=useState(false);
const [skippedFilesView, setSkippedFilesView]=useState(false);
const [unsupportedFilesView, setUnsupportedFilesView]=useState(false);
- const [uploadedFileView, setUploadedFileView]=useState(false);
+ const [uploadedFilesView, setUploadedFilesView]=useState(false);
+ const [blockedFilesView, setBlockedFilesView]=useState(false);
useEffect(()=>{
if (props.show) {
setFailedView(false);
setSkippedFilesView(false);
setUnsupportedFilesView(false);
- setUploadedFileView(false);
+ setUploadedFilesView(false);
+ setBlockedFilesView(false);
}
}, [props.show]);
@@ -77,6 +81,7 @@ export default function UploadProgress(props: Props) {
const fileList= fileUploadResults.get(progress);
fileUploadResults.set(progress, [...fileList, fileName]);
}
+ // fileUploadResults.set(FileUploadResults.BLOCKED, ['random']);
}
return (
@@ -140,6 +145,18 @@ export default function UploadProgress(props: Props) {
))}
}
+ {fileUploadResults?.get(FileUploadResults.BLOCKED)?.length>0 &&(<>
+ setBlockedFilesView(!blockedFilesView)} > blocked files {blockedFilesView? : }
+
+ {englishConstants.ETAGS_BLOCKED(DESKTOP_APP_DOWNLOAD_URL)}
+ {fileUploadResults.get(FileUploadResults.BLOCKED).map((fileName) => (
+
+
+ {fileName}
+
+ ))}
+
+ >)}
{fileUploadResults?.get(FileUploadResults.FAILED)?.length>0 &&(<>
setFailedView(!failedFilesView)}>{constants.FAILED_FILES} {failedFilesView? : }
@@ -180,9 +197,9 @@ export default function UploadProgress(props: Props) {
>)}
{fileUploadResults?.get(FileUploadResults.UPLOADED)?.length>0 &&(<>
- setUploadedFileView(!uploadedFileView)} > {constants.UPLOADED_FILES} {uploadedFileView? : }
+ setUploadedFilesView(!uploadedFilesView)} > {constants.UPLOADED_FILES} {uploadedFilesView? : }
{constants.UPLOADED_INFO}
-
+
{fileUploadResults.get(FileUploadResults.UPLOADED).map((fileName) => (
diff --git a/src/services/uploadService.ts b/src/services/uploadService.ts
index cb487fa12..b99cd46fa 100644
--- a/src/services/uploadService.ts
+++ b/src/services/uploadService.ts
@@ -50,6 +50,7 @@ export enum FileUploadResults {
FAILED = -1,
SKIPPED = -2,
UNSUPPORTED = -3,
+ BLOCKED=-4,
UPLOADED = 100,
}
@@ -293,10 +294,13 @@ class UploadService {
}
} catch (e) {
logError(e, 'file upload failed');
- this.failedFiles.push(fileWithCollection);
- // set progress to -1 indicating that file upload failed but keep it to show in the file-upload list progress
- this.fileProgress.set(rawFile.name, FileUploadResults.FAILED);
handleError(e);
+ this.failedFiles.push(fileWithCollection);
+ if (e.message ===CustomError.ETAG_MISSING) {
+ this.fileProgress.set(rawFile.name, FileUploadResults.BLOCKED);
+ } else {
+ this.fileProgress.set(rawFile.name, FileUploadResults.FAILED);
+ }
} finally {
file=null;
encryptedFile=null;
diff --git a/src/utils/common/errorUtil.ts b/src/utils/common/errorUtil.ts
index 75e58d18e..7354808a5 100644
--- a/src/utils/common/errorUtil.ts
+++ b/src/utils/common/errorUtil.ts
@@ -32,12 +32,6 @@ export function parseError(error) {
parsedMessage = constants.SESSION_EXPIRED_MESSAGE;
break;
}
- } else if (error?.message) {
- const errorMessage = error.message.toString();
- switch (errorMessage) {
- case CustomError.ETAG_MISSING:
- parsedMessage=CustomError.ETAG_MISSING;
- }
}
if (parsedMessage) {
return { parsedError: new Error(parsedMessage), parsed: true };
diff --git a/src/utils/strings/englishConstants.tsx b/src/utils/strings/englishConstants.tsx
index 082e061b3..9ed31f0db 100644
--- a/src/utils/strings/englishConstants.tsx
+++ b/src/utils/strings/englishConstants.tsx
@@ -457,7 +457,7 @@ const englishConstants = {
please disable any addons that might be preventing ente from using eTags
to upload large files, or use our
{' '}
desktop app
From 96c2c7beb4c0b97e88343f1cdac0afc4ff23a9ca Mon Sep 17 00:00:00 2001
From: Pushkar Anand
Date: Sat, 7 Aug 2021 02:09:16 +0530
Subject: [PATCH 12/23] Better fix for error message.
---
src/components/SingleInputForm.tsx | 55 +++++++++++++++---------------
1 file changed, 28 insertions(+), 27 deletions(-)
diff --git a/src/components/SingleInputForm.tsx b/src/components/SingleInputForm.tsx
index 99432ad73..68930c2c7 100644
--- a/src/components/SingleInputForm.tsx
+++ b/src/components/SingleInputForm.tsx
@@ -18,20 +18,20 @@ interface Props {
buttonText: string;
}
-const PositioningDiv = styled.div`
- float:right;
- position:absolute;
- top:0;
- right:0;
+const Group = styled.div`
+ position: relative;
`;
const Button = styled.button`
background: transparent;
border: none;
- width: 36px;
- height: 36px;
- margin-left: -36px;
- display: flex;
+ width: 34px;
+ height: 34px;
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ border-radius: 5px;
+ background-color: #fff;
align-items: center;
`;
@@ -61,28 +61,29 @@ export default function SingleInputForm(props: Props) {
values, touched, errors, handleChange, handleSubmit,
}) => (
-
-
- {props.fieldType === 'password' &&
+
+
+
+ {
+ props.fieldType === 'password' &&
setShowPassword(!showPassword)}>
{showPassword ? : }
}
-
-
- {errors.passphrase}
-
+
+ {errors.passphrase}
+
+
Date: Sat, 7 Aug 2021 02:22:08 +0530
Subject: [PATCH 13/23] Increase button size for safari.
---
src/components/SingleInputForm.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/SingleInputForm.tsx b/src/components/SingleInputForm.tsx
index 68930c2c7..73bf7da75 100644
--- a/src/components/SingleInputForm.tsx
+++ b/src/components/SingleInputForm.tsx
@@ -25,7 +25,7 @@ const Group = styled.div`
const Button = styled.button`
background: transparent;
border: none;
- width: 34px;
+ width: 46px;
height: 34px;
position: absolute;
top: 1px;
From b6bb7af1795d5ab17c8768f742e3ee28a3c991e2 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 10:57:17 +0530
Subject: [PATCH 14/23] updated strings and style chnages
---
.../pages/gallery/UploadProgress.tsx | 55 ++++++++++---------
src/utils/strings/englishConstants.tsx | 9 +--
2 files changed, 35 insertions(+), 29 deletions(-)
diff --git a/src/components/pages/gallery/UploadProgress.tsx b/src/components/pages/gallery/UploadProgress.tsx
index c9856cae0..4399487d9 100644
--- a/src/components/pages/gallery/UploadProgress.tsx
+++ b/src/components/pages/gallery/UploadProgress.tsx
@@ -30,8 +30,13 @@ interface FileProgresses{
const FileList =styled.ul<{collapsed:boolean, sm?:boolean}>`
margin-top: 10px;
overflow: auto;
- height:${(props)=> props.collapsed?'0px':props.sm?'144px':'200px'};
+ height:${(props)=> props.collapsed?'0px':props.sm?'192px':'250px'};
transition: height 0.2s ease-out;
+ & > li{
+ margin-bottom:12px;
+ color:#ddd;
+ padding-left:10px;
+ }
`;
const SectionHeader =styled.div`
@@ -112,15 +117,7 @@ export default function UploadProgress(props: Props) {
- {props.uploadStage===UPLOAD_STAGES.FINISH ? (
- filesNotUploaded && (
-
-
- {constants.FILE_NOT_UPLOADED_LIST}
-
- )
- ) :
- (props.uploadStage === UPLOAD_STAGES.READING_GOOGLE_METADATA_FILES ||
+ {(props.uploadStage === UPLOAD_STAGES.READING_GOOGLE_METADATA_FILES ||
props.uploadStage === UPLOAD_STAGES.UPLOADING) &&
(
< ProgressBar
@@ -145,8 +142,28 @@ export default function UploadProgress(props: Props) {
))}
}
+ {fileUploadResults?.get(FileUploadResults.UPLOADED)?.length>0 &&(<>
+ setUploadedFilesView(!uploadedFilesView)} > {constants.SUCCESSFUL_UPLOADS} {uploadedFilesView? : }
+
+ {constants.SUCCESS_INFO}
+ {fileUploadResults.get(FileUploadResults.UPLOADED).map((fileName) => (
+
+
+ {fileName}
+
+ ))}
+
+ >)}
+
+ {props.uploadStage === UPLOAD_STAGES.FINISH && filesNotUploaded && (
+
+
+ {constants.FILE_NOT_UPLOADED_LIST}
+
+ )
+ }
{fileUploadResults?.get(FileUploadResults.BLOCKED)?.length>0 &&(<>
- setBlockedFilesView(!blockedFilesView)} > blocked files {blockedFilesView? : }
+ setBlockedFilesView(!blockedFilesView)} > {constants.BLOCKED_UPLOADS} {blockedFilesView? : }
{englishConstants.ETAGS_BLOCKED(DESKTOP_APP_DOWNLOAD_URL)}
{fileUploadResults.get(FileUploadResults.BLOCKED).map((fileName) => (
@@ -158,7 +175,7 @@ export default function UploadProgress(props: Props) {
>)}
{fileUploadResults?.get(FileUploadResults.FAILED)?.length>0 &&(<>
- setFailedView(!failedFilesView)}>{constants.FAILED_FILES} {failedFilesView? : }
+ setFailedView(!failedFilesView)}>{constants.FAILED_UPLOADS} {failedFilesView? : }
{constants.FAILED_INFO}
{fileUploadResults.get(FileUploadResults.FAILED).map((fileName) => (
@@ -185,8 +202,8 @@ export default function UploadProgress(props: Props) {
{fileUploadResults?.get(FileUploadResults.UNSUPPORTED)?.length>0 &&(<>
setUnsupportedFilesView(!unsupportedFilesView)} >{constants.UNSUPPORTED_FILES}{unsupportedFilesView? : }
- {constants.UNSUPPORTED_INFO}
+ {constants.UNSUPPORTED_INFO}
{fileUploadResults.get(FileUploadResults.UNSUPPORTED).map((fileName) => (
@@ -196,18 +213,6 @@ export default function UploadProgress(props: Props) {
>)}
- {fileUploadResults?.get(FileUploadResults.UPLOADED)?.length>0 &&(<>
- setUploadedFilesView(!uploadedFilesView)} > {constants.UPLOADED_FILES} {uploadedFilesView? : }
- {constants.UPLOADED_INFO}
-
- {fileUploadResults.get(FileUploadResults.UPLOADED).map((fileName) => (
-
-
- {fileName}
-
- ))}
-
- >)}
{props.uploadStage === UPLOAD_STAGES.FINISH && (
diff --git a/src/utils/strings/englishConstants.tsx b/src/utils/strings/englishConstants.tsx
index 9ed31f0db..4b5d659e2 100644
--- a/src/utils/strings/englishConstants.tsx
+++ b/src/utils/strings/englishConstants.tsx
@@ -465,15 +465,16 @@ const englishConstants = {
for a more reliable import experience.
>),
- RETRY_FAILED: 'retry failed files',
- FAILED_FILES: 'failed files ',
+ RETRY_FAILED: 'retry failed uploads',
+ FAILED_UPLOADS: 'failed uploads ',
SKIPPED_FILES: 'duplicate files',
UNSUPPORTED_FILES: 'unsupported files',
- UPLOADED_FILES: 'successfully uploaded files',
+ SUCCESSFUL_UPLOADS: 'successful uploads',
FAILED_INFO: ' unable to upload these files because of network issue, you can retry upload these files',
SKIPPED_INFO: 'these files already existed in the album',
UNSUPPORTED_INFO: 'these files are currently not supported by ente',
- UPLOADED_INFO: 'successfully backed-up memories',
+ SUCCESS_INFO: 'successfully backed-up memories',
+ BLOCKED_UPLOADS: 'blocked uploads',
};
export default englishConstants;
From cb9b0cd6206baf02ad1f1c8e3906ed916a2cacd9 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 11:10:49 +0530
Subject: [PATCH 15/23] small UI change
---
src/components/pages/gallery/UploadProgress.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/pages/gallery/UploadProgress.tsx b/src/components/pages/gallery/UploadProgress.tsx
index 4399487d9..7ad87c8b6 100644
--- a/src/components/pages/gallery/UploadProgress.tsx
+++ b/src/components/pages/gallery/UploadProgress.tsx
@@ -30,7 +30,7 @@ interface FileProgresses{
const FileList =styled.ul<{collapsed:boolean, sm?:boolean}>`
margin-top: 10px;
overflow: auto;
- height:${(props)=> props.collapsed?'0px':props.sm?'192px':'250px'};
+ height:${(props)=> props.collapsed?'0px':props.sm?'156px':'220px'};
transition: height 0.2s ease-out;
& > li{
margin-bottom:12px;
From 7bbbd0a54200c2e955a286e52621200d3965c3ca Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 14:34:38 +0530
Subject: [PATCH 16/23] ui changes
---
src/components/pages/gallery/AlertBanner.tsx | 23 ++-
src/components/pages/gallery/LinkButton.tsx | 29 +--
.../pages/gallery/UploadProgress.tsx | 171 +++++++-----------
src/pages/_app.tsx | 4 +
src/utils/common/index.ts | 2 +-
src/utils/strings/englishConstants.tsx | 2 +-
6 files changed, 109 insertions(+), 122 deletions(-)
diff --git a/src/components/pages/gallery/AlertBanner.tsx b/src/components/pages/gallery/AlertBanner.tsx
index 3452e34ac..77d730ac5 100644
--- a/src/components/pages/gallery/AlertBanner.tsx
+++ b/src/components/pages/gallery/AlertBanner.tsx
@@ -1,16 +1,31 @@
import React from 'react';
import Alert from 'react-bootstrap/Alert';
+import { getVariantColor } from './LinkButton';
-export default function AlertBanner({ bannerMessage }) {
+interface Props{
+ bannerMessage?:any
+ variant?:string
+ children?:any
+}
+export default function AlertBanner(props:Props) {
return (
- {bannerMessage}
+ {props.bannerMessage?props.bannerMessage:props.children}
);
}
diff --git a/src/components/pages/gallery/LinkButton.tsx b/src/components/pages/gallery/LinkButton.tsx
index 58039de03..5c553868c 100644
--- a/src/components/pages/gallery/LinkButton.tsx
+++ b/src/components/pages/gallery/LinkButton.tsx
@@ -4,6 +4,7 @@ enum ButtonVariant {
success = 'success',
danger = 'danger',
secondary = 'secondary',
+ warning='warning'
}
type Props = React.PropsWithChildren<{
onClick: any;
@@ -11,23 +12,25 @@ type Props = React.PropsWithChildren<{
style?: any;
}>;
-export default function LinkButton(props: Props) {
- function getButtonColor(variant: string) {
- switch (variant) {
- case ButtonVariant.success:
- return '#2dc262';
- case ButtonVariant.danger:
- return '#c93f3f';
- case ButtonVariant.secondary:
- return '#858585';
- default:
- return '#d1d1d1';
- }
+export function getVariantColor(variant: string) {
+ switch (variant) {
+ case ButtonVariant.success:
+ return '#2dc262';
+ case ButtonVariant.danger:
+ return '#c93f3f';
+ case ButtonVariant.secondary:
+ return '#858585';
+ case ButtonVariant.warning:
+ return '#D7BB63';
+ default:
+ return '#d1d1d1';
}
+}
+export default function LinkButton(props: Props) {
return (
`
- margin-top: 10px;
- overflow: auto;
- height:${(props)=> props.collapsed?'0px':props.sm?'156px':'220px'};
- transition: height 0.2s ease-out;
- & > li{
- margin-bottom:12px;
- color:#ddd;
+const Content =styled.div<{collapsed:boolean, sm?:boolean, height?:number}>`
+ overflow: hidden;
+ height:${(props)=> props.collapsed?'0px':props.height+'px'};
+ transition:${(props)=> 'height '+0.001*props.height+'s ease-out'};
+ margin-bottom: 20px;
+ & >p {
+ padding-left:35px;
+ margin:0;
+ }
+`;
+const FileList =styled.ul`
+ padding-left:50px;
+ & > li {
padding-left:10px;
+ color:#ccc;
}
`;
-const SectionHeader =styled.div`
+const SectionTitle =styled.div`
display:flex;
justify-content:space-between;
padding:0 20px;
@@ -49,25 +55,38 @@ const SectionHeader =styled.div`
`;
+interface ResultSectionProps{
+ fileUploadResultMap: Map;
+ fileUploadResult:FileUploadResults;
+ sectionTitle;
+ sectionInfo;
+ infoHeight:number;
+}
+const ResultSection =(props:ResultSectionProps)=>{
+ const [listView, setListView]=useState(false);
+ const fileList=props.fileUploadResultMap?.get(props.fileUploadResult);
+ if (!fileList?.length) {
+ return <>>;
+ }
+ return (<>
+ setListView(!listView)} > {props.sectionTitle} {listView? : }
+
+ {props.sectionInfo}
+
+ {fileList.map((fileName) => (
+
+
+ {fileName}
+
+ ))}
+
+
+ >);
+};
+
export default function UploadProgress(props: Props) {
- const [failedFilesView, setFailedView]=useState(false);
- const [skippedFilesView, setSkippedFilesView]=useState(false);
- const [unsupportedFilesView, setUnsupportedFilesView]=useState(false);
- const [uploadedFilesView, setUploadedFilesView]=useState(false);
- const [blockedFilesView, setBlockedFilesView]=useState(false);
-
- useEffect(()=>{
- if (props.show) {
- setFailedView(false);
- setSkippedFilesView(false);
- setUnsupportedFilesView(false);
- setUploadedFilesView(false);
- setBlockedFilesView(false);
- }
- }, [props.show]);
-
const fileProgressStatuses = [] as FileProgresses[];
- const fileUploadResults = new Map();
+ const fileUploadResultMap = new Map();
let filesNotUploaded=false;
if (props.fileProgress) {
@@ -77,16 +96,15 @@ export default function UploadProgress(props: Props) {
}
if (props.uploadResult) {
for (const [fileName, progress] of props.uploadResult) {
- if (!fileUploadResults.has(progress)) {
- fileUploadResults.set(progress, []);
+ if (!fileUploadResultMap.has(progress)) {
+ fileUploadResultMap.set(progress, []);
}
if (progress<0) {
filesNotUploaded=true;
}
- const fileList= fileUploadResults.get(progress);
- fileUploadResults.set(progress, [...fileList, fileName]);
+ const fileList= fileUploadResultMap.get(progress);
+ fileUploadResultMap.set(progress, [...fileList, fileName]);
}
- // fileUploadResults.set(FileUploadResults.BLOCKED, ['random']);
}
return (
@@ -104,7 +122,12 @@ export default function UploadProgress(props: Props) {
}
>
@@ -128,7 +151,7 @@ export default function UploadProgress(props: Props) {
)
}
{fileProgressStatuses.length>0 &&
-
+
{fileProgressStatuses.map(({ fileName, progress }) => (
{props.uploadStage===UPLOAD_STAGES.FINISH ?
@@ -140,83 +163,25 @@ export default function UploadProgress(props: Props) {
}
))}
-
- }
- {fileUploadResults?.get(FileUploadResults.UPLOADED)?.length>0 &&(<>
- setUploadedFilesView(!uploadedFilesView)} > {constants.SUCCESSFUL_UPLOADS} {uploadedFilesView? : }
-
- {constants.SUCCESS_INFO}
- {fileUploadResults.get(FileUploadResults.UPLOADED).map((fileName) => (
+ }
-
- {fileName}
-
- ))}
-
- >)}
+
{props.uploadStage === UPLOAD_STAGES.FINISH && filesNotUploaded && (
-
-
+
{constants.FILE_NOT_UPLOADED_LIST}
-
+
)
}
- {fileUploadResults?.get(FileUploadResults.BLOCKED)?.length>0 &&(<>
- setBlockedFilesView(!blockedFilesView)} > {constants.BLOCKED_UPLOADS} {blockedFilesView? : }
-
- {englishConstants.ETAGS_BLOCKED(DESKTOP_APP_DOWNLOAD_URL)}
- {fileUploadResults.get(FileUploadResults.BLOCKED).map((fileName) => (
-
-
- {fileName}
-
- ))}
-
- >)}
- {fileUploadResults?.get(FileUploadResults.FAILED)?.length>0 &&(<>
- setFailedView(!failedFilesView)}>{constants.FAILED_UPLOADS} {failedFilesView? : }
-
- {constants.FAILED_INFO}
- {fileUploadResults.get(FileUploadResults.FAILED).map((fileName) => (
-
-
- {fileName}
-
- ))}
-
- >)}
-
- {fileUploadResults?.get(FileUploadResults.SKIPPED)?.length>0 &&(<>
- setSkippedFilesView(!skippedFilesView)}>{constants.SKIPPED_FILES} {skippedFilesView? : }
-
- {constants.SKIPPED_INFO}
- {fileUploadResults.get(FileUploadResults.SKIPPED).map((fileName) => (
-
-
- {fileName}
-
- ))}
-
- >)}
-
- {fileUploadResults?.get(FileUploadResults.UNSUPPORTED)?.length>0 &&(<>
- setUnsupportedFilesView(!unsupportedFilesView)} >{constants.UNSUPPORTED_FILES}{unsupportedFilesView? : }
-
- {constants.UNSUPPORTED_INFO}
- {fileUploadResults.get(FileUploadResults.UNSUPPORTED).map((fileName) => (
-
-
- {fileName}
-
- ))}
-
- >)}
+
+
+
+
{props.uploadStage === UPLOAD_STAGES.FINISH && (
- {props.uploadStage===UPLOAD_STAGES.FINISH && (fileUploadResults?.get(FileUploadResults.FAILED)?.length>0? (
+ {props.uploadStage===UPLOAD_STAGES.FINISH && ((fileUploadResultMap?.get(FileUploadResults.FAILED)?.length>0 || fileUploadResultMap?.get(FileUploadResults.BLOCKED)?.length>0)? (
`${currWord} ${reversedString}`);
}
-export async function retryAsyncFunction(func: ()=>Promise, retryCount: number = 3) {
+export async function retryAsyncFunction(func: ()=>Promise, retryCount: number = 0) {
try {
const resp = await func();
return resp;
diff --git a/src/utils/strings/englishConstants.tsx b/src/utils/strings/englishConstants.tsx
index 4b5d659e2..886689cbb 100644
--- a/src/utils/strings/englishConstants.tsx
+++ b/src/utils/strings/englishConstants.tsx
@@ -92,7 +92,7 @@ const englishConstants = {
3: 'backup complete!',
},
UPLOADING_FILES: 'file upload',
- FILE_NOT_UPLOADED_LIST: 'following files were not uploaded',
+ FILE_NOT_UPLOADED_LIST: 'the following files were not uploaded',
FILE_UPLOAD_PROGRESS: (name:string, progress:number) => (
{name}
From c9faca32be3db80b54d6715418147ab559e51e43 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 15:26:40 +0530
Subject: [PATCH 17/23] cleanup
---
src/components/pages/gallery/UploadProgress.tsx | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/components/pages/gallery/UploadProgress.tsx b/src/components/pages/gallery/UploadProgress.tsx
index 8ee9fe4c3..6412e1df5 100644
--- a/src/components/pages/gallery/UploadProgress.tsx
+++ b/src/components/pages/gallery/UploadProgress.tsx
@@ -171,14 +171,12 @@ export default function UploadProgress(props: Props) {
{constants.FILE_NOT_UPLOADED_LIST}
- )
- }
+ )}
-
{props.uploadStage === UPLOAD_STAGES.FINISH && (
{props.uploadStage===UPLOAD_STAGES.FINISH && ((fileUploadResultMap?.get(FileUploadResults.FAILED)?.length>0 || fileUploadResultMap?.get(FileUploadResults.BLOCKED)?.length>0)? (
From 14eae786ebbaf1c891a2fd73ac945f6a2ef8d473 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 15:50:12 +0530
Subject: [PATCH 18/23] fix retry
---
src/utils/common/index.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/utils/common/index.ts b/src/utils/common/index.ts
index 683758e5c..d6785c83b 100644
--- a/src/utils/common/index.ts
+++ b/src/utils/common/index.ts
@@ -32,7 +32,7 @@ export function reverseString(title: string) {
.reduce((reversedString, currWord) => `${currWord} ${reversedString}`);
}
-export async function retryAsyncFunction(func: ()=>Promise, retryCount: number = 0) {
+export async function retryAsyncFunction(func: ()=>Promise, retryCount: number = 3) {
try {
const resp = await func();
return resp;
From 8b1468cfe19d315b3786bc18a8db34292d6abb59 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 15:50:28 +0530
Subject: [PATCH 19/23] minor ui tweeks
---
src/components/pages/gallery/UploadProgress.tsx | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/components/pages/gallery/UploadProgress.tsx b/src/components/pages/gallery/UploadProgress.tsx
index 6412e1df5..9094961dd 100644
--- a/src/components/pages/gallery/UploadProgress.tsx
+++ b/src/components/pages/gallery/UploadProgress.tsx
@@ -39,8 +39,10 @@ const Content =styled.div<{collapsed:boolean, sm?:boolean, height?:number}>`
`;
const FileList =styled.ul`
padding-left:50px;
+ margin-top:5px;
& > li {
padding-left:10px;
+ margin-bottom:10px;
color:#ccc;
}
`;
@@ -50,7 +52,7 @@ const SectionTitle =styled.div`
justify-content:space-between;
padding:0 20px;
color:#eee;
- font-size:17px;
+ font-size:20px;
cursor:pointer;
`;
@@ -70,12 +72,12 @@ const ResultSection =(props:ResultSectionProps)=>{
}
return (<>
setListView(!listView)} > {props.sectionTitle} {listView? : }
-
+
{props.sectionInfo}
{fileList.map((fileName) => (
-
+
{fileName}
))}
From 2f5ff72038f6022a6ac625c3de798e1769eedf22 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 15:57:55 +0530
Subject: [PATCH 20/23] update local storage entry after email change
---
src/components/ChangeEmail.tsx | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/components/ChangeEmail.tsx b/src/components/ChangeEmail.tsx
index f7adf1c7d..c2546a415 100644
--- a/src/components/ChangeEmail.tsx
+++ b/src/components/ChangeEmail.tsx
@@ -9,6 +9,7 @@ import router from 'next/router';
import { changeEmail, getOTTForEmailChange } from 'services/userService';
import styled from 'styled-components';
import { AppContext } from 'pages/_app';
+import { getData, LS_KEYS, setData } from 'utils/storage/localStorage';
interface formValues {
email: string;
@@ -71,6 +72,7 @@ function ChangeEmailForm(props:Props) {
try {
setLoading(true);
await changeEmail(email, ott);
+ setData(LS_KEYS.USER, { ...getData(LS_KEYS.USER), email });
appContext.setDisappearingFlashMessage({ message: constants.EMAIL_UDPATE_SUCCESSFUL, severity: 'success' });
router.push('/gallery');
} catch (e) {
From 439e47fc5408d1d858a7a57012495d488b86c637 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 16:00:48 +0530
Subject: [PATCH 21/23] update local storage entry for userDetails on server
sync
---
src/components/Sidebar.tsx | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx
index 7070b34fc..e2f495333 100644
--- a/src/components/Sidebar.tsx
+++ b/src/components/Sidebar.tsx
@@ -60,6 +60,8 @@ export default function Sidebar(props: Props) {
setUser({ ...user, email: userDetails.email });
SetUsage(convertToHumanReadable(userDetails.usage));
setSubscription(userDetails.subscription);
+ setData(LS_KEYS.USER, { ...getData(LS_KEYS.USER), email: userDetails.email });
+ setData(LS_KEYS.SUBSCRIPTION, userDetails.subscription);
};
main();
}, [isOpen]);
From 0f1e66815df83b38bc7751b8ab47c6fe635a43f3 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 16:04:24 +0530
Subject: [PATCH 22/23] remove exclaimation after backup complete
---
src/utils/strings/englishConstants.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/utils/strings/englishConstants.tsx b/src/utils/strings/englishConstants.tsx
index 886689cbb..1dede683b 100644
--- a/src/utils/strings/englishConstants.tsx
+++ b/src/utils/strings/englishConstants.tsx
@@ -89,7 +89,7 @@ const englishConstants = {
0: 'preparing to upload',
1: 'reading google metadata files',
2: (fileCounter) => `${fileCounter.finished} / ${fileCounter.total} files backed up`,
- 3: 'backup complete!',
+ 3: 'backup complete',
},
UPLOADING_FILES: 'file upload',
FILE_NOT_UPLOADED_LIST: 'the following files were not uploaded',
From 88e57cb18c055874922e83db797720dee8188db3 Mon Sep 17 00:00:00 2001
From: Abhinav-grd
Date: Sat, 7 Aug 2021 17:24:22 +0530
Subject: [PATCH 23/23] removed VisibilityButton background
---
src/components/SingleInputForm.tsx | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/components/SingleInputForm.tsx b/src/components/SingleInputForm.tsx
index 73bf7da75..a547a5d9e 100644
--- a/src/components/SingleInputForm.tsx
+++ b/src/components/SingleInputForm.tsx
@@ -31,7 +31,6 @@ const Button = styled.button`
top: 1px;
right: 1px;
border-radius: 5px;
- background-color: #fff;
align-items: center;
`;