making future proof refactor of image and video get system

This commit is contained in:
Chris Cochrun 2022-04-11 14:04:03 -05:00
parent 8d07c7355d
commit f1378cc1ff
8 changed files with 72 additions and 44 deletions

View file

@ -4,8 +4,8 @@
:END:
* Inbox
** TODO images and videos need a better get system
[[file:~/dev/church-presenter/src/videosqlmodel.cpp::QVariantList VideoSqlModel::getVideo(const int &row) {]]
** TODO Check for edge cases in inputing wrong vorder and lyrics
[[file:~/dev/church-presenter/TODO.org::*Fix broken append when importing River song][Fix broken append when importing River song]]
** TODO Images stored in sql need to have aspect saved and applied dynamically here
[[file:~/dev/church-presenter/src/qml/presenter/Slide.qml::fillMode: Image.PreserveAspectCrop]]
@ -13,9 +13,13 @@
** TODO Build out a slide preview system so we can see each slide in the song or image slideshow
[[file:~/dev/church-presenter/src/qml/presenter/SongEditor.qml::Presenter.SlideEditor {]]
** TODO Fix possible bug in arrangingItems in draghandler
** TODO Fix possible bug in arrangingItems in draghandler [1/3] [33%]
[[file:~/dev/church-presenter/src/qml/presenter/DragHandle.qml::function arrangeItem() {]]
- [X] Basic fixed dnd
- [ ] Allow for a less buggy interaction
- [ ] Need to check for edge cases
** TODO [#A] Make Presentation Window follow the presenter component
[[file:~/dev/church-presenter/src/qml/presenter/MainWindow.qml::Presenter.Slide {]]
@ -30,9 +34,6 @@
** TODO Find a way to maths the textsize
[[file:~/dev/church-presenter/src/qml/presenter/Slide.qml::property real textSize: 50]]
** TODO Fix broken append when importing River song
[[file:~/dev/church-presenter/src/qml/presenter/LeftDock.qml::function appendItem(name, type, background, backgroundType, text, itemID) {]]
** TODO Create a nextslide function to be used after the end of the list of slides
[[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::function nextSlide() {]]
@ -46,6 +47,14 @@
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 images and videos need a better get system
[[file:~/dev/church-presenter/src/videosqlmodel.cpp::QVariantList VideoSqlModel::getVideo(const int &row) {]]
** 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 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

View file

@ -157,13 +157,28 @@ void ImageSqlModel::updateFilePath(const int &row, const QUrl &filePath) {
emit filePathChanged();
}
QUrl ImageSqlModel::getImage(const int &row) {
qDebug() << "Row we are getting is " << row;
QUrl image;
QSqlRecord rec = record(row);
qDebug() << rec.value("filePath").toUrl();
// image.append(rec.value("title"));
// image.append(rec.value("filePath"));
image = rec.value("filePath").toUrl();
return image;
QVariantMap ImageSqlModel::getImage(const int &row) {
// qDebug() << "Row we are getting is " << row;
// QUrl image;
// QSqlRecord rec = record(row);
// qDebug() << rec.value("filePath").toUrl();
// // image.append(rec.value("title"));
// // image.append(rec.value("filePath"));
// image = rec.value("filePath").toUrl();
// return image;
QVariantMap data;
const QModelIndex idx = this->index(row,0);
// qDebug() << idx;
if( !idx.isValid() )
return data;
const QHash<int,QByteArray> rn = roleNames();
// qDebug() << rn;
QHashIterator<int,QByteArray> it(rn);
while (it.hasNext()) {
it.next();
qDebug() << it.key() << ":" << it.value();
data[it.value()] = idx.data(it.key());
}
return data;
}

View file

@ -31,7 +31,7 @@ public:
Q_INVOKABLE void newImage(const QUrl &filePath);
Q_INVOKABLE void deleteImage(const int &row);
Q_INVOKABLE QUrl getImage(const int &row);
Q_INVOKABLE QVariantMap getImage(const int &row);
QVariant data(const QModelIndex &index, int role) const override;
QHash<int, QByteArray> roleNames() const override;

View file

@ -43,18 +43,6 @@ Item {
implicitWidth: 100
hoverEnabled: true
}
Controls.ToolButton {
text: "B"
hoverEnabled: true
}
Controls.ToolButton {
text: "I"
hoverEnabled: true
}
Controls.ToolButton {
text: "U"
hoverEnabled: true
}
Controls.ToolSeparator {}
Item { Layout.fillWidth: true }
Controls.ToolSeparator {}
@ -66,7 +54,7 @@ Item {
}
Controls.ToolButton {
id: backgroundButton
text: "Background"
text: "Select Image"
icon.name: "fileopen"
hoverEnabled: true
onClicked: backgroundType.open()
@ -175,7 +163,7 @@ Item {
}
function changeImage(image) {
root.image = image;
print(image.toString());
root.image = image.filePath;
print(image.filePath.toString());
}
}

View file

@ -820,7 +820,7 @@ Item {
videoLibraryList.currentIndex = videosqlmodel.rowCount();
print(videosqlmodel.getVideo(videoLibraryList.currentIndex));
const video = videosqlmodel.getVideo(videoLibraryList.currentIndex);
showPassiveNotification("newest video: " + video);
showPassiveNotification("newest video: " + video.title);
if (!editMode)
editMode = true;
editSwitch("video", video);

View file

@ -138,7 +138,7 @@ Item {
Layout.rightMargin: 20
placeholderText: "Song Title..."
text: video[0]
text: video.title
padding: 10
/* onEditingFinished: updateTitle(text); */
}
@ -170,7 +170,7 @@ Item {
Component.onCompleted: mpvLoadingTimer.start()
onPositionChanged: videoSlider.value = position
onFileLoaded: {
showPassiveNotification(video[0] + " has been loaded");
showPassiveNotification(video.title + " has been loaded");
videoPreview.pause();
}
}
@ -220,7 +220,7 @@ Item {
id: mpvLoadingTimer
interval: 100
onTriggered: {
videoPreview.loadFile(video[1].toString());
videoPreview.loadFile(video.filePath.toString());
/* showPassiveNotification(video[0]); */
}
}

View file

@ -156,12 +156,28 @@ void VideoSqlModel::updateFilePath(const int &row, const QUrl &filePath) {
emit filePathChanged();
}
QVariantList VideoSqlModel::getVideo(const int &row) {
qDebug() << "Row we are getting is " << row;
QVariantList video;
QSqlRecord rec = record(row);
qDebug() << rec.value("title");
video.append(rec.value("title"));
video.append(rec.value("filePath"));
return video;
QVariantMap VideoSqlModel::getVideo(const int &row) {
// qDebug() << "Row we are getting is " << row;
// QVariantList video;
// QSqlRecord rec = record(row);
// qDebug() << rec.value("title");
// video.append(rec.value("title"));
// video.append(rec.value("filePath"));
// return video;
QVariantMap data;
const QModelIndex idx = this->index(row,0);
// qDebug() << idx;
if( !idx.isValid() )
return data;
const QHash<int,QByteArray> rn = roleNames();
// qDebug() << rn;
QHashIterator<int,QByteArray> it(rn);
while (it.hasNext()) {
it.next();
qDebug() << it.key() << ":" << it.value();
data[it.value()] = idx.data(it.key());
}
return data;
}

View file

@ -31,7 +31,7 @@ public:
Q_INVOKABLE void newVideo(const QUrl &filePath);
Q_INVOKABLE void deleteVideo(const int &row);
Q_INVOKABLE QVariantList getVideo(const int &row);
Q_INVOKABLE QVariantMap getVideo(const int &row);
QVariant data(const QModelIndex &index, int role) const override;
QHash<int, QByteArray> roleNames() const override;