From: David ‘Bombe’ Roden Date: Sun, 10 Mar 2019 20:30:15 +0000 (+0100) Subject: ♻️ Use module for web interface X-Git-Tag: v79^2~71 X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=commitdiff_plain;h=f8b5fd8c832cbea8571fc9db9db6d6bc027b8e0f ♻️ Use module for web interface --- diff --git a/src/main/java/net/pterodactylus/sone/main/SonePlugin.java b/src/main/java/net/pterodactylus/sone/main/SonePlugin.java index f9bbe05..63279ab 100644 --- a/src/main/java/net/pterodactylus/sone/main/SonePlugin.java +++ b/src/main/java/net/pterodactylus/sone/main/SonePlugin.java @@ -30,12 +30,15 @@ import javax.inject.Singleton; import net.pterodactylus.sone.core.Core; import net.pterodactylus.sone.database.Database; +import net.pterodactylus.sone.database.PostProvider; +import net.pterodactylus.sone.database.SoneProvider; import net.pterodactylus.sone.database.memory.MemoryDatabase; import net.pterodactylus.sone.fcp.FcpInterface; import net.pterodactylus.sone.freenet.PluginStoreConfigurationBackend; import net.pterodactylus.sone.freenet.wot.Context; import net.pterodactylus.sone.freenet.wot.WebOfTrustConnector; import net.pterodactylus.sone.web.WebInterface; +import net.pterodactylus.sone.web.WebInterfaceModule; import net.pterodactylus.util.config.Configuration; import net.pterodactylus.util.config.ConfigurationException; import net.pterodactylus.util.config.MapConfigurationBackend; @@ -49,6 +52,7 @@ import com.google.common.eventbus.EventBus; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; +import com.google.inject.Module; import com.google.inject.TypeLiteral; import com.google.inject.matcher.Matchers; import com.google.inject.spi.InjectionListener; @@ -56,6 +60,7 @@ import com.google.inject.spi.TypeEncounter; import com.google.inject.spi.TypeListener; import freenet.client.async.PersistenceDisabledException; +import freenet.l10n.BaseL10n; import freenet.l10n.BaseL10n.LANGUAGE; import freenet.l10n.PluginL10n; import freenet.pluginmanager.FredPlugin; @@ -255,6 +260,9 @@ public class SonePlugin implements FredPlugin, FredPluginFCP, FredPluginL10n, Fr bind(PluginYear.class).toInstance(new PluginYear(getYear())); bind(PluginHomepage.class).toInstance(new PluginHomepage(getHomepage())); bind(Database.class).to(MemoryDatabase.class).in(Singleton.class); + bind(BaseL10n.class).toInstance(l10n.getBase()); + bind(SoneProvider.class).to(Core.class).in(Singleton.class); + bind(PostProvider.class).to(Core.class).in(Singleton.class); if (startConfiguration.getBooleanValue("Developer.LoadFromFilesystem").getValue(false)) { String path = startConfiguration.getStringValue("Developer.FilesystemPath").getValue(null); if (path != null) { @@ -282,7 +290,8 @@ public class SonePlugin implements FredPlugin, FredPluginFCP, FredPluginL10n, Fr } }; - Injector injector = Guice.createInjector(freenetModule, soneModule); + Module webInterfaceModule = new WebInterfaceModule(); + Injector injector = Guice.createInjector(freenetModule, soneModule, webInterfaceModule); core = injector.getInstance(Core.class); /* create web of trust connector. */ diff --git a/src/main/java/net/pterodactylus/sone/web/WebInterface.java b/src/main/java/net/pterodactylus/sone/web/WebInterface.java index 0b25ccd..1d9087f 100644 --- a/src/main/java/net/pterodactylus/sone/web/WebInterface.java +++ b/src/main/java/net/pterodactylus/sone/web/WebInterface.java @@ -61,49 +61,24 @@ import net.pterodactylus.sone.core.event.SoneLockedEvent; import net.pterodactylus.sone.core.event.SoneRemovedEvent; import net.pterodactylus.sone.core.event.SoneUnlockedEvent; import net.pterodactylus.sone.core.event.UpdateFoundEvent; -import net.pterodactylus.sone.data.Album; import net.pterodactylus.sone.data.Image; import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.PostReply; -import net.pterodactylus.sone.data.Profile; -import net.pterodactylus.sone.data.Reply; import net.pterodactylus.sone.data.Sone; import net.pterodactylus.sone.freenet.L10nFilter; -import net.pterodactylus.sone.freenet.wot.Identity; -import net.pterodactylus.sone.freenet.wot.Trust; import net.pterodactylus.sone.main.Loaders; import net.pterodactylus.sone.main.PluginHomepage; import net.pterodactylus.sone.main.PluginVersion; import net.pterodactylus.sone.main.PluginYear; -import net.pterodactylus.sone.main.ReparseFilter; import net.pterodactylus.sone.main.SonePlugin; import net.pterodactylus.sone.notify.ListNotification; import net.pterodactylus.sone.notify.ListNotificationFilter; import net.pterodactylus.sone.notify.PostVisibilityFilter; import net.pterodactylus.sone.notify.ReplyVisibilityFilter; -import net.pterodactylus.sone.template.AlbumAccessor; -import net.pterodactylus.sone.template.CollectionAccessor; -import net.pterodactylus.sone.template.CssClassNameFilter; -import net.pterodactylus.sone.template.HttpRequestAccessor; -import net.pterodactylus.sone.template.IdentityAccessor; -import net.pterodactylus.sone.template.ImageAccessor; -import net.pterodactylus.sone.template.ImageLinkFilter; -import net.pterodactylus.sone.template.JavascriptFilter; import net.pterodactylus.sone.template.LinkedElementRenderFilter; -import net.pterodactylus.sone.template.LinkedElementsFilter; import net.pterodactylus.sone.template.ParserFilter; -import net.pterodactylus.sone.template.PostAccessor; -import net.pterodactylus.sone.template.ProfileAccessor; import net.pterodactylus.sone.template.RenderFilter; -import net.pterodactylus.sone.template.ReplyAccessor; -import net.pterodactylus.sone.template.ReplyGroupFilter; -import net.pterodactylus.sone.template.RequestChangeFilter; import net.pterodactylus.sone.template.ShortenFilter; -import net.pterodactylus.sone.template.SoneAccessor; -import net.pterodactylus.sone.template.SubstringFilter; -import net.pterodactylus.sone.template.TrustAccessor; -import net.pterodactylus.sone.template.UniqueElementFilter; -import net.pterodactylus.sone.template.UnknownDateFilter; import net.pterodactylus.sone.text.Part; import net.pterodactylus.sone.text.SonePart; import net.pterodactylus.sone.text.SoneTextParser; @@ -187,21 +162,8 @@ import net.pterodactylus.sone.web.pages.ViewSonePage; import net.pterodactylus.util.notify.Notification; import net.pterodactylus.util.notify.NotificationManager; import net.pterodactylus.util.notify.TemplateNotification; -import net.pterodactylus.util.template.CollectionSortFilter; -import net.pterodactylus.util.template.ContainsFilter; -import net.pterodactylus.util.template.DateFilter; -import net.pterodactylus.util.template.FormatFilter; -import net.pterodactylus.util.template.HtmlFilter; -import net.pterodactylus.util.template.MatchFilter; -import net.pterodactylus.util.template.ModFilter; -import net.pterodactylus.util.template.PaginationFilter; -import net.pterodactylus.util.template.ReflectionAccessor; -import net.pterodactylus.util.template.ReplaceFilter; -import net.pterodactylus.util.template.StoreFilter; import net.pterodactylus.util.template.Template; import net.pterodactylus.util.template.TemplateContextFactory; -import net.pterodactylus.util.template.TemplateProvider; -import net.pterodactylus.util.template.XmlFilter; import net.pterodactylus.util.web.RedirectPage; import net.pterodactylus.util.web.TemplatePage; @@ -210,7 +172,6 @@ import freenet.clients.http.SessionManager.Session; import freenet.clients.http.ToadletContainer; import freenet.clients.http.ToadletContext; import freenet.l10n.BaseL10n; -import freenet.support.api.HTTPRequest; import com.google.common.base.Optional; import com.google.common.collect.Collections2; @@ -304,64 +265,28 @@ public class WebInterface implements SessionProvider { /** Scheduled executor for time-based notifications. */ private final ScheduledExecutorService ticker = Executors.newScheduledThreadPool(1); - /** - * Creates a new web interface. - * - * @param sonePlugin - * The Sone plugin - */ @Inject - public WebInterface(SonePlugin sonePlugin, Loaders loaders, ListNotificationFilter listNotificationFilter, PostVisibilityFilter postVisibilityFilter, ReplyVisibilityFilter replyVisibilityFilter, ElementLoader elementLoader) { + public WebInterface(SonePlugin sonePlugin, Loaders loaders, ListNotificationFilter listNotificationFilter, + PostVisibilityFilter postVisibilityFilter, ReplyVisibilityFilter replyVisibilityFilter, + ElementLoader elementLoader, TemplateContextFactory templateContextFactory, + ParserFilter parserFilter, ShortenFilter shortenFilter, + RenderFilter renderFilter, + LinkedElementRenderFilter linkedElementRenderFilter) { this.sonePlugin = sonePlugin; this.loaders = loaders; this.listNotificationFilter = listNotificationFilter; this.postVisibilityFilter = postVisibilityFilter; this.replyVisibilityFilter = replyVisibilityFilter; this.elementLoader = elementLoader; + this.parserFilter = parserFilter; + this.shortenFilter = shortenFilter; + this.renderFilter = renderFilter; + this.linkedElementRenderFilter = linkedElementRenderFilter; formPassword = sonePlugin.pluginRespirator().getToadletContainer().getFormPassword(); soneTextParser = new SoneTextParser(getCore(), getCore()); l10nFilter = new L10nFilter(getL10n()); - templateContextFactory = new TemplateContextFactory(); - templateContextFactory.addAccessor(Object.class, new ReflectionAccessor()); - templateContextFactory.addAccessor(Collection.class, new CollectionAccessor()); - templateContextFactory.addAccessor(Sone.class, new SoneAccessor(getCore(), new TimeTextConverter())); - templateContextFactory.addAccessor(Post.class, new PostAccessor(getCore())); - templateContextFactory.addAccessor(Reply.class, new ReplyAccessor(getCore())); - templateContextFactory.addAccessor(Album.class, new AlbumAccessor()); - templateContextFactory.addAccessor(Image.class, new ImageAccessor()); - templateContextFactory.addAccessor(Identity.class, new IdentityAccessor(getCore())); - templateContextFactory.addAccessor(Trust.class, new TrustAccessor()); - templateContextFactory.addAccessor(HTTPRequest.class, new HttpRequestAccessor()); - templateContextFactory.addAccessor(Profile.class, new ProfileAccessor(getCore())); - templateContextFactory.addFilter("date", new DateFilter()); - templateContextFactory.addFilter("html", new HtmlFilter()); - templateContextFactory.addFilter("replace", new ReplaceFilter()); - templateContextFactory.addFilter("store", new StoreFilter()); - templateContextFactory.addFilter("l10n", l10nFilter); - templateContextFactory.addFilter("substring", new SubstringFilter()); - templateContextFactory.addFilter("xml", new XmlFilter()); - templateContextFactory.addFilter("change", new RequestChangeFilter()); - templateContextFactory.addFilter("match", new MatchFilter()); - templateContextFactory.addFilter("css", new CssClassNameFilter()); - templateContextFactory.addFilter("js", new JavascriptFilter()); - templateContextFactory.addFilter("parse", parserFilter = new ParserFilter(getCore(), soneTextParser)); - templateContextFactory.addFilter("shorten", shortenFilter = new ShortenFilter()); - templateContextFactory.addFilter("render", renderFilter = new RenderFilter(getCore(), soneTextParser, new HtmlFilter())); - templateContextFactory.addFilter("linked-elements", new LinkedElementsFilter(elementLoader)); - templateContextFactory.addFilter("render-linked-element", linkedElementRenderFilter = new LinkedElementRenderFilter(templateContextFactory)); - templateContextFactory.addFilter("reparse", new ReparseFilter()); - templateContextFactory.addFilter("unknown", new UnknownDateFilter(getL10n(), "View.Sone.Text.UnknownDate")); - templateContextFactory.addFilter("format", new FormatFilter()); - templateContextFactory.addFilter("sort", new CollectionSortFilter()); - templateContextFactory.addFilter("image-link", new ImageLinkFilter(getCore())); - templateContextFactory.addFilter("replyGroup", new ReplyGroupFilter()); - templateContextFactory.addFilter("in", new ContainsFilter()); - templateContextFactory.addFilter("unique", new UniqueElementFilter()); - templateContextFactory.addFilter("mod", new ModFilter()); - templateContextFactory.addFilter("paginate", new PaginationFilter()); - templateContextFactory.addProvider(TemplateProvider.TEMPLATE_CONTEXT_PROVIDER); - templateContextFactory.addProvider(loaders.getTemplateProvider()); + this.templateContextFactory = templateContextFactory; templateContextFactory.addTemplateObject("webInterface", this); templateContextFactory.addTemplateObject("formPassword", formPassword);