23 KiB
Todo List
- Tasks
[64%]
[41/64]
- Delete temp folder
- Update the last save file
- Adding move rows to service list
- Consider converting diesel to raw sqlx instead
- Figure out qml hot reload
- Switch to using rust only deletion functions.
- Start planning out what a 1.0 release would look like and decide how to get there
- REFACTORING THE BACKEND
- What is out
- What is In
- Major Bugs
- Fix inserting items from service bugs
- need to finish figuring out proper removal of slides
- There is still a bug in inserting items to the service list. The listview starts to stack items ontop of each other.
- Multi Select and Delete
- Items in library with missing videos or images don't show any helpful UI.
- Now there are bugs related to switch the slideModel in C++ to slide_model in Rust.
- slide_model.rs doesn't move slides right yet
- Song Model
- serivce_item_model
- Deployment
- Updating properties in models.
[4/5]
[80%]
- start and end times for videos
- A busy indicator while deleting library items
- presentations need to know their index of individual slides and count
- Organize and layout structure of rust code
- find song on SongSelect
- Create a setting for holding static slides and audios
- ffmpeg.rs
- ytdl.rs
- UI Blocks while saving
- give images an aspect ratio option
- Fix ImageEditor to make more sense for images
- Add image slideshow with looping
- Add image gallery options
- WAIT Make toolbar functional for
songeditor
[3/4]
[75%]
- Finish toolbar in presentation display
- WAIT nix-shell needs a little bit of work perhaps yet. But may be working under plasma just not minimal window managers using qt5ct.
- RENAME TO LUMINA
- Need to test on other wayland compositors but Hyprland doesn't show the presentation window.
- Database doesn't exist we crash
- new_song method
- Make things not rely on my own machine.
- get_lyric_list method
- Add video repeat pieces
- Make libraries and models aware of being selected.
- Library and ServiceList scrollbar is in the way
- bug in dragging servicelist items to reorder. Maybe I can fix with me simplified model system
- Check for edge cases in inputing wrong vorder and lyrics
- Fix possible bug in arrangingItems in draghandler
[1/3]
[33%]
- Build out a slide preview system so we can see each slide in the song or image slideshow
- Make serviceItemModel aware of being selected and active
- ServiceItemModel load needs to first look for on disk path and then the archive path
- Unload video when switching to something with just image
- Create a nextslide function to be used after the end of the list of slides
- To finish the UX of which item is active, the Presentation needs to switch to the active slide in the preview system.
- Images stored in sql need to have aspect saved and applied dynamically here
- VideoSQL Model and SQLite system needs fixing
- Add ability to use arrow keys to move through slides
- Make sure the video gets changed in a proper manner to not have left over video showing from previous items
- Add an audio file to the song so that it will play when the song is presented
- Make the hover effect of dragging items over the servicelist show in the correct spot at all times.
- add a dropping area in the library
- images and videos need a better get system
- Bug in mpv race condition with selecting with the presenter but not with the actual PresentationWindow.
- Find a way to maths the textsize
- Fix bug in not removing old slides in the SongEditor when switching songs from the Library
- Need to make
getLyricList
give back the verses with empty lines as separate slides - bug in changing slides with the arrows
- Fix broken append when importing River song
- implement previousSlide and previousAction
- Need to make ListModel capable of bringing in a string list
[2/2]
[100%]
- Make Presentation Window follow the presenter component
- Make an image sql model
- Parse Lyrics to create a list of strings for slides
- BUG in dropping and then selecting song will duplicate entries
- Make nextSlideText a nextAction function to incorporate other types of items
- Fix file dialog using basic QT theme
- Inbox
Tasks [64%]
[41/64]
DONE Delete temp folder
TODO Update the last save file
TODO Adding move rows to service list
/chris/lumina/src/commit/70eadeadb2bbb70f041831131ffc644c0bb43b7f/~/dev/lumina/src/rust/service_item_model.rs::pub%20fn%20move_rows%28 Since cxx-qt is having trouble compiling beginMoveRows for rust, I tried a wrapper function in C++ but that's causing an overflow in the slide_model after the signal. Actually I don't think a wrapper function should even work since the Rust model is the one that should be calling beginMoveRows, not the C++ model.
All that said, the real solution is to figure out how to get beginMoveRows to compile for rust, until then, implementing some wrapper functions and using beginResetModel instead will work for move_up and move_down.
TODO Consider converting diesel to raw sqlx instead
From what I can gather, sometimes an orm is just too hard to work around rather than doing raw sql queries
TODO Figure out qml hot reload
TODO Switch to using rust only deletion functions.
For this to work I'll need to use a vector of indexes. Somehow I'll need to figure out what QML can pass to Rust and then cycle through all of them and remove each item.
TODO Start planning out what a 1.0 release would look like and decide how to get there roadmap
A 1.0 release may be achievable soon as long as I can figure out what is good to have in and what isn't. Then figure out what outstanding bugs and odd workflows exist and fix them. Then figure out deploying the package to various distros, windows, and mac.
DONE REFACTORING THE BACKEND
A large portion of the back I am refactoring to create a slide class with a slide object for QML to look at as the master slide. Then a slide model for us to use to know for sure what the next slide will look like always and jump to it better within listviews and gridviews. Then use a serviceitemmodel that is aware of the slidemodel to know which slides belong to it. A lot of the UI will need to be refactored a bit to point to the new objects properly.
Could start working on moving slide.h and slide.cpp to a slide.rs. Then creating a slide_object.rs. Then maybe a service_item.rs. Creating these very basic classes in Rust would mean I start learning more and more Rust, and I would be preventing more memory bugs.
TODO What is out
Some of the special effects and things that I wanted to do could perhaps hold off. A lot of the things that I want to do to help make this really special could hold off. Blur, Color Adjustments, and Shadows for backgrounds and text and stuff can hold off for now. More of the special propresenter kind of things.
I had some scope creep. While working on a handful of things I started to transition things over to using Rust instead of C++ with CXX-QT. In the end, I believe this to be a MUCH better move since so much of C++ is dangerous in a lot of ways and I am not confident in my abilities as a developer to make sure I'm not creating memory bugs.
In some ways, this made things harder, Rust does things differently and doesn't have quite as many niceties as QT's built in stuff, but in the end, I do think it'll mean good things. Also, having this built this way may pave the way for others to build QT apps in Rust.
Others:
- Detail Layout
- Effects
- Overall Search
TODO What is In
I need to make the UI fit so much better. A lot of making the UI work is going to start being top priority. So for starters.
Since moving to Rust, I'm going to include that all of the models except maybe the serviceitemmodel should be finished in Rust in order for this to be ready to release.
Others:
- Multi Drag? Maybe…
- Adding the ability to use Librepresenter in other wayland compositors - Need to address the QWindow problem.
DONE Major Bugs
Drag and Drop of ServiceList
this is fixed, but now I need to move the slides around as you change the serviceItemModel- UI Blocking when saving
DONE Fix inserting items from service bugs
DONE need to finish figuring out proper removal of slides
DONE There is still a bug in inserting items to the service list. The listview starts to stack items ontop of each other.
DONE Multi Select and Delete
Need to figure out multi delete of libraries. Selection is working but after 1 item is deleted, the model resets and then breaks my selection list…
I think i need deletion functions in all models
DONE Items in library with missing videos or images don't show any helpful UI.
DONE Now there are bugs related to switch the slideModel in C++ to slide_model in Rust.
I'll need to make sure I'm removing the right slide after a serviceItem is removed and then move them as well.
DONE slide_model.rs doesn't move slides right yet
Either their index in the vector is wrong or their service_item_id is wrong. So my next approach will be to move slides individually rather than all at once?
DONE Song Model
This still needs ported to Rust. It'll be the hardest of the library models since it includes the song lyric parsing functions.
TODO [A] serivce_item_model
This needs to get ported to rust so that I can start adding more features to it soon. This is a blocker for the start and end times I believe
This is now a much higher priority since I need to get this done before a lot of other things are even possible. Video times and presentation indexes will probably rely on this.
Maybe the first approach is to scan through the rest of the C++ code and see what I can easily move to rust fast. Things like moving items are a more involved set of steps.
Start with select, deselect, select_items, and deactivate. Then either move onto save or move things…
- Select
- Activate
- Deselect
- Select Items
- Deactivate
- Load
- Save
TODO Deployment
- Linux Need to figure out if I can use Nix to deploy in various fashions. Maybe I'll need to handcraft my own things for Arch, flatpak, and or snap.
- Windows
- Macos
TODO
[A]
Updating properties in models. [4/5]
[80%]
All of the models need to be editable from the outside so that the editor pages a can appropriately change the properties of each item. I'll go in this order.
DONE Video
DONE Image
DONE Presentations
DONE Songs
Songs will be the hardest so I'll save them for last. They are not even using the rust models yet anyway. The key that I figured out is that instead of relying on the proxy model to map to the appropriate id inside the rust model. I'll store an id in the sqlite database and use that as a way to find each item. I'll need to keep tinkering with the best way to do that as right now I looped through all the items and that may get inefficient as models grow.
Another big blocker in this process is to make sure that all properties are accessed appropriately on the QML side. I need to update a lot of QML code yet.
TODO DATA CHANGED
Almost done here, but I can't get the data to emit the change and therefore inform the proxyModel of the changes and change it in the list view.
TODO [B] start and end times for videos feature
This is something I couldn't get right in my head and plans and I hope rust will help me to solve it.
TODO A busy indicator while deleting library items feature ui
TODO [B] presentations need to know their index of individual slides and count bug
Both PDFs and reveal.js presentations think every slide is the first one. I need a way of finding the individual components and then properly switching to the next one.
Switching to the next slide in reveal.js may be tricky since I'll need to push into the WebEngineView the next reveal function and then get back how many more slides and fragments there are.
TODO [A] Organize and layout structure of rust code maintenance
Since building a lot of the rust code felt more like an experiment, I've not kept it very well organized. I need to go through each model and rust module and organize them well and then decide what needs to be publicly available or not.
TODO find song on SongSelect feature
This function will need to include parsing through the HTML of the results page. Finding the first "song-result", then "song-result-title", and inside that tag is the name. In the URL is the CCLI number.
Lyrics will probably be better to grab from genius lyrics.
TODO Create a setting for holding static slides and audios feature
TODO [B] ffmpeg.rs feature
This still needs a lot of work.
TODO [B] ytdl.rs feature
This still needs a lot of work. Mostly error handling.
TODO UI Blocks while saving bug
This is waiting till we get the service_item_model.rs finished so we can use rust threads.
TODO [B] give images an aspect ratio option feature
TODO [B] Fix ImageEditor to make more sense for images ui
TODO Add image slideshow with looping feature
I could add this by adding a bool as a gallery option in the ImageSqlModel. Then add a loop bool as well. Then perhaps I'd ask if this image item contains a gallery and if so, make sure to loop through all of the filePaths as they could be saved as a list instead of a single filepath. Then decide on the last one whether or not to loop back to the beginning based on the loop bool in the image item.
TODO Add image gallery options feature
WAIT Make toolbar functional for songeditor
[3/4]
[75%]
core
- alignment
- font - Need to finish the UI portion of it
- fontsize - Need to finish the UI portion of it
- effects? For effects, I'm not 100% sure how to do this in an easy to build out way. Should I just do them the same as the other attributes or have effects be individually stored? Which effects to use? I'm thinking shadows for sure for readability on slides. Also, maybe I should have an effect of like glow? But maybe I'll come back to this after more of the core system is finished.
TODO Finish toolbar in presentation display ui
WAIT nix-shell needs a little bit of work perhaps yet. But may be working under plasma just not minimal window managers using qt5ct.
https://discourse.nixos.org/t/developing-kirigami-applications/19947/17 This thread helped a lot
DONE RENAME TO LUMINA
"Lumina" is a word derived from Latin, which means "lights" or "illuminations." It can be associated with brilliance, radiance, or the glow of light. In the context of a church presentation software, "Lumina" could represent the concept of shedding light, enlightenment, or guiding through visual presentations.
Let's rename everything to that.
DONE Need to test on other wayland compositors but Hyprland doesn't show the presentation window. bug
Quite by accident, I discovered how I may be able to fix this bug. Even though in QML I cannot show the window on demand, apparently in C++ I can still do it. So I will attempt to show the window by subclassing QQuickView in Rust and assign it's source through a QML file that is the PresentationWindow.qml
FIXED!
DONE Database doesn't exist we crash bug
Need to handle the error and create the database in case it doesn't exist with the proper setup.
DONE Let's copy it from the old comp to test
DONE Research diesel's ability to build the database for me
DONE Choose function to use
I've got diesel migrations to work and can essentially use that to initialize the database for me.
DONE Find proper error loading path that is earliest
I think songs are loaded first
DONE Create database
Simply having diesel load the database creates one if there isn't one there
DONE Load rest of app
Once the migration is done, the rest just loads since it's in the setup function of the songs.
DONE [A] new_song method feature bug
DONE [A] Make things not rely on my own machine. bug
Right now some of the paths are hardcoded and I need to fix that very fast so that everything will work on other machines.
DONE get_lyric_list method
/chris/lumina/src/commit/70eadeadb2bbb70f041831131ffc644c0bb43b7f/~/dev/church-presenter/src/rust/song_model.rs::todo!(); This is the big one. Previous implementation in cpp is here: /chris/lumina/src/commit/70eadeadb2bbb70f041831131ffc644c0bb43b7f/src/cpp/songsqlmodel.cpp::QStringList%20SongSqlModel::getLyricList%28const%20int%20&row%29
DONE Add video repeat pieces feature
This is possible with a toggle in the presenter but it'd be even better to have that built into the video model so that videos remember whether they should repeat. This would make sense in things like countdowns or video slideshows.
DONE Make libraries and models aware of being selected.
This allows us to drag multiple to service list and delete multiple. final part to this is allowing for multiple select and multiple move in service list or library
This is mostly done, just need to include the ability to multi select and then figure out multi drag.
DONE Library and ServiceList scrollbar is in the way bug ui
DONE bug in dragging servicelist items to reorder. Maybe I can fix with me simplified model system bug
I switched back to using Kirigami.dragHandler and properly implemented moveRows in the serviceItemModel
DONE Check for edge cases in inputing wrong vorder and lyrics core
Fix broken append when importing River song
Let's test this, because I think I fixed it. still extra bits on last slide
DONE
Fix possible bug in arrangingItems in draghandler [1/3]
[33%]
bug
- Basic fixed drag n drop
- Allow for a less buggy interaction I think one of the major problems has to do with moving the item while I am still draggin it. This means that I am then shifting the item's id whilst dragging and causing some unsuspected behavior? Not sure, need to maybe consult some one else if possible.
- Need to check for edge cases
DONE Build out a slide preview system so we can see each slide in the song or image slideshow ui
- Initial ListView with text coming from
getLyricList
- Depending on this Need to make getLyricList give back the verses with empty lines as separate slides
- Need to perhaps address the MPV crashing problem for a smoother experience.
Essentially, mpv objects cause a seg fault when we remove them from the qml graph scene and are somehow re-referencing them. Using
reuseItems
, I can prevent the seg fault but then we are storing a lot of things in memory and will definitely cause slowdowns on older hardware. So far I haven't seen too many problems with thereuseItems
piece yet. Apparently, I still have crashing Setting a really highcacheBuffer
in the ListView seems to have fixed the crashing, but will result in higher memory use. As of right now we are using 1.1Gb total, so I may think of a better solution later, but for now, that'll have to work. - There is also a small hiccup in switching between songs. I appears as if songs that don't have any slides will have ghost slides from the previously selected song.
- Another issue I discovered was that when switching to a song with videoBackgrounds, the mpv object doesn't ALWAYS load the first frame of the slide. Can I let the video play a tiny bit longer to make sure frames ALWAYS get loaded? That didn't work..
- There is one other issue with videoBackgrounds now going black on the second slide after switching to a slideModel. I need to check if the videos are the same and if so do nothing. fixed. Maybe I'll need to change something else but what?
DONE Make serviceItemModel aware of being selected and active
Being selected means that those items can be dragged or deleted or moved together. Being active, means that the singular item is the currently displayed item.
DONE ServiceItemModel load needs to first look for on disk path and then the archive path
Check audio and background first, if they don't exist, grab the file in the archive and put it in the local folder and use that path to create the serviceitem
DONE Unload video when switching to something with just image core bug
DONE Create a nextslide function to be used after the end of the list of slides slide
- Check to make sure this works in all conditions but I believe it works ok.
DONE To finish the UX of which item is active, the Presentation needs to switch to the active slide in the preview system.
- To make this work I think I'll need to make serviceitemmodel able to signal when a particular item is active and give it's index so the list can follow suit. nevermind, I can just check if it's active in the delegate.
DONE Images stored in sql need to have aspect saved and applied dynamically here core
/chris/lumina/src/commit/70eadeadb2bbb70f041831131ffc644c0bb43b7f/~/dev/church-presenter/src/qml/presenter/Slide.qml::fillMode:%20Image.PreserveAspectCrop I didn't save the aspect, but I applied it based on type of item first, we can change that later.
DONE VideoSQL Model and SQLite system needs fixing bug
DONE Add ability to use arrow keys to move through slides core feature
DONE Make sure the video gets changed in a proper manner to not have left over video showing from previous items video slide
- Build a basic system that changes to black first and then switches to the video
- Build out a loading system that will load the next video if it needs to and then the switch can be instant. The second option is the best, but requires a lot more work. I have the first already working so I'll come back to this once I have more of an idea of how to do it.
DONE Add an audio file to the song so that it will play when the song is presented feature song
- Add audio file to model
- add ui for adding audio file
- add extra mpv piece to slide to play audio file
DONE Make the hover effect of dragging items over the servicelist show in the correct spot at all times.
Believe I've fixed this
DONE add a dropping area in the library feature ui
- Basic droparea
- Determine which library to add to based on extension.
- Add a presentation model so that presentations can be added this way.
DONE images and videos need a better get system
DONE Bug in mpv race condition with selecting with the presenter but not with the actual PresentationWindow. bug
when selecting an item in the ServiceList, if the PresentationWindow isn't visible, it seems to prompt mpv to show a window of it's own with the video playing if the item contains a video.
DONE Find a way to maths the textsize slide
This may not be as needed. Apparently the text shrinks to fit it's space.
DONE Fix bug in not removing old slides in the SongEditor when switching songs from the Library bug
DONE
Need to make getLyricList
give back the verses with empty lines as separate slides core
DONE bug in changing slides with the arrows core
slides are inconsistent in changing from one slide to the next or previous. Both functions need looked at.
Maybe my best solution would be to architect a model or class for both the presentation controller and the presentation window to follow and do all the heavy lifting in there.
Finished the arrows working through a proper c++ class
DONE Fix broken append when importing River song
This was due to the song not having a vorder. Need to protect from edge cases of the user inputing the formatted text that doesn't fit what's expected in code.
DONE implement previousSlide and previousAction
DONE
Need to make ListModel capable of bringing in a string list [2/2]
[100%]
- Create a Model
- Create a class that we'll make a list of in the model
DONE [A] Make Presentation Window follow the presenter component core
Starting this by creating a slide singleton that will carry the variables for the current visible slide in the presentation.
May need to think about making this a slide class for all possible slides and a presentation singleton which carries the slide, but first I'll work out if this implementation works instead.
The left dock doesn't carry the change from the arrow buttons and the video on the actual presentation doesn't load.'
All pieces working now
DONE Make an image sql model
DONE Parse Lyrics to create a list of strings for slides
SCHEDULED: <2022-03-23 Wed 10:00>
DONE BUG in dropping and then selecting song will duplicate entries dev
SCHEDULED: <2022-04-05 Tue> /chris/lumina/src/commit/70eadeadb2bbb70f041831131ffc644c0bb43b7f/~/dev/church-presenter/src/qml/presenter/LeftDock.qml::Layout.fillHeight:%20true
or at least turns the entry above it into the same as itself while retaining it's title?