#+TITLE: Todo List :PROPERTIES: :CATEGORY: dev :END: * Tasks [53%] [15/28] ** TODO add a dropping area in the library :feature:ui: - [X] Basic droparea - [X] Determine which library to add to based on extension. - [ ] Add a presentation model so that presentations can be added this way. ** TODO bug in dragging servicelist items to reorder. Maybe I can fix with me simplified model system :bug: ** TODO VideoSQL Model and SQLite system needs fixing :bug: [[file:src/videosqlmodel.cpp::if (!query.exec("CREATE TABLE IF NOT EXISTS 'videos' ("]] ** TODO Build out a slide preview system so we can see each slide in the song or image slideshow :ui: [[file:~/dev/church-presenter/src/qml/presenter/SongEditor.qml::Presenter.SlideEditor {]] - [X] Initial ListView with text coming from =getLyricList= - [X] Depending on this [[*Need to make getLyricList give back the verses with empty lines as separate slides][Need to make getLyricList give back the verses with empty lines as separate slides]] - [X] 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 the =reuseItems= piece yet. Apparently, I still have crashing Setting a really high =cacheBuffer= 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. - [X] 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.. Maybe I'll need to change something else but what? ** WAIT Make toolbar functional for =songeditor= [3/4] [75%] :core: [[file:~/dev/church-presenter/src/qml/presenter/SongEditor.qml::Controls.ToolBar {]] - [X] alignment - [X] font - Need to finish the UI portion of it - [X] 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 Check for edge cases in inputing wrong vorder and lyrics :core: [[file:~/dev/church-presenter/TODO.org::*Fix broken append when importing River song][Fix broken append when importing River song]] Let's test this, because I think I fixed it. ** TODO Fix possible bug in arrangingItems in draghandler [1/3] [33%] :bug: [[file:~/dev/church-presenter/src/qml/presenter/DragHandle.qml::function arrangeItem() {]] - [X] Basic fixed drag n drop - [ ] Allow for a less buggy interaction - [ ] Need to check for edge cases ** TODO Make the hover effect of dragging items over the servicelist show in the correct spot at all times. ** TODO Images stored in sql need to have aspect saved and applied dynamically here :core: [[file:~/dev/church-presenter/src/qml/presenter/Slide.qml::fillMode: Image.PreserveAspectCrop]] ** TODO Finish toolbar in presentation display :ui: [[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::Controls.ToolBar {]] ** TODO Make sure the video gets changed in a proper manner to not have left over video showing from previous items :video:slide: [[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::currentServiceItem++;]] - [X] 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. ** TODO Create a nextslide function to be used after the end of the list of slides :slide: [[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::function nextSlide() {]] - [ ] Check to make sure this works in all conditions but I believe it works ok. ** 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 images and videos need a better get system [[file:~/dev/church-presenter/src/videosqlmodel.cpp::QVariantList VideoSqlModel::getVideo(const int &row) {]] ** 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: [[file:~/dev/church-presenter/src/qml/presenter/Slide.qml::property real textSize: 50]] 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: [[file:~/dev/church-presenter/src/songsqlmodel.cpp:://TODO make sure to split empty line in verse into two slides]] ** DONE bug in changing slides with the arrows :core: [[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::function changeSlide() {]] 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 [[file:~/dev/church-presenter/src/qml/presenter/LeftDock.qml::function appendItem(name, type, background, backgroundType, text, itemID) {]] 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 [[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::function nextSlide() {]] ** DONE Need to make ListModel capable of bringing in a string list [2/2] [100%] - [X] Create a Model - [X] Create a class that we'll make a list of in the model ** DONE [#A] Make Presentation Window follow the presenter component :core: [[file:~/dev/church-presenter/src/qml/presenter/MainWindow.qml::Presenter.Slide {]] 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 [[file:~/dev/church-presenter/src/videosqlmodel.h::ifndef VIDEOSQLMODEL_H]] ** 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> [[file:~/dev/church-presenter/src/qml/presenter/LeftDock.qml::Layout.fillHeight: true]] or at least turns the entry above it into the same as itself while retaining it's title? ** DONE Make nextSlideText a nextAction function to incorporate other types of items [[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::function nextSlideText() {]] ** DONE Fix file dialog using basic QT theme [[file:~/dev/church-presenter/src/qml/presenter/SongEditor.qml::FileDialog {]]