1 package net.pterodactylus.sone.web
3 import freenet.clients.http.*
4 import net.pterodactylus.sone.main.*
5 import net.pterodactylus.sone.web.page.*
6 import net.pterodactylus.util.web.*
7 import java.util.concurrent.atomic.*
10 private const val soneMenu = "Navigation.Menu.Sone"
11 private const val soneMenuName = "$soneMenu.Name"
13 class PageToadletRegistry @Inject constructor(
14 private val pageMaker: PageMaker,
15 private val toadletContainer: ToadletContainer,
16 private val sonePlugin: SonePlugin,
17 private val pageToadletFactory: PageToadletFactory
20 private val pages = mutableListOf<Page<FreenetRequest>>()
21 private val registeredToadlets = mutableListOf<PageToadlet>()
22 private val registered = AtomicBoolean(false)
24 fun addPage(page: Page<FreenetRequest>) {
25 if (registered.get()) throw IllegalStateException()
29 fun registerToadlets() {
31 pageMaker.addNavigationCategory("/Sone/index.html", soneMenuName, "$soneMenu.Tooltip", sonePlugin)
35 private fun addPages() =
37 .map { pageToadletFactory.createPageToadlet(it) }
38 .onEach(registeredToadlets::plusAssign)
39 .forEach { pageToadlet ->
40 if (pageToadlet.menuName == null) {
41 registerToadletWithoutMenuname(pageToadlet)
43 registerToadletWithMenuname(pageToadlet)
47 private fun registerToadletWithoutMenuname(pageToadlet: PageToadlet) =
48 toadletContainer.register(pageToadlet, null, pageToadlet.path(), true, false)
50 private fun registerToadletWithMenuname(pageToadlet: PageToadlet) =
51 toadletContainer.register(pageToadlet, soneMenuName, pageToadlet.path(), true, "$soneMenu.Item.${pageToadlet.menuName}.Name", "$soneMenu.Item.${pageToadlet.menuName}.Tooltip", false, pageToadlet)
53 fun unregisterToadlets() {
54 pageMaker.removeNavigationCategory(soneMenuName)
55 registeredToadlets.forEach(toadletContainer::unregister)