|
|
|
|
|
async function postJson(url, data) { |
|
|
data['password'] = getPassword() |
|
|
const response = await fetch(url, { |
|
|
method: 'POST', |
|
|
headers: { |
|
|
'Content-Type': 'application/json' |
|
|
}, |
|
|
body: JSON.stringify(data) |
|
|
}) |
|
|
return await response.json() |
|
|
} |
|
|
|
|
|
document.getElementById('pass-login').addEventListener('click', async () => { |
|
|
const password = document.getElementById('auth-pass').value |
|
|
const data = { 'pass': password } |
|
|
const json = await postJson('/api/checkPassword', data) |
|
|
if (json.status === 'ok') { |
|
|
localStorage.setItem('password', password) |
|
|
alert('Logged In Successfully') |
|
|
window.location.reload() |
|
|
} |
|
|
else { |
|
|
alert('Wrong Password') |
|
|
} |
|
|
|
|
|
}) |
|
|
|
|
|
async function getCurrentDirectory() { |
|
|
let path = getCurrentPath() |
|
|
if (path === 'redirect') { |
|
|
return |
|
|
} |
|
|
try { |
|
|
const auth = getFolderAuthFromPath() |
|
|
console.log(path) |
|
|
|
|
|
const data = { 'path': path, 'auth': auth } |
|
|
const json = await postJson('/api/getDirectory', data) |
|
|
|
|
|
if (json.status === 'ok') { |
|
|
if (getCurrentPath().startsWith('/share')) { |
|
|
const sections = document.querySelector('.sidebar-menu').getElementsByTagName('a') |
|
|
console.log(path) |
|
|
|
|
|
if (removeSlash(json['auth_home_path']) === removeSlash(path.split('_')[1])) { |
|
|
sections[0].setAttribute('class', 'selected-item') |
|
|
|
|
|
} else { |
|
|
sections[0].setAttribute('class', 'unselected-item') |
|
|
} |
|
|
sections[0].href = `/?path=/share_${removeSlash(json['auth_home_path'])}&auth=${auth}` |
|
|
console.log(`/?path=/share_${removeSlash(json['auth_home_path'])}&auth=${auth}`) |
|
|
} |
|
|
|
|
|
console.log(json) |
|
|
showDirectory(json['data']) |
|
|
} else { |
|
|
alert('404 Current Directory Not Found') |
|
|
} |
|
|
} |
|
|
catch (err) { |
|
|
console.log(err) |
|
|
alert('404 Current Directory Not Found') |
|
|
} |
|
|
} |
|
|
|
|
|
async function createNewFolder() { |
|
|
const folderName = document.getElementById('new-folder-name').value; |
|
|
const path = getCurrentPath() |
|
|
if (path === 'redirect') { |
|
|
return |
|
|
} |
|
|
if (folderName.length > 0) { |
|
|
const data = { |
|
|
'name': folderName, |
|
|
'path': path |
|
|
} |
|
|
try { |
|
|
const json = await postJson('/api/createNewFolder', data) |
|
|
|
|
|
if (json.status === 'ok') { |
|
|
window.location.reload(); |
|
|
} else { |
|
|
alert(json.status) |
|
|
} |
|
|
} |
|
|
catch (err) { |
|
|
alert('Error Creating Folder') |
|
|
} |
|
|
} else { |
|
|
alert('Folder Name Cannot Be Empty') |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
async function getFolderShareAuth(path) { |
|
|
const data = { 'path': path } |
|
|
const json = await postJson('/api/getFolderShareAuth', data) |
|
|
if (json.status === 'ok') { |
|
|
return json.auth |
|
|
} else { |
|
|
alert('Error Getting Folder Share Auth') |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const MAX_FILE_SIZE = MAX_FILE_SIZE__SDGJDG |
|
|
|
|
|
const fileInput = document.getElementById('fileInput'); |
|
|
const progressBar = document.getElementById('progress-bar'); |
|
|
const cancelButton = document.getElementById('cancel-file-upload'); |
|
|
const uploadPercent = document.getElementById('upload-percent'); |
|
|
let uploadRequest = null; |
|
|
let uploadStep = 0; |
|
|
let uploadID = null; |
|
|
|
|
|
fileInput.addEventListener('change', async (e) => { |
|
|
const file = fileInput.files[0]; |
|
|
|
|
|
if (file.size > MAX_FILE_SIZE) { |
|
|
alert(`File size exceeds ${(MAX_FILE_SIZE / (1024 * 1024 * 1024)).toFixed(2)} GB limit`); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
document.getElementById('bg-blur').style.zIndex = '2'; |
|
|
document.getElementById('bg-blur').style.opacity = '0.1'; |
|
|
document.getElementById('file-uploader').style.zIndex = '3'; |
|
|
document.getElementById('file-uploader').style.opacity = '1'; |
|
|
|
|
|
document.getElementById('upload-filename').innerText = 'Filename: ' + file.name; |
|
|
document.getElementById('upload-filesize').innerText = 'Filesize: ' + (file.size / (1024 * 1024)).toFixed(2) + ' MB'; |
|
|
document.getElementById('upload-status').innerText = 'Status: Uploading To Backend Server'; |
|
|
|
|
|
|
|
|
const formData = new FormData(); |
|
|
formData.append('file', file); |
|
|
formData.append('path', getCurrentPath()); |
|
|
formData.append('password', getPassword()); |
|
|
const id = getRandomId(); |
|
|
formData.append('id', id); |
|
|
formData.append('total_size', file.size); |
|
|
|
|
|
uploadStep = 1; |
|
|
uploadRequest = new XMLHttpRequest(); |
|
|
uploadRequest.open('POST', '/api/upload', true); |
|
|
|
|
|
uploadRequest.upload.addEventListener('progress', (e) => { |
|
|
if (e.lengthComputable) { |
|
|
const percentComplete = (e.loaded / e.total) * 100; |
|
|
progressBar.style.width = percentComplete + '%'; |
|
|
uploadPercent.innerText = 'Progress : ' + percentComplete.toFixed(2) + '%'; |
|
|
} |
|
|
}); |
|
|
|
|
|
uploadRequest.upload.addEventListener('load', async () => { |
|
|
await updateSaveProgress(id) |
|
|
}); |
|
|
|
|
|
uploadRequest.upload.addEventListener('error', () => { |
|
|
alert('Upload failed'); |
|
|
window.location.reload(); |
|
|
}); |
|
|
|
|
|
uploadRequest.send(formData); |
|
|
}); |
|
|
|
|
|
cancelButton.addEventListener('click', () => { |
|
|
if (uploadStep === 1) { |
|
|
uploadRequest.abort(); |
|
|
} else if (uploadStep === 2) { |
|
|
const data = { 'id': uploadID } |
|
|
postJson('/api/cancelUpload', data) |
|
|
} |
|
|
alert('Upload canceled'); |
|
|
window.location.reload(); |
|
|
}); |
|
|
|
|
|
async function updateSaveProgress(id) { |
|
|
console.log('save progress') |
|
|
progressBar.style.width = '0%'; |
|
|
uploadPercent.innerText = 'Progress : 0%' |
|
|
document.getElementById('upload-status').innerText = 'Status: Processing File On Backend Server'; |
|
|
|
|
|
const interval = setInterval(async () => { |
|
|
const response = await postJson('/api/getSaveProgress', { 'id': id }) |
|
|
const data = response['data'] |
|
|
|
|
|
if (data[0] === 'running') { |
|
|
const current = data[1]; |
|
|
const total = data[2]; |
|
|
document.getElementById('upload-filesize').innerText = 'Filesize: ' + (total / (1024 * 1024)).toFixed(2) + ' MB'; |
|
|
|
|
|
const percentComplete = (current / total) * 100; |
|
|
progressBar.style.width = percentComplete + '%'; |
|
|
uploadPercent.innerText = 'Progress : ' + percentComplete.toFixed(2) + '%'; |
|
|
} |
|
|
else if (data[0] === 'completed') { |
|
|
clearInterval(interval); |
|
|
uploadPercent.innerText = 'Progress : 100%' |
|
|
progressBar.style.width = '100%'; |
|
|
|
|
|
await handleUpload2(id) |
|
|
} |
|
|
}, 3000) |
|
|
|
|
|
} |
|
|
|
|
|
async function handleUpload2(id) { |
|
|
console.log(id) |
|
|
document.getElementById('upload-status').innerText = 'Status: Uploading To Telegram Server'; |
|
|
progressBar.style.width = '0%'; |
|
|
uploadPercent.innerText = 'Progress : 0%'; |
|
|
|
|
|
const interval = setInterval(async () => { |
|
|
const response = await postJson('/api/getUploadProgress', { 'id': id }) |
|
|
const data = response['data'] |
|
|
|
|
|
if (data[0] === 'running') { |
|
|
const current = data[1]; |
|
|
const total = data[2]; |
|
|
document.getElementById('upload-filesize').innerText = 'Filesize: ' + (total / (1024 * 1024)).toFixed(2) + ' MB'; |
|
|
|
|
|
let percentComplete |
|
|
if (total === 0) { |
|
|
percentComplete = 0 |
|
|
} |
|
|
else { |
|
|
percentComplete = (current / total) * 100; |
|
|
} |
|
|
progressBar.style.width = percentComplete + '%'; |
|
|
uploadPercent.innerText = 'Progress : ' + percentComplete.toFixed(2) + '%'; |
|
|
} |
|
|
else if (data[0] === 'completed') { |
|
|
clearInterval(interval); |
|
|
alert('Upload Completed') |
|
|
window.location.reload(); |
|
|
} |
|
|
}, 3000) |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async function get_file_info_from_url(url) { |
|
|
const data = { 'url': url } |
|
|
const json = await postJson('/api/getFileInfoFromUrl', data) |
|
|
if (json.status === 'ok') { |
|
|
return json.data |
|
|
} else { |
|
|
throw new Error(`Error Getting File Info : ${json.status}`) |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
async function start_file_download_from_url(url, filename, singleThreaded) { |
|
|
const data = { 'url': url, 'path': getCurrentPath(), 'filename': filename, 'singleThreaded': singleThreaded } |
|
|
const json = await postJson('/api/startFileDownloadFromUrl', data) |
|
|
if (json.status === 'ok') { |
|
|
return json.id |
|
|
} else { |
|
|
throw new Error(`Error Starting File Download : ${json.status}`) |
|
|
} |
|
|
} |
|
|
|
|
|
async function download_progress_updater(id, file_name, file_size) { |
|
|
uploadID = id; |
|
|
uploadStep = 2 |
|
|
|
|
|
document.getElementById('bg-blur').style.zIndex = '2'; |
|
|
document.getElementById('bg-blur').style.opacity = '0.1'; |
|
|
document.getElementById('file-uploader').style.zIndex = '3'; |
|
|
document.getElementById('file-uploader').style.opacity = '1'; |
|
|
|
|
|
document.getElementById('upload-filename').innerText = 'Filename: ' + file_name; |
|
|
document.getElementById('upload-filesize').innerText = 'Filesize: ' + (file_size / (1024 * 1024)).toFixed(2) + ' MB'; |
|
|
|
|
|
const interval = setInterval(async () => { |
|
|
const response = await postJson('/api/getFileDownloadProgress', { 'id': id }) |
|
|
const data = response['data'] |
|
|
|
|
|
if (data[0] === 'error') { |
|
|
clearInterval(interval); |
|
|
alert('Failed To Download File From URL To Backend Server') |
|
|
window.location.reload() |
|
|
} |
|
|
else if (data[0] === 'completed') { |
|
|
clearInterval(interval); |
|
|
uploadPercent.innerText = 'Progress : 100%' |
|
|
progressBar.style.width = '100%'; |
|
|
await handleUpload2(id) |
|
|
} |
|
|
else { |
|
|
const current = data[1]; |
|
|
const total = data[2]; |
|
|
|
|
|
const percentComplete = (current / total) * 100; |
|
|
progressBar.style.width = percentComplete + '%'; |
|
|
uploadPercent.innerText = 'Progress : ' + percentComplete.toFixed(2) + '%'; |
|
|
|
|
|
if (data[0] === 'Downloading') { |
|
|
document.getElementById('upload-status').innerText = 'Status: Downloading File From Url To Backend Server'; |
|
|
} |
|
|
else { |
|
|
document.getElementById('upload-status').innerText = `Status: ${data[0]}`; |
|
|
} |
|
|
} |
|
|
}, 3000) |
|
|
} |
|
|
|
|
|
|
|
|
async function Start_URL_Upload() { |
|
|
try { |
|
|
document.getElementById('new-url-upload').style.opacity = '0'; |
|
|
setTimeout(() => { |
|
|
document.getElementById('new-url-upload').style.zIndex = '-1'; |
|
|
}, 300) |
|
|
|
|
|
const file_url = document.getElementById('remote-url').value |
|
|
const singleThreaded = document.getElementById('single-threaded-toggle').checked |
|
|
|
|
|
const file_info = await get_file_info_from_url(file_url) |
|
|
const file_name = file_info.file_name |
|
|
const file_size = file_info.file_size |
|
|
|
|
|
if (file_size > MAX_FILE_SIZE) { |
|
|
throw new Error(`File size exceeds ${(MAX_FILE_SIZE / (1024 * 1024 * 1024)).toFixed(2)} GB limit`) |
|
|
} |
|
|
|
|
|
const id = await start_file_download_from_url(file_url, file_name, singleThreaded) |
|
|
|
|
|
await download_progress_updater(id, file_name, file_size) |
|
|
|
|
|
} |
|
|
catch (err) { |
|
|
alert(err) |
|
|
window.location.reload() |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|