You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.9 KiB
142 lines
3.9 KiB
import { screen } from 'electron'; |
|
import * as fs from 'node:fs'; |
|
import path from 'node:path'; |
|
import { PEAR_FILES_PATH } from './constant'; |
|
|
|
function getScreenSize() { |
|
const { size, scaleFactor } = screen.getPrimaryDisplay(); |
|
return { |
|
width: size.width * scaleFactor, |
|
height: size.height * scaleFactor, |
|
}; |
|
} |
|
|
|
function downloadFile(fileInfo: any) { |
|
let { base64String, fileName, fileType = 'png' } = fileInfo; |
|
fileName || (fileName = Number(new Date())); |
|
const url = base64String.split(',')[1]; // 移除前缀,获取base64数据部分 |
|
const buffer = Buffer.from(url, 'base64'); // 将base64数据转化为buffer |
|
const imagePath = path.join(PEAR_FILES_PATH, `/ss/${fileName}.${fileType}`); // 下载路径 |
|
|
|
const directory = path.dirname(imagePath); // 获取文件目录 |
|
if (!fs.existsSync(directory)) { |
|
// 检查目录是否存在 |
|
fs.mkdirSync(directory, { recursive: true }); // 不存在则创建目录 |
|
} |
|
fs.writeFileSync(imagePath, buffer); // 将buffer写入本地文件 |
|
} |
|
|
|
function saveFile(fileInfo: any) { |
|
let { base64String, fileName, fileType = 'png' } = fileInfo; |
|
fileName || (fileName = Number(new Date())); |
|
const url = base64String.split(',')[1]; // 移除前缀,获取base64数据部分 |
|
const buffer = Buffer.from(url, 'base64'); // 将base64数据转化为buffer |
|
const filePath = path.join(PEAR_FILES_PATH, `/ss/${fileName}.${fileType}`); // 下载路径 |
|
|
|
const directory = path.dirname(filePath); // 获取文件目录 |
|
if (!fs.existsSync(directory)) { |
|
// 检查目录是否存在 |
|
fs.mkdirSync(directory, { recursive: true }); // 不存在则创建目录 |
|
} |
|
fs.writeFileSync(filePath, buffer); // 将buffer写入本地文件 |
|
} |
|
|
|
function getImgsByImgUrl(imgUrl: string) { |
|
const directoryPath = path.dirname(imgUrl); |
|
const files = fs.readdirSync(directoryPath); // 读取目录内容 |
|
let imgs: any[] = []; |
|
let index = 0; |
|
let currentIndex = 0; |
|
files.forEach((file) => { |
|
const filePath = path.join(directoryPath, file); |
|
|
|
if (isImageFile(filePath)) { |
|
filePath == imgUrl && (currentIndex = index); |
|
imgs.push({ url: `pearrec:///${filePath}`, index }); |
|
index++; |
|
} |
|
}); |
|
return { imgs, currentIndex }; |
|
} |
|
|
|
function isImageFile(filePath: string): boolean { |
|
const ext = path.extname(filePath).toLowerCase(); |
|
return [ |
|
'.jpg', |
|
'.jpeg', |
|
'.jfif', |
|
'.pjpeg', |
|
'.pjp', |
|
'.png', |
|
'apng', |
|
'.gif', |
|
'.bmp', |
|
'.avif', |
|
'.webp', |
|
'.ico', |
|
].includes(ext); |
|
} |
|
|
|
function getAudiosByAudioUrl(audioUrl: string) { |
|
const directoryPath = path.dirname(audioUrl); |
|
const files = fs.readdirSync(directoryPath); // 读取目录内容 |
|
let audios: any[] = []; |
|
let index = 0; |
|
files.forEach((file) => { |
|
const filePath = path.join(directoryPath, file); |
|
if (isAudioFile(filePath)) { |
|
const fileName = path.basename(filePath); |
|
if (filePath == audioUrl) { |
|
audios.unshift({ |
|
url: `pearrec:///${filePath}`, |
|
name: fileName, |
|
cover: './imgs/music.png', |
|
}); |
|
} else { |
|
audios.push({ |
|
url: `pearrec:///${filePath}`, |
|
name: fileName, |
|
cover: './imgs/music.png', |
|
}); |
|
} |
|
index++; |
|
} |
|
}); |
|
return audios; |
|
} |
|
|
|
function isAudioFile(filePath: string): boolean { |
|
const ext = path.extname(filePath).toLowerCase(); |
|
return [ |
|
'.mp3', |
|
'.wav', |
|
'.aac', |
|
'.ogg', |
|
'.flac', |
|
'.aiff', |
|
'aif', |
|
'.m4a', |
|
'.alac', |
|
'.ac3', |
|
].includes(ext); |
|
} |
|
|
|
function readDirectoryVideo(filePath: string) { |
|
filePath = filePath.replace(/\\/g, '/'); |
|
return filePath && `pearrec:///${filePath}`; |
|
} |
|
|
|
function readDirectoryImg(filePath: string) { |
|
filePath = filePath.replace(/\\/g, '/'); |
|
return filePath && `pearrec:///${filePath}`; |
|
} |
|
|
|
export { |
|
downloadFile, |
|
getAudiosByAudioUrl, |
|
getImgsByImgUrl, |
|
getScreenSize, |
|
readDirectoryImg, |
|
readDirectoryVideo, |
|
saveFile, |
|
};
|
|
|