Checkout this Quelea expansion pack build with Improvements and experimental features!

Here is something pretty cool: 3rd party plugins!!!
Since I did a service manager/init system it ended up being really easy. So i just went for it.
Also in the repo there is an example template how to create the plugin you can see below.
The example is a simple timer process with some UI and dynamic menu entry.
plugins


Some interesting points to note:

  • Overall it’s pretty robust, you can load them during runtime, and you can restart any services for whatever reason. So it’s pretty great.
  • The plugin subscribes to the service manager and the theme manager and loads assets from within the directory that it’s found in.
  • If during start there is a problem the indicator will be in red.
  • If there is an error during attachment it won’t show up. i guess we can put a message it was detected but failed to load.
  • Fancy python code ? Sure use whatever. Just needs a Gradle entry and you can do just about anything.
  • During development, the plugin can be initialized with service manager as normal service code.
    When done the code is moved to the plugin directory (see example) and we give it a name and a starting point.
  • Actually, the InteliJ Idea’s debugger will attach to the .java files just fine even if we initialize it from the JAR externally which is good for deployment testing.
  • Then we place the JAR file into .quelea/plugins and that’s it. No fuss no buzz

======================================
P.S. I have put there just about anything we could want at this point. I think the only thing missing to take it to superhero level is a multimedia engine which deals with routing of sources, sinks, muxes, layers, filters etc.
I have 0 incentive to build that, although to me it would be only a bit harder than what I have done so far.
I kinda “hate” Java a bit too… anyway.
In theory having control over the item data flow would allow for any kind of cool configuration. e.g. :

  • multiple projectors
  • allowing each to have a specific layer: each could put a different theme on the song
  • We route to NDI, or OBS, or web specific layers or whatever we want.
  • Dealing and routing with audio would also be amazing.

And of course having dynamic items like mini clips.