function dl(mainWindow, lang_path, base, dirname) {
	const electron = require('electron')
	const shell = electron.shell
	const fs = require('fs')
	const { download } = require('electron-dl')
	const BrowserWindow = electron.BrowserWindow
	const dialog = electron.dialog
	var updatewin = null
	var ipc = electron.ipcMain
	const app = electron.app
	const join = require('path').join
	ipc.on('update', function(e, x, y) {
		var platform = process.platform
		var bit = process.arch
		if (platform != 'others') {
			updatewin = new BrowserWindow({
				webPreferences: {
					webviewTag: false,
					nodeIntegration: false,
					contextIsolation: true,
					preload: join(dirname, 'js', 'platform', 'preload.js')
				},
				width: 600,
				height: 400,
				transparent: false, // ウィンドウの背景を透過
				frame: false, // 枠の無いウィンドウ
				resizable: false,
				show: false
			})
			var lang = fs.readFileSync(lang_path, 'utf8')
			updatewin.loadURL(base + lang + '/update.html')
			updatewin.webContents.once('dom-ready', () => {
				updatewin.show()
			 })
			return 'true'
		} else {
			return false
		}
	})
	//アプデDL
	ipc.on('download-btn', async (e, args) => {
		function dl(url, file, dir, e) {
			e.sender.webContents.send('mess', 'Start...')
			const opts = {
				directory: dir,
				filename: file,
				openFolderWhenDone: true,
				onProgress: function(event) {
					e.sender.webContents.send('prog', [event, args[2]])
				},
				saveAs: false
			}
			download(updatewin, url, opts)
				.then(dl => {
					e.sender.webContents.send('mess', 'ダウンロードが完了しました。')
					app.quit()
				})
				.catch(console.error)
		}
		var platform = process.platform
		var bit = process.arch
		var options = {
			title: 'Save',
			defaultPath: app.getPath('home') + '/' + args[1]
		}
		const file = await dialog.showSaveDialog(null, options)
		const savedFiles = file.filePath
		console.log(savedFiles)
		if (!savedFiles) {
			return false
		}
		if (platform == 'win32') {
			var m = savedFiles.match(/(.+)\\(.+)$/)
		} else {
			var m = savedFiles.match(/(.+)\/(.+)$/)
		}
		//console.log(m);
		if (isExistFile(savedFiles)) {
			fs.unlinkSync(savedFiles)
		}
		console.log(m)
		dl(args[0], m[2], m[1], e)
	})

	function isExistFile(file) {
		try {
			fs.statSync(file)
			return true
		} catch (err) {
			if (err.code === 'ENOENT') return false
		}
	}

	ipc.on('general-dl', (event, args) => {
		var name = ''
		var platform = process.platform
		var bit = process.arch
		const filename = args[0].match(/https:\/\/.+\/(.+\..+)$/)
		if (args[1] == '') {
			if (platform == 'win32') {
				var dir = app.getPath('home') + '\\Pictures\\TheDesk'
			} else if (platform == 'linux' || platform == 'darwin') {
				var dir = app.getPath('home') + '/Pictures/TheDesk'
			}
		} else {
			var dir = args[1]
		}
		const opts = {
			directory: dir,
			filename: name,
			openFolderWhenDone: false,
			onProgress: function(e) {
				event.sender.webContents.send('general-dl-prog', e)
			},
			saveAs: false
		}
		download(BrowserWindow.getFocusedWindow(), args[0], opts)
			.then(dl => {
				if(filename[1]) {
					if (platform == 'win32') {
						var name = dir + '\\' + filename[1]
					} else if (platform == 'linux' || platform == 'darwin') {
						var name = dir + '/' + filename[1]
					}
				} else {
					var name = dir
				}
				event.sender.webContents.send('general-dl-message', name)
			})
			.catch(console.error)
	})
	ipc.on('openFinder', (e, folder) => {
		console.log(folder)
		shell.showItemInFolder(folder)
	})
}
exports.dl = dl
