using song_model now
This commit is contained in:
parent
68b30877ed
commit
184ad4fe57
4 changed files with 76 additions and 19 deletions
|
@ -722,7 +722,8 @@ QModelIndex SongSqlModel::idx(int row) {
|
||||||
SongProxyModel::SongProxyModel(QObject *parent)
|
SongProxyModel::SongProxyModel(QObject *parent)
|
||||||
:QSortFilterProxyModel(parent)
|
:QSortFilterProxyModel(parent)
|
||||||
{
|
{
|
||||||
m_songModel = new SongSqlModel;
|
m_songModel = new SongModel;
|
||||||
|
m_songModel->setup();
|
||||||
// m_selectionModel = new QItemSelectionModel;
|
// m_selectionModel = new QItemSelectionModel;
|
||||||
// m_selectionModel->setModel(this);
|
// m_selectionModel->setModel(this);
|
||||||
setSourceModel(m_songModel);
|
setSourceModel(m_songModel);
|
||||||
|
@ -731,7 +732,7 @@ SongProxyModel::SongProxyModel(QObject *parent)
|
||||||
setFilterCaseSensitivity(Qt::CaseInsensitive);
|
setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||||
}
|
}
|
||||||
|
|
||||||
SongSqlModel *SongProxyModel::songModel() {
|
SongModel *SongProxyModel::songModel() {
|
||||||
return m_songModel;
|
return m_songModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -742,7 +743,7 @@ QModelIndex SongProxyModel::idx(int row) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex SongProxyModel::modelIndex(int row) {
|
QModelIndex SongProxyModel::modelIndex(int row) {
|
||||||
QModelIndex idx = m_songModel->idx(mapToSource(index(row, 0)).row());
|
QModelIndex idx = m_songModel->index(mapToSource(index(row, 0)).row());
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -752,21 +753,21 @@ QStringList SongProxyModel::getLyricList(const int &row) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap SongProxyModel::getSong(const int &row) {
|
QVariantMap SongProxyModel::getSong(const int &row) {
|
||||||
QVariantMap song = m_songModel->getSong(mapToSource(index(row, 0)).row());
|
QVariantMap song = m_songModel->getItem(mapToSource(index(row, 0)).row());
|
||||||
return song;
|
return song;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SongProxyModel::deleteSong(const int &row) {
|
void SongProxyModel::deleteSong(const int &row) {
|
||||||
auto model = qobject_cast<SongSqlModel *>(sourceModel());
|
auto model = qobject_cast<SongModel *>(sourceModel());
|
||||||
model->deleteSong(row);
|
model->removeItem(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SongProxyModel::deleteSongs(const QVector<int> &rows) {
|
void SongProxyModel::deleteSongs(const QVector<int> &rows) {
|
||||||
auto model = qobject_cast<SongSqlModel *>(sourceModel());
|
auto model = qobject_cast<SongModel *>(sourceModel());
|
||||||
qDebug() << "DELETING!!!!!!!!!!!!!!!!!!!!!!!" << rows;
|
qDebug() << "DELETING!!!!!!!!!!!!!!!!!!!!!!!" << rows;
|
||||||
for (int i = rows.size() - 1; i >= 0; i--) {
|
for (int i = rows.size() - 1; i >= 0; i--) {
|
||||||
qDebug() << "deleting" << rows.at(i);
|
qDebug() << "deleting" << rows.at(i);
|
||||||
model->deleteSong(rows.at(i));
|
model->removeItem(rows.at(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <qobjectdefs.h>
|
#include <qobjectdefs.h>
|
||||||
#include <qqml.h>
|
#include <qqml.h>
|
||||||
#include <qvariant.h>
|
#include <qvariant.h>
|
||||||
|
#include "cxx-qt-gen/song_model.cxxqt.h"
|
||||||
|
|
||||||
class SongSqlModel : public QSqlTableModel
|
class SongSqlModel : public QSqlTableModel
|
||||||
{
|
{
|
||||||
|
@ -113,14 +114,14 @@ private:
|
||||||
class SongProxyModel : public QSortFilterProxyModel
|
class SongProxyModel : public QSortFilterProxyModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(SongSqlModel *songModel READ songModel)
|
Q_PROPERTY(SongModel *songModel READ songModel)
|
||||||
// Q_PROPERTY(bool hasSelection READ hasSelection NOTIFY selectedChanged)
|
// Q_PROPERTY(bool hasSelection READ hasSelection NOTIFY selectedChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit SongProxyModel(QObject *parent = nullptr);
|
explicit SongProxyModel(QObject *parent = nullptr);
|
||||||
~SongProxyModel() = default;
|
~SongProxyModel() = default;
|
||||||
|
|
||||||
SongSqlModel *songModel();
|
SongModel *songModel();
|
||||||
Q_INVOKABLE QModelIndex idx(int row);
|
Q_INVOKABLE QModelIndex idx(int row);
|
||||||
Q_INVOKABLE QModelIndex modelIndex(int row);
|
Q_INVOKABLE QModelIndex modelIndex(int row);
|
||||||
// Q_INVOKABLE bool selected(const int &row);
|
// Q_INVOKABLE bool selected(const int &row);
|
||||||
|
@ -142,7 +143,7 @@ signals:
|
||||||
// Q_INVOKABLE void selectedChanged(bool selected);
|
// Q_INVOKABLE void selectedChanged(bool selected);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SongSqlModel *m_songModel;
|
SongModel *m_songModel;
|
||||||
// QItemSelectionModel *m_selectionModel;
|
// QItemSelectionModel *m_selectionModel;
|
||||||
// bool m_selected;
|
// bool m_selected;
|
||||||
};
|
};
|
||||||
|
|
|
@ -435,7 +435,7 @@ Item {
|
||||||
function changeSong(index) {
|
function changeSong(index) {
|
||||||
clearSlides();
|
clearSlides();
|
||||||
console.log(index);
|
console.log(index);
|
||||||
song = songProxyModel.songModel.getSong(index);
|
song = songProxyModel.getSong(index);
|
||||||
console.log(song.lyrics);
|
console.log(song.lyrics);
|
||||||
songIndex = song.id;
|
songIndex = song.id;
|
||||||
|
|
||||||
|
@ -581,7 +581,7 @@ Item {
|
||||||
|
|
||||||
function changeSlideText(id) {
|
function changeSlideText(id) {
|
||||||
/* console.log("Here are the verses: " + verses); */
|
/* console.log("Here are the verses: " + verses); */
|
||||||
const verses = songProxyModel.songModel.getLyricList(id);
|
const verses = songProxyModel.getLyricList(id);
|
||||||
verses.forEach(slideEditor.appendVerse);
|
verses.forEach(slideEditor.appendVerse);
|
||||||
/* slideEditor.loadVideo(); */
|
/* slideEditor.loadVideo(); */
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ mod song_model {
|
||||||
use crate::song_model::song_model::Song;
|
use crate::song_model::song_model::Song;
|
||||||
use diesel::sqlite::SqliteConnection;
|
use diesel::sqlite::SqliteConnection;
|
||||||
use diesel::{delete, insert_into, prelude::*, update};
|
use diesel::{delete, insert_into, prelude::*, update};
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
unsafe extern "C++" {
|
unsafe extern "C++" {
|
||||||
|
@ -92,7 +93,7 @@ mod song_model {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[qinvokable]
|
#[qinvokable]
|
||||||
pub fn test_database(mut self: Pin<&mut Self>) {
|
pub fn setup(mut self: Pin<&mut Self>) {
|
||||||
let db = &mut self.as_mut().get_db();
|
let db = &mut self.as_mut().get_db();
|
||||||
let results = songs
|
let results = songs
|
||||||
.load::<crate::models::Song>(db)
|
.load::<crate::models::Song>(db)
|
||||||
|
@ -306,17 +307,71 @@ mod song_model {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[qinvokable]
|
#[qinvokable]
|
||||||
pub fn get_lyric_list(mut self: Pin<&mut Self>, index: i32) -> QList_QString {
|
pub fn get_lyric_list(mut self: Pin<&mut Self>, index: i32) -> QStringList {
|
||||||
println!("{index}");
|
println!("LYRIC_LIST: {index}");
|
||||||
let lyric_list = QList_QString::default();
|
let mut lyric_list = QList_QString::default();
|
||||||
let idx = self.index(index, 0, &QModelIndex::default());
|
let idx = self.index(index, 0, &QModelIndex::default());
|
||||||
if !idx.is_valid() {
|
if !idx.is_valid() {
|
||||||
return lyric_list;
|
return QStringList::default();
|
||||||
}
|
}
|
||||||
if let Some(song) = self.rust().songs.get(index as usize) {
|
if let Some(song) = self.rust().songs.get(index as usize) {
|
||||||
let raw_lyrics = song.lyrics.clone();
|
let raw_lyrics = song.lyrics.clone();
|
||||||
|
let vorder: Vec<&str> = song.verse_order.split(' ').collect();
|
||||||
|
let keywords = vec![
|
||||||
|
"Verse 1", "Verse 2", "Verse 3", "Verse 4", "Verse 5", "Verse 6", "Verse 7",
|
||||||
|
"Verse 8", "Chorus 1", "Chorus 2", "Chorus 3", "Chorus 4", "Bridge 1",
|
||||||
|
"Bridge 2", "Bridge 3", "Bridge 4", "Intro 1", "Intro 2", "Ending 1",
|
||||||
|
"Ending 2", "Other 1", "Other 2", "Other 3", "Other 4",
|
||||||
|
];
|
||||||
|
let mut first_item = true;
|
||||||
|
|
||||||
|
let mut lyric_map = HashMap::new();
|
||||||
|
let mut verse_title = String::from("");
|
||||||
|
let mut lyric = String::from("");
|
||||||
|
for (i, line) in raw_lyrics.split("\n").enumerate() {
|
||||||
|
if keywords.contains(&line) {
|
||||||
|
if i != 0 {
|
||||||
|
println!("{verse_title}");
|
||||||
|
println!("{lyric}");
|
||||||
|
lyric_map.insert(verse_title, lyric);
|
||||||
|
lyric = String::from("");
|
||||||
|
verse_title = line.to_string();
|
||||||
|
// println!("{line}");
|
||||||
|
// println!("\n");
|
||||||
|
} else {
|
||||||
|
verse_title = line.to_string();
|
||||||
|
// println!("{line}");
|
||||||
|
// println!("\n");
|
||||||
}
|
}
|
||||||
lyric_list
|
} else {
|
||||||
|
lyric.push_str(line);
|
||||||
|
lyric.push_str("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("da-map: {:?}", lyric_map);
|
||||||
|
|
||||||
|
for verse in vorder {
|
||||||
|
let mut verse_name = "";
|
||||||
|
for word in keywords.clone() {
|
||||||
|
let end_verse = verse.get(1..).unwrap();
|
||||||
|
if word.get(..0).unwrap() == verse.get(..0).unwrap()
|
||||||
|
&& word.ends_with(end_verse)
|
||||||
|
{
|
||||||
|
verse_name = word;
|
||||||
|
println!("TITLE: {verse_name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(lyric) = lyric_map.get(verse_name) {
|
||||||
|
lyric_list.append(QString::from(lyric));
|
||||||
|
} else {
|
||||||
|
println!("NOT WORKING!");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
for lyric in lyric_list.iter() {
|
||||||
|
println!("da-list: {:?}", lyric);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QStringList::from(&lyric_list)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_role(&self, role: Role) -> i32 {
|
fn get_role(&self, role: Role) -> i32 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue