Skip to content

Commit a5cf998

Browse files
committed
New: Option to use the first image in the folder/file as a poster
1 parent 40ae6d1 commit a5cf998

22 files changed

+114
-12
lines changed

CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
99
##### 🚀 New Features
1010

1111
- Preliminary support for the `EPUB` format (Alpha) [`24b6494`](https://github.com/ollm/OpenComic/commit/24b6494c00f35dcb5fcea4f2e4cb713a8a130cd9)
12+
- Option to use the first image in the folder/file as a poster
1213

1314
##### 🐛 Bug Fixes
1415

1516
- Remove button in library not showing [`24ba9ba`](https://github.com/ollm/OpenComic/commit/24ba9ba787130c8f92b098cfefefdb7d37d18549)
16-
- Window buttons not showing in About OpenComic (macOS only)
17+
- Window buttons not showing in About OpenComic (macOS only) [`40ae6d1`](https://github.com/ollm/OpenComic/commit/40ae6d1caa80bb404d4986af1d0853e2bbec5eed)
1718

1819
## [v1.0.0-beta.4](https://github.com/ollm/OpenComic/releases/tag/v1.0.0-beta.4) (17-10-2023)
1920

languages/ca.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "Navegación",
180+
"folders": "Navegació (Carpetes)",
181+
"files": "Navegació (Fitxers)",
180182
"ignoreSingleFoldersLibrary": "Ignorar carpetes individuals (S'obren automàticament)",
181183
"whenOpenFolderContinueReading": "Obrir directament en continuar llegint en lloc de la llista de fitxers",
184+
"useTheFirstImageAsPoster": "Utilitzar la primera imatge com a pòster (Només si no n'hi ha cap actualment)",
182185
"showFullPathLibrary": "Mostrar la ruta completa a l'obrir els còmics de la biblioteca",
183186
"showFullPathOpened": "Mostrar la ruta completa a l'obrir un arxiu o carpeta"
184187
},

languages/cs.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

languages/de.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

languages/en.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "Navigation",
180+
"folders": "Navigation (Folders)",
181+
"files": "Navigation (Files)",
180182
"ignoreSingleFoldersLibrary": "Ignore single folders (Open automatically)",
181183
"whenOpenFolderContinueReading": "Open directly in continue reading instead of the file list",
184+
"useTheFirstImageAsPoster": "Use the first image as a poster (Only if there is none currently)",
182185
"showFullPathLibrary": "Show full path when opening library comics",
183186
"showFullPathOpened": "Show full path when opening a file or folder"
184187
},

languages/es.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "Navegación",
180+
"folders": "Navegación (Carpetas)",
181+
"files": "Navegación (Archivos)",
180182
"ignoreSingleFoldersLibrary": "Ignorar carpetas individuales (Se abren automáticamente)",
181183
"whenOpenFolderContinueReading": "Abrir directamente en continuar leyendo en lugar de la lista de archivos",
184+
"useTheFirstImageAsPoster": "Utilizar la primera imagen como póster (Solo si no hay ninguno actualmente)",
182185
"showFullPathLibrary": "Mostrar la ruta completa al abrir los comics de la biblioteca",
183186
"showFullPathOpened": "Mostrar la ruta completa al abrir un archivo o carpeta"
184187
},

languages/fr.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

languages/hu.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

languages/it.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

languages/ja.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

languages/pt-br.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

languages/ru.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

languages/th.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "การนำทาง",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "ละเว้นโฟลเดอร์เดี่ยว (เปิดอัตโนมัติ)",
181183
"whenOpenFolderContinueReading": "เปิดไปอ่านต่อโดยตรงแทนที่จะเป็นรายการไฟล์",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "แสดงที่ตั้งแบบเต็มเมื่อเปิดห้องสมุดคอมมิกส์",
183186
"showFullPathOpened": "แสดงที่ตั้งแบบเต็มเมื่อเปิดไฟล์หรือโฟลเดอร์"
184187
},

languages/vi.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

languages/zh-hans.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "导航",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "忽略单个文件夹(自动打开)",
181183
"whenOpenFolderContinueReading": "直接在继续阅读中打开而不是文件列表",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "打开库时显示漫画完整路径",
183186
"showFullPathOpened": "打开文件或文件夹时显示完整路径"
184187
},

languages/zh-hant.json

+3
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@
177177
},
178178
"navigation": {
179179
"main": "",
180+
"folders": "",
181+
"files": "",
180182
"ignoreSingleFoldersLibrary": "",
181183
"whenOpenFolderContinueReading": "",
184+
"useTheFirstImageAsPoster": "",
182185
"showFullPathLibrary": "",
183186
"showFullPathOpened": ""
184187
},

scripts/dom.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1278,15 +1278,15 @@ async function comicContextMenu(path, fromIndex = true, folder = false, gamepad
12781278
let images = await file.images(2, false, true);
12791279
file.destroy();
12801280

1281-
poster = !Array.isArray(images) ? images.path : false;
1281+
let poster = !Array.isArray(images) ? images : false;
12821282

1283-
addPoster.setAttribute('onclick', 'dom.addPoster('+(fromIndex ? 'true' : 'false')+', \''+escapeQuotes(escapeBackSlash(path), 'simples')+'\', '+(poster ? '\''+escapeQuotes(escapeBackSlash(poster), 'simples')+'\'' : 'false')+');');
1283+
addPoster.setAttribute('onclick', 'dom.addPoster('+(fromIndex ? 'true' : 'false')+', \''+escapeQuotes(escapeBackSlash(path), 'simples')+'\', '+(poster ? '\''+escapeQuotes(escapeBackSlash(poster.path), 'simples')+'\'' : 'false')+');');
12841284
addPoster.querySelector('span').innerHTML = poster ? language.global.contextMenu.changePoster : language.global.contextMenu.addPoster;
12851285

1286-
if(poster)
1286+
if(poster && !poster.fromFirstImageAsPoster)
12871287
{
12881288
deletePoster.style.display = 'block';
1289-
deletePoster.setAttribute('onclick', 'dom.deletePoster(\''+escapeQuotes(escapeBackSlash(poster), 'simples')+'\');');
1289+
deletePoster.setAttribute('onclick', 'dom.deletePoster(\''+escapeQuotes(escapeBackSlash(poster.path), 'simples')+'\');');
12901290
}
12911291
else
12921292
{

scripts/file-manager.js

+31-1
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,8 @@ var file = function(path) {
382382
let regex = new RegExp('^(?:[\-\s0-9+])?(?:'+pregQuote(name)+(inside ? '|cover|default|folder|series|poster' : '')+')(?:[\-\s0-9+])?\.[a-z0-9]+$');
383383
let poster = false;
384384

385-
for(let i = 0, len = files.length; i < len; i++)
385+
let len = files.length
386+
for(let i = 0; i < len; i++)
386387
{
387388
let file = files[i];
388389

@@ -403,6 +404,35 @@ var file = function(path) {
403404
}
404405
}
405406

407+
if(!poster && inside && len && (config.useTheFirstImageAsPosterInFolders || config.useTheFirstImageAsPosterInFiles))
408+
{
409+
let _containsCompressed = containsCompressed(path);
410+
411+
if((!_containsCompressed && config.useTheFirstImageAsPosterInFolders) || (_containsCompressed && config.useTheFirstImageAsPosterInFiles))
412+
{
413+
for(let i = 0; i < len; i++)
414+
{
415+
let file = files[i];
416+
417+
if(!file.folder && !file.compressed)
418+
{
419+
if(inArray(mime.getType(file.path), compatibleMime))
420+
{
421+
file.sha = sha1(file.path);
422+
file.fromFirstImageAsPoster = sha1(file.path);
423+
poster = file;
424+
425+
break;
426+
}
427+
}
428+
else
429+
{
430+
break;
431+
}
432+
}
433+
}
434+
}
435+
406436
return poster;
407437
}
408438

scripts/settings.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,6 @@ function setIgnoreSingleFoldersLibrary(value)
324324
function setWhenOpenFolderContinueReading(value)
325325
{
326326
storage.updateVar('config', 'whenOpenFolderContinueReading', value);
327-
328327
}
329328

330329
function setShowFullPathLibrary(value)
@@ -372,9 +371,14 @@ function setCheckPreReleases(value)
372371
storage.updateVar('config', 'checkPreReleases', value);
373372
}
374373

374+
function set(key, value)
375+
{
376+
storage.updateVar('config', key, value);
377+
}
375378

376379
module.exports = {
377380
start: start,
381+
set: set,
378382
setMaxMargin: setMaxMargin,
379383
setGlobalZoom: setGlobalZoom,
380384
setMoveZoomWithMouse: setMoveZoomWithMouse,

scripts/storage.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var changes = 59; // Update this if readingPagesConfig is updated
1+
var changes = 60; // Update this if readingPagesConfig is updated
22

33
var readingPagesConfig = {
44
readingConfigName: '',
@@ -113,6 +113,8 @@ var storageDefault = {
113113
startOnStartup: false,
114114
ignoreSingleFoldersLibrary: true,
115115
whenOpenFolderContinueReading: false,
116+
useTheFirstImageAsPosterInFolders: false,
117+
useTheFirstImageAsPosterInFiles: true,
116118
renderMaxWidth: 12000,
117119
checkReleases: true,
118120
checkPreReleases: true,

templates/settings.content.right.html

+20
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,26 @@ <h2 class="headline-small">{{language.settings.navigation.main}}</h2>
123123
</div>
124124
</div>
125125

126+
<h2 class="headline-small">{{language.settings.navigation.folders}}</h2>
127+
128+
<div class="menu-simple-text gamepad-item">
129+
<span>{{language.settings.navigation.useTheFirstImageAsPoster}}</span>
130+
<div class="switch{{#if config.useTheFirstImageAsPosterInFolders}} a{{/if}}" on="settings.set('useTheFirstImageAsPosterInFolders', true)" off="settings.set('useTheFirstImageAsPosterInFolders', false)">
131+
<div></div>
132+
<svg viewBox="0 0 52 32"><path d="M 8,0 C 3.58,0 0,3.58 0,8 0,12.42 3.58,16 8,16 8,16 8,16 8,16 12.42,16 16,12.42 16,8 16,3.58 12.42,0 8,0 8,0 8,0 8,0 Z"></path></svg>
133+
</div>
134+
</div>
135+
136+
<h2 class="headline-small">{{language.settings.navigation.files}}</h2>
137+
138+
<div class="menu-simple-text gamepad-item">
139+
<span>{{language.settings.navigation.useTheFirstImageAsPoster}}</span>
140+
<div class="switch{{#if config.useTheFirstImageAsPosterInFiles}} a{{/if}}" on="settings.set('useTheFirstImageAsPosterInFiles', true)" off="settings.set('useTheFirstImageAsPosterInFiles', false)">
141+
<div></div>
142+
<svg viewBox="0 0 52 32"><path d="M 8,0 C 3.58,0 0,3.58 0,8 0,12.42 3.58,16 8,16 8,16 8,16 8,16 12.42,16 16,12.42 16,8 16,3.58 12.42,0 8,0 8,0 8,0 8,0 Z"></path></svg>
143+
</div>
144+
</div>
145+
126146
<h2 class="headline-small">{{language.settings.startupBehavior.main}}</h2>
127147

128148
<div class="menu-simple-text gamepad-item">

themes/material-design/theme.css

+4-4
Original file line numberDiff line numberDiff line change
@@ -1534,11 +1534,11 @@ cb
15341534

15351535
.content-view-module .folder-poster
15361536
{
1537-
height: calc(100% - 8px);
1538-
width: calc(100% - 8px);
1537+
height: calc(100% - 4px);
1538+
width: calc(100% - 4px);
15391539
position: absolute;
1540-
top: 4px;
1541-
left: 4px;
1540+
top: 2px;
1541+
left: 2px;
15421542
border-radius: 10px;
15431543
}
15441544

0 commit comments

Comments
 (0)