🎨 Reduce dependency on Node’s fields
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / main / FreenetModule.kt
1 package net.pterodactylus.sone.main
2
3 import com.google.inject.*
4 import freenet.client.*
5 import freenet.client.async.ClientContext
6 import freenet.client.async.USKManager
7 import freenet.clients.http.*
8 import freenet.node.*
9 import freenet.pluginmanager.*
10 import net.pterodactylus.sone.freenet.DefaultHighLevelSimpleClientCreator
11 import net.pterodactylus.sone.freenet.HighLevelSimpleClientCreator
12 import net.pterodactylus.sone.freenet.plugin.*
13 import javax.inject.Provider
14 import javax.inject.Singleton
15
16 /**
17  * Guice [Module] that supplies some objects that are in fact supplied by the Freenet node.
18  */
19 class FreenetModule(private val pluginRespirator: PluginRespirator) : Module {
20
21         override fun configure(binder: Binder): Unit = binder.run {
22                 bind(PluginRespiratorFacade::class.java).toProvider(Provider { FredPluginRespiratorFacade(pluginRespirator) }).`in`(Singleton::class.java)
23                 bind(PluginConnector::class.java).to(FredPluginConnector::class.java).`in`(Singleton::class.java)
24                 bind(Node::class.java).toProvider(Provider { pluginRespirator.node })
25                 bind(HighLevelSimpleClient::class.java).toProvider(Provider<HighLevelSimpleClient> { pluginRespirator.hlSimpleClient!! })
26                 bind(ToadletContainer::class.java).toProvider(Provider<ToadletContainer> { pluginRespirator.toadletContainer })
27                 bind(PageMaker::class.java).toProvider(Provider<PageMaker> { pluginRespirator.pageMaker })
28         }
29
30         @Provides
31         @Singleton
32         fun getSessionManager() = pluginRespirator.getSessionManager("Sone")!!
33
34         @Provides
35         fun getNodeClientCore(node: Node): NodeClientCore =
36                 node.clientCore
37
38         @Provides
39         fun getHighLevelSimpleClientCreator(nodeClientCore: NodeClientCore): HighLevelSimpleClientCreator =
40                 DefaultHighLevelSimpleClientCreator(nodeClientCore)
41
42         @Provides
43         fun getClientContext(nodeClientCore: NodeClientCore): ClientContext =
44                 nodeClientCore.clientContext
45
46         @Provides
47         fun getUskManager(nodeClientCore: NodeClientCore): USKManager =
48                 nodeClientCore.uskManager
49
50 }