diff --git a/komga/src/main/kotlin/org/gotson/komga/application/events/AsynchronousSpringEventsConfig.kt b/komga/src/main/kotlin/org/gotson/komga/application/events/AsynchronousSpringEventsConfig.kt new file mode 100644 index 00000000..47cba713 --- /dev/null +++ b/komga/src/main/kotlin/org/gotson/komga/application/events/AsynchronousSpringEventsConfig.kt @@ -0,0 +1,19 @@ +package org.gotson.komga.application.events + +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import org.springframework.context.event.ApplicationEventMulticaster +import org.springframework.context.event.SimpleApplicationEventMulticaster +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor + +@Configuration +class AsynchronousSpringEventsConfig( + private val taskExecutor: ThreadPoolTaskExecutor, +) { + @Bean("applicationEventMulticaster") + fun simpleApplicationEventMulticaster(): ApplicationEventMulticaster { + val eventMulticaster = SimpleApplicationEventMulticaster() + eventMulticaster.setTaskExecutor(taskExecutor) + return eventMulticaster + } +} diff --git a/komga/src/main/kotlin/org/gotson/komga/application/events/EventPublisher.kt b/komga/src/main/kotlin/org/gotson/komga/application/events/EventPublisher.kt deleted file mode 100644 index ee826788..00000000 --- a/komga/src/main/kotlin/org/gotson/komga/application/events/EventPublisher.kt +++ /dev/null @@ -1,25 +0,0 @@ -package org.gotson.komga.application.events - -import jakarta.jms.ConnectionFactory -import org.gotson.komga.domain.model.DomainEvent -import org.gotson.komga.infrastructure.jms.JMS_PROPERTY_TYPE -import org.gotson.komga.infrastructure.jms.TOPIC_EVENTS -import org.springframework.jms.core.JmsTemplate -import org.springframework.stereotype.Service - -@Service -class EventPublisher( - connectionFactory: ConnectionFactory, -) { - private val jmsTemplate = JmsTemplate(connectionFactory).apply { - isPubSubDomain = true - } - - fun publishEvent(event: DomainEvent) { - jmsTemplate.convertAndSend(TOPIC_EVENTS, event) { - it.apply { - setStringProperty(JMS_PROPERTY_TYPE, event.javaClass.simpleName) - } - } - } -} diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookConverter.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookConverter.kt index 96d6e974..0b24f502 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookConverter.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookConverter.kt @@ -4,7 +4,6 @@ import mu.KotlinLogging import org.apache.commons.compress.archivers.zip.ZipArchiveEntry import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream import org.apache.commons.io.FilenameUtils -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.BookConversionException import org.gotson.komga.domain.model.BookWithMedia @@ -21,6 +20,7 @@ import org.gotson.komga.domain.persistence.HistoricalEventRepository import org.gotson.komga.domain.persistence.LibraryRepository import org.gotson.komga.domain.persistence.MediaRepository import org.gotson.komga.language.notEquals +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service import org.springframework.transaction.support.TransactionTemplate import java.io.FileNotFoundException @@ -46,7 +46,7 @@ class BookConverter( private val mediaRepository: MediaRepository, private val libraryRepository: LibraryRepository, private val transactionTemplate: TransactionTemplate, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val historicalEventRepository: HistoricalEventRepository, ) { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookImporter.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookImporter.kt index 720b05d5..d2cbe6af 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookImporter.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookImporter.kt @@ -1,7 +1,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.application.tasks.TaskEmitter import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.CodedException @@ -22,6 +21,7 @@ import org.gotson.komga.domain.persistence.ReadListRepository import org.gotson.komga.domain.persistence.ReadProgressRepository import org.gotson.komga.domain.persistence.SidecarRepository import org.gotson.komga.language.toIndexedMap +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service import java.io.FileNotFoundException import java.nio.file.FileAlreadyExistsException @@ -56,7 +56,7 @@ class BookImporter( private val readListRepository: ReadListRepository, private val libraryRepository: LibraryRepository, private val sidecarRepository: SidecarRepository, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val taskEmitter: TaskEmitter, private val historicalEventRepository: HistoricalEventRepository, ) { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookLifecycle.kt index f3534371..8791e2a3 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookLifecycle.kt @@ -1,7 +1,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.BookAction import org.gotson.komga.domain.model.BookPageContent @@ -28,6 +27,7 @@ import org.gotson.komga.infrastructure.configuration.KomgaSettingsProvider import org.gotson.komga.infrastructure.hash.Hasher import org.gotson.komga.infrastructure.image.ImageConverter import org.gotson.komga.infrastructure.image.ImageType +import org.springframework.context.ApplicationEventPublisher import org.springframework.data.domain.Sort import org.springframework.stereotype.Service import org.springframework.transaction.support.TransactionTemplate @@ -53,7 +53,7 @@ class BookLifecycle( private val libraryRepository: LibraryRepository, private val bookAnalyzer: BookAnalyzer, private val imageConverter: ImageConverter, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val transactionTemplate: TransactionTemplate, private val hasher: Hasher, private val historicalEventRepository: HistoricalEventRepository, diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookMetadataLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookMetadataLifecycle.kt index 09abe9ba..9bde8379 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookMetadataLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookMetadataLifecycle.kt @@ -1,7 +1,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.BookMetadataPatch import org.gotson.komga.domain.model.BookMetadataPatchCapability @@ -14,6 +13,7 @@ import org.gotson.komga.domain.persistence.LibraryRepository import org.gotson.komga.domain.persistence.MediaRepository import org.gotson.komga.domain.persistence.ReadListRepository import org.gotson.komga.infrastructure.metadata.BookMetadataProvider +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service private val logger = KotlinLogging.logger {} @@ -27,7 +27,7 @@ class BookMetadataLifecycle( private val libraryRepository: LibraryRepository, private val readListRepository: ReadListRepository, private val readListLifecycle: ReadListLifecycle, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, ) { fun refreshMetadata(book: Book, capabilities: Set) { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookPageEditor.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookPageEditor.kt index 1f0b0553..652b2bee 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookPageEditor.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookPageEditor.kt @@ -4,7 +4,6 @@ import mu.KotlinLogging import org.apache.commons.compress.archivers.zip.ZipArchiveEntry import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream import org.apache.commons.io.FilenameUtils -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.BookAction import org.gotson.komga.domain.model.BookConversionException @@ -23,6 +22,7 @@ import org.gotson.komga.domain.persistence.LibraryRepository import org.gotson.komga.domain.persistence.MediaRepository import org.gotson.komga.domain.persistence.PageHashRepository import org.gotson.komga.language.notEquals +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service import org.springframework.transaction.support.TransactionTemplate import java.io.File @@ -45,7 +45,7 @@ class BookPageEditor( private val libraryRepository: LibraryRepository, private val pageHashRepository: PageHashRepository, private val transactionTemplate: TransactionTemplate, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val historicalEventRepository: HistoricalEventRepository, ) { private val convertibleTypes = listOf(MediaType.ZIP.type) diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/KomgaUserLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/KomgaUserLifecycle.kt index 69e408d4..30c95c1b 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/KomgaUserLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/KomgaUserLifecycle.kt @@ -1,7 +1,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.DomainEvent import org.gotson.komga.domain.model.KomgaUser import org.gotson.komga.domain.model.UserEmailAlreadyExistsException @@ -9,6 +8,7 @@ import org.gotson.komga.domain.persistence.AuthenticationActivityRepository import org.gotson.komga.domain.persistence.KomgaUserRepository import org.gotson.komga.domain.persistence.ReadProgressRepository import org.gotson.komga.infrastructure.security.KomgaPrincipal +import org.springframework.context.ApplicationEventPublisher import org.springframework.security.core.session.SessionRegistry import org.springframework.security.crypto.password.PasswordEncoder import org.springframework.stereotype.Service @@ -24,7 +24,7 @@ class KomgaUserLifecycle( private val passwordEncoder: PasswordEncoder, private val sessionRegistry: SessionRegistry, private val transactionTemplate: TransactionTemplate, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, ) { fun updatePassword(user: KomgaUser, newPassword: String, expireSessions: Boolean) { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryContentLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryContentLifecycle.kt index 19106cda..ff9b1a2d 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryContentLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryContentLifecycle.kt @@ -1,7 +1,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.application.tasks.TaskEmitter import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.BookMetadataPatchCapability @@ -29,6 +28,7 @@ import org.gotson.komga.infrastructure.configuration.KomgaSettingsProvider import org.gotson.komga.infrastructure.hash.Hasher import org.gotson.komga.language.notEquals import org.gotson.komga.language.toIndexedMap +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service import org.springframework.transaction.support.TransactionTemplate import java.nio.file.Paths @@ -59,7 +59,7 @@ class LibraryContentLifecycle( private val readProgressRepository: ReadProgressRepository, private val collectionRepository: SeriesCollectionRepository, private val thumbnailBookRepository: ThumbnailBookRepository, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, ) { fun scanRootFolder(library: Library, scanDeep: Boolean = false) { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryLifecycle.kt index 239b8484..d12ec400 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryLifecycle.kt @@ -1,7 +1,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.application.scheduler.LibraryScanScheduler import org.gotson.komga.application.tasks.TaskEmitter import org.gotson.komga.domain.model.DirectoryNotFoundException @@ -12,6 +11,7 @@ import org.gotson.komga.domain.model.PathContainedInPath import org.gotson.komga.domain.persistence.LibraryRepository import org.gotson.komga.domain.persistence.SeriesRepository import org.gotson.komga.domain.persistence.SidecarRepository +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service import org.springframework.transaction.support.TransactionTemplate import java.io.FileNotFoundException @@ -26,7 +26,7 @@ class LibraryLifecycle( private val seriesRepository: SeriesRepository, private val sidecarRepository: SidecarRepository, private val taskEmitter: TaskEmitter, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val transactionTemplate: TransactionTemplate, private val libraryScanScheduler: LibraryScanScheduler, ) { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/ReadListLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/ReadListLifecycle.kt index 05e63fa9..401647db 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/ReadListLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/ReadListLifecycle.kt @@ -1,7 +1,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.DomainEvent import org.gotson.komga.domain.model.DuplicateNameException import org.gotson.komga.domain.model.ReadList @@ -11,6 +10,7 @@ import org.gotson.komga.domain.persistence.ReadListRepository import org.gotson.komga.domain.persistence.ThumbnailReadListRepository import org.gotson.komga.infrastructure.image.MosaicGenerator import org.gotson.komga.infrastructure.metadata.comicrack.ReadListProvider +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service import org.springframework.transaction.support.TransactionTemplate @@ -24,7 +24,7 @@ class ReadListLifecycle( private val mosaicGenerator: MosaicGenerator, private val readListMatcher: ReadListMatcher, private val readListProvider: ReadListProvider, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val transactionTemplate: TransactionTemplate, ) { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesCollectionLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesCollectionLifecycle.kt index 1250968b..e9c3ee07 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesCollectionLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesCollectionLifecycle.kt @@ -1,7 +1,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.DomainEvent import org.gotson.komga.domain.model.DuplicateNameException import org.gotson.komga.domain.model.SeriesCollection @@ -9,6 +8,7 @@ import org.gotson.komga.domain.model.ThumbnailSeriesCollection import org.gotson.komga.domain.persistence.SeriesCollectionRepository import org.gotson.komga.domain.persistence.ThumbnailSeriesCollectionRepository import org.gotson.komga.infrastructure.image.MosaicGenerator +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service import org.springframework.transaction.support.TransactionTemplate @@ -20,7 +20,7 @@ class SeriesCollectionLifecycle( private val thumbnailSeriesCollectionRepository: ThumbnailSeriesCollectionRepository, private val seriesLifecycle: SeriesLifecycle, private val mosaicGenerator: MosaicGenerator, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val transactionTemplate: TransactionTemplate, ) { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesLifecycle.kt index acbe611e..79696cb3 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesLifecycle.kt @@ -2,7 +2,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.application.tasks.TaskEmitter import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.BookMetadata @@ -30,6 +29,7 @@ import org.gotson.komga.domain.persistence.SeriesMetadataRepository import org.gotson.komga.domain.persistence.SeriesRepository import org.gotson.komga.domain.persistence.ThumbnailSeriesRepository import org.gotson.komga.language.stripAccents +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service import org.springframework.transaction.support.TransactionTemplate import java.io.File @@ -58,7 +58,7 @@ class SeriesLifecycle( private val collectionRepository: SeriesCollectionRepository, private val readProgressRepository: ReadProgressRepository, private val taskEmitter: TaskEmitter, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val transactionTemplate: TransactionTemplate, private val historicalEventRepository: HistoricalEventRepository, ) { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesMetadataLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesMetadataLifecycle.kt index fd9287af..012b6621 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesMetadataLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/SeriesMetadataLifecycle.kt @@ -1,7 +1,6 @@ package org.gotson.komga.domain.service import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.BookWithMedia import org.gotson.komga.domain.model.DomainEvent import org.gotson.komga.domain.model.MetadataPatchTarget @@ -18,6 +17,7 @@ import org.gotson.komga.domain.persistence.SeriesMetadataRepository import org.gotson.komga.infrastructure.metadata.SeriesMetadataFromBookProvider import org.gotson.komga.infrastructure.metadata.SeriesMetadataProvider import org.gotson.komga.language.mostFrequent +import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service private val logger = KotlinLogging.logger {} @@ -36,7 +36,7 @@ class SeriesMetadataLifecycle( private val bookRepository: BookRepository, private val collectionRepository: SeriesCollectionRepository, private val collectionLifecycle: SeriesCollectionLifecycle, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, ) { fun refreshMetadata(series: Series) { diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/jms/ArtemisConfig.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/jms/ArtemisConfig.kt index 24e5e6b4..3498e866 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/jms/ArtemisConfig.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/jms/ArtemisConfig.kt @@ -17,11 +17,9 @@ private val logger = KotlinLogging.logger {} const val QUEUE_UNIQUE_ID = "unique_id" const val QUEUE_TASKS = "tasks.background" -const val TOPIC_EVENTS = "domain.events" const val JMS_PROPERTY_TYPE = "type" -const val TOPIC_FACTORY = "topicJmsListenerContainerFactory" const val QUEUE_FACTORY = "queueJmsListenerContainerFactory" @Configuration @@ -43,25 +41,9 @@ class ArtemisConfig : ArtemisConfigurationCustomizer { .setLastValueKey(QUEUE_UNIQUE_ID) .setRoutingType(RoutingType.ANYCAST), ) - it.addQueueConfiguration( - QueueConfiguration(TOPIC_EVENTS) - .setAddress(TOPIC_EVENTS) - .setRoutingType(RoutingType.MULTICAST), - ) } } - @Bean(TOPIC_FACTORY) - fun topicJmsListenerContainerFactory( - connectionFactory: ConnectionFactory, - configurer: DefaultJmsListenerContainerFactoryConfigurer, - ): DefaultJmsListenerContainerFactory = - DefaultJmsListenerContainerFactory().apply { - configurer.configure(this, connectionFactory) - setErrorHandler { logger.warn { it.message } } - setPubSubDomain(true) - } - @Bean(QUEUE_FACTORY) fun queueJmsListenerContainerFactory( connectionFactory: ConnectionFactory, diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/search/SearchIndexLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/search/SearchIndexLifecycle.kt index 67a12b52..5b1b4938 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/search/SearchIndexLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/search/SearchIndexLifecycle.kt @@ -10,16 +10,14 @@ import org.gotson.komga.domain.model.SeriesCollection import org.gotson.komga.domain.model.SeriesSearchWithReadProgress import org.gotson.komga.domain.persistence.ReadListRepository import org.gotson.komga.domain.persistence.SeriesCollectionRepository -import org.gotson.komga.infrastructure.jms.TOPIC_EVENTS -import org.gotson.komga.infrastructure.jms.TOPIC_FACTORY import org.gotson.komga.interfaces.api.persistence.BookDtoRepository import org.gotson.komga.interfaces.api.persistence.SeriesDtoRepository import org.gotson.komga.interfaces.api.rest.dto.BookDto import org.gotson.komga.interfaces.api.rest.dto.SeriesDto +import org.springframework.context.event.EventListener import org.springframework.data.domain.Page import org.springframework.data.domain.PageRequest import org.springframework.data.domain.Pageable -import org.springframework.jms.annotation.JmsListener import org.springframework.stereotype.Component import kotlin.math.ceil import kotlin.time.measureTime @@ -80,7 +78,7 @@ class SearchIndexLifecycle( } } - @JmsListener(destination = TOPIC_EVENTS, containerFactory = TOPIC_FACTORY) + @EventListener fun consumeEvents(event: DomainEvent) { when (event) { is DomainEvent.SeriesAdded -> seriesDtoRepository.findByIdOrNull(event.series.id, "unused")?.toDocument()?.let { addEntity(it) } diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/BookController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/BookController.kt index 3c657f86..ba205cd8 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/BookController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/BookController.kt @@ -8,7 +8,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse import jakarta.validation.Valid import mu.KotlinLogging import org.apache.commons.io.IOUtils -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.application.tasks.HIGHEST_PRIORITY import org.gotson.komga.application.tasks.HIGH_PRIORITY import org.gotson.komga.application.tasks.LOWEST_PRIORITY @@ -69,6 +68,7 @@ import org.gotson.komga.interfaces.api.rest.dto.ThumbnailBookDto import org.gotson.komga.interfaces.api.rest.dto.patch import org.gotson.komga.interfaces.api.rest.dto.restrictUrl import org.gotson.komga.interfaces.api.rest.dto.toDto +import org.springframework.context.ApplicationEventPublisher import org.springframework.core.io.FileSystemResource import org.springframework.data.domain.Page import org.springframework.data.domain.PageRequest @@ -125,7 +125,7 @@ class BookController( private val readListRepository: ReadListRepository, private val contentDetector: ContentDetector, private val imageAnalyzer: ImageAnalyzer, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val thumbnailBookRepository: ThumbnailBookRepository, private val imageConverter: ImageConverter, ) { diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/ReadListController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/ReadListController.kt index 8d2dffad..a14ecb5f 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/ReadListController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/ReadListController.kt @@ -10,7 +10,6 @@ import org.apache.commons.compress.archivers.zip.Zip64Mode import org.apache.commons.compress.archivers.zip.ZipArchiveEntry import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream import org.apache.commons.io.IOUtils -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.Author import org.gotson.komga.domain.model.BookSearchWithReadProgress import org.gotson.komga.domain.model.CodedException @@ -49,6 +48,7 @@ import org.gotson.komga.interfaces.api.rest.dto.ThumbnailReadListDto import org.gotson.komga.interfaces.api.rest.dto.restrictUrl import org.gotson.komga.interfaces.api.rest.dto.toDto import org.gotson.komga.language.toIndexedMap +import org.springframework.context.ApplicationEventPublisher import org.springframework.core.io.FileSystemResource import org.springframework.data.domain.Page import org.springframework.data.domain.PageRequest @@ -95,7 +95,7 @@ class ReadListController( private val contentDetector: ContentDetector, private val imageAnalyzer: ImageAnalyzer, private val bookLifecycle: BookLifecycle, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, ) { @PageableWithoutSortAsQueryParam diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/SeriesCollectionController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/SeriesCollectionController.kt index c1b54ed6..6f68c3f5 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/SeriesCollectionController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/SeriesCollectionController.kt @@ -6,7 +6,6 @@ import io.swagger.v3.oas.annotations.media.Schema import io.swagger.v3.oas.annotations.responses.ApiResponse import jakarta.validation.Valid import mu.KotlinLogging -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.Author import org.gotson.komga.domain.model.Dimension import org.gotson.komga.domain.model.DomainEvent @@ -35,6 +34,7 @@ import org.gotson.komga.interfaces.api.rest.dto.SeriesDto import org.gotson.komga.interfaces.api.rest.dto.ThumbnailSeriesCollectionDto import org.gotson.komga.interfaces.api.rest.dto.restrictUrl import org.gotson.komga.interfaces.api.rest.dto.toDto +import org.springframework.context.ApplicationEventPublisher import org.springframework.data.domain.Page import org.springframework.data.domain.PageRequest import org.springframework.data.domain.Pageable @@ -71,7 +71,7 @@ class SeriesCollectionController( private val contentDetector: ContentDetector, private val imageAnalyzer: ImageAnalyzer, private val thumbnailSeriesCollectionRepository: ThumbnailSeriesCollectionRepository, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, ) { @PageableWithoutSortAsQueryParam diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/SeriesController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/SeriesController.kt index 02d0d1ab..f1b1bb5f 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/SeriesController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/SeriesController.kt @@ -13,7 +13,6 @@ import org.apache.commons.compress.archivers.zip.Zip64Mode import org.apache.commons.compress.archivers.zip.ZipArchiveEntry import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream import org.apache.commons.io.IOUtils -import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.application.tasks.HIGHEST_PRIORITY import org.gotson.komga.application.tasks.HIGH_PRIORITY import org.gotson.komga.application.tasks.TaskEmitter @@ -64,6 +63,7 @@ import org.gotson.komga.interfaces.api.rest.dto.TachiyomiReadProgressV2Dto import org.gotson.komga.interfaces.api.rest.dto.ThumbnailSeriesDto import org.gotson.komga.interfaces.api.rest.dto.restrictUrl import org.gotson.komga.interfaces.api.rest.dto.toDto +import org.springframework.context.ApplicationEventPublisher import org.springframework.core.io.FileSystemResource import org.springframework.data.domain.Page import org.springframework.data.domain.PageRequest @@ -110,7 +110,7 @@ class SeriesController( private val bookDtoRepository: BookDtoRepository, private val collectionRepository: SeriesCollectionRepository, private val readProgressDtoRepository: ReadProgressDtoRepository, - private val eventPublisher: EventPublisher, + private val eventPublisher: ApplicationEventPublisher, private val contentDetector: ContentDetector, private val imageAnalyzer: ImageAnalyzer, private val thumbnailsSeriesRepository: ThumbnailSeriesRepository, diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/scheduler/MetricsPublisherController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/scheduler/MetricsPublisherController.kt index bbadb098..a479a71f 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/scheduler/MetricsPublisherController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/scheduler/MetricsPublisherController.kt @@ -15,12 +15,9 @@ import org.gotson.komga.domain.persistence.ReadListRepository import org.gotson.komga.domain.persistence.SeriesCollectionRepository import org.gotson.komga.domain.persistence.SeriesRepository import org.gotson.komga.domain.persistence.SidecarRepository -import org.gotson.komga.infrastructure.jms.TOPIC_EVENTS -import org.gotson.komga.infrastructure.jms.TOPIC_FACTORY import org.springframework.boot.context.event.ApplicationReadyEvent import org.springframework.context.annotation.Profile import org.springframework.context.event.EventListener -import org.springframework.jms.annotation.JmsListener import org.springframework.stereotype.Component import java.util.concurrent.atomic.AtomicLong @@ -84,7 +81,7 @@ class MetricsPublisherController( .baseUnit("bytes") .register(meterRegistry) - @JmsListener(destination = TOPIC_EVENTS, containerFactory = TOPIC_FACTORY) + @EventListener private fun pushMetricsOnEvent(event: DomainEvent) { when (event) { is DomainEvent.LibraryScanned -> entitiesMultiTag.forEach { pushMetricsCount(it) } diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/sse/SseController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/sse/SseController.kt index 69c01d6e..d8a73c35 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/sse/SseController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/sse/SseController.kt @@ -9,8 +9,6 @@ import org.gotson.komga.domain.model.KomgaUser import org.gotson.komga.domain.persistence.BookRepository import org.gotson.komga.infrastructure.jms.JMS_PROPERTY_TYPE import org.gotson.komga.infrastructure.jms.QUEUE_TASKS -import org.gotson.komga.infrastructure.jms.TOPIC_EVENTS -import org.gotson.komga.infrastructure.jms.TOPIC_FACTORY import org.gotson.komga.infrastructure.security.KomgaPrincipal import org.gotson.komga.infrastructure.web.toFilePath import org.gotson.komga.interfaces.sse.dto.BookImportSseDto @@ -28,8 +26,8 @@ import org.gotson.komga.interfaces.sse.dto.ThumbnailReadListSseDto import org.gotson.komga.interfaces.sse.dto.ThumbnailSeriesCollectionSseDto import org.gotson.komga.interfaces.sse.dto.ThumbnailSeriesSseDto import org.springframework.context.SmartLifecycle +import org.springframework.context.event.EventListener import org.springframework.http.MediaType -import org.springframework.jms.annotation.JmsListener import org.springframework.jms.core.JmsTemplate import org.springframework.scheduling.annotation.Scheduled import org.springframework.security.core.annotation.AuthenticationPrincipal @@ -75,7 +73,7 @@ class SseController( } } - @JmsListener(destination = TOPIC_EVENTS, containerFactory = TOPIC_FACTORY) + @EventListener fun handleSseEvent(event: DomainEvent) { when (event) { is DomainEvent.LibraryAdded -> emitSse("LibraryAdded", LibrarySseDto(event.library.id))