* Kotlin to 2.0.20.
* JUnit to 4.13.2.
* Mockito to 4.11.0.
* Hamcrest to 3.0.
* Jsoup to 1.18.1.
* javax.activation to jakarta.activation 2.1.3.
* jsr305 from findBugs to spotbugs 4.8.6.
* Codahale Metrics to 4.2.27.
* Jackson to 2.18.0.
* Guava to 33.3.1.
* Guice to 7.0.0.
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
- id 'org.jetbrains.kotlin.jvm' version '1.7.10'
- id 'org.jetbrains.kotlin.plugin.noarg' version '1.7.10'
+ id 'org.jetbrains.kotlin.jvm' version '2.0.20'
+ id 'org.jetbrains.kotlin.plugin.noarg' version '2.0.20'
id 'info.solidsoft.pitest' version '1.7.4'
id 'jacoco'
}
implementation group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.3.0-RC'
implementation group: 'net.pterodactylus', name: 'utils', version: '0.13.1'
- implementation group: 'com.google.inject', name: 'guice', version: '4.2.2'
- implementation group: 'com.google.guava', name: 'guava', version: '27.0.1-jre'
- implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.1'
- implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.9.1'
- implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2'
- implementation group: 'org.jsoup', name: 'jsoup', version: '1.10.2'
- implementation group: 'io.dropwizard.metrics', name: 'metrics-core', version: '4.1.0'
- implementation group: 'javax.activation', name: 'javax.activation-api', version: '1.2.0'
+ implementation group: 'com.google.inject', name: 'guice', version: '7.0.0'
+ implementation group: 'com.google.guava', name: 'guava', version: '33.3.1-jre'
+ implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.18.0'
+ implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.18.0'
+ implementation group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.6'
+ implementation group: 'org.jsoup', name: 'jsoup', version: '1.18.1'
+ implementation group: 'io.dropwizard.metrics', name: 'metrics-core', version: '4.2.27'
+ implementation group: 'jakarta.activation', name: 'jakarta.activation-api', version: '2.1.3'
testImplementation group: 'org.jetbrains.kotlin', name: 'kotlin-test-junit'
- testImplementation group: 'junit', name: 'junit', version: '4.11'
- testImplementation group: 'org.mockito', name: 'mockito-core', version: '3.12.4'
- testImplementation group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3'
+ testImplementation group: 'junit', name: 'junit', version: '4.13.2'
+ testImplementation group: 'org.mockito', name: 'mockito-core', version: '4.11.0'
+ testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '3.0'
}
apply from: 'version.gradle'
import java.util.logging.Logger;
import javax.annotation.Nonnull;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import net.pterodactylus.sone.core.event.ImageInsertAbortedEvent;
import net.pterodactylus.sone.core.event.ImageInsertFailedEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import net.pterodactylus.sone.core.FreenetInterface.InsertToken;
import net.pterodactylus.sone.core.FreenetInterface.InsertTokenSupplier;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import net.pterodactylus.sone.data.Sone;
import net.pterodactylus.sone.data.Sone.SoneStatus;
import java.util.logging.*;
import javax.annotation.*;
-import javax.inject.*;
+import jakarta.inject.*;
import net.pterodactylus.sone.data.*;
import net.pterodactylus.sone.data.Profile.*;
import java.util.logging.Logger;
import javax.annotation.Nonnull;
-import javax.inject.Singleton;
+import jakarta.inject.Singleton;
import net.pterodactylus.sone.core.Core;
import net.pterodactylus.sone.fcp.event.FcpInterfaceActivatedEvent;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import javax.inject.Singleton;
+import jakarta.inject.Singleton;
import net.pterodactylus.sone.data.Post;
import net.pterodactylus.sone.data.Sone;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import javax.inject.Inject;
-import javax.inject.Singleton;
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
import net.pterodactylus.sone.data.Post;
import net.pterodactylus.sone.data.PostReply;
import java.util.Set;
-import javax.inject.Inject;
-import javax.inject.Singleton;
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
import net.pterodactylus.sone.core.Core;
import net.pterodactylus.sone.freenet.wot.Identity;
import freenet.keys.FreenetURI
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
import java.io.ByteArrayInputStream
import java.net.URLDecoder
import java.nio.charset.Charset
import java.text.Normalizer
import java.util.concurrent.TimeUnit.MINUTES
import java.util.logging.Logger
-import javax.activation.MimeType
import javax.imageio.ImageIO
-import javax.inject.Inject
+import jakarta.activation.MimeType
+import jakarta.inject.Inject
/**
* [ElementLoader] implementation that uses a simple Guava [com.google.common.cache.Cache].
private val Document.firstNonHeadingParagraph: String?
get() = body().select("div, p")
- .filter { it.textNodes().isNotEmpty() }
+ .filter { it: Element -> it.textNodes().isNotEmpty() }
.map { it to it.text() }
.firstOrNull { it.second != "" }
?.second
import java.util.*
import java.util.logging.*
import java.util.logging.Logger.*
-import javax.inject.Singleton
+import jakarta.inject.Singleton
/**
* Watches the official Sone homepage for new releases.
import net.pterodactylus.sone.database.*
import net.pterodactylus.sone.utils.*
import java.util.logging.Logger
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* An `UpdatedSoneProcessor` is called to process a [Sone] after it has been
import com.google.common.collect.TreeMultimap
import com.google.common.util.concurrent.AbstractService
import com.google.common.util.concurrent.RateLimiter
-import com.google.inject.Inject
import com.google.inject.Singleton
+import jakarta.inject.Inject
import net.pterodactylus.sone.data.Album
import net.pterodactylus.sone.data.Image
import net.pterodactylus.sone.data.Post
@Singleton
class MemoryDatabase constructor(private val configuration: Configuration, private val saveKnownPostRepliesRateLimiter: RateLimiter) : AbstractService(), Database {
- @javax.inject.Inject constructor(configuration: Configuration): this(configuration, RateLimiter.create(1.0))
+ @Inject constructor(configuration: Configuration): this(configuration, RateLimiter.create(1.0))
private val lock = ReentrantReadWriteLock()
private val readLock: ReadLock by lazy { lock.readLock() }
import freenet.support.api.*
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
-import javax.inject.*
+import jakarta.inject.*
/**
* [PluginConnector] implementation that uses a [PluginRespiratorFacade] and coroutines to send
import freenet.pluginmanager.*
import freenet.support.*
import freenet.support.api.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Facade for the only method of a [plugin respirator][PluginRespirator] that Sone actually uses,
import net.pterodactylus.sone.utils.*
import java.util.concurrent.atomic.*
import java.util.function.*
-import javax.inject.*
+import jakarta.inject.*
/**
* [Runnable] that is scheduled via an [Executor][java.util.concurrent.Executor],
import net.pterodactylus.sone.freenet.DefaultHighLevelSimpleClientCreator
import net.pterodactylus.sone.freenet.HighLevelSimpleClientCreator
import net.pterodactylus.sone.freenet.plugin.*
-import javax.inject.Provider
-import javax.inject.Singleton
+import jakarta.inject.Provider
+import jakarta.inject.Singleton
/**
* Guice [Module] that supplies some objects that are in fact supplied by the Freenet node.
import java.util.concurrent.*
import java.util.concurrent.Executors.*
import java.util.logging.Logger
-import javax.inject.*
-import javax.inject.Singleton
+import jakarta.inject.*
+import jakarta.inject.Singleton
open class SoneModule(private val sonePlugin: SonePlugin, private val eventBus: EventBus) : AbstractModule() {
import com.google.common.eventbus.*
import net.pterodactylus.sone.core.event.*
import java.util.concurrent.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Wrapper around all [tickers][ScheduledExecutorService] used in Sone,
import net.pterodactylus.sone.data.Sone
import net.pterodactylus.sone.utils.ifTrue
import net.pterodactylus.util.notify.Notification
-import javax.inject.Inject
-import javax.inject.Singleton
+import jakarta.inject.Inject
+import jakarta.inject.Singleton
/**
* Filter for [ListNotification]s.
if (other !is ListNotification<*>) {
return false
}
- val listNotification = other as ListNotification<*>?
- if (!super.equals(listNotification)) {
+ if (!super.equals(other)) {
return false
}
- return (key == listNotification.key) && (realElements == listNotification.realElements)
+ return (key == other.key) && (realElements == other.realElements)
}
}
import net.pterodactylus.sone.text.SoneTextParserContext
import net.pterodactylus.util.template.Filter
import net.pterodactylus.util.template.TemplateContext
-import javax.inject.Inject
-import javax.inject.Singleton
+import jakarta.inject.Inject
+import jakarta.inject.Singleton
/**
* Parses a [String] into a number of [Part]s.
import net.pterodactylus.sone.data.*
import net.pterodactylus.sone.database.*
import net.pterodactylus.sone.utils.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Listens to [NewPostFoundEvent]s and [NewPostReplyFoundEvent], parses the
import net.pterodactylus.sone.utils.*
import org.bitpedia.util.*
import java.net.*
-import javax.inject.*
+import jakarta.inject.*
/**
* [Parser] implementation that can recognize Freenet URIs.
package net.pterodactylus.sone.web
import net.pterodactylus.sone.web.pages.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* Container for all web pages. This uses field injection because there are way too many pages
import net.pterodactylus.sone.data.Sone
import net.pterodactylus.sone.database.SoneProvider
import java.util.UUID
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* [SoneProvider] implementation based on Freenet’s [SessionManager].
import net.pterodactylus.sone.notify.ListNotification
import net.pterodactylus.sone.notify.PostVisibilityFilter
import net.pterodactylus.sone.notify.ReplyVisibilityFilter
-import javax.inject.Inject
-import javax.inject.Named
+import jakarta.inject.Inject
+import jakarta.inject.Named
/**
* Container for new elements that should be shown in the web interface.
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.web.*
import java.util.concurrent.atomic.*
-import javax.inject.*
+import jakarta.inject.*
private const val soneMenu = "Navigation.Menu.Sone"
private const val soneMenuName = "$soneMenu.Name"
import net.pterodactylus.sone.text.*
import net.pterodactylus.util.notify.*
import net.pterodactylus.util.template.*
-import javax.inject.*
-import javax.inject.Singleton
+import jakarta.inject.*
+import jakarta.inject.Singleton
class WebInterfaceModule : AbstractModule() {
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets the user bookmark a post.
import net.pterodactylus.sone.utils.*
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
-import javax.inject.*
+import jakarta.inject.*
/**
* AJAX handler that creates a new post.
import net.pterodactylus.sone.utils.*
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This AJAX page create a reply.
import net.pterodactylus.sone.utils.*
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This AJAX page deletes a post.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets the user delete a profile field.
import net.pterodactylus.sone.utils.*
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This AJAX page deletes a reply.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets the user dismiss a notification.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* Page that stores a user’s album modifications.
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.TemplateContext
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* Page that stores a user’s image modifications.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets the user rename a profile field.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets a Sone follow another Sone.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that retrieves the number of “likes” a [net.pterodactylus.sone.data.Post]
import net.pterodactylus.sone.utils.jsonObject
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* Renders linked elements after they have been loaded.
import net.pterodactylus.util.notify.TemplateNotification
import net.pterodactylus.util.template.TemplateContextFactory
import java.io.StringWriter
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX handler to return all current notifications.
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.Template
import net.pterodactylus.util.template.TemplateContextFactory
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* This AJAX handler retrieves information and rendered representation of a [Post].
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.Template
import net.pterodactylus.util.template.TemplateContextFactory
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* This AJAX page returns the details of a reply.
import net.pterodactylus.sone.web.page.*
import java.text.SimpleDateFormat
import java.util.TimeZone
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* The “get status” AJAX handler returns all information that is necessary to
package net.pterodactylus.sone.web.ajax
+import com.fasterxml.jackson.databind.node.ObjectNode
import net.pterodactylus.sone.freenet.L10nFilter
import net.pterodactylus.sone.text.TimeTextConverter
import net.pterodactylus.sone.utils.jsonObject
import net.pterodactylus.sone.web.page.*
import java.text.SimpleDateFormat
import java.util.TimeZone
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* Ajax page that returns a formatted, relative timestamp for replies or posts.
"tooltip" to synchronized(dateTimeFormatter) {
dateTimeFormatter.format(time)
})
- }.forEach { this@jsonObject.set(it.first, it.second) }
+ }.forEach { this@jsonObject.set<ObjectNode>(it.first, it.second) }
}
}
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* Returns the translation for a given key as JSON object.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets the user like a [net.pterodactylus.sone.data.Post].
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* Lets the user [lock][net.pterodactylus.sone.core.Core.lockSone] a [Sone][net.pterodactylus.sone.data.Sone].
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets the user mark a number of [net.pterodactylus.sone.data.Sone]s,
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets the user move a profile field up or down.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets the user unbookmark a post.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets a Sone unfollow another Sone.
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* AJAX page that lets the user unlike a [net.pterodactylus.sone.data.Post].
import net.pterodactylus.sone.utils.parameters
import net.pterodactylus.sone.web.WebInterface
import net.pterodactylus.sone.web.page.*
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* Lets the user [unlock][net.pterodactylus.sone.core.Core.unlockSone] a [Sone][net.pterodactylus.sone.data.Sone].
import com.google.common.eventbus.*
import net.pterodactylus.sone.core.event.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for [ConfigNotRead] events.
import com.google.common.eventbus.*
import net.pterodactylus.sone.core.event.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handles the notification shown on first start of Sone.
import net.pterodactylus.sone.data.*
import net.pterodactylus.sone.notify.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Notification handler for the various image-insert-related events.
import net.pterodactylus.sone.notify.ListNotification
import net.pterodactylus.sone.notify.hasFirstStartNotification
import net.pterodactylus.util.notify.NotificationManager
-import javax.inject.Inject
-import javax.inject.Named
+import jakarta.inject.Inject
+import jakarta.inject.Named
/**
* Handler for local posts.
import net.pterodactylus.sone.data.*
import net.pterodactylus.sone.notify.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for local replies.
import net.pterodactylus.sone.utils.*
import net.pterodactylus.util.notify.*
import java.util.function.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler that marks a [new][NewPostFoundEvent] [post][Post] as known while
import net.pterodactylus.sone.utils.*
import net.pterodactylus.util.notify.*
import java.util.function.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler that marks post replies [as known][net.pterodactylus.sone.core.Core.markReplyKnown]
import net.pterodactylus.sone.data.*
import net.pterodactylus.sone.notify.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for [NewPostFoundEvent]s that adds the new post to the “new posts” notification and
import net.pterodactylus.sone.data.*
import net.pterodactylus.sone.notify.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Notification handler for “new Sone discovered” events.
import com.google.common.eventbus.*
import net.pterodactylus.sone.core.event.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for the “new version” notification.
import net.pterodactylus.sone.freenet.wot.*
import net.pterodactylus.sone.text.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Container that causes notification handlers to be created and (more importantly) registered
import java.util.concurrent.*
import java.util.concurrent.TimeUnit.*
import java.util.function.*
-import javax.inject.*
-import javax.inject.Singleton
+import jakarta.inject.*
+import jakarta.inject.Singleton
/**
* Guice module for creating all notification handlers.
import net.pterodactylus.sone.notify.*
import net.pterodactylus.sone.utils.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for remote replies.
import net.pterodactylus.sone.core.event.*
import net.pterodactylus.sone.data.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for all notifications concerning Sone-insert events.
import net.pterodactylus.util.notify.*
import java.util.concurrent.*
import java.util.concurrent.atomic.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for [SoneLockedEvent]s and [SoneUnlockedEvent]s that can schedule notifications after
import net.pterodactylus.sone.data.*
import net.pterodactylus.sone.notify.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for [SoneLockedOnStartup][net.pterodactylus.sone.core.event.SoneLockedOnStartup] events
import net.pterodactylus.sone.data.*
import net.pterodactylus.sone.notify.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for the [MentionOfLocalSoneFoundEvent] and
import net.pterodactylus.util.notify.*
import java.util.concurrent.*
import java.util.concurrent.TimeUnit.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for the [Startup] event notification.
import com.google.common.eventbus.*
import net.pterodactylus.sone.core.event.*
import net.pterodactylus.util.notify.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Handler for web of trust-related notifications and the [WebOfTrustAppeared]
import freenet.client.*
import net.pterodactylus.util.web.*
-import javax.inject.*
+import jakarta.inject.*
class PageToadletFactory @Inject constructor(
private val highLevelSimpleClient: HighLevelSimpleClient,
import net.pterodactylus.util.template.*
import java.io.*
-import javax.inject.*
+import jakarta.inject.*
class TemplateRenderer @Inject constructor(private val templateContextFactory: TemplateContextFactory) {
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* A [SoneTemplatePage] that stores information about Sone in the [TemplateContext].
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user bookmark a post.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user browse all his bookmarked posts.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user create a new album.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user create a new [Post].
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user post a reply to a post.
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
import java.util.logging.*
-import javax.inject.*
+import jakarta.inject.*
import java.util.Locale
/**
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
@ToadletPath("debug")
class DebugPage @Inject constructor(webInterface: WebInterface, loaders: Loaders, templateRenderer: TemplateRenderer) :
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user delete an {@link Album}.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user delete an {@link Image}.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Lets the user delete a post they made.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user confirm the deletion of a profile field.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user delete a reply.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Lets the user delete a Sone. Of course the Sone is not really deleted from
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user dismiss a notification.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user edit the name and description of an album.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user edit title and description of an {@link Image}.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user edit the name of a profile field.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user edit her profile.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user follow another Sone.
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.web.*
import java.net.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that delivers a {@link TemporaryImage} to the browser.
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
import java.net.*
-import javax.inject.*
+import jakarta.inject.*
/**
* The image browser page is the entry page for the image management.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* The index page shows the main page of Sone. This page will contain the posts
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page shows all known Sones.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user like [net.pterodactylus.sone.data.Post]s and [net.pterodactylus.sone.data.Reply]s.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user lock a [net.pterodactylus.sone.data.Sone] to prevent it from being inserted.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* The login page lets the user log in.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Logs a user out.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user mark a number of [net.pterodactylus.sone.data.Sone]s, [Post]s, or
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
@MenuName("Metrics")
@TemplatePath("/templates/metrics.html")
import net.pterodactylus.sone.web.page.TemplateRenderer
import net.pterodactylus.sone.web.page.ToadletPath
import net.pterodactylus.util.template.TemplateContext
-import javax.inject.Inject
+import jakarta.inject.Inject
/**
* Page that displays all new posts and replies. The posts are filtered using
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user edit the options of the Sone plugin.
import net.pterodactylus.util.web.*
import java.io.*
-import javax.inject.*
+import jakarta.inject.*
/**
* [Page] implementation that delivers static files from the filesystem.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user control the rescue mode for a Sone.
import net.pterodactylus.util.template.*
import net.pterodactylus.util.text.*
import java.util.concurrent.TimeUnit.*
-import javax.inject.*
+import jakarta.inject.*
import java.util.Locale
/**
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user unbookmark a post.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user unfollow another Sone.
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page that lets the user unlike a [net.pterodactylus.sone.data.Post] or [net.pterodactylus.sone.data.Reply].
import net.pterodactylus.sone.web.*
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user unlock a [net.pterodactylus.sone.data.Sone] to allow its insertion.
import java.awt.image.*
import java.io.*
import javax.imageio.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Page implementation that lets the user upload an image.
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
import java.net.*
-import javax.inject.*
+import jakarta.inject.*
/**
* This page lets the user view a post and all its replies.
import net.pterodactylus.sone.web.page.*
import net.pterodactylus.util.template.*
import java.net.*
-import javax.inject.*
+import jakarta.inject.*
/**
* Lets the user browser another Sone.
metricRenderer.format(templateContext, histogram, parameters)
.let { "<table id='t'>$it</table>" }
.let(Jsoup::parseBodyFragment)
- .getElementById("t").child(0).child(0)
+ .getElementById("t")!!.child(0).child(0)
.let(verify)
private fun verifyColumnIsNumeric(column: Int) =
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.sameInstance
import org.mockito.Mockito
-import javax.inject.Provider
+import jakarta.inject.Provider
import kotlin.reflect.KClass
fun <T : Any> KClass<T>.isProvidedBy(instance: T) = Module { it.bind(this.java).toProvider(Provider<T> { instance }) }
jsonReturnObject.put("object", objectNode)
val json = objectMapper.writeValueAsString(jsonReturnObject)
val parsedJson = objectMapper.readTree(json)
- assertThat(parsedJson, equalTo<JsonNode>(ObjectNode(JsonNodeFactory.instance).apply {
+ assertThat(parsedJson, equalTo(ObjectNode(JsonNodeFactory.instance).apply {
put("success", true)
put("text", "text")
put("int", 123)
put("boolean", true)
- set("object", objectNode)
+ set<JsonNode>("object", objectNode)
}))
}
override fun sendReplyHeaders(code: Int, desc: String?, mvt: MultiValueTable<String, String>?, mimeType: String?, length: Long) = toadletContext.sendReplyHeaders(code, desc, mvt, mimeType, length)
override fun sendReplyHeaders(code: Int, desc: String?, mvt: MultiValueTable<String, String>?, mimeType: String?, length: Long, forceDisableJavascript: Boolean) = toadletContext.sendReplyHeaders(code, desc, mvt, mimeType, length, forceDisableJavascript)
@Suppress("DEPRECATION")
+ @Deprecated("Deprecated in ToadletContext")
override fun sendReplyHeaders(code: Int, desc: String?, mvt: MultiValueTable<String, String>?, mimeType: String?, length: Long, mTime: Date?) = toadletContext.sendReplyHeaders(code, desc, mvt, mimeType, length, mTime)
override fun getUri(): URI = toadletContext.uri
override fun getPageMaker(): PageMaker = toadletContext.pageMaker