From b13e2553682487d14c30c7d3c80cbf4cf394aaed Mon Sep 17 00:00:00 2001 From: James Hogan Date: Sun, 22 Feb 2009 21:49:41 +0000 Subject: [PATCH] Loading of song data from zionworx also adding alternate_name to song in database, not in gui yet playlist item manages deletion of song data (not put in database) --- design/songdb.sql | 1 + kworship/filters/zionworx/KwZionworxFilter.cpp | 25 +++++++++++++++++++++--- kworship/songdb/KwPlaylistSong.cpp | 9 ++++++++- kworship/songdb/KwPlaylistSong.h | 5 ++++- kworship/songdb/KwSongdbLyrics.cpp | 5 +++++ kworship/songdb/KwSongdbLyrics.h | 3 +++ kworship/songdb/KwSongdbSong.cpp | 27 +++++++++++++++++++++++++- kworship/songdb/KwSongdbSong.h | 16 +++++++++++++-- kworship/songdb/KwSongdbVersion.cpp | 10 ++++++++++ kworship/songdb/KwSongdbVersion.h | 7 ++++++- 10 files changed, 99 insertions(+), 9 deletions(-) diff --git a/design/songdb.sql b/design/songdb.sql index bdb5401..1586817 100644 --- a/design/songdb.sql +++ b/design/songdb.sql @@ -60,6 +60,7 @@ CREATE TABLE CssRuleStyle ( CREATE TABLE Song ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(128) NOT NULL, + `alternate_name` VARCHAR(128) NOT NULL, `css_style_sheet_id` INT NULL, PRIMARY KEY (`id`), UNIQUE (`name`), diff --git a/kworship/filters/zionworx/KwZionworxFilter.cpp b/kworship/filters/zionworx/KwZionworxFilter.cpp index e8f5975..1a9503a 100644 --- a/kworship/filters/zionworx/KwZionworxFilter.cpp +++ b/kworship/filters/zionworx/KwZionworxFilter.cpp @@ -30,6 +30,8 @@ #include #include #include +#include +#include #include #include #include @@ -134,9 +136,26 @@ KwDocument* KwZionworxFilter::load(const KUrl& url, const QString& mimeType) } else if (itemType == "siSong") { - KwPlaylistText* song = new KwPlaylistText(item.firstChildElement("Title").text(), - item.firstChildElement("Lyrics").text().split("\n\n")); - newItem = song; + QString title1 = item.firstChildElement("Title1").text(); + QString title2 = item.firstChildElement("Title2").text(); + QString writer = item.firstChildElement("Writer").text(); + QString copyright = item.firstChildElement("Copyright").text(); + QString lyricsStr = item.firstChildElement("Lyrics").text(); + // Remove windows line endings and use newline to split + lyricsStr.replace("\r\n", "\n"); + QStringList lyricsPlain = lyricsStr.split("\n\n"); + + /// @todo Find song in database if possible + KwSongdbSong* song = new KwSongdbSong(); + song->setName(title1); + song->setAlternateName(title2); + KwSongdbVersion* version = new KwSongdbVersion(song); + version->setWriter(writer); + version->setCopyright(copyright); + version->setLyricsPlainVerses(lyricsPlain); + + KwPlaylistSong* songItem = new KwPlaylistSong(version, true); + newItem = songItem; } else if (itemType == "siQuickNote") { diff --git a/kworship/songdb/KwPlaylistSong.cpp b/kworship/songdb/KwPlaylistSong.cpp index 39c76fe..c6452d9 100644 --- a/kworship/songdb/KwPlaylistSong.cpp +++ b/kworship/songdb/KwPlaylistSong.cpp @@ -26,14 +26,16 @@ #include "KwPlaylistSong.h" #include "KwPlaylistSongNode.h" #include "KwSongdbVersion.h" +#include "KwSongdbSong.h" /* * Constructors + destructor. */ /// Primary constructor. -KwPlaylistSong::KwPlaylistSong(KwSongdbVersion* version) +KwPlaylistSong::KwPlaylistSong(KwSongdbVersion* version, bool owned) : KwPlaylistItem() +, m_owned(owned) , m_version(version) , m_lyricsLayout(version->lyrics()) { @@ -42,6 +44,11 @@ KwPlaylistSong::KwPlaylistSong(KwSongdbVersion* version) /// Destructor. KwPlaylistSong::~KwPlaylistSong() { + if (m_owned) + { + delete m_version->song(); + delete m_version; + } } /* diff --git a/kworship/songdb/KwPlaylistSong.h b/kworship/songdb/KwPlaylistSong.h index 1b16843..0cc7942 100644 --- a/kworship/songdb/KwPlaylistSong.h +++ b/kworship/songdb/KwPlaylistSong.h @@ -43,7 +43,7 @@ class KDE_EXPORT KwPlaylistSong : public KwPlaylistItem */ /// Primary constructor. - KwPlaylistSong(KwSongdbVersion* version); + KwPlaylistSong(KwSongdbVersion* version, bool owned = false); /// Destructor. virtual ~KwPlaylistSong(); @@ -77,6 +77,9 @@ class KDE_EXPORT KwPlaylistSong : public KwPlaylistItem * Variables */ + /// Whether the version is owned or part of a database. + bool m_owned; + /// Song version. KwSongdbVersion* m_version; diff --git a/kworship/songdb/KwSongdbLyrics.cpp b/kworship/songdb/KwSongdbLyrics.cpp index 1f04db1..1cabb2f 100644 --- a/kworship/songdb/KwSongdbLyrics.cpp +++ b/kworship/songdb/KwSongdbLyrics.cpp @@ -72,3 +72,8 @@ void KwSongdbLyrics::setMarkup(const QString& markup) m_markup = markup; } +/// Set the lyrics from plain text verses. +void KwSongdbLyrics::setPlainVerses(const QStringList& plainVerses) +{ + m_markup = plainVerses.join("\n\n"); +} diff --git a/kworship/songdb/KwSongdbLyrics.h b/kworship/songdb/KwSongdbLyrics.h index eb3c31c..0440472 100644 --- a/kworship/songdb/KwSongdbLyrics.h +++ b/kworship/songdb/KwSongdbLyrics.h @@ -64,6 +64,9 @@ class KwSongdbLyrics /// Set the lyrics from markup. void setMarkup(const QString& markup); + /// Set the lyrics from plain text verses. + void setPlainVerses(const QStringList& plainVerses); + /* * Equality + inequality operators */ diff --git a/kworship/songdb/KwSongdbSong.cpp b/kworship/songdb/KwSongdbSong.cpp index 215f033..6ad471c 100644 --- a/kworship/songdb/KwSongdbSong.cpp +++ b/kworship/songdb/KwSongdbSong.cpp @@ -40,6 +40,7 @@ KwSongdbSong::KwSongdbSong() : m_id(-1) , m_modifiedFields(Name) , m_name() +, m_alternateName() , m_versionsLoaded(false) , m_versionIds() { @@ -50,12 +51,13 @@ KwSongdbSong::KwSongdbSong(int id) : m_id(id) , m_modifiedFields(0) , m_name() +, m_alternateName() , m_versionsLoaded(false) , m_versionIds() { // Get the song data QSqlQuery query(KwSongdb::self()->database()); - query.prepare("SELECT `name`, `css_style_sheet_id` " + query.prepare("SELECT `name`, `alternate_name`, `css_style_sheet_id` " "FROM `Song` " "WHERE `id` = ?"); query.addBindValue(QVariant(id)); @@ -65,6 +67,7 @@ KwSongdbSong::KwSongdbSong(int id) // Copy the data Q_ASSERT(query.first()); m_name = query.value(0).toString(); + m_alternateName = query.value(1).toString(); // Register with songdb KwSongdb::self()->registerSong(this); @@ -91,6 +94,12 @@ QString KwSongdbSong::name() const return m_name; } +/// Get the alternate name of the song. +QString KwSongdbSong::alternateName() const +{ + return m_alternateName; +} + /// Get list of song versions. QList KwSongdbSong::versions() { @@ -131,6 +140,16 @@ void KwSongdbSong::setName(const QString& name) } } +/// Set the alternate name. +void KwSongdbSong::setAlternateName(const QString& name) +{ + if (name != m_alternateName) + { + m_modifiedFields |= AlternateName; + m_alternateName = name; + } +} + /// Save changes to the song data. void KwSongdbSong::save() { @@ -146,6 +165,12 @@ void KwSongdbSong::save() fields.push_back("`name`=?"); values.push_back(QVariant(m_name)); } + if (m_modifiedFields.testFlag(AlternateName)) + { + handled |= AlternateName; + fields.push_back("`alternate_name`=?"); + values.push_back(QVariant(m_alternateName)); + } bool insertion = (m_id < 0); if (insertion || !fields.isEmpty()) diff --git a/kworship/songdb/KwSongdbSong.h b/kworship/songdb/KwSongdbSong.h index 9cd6aab..d613ddd 100644 --- a/kworship/songdb/KwSongdbSong.h +++ b/kworship/songdb/KwSongdbSong.h @@ -26,13 +26,15 @@ * @author James Hogan */ +#include + #include #include class KwSongdbVersion; /// A song from the database. -class KwSongdbSong +class KDE_EXPORT KwSongdbSong { public: @@ -43,7 +45,8 @@ class KwSongdbSong /// Version data fields. enum Field { - Name = 0x1 + Name = 0x1, + AlternateName = 0x2 }; Q_DECLARE_FLAGS(Fields, Field) @@ -76,6 +79,9 @@ class KwSongdbSong /// Get the name of the song. QString name() const; + /// Get the alternate name of the song. + QString alternateName() const; + /// Get list of song versions. QList versions(); @@ -86,6 +92,9 @@ class KwSongdbSong /// Set the name. void setName(const QString& name); + /// Set the alternate name. + void setAlternateName(const QString& name); + /// Save changes to the song data. void save(); @@ -107,6 +116,9 @@ class KwSongdbSong /// Name. QString m_name; + /// Alternate name. + QString m_alternateName; + /// Whether versions have been loaded. bool m_versionsLoaded; diff --git a/kworship/songdb/KwSongdbVersion.cpp b/kworship/songdb/KwSongdbVersion.cpp index 05e07b3..fe688dd 100644 --- a/kworship/songdb/KwSongdbVersion.cpp +++ b/kworship/songdb/KwSongdbVersion.cpp @@ -218,6 +218,16 @@ void KwSongdbVersion::setLyricsMarkup(const QString& markup) } } +/// Set the lyrics plain text verses. +void KwSongdbVersion::setLyricsPlainVerses(const QStringList& plainVerses) +{ + if (plainVerses != m_lyrics.plainVerses()) + { + m_modifiedFields |= Lyrics; + m_lyrics.setPlainVerses(plainVerses); + } +} + /// Set the lyrics. void KwSongdbVersion::setLyrics(const KwSongdbLyrics& lyrics) { diff --git a/kworship/songdb/KwSongdbVersion.h b/kworship/songdb/KwSongdbVersion.h index b4fb7e7..b87e5bf 100644 --- a/kworship/songdb/KwSongdbVersion.h +++ b/kworship/songdb/KwSongdbVersion.h @@ -28,6 +28,8 @@ #include "KwSongdbLyrics.h" +#include + #include #include @@ -35,7 +37,7 @@ class KwSongdbSong; class KwSongdbSongBookSong; /// A song version from the database. -class KwSongdbVersion +class KDE_EXPORT KwSongdbVersion { public: @@ -119,6 +121,9 @@ class KwSongdbVersion /// Set the lyrics markup. void setLyricsMarkup(const QString& markup); + /// Set the lyrics plain text verses. + void setLyricsPlainVerses(const QStringList& plainVerses); + /// Set the lyrics. void setLyrics(const KwSongdbLyrics& lyrics); -- 2.11.4.GIT