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 debugPages = mutableListOf<Page<FreenetRequest>>()
22 private val registeredToadlets = mutableListOf<PageToadlet>()
23 private val registered = AtomicBoolean(false)
25 fun addPage(page: Page<FreenetRequest>) {
26 if (registered.get()) throw IllegalStateException()
30 fun addDebugPage(page: Page<FreenetRequest>) {
31 if (registered.get()) throw IllegalStateException()
35 fun registerToadlets() {
37 pageMaker.addNavigationCategory("/Sone/index.html", soneMenuName, "$soneMenu.Tooltip", sonePlugin)
41 private fun addPages(pages: List<Page<FreenetRequest>> = this.pages) =
43 .map { pageToadletFactory.createPageToadlet(it) }
44 .onEach(registeredToadlets::plusAssign)
45 .forEach { pageToadlet ->
46 if (pageToadlet.menuName == null) {
47 registerToadletWithoutMenuname(pageToadlet)
49 registerToadletWithMenuname(pageToadlet)
53 private fun registerToadletWithoutMenuname(pageToadlet: PageToadlet) =
54 toadletContainer.register(pageToadlet, null, pageToadlet.path(), true, false)
56 private fun registerToadletWithMenuname(pageToadlet: PageToadlet) =
57 toadletContainer.register(pageToadlet, soneMenuName, pageToadlet.path(), true, "$soneMenu.Item.${pageToadlet.menuName}.Name", "$soneMenu.Item.${pageToadlet.menuName}.Tooltip", false, pageToadlet)
59 fun unregisterToadlets() {
60 pageMaker.removeNavigationCategory(soneMenuName)
61 registeredToadlets.forEach(toadletContainer::unregister)
64 fun activateDebugMode() =