Skip to content

Commit f21cccd

Browse files
committed
New: Improved local artwork assets support
1 parent 31675a5 commit f21cccd

File tree

4 files changed

+164
-140
lines changed

4 files changed

+164
-140
lines changed

CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
88

99
### 🚀 New Features
1010

11-
- Reload button in file list
11+
- Reload button in file list [`31675a5`](https://github.com/ollm/OpenComic/commit/31675a5a8334abedc056a09a5107f718dc5304e0)
1212

1313
### 🐛 Bug Fixes
1414

scripts/dom.js

+86-131
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,16 @@ var _dom = function(_this, string = false, querySelectorAll = false) {
165165
this.removeClass(..._arguments);
166166
}
167167

168+
this.setAttribute = function(name, value) {
169+
170+
for(let i = 0, len = this._this.length; i < len; i++)
171+
{
172+
this._this[i].setAttribute(name, value);
173+
}
174+
175+
return this;
176+
}
177+
168178
this.getAttribute = function(attribute) {
169179

170180
for(let i = 0, len = this._this.length; i < len; i++)
@@ -425,31 +435,24 @@ function calcReadingProgressWD()
425435

426436
function addImageToDom(querySelector, path, animation = true)
427437
{
428-
if(animation)
429-
{
430-
let src = $('.fi-sha-'+querySelector+' img, .sha-'+querySelector+' img, img.fi-sha-'+querySelector);
438+
let backgroundImage = 'url('+path+')';
431439

432-
if(src.length > 0)
433-
src.attr('src', path).addClass('a');
434-
else
435-
$('.fi-sha-'+querySelector+', .sha-'+querySelector+' .item-image').css({'background-image': 'url('+path+')'}).addClass('a');
440+
let src = dom.queryAll('.fi-sha-'+querySelector+' img, .sha-'+querySelector+' img, img.fi-sha-'+querySelector);
436441

437-
$('.pi-sha-'+querySelector).css({'background-image': 'url('+path+')'}).addClass('a');
438-
$('.ri-sha-'+querySelector).attr('src', path);
439-
$('.continue-reading-sha-'+querySelector).css({'background-image': 'url('+path+')'}).addClass('a');
440-
}
442+
if(src._this.length > 0)
443+
src.setAttribute('src', path);
441444
else
442-
{
443-
let src = $('.fi-sha-'+querySelector+' img, .sha-'+querySelector+' img, img.fi-sha-'+querySelector);
445+
src = dom.queryAll('.fi-sha-'+querySelector+', .sha-'+querySelector+' .item-image').css({backgroundImage: backgroundImage});
444446

445-
if(src.length > 0)
446-
src.attr('src', path);
447-
else
448-
$('.fi-sha-'+querySelector+', .sha-'+querySelector+' .item-image').css({'transition': '0s', 'background-image': 'url('+path+')'});
447+
let pi = dom.queryAll('.pi-sha-'+querySelector).css({backgroundImage: backgroundImage});
448+
let ri = dom.queryAll('.ri-sha-'+querySelector).setAttribute('src', path);
449+
let cr = dom.queryAll('.continue-reading-sha-'+querySelector).css({backgroundImage: backgroundImage});
449450

450-
$('.pi-sha-'+querySelector).css({'background-image': 'url('+path+')'});
451-
$('.ri-sha-'+querySelector).attr('src', path);
452-
$('.continue-reading-sha-'+querySelector).css({'transition': '0s', 'background-image': 'url('+path+')'});
451+
if(animation)
452+
{
453+
src.addClass('a');
454+
pi.addClass('a');
455+
cr.addClass('a');
453456
}
454457
}
455458

@@ -506,21 +509,15 @@ async function loadFilesIndexPage(file, animation, path, keepScroll, mainPath)
506509
}
507510
else if(file.folder || file.compressed)
508511
{
509-
let poster = await getFolderPoster(filePath);
510-
511-
let images = [];
512-
513-
if(!poster)
514-
{
515-
images = await getFolderThumbnails(filePath);
516-
}
512+
let images = await getFolderThumbnails(filePath);
517513

518514
pathFiles.push({
515+
sha: file.sha,
519516
name: fileName,
520517
path: filePath,
521518
mainPath: mainPath,
522-
poster: poster,
523-
images: images,
519+
poster: images.poster,
520+
images: images.images,
524521
folder: true,
525522
});
526523
}
@@ -670,17 +667,11 @@ async function loadIndexPage(animation = true, path = false, content = false, ke
670667

671668
for(let key in comics)
672669
{
673-
let poster = await getFolderPoster(comics[key].path);
674-
675-
let images = [];
676-
677-
if(!poster)
678-
{
679-
images = await getFolderThumbnails(comics[key].path);
680-
}
670+
let images = await getFolderThumbnails(comics[key].path);
681671

682-
comics[key].poster = poster;
683-
comics[key].images = images;
672+
comics[key].sha = sha1(comics[key].path);
673+
comics[key].poster = images.poster;
674+
comics[key].images = images.images;
684675
comics[key].mainPath = config.showFullPathLibrary ? p.parse(comics[key].path).root : comics[key].path;
685676
}
686677

@@ -831,43 +822,67 @@ async function _getFolderThumbnails(file, images, _images, path, folderSha, isAs
831822
{
832823
let shaIndex = {};
833824

834-
for(let i = 0, len = _images.length; i < len; i++)
825+
let poster = false;
826+
827+
if(Array.isArray(_images))
835828
{
836-
_images[i].vars = {i: i};
837-
shaIndex[i] = _images[i].sha;
838-
}
829+
if(isAsync) dom.queryAll('.sha-'+folderSha+' .folder-poster').remove();
839830

840-
_images = cache.returnThumbnailsImages(_images, function(data, vars) {
831+
for(let i = 0, len = _images.length; i < len; i++)
832+
{
833+
_images[i].vars = {i: i};
834+
shaIndex[i] = _images[i].sha;
835+
}
841836

842-
addImageToDom(data.sha, data.path);
843-
addImageToDom(folderSha+'-'+vars.i, data.path);
837+
_images = cache.returnThumbnailsImages(_images, function(data, vars) {
844838

845-
}, file);
839+
addImageToDom(data.sha, data.path);
840+
addImageToDom(folderSha+'-'+vars.i, data.path);
846841

847-
for(let i = 0, len = images.length; i < len; i++)
848-
{
849-
let imageCache = _images[shaIndex[i]];
842+
}, file);
850843

851-
if(imageCache && imageCache.cache)
844+
for(let i = 0, len = images.length; i < len; i++)
852845
{
853-
images[i].path = imageCache.path;
854-
images[i].cache = true;
846+
let imageCache = _images[shaIndex[i]];
855847

856-
if(isAsync)
848+
if(imageCache && imageCache.cache)
857849
{
858-
addImageToDom(imageCache.sha, imageCache.path);
859-
addImageToDom(folderSha+'-'+i, imageCache.path);
850+
images[i].path = imageCache.path;
851+
images[i].cache = true;
852+
853+
if(isAsync)
854+
{
855+
addImageToDom(imageCache.sha, imageCache.path);
856+
addImageToDom(folderSha+'-'+i, imageCache.path);
857+
}
860858
}
861859
}
862860
}
861+
else
862+
{
863+
if(isAsync) dom.queryAll('.sha-'+folderSha+' .folder-images').remove();
864+
865+
poster = cache.returnThumbnailsImages({path: _images.path, sha: _images.sha}, function(data){
866+
867+
addImageToDom(data.sha, data.path);
868+
addImageToDom(folderSha+'-0', data.path);
869+
870+
}, file);
871+
872+
poster.sha = folderSha+'-0';
863873

864-
return images;
874+
images = false;
875+
}
876+
877+
return {poster: poster, images: images};
865878
}
866879

867880
async function getFolderThumbnails(path)
868881
{
869882
let folderSha = sha1(path);
870883

884+
let poster = {cache: false, path: '', sha: folderSha+'-0'};
885+
871886
let images = [
872887
{cache: false, path: '', sha: folderSha+'-0'},
873888
{cache: false, path: '', sha: folderSha+'-1'},
@@ -877,87 +892,27 @@ async function getFolderThumbnails(path)
877892

878893
try
879894
{
880-
try
881-
{
882-
let file = fileManager.file(path);
883-
file.updateConfig({cacheOnly: true});
884-
let _images = await file.images(4);
885-
886-
images = await _getFolderThumbnails(file, images, _images, path, folderSha);
887-
}
888-
catch(error)
889-
{
890-
if(error.message && error.message === 'notCacheOnly')
891-
{
892-
queue.add('folderThumbnails', async function(path, folderSha) {
893-
894-
let file = fileManager.file(path);
895-
let _images = await file.images(4);
895+
let file = fileManager.file(path);
896+
file.updateConfig({cacheOnly: true});
897+
let _images = await file.images(4, false, true);
896898

897-
_getFolderThumbnails(file, images, _images, path, folderSha, true);
899+
_images = await _getFolderThumbnails(file, images, _images, path, folderSha);
898900

899-
}, path, folderSha);
900-
}
901-
else
902-
{
903-
console.error(error);
904-
dom.compressedError(error);
905-
}
906-
}
901+
poster = _images.poster;
902+
images = _images.poster ? false : _images.images;
907903
}
908904
catch(error)
909905
{
910-
console.error(error);
911-
dom.compressedError(error);
912-
}
913-
914-
return images;
915-
}
916-
917-
async function getFolderPoster(path)
918-
{
919-
let dirname = p.dirname(path);
920-
let basename = p.basename(path);
921-
let name = p.parse(basename).name;
922-
923-
try
924-
{
925-
let file = fileManager.file(dirname);
926-
file.updateConfig({cacheOnly: true, fastRead: true, specialFiles: true, sha: false});
927-
let files = await file.read();
928-
929-
let regex = new RegExp('^'+pregQuote(name)+'\.[a-z0-9]+');
930-
let poster = false;
931-
932-
for(let i = 0, len = files.length; i < len; i++)
933-
{
934-
let file = files[i];
935-
936-
if(!file.folder && !file.compressed && regex.test(file.name))
937-
{
938-
file.sha = sha1(file.path);
939-
poster = file;
940-
941-
break;
942-
}
943-
}
944-
945-
if(poster)
906+
if(error.message && error.message === 'notCacheOnly')
946907
{
947-
let thumbnail = cache.returnThumbnailsImages({path: poster.path, sha: poster.sha}, function(data){
908+
queue.add('folderThumbnails', async function(path, folderSha) {
948909

949-
addImageToDom(data.sha, data.path);
910+
let file = fileManager.file(path);
911+
let _images = await file.images(4, false, true);
950912

951-
}, file);
913+
_getFolderThumbnails(file, images, _images, path, folderSha, true);
952914

953-
return thumbnail;
954-
}
955-
}
956-
catch(error)
957-
{
958-
if(error.message && error.message === 'notCacheOnly')
959-
{
960-
// Nothing to do
915+
}, path, folderSha);
961916
}
962917
else
963918
{
@@ -966,7 +921,7 @@ async function getFolderPoster(path)
966921
}
967922
}
968923

969-
return false;
924+
return {poster: poster, images: images};
970925
}
971926

972927
var indexPathControlA = [], indexPathA = false, indexMainPathA = false;

0 commit comments

Comments
 (0)