mirror of
https://github.com/earthjasonlin/zzz-signal-search-export.git
synced 2025-08-05 11:40:09 +08:00
90 lines
2.2 KiB
JavaScript
90 lines
2.2 KiB
JavaScript
const { app, ipcMain, dialog } = require('electron')
|
|
const fs = require('fs-extra')
|
|
const path = require('path')
|
|
const getData = require('./getData').getData
|
|
const { version } = require('../../package.json')
|
|
|
|
const getTimeString = () => {
|
|
return new Date().toLocaleString('sv').replace(/[- :]/g, '').slice(0, -2)
|
|
}
|
|
|
|
const formatDate = (date) => {
|
|
let y = date.getFullYear()
|
|
let m = `${date.getMonth()+1}`.padStart(2, '0')
|
|
let d = `${date.getDate()}`.padStart(2, '0')
|
|
return `${y}-${m}-${d} ${date.toLocaleString('zh-cn', { hour12: false }).slice(-8)}`
|
|
}
|
|
|
|
const fakeIdFn = () => {
|
|
let id = 1000000000000000000n
|
|
return () => {
|
|
id = id + 1n
|
|
return id.toString()
|
|
}
|
|
}
|
|
|
|
const shouldBeString = (value) => {
|
|
if (typeof value !== 'string') {
|
|
return ''
|
|
}
|
|
return value
|
|
}
|
|
|
|
const start = async () => {
|
|
const { dataMap, current } = await getData()
|
|
const data = dataMap.get(current)
|
|
if (!data.result.size) {
|
|
throw new Error('数据为空')
|
|
}
|
|
const fakeId = fakeIdFn()
|
|
const result = {
|
|
info: {
|
|
uid: data.uid,
|
|
lang: data.lang,
|
|
export_time: formatDate(new Date()),
|
|
export_timestamp: Date.now(),
|
|
export_app: 'genshin-wish-export',
|
|
export_app_version: `v${version}`,
|
|
uigf_version: 'v2.2'
|
|
},
|
|
list: []
|
|
}
|
|
const listTemp = []
|
|
for (let [type, arr] of data.result) {
|
|
arr.forEach(item => {
|
|
listTemp.push({
|
|
gacha_type: shouldBeString(item[4]) || type,
|
|
time: item[0],
|
|
timestamp: new Date(item[0]).getTime(),
|
|
name: item[1],
|
|
item_type: item[2],
|
|
rank_type: `${item[3]}`,
|
|
id: shouldBeString(item[5]) || '',
|
|
uigf_gacha_type: type
|
|
})
|
|
})
|
|
}
|
|
listTemp.sort((a, b) => a.timestamp - b.timestamp)
|
|
listTemp.forEach(item => {
|
|
delete item.timestamp
|
|
result.list.push({
|
|
...item,
|
|
id: item.id || fakeId()
|
|
})
|
|
})
|
|
const filePath = dialog.showSaveDialogSync({
|
|
defaultPath: path.join(app.getPath('downloads'), `UIGF_${data.uid}_${getTimeString()}`),
|
|
filters: [
|
|
{ name: 'JSON文件', extensions: ['json'] }
|
|
]
|
|
})
|
|
if (filePath) {
|
|
await fs.ensureFile(filePath)
|
|
await fs.writeFile(filePath, JSON.stringify(result))
|
|
}
|
|
}
|
|
|
|
ipcMain.handle('EXPORT_UIGF_JSON', async () => {
|
|
await start()
|
|
})
|