mirror of
https://github.com/Qortal/qortal-mobile.git
synced 2025-06-22 07:31:22 +00:00
added fix to status
This commit is contained in:
parent
7e34886d15
commit
fe63d9c0ff
@ -108,6 +108,8 @@ export const AppViewer = React.forwardRef(({ app , hide, isDevMode, skipAuth}, i
|
||||
const publishLocation = e.detail?.publishLocation;
|
||||
const chunksSubmitted = e.detail?.chunksSubmitted;
|
||||
const totalChunks = e.detail?.totalChunks;
|
||||
const retry = e.detail?.retry;
|
||||
const filename = e.detail?.filename;
|
||||
try {
|
||||
if (publishLocation === undefined || publishLocation === null) return;
|
||||
const dataToBeSent = {};
|
||||
@ -116,6 +118,12 @@ export const AppViewer = React.forwardRef(({ app , hide, isDevMode, skipAuth}, i
|
||||
}
|
||||
if (totalChunks !== undefined && totalChunks !== null) {
|
||||
dataToBeSent.totalChunks = totalChunks;
|
||||
}
|
||||
if (retry !== undefined && retry !== null) {
|
||||
dataToBeSent.retry = retry;
|
||||
}
|
||||
if (filename !== undefined && filename !== null) {
|
||||
dataToBeSent.filename = filename;
|
||||
}
|
||||
const targetOrigin = new URL(iframe.src).origin;
|
||||
iframe.contentWindow?.postMessage(
|
||||
|
@ -753,7 +753,7 @@ const sendMessage = async () => {
|
||||
240000,
|
||||
true
|
||||
);
|
||||
if (res !== true)
|
||||
if (res?.error)
|
||||
throw new Error(
|
||||
"Unable to publish image"
|
||||
);
|
||||
|
@ -26,6 +26,10 @@ async function reusablePost(endpoint, _body) {
|
||||
},
|
||||
body: _body,
|
||||
});
|
||||
if (!response.ok) {
|
||||
const errorText = await response.text();
|
||||
throw new Error(errorText);
|
||||
}
|
||||
let data;
|
||||
try {
|
||||
data = await response.clone().json();
|
||||
@ -68,7 +72,46 @@ async function uploadChunkWithRetry(endpoint, formData, index, maxRetries = 3) {
|
||||
throw new Error(`Chunk ${index} failed after ${maxRetries} attempts`);
|
||||
}
|
||||
// Wait 10 seconds before next retry
|
||||
await new Promise((res) => setTimeout(res, 10_000));
|
||||
await new Promise((res) => setTimeout(res, 25_000));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function resuablePostRetry(
|
||||
endpoint,
|
||||
body,
|
||||
maxRetries = 3,
|
||||
appInfo,
|
||||
resourceInfo
|
||||
) {
|
||||
let attempt = 0;
|
||||
while (attempt < maxRetries) {
|
||||
try {
|
||||
const response = await reusablePost(endpoint, body);
|
||||
|
||||
return response;
|
||||
} catch (err) {
|
||||
attempt++;
|
||||
if (attempt >= maxRetries) {
|
||||
throw new Error(
|
||||
err instanceof Error
|
||||
? err?.message || `Failed to make request`
|
||||
: `Failed to make request`
|
||||
);
|
||||
}
|
||||
if (appInfo?.tabId && resourceInfo) {
|
||||
executeEvent('receiveChunks', {
|
||||
tabId: appInfo.tabId,
|
||||
publishLocation: {
|
||||
name: resourceInfo?.name,
|
||||
identifier: resourceInfo?.identifier,
|
||||
service: resourceInfo?.service,
|
||||
},
|
||||
retry: true,
|
||||
});
|
||||
}
|
||||
// Wait 10 seconds before next retry
|
||||
await new Promise((res) => setTimeout(res, 25_000));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -106,7 +149,13 @@ export const publishData = async ({
|
||||
};
|
||||
|
||||
const convertBytesForSigning = async (transactionBytesBase58: string) => {
|
||||
return await reusablePost('/transactions/convert', transactionBytesBase58);
|
||||
return await resuablePostRetry(
|
||||
'/transactions/convert',
|
||||
transactionBytesBase58,
|
||||
3,
|
||||
appInfo,
|
||||
{ identifier, name: registeredName, service }
|
||||
);
|
||||
};
|
||||
|
||||
const getArbitraryFee = async () => {
|
||||
@ -163,9 +212,12 @@ export const publishData = async ({
|
||||
};
|
||||
|
||||
const processTransactionVersion2 = async (bytes) => {
|
||||
return await reusablePost(
|
||||
return await resuablePostRetry(
|
||||
'/transactions/process?apiVersion=2',
|
||||
Base58.encode(bytes)
|
||||
Base58.encode(bytes),
|
||||
3,
|
||||
appInfo,
|
||||
{ identifier, name: registeredName, service }
|
||||
);
|
||||
};
|
||||
|
||||
@ -335,9 +387,14 @@ export const publishData = async ({
|
||||
chunksSubmitted: 1,
|
||||
totalChunks: 1,
|
||||
processed: false,
|
||||
filename: filename || title || `${service}-${identifier || ''}`,
|
||||
});
|
||||
}
|
||||
return await reusablePost(uploadDataUrl, postBody);
|
||||
return await resuablePostRetry(uploadDataUrl, postBody, 3, appInfo, {
|
||||
identifier,
|
||||
name: registeredName,
|
||||
service,
|
||||
});
|
||||
}
|
||||
|
||||
const file = data;
|
||||
@ -364,6 +421,8 @@ export const publishData = async ({
|
||||
chunksSubmitted: 0,
|
||||
totalChunks,
|
||||
processed: false,
|
||||
filename:
|
||||
file?.name || filename || title || `${service}-${identifier || ''}`,
|
||||
});
|
||||
}
|
||||
for (let index = 0; index < totalChunks; index++) {
|
||||
@ -398,7 +457,7 @@ export const publishData = async ({
|
||||
headers: {},
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
if (!response?.ok) {
|
||||
const errorText = await response.text();
|
||||
throw new Error(`Finalize failed: ${errorText}`);
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ export const isRunningGateway = async ()=> {
|
||||
|
||||
case "PUBLISH_MULTIPLE_QDN_RESOURCES": {
|
||||
try {
|
||||
const res = await publishMultipleQDNResources(request.payload, event.source, isFromExtension);
|
||||
const res = await publishMultipleQDNResources(request.payload, event.source, isFromExtension, appInfo);
|
||||
event.source.postMessage({
|
||||
requestId: request.requestId,
|
||||
action: request.action,
|
||||
|
@ -1120,7 +1120,8 @@ export const checkArrrSyncStatus = async (seed) => {
|
||||
export const publishMultipleQDNResources = async (
|
||||
data: any,
|
||||
sender,
|
||||
isFromExtension
|
||||
isFromExtension,
|
||||
appInfo
|
||||
) => {
|
||||
const requiredFields = ['resources'];
|
||||
const missingFields: string[] = [];
|
||||
@ -1168,6 +1169,23 @@ export const publishMultipleQDNResources = async (
|
||||
);
|
||||
}
|
||||
|
||||
const totalFileSize = resources.reduce((acc, resource) => {
|
||||
const file = resource?.file;
|
||||
if (file && file?.size && !isNaN(file?.size)) {
|
||||
return acc + file.size;
|
||||
}
|
||||
return acc;
|
||||
}, 0);
|
||||
if (totalFileSize > 0) {
|
||||
const urlCheck = `/arbitrary/check/tmp?totalSize=${totalFileSize}`;
|
||||
|
||||
const checkEndpoint = await createEndpoint(urlCheck);
|
||||
const checkRes = await fetch(checkEndpoint);
|
||||
if (!checkRes.ok) {
|
||||
throw new Error('Not enough space on your hard drive');
|
||||
}
|
||||
}
|
||||
|
||||
const encrypt = data?.encrypt;
|
||||
|
||||
for (const resource of resources) {
|
||||
@ -1289,6 +1307,7 @@ export const publishMultipleQDNResources = async (
|
||||
throw new Error('User declined request');
|
||||
}
|
||||
let failedPublishesIdentifiers = [];
|
||||
const publishedResponses = [];
|
||||
for (const resource of resources) {
|
||||
try {
|
||||
const requiredFields = ['service'];
|
||||
@ -1389,30 +1408,28 @@ export const publishMultipleQDNResources = async (
|
||||
resource?.base64 || resource?.data64 || resourceEncrypt
|
||||
? 'base64'
|
||||
: 'file';
|
||||
await retryTransaction(
|
||||
publishData,
|
||||
[
|
||||
{
|
||||
const response = await publishData({
|
||||
apiVersion: 2,
|
||||
category,
|
||||
data: rawData,
|
||||
description,
|
||||
filename: filename,
|
||||
identifier: encodeURIComponent(identifier),
|
||||
registeredName: encodeURIComponent(resource?.name || name),
|
||||
service: service,
|
||||
identifier: encodeURIComponent(identifier),
|
||||
uploadType: dataType,
|
||||
filename: filename,
|
||||
title,
|
||||
description,
|
||||
category,
|
||||
tag1,
|
||||
tag2,
|
||||
tag3,
|
||||
tag4,
|
||||
tag5,
|
||||
apiVersion: 2,
|
||||
title,
|
||||
uploadType: dataType,
|
||||
withFee: true,
|
||||
},
|
||||
],
|
||||
true
|
||||
);
|
||||
appInfo,
|
||||
});
|
||||
if (response?.signature) {
|
||||
publishedResponses.push(response);
|
||||
}
|
||||
await new Promise((res) => {
|
||||
setTimeout(() => {
|
||||
res();
|
||||
@ -1454,7 +1471,7 @@ export const publishMultipleQDNResources = async (
|
||||
true
|
||||
);
|
||||
}
|
||||
return true;
|
||||
return publishedResponses;
|
||||
};
|
||||
|
||||
export const voteOnPoll = async (data, isFromExtension) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user