Merge pull request #3034 from MinecraftPlaye/feature-comicposition
Save the progress when reading a Comic Book Archive
This commit is contained in:
commit
bf736771ca
2 changed files with 63 additions and 5 deletions
|
@ -49,6 +49,7 @@
|
||||||
- [Ömer Erdinç Yağmurlu](https://github.com/omeryagmurlu)
|
- [Ömer Erdinç Yağmurlu](https://github.com/omeryagmurlu)
|
||||||
- [Keegan Dahm](https://github.com/keegandahm)
|
- [Keegan Dahm](https://github.com/keegandahm)
|
||||||
- [GodTamIt](https://github.com/GodTamIt)
|
- [GodTamIt](https://github.com/GodTamIt)
|
||||||
|
- [MinecraftPlaye](https://github.com/MinecraftPlaye)
|
||||||
|
|
||||||
# Emby Contributors
|
# Emby Contributors
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,8 @@ export class ComicsPlayer {
|
||||||
}
|
}
|
||||||
|
|
||||||
play(options) {
|
play(options) {
|
||||||
this.progress = 0;
|
this.currentPage = 0;
|
||||||
|
this.pageCount = 0;
|
||||||
|
|
||||||
const elem = this.createMediaElement();
|
const elem = this.createMediaElement();
|
||||||
return this.setCurrentSrc(elem, options);
|
return this.setCurrentSrc(elem, options);
|
||||||
|
@ -33,6 +34,12 @@ export class ComicsPlayer {
|
||||||
stop() {
|
stop() {
|
||||||
this.unbindEvents();
|
this.unbindEvents();
|
||||||
|
|
||||||
|
const stopInfo = {
|
||||||
|
src: this.item
|
||||||
|
};
|
||||||
|
|
||||||
|
Events.trigger(this, 'stopped', [stopInfo]);
|
||||||
|
|
||||||
this.archiveSource?.release();
|
this.archiveSource?.release();
|
||||||
|
|
||||||
const elem = this.mediaElement;
|
const elem = this.mediaElement;
|
||||||
|
@ -44,6 +51,38 @@ export class ComicsPlayer {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
destroy() {
|
||||||
|
// Nothing to do here
|
||||||
|
}
|
||||||
|
|
||||||
|
currentTime() {
|
||||||
|
return this.currentPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
duration() {
|
||||||
|
return this.pageCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentItem() {
|
||||||
|
return this.item;
|
||||||
|
}
|
||||||
|
|
||||||
|
volume() {
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
isMuted() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
paused() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
seekable() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
onDialogClosed() {
|
onDialogClosed() {
|
||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
|
@ -60,8 +99,8 @@ export class ComicsPlayer {
|
||||||
bindMediaElementEvents() {
|
bindMediaElementEvents() {
|
||||||
const elem = this.mediaElement;
|
const elem = this.mediaElement;
|
||||||
|
|
||||||
elem?.addEventListener('close', this.onDialogClosed, {once: true});
|
elem?.addEventListener('close', this.onDialogClosed, { once: true });
|
||||||
elem?.querySelector('.btnExit').addEventListener('click', this.onDialogClosed, {once: true});
|
elem?.querySelector('.btnExit').addEventListener('click', this.onDialogClosed, { once: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
bindEvents() {
|
bindEvents() {
|
||||||
|
@ -118,7 +157,15 @@ export class ComicsPlayer {
|
||||||
|
|
||||||
setCurrentSrc(elem, options) {
|
setCurrentSrc(elem, options) {
|
||||||
const item = options.items[0];
|
const item = options.items[0];
|
||||||
this.currentItem = item;
|
this.item = item;
|
||||||
|
this.streamInfo = {
|
||||||
|
started: true,
|
||||||
|
ended: false,
|
||||||
|
item: this.item,
|
||||||
|
mediaSource: {
|
||||||
|
Id: item.Id
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
loading.show();
|
loading.show();
|
||||||
|
|
||||||
|
@ -134,6 +181,10 @@ export class ComicsPlayer {
|
||||||
|
|
||||||
return this.archiveSource.load().then(() => {
|
return this.archiveSource.load().then(() => {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
|
||||||
|
this.pageCount = this.archiveSource.urls.length;
|
||||||
|
this.currentPage = options.startPositionTicks / 10000 || 0;
|
||||||
|
|
||||||
this.swiperInstance = new Swiper(elem.querySelector('.slideshowSwiperContainer'), {
|
this.swiperInstance = new Swiper(elem.querySelector('.slideshowSwiperContainer'), {
|
||||||
direction: 'horizontal',
|
direction: 'horizontal',
|
||||||
// loop is disabled due to the lack of Swiper support in virtual slides
|
// loop is disabled due to the lack of Swiper support in virtual slides
|
||||||
|
@ -150,7 +201,7 @@ export class ComicsPlayer {
|
||||||
preloadImages: true,
|
preloadImages: true,
|
||||||
slidesPerView: 1,
|
slidesPerView: 1,
|
||||||
slidesPerColumn: 1,
|
slidesPerColumn: 1,
|
||||||
initialSlide: 0,
|
initialSlide: this.currentPage,
|
||||||
// reduces memory consumption for large libraries while allowing preloading of images
|
// reduces memory consumption for large libraries while allowing preloading of images
|
||||||
virtual: {
|
virtual: {
|
||||||
slides: this.archiveSource.urls,
|
slides: this.archiveSource.urls,
|
||||||
|
@ -160,6 +211,12 @@ export class ComicsPlayer {
|
||||||
addSlidesAfter: 1
|
addSlidesAfter: 1
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// save current page ( a page is an image file inside the archive )
|
||||||
|
this.swiperInstance.on('slideChange', () => {
|
||||||
|
this.currentPage = this.swiperInstance.activeIndex;
|
||||||
|
Events.trigger(this, 'pause');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue