fix(mobile): address code review feedback - error handling, filename collision, hash display

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-19 19:13:53 +00:00
parent 67c17e7baa
commit 6541529250
4 changed files with 16 additions and 8 deletions
+1 -1
View File
@@ -70,7 +70,7 @@ export function t(key: string, params?: Record<string, string>): string {
if (params) {
for (const [k, v] of Object.entries(params)) {
value = value.replace(new RegExp(`\\{${k}\\}`, "g"), v);
value = value.replaceAll(`{${k}}`, v);
}
}
+1 -1
View File
@@ -181,7 +181,7 @@ export default function FileDetailScreen() {
<MetaRow label="File Size" value={formatBytes(file.file_size)} />
<MetaRow label="MIME Type" value={file.mime_type ?? ""} />
<MetaRow label="Uploaded" value={formatDateTime(file.created_at)} />
<MetaRow label="File Hash" value={file.filehash ? `${file.filehash.slice(0, 16)}` : ""} />
<MetaRow label="File Hash" value={file.filehash ? `${file.filehash.slice(0, 24)}` : ""} />
<MetaRow label="Last Step" value={status.last_step ?? ""} />
<MetaRow label="Total Steps" value={String(status.total_steps)} />
</View>
+11 -4
View File
@@ -109,18 +109,25 @@ export default function FilesScreen() {
searchTimeoutRef.current = setTimeout(async () => {
setPage(1);
setLoading(true);
await fetchFiles(1, true, text);
setLoading(false);
try {
await fetchFiles(1, true, text);
} finally {
setLoading(false);
}
}, 400);
},
[fetchFiles]
);
const handleClearSearch = useCallback(() => {
const handleClearSearch = useCallback(async () => {
setSearchQuery("");
setPage(1);
setLoading(true);
fetchFiles(1, true).then(() => setLoading(false));
try {
await fetchFiles(1, true);
} finally {
setLoading(false);
}
}, [fetchFiles]);
const handleFilePress = useCallback(
+3 -2
View File
@@ -305,10 +305,11 @@ export default function UploadScreen() {
});
if (!result.canceled && result.assets.length > 0) {
for (const asset of result.assets) {
for (let i = 0; i < result.assets.length; i++) {
const asset = result.assets[i];
// Derive extension from MIME type so the filename matches the actual format
const ext = asset.mimeType?.split("/")[1]?.replace("jpeg", "jpg") ?? "jpg";
const filename = asset.fileName ?? `photo_${Date.now()}_${Math.random().toString(36).slice(2, 6)}.${ext}`;
const filename = asset.fileName ?? `photo_${Date.now()}_${i}.${ext}`;
await uploadFile(asset.uri, filename, asset.mimeType ?? "image/jpeg");
}
}