♻️ Extract a handler for new posts during first start
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / web / WebInterfaceModule.kt
1 package net.pterodactylus.sone.web
2
3 import com.google.common.eventbus.*
4 import com.google.inject.*
5 import freenet.support.api.*
6 import net.pterodactylus.sone.core.*
7 import net.pterodactylus.sone.data.*
8 import net.pterodactylus.sone.database.*
9 import net.pterodactylus.sone.freenet.*
10 import net.pterodactylus.sone.freenet.wot.*
11 import net.pterodactylus.sone.main.*
12 import net.pterodactylus.sone.template.*
13 import net.pterodactylus.sone.text.*
14 import net.pterodactylus.sone.web.notification.*
15 import net.pterodactylus.util.notify.*
16 import net.pterodactylus.util.template.*
17 import javax.inject.*
18 import javax.inject.Singleton
19
20 class WebInterfaceModule : AbstractModule() {
21
22         @Provides
23         @Singleton
24         fun getTemplateContextFactory(
25                         soneAccessor: SoneAccessor,
26                         postAccessor: PostAccessor,
27                         replyAccessor: ReplyAccessor,
28                         identityAccessor: IdentityAccessor,
29                         profileAccessor: ProfileAccessor,
30                         l10nFilter: L10nFilter,
31                         parserFilter: ParserFilter,
32                         renderFilter: RenderFilter,
33                         linkedElementsFilter: LinkedElementsFilter,
34                         unknownDateFilter: UnknownDateFilter,
35                         imageLinkFilter: ImageLinkFilter,
36                         loaders: Loaders
37         ) =
38                         TemplateContextFactory().apply {
39                                 addAccessor(Any::class.java, ReflectionAccessor())
40                                 addAccessor(Collection::class.java, CollectionAccessor())
41                                 addAccessor(Sone::class.java, soneAccessor)
42                                 addAccessor(Post::class.java, postAccessor)
43                                 addAccessor(Reply::class.java, replyAccessor)
44                                 addAccessor(Album::class.java, AlbumAccessor())
45                                 addAccessor(Image::class.java, ImageAccessor())
46                                 addAccessor(Identity::class.java, identityAccessor)
47                                 addAccessor(Trust::class.java, TrustAccessor())
48                                 addAccessor(HTTPRequest::class.java, HttpRequestAccessor())
49                                 addAccessor(Profile::class.java, profileAccessor)
50
51                                 addFilter("date", DateFilter())
52                                 addFilter("html", HtmlFilter())
53                                 addFilter("replace", ReplaceFilter())
54                                 addFilter("store", StoreFilter())
55                                 addFilter("l10n", l10nFilter)
56                                 addFilter("substring", SubstringFilter())
57                                 addFilter("xml", XmlFilter())
58                                 addFilter("change", RequestChangeFilter())
59                                 addFilter("match", MatchFilter())
60                                 addFilter("css", CssClassNameFilter())
61                                 addFilter("js", JavascriptFilter())
62                                 addFilter("parse", parserFilter)
63                                 addFilter("shorten", ShortenFilter())
64                                 addFilter("render", renderFilter)
65                                 addFilter("linked-elements", linkedElementsFilter)
66                                 addFilter("render-linked-element", LinkedElementRenderFilter())
67                                 addFilter("reparse", ReparseFilter())
68                                 addFilter("unknown", unknownDateFilter)
69                                 addFilter("format", FormatFilter())
70                                 addFilter("duration", DurationFormatFilter())
71                                 addFilter("sort", CollectionSortFilter())
72                                 addFilter("image-link", imageLinkFilter)
73                                 addFilter("replyGroup", ReplyGroupFilter())
74                                 addFilter("in", ContainsFilter())
75                                 addFilter("unique", UniqueElementFilter())
76                                 addFilter("mod", ModFilter())
77                                 addFilter("paginate", PaginationFilter())
78                                 addFilter("render-histogram", HistogramRenderer())
79
80                                 addProvider(TemplateProvider.TEMPLATE_CONTEXT_PROVIDER)
81                                 addProvider(loaders.templateProvider)
82                         }
83
84         @Provides
85         fun getSoneAccessor(core: Core, timeTextConverter: TimeTextConverter) =
86                         SoneAccessor(core, timeTextConverter)
87
88         @Provides
89         fun getPostAccessor(core: Core) =
90                         PostAccessor(core)
91
92         @Provides
93         fun getReplyAccessor(core: Core) =
94                         ReplyAccessor(core)
95
96         @Provides
97         fun getIdentityAccessor(core: Core) =
98                         IdentityAccessor(core)
99
100         @Provides
101         fun getProfileAccessor(core: Core) =
102                         ProfileAccessor(core)
103
104         @Provides
105         fun getL10nFilter(translation: Translation) =
106                         L10nFilter(translation)
107
108         @Provides
109         fun getParserFilter(core: Core, soneTextParser: SoneTextParser) =
110                         ParserFilter(core, soneTextParser)
111
112         @Provides
113         fun getRenderFilter(soneProvider: SoneProvider, soneTextParser: SoneTextParser, htmlFilter: HtmlFilter) =
114                         RenderFilter(soneProvider, soneTextParser, htmlFilter)
115
116         @Provides
117         fun getLinkedElementsFilter(elementLoader: ElementLoader) =
118                         LinkedElementsFilter(elementLoader)
119
120         @Provides
121         fun getUnknownDateFilter(translation: Translation) =
122                         UnknownDateFilter(translation, "View.Sone.Text.UnknownDate")
123
124         @Provides
125         fun getImageLinkFilter(core: Core) =
126                         ImageLinkFilter(core)
127
128         @Provides
129         @Named("toadletPathPrefix")
130         fun getPathPrefix(): String = "/Sone/"
131
132         @Provides
133         @Singleton
134         fun getNotificationManager() =
135                         NotificationManager()
136
137         @Provides
138         @Singleton
139         fun getNotificationHandler(eventBus: EventBus, loaders: Loaders, notificationManager: NotificationManager) =
140                         NotificationHandler(eventBus, loaders, notificationManager)
141
142 }