N/A

ODD·2025년 1월 15일
  1. 1GB 단위로 분할 압축
  2. 스크립트 F12 후 붙여넣기 (MAIL_HOST에 메일 사이트 주소 입력 ~~.kr)
  3. 파입업로드에 모든 파일 선택
  4. 업로드 시작
// ############################################################# SETTINGS ############################################################# //
const ACTION_DELAY = 10*1000;
const CHECK_DELAY = 30*1000;
const MAIL_TITLE = "file";
const MAIL_HOST = "???";

// ############################################################# ACTION ############################################################# //
function triggerFileDrop(file) {
    const iframeSenderDocument = document.querySelector("#mail-sender").contentWindow.document;
	
    // Create a DataTransfer object to hold the file
    const dataTransfer = new DataTransfer();
    
    // Add the single file to the DataTransfer object
    dataTransfer.items.add(file);
    
    // Create a dragenter event to simulate the start of the drag-and-drop operation
    const dragEnterEvent = new DragEvent('dragenter', {
        bubbles: true,
        cancelable: true,
        dataTransfer: dataTransfer
    });
    
    // Create a drop event
    const dropEvent = new DragEvent('drop', {
        bubbles: true,
        cancelable: true,
        dataTransfer: dataTransfer
    });
    
    // Dispatch dragenter and drop events
    const dropZone = iframeSenderDocument.querySelector(".attachments-dropzone");
    dropZone.dispatchEvent(dragEnterEvent);
    dropZone.dispatchEvent(dropEvent);
    
    // Set the title
    iframeSenderDocument.querySelector(".intxtD").value = MAIL_TITLE;
    
    // Click the send button
    iframeSenderDocument.querySelector(".buttonSet > a").click();
}

function isSendingComplete() {
	const iframeCheckerDocument = document.querySelector("#mail-checker").contentWindow.document; 
	if (!iframeCheckerDocument.querySelector('.progress')) return false;
	return iframeCheckerDocument.querySelector('.progress').textContent.includes('처리완료');
}

// Function to perform the delete action
function performDeleteAction() {
	const iframeCheckerDocument = document.querySelector("#mail-checker").contentWindow.document; 
	document.querySelector("#mail-checker").contentWindow.confirm = function () { return true; }
	let deleteTarget = iframeCheckerDocument.form_data_list.DATA_IDX[0]; 
	if (!deleteTarget) {
		deleteTarget = iframeCheckerDocument.form_data_list.DATA_IDX;
	}
	// sanity check for the title
	if (iframeCheckerDocument.querySelector(".b > td:nth-child(3) > span > a").title != MAIL_TITLE) {
		return;
	}
	deleteTarget.click();
	// Delete
	const deleteButton = iframeCheckerDocument.querySelector('a > img[src="images/kor/btn/btn_delete.gif"]').closest('a');
	deleteButton.click();
}

function setupPagesInIframes() {
	var a = document.querySelector("#mail-sender");
	var b = document.querySelector("#mail-checker");
	if (a) a.remove();
	if (b) b.remove();
	
	const iframeSender = document.createElement("iframe");
	iframeSender.id = "mail-sender";
	iframeSender.src = MAIL_HOST + "/data.Data.do?cmd=showDataWritePage&gubun=5";
	iframeSender.height = "500";
	iframeSender.width = "100%";
	document.body.appendChild(iframeSender);
	
	const iframeChecker = document.createElement("iframe");
	iframeChecker.id = "mail-checker";
	iframeChecker.src = MAIL_HOST + "/data.Data.do?cmd=showDataListPage&M_FLAG=I&DATA_FLAG=S&gubun=5";
	iframeChecker.height = "500";
	iframeChecker.width = "100%";
	document.body.appendChild(iframeChecker);
}

function uploadFiles(files, i, isSending) {
  if (i == files.length) {
	  console.log("End of the process.");
	  return; 
  }
	
  if (!isSending) {
	console.log("Start to send the file:", files[i].name);
	setTimeout(function () {
		setupPagesInIframes();
		setTimeout(function () {
			triggerFileDrop(files[i]);
			uploadFiles(files, i, true);
		}, ACTION_DELAY);
	}, ACTION_DELAY);
  } else {
	console.log("Sending", files[i].name, " in progress ...");
	document.querySelector("#mail-checker").contentWindow.location.reload();
	setTimeout(function() {
		document.querySelector("#mail-checker").contentWindow.document.querySelector(".data_se > a").click();
		setTimeout(function() {
			setTimeout(function () {
				if (isSendingComplete()) {
					console.log("Complete.");
					performDeleteAction();
					setTimeout(function () {
						uploadFiles(files, i+1, false); // send the next file
					}, ACTION_DELAY); // TODO: check empty
				} else {
					uploadFiles(files, i, true);
				}
			}, ACTION_DELAY);
		}, ACTION_DELAY);
	}, CHECK_DELAY);
  }
}

function startUpload() {
	let files = document.getElementById('fileInput').files
	uploadFiles(files, 0, false);
}

// ############################################################# SETUP ############################################################# //
// Empty the whole page
document.body.innerHTML = ""

// Create a file select and upload button
const startButton = document.createElement("div");
startButton.innerHTML = "<input type=\"file\" id=\"fileInput\" multiple=\"\"> <button type=\"button\" onclick=\"startUpload();\">업로드 시작</button>";
startButton.type = "button";
document.body.appendChild(startButton);

// Setup the mail sender and checker pages
setupPagesInIframes();

0개의 댓글