Skip to content

Commit 4b01440

Browse files
committed
New: Custom name in image saving function
1 parent b14a26e commit 4b01440

File tree

2 files changed

+90
-35
lines changed

2 files changed

+90
-35
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1212

1313
## [v1.3.1](https://github.com/ollm/OpenComic/releases/tag/v1.3.1) (05-10-2024)
1414

15+
##### 🚀 New Features
16+
17+
- Custom name in image saving function
18+
1519
##### 🐛 Bug Fixes
1620

1721
- Dependency file-type not working [`7730e46`](https://github.com/ollm/OpenComic/commit/7730e46c8eb9e43196e50bd557f03132968eb534)
1822
- Open file location not working in some cases [`a4bc25b`](https://github.com/ollm/OpenComic/commit/a4bc25b3005c097a7852a96c8c41fd866b28ed1c)
23+
- Save image not saving the correct page in manga mode [`b14a26e`](https://github.com/ollm/OpenComic/commit/b14a26eacdc77d37cdeb578fc203438058c7c5e2)
1924

2025
## [v1.3.0](https://github.com/ollm/OpenComic/releases/tag/v1.3.0) (04-10-2024)
2126

scripts/reading/context-menu.js

+85-35
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,33 @@ function saveImage()
7777
saveAllImages(currentIndex - 1);
7878
}
7979

80+
function generateFileName(path, page, leadingZeros, fileName)
81+
{
82+
// Parent folder name
83+
let parentFolderName = p.dirname(p.dirname(path));
84+
let ext1 = p.extname(parentFolderName);
85+
parentFolderName = p.basename(parentFolderName, (ext1 && ext1.length < 6 ? ext1 : ''));
86+
87+
// Current file/folder name
88+
let folderName = p.dirname(path);
89+
let ext2 = p.extname(folderName);
90+
folderName = p.basename(folderName, (ext2 && ext2.length < 6 ? ext2 : ''));
91+
92+
const extension = p.extname(path);
93+
const imageName = p.basename(path, extension);
94+
95+
fileName = fileName.replace(/\[parentFolder(?:Name)?\]/, parentFolderName);
96+
fileName = fileName.replace(/\[folder(?:Name)?\]/, folderName);
97+
fileName = fileName.replace(/\[image(?:Name)?\]/, imageName);
98+
fileName = fileName.replace(/\[page\]/, String(page).padStart(leadingZeros, '0'));
99+
fileName = fileName.replace(/\[pageInt\]/, page);
100+
101+
let ext3 = p.extname(fileName);
102+
if(!ext3 || ext3.length >= 6) fileName += extension;
103+
104+
return fileName;
105+
}
106+
80107
function saveAllImages(index = false)
81108
{
82109
const images = reading.images();
@@ -88,53 +115,76 @@ function saveAllImages(index = false)
88115
index = (reading.indexNum() - index) - 1;
89116
}
90117

91-
electronRemote.dialog.showOpenDialog({properties: ['openDirectory', 'createDirectory'], buttonLabel: language.buttons.save}).then(async function(files) {
118+
const saveDialog = macosMAS ? saveDialogDirectory : saveDialogFile;
92119

93-
if(files.filePaths && files.filePaths[0] && fs.statSync(files.filePaths[0]).isDirectory())
120+
saveDialog(async function(saveTo, fileName){
121+
122+
const toSave = [];
123+
let highestPage = 0;
124+
125+
for(let key in images)
94126
{
95-
const saveTo = files.filePaths[0];
96-
const toSave = [];
127+
const path = images[key].path;
97128

98-
for(let key in images)
99-
{
100-
const path = images[key].path;
129+
if(index === false || index == imagesData[key].position)
130+
toSave.push({path: path, page: key});
101131

102-
if(index === false || index == imagesData[key].position)
103-
toSave.push({path: path});
104-
}
132+
if(+key > highestPage)
133+
highestPage = +key;
134+
}
105135

106-
let first = '';
136+
const leadingZeros = String(highestPage).length;
137+
let first = '';
138+
139+
if(toSave.length)
140+
{
141+
let file = fileManager.file(p.dirname(toSave[0].path));
142+
await file.makeAvailable(toSave);
143+
file.destroy();
107144

108-
if(toSave.length)
145+
for(let i = 0, len = toSave.length; i < len; i++)
109146
{
110-
let file = fileManager.file(p.dirname(toSave[0].path));
111-
await file.makeAvailable(toSave);
112-
file.destroy();
147+
const image = toSave[i];
148+
const realPath = fileManager.realPath(image.path);
149+
const saveImageTo = p.join(saveTo, generateFileName(image.path, image.page, leadingZeros, fileName));
150+
if(first === '') first = saveImageTo;
113151

152+
if(!fs.existsSync(saveImageTo))
153+
fs.copyFileSync(realPath, saveImageTo);
154+
}
155+
}
114156

115-
for(let i = 0, len = toSave.length; i < len; i++)
157+
events.snackbar({
158+
key: 'saveAllImages',
159+
text: language.global.contextMenu.saveImagesMessage,
160+
duration: 6,
161+
buttons: [
116162
{
117-
const realPath = fileManager.realPath(toSave[i].path);
118-
const saveImageTo = p.join(saveTo, p.basename(realPath));
119-
if(first === '') first = p.basename(realPath);
163+
text: language.global.open,
164+
function: 'electron.shell.showItemInFolder(\''+escapeQuotes(escapeBackSlash(first), 'simples')+'\');',
165+
},
166+
],
167+
});
120168

121-
if(!fs.existsSync(saveImageTo))
122-
fs.copyFileSync(realPath, saveImageTo);
123-
}
124-
}
169+
});
170+
}
125171

126-
events.snackbar({
127-
key: 'saveAllImages',
128-
text: language.global.contextMenu.saveImagesMessage,
129-
duration: 6,
130-
buttons: [
131-
{
132-
text: language.global.open,
133-
function: 'electron.shell.showItemInFolder(\''+escapeQuotes(escapeBackSlash(p.join(saveTo, first)), 'simples')+'\');',
134-
},
135-
],
136-
});
137-
}
172+
function saveDialogFile(callback)
173+
{
174+
electronRemote.dialog.showSaveDialog({properties: ['openDirectory', 'createDirectory'], buttonLabel: language.buttons.save, defaultPath: '[parentFolder] - [folder] - [image] - [page]'}).then(function(result) {
175+
176+
if(!result.canceled && result.filePath)
177+
callback(p.dirname(result.filePath), p.basename(result.filePath));
178+
179+
});
180+
}
181+
182+
function saveDialogDirectory(callback)
183+
{
184+
electronRemote.dialog.showOpenDialog({properties: ['openDirectory', 'createDirectory'], buttonLabel: language.buttons.save}).then(function(files) {
185+
186+
if(files.filePaths && files.filePaths[0] && fs.statSync(files.filePaths[0]).isDirectory())
187+
callback(files.filePaths[0], '[folder] - [image] - [page]');
138188

139189
});
140190
}

0 commit comments

Comments
 (0)