Skip to content

Commit 2d60cbc

Browse files
Try fix download for android again... :(
1 parent ba758ae commit 2d60cbc

2 files changed

Lines changed: 59 additions & 21 deletions

File tree

public/app/js/receiver.js

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2013,26 +2013,45 @@ const Receiver = {
20132013
// Smart download: native app (Capacitor) uses Filesystem + Share,
20142014
// browser falls back to the classic <a download> logic.
20152015
if (window.Capacitor && window.Capacitor.isNative) {
2016-
try {
2017-
const { Filesystem, Share } = window.Capacitor.Plugins;
2018-
const reader = new FileReader();
2019-
reader.readAsDataURL(blob);
2020-
reader.onloadend = async () => {
2021-
const base64data = reader.result.split(',')[1];
2016+
// Весь async-поток обёрнут в try/catch, иначе ошибки из
2017+
// onloadend/Filesystem/Share уходят в unhandled rejection и
2018+
// Android WebView глушит их молча (кажется, что ничего не происходит).
2019+
(async () => {
2020+
try {
2021+
const { Filesystem, Share } = window.Capacitor.Plugins;
2022+
console.log('[Download] native branch, filename=', filename, 'blobSize=', blob.size);
2023+
2024+
// 1. Blob → base64
2025+
const base64data = await new Promise((resolve, reject) => {
2026+
const reader = new FileReader();
2027+
reader.onloadend = () => {
2028+
if (reader.error) reject(reader.error);
2029+
else resolve(reader.result.split(',')[1]);
2030+
};
2031+
reader.onerror = () => reject(reader.error);
2032+
reader.readAsDataURL(blob);
2033+
});
2034+
console.log('[Download] base64 ready, length=', base64data.length);
2035+
2036+
// 2. Сохранение во временную папку документов
20222037
const savedFile = await Filesystem.writeFile({
20232038
path: filename,
20242039
data: base64data,
20252040
directory: 'DOCUMENTS'
20262041
});
2042+
console.log('[Download] saved to', savedFile.uri);
2043+
2044+
// 3. Нативное окно Share
20272045
await Share.share({
20282046
title: filename,
20292047
url: savedFile.uri
20302048
});
2031-
};
2032-
} catch (err) {
2033-
console.error('[Download] Ошибка нативного сохранения:', err);
2034-
Utils.toast('Не удалось сохранить файл', 'error');
2035-
}
2049+
console.log('[Download] share ok');
2050+
} catch (err) {
2051+
console.error('[Download] Ошибка нативного сохранения:', err);
2052+
Utils.toast('Не удалось сохранить файл: ' + (err && err.message ? err.message : err), 'error');
2053+
}
2054+
})();
20362055
} else {
20372056
const url = URL.createObjectURL(blob);
20382057
const a = document.createElement('a'); a.href = url; a.download = filename; a.click();

public/app/js/video-exporter.js

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -949,25 +949,44 @@ const VideoExporter = {
949949
// Smart download: native app (Capacitor) uses Filesystem + Share,
950950
// browser falls back to the classic <a download> logic.
951951
if (window.Capacitor && window.Capacitor.isNative) {
952-
try {
953-
const { Filesystem, Share } = window.Capacitor.Plugins;
954-
const reader = new FileReader();
955-
reader.readAsDataURL(blob);
956-
reader.onloadend = async () => {
957-
const base64data = reader.result.split(',')[1];
952+
// Весь async-поток обёрнут в try/catch, иначе ошибки из
953+
// onloadend/Filesystem/Share уходят в unhandled rejection и
954+
// Android WebView глушит их молча (кажется, что ничего не происходит).
955+
(async () => {
956+
try {
957+
const { Filesystem, Share } = window.Capacitor.Plugins;
958+
console.log('[Download] native branch, filename=', filename, 'blobSize=', blob.size);
959+
960+
// 1. Blob → base64
961+
const base64data = await new Promise((resolve, reject) => {
962+
const reader = new FileReader();
963+
reader.onloadend = () => {
964+
if (reader.error) reject(reader.error);
965+
else resolve(reader.result.split(',')[1]);
966+
};
967+
reader.onerror = () => reject(reader.error);
968+
reader.readAsDataURL(blob);
969+
});
970+
console.log('[Download] base64 ready, length=', base64data.length);
971+
972+
// 2. Сохранение во временную папку документов
958973
const savedFile = await Filesystem.writeFile({
959974
path: filename,
960975
data: base64data,
961976
directory: 'DOCUMENTS'
962977
});
978+
console.log('[Download] saved to', savedFile.uri);
979+
980+
// 3. Нативное окно Share
963981
await Share.share({
964982
title: filename,
965983
url: savedFile.uri
966984
});
967-
};
968-
} catch (err) {
969-
console.error('[Download] Ошибка нативного сохранения:', err);
970-
}
985+
console.log('[Download] share ok');
986+
} catch (err) {
987+
console.error('[Download] Ошибка нативного сохранения:', err);
988+
}
989+
})();
971990
} else {
972991
const url = URL.createObjectURL(blob);
973992
const a = document.createElement('a');

0 commit comments

Comments
 (0)