diff --git a/.directory b/.directory deleted file mode 100644 --- a/.directory +++ /dev/null @@ -1,6 +0,0 @@ -[Dolphin] -Timestamp=2017,4,8,12,51,33 -Version=4 - -[Settings] -HiddenFilesShown=true diff --git a/.gitignore b/.gitignore new file mode 100644 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.pro.user +*.pro.user.* +.directory +*.autosave diff --git a/Babe.pro b/Babe.pro --- a/Babe.pro +++ b/Babe.pro @@ -4,7 +4,6 @@ # #------------------------------------------------- - install_it.path = $$OUT_PWD install_it.files = data/* @@ -22,10 +21,6 @@ QT += KNotifications QT += KI18n - - - - CONFIG += c++14 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets @@ -33,7 +28,6 @@ TARGET = Babe TEMPLATE = app - # The following define makes your compiler emit warnings if you use # any feature of Qt which as been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the @@ -45,8 +39,6 @@ # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 - - SOURCES += main.cpp\ mainwindow.cpp \ playlist.cpp \ @@ -58,6 +50,7 @@ album.cpp \ albumsview.cpp \ scrolltext.cpp \ + database.cpp \ playlistsview.cpp \ taginfo.cpp \ artwork.cpp \ @@ -80,6 +73,7 @@ album.h \ albumsview.h \ scrolltext.h \ + database.h \ playlistsview.h \ taginfo.h \ artwork.h \ @@ -93,13 +87,14 @@ web_jgm90.h \ rabbitview.h -FORMS += mainwindow.ui \ +FORMS += mainwindow.ui \ settings.ui \ about.ui \ infoview.ui \ metadataForm.ui RESOURCES += \ - data.qrc - + data.qrc \ + resources.qrc +OTHER_FILES += DatabaseTables.sql diff --git a/DatabaseTables.sql b/DatabaseTables.sql new file mode 100644 --- /dev/null +++ b/DatabaseTables.sql @@ -0,0 +1,31 @@ +CREATE TABLE IF NOT EXISTS tracks ( + track integer, + title text, + artist text, + album text, + genre text, + location text unique, + stars integer, + babe integer, + art text, + played integer, + playlist text +); + +CREATE TABLE IF NOT EXISTS albums ( + title text, + artist text, + art text, + location text +); + +CREATE TABLE IF NOT EXISTS playlists ( + title text, + art text unique +); + +CREATE TABLE IF NOT EXISTS artists ( + title text, + art text, + location text +); diff --git a/album.cpp b/album.cpp --- a/album.cpp +++ b/album.cpp @@ -9,21 +9,17 @@ this->draggable=isDraggable; this->imagePath=imagePath; - if (!imagePath.isEmpty()) this->putPixmap(imagePath); - else this->putDefaultPixmap(); - //image.scaled(120,120,Qt::KeepAspectRatio); - //this->setPixmap(image.scaled(size,size,Qt::KeepAspectRatio)); - //this->setToolTip(getTitle()); + if (!imagePath.isEmpty()) + this->putPixmap(imagePath); + else + this->putDefaultPixmap(); + auto layout = new QHBoxLayout(); widget = new QWidget(this); widget->setLayout(layout); widget->setMinimumWidth(size-2); widget->setGeometry(1,size-31,size-2,30); - //widget->setStyleSheet("background-color: rgba(0,0,0,150)"); - //widget->setStyleSheet( QString(" background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 rgba(0, 0, 0, 200), stop: 0.4 rgba(0, 0, 0, 150), stop:1 rgb(0, 0, 0, 40)); border-top: 1px solid #333; border-top-left-radius:0; border-top-right-radius:0; border-bottom-right-radius:%1px; border-bottom-left-radius:%2px;").arg( QString::number(border_radius),QString::number(border_radius))); widget->setStyleSheet( QString(" background: rgba(0,0,0,150); border-top: 1px solid rgba(%1,%1,%1,120); border-top-left-radius:0; border-top-right-radius:0; border-bottom-right-radius:%2px; border-bottom-left-radius:%3px;").arg( QString::number(this->palette().color(QPalette::WindowText).blue()), QString::number(border_radius-1),QString::number(border_radius-1))); - //widget->setStyleSheet("background-color: rgba(0,0,0,150); border-top: 1px solid #333;"); - //this->titleVisible(false); title = new ScrollText(this); title->setMaxSize(size+10); @@ -42,7 +38,6 @@ layout->addWidget(title); layout->addWidget(right_spacer); - playBtn = new QToolButton(this); playBtn->installEventFilter(this); connect(playBtn,SIGNAL(clicked()),this,SLOT(playBtn_clicked())); @@ -54,7 +49,6 @@ playBtn->setAutoRaise(true); playBtn->setVisible(false); - auto contextMenu = new QMenu(this); this->setContextMenuPolicy(Qt::ActionsContextMenu); @@ -73,31 +67,29 @@ bool Album::eventFilter(QObject * watched, QEvent * event) { - if (watched != playBtn) return false; - - if (event->type() == QEvent::Enter) - { + if (watched != playBtn) + return false; + if (event->type() == QEvent::Enter) { playBtn->setIcon(QIcon(":Data/data/playBtn_hover.svg")); return true; } - - if (event->type() == QEvent::Leave) - { + if (event->type() == QEvent::Leave) { playBtn->setIcon(QIcon(":Data/data/playBtn.svg")); return true; } - return false; } -void Album::babeIt_action() { emit babeAlbum_clicked(this->albumMap); } +void Album::babeIt_action() +{ + emit babeAlbum_clicked(this->albumMap); +} void Album::artIt_action() { qDebug()<<"Change art of album"<artist<album; QString path = QFileDialog::getOpenFileName(this, tr("Select Music Files"),BaeUtils::getCachePath(), tr("Image Files (*.png *.jpg *.bmp)")); - if(!path.isEmpty()) - { + if (!path.isEmpty()) { putPixmap(path); this->albumMap.insert(ART,path); emit changedArt(this->albumMap); @@ -106,10 +98,13 @@ void Album::removeIt_action() { - qDebug()<<"Remove album"<artist<album; + qDebug() << "Remove album" << this->artist << this->album; } -void Album::playBtn_clicked() { emit playAlbum(this->albumMap); } +void Album::playBtn_clicked() +{ + emit playAlbum(this->albumMap); +} void Album::setSize(int value) { @@ -126,32 +121,37 @@ event->accept(); QBrush brush(Qt::yellow); - if(!image.isNull()) + if (!image.isNull()) brush.setTexture(image.scaled(size,size,Qt::KeepAspectRatio)); - // brush.setStyle(Qt::no); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(brush); - if (!borderColor)painter.setPen(Qt::NoPen); + if (!borderColor) + painter.setPen(Qt::NoPen); painter.drawRoundedRect(0,0, size, size, border_radius, border_radius); } -QPixmap Album::getPixmap() { return image; } +QPixmap Album::getPixmap() +{ + return image; +} void Album::putPixmap(QByteArray pix) { - if(!pix.isEmpty()) this->image.loadFromData(pix); - else this->image.load(":Data/data/cover.svg"); - + if (!pix.isEmpty()) + this->image.loadFromData(pix); + else + this->image.load(":Data/data/cover.svg"); this->setPixmap(image); } void Album::putPixmap(QString path) { - if(!path.isEmpty()) this->image.load(path); - else this->image.load(":Data/data/cover.svg"); - + if (!path.isEmpty()) + this->image.load(path); + else + this->image.load(":Data/data/cover.svg"); this->setPixmap(image); } @@ -161,22 +161,39 @@ this->setPixmap(image); } -QString Album::getTitle() { return title->text(); } +QString Album::getTitle() +{ + return title->text(); +} -QString Album::getArtist() { return this->artist; } +QString Album::getArtist() +{ + return this->artist; +} -QString Album::getAlbum() { return this->album; } +QString Album::getAlbum() +{ + return this->album; +} -QString Album::getBGcolor() { return this->bgColor; } +QString Album::getBGcolor() +{ + return this->bgColor; +} -void Album::setArtist(QString artist) { this->artist=artist; } +void Album::setArtist(QString artist) +{ + this->artist = artist; +} -void Album::setAlbum(QString album) { this->album=album; } +void Album::setAlbum(QString album) +{ + this->album = album; +} void Album::setBGcolor(QString bgColor) { - this->bgColor=bgColor; - + this->bgColor = bgColor; QColor color; color.setNamedColor(bgColor); image.fill(color); @@ -188,53 +205,46 @@ this->artist = _artist; this->album = _album; - albumMap.insert(ARTIST,this->artist); + albumMap.insert(ARTIST, this->artist); albumMap.insert(ALBUM, this->album); - QString str = album.isEmpty()? artist : album+" - "+artist; title->setText(str); } -void Album::setTitleGeometry(int x, int y, int w, int h) { widget->setGeometry(x,y,w,h); } +void Album::setTitleGeometry(int x, int y, int w, int h) +{ + widget->setGeometry(x, y, w, h); +} void Album::titleVisible(bool state) { - if(state) widget->setVisible(true); - else widget->setVisible(false); + widget->setVisible(state); } void Album::mouseDoubleClickEvent(QMouseEvent * event) { - if(event->button()==Qt::LeftButton) + if (event->button()==Qt::LeftButton) emit albumCoverDoubleClicked(this->albumMap); - QLabel::mouseDoubleClickEvent(event); } void Album::mousePressEvent(QMouseEvent * event) { - if(event->type()!=QEvent::MouseButtonDblClick) - { - if(event->button()==Qt::LeftButton) + if (event->type() != QEvent::MouseButtonDblClick) { + if (event->button() == Qt::LeftButton) emit albumCoverClicked(this->albumMap); } - - - if(event->button()==Qt::LeftButton && draggable) - { + if (event->button() == Qt::LeftButton && draggable) { if (event->button() == Qt::LeftButton) startPos = event->pos(); } - QLabel::mousePressEvent(event); } void Album::mouseMoveEvent(QMouseEvent *event) { - if(draggable) - { - if (event->buttons() & Qt::LeftButton) - { + if (draggable) { + if (event->buttons() & Qt::LeftButton) { int distance = (event->pos() - startPos).manhattanLength(); if (distance >= QApplication::startDragDistance()) performDrag(); @@ -245,46 +255,28 @@ void Album::performDrag() { - qDebug()<<"trying to drag and album"; + qDebug() << "trying to drag and album"; QMimeData *mimeData = new QMimeData; - mimeData->setText(album.isEmpty()? this->artist : this->album+" /by/ "+this->artist); + mimeData->setText(album.isEmpty() ? this->artist : this->album+" /by/ "+this->artist); QDrag *drag = new QDrag(this); drag->setMimeData(mimeData); drag->setPixmap(image.scaled(size/2,size/2,Qt::KeepAspectRatio)); if (drag->exec(Qt::MoveAction) == Qt::MoveAction) emit albumDragged(); - } void Album::enterEvent(QEvent *event) { - //Q_UNUSED(event); - //title->show(); - //title->setSpeed(1); - // widget->setStyleSheet("background:rgba(180, 225, 230, 150)"); - // this->setStyleSheet("border:1px solid #f85b79"); - // qDebug()<<"entered the album cover"; event->accept(); playBtn->setVisible(true); playBtn->setToolTip("Play all - "+artist+" "+album); - // this->titleVisible(true); - emit albumCoverEnter(); } void Album::leaveEvent(QEvent *event) { - //Q_UNUSED(event); - //title->hide(); - //title->setSpeed(0); - // title->reset(); - // widget->setStyleSheet("background-color: rgba(0,0,0,150);"); - // this->setStyleSheet("border:1px solid #333"); - // qDebug()<<"left the album cover"; event->accept(); playBtn->setVisible(false); - //this->titleVisible(false); - emit albumCoverLeft(); } diff --git a/babetable.h b/babetable.h --- a/babetable.h +++ b/babetable.h @@ -30,22 +30,20 @@ #include "album.h" #include "collectionDB.h" #include "metadataForm.h" - +#include "database.h" namespace Ui { class BabeTable; } class BabeTable : public QTableWidget { Q_OBJECT - public: - explicit BabeTable(QWidget *parent = 0); ~BabeTable(); enum columns { - TRACK,TITLE,ARTIST,ALBUM,GENRE,LOCATION,STARS,BABE,ART,PLAYED,PLAYLIST,columnsCOUNT + TRACK, TITLE, ARTIST, ALBUM, GENRE, LOCATION, STARS, BABE, ART, PLAYED, PLAYLIST, columnsCOUNT }; enum order @@ -53,16 +51,16 @@ DESCENDING, ASCENDING }; - enum menuActions //this order must be followed + enum menuActions // this order must be followed { BABEIT, QUEUEIT, INFOIT, EDITIT, SAVETO, REMOVEIT, RATEIT, MOODIT, SENDIT, ADDTO }; CollectionDB *connection; - const QMap columnsNames{{TRACK, "track"}, {TITLE, "title"}, {ARTIST, "artist"},{ALBUM,"album"},{GENRE,"genre"},{LOCATION,"location"},{STARS,"stars"},{BABE,"babe"},{ART,"art"},{PLAYED,"played"},{PLAYLIST,"playlist"}}; + const QMap columnsNames{{TRACK, "track"}, {TITLE, "title"}, {ARTIST, "artist"}, {ALBUM,"album"}, {GENRE,"genre"}, {LOCATION,"location"}, {STARS,"stars"}, {BABE,"babe"}, {ART,"art"}, {PLAYED,"played"}, {PLAYLIST,"playlist"}}; QStringList playlistsMenus; - QStringList colors = {"#F0FF01","#01FF5B","#3DAEFD","#B401FF","#E91E63"}; + QStringList colors = {"#F0FF01", "#01FF5B", "#3DAEFD", "#B401FF", "#E91E63"}; void populateTableView(QList> mapList, bool descriptiveTitle); void populateTableView(QString indication, bool descriptiveTitle=false); @@ -74,27 +72,22 @@ void addRowAt(int row,QMap map, bool descriptiveTooltip); void passStyle(QString style); void passPlaylists(); - void populatePlaylist(QStringList urls, QString playlist); + void populatePlaylist(const QStringList &urls, const QString &playlist); void setAddMusicMsg(QString msg); int getIndex(); - //void removeRow(int row); QMap getRowData(int row); QMap getKdeConnectDevices(); QStringList getTableContent(columns); QList> getAllTableContent(); - protected: - virtual void enterEvent(QEvent *event); virtual void leaveEvent(QEvent *event); - // virtual void mouseReleaseEvent(QMouseEvent* evt); virtual void mousePressEvent(QMouseEvent* evt); virtual void keyPressEvent(QKeyEvent *event); private slots: - void on_tableWidget_doubleClicked(const QModelIndex &index); void rateGroup(int id); void setUpContextMenu(const int row, const int column); @@ -115,7 +108,6 @@ void flushTable(); private: - Notify nof; QToolButton *fav1; QToolButton *fav2; @@ -134,6 +126,7 @@ QLabel *addMusicTxt; QString addMusicMsg = "oops... :(\nnothing here"; + Database *m_database; signals: void tableWidget_doubleClicked(QList> mapList); @@ -149,7 +142,6 @@ void moodIt_clicked(QString color); void queueIt_clicked(QMap track); void infoIt_clicked(QString title, QString artist, QString album); - }; #endif // BABETABLE_H diff --git a/babetable.cpp b/babetable.cpp --- a/babetable.cpp +++ b/babetable.cpp @@ -12,23 +12,16 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - */ - +*/ #include "babetable.h" - BabeTable::BabeTable(QWidget *parent) : QTableWidget(parent) { - /* connection = new CollectionDB(); - connection->openCollection("../player/collection.db");*/ + m_database = Database::instance(); + connection = new CollectionDB(); - connect(this, SIGNAL(doubleClicked(QModelIndex)), this, - SLOT(on_tableWidget_doubleClicked(QModelIndex))); - //connect(this, SIGNAL(customContextMenuRequested(const QPoint&)),SLOT(setUpContextMenu(const QPoint&))); - //connect(this->model(),SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)),this,SLOT(itemEdited(const QModelIndex&, const QModelIndex&))); - //this->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu); + connect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_tableWidget_doubleClicked(QModelIndex))); this->setFrameShape(QFrame::NoFrame); this->setColumnCount(columnsCOUNT-1); this->setHorizontalHeaderLabels({"Track", "Title", "Artist", "Album", "Genre", @@ -47,7 +40,6 @@ this->verticalHeader()->resizeSections(QHeaderView::ResizeToContents); - // this->setGridStyle(Qt::PenStyle); this->setShowGrid(false); this->setColumnWidth(TRACK, 20); @@ -83,11 +75,7 @@ fav4->setIcon(QIcon::fromTheme("rating-unrated")); fav5->setIcon(QIcon::fromTheme("rating-unrated")); - // this->horizontalHeaderItem(0); - // this->horizontalHeaderItem(0)->setResizeMode(1, QHeaderView::Interactive); - // this->horizontalHeader()->setHighlightSections(true); contextMenu = new QMenu(this); - //this->setContextMenuPolicy(Qt::ActionsContextMenu); auto babeIt = new QAction("Babe it \xe2\x99\xa1", contextMenu); contextMenu->addAction(babeIt); @@ -95,15 +83,10 @@ auto queueIt = new QAction("Queue", contextMenu); contextMenu->addAction(queueIt); - /*auto sendIt = new QAction("Send to phone... ", contextMenu); - this->addAction(sendIt);*/ - QAction *sendEntry = contextMenu->addAction("Send to phone..."); - //this->addAction(sendEntry); sendToMenu = new QMenu("..."); sendEntry->setMenu(sendToMenu); - auto infoIt = new QAction("Info + ", contextMenu); contextMenu->addAction(infoIt); @@ -117,35 +100,19 @@ contextMenu->addAction(removeIt); QAction *addEntry = contextMenu->addAction("Add to..."); - //this->addAction(addEntry); playlistsMenu = new QMenu("..."); addEntry->setMenu(playlistsMenu); - // auto moodIt = new QAction("Mood..", contextMenu); - // this->addAction(moodIt); - - /*QAction *moodEntry = contextMenu->addAction("Mood..."); - this->addAction(moodEntry); - moodMenu = new QMenu("..."); - moodEntry->setMenu(moodMenu);*/ - // passPlaylists(); - // playlistsMenu->addAction("hello rold"); - connect(this, SIGNAL(rightClicked(const int, const int)), this, SLOT(setUpContextMenu(const int, const int))); - connect(playlistsMenu, SIGNAL(triggered(QAction *)), this, - SLOT(addToPlaylist(QAction *))); - connect(sendToMenu, SIGNAL(triggered(QAction *)), this, - SLOT(sendIt_action(QAction *))); - + connect(playlistsMenu, SIGNAL(triggered(QAction *)), this, SLOT(addToPlaylist(QAction *))); + connect(sendToMenu, SIGNAL(triggered(QAction *)), this, SLOT(sendIt_action(QAction *))); connect(babeIt, SIGNAL(triggered()), this, SLOT(babeIt_action())); connect(queueIt, SIGNAL(triggered()), this, SLOT(queueIt_action())); - //connect(sendIt, SIGNAL(triggered()), this, SLOT(sendIt_action())); connect(infoIt, SIGNAL(triggered()), this, SLOT(infoIt_action())); connect(editIt, SIGNAL(triggered()), this, SLOT(editIt_action())); connect(removeIt, SIGNAL(triggered()), this, SLOT(removeIt_action())); - auto gr = new QWidget(); auto ty = new QHBoxLayout(); gr->setLayout(ty); @@ -158,14 +125,12 @@ bg->addButton(fav3, 3); bg->addButton(fav4, 4); bg->addButton(fav5, 5); - // connect(fav1,SIGNAL(enterEvent(QEvent)),this,hoverEvent()); ty->addWidget(fav1); ty->addWidget(fav2); ty->addWidget(fav3); ty->addWidget(fav4); ty->addWidget(fav5); - QWidgetAction *chkBoxAction = new QWidgetAction(contextMenu); chkBoxAction->setDefaultWidget(gr); @@ -175,12 +140,9 @@ auto moodsLayout = new QHBoxLayout(); QButtonGroup *moodGroup = new QButtonGroup(contextMenu); connect(moodGroup, SIGNAL(buttonClicked(int)), this, SLOT(moodTrack(int))); - for(int i=0; i<5; i++) - { + for (int i = 0; i < 5; i++) { auto *colorTag = new QToolButton(); - //colorTag->setIconSize(QSize(10,10)); colorTag->setFixedSize(15,15); - // colorTag->setAutoRaise(true); colorTag->setStyleSheet(QString("QToolButton { background-color: %1;}").arg(colors.at(i))); moodGroup->addButton(colorTag,i); moodsLayout->addWidget(colorTag); @@ -189,10 +151,8 @@ QWidgetAction *moodsAction = new QWidgetAction(contextMenu); moodsAction->setDefaultWidget(moods); - contextMenu->addAction(moodsAction); - QFont helvetica("Helvetica", 10); addMusicTxt = new QLabel(); addMusicTxt->setStyleSheet("QLabel{background-color:transparent;}"); @@ -216,71 +176,77 @@ updater->start(1000); } - -BabeTable::~BabeTable() { } - +BabeTable::~BabeTable() +{ +} void BabeTable::setAddMusicMsg(QString msg) { - addMusicMsg+=msg; + addMusicMsg += msg; addMusicTxt->setText(addMusicMsg); - } void BabeTable::update() { - if(this->rowCount()!=0) - { - if(addMusicTxt->isVisible()) addMusicTxt->setVisible(false); - - }else addMusicTxt->setVisible(true); - + if (this->rowCount() != 0) { + if (addMusicTxt->isVisible()) + addMusicTxt->setVisible(false); + } else { + addMusicTxt->setVisible(true); + } } -void BabeTable::moodTrack(int color) { moodIt_action(colors.at(color)); } +void BabeTable::moodTrack(int color) +{ + moodIt_action(colors.at(color)); +} void BabeTable::addToPlaylist(QAction *action) { QString playlist = action->text().replace("&", ""); QString location = getRowData(rRow)[LOCATION]; - - if (playlist.contains("Create new...")) emit createPlaylist_clicked(); - else populatePlaylist({location}, playlist); + if (playlist.contains("Create new...")) + emit createPlaylist_clicked(); + else + populatePlaylist({location}, playlist); } -void BabeTable::populatePlaylist(QStringList urls, QString playlist) //this needs to get fixed +void BabeTable::populatePlaylist(const QStringList &urls, const QString &playlist) { - for (auto location : urls) - { - // ui->fav_btn->setIcon(QIcon::fromTheme("face-in-love")); - qDebug() << "Song to add: " << location << " to: " << playlist; - - QSqlQuery query = connection->getQuery( - "SELECT * FROM tracks WHERE location = \"" + location + "\""); - - QString list; - while (query.next()) - list = query.value(PLAYLIST).toString(); - list += " " + playlist; - // qDebug()<insertInto("tracks", "playlist", location, list)) - qDebug() << list; - + foreach (QString url, urls) { + QList> resultSet = connection->getTrackData(url); + if (resultSet.isEmpty()) + continue; + QMap map = resultSet.at(0); + QString list = map.value(PLAYLIST) + " " + playlist; + connection->updateTrack("playlist", url, list); + nof.notifyUrgent("Tracks added to playlist:", playlist); } - nof.notifyUrgent("Tracks added to playlist:",playlist); } +void BabeTable::passPlaylists() +{ +} -void BabeTable::passPlaylists() {} - -void BabeTable::enterEvent(QEvent *event) { Q_UNUSED(event); } +void BabeTable::enterEvent(QEvent *event) +{ + Q_UNUSED(event); +} -void BabeTable::leaveEvent(QEvent *event) { Q_UNUSED(event); } +void BabeTable::leaveEvent(QEvent *event) +{ + Q_UNUSED(event); +} -void BabeTable::passStyle(QString style) { this->setStyleSheet(style); } +void BabeTable::passStyle(QString style) +{ + this->setStyleSheet(style); +} -int BabeTable::getIndex() { return this->currentIndex().row(); } +int BabeTable::getIndex() +{ + return this->currentIndex().row(); +} void BabeTable::addRow(QMap map, bool descriptiveTooltip) { @@ -298,7 +264,7 @@ this->setItem(this->rowCount() - 1, PLAYED, new QTableWidgetItem(map[PLAYED])); this->setItem(this->rowCount() - 1, PLAYLIST, new QTableWidgetItem(map[PLAYLIST])); - if(descriptiveTooltip) + if (descriptiveTooltip) this->item(this->rowCount()-1,TITLE)->setToolTip( "by "+map[ARTIST]); } @@ -316,105 +282,71 @@ this->setItem(row , BABE, new QTableWidgetItem(map[BABE])); this->setItem(row , ART, new QTableWidgetItem(map[ART])); this->setItem(row , PLAYED, new QTableWidgetItem(map[PLAYED])); - //this->setItem(row , PLAYLIST, new QTableWidgetItem(map[PLAYLIST])); QColor color; color.setNamedColor("#000"); color.setAlpha(40); this->item(row,TITLE)->setBackgroundColor(color); - /* QBrush brush; - brush.setColor("#fff"); - this->item(row,TITLE)->setForeground(brush);*/ - //this->item(row,TITLE)->setTextAlignment(Qt::AlignCenter); - - if(descriptiveTooltip) + if (descriptiveTooltip) this->item(row,TITLE)->setToolTip( "by "+map[ARTIST]); } void BabeTable::populateTableView(QList> mapList, bool descriptiveTitle) { - qDebug() << "ON POPULATE by mapList"; - this->setSortingEnabled(false); bool missing = false; QStringList missingFiles; - - if(!mapList.isEmpty()) - { - for(auto trackMap : mapList) - { + if (!mapList.isEmpty()) { + for (auto trackMap : mapList) { QString location = trackMap[LOCATION]; - - if (!BaeUtils::fileExists(location)) - { - qDebug() << "That file doesn't exists anymore: " - << location; + if (!BaeUtils::fileExists(location)) { missingFiles << location; missing = true; - } else addRow(trackMap,descriptiveTitle); - + } else { + addRow(trackMap,descriptiveTitle); + } } - - if (missing) removeMissing(missingFiles); - + if (missing) + removeMissing(missingFiles); this->setSortingEnabled(true); emit finishedPopulating(); - - }else qDebug()<<"Error: the mapList was empty"; - + } } void BabeTable::removeMissing(QStringList missingFiles) { nof.notifyUrgent("Removing missing files...",missingFiles.join("\n")); - - for (auto file_r : missingFiles) - { + for (auto file_r : missingFiles) { QString parentDir = QFileInfo(QFileInfo(file_r)).dir().path(); - - if (!BaeUtils::fileExists(parentDir)) connection->removePath(parentDir); - else connection->removePath(file_r); + if (!BaeUtils::fileExists(parentDir)) + connection->removePath(parentDir); + else + connection->removePath(file_r); } - connection->setCollectionLists(); connection->cleanCollectionLists(); } void BabeTable::populateTableView(QString indication, bool descriptiveTitle) { - - qDebug() << "ON POPULATE:"<setSortingEnabled(false); bool missingDialog = false; QStringList missingFiles; QSqlQuery query = connection->getQuery(indication); - if(query.exec()) - { - while (query.next()) - { - - QString location =query.value(LOCATION).toString(); - - if (!BaeUtils::fileExists(location)) - { - qDebug() << "That file doesn't exists anymore: " - << location; + if (query.exec()) { + while (query.next()) { + QString location = query.value(LOCATION).toString(); + if (!BaeUtils::fileExists(location)) { missingFiles << location; missingDialog = true; - - } else - { - + } else { QString track = query.value(TRACK).toString(); QString title = query.value(TITLE).toString(); QString artist = query.value(ARTIST).toString(); QString album = query.value(ALBUM).toString(); QString genre = query.value(GENRE).toString(); - - QString rating; switch (query.value((STARS)).toInt()) { case 0: @@ -437,14 +369,9 @@ "\xe2\x98\x86 \xe2\x98\x86 \xe2\x98\x86 \xe2\x98\x86 \xe2\x98\x86 "; break; } - if (query.value(BABE).toInt() == 1) rating = "\xe2\x99\xa1 "; - - QString stars = rating; - - QString bb; switch (query.value((BABE)).toInt()) { case 0: @@ -456,33 +383,24 @@ } QString babe = bb; - QString art = query.value(ART).toString(); - QString played =query.value(PLAYED).toString(); QString playlist =query.value(PLAYLIST).toString(); - const QMap map{{TRACK,track}, {TITLE,title}, {ARTIST,artist},{ALBUM,album},{GENRE,genre},{LOCATION,location},{STARS,stars},{BABE,babe},{ART,art},{PLAYED,played},{PLAYLIST,playlist}}; - addRow(map,descriptiveTitle); } } - - - if (missingDialog) removeMissing(missingFiles); - + if (missingDialog) + removeMissing(missingFiles); this->setSortingEnabled(true); emit finishedPopulating(); - }else qDebug()<<"Error: the query didn't pass"<setIcon(QIcon::fromTheme("rating-unrated")); fav2->setIcon(QIcon::fromTheme("rating-unrated")); @@ -490,7 +408,6 @@ fav4->setIcon(QIcon::fromTheme("rating-unrated")); fav5->setIcon(QIcon::fromTheme("rating-unrated")); break; - case 1: fav1->setIcon(QIcon::fromTheme("rating")); fav2->setIcon(QIcon::fromTheme("rating-unrated")); @@ -498,7 +415,6 @@ fav4->setIcon(QIcon::fromTheme("rating-unrated")); fav5->setIcon(QIcon::fromTheme("rating-unrated")); break; - case 2: fav1->setIcon(QIcon::fromTheme("rating")); fav2->setIcon(QIcon::fromTheme("rating")); @@ -506,7 +422,6 @@ fav4->setIcon(QIcon::fromTheme("rating-unrated")); fav5->setIcon(QIcon::fromTheme("rating-unrated")); break; - case 3: fav1->setIcon(QIcon::fromTheme("rating")); fav2->setIcon(QIcon::fromTheme("rating")); @@ -514,7 +429,6 @@ fav4->setIcon(QIcon::fromTheme("rating-unrated")); fav5->setIcon(QIcon::fromTheme("rating-unrated")); break; - case 4: fav1->setIcon(QIcon::fromTheme("rating")); fav2->setIcon(QIcon::fromTheme("rating")); @@ -522,7 +436,6 @@ fav4->setIcon(QIcon::fromTheme("rating")); fav5->setIcon(QIcon::fromTheme("rating-unrated")); break; - case 5: fav1->setIcon(QIcon::fromTheme("rating")); fav2->setIcon(QIcon::fromTheme("rating")); @@ -542,55 +455,39 @@ } void BabeTable::setVisibleColumn(int column) { - if (column == LOCATION) { + if (column == LOCATION) this->showColumn(LOCATION); - } else if (column == STARS) { + else if (column == STARS) this->showColumn(STARS); - } else if (column == BABE) { + else if (column == BABE) this->showColumn(BABE); - } else if (column == ALBUM) { + else if (column == ALBUM) this->showColumn(ALBUM); - } } - QMap BabeTable::getKdeConnectDevices() { - qDebug()<<"getting the kdeconnect devices avaliable"; - QMap _devices; + QMap _devices; QProcess process; process.start("kdeconnect-cli -a"); process.waitForFinished(); - // auto output = process->readAllStandardOutput(); - process.setReadChannel(QProcess::StandardOutput); while (process.canReadLine()) { QString line = QString::fromLocal8Bit(process.readLine()); - qDebug()<<"line:"<devices=_devices; + this->devices = _devices; return devices; - } - - void BabeTable::setUpContextMenu(const int row, const int column) -{ - qDebug() << "setUpContextMenu"; - //contextMenu->exec(QCursor::pos()); - +{ int rate = 0; bool babe = false; this->rRow = row; @@ -598,160 +495,113 @@ playlistsMenu->clear(); - for (auto playlist : connection->getPlaylists()) + QStringList list = connection->getPlaylists(); + for (const QString &playlist : list) playlistsMenu->addAction(playlist); - // playlistsMenu->addAction("Create new..."); sendToMenu->clear(); QMapIterator i(getKdeConnectDevices()); - while (i.hasNext()) - { + while (i.hasNext()) { i.next(); - qDebug()<addAction(i.value()); } - - QString url = this->getRowData(rRow)[LOCATION]; - - QSqlQuery query = connection->getQuery( - "SELECT * FROM tracks WHERE location = \"" + url + "\""); - - while (query.next()) - { - rate = query.value(STARS).toInt(); - babe = query.value(BABE).toInt() == 1 ? true : false; + QString url = {this->getRowData(rRow)[LOCATION]}; + if (!url.isEmpty()) { + QList> list = connection->getTrackData(url); + if (!list.isEmpty()) { + QMap result; + foreach (result, list) { + rate = result.value(STARS).toInt(); + babe = result.value(BABE).toInt() == 1 ? true : false; + } + } + setRating(rate); + if (babe) + contextMenu->actions().at(0)->setText("Un-Babe it"); + else + contextMenu->actions().at(0)->setText("Babe it"); } - - setRating(rate); - - if (babe) - contextMenu->actions().at(0)->setText("Un-Babe it"); - else - contextMenu->actions().at(0)->setText("Babe it"); - contextMenu->exec(QCursor::pos()); - } QStringList BabeTable::getPlaylistMenus() { - playlistsMenus.clear(); - for (auto playlist : connection->getPlaylists()) { + for (auto playlist : connection->getPlaylists()) playlistsMenus << playlist; - } return playlistsMenus; } void BabeTable::keyPressEvent(QKeyEvent *event) { switch (event->key()) { - case Qt::Key_Return: { - - QList> list; - - list<getIndex()); - emit tableWidget_doubleClicked(list); - - break; - } - case Qt::Key_Up: { - QModelIndex index = this->currentIndex(); - int row = index.row() - 1; - int column = 1; - QModelIndex newIndex = this->model()->index(row, column); - this->selectionModel()->select(newIndex, QItemSelectionModel::Select); - this->setCurrentIndex(newIndex); - this->setFocus(); - - qDebug() - << this->model()->data(this->model()->index(row, LOCATION)).toString(); - - break; - } - case Qt::Key_Down: { - QModelIndex index = this->currentIndex(); - int row = index.row() + 1; - int column = 1; - QModelIndex newIndex = this->model()->index(row, column); - this->selectionModel()->select(newIndex, QItemSelectionModel::Select); - this->setCurrentIndex(newIndex); - this->setFocus(); - - qDebug() - << this->model()->data(this->model()->index(row, LOCATION)).toString(); - break; - } - default: { - QTableWidget::keyPressEvent(event); - break; - } + case Qt::Key_Return: { + QList> list; + list<getIndex()); + emit tableWidget_doubleClicked(list); + break; + } + case Qt::Key_Up: { + QModelIndex index = this->currentIndex(); + int row = index.row() - 1; + int column = 1; + QModelIndex newIndex = this->model()->index(row, column); + this->selectionModel()->select(newIndex, QItemSelectionModel::Select); + this->setCurrentIndex(newIndex); + this->setFocus(); + break; + } + case Qt::Key_Down: { + QModelIndex index = this->currentIndex(); + int row = index.row() + 1; + int column = 1; + QModelIndex newIndex = this->model()->index(row, column); + this->selectionModel()->select(newIndex, QItemSelectionModel::Select); + this->setCurrentIndex(newIndex); + this->setFocus(); + break; + } + default: { + QTableWidget::keyPressEvent(event); + break; + } } } void BabeTable::mousePressEvent(QMouseEvent *evt) { - - if (evt->button() == Qt::RightButton) - { - qDebug() << "table right clicked"; + if (evt->button() == Qt::RightButton) { evt->accept(); int row = this->indexAt(evt->pos()).row(); - int column= this->indexAt(evt->pos()).column(); - qDebug()<indexAt(evt->pos()).column(); + if (row != -1) + emit rightClicked(row, column); } - QTableWidget::mousePressEvent(evt); - } void BabeTable::rateGroup(int id) { - qDebug() << "rated with: " << id; - // int row= this->currentIndex().row(); - QString location = this->getRowData(rRow)[LOCATION]; - - QSqlQuery query = connection->getQuery( - "SELECT * FROM tracks WHERE location = \"" + location + "\""); - int rate = 0; - - while (query.next()) - rate = query.value(STARS).toInt(); - - if (connection->check_existance("tracks", "location", location)) - { - if (connection->insertInto("tracks", "stars", location, id)) + QString location = this->getRowData(rRow)[LOCATION]; + QList> list = connection->getTrackData(location); + QMap map; + foreach (map, list) + rate = map.value(STARS).toInt(); + if (connection->hasTrack("location", location)) { + if (connection->updateTrack("stars", location, id)) setRating(id); - QString stars; for (int i = 0; i < id; i++) stars += "\xe2\x98\x86 "; - this->item(rRow, STARS)->setText(stars); - - if (id > 0 && rate < 5) - { - QString title = - this->model()->data(this->model()->index(rRow, TITLE)).toString(); - QString artist = - this->model()->data(this->model()->index(rRow, ARTIST)).toString(); - QString album = - this->model()->data(this->model()->index(rRow, ALBUM)).toString(); - QString star = - this->model()->data(this->model()->index(rRow, STARS)).toString(); - QString babe = - this->model()->data(this->model()->index(rRow, BABE)).toString(); - - qDebug() << "rated and trying to add to favs"; + if (id > 0 && rate < 5) { + QString title = this->model()->data(this->model()->index(rRow, TITLE)).toString(); + QString artist = this->model()->data(this->model()->index(rRow, ARTIST)).toString(); + QString album = this->model()->data(this->model()->index(rRow, ALBUM)).toString(); + QString star = this->model()->data(this->model()->index(rRow, STARS)).toString(); + QString babe = this->model()->data(this->model()->index(rRow, BABE)).toString(); emit songRated({title, artist, album, location, star, babe}); - } else { - qDebug() << "rated and trying to add to favs failed"; } - // this->update(); - } else - { } } @@ -775,18 +625,12 @@ return map; } - void BabeTable::on_tableWidget_doubleClicked(const QModelIndex &index) { Q_UNUSED(index); - QList> list; auto track = getRowData(this->getIndex()); - list<getRowData(rRow); - - QString url =track[LOCATION]; + QString url = track[LOCATION]; QString title = track[TITLE]; QString artist = track[ARTIST]; - QString deviceName = device->text().replace("&",""); QString deviceKey = devices.key(deviceName); - - qDebug()<<"trying to send "<< url << "to : "<< deviceName; auto process = new QProcess(this); connect(process, static_cast(&QProcess::finished), [=](int exitCode, QProcess::ExitStatus exitStatus) { - qDebug()<<"processFinished_totally"<start("kdeconnect-cli -d " +deviceKey+ " --share " +"\""+ url+"\""); - } void BabeTable::editIt_action() { - //editing=true; - // emit this->edit(this->model()->index(rRow,rColumn)); - auto infoForm = new metadataForm(getRowData(rRow),this); connect(infoForm,SIGNAL(infoModified(QMap)),this,SLOT(itemEdited(QMap))); infoForm->show(); - } void BabeTable::itemEdited(QMap map) { - qDebug()<<"item changed: " << map[TITLE]; this->item(rRow,TRACK)->setText(map[TRACK]); this->item(rRow,TITLE)->setText(map[TITLE]); this->item(rRow,ARTIST)->setText(map[ARTIST]); this->item(rRow,ALBUM)->setText(map[ALBUM]); this->item(rRow,GENRE)->setText(map[GENRE]); - - //connection->insertInto("tracks",column,this->model()->index(newIndex.row(),LOCATION).data().toString(),newIndex.data().toString()); - } void BabeTable::infoIt_action() @@ -855,49 +684,23 @@ void BabeTable::removeIt_action() { - qDebug() << "removeIt/right clicked!"; - // int row= this->currentIndex().row(); - qDebug() - << this->model()->data(this->model()->index(rRow, LOCATION)).toString(); this->removeRow(rRow); emit removeIt_clicked(rRow); } void BabeTable::moodIt_action(QString color) { - - if(!color.isEmpty()) - { - QSqlQuery query; - query.prepare("UPDATE tracks SET art = (:art) WHERE location = (:location)" ); - //query.prepare("SELECT * FROM "+tableName+" WHERE "+searchId+" = (:search)"); - query.bindValue(":art", color); - query.bindValue(":location", this->getRowData(rRow)[LOCATION]); - - if(query.exec()) - { - qDebug()<<"Art[color] inserted into DB"<< color; - - emit moodIt_clicked(color); contextMenu->close(); - - }else qDebug()<<"COULDN'T insert art[color] into DB"; - + if (!color.isEmpty()) { + int result = connection->updateTrack("art", this->getRowData(rRow)[LOCATION], color); + if (result > 0) + emit moodIt_clicked(color); + contextMenu->close(); } - - - //emit moodIt_clicked(this->model()->data(this->model()->index(row, LOCATION)).toString(),color.name()); - /*emit babeIt_clicked( - {this->model()->data(this->model()->index(row, LOCATION)).toString()});*/ } - void BabeTable::queueIt_action() { - qDebug() << "queueIt clicked!"; - // int row= this->currentIndex().row(); - QString url = this->model()->data(this->model()->index(rRow, LOCATION)).toString(); - qDebug()<model()->data(this->model()->index(rRow, LOCATION)).toString(); emit queueIt_clicked(getRowData(rRow)); } @@ -910,19 +713,17 @@ QStringList BabeTable::getTableContent(BabeTable::columns column) { QStringList result; - for (int i = 0; i < this->rowCount(); i++) + int rowCount = this->rowCount(); + for (int i = 0; i < rowCount; i++) result << this->model()->data(this->model()->index(i, column)).toString(); - return result; } - QList> BabeTable::getAllTableContent() { QList> mapList; - - for (int i = 0; irowCount(); i++) - mapList<rowCount(); + for (int i = 0; i < rowCount; i++) + mapList << getRowData(i); return mapList; } diff --git a/collectionDB.h b/collectionDB.h --- a/collectionDB.h +++ b/collectionDB.h @@ -1,78 +1,61 @@ #ifndef COLLECTIONDB_H #define COLLECTIONDB_H + +#include #include #include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include + #include "track.h" #include "taginfo.h" +#include "database.h" class CollectionDB : public QObject { Q_OBJECT public: - - explicit CollectionDB(); - //CollectionDB(bool connect); + explicit CollectionDB(QObject *parent = 0); ~CollectionDB(){} void openCollection(QString path); - QSqlQuery getQuery(QString queryTxt); + QSqlQuery getQuery(const QString &queryTxt); bool checkQuery(QString queryTxt); - bool insertInto(QString tableName, QString column, QString location, int value); - bool insertInto(QString tableName, QString column, QString location, QString value); - void setTrackList(QList ); + bool updateTrack(const QString &column, const QString &location, const QVariant &value); void prepareCollectionDB(); - bool removeQuery(QString queryTxt); bool execQuery(QString queryTxt); - bool check_existance(QString tableName, QString searchId, QString search); - void createTable(QString tableName); + bool hasTrack(const QString &searchId, const QString &searchTerm); + + QList> getTrackData(const QString &url); + QList> getTrackData(const QVariantMap &filter, const QString &orderBy = "", const QString &whereOperator = "&", const QString &whereComparator = QStringLiteral("=")); - QList> getTrackData(QStringList urls); - QList> getTrackData(QString queryText); QString getArtistArt(QString artist); QString getAlbumArt(QString album, QString artist); - QStringList getPlaylists(); + QStringList getPlaylists(int limit = -1, int offset = 0, const QString &orderBy = "title"); QStringList getPlaylistsMoods(); QStringList albums; QStringList artists; + enum colums { - TRACK,TITLE,ARTIST,ALBUM,GENRE,LOCATION,STARS,BABE,ART,PLAYED,PLAYLIST + TRACK, TITLE, ARTIST, ALBUM, GENRE, LOCATION, STARS, BABE, ART, PLAYED, PLAYLIST }; -private: - - QSqlDatabase m_db; - QList trackList; - - public slots: - bool addTrack(QStringList paths, int babe=0); - void closeConnection(); - void insertPlaylist(QString name, QString color); - + void debugDatabaseMessage(const QString &message); + bool addTrack(QStringList paths, int babe = 0); + void insertPlaylist(const QString &name = "", const QString &color = ""); void removePath(QString path); void setCollectionLists(); void refreshArtistsTable(); void cleanCollectionLists(); - void insertCoverArt(QString path, QStringList info); - void insertHeadArt(QString path, QStringList info); - + void insertCoverArt(const QString &art, const QStringList &info); + void insertHeadArt(const QString &art, const QStringList &info); signals: void progress(int); void DBactionFinished(bool state); +private: + Database *m_database; }; - #endif // COLLECTION_H diff --git a/collectionDB.cpp b/collectionDB.cpp --- a/collectionDB.cpp +++ b/collectionDB.cpp @@ -12,631 +12,297 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - */ - +*/ #include "collectionDB.h" +#include +#include +#include +#include - -CollectionDB::CollectionDB() +CollectionDB::CollectionDB(QObject *parent) : QObject(parent) + ,m_database(Database::instance()) { - -} - -/*CollectionDB::CollectionDB(bool connect) -{ - if(connect) - { - m_db = QSqlDatabase::addDatabase("QSQLITE"); - m_db.setDatabaseName("../player/collection.db"); - m_db.open(); - - if (!m_db.open()) - { - qDebug() << "Error: connection with database fail"; - } - else - { - qDebug() << "Database: connection ok"; - - } - } -}*/ - -void CollectionDB::closeConnection() -{ - m_db.close(); -} - -void CollectionDB::openCollection(QString path) -{ - m_db = QSqlDatabase::addDatabase("QSQLITE"); - m_db.setDatabaseName(path); - - if (!m_db.open()) - { - qDebug() << "Error: connection with database fail" <remove("tracks", where, "LIKE")) + qDebug() << "removePath error!"; emit DBactionFinished(false); - - if(!success) - { - qDebug() << "removePerson error: "; - - } - } - QString CollectionDB::getArtistArt(QString artist) { - QString artistHead; - - QSqlQuery queryHead("SELECT * FROM artists WHERE title = \""+artist+"\""); + QVariantMap where; + where.insert("title", artist); + QVariantList result = m_database->select("artists", where); - while (queryHead.next()) - if(!queryHead.value(1).toString().isEmpty()&&queryHead.value(1).toString()!="NULL") - artistHead = queryHead.value(1).toString(); - - return artistHead; + if (result.isEmpty()) + return QStringLiteral(""); + return result.at(0).toMap().value("art").toString(); } QString CollectionDB::getAlbumArt(QString album, QString artist) { - QString albumCover; - - QSqlQuery queryCover ("SELECT * FROM albums WHERE title = \""+album+"\" AND artist = \""+artist+"\""); - while (queryCover.next()) - if(!queryCover.value(2).toString().isEmpty()&&queryCover.value(2).toString()!="NULL") - albumCover = queryCover.value(2).toString(); - - return albumCover; + QVariantMap where; + where.insert("title", album); + where.insert("artist", artist); + QVariantList result = m_database->select("albums", where); + + if (result.isEmpty()) + return QStringLiteral(""); + return result.at(0).toMap().value("art").toString(); } -QList> CollectionDB::getTrackData(QStringList urls) +QList> CollectionDB::getTrackData(const QString &url) { - QList> mapList; - - for(auto url:urls) - { - QSqlQuery query("SELECT * FROM tracks WHERE location =\""+url+"\""); - if(query.exec()) - { - while(query.next()) - { - QString track = query.value(TRACK).toString(); - QString title = query.value(TITLE).toString(); - QString artist = query.value(ARTIST).toString(); - QString album = query.value(ALBUM).toString(); - QString genre = query.value(GENRE).toString(); - QString location = query.value(LOCATION).toString(); - QString stars = query.value(STARS).toString(); - QString babe = query.value(BABE).toString(); - QString art = query.value(ART).toString(); - QString playlist = query.value(PLAYLIST).toString(); - QString played = query.value(PLAYED).toString(); - - const QMap map{{TRACK,track}, {TITLE,title}, {ARTIST,artist},{ALBUM,album},{GENRE,genre},{LOCATION,location},{STARS,stars},{BABE,babe},{ART,art},{PLAYED,played},{PLAYLIST,playlist}}; - - mapList<> CollectionDB::getTrackData(QString queryText) +QList> CollectionDB::getTrackData(const QVariantMap &filter, const QString &orderBy, const QString &whereOperator, const QString &whereComparator) { QList> mapList; - QSqlQuery query; - query.prepare(queryText); - // qDebug()< map{{TRACK,track}, {TITLE,title}, {ARTIST,artist},{ALBUM,album},{GENRE,genre},{LOCATION,location},{STARS,stars},{BABE,babe},{ART,art},{PLAYED,played},{PLAYLIST,playlist}}; - - mapList<select("tracks", filter, -1, 0, orderBy, false, Database::SELECT_TYPE::All_Itens_Int, whereOperator, whereComparator); + int count = 0; + foreach (const QVariant &set, resultSet) { + count = 0; + QMap map; + QMapIterator entry(set.toMap()); + while (entry.hasNext()) { + entry.next(); + map.insert(count++, entry.value().toString()); } + qDebug() << "map: " << map; + mapList << map; } - return mapList; } - void CollectionDB::cleanCollectionLists() { - QSqlQuery queryArtists("SELECT * FROM artists"); - if(queryArtists.exec()) - { - while(queryArtists.next()) - { - QString oldArtists = queryArtists.value(0).toString(); - if(artists.contains(oldArtists)) - continue; - else - { - qDebug()<<"artists list does not longer contains: "<select("artists")) { + title = entry.toMap().value("title").toString(); + if (artists.contains(title)) + continue; + where.insert("title", title); + m_database->remove("artists", where); + where.clear(); } - QSqlQuery queryAlbums("SELECT * FROM albums"); - if(queryAlbums.exec()) - { - while(queryAlbums.next()) - { - QString oldAlbum = queryAlbums.value(1).toString()+" "+queryAlbums.value(0).toString(); - if(albums.contains(oldAlbum)) - continue; - else - { - qDebug()<<"albums list does not longer contains: "<select("albums")) { + albumMap = entry.toMap(); + oldAlbum = albumMap.value("artist").toString() + albumMap.value("title").toString(); + if (albums.contains(oldAlbum)) + continue; + where.insert("title", albumMap.value("title")); + m_database->remove("albums", where); + where.clear(); } } - - - -QSqlQuery CollectionDB::getQuery(QString queryTxt) -{ - QSqlQuery query(queryTxt); - return query; -} - - -bool CollectionDB::removeQuery(QString queryTxt) +QSqlQuery CollectionDB::getQuery(const QString &queryTxt) { - QSqlQuery query; - query.prepare(queryTxt); - - if(!query.exec()) - { - qDebug() << "removeQuery error: "<< query.lastError(); - return false; - }else return true; + return m_database->qsqlQuery(queryTxt); } bool CollectionDB::checkQuery(QString queryTxt) { - QSqlQuery query(queryTxt); - - qDebug()<<"The Query is: "<queryExec(queryTxt); } void CollectionDB::setCollectionLists() { - albums.clear(); artists.clear(); - QSqlQuery query ("SELECT * FROM tracks"); - while (query.next()) - { - QString artist = query.value(ARTIST).toString(); - QString album = query.value(ALBUM).toString(); - //QString file = query.value(LOCATION).toString(); - - if(!albums.contains(artist+" "+album)) albums<select("tracks")) { + map = entry.toMap(); + artist = map.value("artist").toString(); + album = map.value("album").toString(); + if (!albums.contains(artist + " " + album)) + albums << artist + " " + album; + if (!artists.contains(artist)) + artists << artist; } - // refreshArtistsTable(); - /*qDebug()<<"artist in collection list::"; - for(auto artist:artists)qDebug()<select("tracks")) { + map = entry.toMap(); + artist = map.value("artist").toString(); + QVariantMap insertMap; + insertMap.insert("title", artist); + insertMap.insert("art", ""); + insertMap.insert("location", QFileInfo(map.value("location").toString()).dir().path()); + if (!artists.contains(artist) && m_database->insert("artists", insertMap)) + artists << artist; } } bool CollectionDB::addTrack(QStringList paths, int babe) { + if (paths.isEmpty()) + return false; bool success = false; + int i = 0; + qDebug() << "started writing to database..."; + for (auto file : paths) { + qDebug() << file; + TagInfo info(file); + int track; + QString title, artist, album, genre; + track = info.getTrack(); + genre = info.getGenre(); + album = info.getAlbum(); + title = BaeUtils::fixString(info.getTitle()); + artist = BaeUtils::fixString(info.getArtist()); + + if (album.isEmpty()) { + qDebug() << "the album has not title, so i'm going to try and get it."; + info.writeData(); + album = info.getAlbum(); + } - if(paths.isEmpty()) return false; - - QSqlQuery query; - - if(query.exec("PRAGMA synchronous=OFF")) - { - success=true; - - int i=0; - qDebug()<<"started writing to database..."; - for(auto file:paths) - { - qDebug()<insert("tracks", insertMap) > 0) { + success = true; + qDebug() << "writting to db: " << title; + if (!albums.contains(artist + " " + album)) { + insertMap.clear(); + insertMap.insert("title", album); + insertMap.insert("artist", artist); + insertMap.insert("art", ""); + if (m_database->insert("albums", insertMap) > 0) { + albums << artist + " " + album; + success = true; + } else { + qDebug() << "can't save data in database!"; + return false; } - - emit progress((i++)+1); } - else - { - qDebug() << "adding track error: " - << query.lastError() - <insert("artists", insertMap)) + artists << artist; } + emit progress((i++)+1); + } else { + qDebug() << "can't save data in database! " << info.getTitle(); } - - qDebug()<<"finished wrrting to database"; - emit DBactionFinished(true); } - else return false; - + qDebug() << "finished writing to database! Status: " << success; + emit DBactionFinished(true); return success; } -void CollectionDB::insertCoverArt(QString path,QStringList info) -{ - //UPDATE albums SET art = "lalaltest" WHERE title = "Starboy" AND artist = "The Weeknd" - - qDebug()<<"the path:"<update("albums", updateMap, where) > 0) + if (!albums.contains(info.at(0))) + albums << info.at(1) + " " + info.at(0); } - -void CollectionDB::setTrackList(QList trackList) +void CollectionDB::insertHeadArt(const QString &art, const QStringList &info) { - this->trackList=trackList; - - /*for(auto tr:trackList) - { - qDebug()<update("artists", updateMap, where)) + if (!artists.contains(info.at(0))) + artists << info.at(0); } -bool CollectionDB::check_existance(QString tableName, QString searchId, QString search) +bool CollectionDB::hasTrack(const QString &searchId, const QString &searchTerm) { - QSqlQuery query; - query.prepare("SELECT "+ searchId +" FROM "+tableName+" WHERE "+searchId+" = (:search)"); - query.bindValue(":search", search); - - if (query.exec()) - { - if (query.next()) - { - qDebug()<< "it exists"; - return true; - }else - { - qDebug()<<"currnt song doesn't exists in db"; - return false; - } - - - }else - { - - - return false; - } - - + QVariantMap where; + where.insert(searchId, searchTerm); + QVariantList resultSet = m_database->select("tracks", where); + if (!resultSet.isEmpty()) + return resultSet.at(0).toMap().isEmpty(); + return false; } bool CollectionDB::execQuery(QString queryTxt) { - - QSqlQuery query; - query.prepare(queryTxt); - //query.prepare("SELECT * FROM "+tableName+" WHERE "+searchId+" = (:search)"); - - if(query.exec()) - { - qDebug()<<"executing query: "<update("tracks", update, where) > 0; } - -void CollectionDB::createTable(QString tableName) +void CollectionDB::insertPlaylist(const QString &name, const QString &color) { - - QSqlQuery query; - query.exec("CREATE TABLE "+tableName+"(track integer, title text, artist text, album text, genre text, location text unique, stars integer, babe integer, art text, played integer, playlist text);"); - + QVariantMap map; + map.insert("title", name); + map.insert("art", color); + m_database->insert("playlists", map); } -void CollectionDB::insertPlaylist(QString name, QString color) +QStringList CollectionDB::getPlaylists(int limit, int offset, const QString &orderBy) { - - - if(color.isEmpty()) - { - QSqlQuery query; - query.prepare("INSERT INTO playlists (title)" "VALUES (:title) "); - - query.bindValue(":title", name); - - if(query.exec()) - { - //qDebug()<<"insertInto<<"<<"UPDATE playlists SET title = "+ name ; - - } - }else if(name.isEmpty()) - { QSqlQuery query; - query.prepare("INSERT INTO playlists (title, art)" "VALUES (:title, :art) "); - - query.bindValue(":title", "mood"); - query.bindValue(":art", color); - - if(query.exec()) - { - //qDebug()<<"insertInto<<"<<"UPDATE playlists SET title = "+ name ; - - } - - }else if(!name.isEmpty()&&!color.isEmpty()) - { - - QSqlQuery query; - query.prepare("INSERT INTO playlists (title, art)" "VALUES (:title, :art) "); - - query.bindValue(":title", "mood"); - query.bindValue(":art", color); - if(query.exec()) - { - //qDebug()<<"insertInto<<"<<"UPDATE playlists SET title = "+ name ; - - } + QStringList playlists; + QVariantList resultSet = m_database->select("playlists", QVariantMap(), limit, offset, orderBy); + foreach (const QVariant &entry, resultSet) { + QString title = entry.toMap().value("title").toString(); + if (!title.contains("mood") && !title.isEmpty()) + playlists << entry.toMap().value("title").toString(); } - + return playlists; } -QStringList CollectionDB::getPlaylists() +QStringList CollectionDB::getPlaylistsMoods() { - QSqlQuery query; - QStringList files; - query.prepare("SELECT * FROM playlists"); - - if (query.exec()) - while (query.next()) - if(!query.value(0).toString().contains("mood")&&!query.value(0).toString().isEmpty()) - files << query.value(0).toString(); - - return files; - + return getPlaylists(-1, 0); } -QStringList CollectionDB::getPlaylistsMoods() +void CollectionDB::debugDatabaseMessage(const QString &message) { - QStringList moods; - QSqlQuery query; - - query.prepare("SELECT * FROM playlists order by title"); - - if (query.exec()) - while (query.next()) - if(!query.value(1).toString().isEmpty()&&query.value(0).toString().contains("mood")) - moods << query.value(1).toString(); - - return moods; - + qDebug() << message; } diff --git a/database.h b/database.h new file mode 100644 --- /dev/null +++ b/database.h @@ -0,0 +1,68 @@ +#ifndef DATABASE_H +#define DATABASE_H + +#include +#include +#include +#include +#include +#include + +class QUrl; +class QDir; +class QFile; +class QSqlError; +class QSqlRecord; +class QByteArray; +class QStringList; +class QQmlApplicationEngine; + +class Database : public QObject +{ + Q_OBJECT +private: + explicit Database(QObject *parent = 0); + Database(const Database &other); + void operator=(Database const &); + virtual ~Database(); + void openConnection(); + +public: + enum SELECT_TYPE + { + All_Itens_Int, + Meta_Key_Value_Int + }; + +public: + static Database *instance(); + void build(bool forceRebuild = false); + void setDatabaseName(); + bool sqliteFileExists(); + bool queryExec(const QString &sqlQueryString); + QSqlQuery qsqlQuery(const QString &queryTxt); + + QVariantList select(const QString &tableName, const QVariantMap &where = QVariantMap(), int limit = -1, int offset = 0, const QString &orderBy = QStringLiteral(""), bool descending = false, enum SELECT_TYPE select_type = All_Itens_Int, QString whereOperator = QStringLiteral("AND"), QString whereComparator = QStringLiteral("=")); + int insert(const QString &tableName, const QVariantMap &insertData); + int remove(const QString &tableName, const QVariantMap &where, const QString &whereOperator = "="); + int update(const QString &tableName, const QVariantMap &updateMap, const QVariantMap &where, QString whereOperator = "AND"); + + int lastInsertId(); + int numRowsAffected(); + int lastRowId(const QString &tableName); + + QString lastQuery() const; + +signals: + void created(); + void logMessage(const QString &message); + +private: + static Database *m_instance; + QString m_databaseName; + QString m_applicationName; + QSqlQuery m_qsqlQuery; + QSqlDatabase m_qSqlDatabase; +}; + +#endif // DATABASE_H diff --git a/database.cpp b/database.cpp new file mode 100644 --- /dev/null +++ b/database.cpp @@ -0,0 +1,354 @@ +#include "database.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +Database* Database::m_instance = nullptr; + +Database::Database(QObject *parent) : QObject(parent) +{ + m_applicationName = QApplication::applicationName(); + setDatabaseName(); + build(); +} + +Database::Database(const Database &other) : QObject() + ,m_databaseName(other.m_databaseName) + ,m_applicationName(other.m_applicationName) + ,m_qsqlQuery(other.m_qsqlQuery) + ,m_qSqlDatabase(other.m_qSqlDatabase) +{ +} + +Database::~Database() +{ + if (m_qSqlDatabase.isOpen()) + m_qSqlDatabase.close(); +} + +Database *Database::instance() +{ + if (!Database::m_instance) + Database::m_instance = new Database; + return Database::m_instance; +} + +void Database::openConnection() +{ + if (!m_qSqlDatabase.isOpen()) { + if (!QSqlDatabase::contains(m_applicationName)) { + m_qSqlDatabase = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), m_applicationName); + m_qSqlDatabase.setDatabaseName(m_databaseName); + } + m_qSqlDatabase = QSqlDatabase::database(m_applicationName); + m_qsqlQuery = QSqlQuery(m_qSqlDatabase); + } +} + +void Database::build(bool forceRebuild) +{ + if (forceRebuild) { + if (m_databaseName.isEmpty()) + setDatabaseName(); + QFile databaseFileTemp(m_databaseName); + databaseFileTemp.remove(); + } + if (!sqliteFileExists() && !forceRebuild) { + QFile file(":/DatabaseTables.sql"); + if (!file.exists()) { + QString log = QStringLiteral("Fatal error on build database. The file '"); + log.append(file.fileName() + QStringLiteral("' for database and tables creation query cannot be not found!")); + emit logMessage(log); + return; + } + if (!file.open(QIODevice::ReadOnly)) { + emit logMessage(QStringLiteral("Fatal error on try to create database! The file with sql queries for database creation cannot be opened!")); + return; + } + bool hasText; + QString line; + QByteArray readLine; + QString cleanedLine; + QStringList strings; + while (!file.atEnd()) { + hasText = false; + line = ""; + readLine = ""; + cleanedLine = ""; + strings.clear(); + while (!hasText) { + readLine = file.readLine(); + cleanedLine = readLine.trimmed(); + strings = cleanedLine.split("--"); + cleanedLine = strings.at(0); + if (!cleanedLine.startsWith("--") && !cleanedLine.startsWith("DROP") && !cleanedLine.isEmpty()) + line += cleanedLine; + if (cleanedLine.endsWith(";")) + break; + if (cleanedLine.startsWith("COMMIT")) + hasText = true; + } + if (!line.isEmpty()) + queryExec(line); + if (!m_qsqlQuery.isActive()) + emit logMessage(m_qsqlQuery.lastError().text()); + } + file.close(); + QFile::setPermissions(m_databaseName, QFile::WriteOwner | QFile::ReadOwner); + emit created(); + } else { + emit logMessage(QStringLiteral("Database file already exists! The build was ignored.")); + } +} + +void Database::setDatabaseName() +{ + // set the absolute path for .db sqlite file + QString fileName(m_applicationName+".db"); + if (qEnvironmentVariableIsSet("Q_OS_MAC") || qEnvironmentVariableIsSet("Q_OS_IOS")) { + QString qTmpDir(getenv("TMPDIR")); + qTmpDir.append("/"+fileName); + fileName = qTmpDir; + } else if (qEnvironmentVariableIsSet("Q_OS_ANDROID")) { + // set the database file to APK parent directory + fileName.prepend("../"); + } else { + // is desktop + QString path(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)+"/"+QApplication::applicationName()); + QDir qdir(path); + if (!qdir.exists()) + qdir.mkpath(path); + fileName.prepend(QUrl::fromLocalFile(path+"/").toLocalFile()); + } + // for sqlite, the databaseName is: + // the path (based on the OS) + the application name + .db + m_databaseName = fileName; +} + +bool Database::sqliteFileExists() +{ + return QFile(m_databaseName).exists(); +} + +QSqlQuery Database::qsqlQuery(const QString &queryTxt) +{ + openConnection(); + return QSqlQuery(queryTxt, m_qSqlDatabase); +} + +bool Database::queryExec(const QString &sqlQueryString) +{ + openConnection(); + if (!m_qSqlDatabase.isOpen()) { + emit logMessage(QStringLiteral("Fatal error on execute query! The database connection cannot be opened!")); + return false; + } else if (m_qsqlQuery.exec(sqlQueryString)) { + emit logMessage(QStringLiteral("Query success executed: ") + sqlQueryString); + return true; + } + QString error(m_qsqlQuery.lastError().text()); + if (!error.isEmpty()) { + error.prepend(QStringLiteral("Fatal error on execute query! The error is: ")); + error.append(QStringLiteral(" The query executed is: ") + sqlQueryString); + emit logMessage(error); + } + return false; +} + +QVariantList Database::select(const QString &tableName, const QVariantMap &where, int limit, int offset, const QString &orderBy, bool descending, enum SELECT_TYPE select_type, QString whereOperator, QString whereComparator) +{ + QVariantList resultSet; + if (tableName.isEmpty()) { + emit logMessage(QStringLiteral("Fatal error on select data! The table name is empty!")); + return resultSet; + } + + QString whereStr; + QVariantMap map; + QString sqlQueryString = QString(QStringLiteral("SELECT * FROM %1")).arg(tableName); + + if (!where.isEmpty()) { + int k = 0; + QMap::const_iterator i = where.constBegin(); + while (i != where.constEnd()) { + QString key(i.key()); + whereStr.append(QString(QStringLiteral("%1 %2 %3 '%4'")).arg((k++ == 0) ? "" : " " + whereOperator).arg(key).arg(whereComparator).arg(i.value().toString())); + ++i; + } + sqlQueryString.append(QStringLiteral(" WHERE ")).append(whereStr.remove(" ")); + } + + if (!orderBy.isEmpty()) { + sqlQueryString.append(QString(" ORDER BY %1").arg(orderBy)); + if (!orderBy.contains("asc") || orderBy.contains("desc")) + sqlQueryString.append(descending ? QStringLiteral(" DESC") : QStringLiteral(" ASC")); + } + + if (limit > 0 && offset == 0) + sqlQueryString.append(QStringLiteral(" LIMIT ") + QString::number(limit)); + else if (offset > 0) + sqlQueryString.append(QStringLiteral(" LIMIT ") + QString::number(limit) + " OFFSET " + QString::number(offset)); + if (!queryExec(sqlQueryString)) + return resultSet; + + QSqlRecord resultRecord = m_qsqlQuery.record(); + int totalColumns = resultRecord.count(); + if (resultRecord.isEmpty() || totalColumns == 0 || m_qsqlQuery.size() == 0) + return resultSet; + + QString fieldName = ""; + QVariant fieldValue = ""; + QSqlRecord record; + + while (m_qsqlQuery.next()) { + record = m_qsqlQuery.record(); + if (record.isEmpty() || !m_qsqlQuery.isValid()) + continue; + for (int i = 0; i < totalColumns; ++i) { + if (select_type == All_Itens_Int) { + fieldName = record.fieldName(i); + fieldValue = m_qsqlQuery.value(i); + } else if (select_type == Meta_Key_Value_Int) { + fieldName = m_qsqlQuery.value(0).toString(); + fieldValue = m_qsqlQuery.value(1); + } + map.insert(fieldName, fieldValue); + } + if (!map.isEmpty()) + resultSet.append(map); + } + return resultSet; +} + +int Database::insert(const QString &tableName, const QVariantMap &insertData) +{ + if (tableName.isEmpty()) { + emit logMessage(QStringLiteral("Fatal error on insert data! The table name is empty!")); + return 0; + } else if (insertData.isEmpty()) { + emit logMessage(QStringLiteral("Fatal error on insert data! The insertData parameter is empty!")); + return 0; + } + + int i = 0; + QStringList values; + QStringList fields = insertData.keys(); + int totalFields = fields.size(); + for (i = 0; i < totalFields; ++i) + values.append("?"); + openConnection(); + + if (!m_qSqlDatabase.isOpen()) { + emit logMessage(QStringLiteral("Fatal error on insert data! Database connection cannot be opened!")); + return 0; + } + + m_qsqlQuery.prepare(QString(QStringLiteral("INSERT INTO %1(%2) VALUES(%3)")).arg(tableName).arg(QString(fields.join(","))).arg(QString(values.join(",")))); + + for (i = 0; i < totalFields; ++i) + m_qsqlQuery.addBindValue(insertData.value(QString(fields.at(i)), "")); + + int lastId = 0; + if (m_qsqlQuery.exec()) + lastId = lastInsertId(); + + return lastId; +} + +int Database::remove(const QString &tableName, const QVariantMap &where, const QString &whereOperator) +{ + if (tableName.isEmpty()) { + emit logMessage(QStringLiteral("Fatal error on remove data! The table name is empty!")); + return 0; + } else if (where.isEmpty()) { + emit logMessage(QStringLiteral("Fatal error on remove data! The where parameter is empty!")); + return 0; + } + int k = 0; + QString whereStr = ""; + QString separator = ""; + QMap::const_iterator j = where.constBegin(); + while (j != where.constEnd()) { + separator = (k++ == 0) ? QStringLiteral("") : QStringLiteral(" AND "); + whereStr += QString("%1%2 %3 '%4'").arg(separator).arg(j.key()).arg(whereOperator).arg(j.value().toString()); + ++j; + } + if (queryExec(QString(QStringLiteral("DELETE FROM %1 WHERE %2")).arg(tableName).arg(whereStr))) + return numRowsAffected(); + return 0; +} + +int Database::update(const QString &tableName, const QVariantMap &updateMap, const QVariantMap &where, QString whereOperator) +{ + if (tableName.isEmpty()) { + emit logMessage(QStringLiteral("Fatal error on update data! The table name is empty!")); + return 0; + } else if (where.empty()) { + emit logMessage(QStringLiteral("Fatal error on update data! The WHERE parameter must be set to update operation!")); + return 0; + } + QString whereStr = ""; + QString updateValues = ""; + { + int k = 0; + QString separator; + QMap::const_iterator i = updateMap.constBegin(); + while (i != updateMap.constEnd()) { + separator = (k++ == 0) ? "" : ","; + updateValues.append(QString("%1%2 = '%3'").arg(separator).arg(i.key()).arg(i.value().toString())); + ++i; + } + k = 0; + separator = ""; + i = where.constBegin(); + while (i != where.constEnd()) { + separator = (k++ == 0) ? "" : whereOperator.append(" ").prepend(" "); + whereStr += QString("%1%2 = '%3'").arg(separator).arg(i.key()).arg(i.value().toString()); + ++i; + } + } + if (queryExec(QString("UPDATE %1 SET %2 WHERE %3").arg(tableName).arg(updateValues).arg(whereStr))) + return numRowsAffected(); + return 0; +} + +int Database::lastInsertId() +{ + // WARNING! + // lastInsertId() return value that have been auto-generated by the autoincremented column! + QVariant idTemp = m_qsqlQuery.lastInsertId(); + return idTemp.isValid() ? idTemp.toInt() : 0; +} + +int Database::lastRowId(const QString &tableName) +{ + int rowId = 0; + if (tableName.isEmpty()) { + emit logMessage(QStringLiteral("Fatal error on lastRowId method! The table name is empty!")); + } else if (queryExec(QString("SELECT ROWID from %1 order by ROWID DESC limit 1").arg(tableName))) { + while (m_qsqlQuery.next()) + rowId = m_qsqlQuery.value(0).toInt(); + } + return rowId; +} + +int Database::numRowsAffected() +{ + return m_qsqlQuery.numRowsAffected(); +} + +QString Database::lastQuery() const +{ + return m_qsqlQuery.executedQuery(); +} diff --git a/mainwindow.h b/mainwindow.h --- a/mainwindow.h +++ b/mainwindow.h @@ -42,7 +42,6 @@ #include "settings.h" #include "collectionDB.h" - namespace Ui { class MainWindow; } @@ -50,7 +49,6 @@ class MainWindow : public QMainWindow { Q_OBJECT - public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); @@ -60,16 +58,15 @@ void clearCurrentList(); bool isBabed(QMap track); void feedRabbit(); - QStringList searchKeys = {"location:","artist:","album:","title:","genre:" }; - + QStringList searchKeys = {"location:", "artist:", "album:", "title:", "genre:"}; enum views { - COLLECTION,ALBUMS,ARTISTS,PLAYLISTS,RABBIT,INFO,SETTINGS,RESULTS + COLLECTION, ALBUMS, ARTISTS, PLAYLISTS, RABBIT, INFO, SETTINGS, RESULTS }; enum utilsBar { - INFO_UB,PLAYLISTS_UB,SEARCH_UB,ALBUMS_UB,ARTISTS_UB,COLLECTION_UB, FAVORITES_UB,RABBIT_UB + INFO_UB, PLAYLISTS_UB, SEARCH_UB, ALBUMS_UB, ARTISTS_UB, COLLECTION_UB, FAVORITES_UB, RABBIT_UB }; enum viewModes { @@ -80,7 +77,6 @@ REGULAR, SHUFFLE, REPEAT }; - protected: virtual void enterEvent(QEvent *event); virtual void leaveEvent(QEvent *event); @@ -92,7 +88,6 @@ virtual void keyPressEvent(QKeyEvent *event); public slots: - void addToPlaylist(QList> mapList, bool notRepeated=false); void putPixmap(QByteArray array); void populateResultsTable(QList> mapList); @@ -100,18 +95,16 @@ void dummy(); private slots: - + void update(); void on_hide_sidebar_btn_clicked(); void on_shuffle_btn_clicked(); void on_open_btn_clicked(); void on_mainList_clicked(QList> list); - void update(); void on_seekBar_sliderMoved(int position); void on_play_btn_clicked(); void on_backward_btn_clicked(); void on_foward_btn_clicked(); - /*the main views*/ void collectionView(); void albumsView(); @@ -122,9 +115,8 @@ void settingsView(); /*the view stacked actions*/ - - bool addToCollectionDB(QStringList url,QString babe=0); - void scanNewDir(QString url,QString babe="0"); + bool addToCollectionDB(QStringList url,QString babe = 0); + void scanNewDir(QString url, QString babe = "0"); void setToolbarIconSize(int iconSize); void collectionDBFinishedAdding(bool state); void on_fav_btn_clicked(); @@ -133,14 +125,13 @@ void on_search_returnPressed(); void on_search_textChanged(const QString &arg1); - //void on_resultsPLaylist_clicked(); void setCoverArt(QString artist, QString album, QString title); void orderTables(); - void on_rowInserted(QModelIndex model ,int x,int y); + void on_rowInserted(QModelIndex model, int x, int y); void AlbumsViewOrder(QString order); void refreshTables(); - void addToPlayed(QString url); + void addToPlayed(const QString &url); void on_refreshBtn_clicked(); void on_tracks_view_2_clicked(); void on_refreshAll_clicked(); @@ -164,9 +155,8 @@ void albumDoubleClicked(QMap info); private: - Ui::MainWindow *ui; - const QString stylePath = BaeUtils::getSettingPath()+"style.qss"; + const QString stylePath = BaeUtils::getSettingPath() + "style.qss"; Qt::WindowFlags defaultWindowFlags; Notify nof; @@ -190,6 +180,7 @@ void expand(); void go_mini(); void go_playlistMode(); + QList> readTrackData(const QString &album, const QString &artist); QFrame *rightFrame; QGridLayout *leftFrame_layout; @@ -208,7 +199,6 @@ QWidget *playlistWidget; QFrame *leftFrame; - /*the views*/ BabeTable *mainList; BabeTable *collectionTable; @@ -241,7 +231,7 @@ int mini_mode = FULLMODE; int prevIndex; int lCounter = 0; - int shuffle_state = REGULAR; + int shuffle_state = REGULAR; bool repeat = false; bool muted = false; @@ -251,15 +241,10 @@ QSize prevSize; - signals: void finishedPlayingSong(QString url); void collectionChecked(); void fetchCover(QString artist, QString album, QString title); - }; - - - #endif // MAINWINDOW_H diff --git a/mainwindow.cpp b/mainwindow.cpp --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -12,14 +12,12 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - */ - +*/ #include "mainwindow.h" +#include "collectionDB.h" #include "ui_mainwindow.h" - MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) @@ -32,9 +30,6 @@ this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); defaultWindowFlags = this->windowFlags(); - //mpris = new Mpris(this); - - //connect(this, &MainWindow::finishedPlayingSong, this, &MainWindow::addToPlayed); connect(this, SIGNAL(finishedPlayingSong(QString)),this,SLOT(addToPlayed(QString))); connect(this,SIGNAL(fetchCover(QString,QString,QString)),this,SLOT(setCoverArt(QString,QString,QString))); connect(this,SIGNAL(collectionChecked()),this,SLOT(refreshTables())); @@ -48,13 +43,13 @@ this->setUpActions(); //* CHECK FOR DATABASE *// - if(settings_widget->checkCollection()) - { + if (settings_widget->checkCollection()) { settings_widget->collection_db.setCollectionLists(); populateMainList(); emit collectionChecked(); - - } else settings_widget->createCollectionDB(); + } else { + settings_widget->createCollectionDB(); + } timer = new QTimer(this); connect(timer, &QTimer::timeout, [this]() @@ -70,9 +65,8 @@ /*LOAD THE STYLE*/ QFile styleFile(stylePath); - if(styleFile.exists()) - { - qDebug()<<"A Babe style file exists"; + if (styleFile.exists()) { + qDebug() << "A Babe style file exists"; styleFile.open(QFile::ReadOnly); QString style(styleFile.readAll()); this->setStyleSheet(style); @@ -80,24 +74,22 @@ setToolbarIconSize(settings_widget->getToolbarIconSize()); mainList->setCurrentCell(0,BabeTable::TITLE); - if(mainList->rowCount()>0) - { + if (mainList->rowCount() > 0) { loadTrack(); collectionView(); go_playlistMode(); - }else collectionView(); - + } else { + collectionView(); + } updater->start(1000); } - MainWindow::~MainWindow() { delete ui; } - //*HERE THE MAIN VIEWS GET SETUP WITH THEIR SIGNALS AND SLOTS**// void MainWindow::setUpViews() { @@ -108,13 +100,11 @@ connect(playlistTable->table,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); connect(playlistTable->table,SIGNAL(removeIt_clicked(int)),this,SLOT(removeSong(int))); connect(playlistTable->table,&BabeTable::babeIt_clicked,this,&MainWindow::babeIt); - //connect(playlistTable->table,SIGNAL(createPlaylist_clicked()),this,SLOT(playlistsView())); connect(playlistTable->table,&BabeTable::queueIt_clicked,this,&MainWindow::addToQueue); connect(playlistTable->table,SIGNAL(moodIt_clicked(QString)),playlistTable,SLOT(createMoodPlaylist(QString))); connect(playlistTable->table,SIGNAL(infoIt_clicked(QString, QString, QString)),this,SLOT(infoIt(QString, QString, QString))); collectionTable = new BabeTable(this); - //connect(collectionTable, &BabeTable::tableWidget_doubleClicked, this, &MainWindow::addToPlaylist); connect(collectionTable,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); connect(collectionTable,SIGNAL(enteredTable()),this,SLOT(hideControls())); connect(collectionTable,SIGNAL(leftTable()),this,SLOT(showControls())); @@ -129,14 +119,11 @@ mainList->hideColumn(BabeTable::ALBUM); mainList->hideColumn(BabeTable::ARTIST); mainList->horizontalHeader()->setVisible(false); - //mainList->setFixedWidth(200); mainList->setMaximumWidth(200); mainList->setMinimumHeight(200); mainList->setAddMusicMsg("\nDrag and drop music here!"); connect(mainList, &BabeTable::tableWidget_doubleClicked, this, &MainWindow::on_mainList_clicked); - //connect(mainList,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(on_mainList_clicked(QList>))); connect(mainList, &BabeTable::removeIt_clicked, this, &MainWindow::removeSong); - //connect(mainList,SIGNAL(removeIt_clicked(int)),this,SLOT(removeSong(int))); connect(mainList,&BabeTable::babeIt_clicked,this,&MainWindow::babeIt); connect(mainList,&BabeTable::queueIt_clicked,this,&MainWindow::addToQueue); connect(mainList,SIGNAL(moodIt_clicked(QString)),playlistTable,SLOT(createMoodPlaylist(QString))); @@ -160,7 +147,6 @@ connect(rabbitTable,&RabbitView::playAlbum,this,&MainWindow::putOnPlay); connect(rabbitTable->getTable(),SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); - albumsTable = new AlbumsView(false,this); connect(albumsTable,SIGNAL(albumOrderChanged(QString)),this,SLOT(AlbumsViewOrder(QString))); connect(albumsTable->albumTable,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); @@ -197,7 +183,6 @@ connect(settings_widget, SIGNAL(toolbarIconSizeChanged(int)), this, SLOT(setToolbarIconSize(int))); connect(settings_widget, SIGNAL(collectionDBFinishedAdding(bool)), this, SLOT(collectionDBFinishedAdding(bool))); connect(settings_widget, SIGNAL(dirChanged(QString,QString)),this, SLOT(scanNewDir(QString, QString))); - //connect(settings_widget, SIGNAL(collectionPathRemoved(QString)),&settings_widget->getCollectionDB(), SLOT(removePath(QString))); connect(settings_widget, SIGNAL(refreshTables()),this, SLOT(refreshTables())); /* THE BUTTONS VIEWS */ @@ -219,7 +204,6 @@ views->addWidget(infoTable); views->addWidget(settings_widget); views->addWidget(resultsTable); - } void MainWindow::setUpSidebar() @@ -236,7 +220,6 @@ ui->mainToolBar->setStyleSheet(QString("QToolBar {margin:0; background-color:rgba( 0, 0, 0, 0); background-image:url('%1');} QToolButton{ border-radius:0;}" " QToolButton:checked{border-radius:0; background: %2}").arg(":Data/data/pattern.png",this->palette().color(QPalette::Highlight).name())); - //ui->mainToolBar->setStyleSheet(QString("QToolBar{margin:0 background-image:url('%1') repeat; }QToolButton{ border-radius:0;} QToolButton:checked{border-radius:0; background: rgba(0,0,0,50)}").arg(":Data/data/pattern.png")); ui->mainToolBar->setOrientation(Qt::Vertical); ui->mainToolBar->addWidget(left_spacer); @@ -262,7 +245,6 @@ ui->mainToolBar->addWidget(ui->settings_view); ui->mainToolBar->addWidget(right_spacer); - } void MainWindow::setUpCollectionViewer() @@ -305,7 +287,6 @@ utilsBar->actions().at(ALBUMS_UB)->setVisible(false); utilsBar->actions().at(ARTISTS_UB)->setVisible(false); - ui->search->setClearButtonEnabled(true); ui->search->setPlaceholderText("Search..."); @@ -330,7 +311,6 @@ void MainWindow::setUpPlaylist() { - auto *playlistWidget_layout = new QGridLayout(); playlistWidget_layout->setContentsMargins(0,0,0,0); playlistWidget_layout->setSpacing(0); @@ -344,8 +324,6 @@ connect(album_art,&Album::babeAlbum_clicked,this,&MainWindow::babeAlbum); album_art->setFixedSize(200,200); - // album_art->setFixedHeight(200); - // album_art->setMaximumWidth(200); album_art->setTitleGeometry(0,0,200,30); album_art->titleVisible(false); @@ -361,14 +339,6 @@ seekBar->setFixedHeight(5); seekBar->setStyleSheet(QString("QSlider { background:transparent;} QSlider::groove:horizontal {border: none; background: transparent; height: 5px; border-radius: 0; } QSlider::sub-page:horizontal { background: %1;border: none; height: 5px;border-radius: 0;} QSlider::add-page:horizontal {background: transparent; border: none; height: 5px; border-radius: 0; } QSlider::handle:horizontal {background: %1; width: 8px; } QSlider::handle:horizontal:hover {background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #fff, stop:1 #ddd);border: 1px solid #444;border-radius: 4px;}QSlider::sub-page:horizontal:disabled {background: transparent;border-color: #999;}QSlider::add-page:horizontal:disabled {background: transparent;border-color: #999;}QSlider::handle:horizontal:disabled {background: transparent;border: 1px solid #aaa;border-radius: 4px;}").arg(this->palette().color(QPalette::Highlight).name())); - /* addMusicImg = new QLabel(); - addMusicImg->setPixmap(QPixmap(":Data/data/add.png").scaled(120,120,Qt::KeepAspectRatio)); - // addMusicImg->setGeometry(45,40,120,120); - addMusicImg->setVisible(false); - - int id = QFontDatabase::addApplicationFont(":Data/data/LilyScriptOne-Regular.ttf"); - QString family = QFontDatabase::applicationFontFamilies(id).at(0);*/ - ui->filterBox->setVisible(false); ui->filter->setClearButtonEnabled(true); ui->filterBtn->setChecked(false); @@ -401,17 +371,15 @@ auto changeIt = new QAction("Change Playlist..."); refreshBtn_menu->addAction(changeIt); - playlistWidget_layout->addWidget(album_art, 0,0,Qt::AlignTop); - playlistWidget_layout->addWidget(ui->frame_6,1,0); - playlistWidget_layout->addWidget(seekBar,2,0); - playlistWidget_layout->addWidget(ui->frame_4,3,0); - playlistWidget_layout->addWidget(mainList,4,0); - playlistWidget_layout->addWidget(ui->frame_5,5,0); - playlistWidget_layout->addWidget(ui->playlistUtils,6,0); - + playlistWidget_layout->addWidget(album_art, 0, 0, Qt::AlignTop); + playlistWidget_layout->addWidget(ui->frame_6, 1, 0); + playlistWidget_layout->addWidget(seekBar, 2, 0); + playlistWidget_layout->addWidget(ui->frame_4, 3, 0); + playlistWidget_layout->addWidget(mainList, 4, 0); + playlistWidget_layout->addWidget(ui->frame_5, 5, 0); + playlistWidget_layout->addWidget(ui->playlistUtils, 6, 0); } - void MainWindow::setUpRightFrame() { auto *rightFrame_layout = new QGridLayout(); @@ -429,82 +397,67 @@ void MainWindow::setUpActions() { - } void MainWindow::changedArt(QMap info) { - QString artist =info[Album::ARTIST]; + qDebug() << "call to changedArt"; + QString artist = info[Album::ARTIST]; QString album = info[Album::ALBUM]; QString path = info[Album::ART]; - settings_widget->collection_db.execQuery(QString("UPDATE albums SET art = \"%1\" WHERE title = \"%2\" AND artist = \"%3\"").arg(path,album,artist) ); + settings_widget->collection_db.execQuery(QString("UPDATE albums SET art = \"%1\" WHERE title = \"%2\" AND artist = \"%3\"").arg(path, album, artist)); } void MainWindow::albumDoubleClicked(QMap info) { - QString artist =info[Album::ARTIST]; - QString album = info[Album::ALBUM]; - - QList> mapList; - - if(album.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" ORDER by album asc, track asc")); - else if(!album.isEmpty()&&!artist.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" AND album = \""+album+"\" ORDER by track asc")); - - if(!mapList.isEmpty()) addToPlaylist(mapList); + QList> mapList = readTrackData(info[Album::ALBUM], info[Album::ARTIST]); + if (!mapList.isEmpty()) + addToPlaylist(mapList); +} +QList> MainWindow::readTrackData(const QString &album, const QString &artist) +{ + QList> mapList; + QVariantMap filter; + filter.insert("artist", artist); + if (album.isEmpty()) { + mapList = settings_widget->getCollectionDB().getTrackData(filter, QString("album asc, track asc")); + } else if (!album.isEmpty() && !artist.isEmpty()) { + filter.insert("album", album); + mapList = settings_widget->getCollectionDB().getTrackData(filter, QString("track asc")); + } + return mapList; } void MainWindow::putOnPlay(QMap info) { - QString artist =info[Album::ARTIST]; - QString album = info[Album::ALBUM]; - - if(!artist.isEmpty()||!album.isEmpty()) - { - qDebug()<<"put on play<<"<> mapList; - - if(album.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" ORDER by album asc, track asc")); - else if(!album.isEmpty()&&!artist.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" AND album = \""+album+"\" ORDER by track asc")); - - if(!mapList.isEmpty()) - { + if (!info.isEmpty()) { + qDebug() << "put on play<< " << info[Album::ARTIST] << info[Album::ALBUM]; + QList> mapList = readTrackData(info[Album::ALBUM], info[Album::ARTIST]); + if (!mapList.isEmpty()) { mainList->flushTable(); currentList.clear(); - addToPlaylist(mapList); - - if(mainList->rowCount()>0) - { - mainList->setCurrentCell(0,BabeTable::TITLE); - lCounter=0; + if (mainList->rowCount() > 0) { + mainList->setCurrentCell(0, BabeTable::TITLE); + lCounter = 0; loadTrack(); } } } - } -void MainWindow::addToPlayed(QString url) +void MainWindow::addToPlayed(const QString &url) { - if(settings_widget->getCollectionDB().checkQuery("SELECT * FROM tracks WHERE location = \""+url+"\"")) - { - qDebug()<<"Song totally played"<getCollectionDB().getQuery("SELECT * FROM tracks WHERE location = \""+url+"\""); - + QList> list = settings_widget->getCollectionDB().getTrackData(url); + if (list.size() > 0) { int played = 0; - while (query.next()) played = query.value(BabeTable::PLAYED).toInt(); - qDebug()<getCollectionDB().insertInto("tracks","played",url,played+1)) - qDebug()< map; + foreach (map, list) + played = map.value(BabeTable::PLAYED).toInt(); + QVariantMap where; + where.insert("location", url); + settings_widget->getCollectionDB().updateTrack("played", url, played+1); } } @@ -512,7 +465,6 @@ { if(mini_mode == FULLMODE && event->size().width() < this->minimumSize().width()+20) go_playlistMode(); - QMainWindow::resizeEvent(event); } @@ -520,15 +472,10 @@ { collectionTable->flushTable(); collectionTable->populateTableView("SELECT * FROM tracks"); - // favoritesTable->flushTable(); - //favoritesTable->populateTableView("SELECT * FROM tracks WHERE stars > \"0\" OR babe = \"1\""); - //albumsTable->flushGrid(); albumsTable->populateTableView(settings_widget->collection_db.getQuery("SELECT * FROM albums ORDER by title asc")); albumsTable->hideAlbumFrame(); - //artistsTable->flushGrid(); artistsTable->populateTableViewHeads(settings_widget->collection_db.getQuery("SELECT * FROM artists ORDER by title asc")); artistsTable->hideAlbumFrame(); - playlistTable->list->clear(); playlistTable->setDefaultPlaylists(); QStringList playLists =settings_widget->getCollectionDB().getPlaylists(); @@ -547,45 +494,9 @@ void MainWindow::keyPressEvent(QKeyEvent *event) //todo { - QMainWindow::keyPressEvent(event); - /*switch (event->key()) - { - case Qt::Key_Return : - { - lCounter = getIndex(); - if(lCounter != -1) - { - //ui->play->setChecked(false); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); - ui->search->clear(); - loadTrack(); - } - break; - } - case Qt::Key_Up : - { - int ind = getIndex() - 1;if(ind < 0)ind = ui->listWidget->count() - 1; - ui->listWidget->setCurrentRow(ind); - break; - } - case Qt::Key_Down : - { - int ind = getIndex() + 1;if(ind >= ui->listWidget->count())ind = 0; - ui->listWidget->setCurrentRow(ind); - break; - } - default : - { - //ui->search->setFocusPolicy(Qt::StrongFocus); - //ui->search->setFocus(); - qDebug()<<"trying to focus the serachbar"; - break; - } - }*/ } - void MainWindow::enterEvent(QEvent *event) { event->accept(); @@ -598,15 +509,30 @@ hideControls(); } -void MainWindow::hideControls() { ui->controls->setVisible(false); } +void MainWindow::hideControls() +{ + ui->controls->setVisible(false); +} -void MainWindow::showControls() { ui->controls->setVisible(true); } +void MainWindow::showControls() +{ + ui->controls->setVisible(true); +} -void MainWindow::dragEnterEvent(QDragEnterEvent *event) { event->accept(); } +void MainWindow::dragEnterEvent(QDragEnterEvent *event) +{ + event->accept(); +} -void MainWindow::dragLeaveEvent(QDragLeaveEvent *event) { event->accept(); } +void MainWindow::dragLeaveEvent(QDragLeaveEvent *event) +{ + event->accept(); +} -void MainWindow::dragMoveEvent(QDragMoveEvent *event) { event->accept(); } +void MainWindow::dragMoveEvent(QDragMoveEvent *event) +{ + event->accept(); +} void MainWindow::dropEvent(QDropEvent *event) { @@ -615,48 +541,44 @@ QList urls = event->mimeData()->urls(); qDebug()<< urls; - if(urls.isEmpty()) - { + if (urls.isEmpty()) { auto info = event->mimeData()->text(); auto infoList = info.split("/by/"); - - if(infoList.size()==2) - { - //qDebug()<<"album: " << infoList.at(0) << "artist: "<< infoList.at(1); + QVariantMap filter; + filter.insert("artist", ""); + if (infoList.size()==2) { QString _artist = infoList.at(1).simplified(); QString _album = infoList.at(0).simplified(); - mapList = settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+_artist+"\" and album = \""+_album+"\" ORDER by track asc ")); - - }else - mapList = settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+info+"\" ORDER by album asc, track asc ")); - + filter.insert("artist", _artist); + filter.insert("album", _album); + mapList = settings_widget->collection_db.getTrackData(filter, QString("track asc")); + } else { + filter.insert("artist", info); + mapList = settings_widget->collection_db.getTrackData(filter, QString("album asc, track asc")); + } addToPlaylist(mapList); - - }else - { + } else { QList urls = event->mimeData()->urls(); - QStringList trackList; - for( auto url : urls) - { - if(QFileInfo(url.path()).isDir()) - { + for (auto url : urls) { + if (QFileInfo(url.path()).isDir()) { QDirIterator it(url.path(), settings_widget->formats, QDir::Files, QDirIterator::Subdirectories); - - while (it.hasNext()) trackList<add(trackList); addToPlaylist(tracks->getTracksData()); } } - -void MainWindow::dummy() { qDebug()<<"TEST on DUMMYT"; } +void MainWindow::dummy() +{ + qDebug() << "TEST on DUMMYT"; +} void MainWindow::setCoverArt(QString artist, QString album,QString title) { @@ -668,41 +590,29 @@ void MainWindow::putPixmap(QByteArray array) { - if(!array.isEmpty()) album_art->putPixmap(array); - else album_art->putDefaultPixmap(); + if (!array.isEmpty()) + album_art->putPixmap(array); + else + album_art->putDefaultPixmap(); } void MainWindow::setToolbarIconSize(int iconSize) //tofix { - qDebug()<< "Toolbar icons size changed"; ui->mainToolBar->setIconSize(QSize(iconSize,iconSize)); - //playback->setIconSize(QSize(iconSize,iconSize)); - //utilsBar->setIconSize(QSize(iconSize,iconSize)); ui->mainToolBar->update(); - //this->utilsBar->setIconSize(QSize(iconSize,iconSize)); - /*for (auto obj : ui->collectionUtils->children()) - { - if(static_cast(obj)!=0) - { - //static_cast(obj)->setIconSize(QSize(iconSize,iconSize)); - } - }*/ - //playback->update(); - // this->update(); } void MainWindow::collectionView() { views->setCurrentIndex(COLLECTION); - - if(mini_mode != FULLMODE) expand(); - + if (mini_mode != FULLMODE) + expand(); utilsBar->actions().at(ALBUMS_UB)->setVisible(false); utilsBar->actions().at(ARTISTS_UB)->setVisible(false); utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false); + utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); + ui->frame_3->setVisible(false); utilsBar->actions().at(INFO_UB)->setVisible(false); - ui->tracks_view->setChecked(true); prevIndex=views->currentIndex(); } @@ -710,105 +620,100 @@ void MainWindow::albumsView() { views->setCurrentIndex(ALBUMS); - - if(mini_mode != FULLMODE) expand(); - + if (mini_mode != FULLMODE) + expand(); utilsBar->actions().at(ALBUMS_UB)->setVisible(true); utilsBar->actions().at(ARTISTS_UB)->setVisible(false); utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false); + utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); + ui->frame_3->setVisible(false); utilsBar->actions().at(INFO_UB)->setVisible(false); - prevIndex = views->currentIndex(); } void MainWindow::playlistsView() { views->setCurrentIndex(PLAYLISTS); - - // playlistTable->list->itemClicked(playlistTable->list->indexAt(); - - if(mini_mode != FULLMODE) expand(); - + if (mini_mode != FULLMODE) + expand(); utilsBar->actions().at(ALBUMS_UB)->setVisible(false); utilsBar->actions().at(ARTISTS_UB)->setVisible(false); utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(true); ui->frame_3->setVisible(true); + utilsBar->actions().at(PLAYLISTS_UB)->setVisible(true); + ui->frame_3->setVisible(true); utilsBar->actions().at(INFO_UB)->setVisible(false); - prevIndex = views->currentIndex(); } void MainWindow::rabbitView() { views->setCurrentIndex(RABBIT); - - if(mini_mode != FULLMODE) expand(); - + if (mini_mode != FULLMODE) + expand(); prevSize = this->size(); - utilsBar->actions().at(ALBUMS_UB)->setVisible(false); utilsBar->actions().at(ARTISTS_UB)->setVisible(false); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false); + utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); + ui->frame_3->setVisible(false); utilsBar->actions().at(INFO_UB)->setVisible(false); - prevIndex = views->currentIndex(); } void MainWindow::infoView() { views->setCurrentIndex(INFO); - - if(mini_mode != FULLMODE) expand(); - + if (mini_mode != FULLMODE) + expand(); utilsBar->actions().at(ALBUMS_UB)->setVisible(false); utilsBar->actions().at(ARTISTS_UB)->setVisible(false); utilsBar->actions().at(COLLECTION_UB)->setVisible(true); utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); - utilsBar->actions().at(INFO_UB)->setVisible(true); ui->frame_3->setVisible(true); - + utilsBar->actions().at(INFO_UB)->setVisible(true); + ui->frame_3->setVisible(true); prevIndex = views->currentIndex(); } void MainWindow::artistsView() { views->setCurrentIndex(ARTISTS); - - if(mini_mode != FULLMODE) expand(); - + if (mini_mode != FULLMODE) + expand(); utilsBar->actions().at(ALBUMS_UB)->setVisible(false); utilsBar->actions().at(ARTISTS_UB)->setVisible(true); utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->hide(); + utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); + ui->frame_3->hide(); utilsBar->actions().at(INFO_UB)->setVisible(false); - prevIndex = views->currentIndex(); } - void MainWindow::settingsView() { views->setCurrentIndex(SETTINGS); - - if(mini_mode != FULLMODE) expand(); - + if (mini_mode != FULLMODE) + expand(); utilsBar->actions().at(ALBUMS_UB)->setVisible(false); utilsBar->actions().at(ARTISTS_UB)->setVisible(false); utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false); + utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); + ui->frame_3->setVisible(false); utilsBar->actions().at(INFO_UB)->setVisible(false); - prevIndex = views->currentIndex(); } void MainWindow::expand() { ui->tracks_view_2->setVisible(false); - if(!leftFrame->isVisible()) leftFrame->setVisible(true); - if(!ui->frame_4->isVisible()) ui->frame_4->setVisible(true); - if(!mainList->isVisible()) mainList->setVisible(true); - if(!ui->frame_5->isVisible()) ui->frame_5->setVisible(true); - if(!ui->playlistUtils->isVisible()) ui->playlistUtils->setVisible(true); + if (!leftFrame->isVisible()) + leftFrame->setVisible(true); + if (!ui->frame_4->isVisible()) + ui->frame_4->setVisible(true); + if (!mainList->isVisible()) + mainList->setVisible(true); + if (!ui->frame_5->isVisible()) + ui->frame_5->setVisible(true); + if (!ui->playlistUtils->isVisible()) + ui->playlistUtils->setVisible(true); album_art->borderColor=false; @@ -818,28 +723,22 @@ this->setMaximumSize(QWIDGETSIZE_MAX,QWIDGETSIZE_MAX); this->setMinimumSize(0,0); - this->resize(700,500); - /*this->setWindowFlags(defaultWindowFlags); - this->show();*/ ui->hide_sidebar_btn->setToolTip("Go Mini"); ui->hide_sidebar_btn->setIcon(QIcon(":Data/data/mini_mode.svg")); - mini_mode=FULLMODE; + mini_mode = FULLMODE; } void MainWindow::go_mini() { - leftFrame->setVisible(false); ui->frame_4->setVisible(false); mainList->setVisible(false); ui->frame_5->setVisible(false); ui->playlistUtils->setVisible(false); - //album_art->borderColor=true; - rightFrame->setFrameShadow(QFrame::Plain); rightFrame->setFrameShape(QFrame::NoFrame); @@ -847,58 +746,62 @@ this->setFixedSize(200,200); mainLayout->setContentsMargins(0,0,0,0); - /*this->setWindowFlags(this->windowFlags() | Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); - this->show();*/ - //this->updateGeometry(); - //this->setfix(minimumSizeHint()); - //this->adjustSize(); ui->hide_sidebar_btn->setToolTip("Expand"); ui->hide_sidebar_btn->setIcon(QIcon(":Data/data/full_mode.svg")); - mini_mode=MINIMODE; + mini_mode = MINIMODE; } void MainWindow::go_playlistMode() { QString icon; - switch(prevIndex) - { - case COLLECTION: icon="filename-filetype-amarok"; break; - case ALBUMS: icon="media-album-track"; break; - case ARTISTS: icon="amarok_artist"; break; - case PLAYLISTS: icon="amarok_lyrics"; break; - case RABBIT: icon="kstars_constellationart"; break; - case INFO: icon="internet-amarok"; break; - - case SETTINGS: icon="games-config-options"; break; - default: icon="search"; + switch(prevIndex) { + case COLLECTION: + icon = "filename-filetype-amarok"; + break; + case ALBUMS: + icon = "media-album-track"; + break; + case ARTISTS: + icon = "amarok_artist"; + break; + case PLAYLISTS: + icon = "amarok_lyrics"; + break; + case RABBIT: + icon = "kstars_constellationart"; + break; + case INFO: + icon = "internet-amarok"; + break; + case SETTINGS: + icon = "games-config-options"; + break; + default: + icon = "search"; } ui->tracks_view_2->setIcon(QIcon::fromTheme(icon)); - leftFrame->setVisible(false); - if(!ui->frame_4->isVisible()) ui->frame_4->setVisible(true); - if(!mainList->isVisible()) mainList->setVisible(true); - if(!ui->frame_5->isVisible()) ui->frame_5->setVisible(true); - if(!ui->playlistUtils->isVisible()) ui->playlistUtils->setVisible(true); - ui->tracks_view_2->setVisible(true); + if (!ui->frame_4->isVisible()) + ui->frame_4->setVisible(true); + if (!mainList->isVisible()) + mainList->setVisible(true); + if (!ui->frame_5->isVisible()) + ui->frame_5->setVisible(true); + if (!ui->playlistUtils->isVisible()) + ui->playlistUtils->setVisible(true); + ui->tracks_view_2->setVisible(true); album_art->borderColor=false; - rightFrame->setFrameShadow(QFrame::Plain); rightFrame->setFrameShape(QFrame::NoFrame); - mainLayout->setContentsMargins(0,0,0,0); int oldHeigh = this->size().height(); - this->resize(200,oldHeigh); this->setMinimumSize(0,0); this->setFixedWidth(200); - //this->adjustSize(); - //this->setWindowFlags(defaultWindowFlags); - //this->show(); - ui->hide_sidebar_btn->setToolTip("Go Mini"); ui->hide_sidebar_btn->setIcon(QIcon(":Data/data/mini_mode.svg")); mini_mode=PLAYLISTMODE; @@ -906,61 +809,48 @@ void MainWindow::keepOnTop(bool state) { - if (state) this->setWindowFlags(Qt::WindowStaysOnTopHint); - else this->setWindowFlags(defaultWindowFlags); - + if (state) + this->setWindowFlags(Qt::WindowStaysOnTopHint); + else + this->setWindowFlags(defaultWindowFlags); this->show(); } void MainWindow::setStyle() { - - /* ui->mainToolBar->setStyleSheet(" QToolBar { border-right: 1px solid #575757; } QToolButton:hover { background-color: #d8dfe0; border-right: 1px solid #575757;}"); - playback->setStyleSheet("QToolBar { border:none;} QToolBar QToolButton { border:none;} QToolBar QSlider { border:none;}"); - this->setStyleSheet("QToolButton { border: none; padding: 5px; } QMainWindow { border-top: 1px solid #575757; }");*/ - //status->setStyleSheet("QToolButton { color:#fff; } QToolBar {background-color:#575757; color:#fff; border:1px solid #575757;} QToolBar QLabel { color:#fff;}" ); - } - - void MainWindow::on_hide_sidebar_btn_clicked() { - switch(mini_mode) - { - case FULLMODE: go_playlistMode(); break; - - case PLAYLISTMODE: go_mini(); break; - - case MINIMODE: expand(); break; + switch(mini_mode) { + case FULLMODE: + go_playlistMode(); + break; + case PLAYLISTMODE: + go_mini(); + break; + case MINIMODE: + expand(); + break; } - } void MainWindow::on_shuffle_btn_clicked() //tofix { - - if(shuffle_state == REGULAR) - { + if (shuffle_state == REGULAR) { shuffle = true; repeat = false; shufflePlaylist(); ui->shuffle_btn->setIcon(QIcon(":Data/data/media-playlist-shuffle.svg")); ui->shuffle_btn->setToolTip("Repeat"); shuffle_state = SHUFFLE; - - }else if (shuffle_state == SHUFFLE) - { - + } else if (shuffle_state == SHUFFLE) { repeat = true; shuffle = false; ui->shuffle_btn->setIcon(QIcon(":Data/data/media-playlist-repeat.svg")); ui->shuffle_btn->setToolTip("Consecutive"); shuffle_state = REPEAT; - - - }else if(shuffle_state == REPEAT) - { + } else if(shuffle_state == REPEAT) { repeat = false; shuffle = false; ui->shuffle_btn->setIcon(QIcon(":Data/data/view-media-playlist.svg")); @@ -972,18 +862,18 @@ void MainWindow::on_open_btn_clicked() { QStringList files = QFileDialog::getOpenFileNames(this, tr("Select Music Files"),QDir().homePath()+"/Music/", tr("Audio (*.mp3 *.wav *.mp4 *.flac *.ogg *.m4a)")); - if(!files.isEmpty()) - { + if (!files.isEmpty()) { auto tracks = new Playlist(); tracks->add(files); - addToPlaylist(tracks->getTracksData()); } } void MainWindow::populateMainList() { - auto results = settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE babe = 1 ORDER by played desc")); + QVariantMap filter; + filter.insert("babe", 1); + auto results = settings_widget->collection_db.getTrackData(filter, QString("played desc")); mainList->populateTableView(results,true); mainList->resizeRowsToContents(); currentList = mainList->getAllTableContent(); @@ -992,94 +882,62 @@ void MainWindow::updateList() { mainList->flushTable(); - for(auto list: currentList) + for (auto list : currentList) mainList->addRow(list); } - void MainWindow::on_mainList_clicked(QList> list) { Q_UNUSED(list); lCounter = mainList->getIndex(); loadTrack(); - - if(!currentList.contains(current_song)) this->addToPlaylist({current_song}); - + if (!currentList.contains(current_song)) + this->addToPlaylist({current_song}); ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); } void MainWindow::removeSong(int index) { QObject* obj = sender(); - - if(index != -1) - { - qDebug()<<"ehat was in current list:"; - for(auto a: currentList) - { - qDebug()<setCurrentCell(index,0); - - if(shuffle) shufflePlaylist(); + if (index != -1) { + if (obj == mainList) + currentList.removeAt(index); + if (shuffle) + shufflePlaylist(); } } void MainWindow::loadTrack() { - //mainList->item(current_song_pos,BabeTable::TITLE)->setIcon(QIcon()); prev_song = current_song; - current_song_pos = mainList->getIndex(); current_song = mainList->getRowData(current_song_pos); - //mainList->item(current_song_pos,BabeTable::TITLE)->setIcon(QIcon::fromTheme("media-playback-pause")); - mainList->scrollTo(mainList->model()->index(current_song_pos,BabeTable::TITLE)); queued_song_pos = -1; - - qDebug()<<"in mainlist="<setMedia(QUrl::fromLocalFile(current_song[BabeTable::LOCATION])); player->play(); - timer->start(3000); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); - this->setWindowTitle(current_song[BabeTable::TITLE]+" \xe2\x99\xa1 "+current_song[BabeTable::ARTIST]); - album_art->setTitle(current_song[BabeTable::ARTIST],current_song[BabeTable::ALBUM]); - //CHECK IF THE SONG IS BABED IT OR IT ISN'T - if(isBabed(current_song)) + if (isBabed(current_song)) ui->fav_btn->setIcon(QIcon(":Data/data/loved.svg")); else ui->fav_btn->setIcon(QIcon(":Data/data/love-amarok.svg")); - loadMood(); - - if(loadCover(current_song[BabeTable::ARTIST],current_song[BabeTable::ALBUM],current_song[BabeTable::TITLE])) - { - if(!this->isActiveWindow()) - nof.notifySong(current_song,album_art->getPixmap()); - }else - { - if(!this->isActiveWindow()) + if (loadCover(current_song[BabeTable::ARTIST], current_song[BabeTable::ALBUM], current_song[BabeTable::TITLE])) { + if (!this->isActiveWindow()) + nof.notifySong(current_song, album_art->getPixmap()); + } else { + if (!this->isActiveWindow()) nof.notifySong(current_song,QPixmap()); } - - }else removeSong(current_song_pos); - + } else { + removeSong(current_song_pos); + } } void MainWindow::feedRabbit() @@ -1088,69 +946,56 @@ ArtWork rabbitInfo; - if(prev_song[BabeTable::ARTIST] != current_song[BabeTable::ARTIST]) - { + if (prev_song[BabeTable::ARTIST] != current_song[BabeTable::ARTIST]) { rabbitTable->flushSuggestions(); - connect(&rabbitInfo, &ArtWork::similarArtistsReady, [this] (QMap info) { rabbitTable->populateArtistSuggestion(info); QStringList query; - for (auto tag : info.keys()) query << QString("artist:"+tag).trimmed(); + for (auto tag : info.keys()) + query << QString("artist:"+tag).trimmed(); auto searchResults = this->searchFor(query); - - if(!searchResults.isEmpty()) rabbitTable->populateGeneralSuggestion(searchResults); - + if (!searchResults.isEmpty()) + rabbitTable->populateGeneralSuggestion(searchResults); }); } connect(&rabbitInfo, &ArtWork::tagsReady, [this] (QStringList tags) { - auto searchResults = this->searchFor(tags); - - if(!searchResults.isEmpty()) rabbitTable->populateGeneralSuggestion(searchResults); - + if (!searchResults.isEmpty()) + rabbitTable->populateGeneralSuggestion(searchResults); }); rabbitInfo.setDataHeadInfo(current_song[BabeTable::ARTIST]); - // rabbitTable->populateGeneralSuggestion(searchFor({"genre:"+current_song[BabeTable::GENRE]})); - } -bool MainWindow::isBabed(QMap track) +bool MainWindow::isBabed(QMap track) { - if(settings_widget->getCollectionDB().checkQuery("SELECT * FROM tracks WHERE location = \""+track[BabeTable::LOCATION]+"\" AND babe = \"1\"")) - return true; - else return false; - + if (track.isEmpty()) + return false; + QVariantMap filter; + filter.insert("location", track[BabeTable::LOCATION]); + filter.insert("babe", 1); + QList> tracks = settings_widget->getCollectionDB().getTrackData(filter); + return (!tracks.isEmpty() && !tracks.at(0).isEmpty()); } void MainWindow::loadMood() { QString color; - QSqlQuery query = settings_widget->collection_db.getQuery("SELECT * FROM tracks WHERE location = \""+ current_song[BabeTable::LOCATION]+"\""); - if(query.exec()) - while (query.next()) - color=query.value(BabeTable::ART).toString(); - - if(!color.isEmpty()) - { - /*QColor mood;::item:selected - mood.setNamedColor(color); - mood = mood.lighter(120);*/ + QList> tracks = settings_widget->collection_db.getTrackData(current_song[BabeTable::LOCATION]); + QMap map; + foreach (map, tracks) + color = map.value(BabeTable::ART); + if (!color.isEmpty()) { seekBar->setStyleSheet(QString("QSlider\n{\nbackground:transparent;}\nQSlider::groove:horizontal {border: none; background: transparent; height: 5px; border-radius: 0; } QSlider::sub-page:horizontal {\nbackground: %1 ;border: none; height: 5px;border-radius: 0;} QSlider::add-page:horizontal {\nbackground: transparent; border: none; height: 5px; border-radius: 0; } QSlider::handle:horizontal {background: %1; width: 8px; } QSlider::handle:horizontal:hover {background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #fff, stop:1 #ddd);border: 1px solid #444;border-radius: 4px;}QSlider::sub-page:horizontal:disabled {background: #bbb;border-color: #999;}QSlider::add-page:horizontal:disabled {background: #eee;border-color: #999;}QSlider::handle:horizontal:disabled {background: #eee;border: 1px solid #aaa;border-radius: 4px;}").arg(color)); mainList->setStyleSheet(QString("QTableWidget::item:selected {background:rgba( %1, %2, %3, 40); color: %4}").arg(QString::number(QColor(color).toRgb().red()),QString::number(QColor(color).toRgb().green()),QString::number(QColor(color).toRgb().blue()),mainList->palette().color(QPalette::WindowText).name())); ui->mainToolBar->setStyleSheet(QString("QToolBar {margin:0; background-color:rgba( %1, %2, %3, 20); background-image:url('%4');} QToolButton{ border-radius:0;} QToolButton:checked{border-radius:0; background: rgba( %1, %2, %3, 155); color: %5;}").arg(QString::number(QColor(color).toRgb().red()),QString::number(QColor(color).toRgb().green()),QString::number(QColor(color).toRgb().blue()),":Data/data/pattern.png",this->palette().color(QPalette::BrightText).name())); - - }else - { - //ui->listWidget->setBackgroundRole(QPalette::Highlight); - //ui->listWidget->setpa + } else { seekBar->setStyleSheet(QString("QSlider { background:transparent;} QSlider::groove:horizontal {border: none; background: transparent; height: 5px; border-radius: 0; } QSlider::sub-page:horizontal { background: %1;border: none; height: 5px;border-radius: 0;} QSlider::add-page:horizontal {background: transparent; border: none; height: 5px; border-radius: 0; } QSlider::handle:horizontal {background: %1; width: 8px; } QSlider::handle:horizontal:hover {background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #fff, stop:1 #ddd);border: 1px solid #444;border-radius: 4px;}QSlider::sub-page:horizontal:disabled {background: transparent;border-color: #999;}QSlider::add-page:horizontal:disabled {background: transparent;border-color: #999;}QSlider::handle:horizontal:disabled {background: transparent;border: 1px solid #aaa;border-radius: 4px;}").arg(this->palette().color(QPalette::Highlight).name())); mainList->setStyleSheet(QString("QTableWidget::item:selected {background:%1; color: %2}").arg(this->palette().color(QPalette::Highlight).name(),this->palette().color(QPalette::BrightText).name())); ui->mainToolBar->setStyleSheet(QString("QToolBar {margin:0; background-color:rgba( 0, 0, 0, 0); background-image:url('%1');} QToolButton{ border-radius:0;} QToolButton:checked{border-radius:0; background: %2; color:%3;}").arg(":Data/data/pattern.png",this->palette().color(QPalette::Highlight).name(),this->palette().color(QPalette::BrightText).name())); - } } @@ -1162,49 +1007,37 @@ QString albumCover; //IF CURRENT SONG EXISTS IN THE COLLECTION THEN GET THE COVER FROM DB - if(settings_widget->getCollectionDB().checkQuery("SELECT * FROM tracks WHERE location = \""+current_song[BabeTable::LOCATION]+"\"")) - { + if (settings_widget->getCollectionDB().checkQuery("SELECT * FROM tracks WHERE location = \""+current_song[BabeTable::LOCATION]+"\"")) { artistHead = settings_widget->getCollectionDB().getArtistArt(artist); - - if(!artistHead.isEmpty()) - { + if(!artistHead.isEmpty()) { infoTable->setArtistArt(artistHead); infoTable->artist->setArtist(artist); - - }else infoTable->setArtistArt(QString(":Data/data/cover.svg")); - - + } else { + infoTable->setArtistArt(QString(":Data/data/cover.svg")); + } albumCover = settings_widget->getCollectionDB().getAlbumArt(album, artist); - - if(!albumCover.isEmpty()) + if (!albumCover.isEmpty()) album_art->putPixmap(albumCover); - else if (!artistHead.isEmpty()) album_art->putPixmap(artistHead); - else album_art->putDefaultPixmap(); - + else if (!artistHead.isEmpty()) + album_art->putPixmap(artistHead); + else + album_art->putDefaultPixmap(); return true; - - }else - { - qDebug()<<"Song path does not exits in db so going to get artwork somehowelse <<"<collection_db.checkQuery("SELECT * FROM albums WHERE title = \""+album+"\" AND artist = \""+artist+"\"")) - { + } else { + if (settings_widget->collection_db.checkQuery("SELECT * FROM albums WHERE title = \""+album+"\" AND artist = \""+artist+"\"")) { artistHead = settings_widget->getCollectionDB().getArtistArt(artist); - albumCover = settings_widget->getCollectionDB().getAlbumArt(album, artist); - if(!albumCover.isEmpty()) album_art->putPixmap(albumCover); - else if (!artistHead.isEmpty()) album_art->putPixmap(artistHead); - else album_art->putDefaultPixmap(); - + else if (!artistHead.isEmpty()) + album_art->putPixmap(artistHead); + else + album_art->putDefaultPixmap(); return true; - }else - { + } else { emit fetchCover(artist,album,title); return false; } - } } @@ -1212,12 +1045,9 @@ { queued_song_pos = queued_song_pos > 0 ? queued_song_pos+1 : current_song_pos+1; queued_songs.insert(track[BabeTable::LOCATION],track); - mainList->addRowAt(queued_song_pos,track,true); mainList->item(queued_song_pos,BabeTable::TITLE)->setIcon(QIcon::fromTheme("clock")); - //mainList->addRowAt(current_song_pos+1,track,true); nof.notify("Song added to Queue",track[BabeTable::TITLE]+" by "+track[BabeTable::ARTIST]); - } void MainWindow::on_seekBar_sliderMoved(int position) @@ -1227,62 +1057,47 @@ void MainWindow::update() { - if(!current_song.isEmpty()) - { - if(!seekBar->isEnabled()) seekBar->setEnabled(true); - - if(!seekBar->isSliderDown()) + if (!current_song.isEmpty()) { + if (!seekBar->isEnabled()) + seekBar->setEnabled(true); + if (!seekBar->isSliderDown()) seekBar->setValue(static_cast(static_cast(player->position())/player->duration()*1000)); - - if(player->state() == QMediaPlayer::StoppedState) - { - if(!queued_songs.isEmpty()) removeQueuedTrack(current_song); - + if (player->state() == QMediaPlayer::StoppedState) { + if (!queued_songs.isEmpty()) + removeQueuedTrack(current_song); prev_song = current_song; - qDebug()<<"finished playing song: "<setValue(0); seekBar->setEnabled(false); } } - bool MainWindow::removeQueuedTrack(QMap track) { - if(queued_songs.contains(track[BabeTable::LOCATION])) - { - if(mainList->item(current_song_pos,BabeTable::TITLE)->icon().name()=="clock") - { + if (queued_songs.contains(track[BabeTable::LOCATION])) { + if (mainList->item(current_song_pos,BabeTable::TITLE)->icon().name() == "clock") { mainList->removeRow(current_song_pos); queued_songs.remove(track[BabeTable::LOCATION]); lCounter--; return true; } } - return false; } void MainWindow::next() { - if(!queued_songs.isEmpty()) removeQueuedTrack(current_song); //check if the track was queued and then removed it - + if (!queued_songs.isEmpty()) + removeQueuedTrack(current_song); //check if the track was queued and then removed it lCounter++; - - if(repeat) lCounter--; - - if(lCounter >= mainList->rowCount()) lCounter = 0; - - mainList->setCurrentCell((!shuffle || repeat) ? - lCounter : shuffledPlaylist[static_cast(lCounter)], 0); - + if (repeat) + lCounter--; + if (lCounter >= mainList->rowCount()) + lCounter = 0; + mainList->setCurrentCell((!shuffle || repeat) ? lCounter : shuffledPlaylist[static_cast(lCounter)], 0); loadTrack(); } @@ -1290,39 +1105,29 @@ void MainWindow::back() { lCounter--; - - if(lCounter < 0) + if (lCounter < 0) lCounter = mainList->rowCount() - 1; - - (!shuffle) ? mainList->setCurrentCell(lCounter,0) : - mainList->setCurrentCell(shuffledPlaylist[static_cast(lCounter)],0); - + (!shuffle) ? mainList->setCurrentCell(lCounter, 0) : + mainList->setCurrentCell(shuffledPlaylist[static_cast(lCounter)], 0); loadTrack(); } void MainWindow::shufflePlaylist() { shuffledPlaylist.resize(0); - - for(int i = 0; i < mainList->rowCount(); i++) + for (int i = 0; i < mainList->rowCount(); i++) shuffledPlaylist.push_back(static_cast(i)); - random_shuffle(shuffledPlaylist.begin(), shuffledPlaylist.end()); } void MainWindow::on_play_btn_clicked() { - if(mainList->rowCount() > 0 || !current_song.isEmpty()) - { - if(player->state() == QMediaPlayer::PlayingState) - { + if (mainList->rowCount() > 0 || !current_song.isEmpty()) { + if(player->state() == QMediaPlayer::PlayingState) { player->pause(); ui->play_btn->setIcon(QIcon(":Data/data/media-playback-start.svg")); - } - else - { + } else { player->play(); - //updater->start(); ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); } } @@ -1330,11 +1135,10 @@ void MainWindow::on_backward_btn_clicked() { - if(mainList->rowCount() > 0) - { - if(player->position() > 3000) player->setPosition(0); - else - { + if (mainList->rowCount() > 0) { + if (player->position() > 3000) { + player->setPosition(0); + } else { back(); ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); } @@ -1343,209 +1147,154 @@ void MainWindow::on_foward_btn_clicked() { - if(mainList->rowCount() > 0) - { - if(repeat) - { + if (mainList->rowCount() > 0) { + if (repeat) { repeat = !repeat; next(); - - }else - { + } else { next(); ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); } } } - void MainWindow::collectionDBFinishedAdding(bool state) { - if(state) - { - if(!ui->fav_btn->isEnabled()) ui->fav_btn->setEnabled(true); - qDebug()<<"now it i time to put the tracks in the table ;)"; - //settings_widget->getCollectionDB().closeConnection(); + if (state) { + if (!ui->fav_btn->isEnabled()) + ui->fav_btn->setEnabled(true); albumsTable->flushGrid(); artistsTable->flushGrid(); refreshTables(); - - }else refreshTables(); - + } else { + refreshTables(); + } } void MainWindow::orderTables() { - //favoritesTable->setTableOrder(BabeTable::STARS,BabeTable::DESCENDING); collectionTable->setTableOrder(BabeTable::ARTIST,BabeTable::ASCENDING); - qDebug()<<"finished populating tables, now ordering them"; } - void MainWindow::on_fav_btn_clicked() { - if(!isBabed(current_song)) - { - if(babeIt(current_song)) ui->fav_btn->setIcon(QIcon(":Data/data/loved.svg")); - }else - { - if(unbabeIt(current_song)) ui->fav_btn->setIcon(QIcon(":Data/data/love-amarok.svg")); - qDebug()<<"brujas"; + if (!isBabed(current_song)) { + if (babeIt(current_song)) + ui->fav_btn->setIcon(QIcon(":Data/data/loved.svg")); + } else { + if (unbabeIt(current_song)) + ui->fav_btn->setIcon(QIcon(":Data/data/love-amarok.svg")); } } void MainWindow::babeAlbum(QMap info) { - QString artist =info[Album::ARTIST]; QString album = info[Album::ALBUM]; - + QString artist = info[Album::ARTIST]; QList> mapList; - if(album.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\"")); - else if(!artist.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" and album = \""+album+"\"")); - - if(!mapList.isEmpty()) + QVariantMap filter; + filter.insert("artist", artist); + if (!artist.isEmpty()) + filter.insert("album", album); + mapList = settings_widget->getCollectionDB().getTrackData(filter, ""); + if (!mapList.isEmpty()) for (auto track : mapList) babeIt(track); - } -bool MainWindow::unbabeIt(QMap track) +bool MainWindow::unbabeIt(QMap track) { - if(settings_widget->getCollectionDB().insertInto("tracks","babe",track[BabeTable::LOCATION],0)) - { - nof.notify("Song unBabe'd it",track[BabeTable::TITLE]+" by "+track[BabeTable::ARTIST]); - return true; - } else return false; - + if (settings_widget->getCollectionDB().updateTrack("babe", track[BabeTable::LOCATION], 0)) { + nof.notify("Song unBabe'd it", track[BabeTable::TITLE] + " by " + track[BabeTable::ARTIST]); + return true; + } + return false; } bool MainWindow::babeIt(QMap track) { QString url = track[BabeTable::LOCATION]; - if(isBabed(track)) - { - if(unbabeIt(track)) return true; - else return false; - - }else - { - - if(settings_widget->getCollectionDB().check_existance("tracks","location",url)) - { - if(settings_widget->getCollectionDB().insertInto("tracks","babe",url,1)) - { - nof.notify("Song Babe'd it",track[BabeTable::TITLE]+" by "+track[BabeTable::ARTIST]); + if (isBabed(track)) { + return unbabeIt(track); + } else { + if (settings_widget->getCollectionDB().hasTrack("location", url)) { + if (settings_widget->getCollectionDB().updateTrack("babe", url, 1)) { + nof.notify("Song Babe'd it", track[BabeTable::TITLE] + " by " + track[BabeTable::ARTIST]); addToPlaylist({track},true); return true; - } else return false; - - }else - { - + } else { + return false; + } + } else { ui->fav_btn->setEnabled(false); - - if(addToCollectionDB({url},"1")) - { + if (addToCollectionDB({url}, "1")) { nof.notify("Song Babe'd it",track[BabeTable::TITLE]+" by "+track[BabeTable::ARTIST]); return true; + } else { + return false; } - else return false; - ui->fav_btn->setEnabled(true); } - } - return true; } - void MainWindow::infoIt(QString title, QString artist, QString album) { - //views->setCurrentIndex(INFO); infoView(); infoTable->getTrackInfo(title, artist,album); infoTable->getTrackArt(artist,album); - } - - - void MainWindow::scanNewDir(QString url,QString babe) { QStringList list; - qDebug()<<"scanning new dir: "<formats, QDir::Files, QDirIterator::Subdirectories); - while (it.hasNext()) - { + while (it.hasNext()) { QString song = it.next(); - qDebug()<getCollectionDB().check_existance("tracks","location",song)) - list<getCollectionDB().hasTrack("location", song)) + list << song; } - - if (!list.isEmpty()) - { - if(addToCollectionDB(list,babe)) + if (!list.isEmpty()) { + if (addToCollectionDB(list, babe)) nof.notify("New music added to collection",list.join("\n")); - - }else - { + } else { refreshTables(); - settings_widget->refreshWatchFiles(); qDebug()<<"a folder probably got removed or changed"; + settings_widget->refreshWatchFiles(); } - - } - bool MainWindow::addToCollectionDB(QStringList url, QString babe) { - if(settings_widget->getCollectionDB().addTrack(url,babe.toInt())) - { - if(babe.contains("1")) - for(auto track: url) addToPlaylist(settings_widget->getCollectionDB().getTrackData(url),true); - + if (settings_widget->getCollectionDB().addTrack(url, babe.toInt())) { + if (babe.contains("1")) + for (auto track : url) + addToPlaylist(settings_widget->getCollectionDB().getTrackData(track), true); return true; - }else return false; - + } + return false; } - -void MainWindow::addToPlaylist(QList> mapList, bool notRepeated) +void MainWindow::addToPlaylist(QList> mapList, bool notRepeated) { - //currentList.clear(); - qDebug()<<"Adding mapList to mainPlaylist"; - - if(notRepeated) - { - QList> newList; + if (notRepeated) { + QList> newList; QStringList alreadyInList = mainList->getTableContent(BabeTable::LOCATION); - for(auto track: mapList) - { - if(!alreadyInList.contains(track[BabeTable::LOCATION])) - { - newList<addRow(track,true); + for (auto track: mapList) { + if (!alreadyInList.contains(track[BabeTable::LOCATION])) { + newList << track; + mainList->addRow(track, true); } } - currentList+=newList; - }else - { - currentList+=mapList; - for(auto track:mapList) mainList->addRow(track, true); + } else { + currentList += mapList; + for (auto track : mapList) + mainList->addRow(track, true); } - mainList->resizeRowsToContents(); - - //updateList(); - if(shuffle) shufflePlaylist(); - //mainList->scrollToBottom(); + if (shuffle) + shufflePlaylist(); } @@ -1557,31 +1306,31 @@ void MainWindow::on_search_returnPressed() { - if(resultsTable->rowCount()<1) - { + if (resultsTable->rowCount() < 1) { views->setCurrentIndex(prevIndex); - if(views->currentIndex()==ALBUMS) utilsBar->actions().at(ALBUMS_UB)->setVisible(true);; - if(views->currentIndex()==PLAYLISTS) {utilsBar->actions().at(PLAYLISTS_UB)->setVisible(true); ui->frame_3->setVisible(true);} + if (views->currentIndex() == ALBUMS) + utilsBar->actions().at(ALBUMS_UB)->setVisible(true); + if (views->currentIndex() == PLAYLISTS) { + utilsBar->actions().at(PLAYLISTS_UB)->setVisible(true); + ui->frame_3->setVisible(true); + } resultsTable->flushTable(); - // ui->saveResults->setEnabled(false); ui->refreshAll->setEnabled(true); - }else views->setCurrentIndex(RESULTS); + } else { + views->setCurrentIndex(RESULTS); + } } void MainWindow::on_search_textChanged(const QString &arg1) { - - if(!ui->search->text().isEmpty()) - { + if (!ui->search->text().isEmpty()) { QStringList searchList=arg1.split(","); - auto searchResults = searchFor(searchList); - - if(!searchResults.isEmpty()) populateResultsTable(searchResults); - - }else views->setCurrentIndex(prevIndex); - - + if (!searchResults.isEmpty()) + populateResultsTable(searchResults); + } else { + views->setCurrentIndex(prevIndex); + } } void MainWindow::populateResultsTable(QList> mapList) @@ -1590,75 +1339,67 @@ utilsBar->actions().at(ALBUMS_UB)->setVisible(false); resultsTable->flushTable(); resultsTable->populateTableView(mapList,false); - ui->refreshAll->setEnabled(false); } -QList > MainWindow::searchFor(QStringList queries) +QList> MainWindow::searchFor(QStringList queries) { QList> mapList; - - for(auto searchQuery : queries) - { - + for (auto searchQuery : queries) { QString key; - - for(auto k : this->searchKeys) - if(searchQuery.contains(k)) { key=k; searchQuery=searchQuery.replace(k,"").trimmed(); } - - searchQuery=searchQuery.trimmed(); - qDebug()<<"Searching for: "<actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false);} - - if(key == "location:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE location LIKE \"%"+searchQuery+"%\"")); - - else if(key == "artist:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE artist LIKE \"%"+searchQuery+"%\"")); - - else if(key == "album:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE album LIKE \"%"+searchQuery+"%\"")); - - else if(key == "title:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE title LIKE \"%"+searchQuery+"%\"")); - - else if(key== "genre:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE genre LIKE \"%"+searchQuery+"%\"")); - - else - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE title LIKE \"%"+searchQuery+"%\" OR artist LIKE \"%"+searchQuery+"%\" OR album LIKE \"%"+searchQuery+"%\"OR genre LIKE \"%"+searchQuery+"%\"")); - + for (auto k : this->searchKeys) { + if (searchQuery.contains(k)) { + key = k; + searchQuery = searchQuery.replace(k,"").trimmed(); + } + } + searchQuery = searchQuery.trimmed(); + qDebug() << "Searching for: "<actions().at(PLAYLISTS_UB)->setVisible(false); + ui->frame_3->setVisible(false); + } + QVariantMap filter; + if (key == "location:") { + filter.insert("location", searchQuery); + mapList += settings_widget->collection_db.getTrackData(filter, "", "LIKE"); + } else if (key == "artist:") { + filter.insert("artist", searchQuery); + mapList += settings_widget->collection_db.getTrackData(filter, "", "LIKE"); + } else if (key == "album:") { + filter.insert("album", searchQuery); + mapList += settings_widget->collection_db.getTrackData(filter, "", "LIKE"); + } else if (key == "title:") { + filter.insert("title", searchQuery); + mapList += settings_widget->collection_db.getTrackData(filter, "", "LIKE"); + } else if (key== "genre:") { + filter.insert("genre", searchQuery); + mapList += settings_widget->collection_db.getTrackData(filter, "", "LIKE"); + } else { + filter.insert("album", searchQuery); + filter.insert("artist", searchQuery); + filter.insert("genre", searchQuery); + filter.insert("title", searchQuery); + mapList += settings_widget->collection_db.getTrackData(filter, "", "OR", "LIKE"); + } } } - return mapList; } - - -void MainWindow::on_rowInserted(QModelIndex model ,int x,int y) +void MainWindow::on_rowInserted(QModelIndex model, int x, int y) { - //Q_UNUSED(model); - //Q_UNUSED(x);Q_UNUSED(y); - //mainList->scrollToBottom(); - //qDebug()<scrollTo(mainList->model()->index(x,BabeTable::TITLE),QAbstractItemView::PositionAtCenter); - - //qDebug()<<"indexes moved"; - //addMusicImg->setVisible(false); + Q_UNUSED(model) + Q_UNUSED(y) + mainList->scrollTo(mainList->model()->index(x, BabeTable::TITLE), QAbstractItemView::PositionAtCenter); } void MainWindow::on_refreshBtn_clicked() { mainList->flushTable(); - clearCurrentList(); populateMainList(); - qDebug()<<"ehat was in current list:"<getAllTableContent(); mainList->scrollToTop(); } @@ -1675,99 +1416,88 @@ void MainWindow::on_addAll_clicked() { - - switch(views->currentIndex()) - { - case COLLECTION: - addToPlaylist(collectionTable->getAllTableContent()); break; - case ALBUMS: - addToPlaylist(albumsTable->albumTable->getAllTableContent()); break; - case ARTISTS: - addToPlaylist(artistsTable->albumTable->getAllTableContent()); break; - case PLAYLISTS: - addToPlaylist(playlistTable->table->getAllTableContent()); break; - case RABBIT: - addToPlaylist(rabbitTable->getTable()->getAllTableContent()); break; - case RESULTS: - addToPlaylist(resultsTable->getAllTableContent()); break; - + switch (views->currentIndex()) { + case COLLECTION: + addToPlaylist(collectionTable->getAllTableContent()); + break; + case ALBUMS: + addToPlaylist(albumsTable->albumTable->getAllTableContent()); + break; + case ARTISTS: + addToPlaylist(artistsTable->albumTable->getAllTableContent()); + break; + case PLAYLISTS: + addToPlaylist(playlistTable->table->getAllTableContent()); + break; + case RABBIT: + addToPlaylist(rabbitTable->getTable()->getAllTableContent()); + break; + case RESULTS: + addToPlaylist(resultsTable->getAllTableContent()); + break; } } void MainWindow::on_saveResults_clicked() { - - qDebug()<<"on_saveResults_clicked"; saveResults_menu->clear(); - - for(auto action: collectionTable->getPlaylistMenus()) saveResults_menu->addAction(action); + for (auto action: collectionTable->getPlaylistMenus()) + saveResults_menu->addAction(action); ui->saveResults->showMenu(); - } - - void MainWindow::saveResultsTo(QAction *action) { QString playlist=action->text().replace("&",""); - switch(views->currentIndex()) - { - case COLLECTION: collectionTable->populatePlaylist(collectionTable->getTableContent(BabeTable::LOCATION),playlist); break; - case ALBUMS: albumsTable->albumTable->populatePlaylist(albumsTable->albumTable->getTableContent(BabeTable::LOCATION),playlist); break; - case ARTISTS: artistsTable->albumTable->populatePlaylist(artistsTable->albumTable->getTableContent(BabeTable::LOCATION),playlist); break; - case PLAYLISTS: playlistTable->table->populatePlaylist(playlistTable->table->getTableContent(BabeTable::LOCATION),playlist); break; - //case INFO: collectionTable->populatePlaylist(collectionTable->getTableContent(BabeTable::LOCATION),playlist); break; - //case SETTINGS: collectionTable->populatePlaylist(collectionTable->getTableContent(BabeTable::LOCATION),playlist); break; - case RESULTS: resultsTable->populatePlaylist(resultsTable->getTableContent(BabeTable::LOCATION),playlist); break; - + switch (views->currentIndex()) { + case COLLECTION: + collectionTable->populatePlaylist(collectionTable->getTableContent(BabeTable::LOCATION), playlist); + break; + case ALBUMS: + albumsTable->albumTable->populatePlaylist(albumsTable->albumTable->getTableContent(BabeTable::LOCATION), playlist); + break; + case ARTISTS: + artistsTable->albumTable->populatePlaylist(artistsTable->albumTable->getTableContent(BabeTable::LOCATION), playlist); + break; + case PLAYLISTS: + playlistTable->table->populatePlaylist(playlistTable->table->getTableContent(BabeTable::LOCATION), playlist); + break; + case RESULTS: + resultsTable->populatePlaylist(resultsTable->getTableContent(BabeTable::LOCATION), playlist); + break; } } void MainWindow::on_filterBtn_clicked() { - if(ui->filterBtn->isChecked()) - { + if (ui->filterBtn->isChecked()) { ui->filterBtn->setChecked(true); ui->filterBox->setVisible(true); ui->filter->setFocus(); - }else - { + } else { ui->filterBtn->setChecked(false); ui->filterBox->setVisible(false); } - } void MainWindow::on_filter_textChanged(const QString &arg1) { - - if(!ui->filter->text().isEmpty()) - { + if (!ui->filter->text().isEmpty()) { QStringList searchList=arg1.split(","); - auto searchResults = searchFor(searchList); - - if(!searchResults.isEmpty()) - { + if (!searchResults.isEmpty()) { mainList->flushTable(); mainList->populateTableView(searchResults,true); - }else - { + } else { mainList->flushTable(); auto old = currentList; currentList.clear(); addToPlaylist(old); - } - - }else - { - + } else { mainList->flushTable(); auto old = currentList; currentList.clear(); addToPlaylist(old); - } - } diff --git a/mainwindow.cpp.autosave b/mainwindow.cpp.autosave deleted file mode 100644 --- a/mainwindow.cpp.autosave +++ /dev/null @@ -1,1773 +0,0 @@ -/* - Babe - tiny music player - Copyright (C) 2017 Camilo Higuita - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - */ - - -#include "mainwindow.h" -#include "ui_mainwindow.h" - - -MainWindow::MainWindow(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MainWindow) -{ - ui->setupUi(this); - this->setWindowTitle(" Babe ... \xe2\x99\xa1 \xe2\x99\xa1 \xe2\x99\xa1 "); - this->setAcceptDrops(true); - this->setWindowIcon(QIcon(":Data/data/babe_48.svg")); - this->setWindowIconText("Babe..."); - this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); - - defaultWindowFlags = this->windowFlags(); - //mpris = new Mpris(this); - - //connect(this, &MainWindow::finishedPlayingSong, this, &MainWindow::addToPlayed); - connect(this, SIGNAL(finishedPlayingSong(QString)),this,SLOT(addToPlayed(QString))); - connect(this,SIGNAL(fetchCover(QString,QString,QString)),this,SLOT(setCoverArt(QString,QString,QString))); - connect(this,SIGNAL(collectionChecked()),this,SLOT(refreshTables())); - - //* SETUP BABE PARTS *// - this->setUpViews(); - this->setUpSidebar(); - this->setUpPlaylist(); - this->setUpRightFrame(); - this->setUpCollectionViewer(); - this->setUpActions(); - - //* CHECK FOR DATABASE *// - if(settings_widget->checkCollection()) - { - settings_widget->collection_db.setCollectionLists(); - populateMainList(); - emit collectionChecked(); - - } else settings_widget->createCollectionDB(); - - timer = new QTimer(this); - connect(timer, &QTimer::timeout, [this]() - { - timer->stop(); - infoTable->getTrackInfo(current_song[BabeTable::TITLE],current_song[BabeTable::ARTIST],current_song[BabeTable::ALBUM]); - feedRabbit(); - }); - - connect(&nof,&Notify::babeSong,this,&MainWindow::babeIt); - connect(updater, &QTimer::timeout, this, &MainWindow::update); - player->setVolume(100); - - /*LOAD THE STYLE*/ - QFile styleFile(stylePath); - if(styleFile.exists()) - { - qDebug()<<"A Babe style file exists"; - styleFile.open(QFile::ReadOnly); - QString style(styleFile.readAll()); - this->setStyleSheet(style); - } - setToolbarIconSize(settings_widget->getToolbarIconSize()); - mainList->setCurrentCell(0,BabeTable::TITLE); - - if(mainList->rowCount()>0) - { - loadTrack(); - collectionView(); - go_playlistMode(); - - }else collectionView(); - - updater->start(1000); -} - - -MainWindow::~MainWindow() -{ - delete ui; -} - - -//*HERE THE MAIN VIEWS GET SETUP WITH THEIR SIGNALS AND SLOTS**// -void MainWindow::setUpViews() -{ - settings_widget = new settings(this); //this needs to go first - - playlistTable = new PlaylistsView(this); - connect(playlistTable,SIGNAL(playlistCreated(QString, QString)),&settings_widget->collection_db,SLOT(insertPlaylist(QString, QString))); - connect(playlistTable->table,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); - connect(playlistTable->table,SIGNAL(removeIt_clicked(int)),this,SLOT(removeSong(int))); - connect(playlistTable->table,&BabeTable::babeIt_clicked,this,&MainWindow::babeIt); - //connect(playlistTable->table,SIGNAL(createPlaylist_clicked()),this,SLOT(playlistsView())); - connect(playlistTable->table,&BabeTable::queueIt_clicked,this,&MainWindow::addToQueue); - connect(playlistTable->table,SIGNAL(moodIt_clicked(QString)),playlistTable,SLOT(createMoodPlaylist(QString))); - connect(playlistTable->table,SIGNAL(infoIt_clicked(QString, QString, QString)),this,SLOT(infoIt(QString, QString, QString))); - - collectionTable = new BabeTable(this); - //connect(collectionTable, &BabeTable::tableWidget_doubleClicked, this, &MainWindow::addToPlaylist); - connect(collectionTable,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); - connect(collectionTable,SIGNAL(enteredTable()),this,SLOT(hideControls())); - connect(collectionTable,SIGNAL(leftTable()),this,SLOT(showControls())); - connect(collectionTable,SIGNAL(finishedPopulating()),this,SLOT(orderTables())); - connect(collectionTable,SIGNAL(removeIt_clicked(int)),this,SLOT(removeSong(int))); - connect(collectionTable,&BabeTable::babeIt_clicked,this,&MainWindow::babeIt); - connect(collectionTable,&BabeTable::queueIt_clicked,this,&MainWindow::addToQueue); - connect(collectionTable,SIGNAL(moodIt_clicked(QString)),playlistTable,SLOT(createMoodPlaylist(QString))); - connect(collectionTable,SIGNAL(infoIt_clicked(QString, QString, QString)),this,SLOT(infoIt(QString, QString, QString))); - - mainList = new BabeTable(this); - mainList->hideColumn(BabeTable::ALBUM); - mainList->hideColumn(BabeTable::ARTIST); - mainList->horizontalHeader()->setVisible(false); - //mainList->setFixedWidth(200); - mainList->setMaximumWidth(200); - mainList->setMinimumHeight(200); - mainList->setAddMusicMsg("\nDrag and drop music here!"); - connect(mainList, &BabeTable::tableWidget_doubleClicked, this, &MainWindow::on_mainList_clicked); - //connect(mainList,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(on_mainList_clicked(QList>))); - connect(mainList, &BabeTable::removeIt_clicked, this, &MainWindow::removeSong); - //connect(mainList,SIGNAL(removeIt_clicked(int)),this,SLOT(removeSong(int))); - connect(mainList,&BabeTable::babeIt_clicked,this,&MainWindow::babeIt); - connect(mainList,&BabeTable::queueIt_clicked,this,&MainWindow::addToQueue); - connect(mainList,SIGNAL(moodIt_clicked(QString)),playlistTable,SLOT(createMoodPlaylist(QString))); - connect(mainList,SIGNAL(infoIt_clicked(QString, QString, QString)),this,SLOT(infoIt(QString, QString, QString))); - connect(mainList->model() ,SIGNAL(rowsInserted(QModelIndex,int,int)),this,SLOT(on_rowInserted(QModelIndex,int,int))); - - resultsTable=new BabeTable(this); - resultsTable->passStyle("QHeaderView::section { background-color:#575757; color:white; }"); - resultsTable->setVisibleColumn(BabeTable::STARS); - resultsTable->showColumn(BabeTable::GENRE); - connect(resultsTable,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); - connect(resultsTable,SIGNAL(enteredTable()),this,SLOT(hideControls())); - connect(resultsTable,SIGNAL(leftTable()),this,SLOT(showControls())); - connect(resultsTable,SIGNAL(removeIt_clicked(int)),this,SLOT(removeSong(int))); - connect(resultsTable,&BabeTable::babeIt_clicked,this,&MainWindow::babeIt); - connect(resultsTable,&BabeTable::queueIt_clicked,this,&MainWindow::addToQueue); - connect(resultsTable,SIGNAL(moodIt_clicked(QString)),playlistTable,SLOT(createMoodPlaylist(QString))); - connect(resultsTable,SIGNAL(infoIt_clicked(QString, QString, QString)),this,SLOT(infoIt(QString, QString, QString))); - - rabbitTable = new RabbitView(this); - connect(rabbitTable,&RabbitView::playAlbum,this,&MainWindow::putOnPlay); - connect(rabbitTable->getTable(),SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); - - - albumsTable = new AlbumsView(false,this); - connect(albumsTable,SIGNAL(albumOrderChanged(QString)),this,SLOT(AlbumsViewOrder(QString))); - connect(albumsTable->albumTable,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); - connect(albumsTable->albumTable,SIGNAL(removeIt_clicked(int)),this,SLOT(removeSong(int))); - connect(albumsTable->albumTable,&BabeTable::babeIt_clicked,this,&MainWindow::babeIt); - connect(albumsTable->albumTable,&BabeTable::queueIt_clicked,this,&MainWindow::addToQueue); - connect(albumsTable->albumTable,SIGNAL(moodIt_clicked(QString)),playlistTable,SLOT(createMoodPlaylist(QString))); - connect(albumsTable->albumTable,SIGNAL(infoIt_clicked(QString, QString, QString)),this,SLOT(infoIt(QString, QString, QString))); - connect(albumsTable,&AlbumsView::playAlbum,this,&MainWindow::putOnPlay); - connect(albumsTable,&AlbumsView::babeAlbum_clicked,this,&MainWindow::babeAlbum); - connect(albumsTable,&AlbumsView::albumDoubleClicked,this,&MainWindow::albumDoubleClicked); - - artistsTable = new AlbumsView(true,this); - artistsTable->order->setVisible(false); - artistsTable->albumTable->showColumn(BabeTable::ALBUM); - connect(artistsTable->albumTable,SIGNAL(tableWidget_doubleClicked(QList>)),this,SLOT(addToPlaylist(QList>))); - connect(artistsTable->albumTable,SIGNAL(removeIt_clicked(int)),this,SLOT(removeSong(int))); - connect(artistsTable->albumTable,&BabeTable::babeIt_clicked,this,&MainWindow::babeIt); - connect(artistsTable->albumTable,&BabeTable::queueIt_clicked,this,&MainWindow::addToQueue); - connect(artistsTable->albumTable,SIGNAL(moodIt_clicked(QString)),playlistTable,SLOT(createMoodPlaylist(QString))); - connect(artistsTable->albumTable,SIGNAL(infoIt_clicked(QString, QString, QString)),this,SLOT(infoIt(QString, QString, QString))); - connect(artistsTable,&AlbumsView::playAlbum,this,&MainWindow::putOnPlay); - connect(artistsTable,&AlbumsView::babeAlbum_clicked,this,&MainWindow::babeAlbum); - connect(artistsTable,&AlbumsView::albumDoubleClicked,this,&MainWindow::albumDoubleClicked); - - infoTable = new InfoView(this); - connect(infoTable,&InfoView::playAlbum,this,&MainWindow::putOnPlay); - connect(infoTable,&InfoView::similarBtnClicked,[this](QStringList queries) { this->ui->search->setText(queries.join(",")); }); - connect(infoTable,&InfoView::tagsBtnClicked,[this](QStringList queries) { this->ui->search->setText(queries.join(",")); }); - connect(infoTable,&InfoView::tagClicked,[this](QString query) { this->ui->search->setText(query);}); - connect(infoTable,&InfoView::similarArtistTagClicked,[this](QString query) { this->ui->search->setText(query);}); - - settings_widget->readSettings(); - connect(settings_widget, SIGNAL(toolbarIconSizeChanged(int)), this, SLOT(setToolbarIconSize(int))); - connect(settings_widget, SIGNAL(collectionDBFinishedAdding(bool)), this, SLOT(collectionDBFinishedAdding(bool))); - connect(settings_widget, SIGNAL(dirChanged(QString,QString)),this, SLOT(scanNewDir(QString, QString))); - //connect(settings_widget, SIGNAL(collectionPathRemoved(QString)),&settings_widget->getCollectionDB(), SLOT(removePath(QString))); - connect(settings_widget, SIGNAL(refreshTables()),this, SLOT(refreshTables())); - - /* THE BUTTONS VIEWS */ - connect(ui->tracks_view, SIGNAL(clicked()), this, SLOT(collectionView())); - connect(ui->albums_view, SIGNAL(clicked()), this, SLOT(albumsView())); - connect(ui->artists_view, SIGNAL(clicked()), this, SLOT(artistsView())); - connect(ui->playlists_view, SIGNAL(clicked()), this, SLOT(playlistsView())); - connect(ui->rabbit_view, SIGNAL(clicked()), this, SLOT(rabbitView())); - connect(ui->info_view, SIGNAL(clicked()), this, SLOT(infoView())); - connect(ui->settings_view, SIGNAL(clicked()), this, SLOT(settingsView())); - - views = new QStackedWidget(this); - views->setFrameShape(QFrame::NoFrame); - views->addWidget(collectionTable); - views->addWidget(albumsTable); - views->addWidget(artistsTable); - views->addWidget(playlistTable); - views->addWidget(rabbitTable); - views->addWidget(infoTable); - views->addWidget(settings_widget); - views->addWidget(resultsTable); - -} - -void MainWindow::setUpSidebar() -{ - auto *left_spacer = new QWidget(this); - left_spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - auto *right_spacer = new QWidget(this); - right_spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - ui->mainToolBar->setContentsMargins(0,0,0,0); - ui->mainToolBar->layout()->setMargin(0); - ui->mainToolBar->layout()->setSpacing(0); - ui->mainToolBar->setStyleSheet(QString("QToolBar {margin:0; background-color:rgba( 0, 0, 0, 0); background-image:url('%1');} QToolButton{ border-radius:0;}" - " QToolButton:checked{border-radius:0; background: %2}").arg(":Data/data/pattern.png",this->palette().color(QPalette::Highlight).name())); - - //ui->mainToolBar->setStyleSheet(QString("QToolBar{margin:0 background-image:url('%1') repeat; }QToolButton{ border-radius:0;} QToolButton:checked{border-radius:0; background: rgba(0,0,0,50)}").arg(":Data/data/pattern.png")); - ui->mainToolBar->setOrientation(Qt::Vertical); - ui->mainToolBar->addWidget(left_spacer); - - ui->tracks_view->setToolTip("Collection"); - ui->mainToolBar->addWidget(ui->tracks_view); - - ui->albums_view->setToolTip("Albums"); - ui->mainToolBar->addWidget(ui->albums_view); - - ui->artists_view->setToolTip("Artists"); - ui->mainToolBar->addWidget(ui->artists_view); - - ui->playlists_view->setToolTip("Playlists"); - ui->mainToolBar->addWidget(ui->playlists_view); - - ui->rabbit_view->setToolTip("Rabbit"); - ui->mainToolBar->addWidget(ui->rabbit_view); - - ui->info_view->setToolTip("Info"); - ui->mainToolBar->addWidget(ui->info_view); - - ui->settings_view->setToolTip("Setings"); - ui->mainToolBar->addWidget(ui->settings_view); - - ui->mainToolBar->addWidget(right_spacer); - -} - -void MainWindow::setUpCollectionViewer() -{ - mainLayout = new QGridLayout(); - - leftFrame_layout = new QGridLayout(); - leftFrame_layout->setContentsMargins(0,0,0,0); - leftFrame_layout->setSpacing(0); - - leftFrame = new QFrame(this); - leftFrame->setFrameShape(QFrame::StyledPanel); - leftFrame->setFrameShadow(QFrame::Raised); - leftFrame->setLayout(leftFrame_layout); - - line = new QFrame(this); - line->setFrameShape(QFrame::HLine); - line->setFrameShadow(QFrame::Plain); - line->setMaximumHeight(1); - - lineV = new QFrame(this); - lineV->setFrameShape(QFrame::VLine); - lineV->setFrameShadow(QFrame::Plain); - lineV->setMaximumWidth(1); - - utilsBar = new QToolBar(this); - utilsBar->setMovable(false); - utilsBar->setContentsMargins(0,0,0,0); - utilsBar->setStyleSheet("margin:0;"); - - utilsBar->addWidget(infoTable->infoUtils); - utilsBar->addWidget(playlistTable->btnContainer); - utilsBar->addWidget(ui->searchWidget); - utilsBar->addWidget(albumsTable->utilsFrame); - utilsBar->addWidget(artistsTable->utilsFrame); - utilsBar->addWidget(ui->collectionUtils); - - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false); - utilsBar->actions().at(INFO_UB)->setVisible(false); - utilsBar->actions().at(ALBUMS_UB)->setVisible(false); - utilsBar->actions().at(ARTISTS_UB)->setVisible(false); - - - ui->search->setClearButtonEnabled(true); - ui->search->setPlaceholderText("Search..."); - - saveResults_menu = new QMenu(this); - connect(saveResults_menu, SIGNAL(triggered(QAction*)), this, SLOT(saveResultsTo(QAction*))); - ui->saveResults->setMenu(saveResults_menu); - ui->saveResults->setStyleSheet("QToolButton::menu-indicator { image: none; }"); - - leftFrame_layout->addWidget(ui->mainToolBar,0,0,3,1,Qt::AlignLeft); - leftFrame_layout->addWidget(lineV,0,1,3,1,Qt::AlignLeft); - leftFrame_layout->addWidget(views,0,2); - leftFrame_layout->addWidget(line,1,2); - leftFrame_layout->addWidget(utilsBar,2,2); - - mainLayout->addWidget(leftFrame, 0,0); - mainLayout->addWidget(rightFrame,0,1, Qt::AlignRight); - - mainWidget= new QWidget(this); - mainWidget->setLayout(mainLayout); - this->setCentralWidget(mainWidget); -} - -void MainWindow::setUpPlaylist() -{ - - auto *playlistWidget_layout = new QGridLayout(); - playlistWidget_layout->setContentsMargins(0,0,0,0); - playlistWidget_layout->setSpacing(0); - - playlistWidget = new QWidget(this); - playlistWidget->setLayout(playlistWidget_layout); - - album_art = new Album(":Data/data/babe.png",200,0,false); - connect(album_art,&Album::playAlbum,this,&MainWindow::putOnPlay); - connect(album_art,&Album::changedArt,this,&MainWindow::changedArt); - connect(album_art,&Album::babeAlbum_clicked,this,&MainWindow::babeAlbum); - - album_art->setFixedSize(200,200); - // album_art->setFixedHeight(200); - // album_art->setMaximumWidth(200); - album_art->setTitleGeometry(0,0,200,30); - album_art->titleVisible(false); - - ui->controls->setParent(album_art); - ui->controls->setGeometry(0,200-50,200,50); - - seekBar = new QSlider(this); - connect(seekBar,SIGNAL(sliderMoved(int)),this,SLOT(on_seekBar_sliderMoved(int))); - - seekBar->setMaximum(1000); - seekBar->setOrientation(Qt::Horizontal); - seekBar->setContentsMargins(0,0,0,0); - seekBar->setFixedHeight(5); - seekBar->setStyleSheet(QString("QSlider { background:transparent;} QSlider::groove:horizontal {border: none; background: transparent; height: 5px; border-radius: 0; } QSlider::sub-page:horizontal { background: %1;border: none; height: 5px;border-radius: 0;} QSlider::add-page:horizontal {background: transparent; border: none; height: 5px; border-radius: 0; } QSlider::handle:horizontal {background: %1; width: 8px; } QSlider::handle:horizontal:hover {background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #fff, stop:1 #ddd);border: 1px solid #444;border-radius: 4px;}QSlider::sub-page:horizontal:disabled {background: transparent;border-color: #999;}QSlider::add-page:horizontal:disabled {background: transparent;border-color: #999;}QSlider::handle:horizontal:disabled {background: transparent;border: 1px solid #aaa;border-radius: 4px;}").arg(this->palette().color(QPalette::Highlight).name())); - - /* addMusicImg = new QLabel(); - addMusicImg->setPixmap(QPixmap(":Data/data/add.png").scaled(120,120,Qt::KeepAspectRatio)); - // addMusicImg->setGeometry(45,40,120,120); - addMusicImg->setVisible(false); - - int id = QFontDatabase::addApplicationFont(":Data/data/LilyScriptOne-Regular.ttf"); - QString family = QFontDatabase::applicationFontFamilies(id).at(0);*/ - - ui->filterBox->setVisible(false); - ui->filter->setClearButtonEnabled(true); - ui->filterBtn->setChecked(false); - - ui->hide_sidebar_btn->setToolTip("Go Mini"); - ui->shuffle_btn->setToolTip("Shuffle"); - ui->tracks_view_2->setVisible(false); - - refreshBtn_menu = new QMenu(this); - ui->refreshBtn->setMenu(refreshBtn_menu); - ui->refreshBtn->setPopupMode(QToolButton::MenuButtonPopup); - - auto clearIt = new QAction("Clear list..."); - connect(clearIt, &QAction::triggered, [this]() - { - album_art->putDefaultPixmap(); - currentList.clear(); - current_song.clear(); - this->mainList->flushTable(); - lCounter=-1; - player->stop(); - - //album_art->putDefaultPixmap(); - - }); - refreshBtn_menu->addAction(clearIt); - - auto saveIt = new QAction("Save as playlist..."); - refreshBtn_menu->addAction(saveIt); - auto changeIt = new QAction("Change Playlist..."); - refreshBtn_menu->addAction(changeIt); - - playlistWidget_layout->addWidget(album_art, 0,0,Qt::AlignTop); - playlistWidget_layout->addWidget(ui->frame_6,1,0); - playlistWidget_layout->addWidget(seekBar,2,0); - playlistWidget_layout->addWidget(ui->frame_4,3,0); - playlistWidget_layout->addWidget(mainList,4,0); - playlistWidget_layout->addWidget(ui->frame_5,5,0); - playlistWidget_layout->addWidget(ui->playlistUtils,6,0); - -} - - -void MainWindow::setUpRightFrame() -{ - auto *rightFrame_layout = new QGridLayout(); - rightFrame_layout->setContentsMargins(0,0,0,0); - rightFrame_layout->setSpacing(0); - - rightFrame = new QFrame(this); - rightFrame->setLayout(rightFrame_layout); - rightFrame->setFrameShadow(QFrame::Raised); - rightFrame->setFrameShape(QFrame::StyledPanel); - rightFrame->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding); - - rightFrame_layout->addWidget(playlistWidget,0,0); -} - -void MainWindow::setUpActions() -{ - -} - -void MainWindow::changedArt(QMap info) -{ - QString artist =info[Album::ARTIST]; - QString album = info[Album::ALBUM]; - QString path = info[Album::ART]; - settings_widget->collection_db.execQuery(QString("UPDATE albums SET art = \"%1\" WHERE title = \"%2\" AND artist = \"%3\"").arg(path,album,artist) ); -} - -void MainWindow::albumDoubleClicked(QMap info) -{ - QString artist =info[Album::ARTIST]; - QString album = info[Album::ALBUM]; - - QList> mapList; - - if(album.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" ORDER by album asc, track asc")); - else if(!album.isEmpty()&&!artist.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" AND album = \""+album+"\" ORDER by track asc")); - - if(!mapList.isEmpty()) addToPlaylist(mapList); - -} - -void MainWindow::putOnPlay(QMap info) -{ - QString artist =info[Album::ARTIST]; - QString album = info[Album::ALBUM]; - - if(!artist.isEmpty()||!album.isEmpty()) - { - qDebug()<<"put on play<<"<> mapList; - - if(album.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" ORDER by album asc, track asc")); - else if(!album.isEmpty()&&!artist.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" AND album = \""+album+"\" ORDER by track asc")); - - if(!mapList.isEmpty()) - { - mainList->flushTable(); - currentList.clear(); - - addToPlaylist(mapList); - - if(mainList->rowCount()>0) - { - mainList->setCurrentCell(0,BabeTable::TITLE); - lCounter=0; - loadTrack(); - } - } - } - -} - -void MainWindow::addToPlayed(QString url) -{ - if(settings_widget->getCollectionDB().checkQuery("SELECT * FROM tracks WHERE location = \""+url+"\"")) - { - qDebug()<<"Song totally played"<getCollectionDB().getQuery("SELECT * FROM tracks WHERE location = \""+url+"\""); - - int played = 0; - while (query.next()) played = query.value(BabeTable::PLAYED).toInt(); - qDebug()<getCollectionDB().insertInto("tracks","played",url,played+1)) - qDebug()<size().width() < this->minimumSize().width()+20) - go_playlistMode(); - - QMainWindow::resizeEvent(event); -} - -void MainWindow::refreshTables() //tofix -{ - collectionTable->flushTable(); - collectionTable->populateTableView("SELECT * FROM tracks"); - // favoritesTable->flushTable(); - //favoritesTable->populateTableView("SELECT * FROM tracks WHERE stars > \"0\" OR babe = \"1\""); - //albumsTable->flushGrid(); - albumsTable->populateTableView(settings_widget->collection_db.getQuery("SELECT * FROM albums ORDER by title asc")); - albumsTable->hideAlbumFrame(); - //artistsTable->flushGrid(); - artistsTable->populateTableViewHeads(settings_widget->collection_db.getQuery("SELECT * FROM artists ORDER by title asc")); - artistsTable->hideAlbumFrame(); - - playlistTable->list->clear(); - playlistTable->setDefaultPlaylists(); - QStringList playLists =settings_widget->getCollectionDB().getPlaylists(); - playlistTable->definePlaylists(playLists); - playlistTable->setPlaylists(playLists); - QStringList playListsMoods =settings_widget->getCollectionDB().getPlaylistsMoods(); - playlistTable->defineMoods(playListsMoods); - playlistTable->setPlaylistsMoods(playListsMoods); -} - -void MainWindow::AlbumsViewOrder(QString order) -{ - albumsTable->flushGrid(); - albumsTable->populateTableView(settings_widget->getCollectionDB().getQuery("SELECT * FROM albums ORDER by "+order.toLower()+" asc")); -} - -void MainWindow::keyPressEvent(QKeyEvent *event) //todo -{ - - QMainWindow::keyPressEvent(event); - /*switch (event->key()) - { - case Qt::Key_Return : - { - lCounter = getIndex(); - if(lCounter != -1) - { - //ui->play->setChecked(false); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); - ui->search->clear(); - loadTrack(); - } - break; - } - case Qt::Key_Up : - { - int ind = getIndex() - 1;if(ind < 0)ind = ui->listWidget->count() - 1; - ui->listWidget->setCurrentRow(ind); - break; - } - case Qt::Key_Down : - { - int ind = getIndex() + 1;if(ind >= ui->listWidget->count())ind = 0; - ui->listWidget->setCurrentRow(ind); - break; - } - default : - { - //ui->search->setFocusPolicy(Qt::StrongFocus); - //ui->search->setFocus(); - qDebug()<<"trying to focus the serachbar"; - break; - } - }*/ -} - - -void MainWindow::enterEvent(QEvent *event) -{ - event->accept(); - showControls(); -} - -void MainWindow::leaveEvent(QEvent *event) -{ - event->accept(); - hideControls(); -} - -void MainWindow::hideControls() { ui->controls->setVisible(false); } - -void MainWindow::showControls() { ui->controls->setVisible(true); } - -void MainWindow::dragEnterEvent(QDragEnterEvent *event) { event->accept(); } - -void MainWindow::dragLeaveEvent(QDragLeaveEvent *event) { event->accept(); } - -void MainWindow::dragMoveEvent(QDragMoveEvent *event) { event->accept(); } - -void MainWindow::dropEvent(QDropEvent *event) -{ - event->accept(); - QList> mapList; - QList urls = event->mimeData()->urls(); - qDebug()<< urls; - - if(urls.isEmpty()) - { - auto info = event->mimeData()->text(); - auto infoList = info.split("/by/"); - - if(infoList.size()==2) - { - //qDebug()<<"album: " << infoList.at(0) << "artist: "<< infoList.at(1); - QString _artist = infoList.at(1).simplified(); - QString _album = infoList.at(0).simplified(); - mapList = settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+_artist+"\" and album = \""+_album+"\" ORDER by track asc ")); - - }else - mapList = settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+info+"\" ORDER by album asc, track asc ")); - - addToPlaylist(mapList); - - }else - { - QList urls = event->mimeData()->urls(); - - QStringList trackList; - for( auto url : urls) - { - if(QFileInfo(url.path()).isDir()) - { - QDirIterator it(url.path(), settings_widget->formats, QDir::Files, QDirIterator::Subdirectories); - - while (it.hasNext()) trackList<add(trackList); - addToPlaylist(tracks->getTracksData()); - } -} - - -void MainWindow::dummy() { qDebug()<<"TEST on DUMMYT"; } - -void MainWindow::setCoverArt(QString artist, QString album,QString title) -{ - auto coverArt = new ArtWork(); - connect(coverArt, SIGNAL(coverReady(QByteArray)), this, SLOT(putPixmap(QByteArray))); - coverArt->setDataCover(artist,album,title); - infoTable->getTrackArt(artist,album); -} - -void MainWindow::putPixmap(QByteArray array) -{ - if(!array.isEmpty()) album_art->putPixmap(array); - else album_art->putDefaultPixmap(); -} - -void MainWindow::setToolbarIconSize(int iconSize) //tofix -{ - qDebug()<< "Toolbar icons size changed"; - ui->mainToolBar->setIconSize(QSize(iconSize,iconSize)); - //playback->setIconSize(QSize(iconSize,iconSize)); - //utilsBar->setIconSize(QSize(iconSize,iconSize)); - ui->mainToolBar->update(); - //this->utilsBar->setIconSize(QSize(iconSize,iconSize)); - /*for (auto obj : ui->collectionUtils->children()) - { - if(static_cast(obj)!=0) - { - //static_cast(obj)->setIconSize(QSize(iconSize,iconSize)); - } - }*/ - //playback->update(); - // this->update(); -} - -void MainWindow::collectionView() -{ - views->setCurrentIndex(COLLECTION); - - if(mini_mode != FULLMODE) expand(); - - utilsBar->actions().at(ALBUMS_UB)->setVisible(false); - utilsBar->actions().at(ARTISTS_UB)->setVisible(false); - utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false); - utilsBar->actions().at(INFO_UB)->setVisible(false); - - ui->tracks_view->setChecked(true); - prevIndex=views->currentIndex(); -} - -void MainWindow::albumsView() -{ - views->setCurrentIndex(ALBUMS); - - if(mini_mode != FULLMODE) expand(); - - utilsBar->actions().at(ALBUMS_UB)->setVisible(true); - utilsBar->actions().at(ARTISTS_UB)->setVisible(false); - utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false); - utilsBar->actions().at(INFO_UB)->setVisible(false); - - prevIndex = views->currentIndex(); -} - -void MainWindow::playlistsView() -{ - views->setCurrentIndex(PLAYLISTS); - - // playlistTable->list->itemClicked(playlistTable->list->indexAt(); - - if(mini_mode != FULLMODE) expand(); - - utilsBar->actions().at(ALBUMS_UB)->setVisible(false); - utilsBar->actions().at(ARTISTS_UB)->setVisible(false); - utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(true); ui->frame_3->setVisible(true); - utilsBar->actions().at(INFO_UB)->setVisible(false); - - prevIndex = views->currentIndex(); -} - -void MainWindow::rabbitView() -{ - views->setCurrentIndex(RABBIT); - - if(mini_mode != FULLMODE) expand(); - - prevSize = this->size(); - - utilsBar->actions().at(ALBUMS_UB)->setVisible(false); - utilsBar->actions().at(ARTISTS_UB)->setVisible(false); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false); - utilsBar->actions().at(INFO_UB)->setVisible(false); - - prevIndex = views->currentIndex(); -} - -void MainWindow::infoView() -{ - views->setCurrentIndex(INFO); - - if(mini_mode != FULLMODE) expand(); - - utilsBar->actions().at(ALBUMS_UB)->setVisible(false); - utilsBar->actions().at(ARTISTS_UB)->setVisible(false); - utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); - utilsBar->actions().at(INFO_UB)->setVisible(true); ui->frame_3->setVisible(true); - - prevIndex = views->currentIndex(); -} - -void MainWindow::artistsView() -{ - views->setCurrentIndex(ARTISTS); - - if(mini_mode != FULLMODE) expand(); - - utilsBar->actions().at(ALBUMS_UB)->setVisible(false); - utilsBar->actions().at(ARTISTS_UB)->setVisible(true); - utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->hide(); - utilsBar->actions().at(INFO_UB)->setVisible(false); - - prevIndex = views->currentIndex(); -} - - -void MainWindow::settingsView() -{ - views->setCurrentIndex(SETTINGS); - - if(mini_mode != FULLMODE) expand(); - - utilsBar->actions().at(ALBUMS_UB)->setVisible(false); - utilsBar->actions().at(ARTISTS_UB)->setVisible(false); - utilsBar->actions().at(COLLECTION_UB)->setVisible(true); - utilsBar->actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false); - utilsBar->actions().at(INFO_UB)->setVisible(false); - - prevIndex = views->currentIndex(); -} - -void MainWindow::expand() -{ - ui->tracks_view_2->setVisible(false); - if(!leftFrame->isVisible()) leftFrame->setVisible(true); - if(!ui->frame_4->isVisible()) ui->frame_4->setVisible(true); - if(!mainList->isVisible()) mainList->setVisible(true); - if(!ui->frame_5->isVisible()) ui->frame_5->setVisible(true); - if(!ui->playlistUtils->isVisible()) ui->playlistUtils->setVisible(true); - - album_art->borderColor=false; - - rightFrame->setFrameShadow(QFrame::Raised); - rightFrame->setFrameShape(QFrame::StyledPanel); - mainLayout->setContentsMargins(6,0,6,0); - - this->setMaximumSize(QWIDGETSIZE_MAX,QWIDGETSIZE_MAX); - this->setMinimumSize(0,0); - - this->resize(700,500); - /*this->setWindowFlags(defaultWindowFlags); - this->show();*/ - - ui->hide_sidebar_btn->setToolTip("Go Mini"); - ui->hide_sidebar_btn->setIcon(QIcon(":Data/data/mini_mode.svg")); - - mini_mode=FULLMODE; -} - -void MainWindow::go_mini() -{ - - leftFrame->setVisible(false); - ui->frame_4->setVisible(false); - mainList->setVisible(false); - ui->frame_5->setVisible(false); - ui->playlistUtils->setVisible(false); - - //album_art->borderColor=true; - - rightFrame->setFrameShadow(QFrame::Plain); - rightFrame->setFrameShape(QFrame::NoFrame); - - this->resize(200,200); - this->setFixedSize(200,200); - mainLayout->setContentsMargins(0,0,0,0); - - /*this->setWindowFlags(this->windowFlags() | Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); - this->show();*/ - //this->updateGeometry(); - //this->setfix(minimumSizeHint()); - //this->adjustSize(); - ui->hide_sidebar_btn->setToolTip("Expand"); - ui->hide_sidebar_btn->setIcon(QIcon(":Data/data/full_mode.svg")); - mini_mode=MINIMODE; -} - -void MainWindow::go_playlistMode() -{ - - QString icon; - switch(prevIndex) - { - case COLLECTION: icon="filename-filetype-amarok"; break; - case ALBUMS: icon="media-album-track"; break; - case ARTISTS: icon="amarok_artist"; break; - case PLAYLISTS: icon="amarok_lyrics"; break; - case RABBIT: icon="kstars_constellationart"; break; - case INFO: icon="internet-amarok"; break; - - case SETTINGS: icon="games-config-options"; break; - default: icon="search"; - } - ui->tracks_view_2->setIcon(QIcon::fromTheme(icon)); - - leftFrame->setVisible(false); - if(!ui->frame_4->isVisible()) ui->frame_4->setVisible(true); - if(!mainList->isVisible()) mainList->setVisible(true); - if(!ui->frame_5->isVisible()) ui->frame_5->setVisible(true); - if(!ui->playlistUtils->isVisible()) ui->playlistUtils->setVisible(true); - ui->tracks_view_2->setVisible(true); - - album_art->borderColor=false; - - rightFrame->setFrameShadow(QFrame::Plain); - rightFrame->setFrameShape(QFrame::NoFrame); - - mainLayout->setContentsMargins(0,0,0,0); - - int oldHeigh = this->size().height(); - - this->resize(200,oldHeigh); - this->setMinimumSize(0,0); - this->setFixedWidth(200); - - //this->adjustSize(); - //this->setWindowFlags(defaultWindowFlags); - //this->show(); - - ui->hide_sidebar_btn->setToolTip("Go Mini"); - ui->hide_sidebar_btn->setIcon(QIcon(":Data/data/mini_mode.svg")); - mini_mode=PLAYLISTMODE; -} - -void MainWindow::keepOnTop(bool state) -{ - if (state) this->setWindowFlags(Qt::WindowStaysOnTopHint); - else this->setWindowFlags(defaultWindowFlags); - - this->show(); -} - -void MainWindow::setStyle() -{ - - /* ui->mainToolBar->setStyleSheet(" QToolBar { border-right: 1px solid #575757; } QToolButton:hover { background-color: #d8dfe0; border-right: 1px solid #575757;}"); - playback->setStyleSheet("QToolBar { border:none;} QToolBar QToolButton { border:none;} QToolBar QSlider { border:none;}"); - this->setStyleSheet("QToolButton { border: none; padding: 5px; } QMainWindow { border-top: 1px solid #575757; }");*/ - //status->setStyleSheet("QToolButton { color:#fff; } QToolBar {background-color:#575757; color:#fff; border:1px solid #575757;} QToolBar QLabel { color:#fff;}" ); - -} - - - -void MainWindow::on_hide_sidebar_btn_clicked() -{ - switch(mini_mode) - { - case FULLMODE: go_playlistMode(); break; - - case PLAYLISTMODE: go_mini(); break; - - case MINIMODE: expand(); break; - } - -} - -void MainWindow::on_shuffle_btn_clicked() //tofix -{ - - if(shuffle_state == REGULAR) - { - shuffle = true; - repeat = false; - shufflePlaylist(); - ui->shuffle_btn->setIcon(QIcon(":Data/data/media-playlist-shuffle.svg")); - ui->shuffle_btn->setToolTip("Repeat"); - shuffle_state = SHUFFLE; - - }else if (shuffle_state == SHUFFLE) - { - - repeat = true; - shuffle = false; - ui->shuffle_btn->setIcon(QIcon(":Data/data/media-playlist-repeat.svg")); - ui->shuffle_btn->setToolTip("Consecutive"); - shuffle_state = REPEAT; - - - }else if(shuffle_state == REPEAT) - { - repeat = false; - shuffle = false; - ui->shuffle_btn->setIcon(QIcon(":Data/data/view-media-playlist.svg")); - ui->shuffle_btn->setToolTip("Shuffle"); - shuffle_state = REGULAR; - } -} - -void MainWindow::on_open_btn_clicked() -{ - QStringList files = QFileDialog::getOpenFileNames(this, tr("Select Music Files"),QDir().homePath()+"/Music/", tr("Audio (*.mp3 *.wav *.mp4 *.flac *.ogg *.m4a)")); - if(!files.isEmpty()) - { - auto tracks = new Playlist(); - tracks->add(files); - - addToPlaylist(tracks->getTracksData()); - } -} - -void MainWindow::populateMainList() -{ - auto results = settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE babe = 1 ORDER by played desc")); - mainList->populateTableView(results,true); - mainList->resizeRowsToContents(); - currentList = mainList->getAllTableContent(); -} - -void MainWindow::updateList() -{ - mainList->flushTable(); - for(auto list: currentList) - mainList->addRow(list); -} - - -void MainWindow::on_mainList_clicked(QList> list) -{ - Q_UNUSED(list); - lCounter = mainList->getIndex(); - loadTrack(); - - if(!currentList.contains(current_song)) this->addToPlaylist({current_song}); - - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); -} - -void MainWindow::removeSong(int index) -{ - QObject* obj = sender(); - - if(index != -1) - { - qDebug()<<"ehat was in current list:"; - for(auto a: currentList) - { - qDebug()<setCurrentCell(index,0); - - if(shuffle) shufflePlaylist(); - } -} - -void MainWindow::loadTrack() -{ - //mainList->item(current_song_pos,BabeTable::TITLE)->setIcon(QIcon()); - prev_song = current_song; - - current_song_pos = mainList->getIndex(); - current_song = mainList->getRowData(current_song_pos); - //mainList->item(current_song_pos,BabeTable::TITLE)->setIcon(QIcon::fromTheme("media-playback-pause")); - - mainList->scrollTo(mainList->model()->index(current_song_pos,BabeTable::TITLE)); - queued_song_pos = -1; - - - qDebug()<<"in mainlist="<setMedia(QUrl::fromLocalFile(current_song[BabeTable::LOCATION])); - player->play(); - - timer->start(3000); - - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); - - this->setWindowTitle(current_song[BabeTable::TITLE]+" \xe2\x99\xa1 "+current_song[BabeTable::ARTIST]); - - album_art->setTitle(current_song[BabeTable::ARTIST],current_song[BabeTable::ALBUM]); - - //CHECK IF THE SONG IS BABED IT OR IT ISN'T - if(isBabed(current_song)) - ui->fav_btn->setIcon(QIcon(":Data/data/loved.svg")); - else - ui->fav_btn->setIcon(QIcon(":Data/data/love-amarok.svg")); - - loadMood(); - - if(loadCover(current_song[BabeTable::ARTIST],current_song[BabeTable::ALBUM],current_song[BabeTable::TITLE])) - { - if(!this->isActiveWindow()) - nof.notifySong(current_song,album_art->getPixmap()); - }else - { - if(!this->isActiveWindow()) - nof.notifySong(current_song,QPixmap()); - } - - }else removeSong(current_song_pos); - -} - -void MainWindow::feedRabbit() -{ - rabbitTable->flushSuggestions(RabbitView::GENERAL); - - ArtWork rabbitInfo; - - if(prev_song[BabeTable::ARTIST] != current_song[BabeTable::ARTIST]) - { - rabbitTable->flushSuggestions(); - - connect(&rabbitInfo, &ArtWork::similarArtistsReady, [this] (QMap info) - { - rabbitTable->populateArtistSuggestion(info); - QStringList query; - for (auto tag : info.keys()) query << QString("artist:"+tag).trimmed(); - auto searchResults = this->searchFor(query); - - if(!searchResults.isEmpty()) rabbitTable->populateGeneralSuggestion(searchResults); - - }); - } - - connect(&rabbitInfo, &ArtWork::tagsReady, [this] (QStringList tags) - { - - auto searchResults = this->searchFor(tags); - - if(!searchResults.isEmpty()) rabbitTable->populateGeneralSuggestion(searchResults); - - }); - - rabbitInfo.setDataHeadInfo(current_song[BabeTable::ARTIST]); - // rabbitTable->populateGeneralSuggestion(searchFor({"genre:"+current_song[BabeTable::GENRE]})); - -} - -bool MainWindow::isBabed(QMap track) -{ - if(settings_widget->getCollectionDB().checkQuery("SELECT * FROM tracks WHERE location = \""+track[BabeTable::LOCATION]+"\" AND babe = \"1\"")) - return true; - else return false; - -} - -void MainWindow::loadMood() -{ - QString color; - QSqlQuery query = settings_widget->collection_db.getQuery("SELECT * FROM tracks WHERE location = \""+ current_song[BabeTable::LOCATION]+"\""); - if(query.exec()) - while (query.next()) - color=query.value(BabeTable::ART).toString(); - - if(!color.isEmpty()) - { - /*QColor mood;::item:selected - mood.setNamedColor(color); - mood = mood.lighter(120);*/ - seekBar->setStyleSheet(QString("QSlider\n{\nbackground:transparent;}\nQSlider::groove:horizontal {border: none; background: transparent; height: 5px; border-radius: 0; } QSlider::sub-page:horizontal {\nbackground: %1 ;border: none; height: 5px;border-radius: 0;} QSlider::add-page:horizontal {\nbackground: transparent; border: none; height: 5px; border-radius: 0; } QSlider::handle:horizontal {background: %1; width: 8px; } QSlider::handle:horizontal:hover {background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #fff, stop:1 #ddd);border: 1px solid #444;border-radius: 4px;}QSlider::sub-page:horizontal:disabled {background: #bbb;border-color: #999;}QSlider::add-page:horizontal:disabled {background: #eee;border-color: #999;}QSlider::handle:horizontal:disabled {background: #eee;border: 1px solid #aaa;border-radius: 4px;}").arg(color)); - mainList->setStyleSheet(QString("QTableWidget::item:selected {background:rgba( %1, %2, %3, 40); color: %4}").arg(QString::number(QColor(color).toRgb().red()),QString::number(QColor(color).toRgb().green()),QString::number(QColor(color).toRgb().blue()),mainList->palette().color(QPalette::WindowText).name())); - ui->mainToolBar->setStyleSheet(QString("QToolBar {margin:0; background-color:rgba( %1, %2, %3, 20); background-image:url('%4');} QToolButton{ border-radius:0;} QToolButton:checked{border-radius:0; background: rgba( %1, %2, %3, 155); color: %5;}").arg(QString::number(QColor(color).toRgb().red()),QString::number(QColor(color).toRgb().green()),QString::number(QColor(color).toRgb().blue()),":Data/data/pattern.png",this->palette().color(QPalette::BrightText).name())); - - }else - { - //ui->listWidget->setBackgroundRole(QPalette::Highlight); - //ui->listWidget->setpa - seekBar->setStyleSheet(QString("QSlider { background:transparent;} QSlider::groove:horizontal {border: none; background: transparent; height: 5px; border-radius: 0; } QSlider::sub-page:horizontal { background: %1;border: none; height: 5px;border-radius: 0;} QSlider::add-page:horizontal {background: transparent; border: none; height: 5px; border-radius: 0; } QSlider::handle:horizontal {background: %1; width: 8px; } QSlider::handle:horizontal:hover {background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #fff, stop:1 #ddd);border: 1px solid #444;border-radius: 4px;}QSlider::sub-page:horizontal:disabled {background: transparent;border-color: #999;}QSlider::add-page:horizontal:disabled {background: transparent;border-color: #999;}QSlider::handle:horizontal:disabled {background: transparent;border: 1px solid #aaa;border-radius: 4px;}").arg(this->palette().color(QPalette::Highlight).name())); - mainList->setStyleSheet(QString("QTableWidget::item:selected {background:%1; color: %2}").arg(this->palette().color(QPalette::Highlight).name(),this->palette().color(QPalette::BrightText).name())); - ui->mainToolBar->setStyleSheet(QString("QToolBar {margin:0; background-color:rgba( 0, 0, 0, 0); background-image:url('%1');} QToolButton{ border-radius:0;} QToolButton:checked{border-radius:0; background: %2; color:%3;}").arg(":Data/data/pattern.png",this->palette().color(QPalette::Highlight).name(),this->palette().color(QPalette::BrightText).name())); - - } -} - - -bool MainWindow::loadCover(QString artist, QString album, QString title) //tofix separte getalbumcover from get artisthead -{ - Q_UNUSED(title); - QString artistHead; - QString albumCover; - - //IF CURRENT SONG EXISTS IN THE COLLECTION THEN GET THE COVER FROM DB - if(settings_widget->getCollectionDB().checkQuery("SELECT * FROM tracks WHERE location = \""+current_song[BabeTable::LOCATION]+"\"")) - { - artistHead = settings_widget->getCollectionDB().getArtistArt(artist); - - if(!artistHead.isEmpty()) - { - infoTable->setArtistArt(artistHead); - infoTable->artist->setArtist(artist); - - }else infoTable->setArtistArt(QString(":Data/data/cover.svg")); - - - albumCover = settings_widget->getCollectionDB().getAlbumArt(album, artist); - - if(!albumCover.isEmpty()) - album_art->putPixmap(albumCover); - else if (!artistHead.isEmpty()) album_art->putPixmap(artistHead); - else album_art->putDefaultPixmap(); - - return true; - - }else - { - qDebug()<<"Song path does not exits in db so going to get artwork somehowelse <<"<collection_db.checkQuery("SELECT * FROM albums WHERE title = \""+album+"\" AND artist = \""+artist+"\"")) - { - artistHead = settings_widget->getCollectionDB().getArtistArt(artist); - - albumCover = settings_widget->getCollectionDB().getAlbumArt(album, artist); - - if(!albumCover.isEmpty()) - album_art->putPixmap(albumCover); - else if (!artistHead.isEmpty()) album_art->putPixmap(artistHead); - else album_art->putDefaultPixmap(); - - return true; - }else - { - emit fetchCover(artist,album,title); - return false; - } - - } -} - -void MainWindow::addToQueue(QMap track) -{ - queued_song_pos = queued_song_pos > 0 ? queued_song_pos+1 : current_song_pos+1; - queued_songs.insert(track[BabeTable::LOCATION],track); - - mainList->addRowAt(queued_song_pos,track,true); - mainList->item(queued_song_pos,BabeTable::TITLE)->setIcon(QIcon::fromTheme("clock")); - //mainList->addRowAt(current_song_pos+1,track,true); - nof.notify("Song added to Queue",track[BabeTable::TITLE]+" by "+track[BabeTable::ARTIST]); - -} - -void MainWindow::on_seekBar_sliderMoved(int position) -{ - player->setPosition(player->duration() / 1000 * position); -} - -void MainWindow::update() -{ - if(!current_song.isEmpty()) - { - if(!seekBar->isEnabled()) seekBar->setEnabled(true); - - if(!seekBar->isSliderDown()) - seekBar->setValue(static_cast(static_cast(player->position())/player->duration()*1000)); - - if(player->state() == QMediaPlayer::StoppedState) - { - if(!queued_songs.isEmpty()) removeQueuedTrack(current_song); - - prev_song = current_song; - qDebug()<<"finished playing song: "<setValue(0); - seekBar->setEnabled(false); - } -} - - -bool MainWindow::removeQueuedTrack(QMap track) -{ - if(queued_songs.contains(track[BabeTable::LOCATION])) - { - if(mainList->item(current_song_pos,BabeTable::TITLE)->icon().name()=="clock") - { - mainList->removeRow(current_song_pos); - queued_songs.remove(track[BabeTable::LOCATION]); - lCounter--; - return true; - } - } - - return false; -} - -void MainWindow::next() -{ - if(!queued_songs.isEmpty()) removeQueuedTrack(current_song); //check if the track was queued and then removed it - - lCounter++; - - if(repeat) lCounter--; - - if(lCounter >= mainList->rowCount()) lCounter = 0; - - mainList->setCurrentCell((!shuffle || repeat) ? - lCounter : shuffledPlaylist[static_cast(lCounter)], 0); - - loadTrack(); -} - - -void MainWindow::back() -{ - lCounter--; - - if(lCounter < 0) - lCounter = mainList->rowCount() - 1; - - (!shuffle) ? mainList->setCurrentCell(lCounter,0) : - mainList->setCurrentCell(shuffledPlaylist[static_cast(lCounter)],0); - - loadTrack(); -} - -void MainWindow::shufflePlaylist() -{ - shuffledPlaylist.resize(0); - - for(int i = 0; i < mainList->rowCount(); i++) - shuffledPlaylist.push_back(static_cast(i)); - - random_shuffle(shuffledPlaylist.begin(), shuffledPlaylist.end()); -} - -void MainWindow::on_play_btn_clicked() -{ - if(mainList->rowCount() > 0 || !current_song.isEmpty()) - { - if(player->state() == QMediaPlayer::PlayingState) - { - player->pause(); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-start.svg")); - } - else - { - player->play(); - //updater->start(); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); - } - } -} - -void MainWindow::on_backward_btn_clicked() -{ - if(mainList->rowCount() > 0) - { - if(player->position() > 3000) player->setPosition(0); - else - { - back(); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); - } - } -} - -void MainWindow::on_foward_btn_clicked() -{ - if(mainList->rowCount() > 0) - { - if(repeat) - { - repeat = !repeat; - next(); - - }else - { - next(); - ui->play_btn->setIcon(QIcon(":Data/data/media-playback-pause.svg")); - } - } -} - - -void MainWindow::collectionDBFinishedAdding(bool state) -{ - if(state) - { - if(!ui->fav_btn->isEnabled()) ui->fav_btn->setEnabled(true); - qDebug()<<"now it i time to put the tracks in the table ;)"; - //settings_widget->getCollectionDB().closeConnection(); - albumsTable->flushGrid(); - artistsTable->flushGrid(); - refreshTables(); - - }else refreshTables(); - -} - -void MainWindow::orderTables() -{ - //favoritesTable->setTableOrder(BabeTable::STARS,BabeTable::DESCENDING); - collectionTable->setTableOrder(BabeTable::ARTIST,BabeTable::ASCENDING); - qDebug()<<"finished populating tables, now ordering them"; -} - - -void MainWindow::on_fav_btn_clicked() -{ - if(!isBabed(current_song)) - { - if(babeIt(current_song)) ui->fav_btn->setIcon(QIcon(":Data/data/loved.svg")); - }else - { - if(unbabeIt(current_song)) ui->fav_btn->setIcon(QIcon(":Data/data/love-amarok.svg")); - qDebug()<<"brujas"; - } -} - -void MainWindow::babeAlbum(QMap info) -{ - QString artist =info[Album::ARTIST]; - QString album = info[Album::ALBUM]; - - QList> mapList; - if(album.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\"")); - else if(!artist.isEmpty()) - mapList = settings_widget->getCollectionDB().getTrackData(QString("SELECT * FROM tracks WHERE artist = \""+artist+"\" and album = \""+album+"\"")); - - if(!mapList.isEmpty()) - for (auto track : mapList) babeIt(track); - -} - -bool MainWindow::unbabeIt(QMap track) -{ - if(settings_widget->getCollectionDB().insertInto("tracks","babe",track[BabeTable::LOCATION],0)) - { - nof.notify("Song unBabe'd it",track[BabeTable::TITLE]+" by "+track[BabeTable::ARTIST]); - return true; - } else return false; - -} - -bool MainWindow::babeIt(QMap track) -{ - QString url = track[BabeTable::LOCATION]; - if(isBabed(track)) - { - if(unbabeIt(track)) return true; - else return false; - - }else - { - - if(settings_widget->getCollectionDB().check_existance("tracks","location",url)) - { - if(settings_widget->getCollectionDB().insertInto("tracks","babe",url,1)) - { - nof.notify("Song Babe'd it",track[BabeTable::TITLE]+" by "+track[BabeTable::ARTIST]); - addToPlaylist({track},true); - return true; - } else return false; - - }else - { - - ui->fav_btn->setEnabled(false); - - if(addToCollectionDB({url},"1")) - { - nof.notify("Song Babe'd it",track[BabeTable::TITLE]+" by "+track[BabeTable::ARTIST]); - return true; - } - else return false; - - ui->fav_btn->setEnabled(true); - } - - } - - return true; -} - - -void MainWindow::infoIt(QString title, QString artist, QString album) -{ - //views->setCurrentIndex(INFO); - infoView(); - infoTable->getTrackInfo(title, artist,album); - infoTable->getTrackArt(artist,album); - -} - - - - -void MainWindow::scanNewDir(QString url,QString babe) -{ - QStringList list; - qDebug()<<"scanning new dir: "<formats, QDir::Files, QDirIterator::Subdirectories); - while (it.hasNext()) - { - QString song = it.next(); - qDebug()<getCollectionDB().check_existance("tracks","location",song)) - list<refreshWatchFiles(); qDebug()<<"a folder probably got removed or changed"; - } - - -} - - -bool MainWindow::addToCollectionDB(QStringList url, QString babe) -{ - if(settings_widget->getCollectionDB().addTrack(url,babe.toInt())) - { - if(babe.contains("1")) - for(auto track: url) addToPlaylist(settings_widget->getCollectionDB().getTrackData(url),true); - - return true; - }else return false; - -} - - -void MainWindow::addToPlaylist(QList> mapList, bool notRepeated) -{ - //currentList.clear(); - qDebug()<<"Adding mapList to mainPlaylist"; - - if(notRepeated) - { - QList> newList; - QStringList alreadyInList = mainList->getTableContent(BabeTable::LOCATION); - for(auto track: mapList) - { - if(!alreadyInList.contains(track[BabeTable::LOCATION])) - { - newList<addRow(track,true); - } - } - - currentList+=newList; - }else - { - currentList+=mapList; - for(auto track:mapList) mainList->addRow(track, true); - } - - mainList->resizeRowsToContents(); - - //updateList(); - if(shuffle) shufflePlaylist(); - //mainList->scrollToBottom(); -} - - -void MainWindow::clearCurrentList() -{ - currentList.clear(); - mainList->flushTable(); -} - -void MainWindow::on_search_returnPressed() -{ - if(resultsTable->rowCount()<1) - { - views->setCurrentIndex(prevIndex); - if(views->currentIndex()==ALBUMS) utilsBar->actions().at(ALBUMS_UB)->setVisible(true);; - if(views->currentIndex()==PLAYLISTS) {utilsBar->actions().at(PLAYLISTS_UB)->setVisible(true); ui->frame_3->setVisible(true);} - resultsTable->flushTable(); - // ui->saveResults->setEnabled(false); - ui->refreshAll->setEnabled(true); - }else views->setCurrentIndex(RESULTS); -} - -void MainWindow::on_search_textChanged(const QString &arg1) -{ - - if(!ui->search->text().isEmpty()) - { - QStringList searchList=arg1.split(","); - - auto searchResults = searchFor(searchList); - - if(!searchResults.isEmpty()) populateResultsTable(searchResults); - - }else views->setCurrentIndex(prevIndex); - - -} - -void MainWindow::populateResultsTable(QList> mapList) -{ - views->setCurrentIndex(RESULTS); - utilsBar->actions().at(ALBUMS_UB)->setVisible(false); - resultsTable->flushTable(); - resultsTable->populateTableView(mapList,false); - - ui->refreshAll->setEnabled(false); -} - -QList > MainWindow::searchFor(QStringList queries) -{ - QList> mapList; - - for(auto searchQuery : queries) - { - - QString key; - - for(auto k : this->searchKeys) - if(searchQuery.contains(k)) { key=k; searchQuery=searchQuery.replace(k,"").trimmed(); } - - searchQuery=searchQuery.trimmed(); - qDebug()<<"Searching for: "<actions().at(PLAYLISTS_UB)->setVisible(false); ui->frame_3->setVisible(false);} - - if(key == "location:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE location LIKE \"%"+searchQuery+"%\"")); - - else if(key == "artist:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE artist LIKE \"%"+searchQuery+"%\"")); - - else if(key == "album:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE album LIKE \"%"+searchQuery+"%\"")); - - else if(key == "title:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE title LIKE \"%"+searchQuery+"%\"")); - - else if(key== "genre:") - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE genre LIKE \"%"+searchQuery+"%\"")); - - else - mapList += settings_widget->collection_db.getTrackData(QString("SELECT * FROM tracks WHERE title LIKE \"%"+searchQuery+"%\" OR artist LIKE \"%"+searchQuery+"%\" OR album LIKE \"%"+searchQuery+"%\"OR genre LIKE \"%"+searchQuery+"%\"")); - - } - } - - return mapList; -} - - - -void MainWindow::on_rowInserted(QModelIndex model ,int x,int y) -{ - //Q_UNUSED(model); - //Q_UNUSED(x);Q_UNUSED(y); - //mainList->scrollToBottom(); - //qDebug()<scrollTo(mainList->model()->index(x,BabeTable::TITLE),QAbstractItemView::PositionAtCenter); - - //qDebug()<<"indexes moved"; - //addMusicImg->setVisible(false); -} - -void MainWindow::on_refreshBtn_clicked() -{ - mainList->flushTable(); - - clearCurrentList(); - populateMainList(); - qDebug()<<"ehat was in current list:"<getAllTableContent(); - mainList->scrollToTop(); -} - -void MainWindow::on_tracks_view_2_clicked() -{ - expand(); -} - -void MainWindow::on_refreshAll_clicked() -{ - refreshTables(); -} - -void MainWindow::on_addAll_clicked() -{ - - switch(views->currentIndex()) - { - case COLLECTION: - addToPlaylist(collectionTable->getAllTableContent()); break; - case ALBUMS: - addToPlaylist(albumsTable->albumTable->getAllTableContent()); break; - case ARTISTS: - addToPlaylist(artistsTable->albumTable->getAllTableContent()); break; - case PLAYLISTS: - addToPlaylist(playlistTable->table->getAllTableContent()); break; - case RABBIT: - addToPlaylist(rabbitTable->getTable()->getAllTableContent()); break; - case RESULTS: - addToPlaylist(resultsTable->getAllTableContent()); break; - - } -} - -void MainWindow::on_saveResults_clicked() -{ - - qDebug()<<"on_saveResults_clicked"; - saveResults_menu->clear(); - - for(auto action: collectionTable->getPlaylistMenus()) saveResults_menu->addAction(action); - ui->saveResults->showMenu(); - -} - - - -void MainWindow::saveResultsTo(QAction *action) -{ - QString playlist=action->text().replace("&",""); - switch(views->currentIndex()) - { - case COLLECTION: collectionTable->populatePlaylist(collectionTable->getTableContent(BabeTable::LOCATION),playlist); break; - case ALBUMS: albumsTable->albumTable->populatePlaylist(albumsTable->albumTable->getTableContent(BabeTable::LOCATION),playlist); break; - case ARTISTS: artistsTable->albumTable->populatePlaylist(artistsTable->albumTable->getTableContent(BabeTable::LOCATION),playlist); break; - case PLAYLISTS: playlistTable->table->populatePlaylist(playlistTable->table->getTableContent(BabeTable::LOCATION),playlist); break; - //case INFO: collectionTable->populatePlaylist(collectionTable->getTableContent(BabeTable::LOCATION),playlist); break; - //case SETTINGS: collectionTable->populatePlaylist(collectionTable->getTableContent(BabeTable::LOCATION),playlist); break; - case RESULTS: resultsTable->populatePlaylist(resultsTable->getTableContent(BabeTable::LOCATION),playlist); break; - - } -} - -void MainWindow::on_filterBtn_clicked() -{ - if(ui->filterBtn->isChecked()) - { - ui->filterBtn->setChecked(true); - ui->filterBox->setVisible(true); - ui->filter->setFocus(); - }else - { - ui->filterBtn->setChecked(false); - ui->filterBox->setVisible(false); - } - -} - -void MainWindow::on_filter_textChanged(const QString &arg1) -{ - - if(!ui->filter->text().isEmpty()) - { - QStringList searchList=arg1.split(","); - - auto searchResults = searchFor(searchList); - - if(!searchResults.isEmpty()) - { - mainList->flushTable(); - mainList->populateTableView(searchResults,true); - }else - { - mainList->flushTable(); - auto old = currentList; - currentList.clear(); - addToPlaylist(old); - - } - - }else - { - - mainList->flushTable(); - auto old = currentList; - currentList.clear(); - addToPlaylist(old); - - } - -} diff --git a/rabbitview.cpp b/rabbitview.cpp --- a/rabbitview.cpp +++ b/rabbitview.cpp @@ -85,6 +85,7 @@ void RabbitView::filterByArtist(QMap mapList) { + Q_UNUSED(mapList) generalSuggestion->flushTable(); artistSuggestion->clear(); } diff --git a/resources.qrc b/resources.qrc new file mode 100644 --- /dev/null +++ b/resources.qrc @@ -0,0 +1,5 @@ + + + DatabaseTables.sql + + diff --git a/settings.h b/settings.h --- a/settings.h +++ b/settings.h @@ -26,7 +26,6 @@ #include "collectionDB.h" #include "artwork.h" - namespace Ui { class settings; } @@ -34,12 +33,9 @@ class settings : public QWidget { Q_OBJECT - public: - explicit settings(QWidget *parent = 0); ~settings(); - const QString settingPath= BaeUtils::getSettingPath(); const QString collectionDBPath=BaeUtils::getCollectionDBPath(); const QString cachePath=BaeUtils::getCachePath(); @@ -49,28 +45,23 @@ bool checkCollection(); void createCollectionDB(); CollectionDB &getCollectionDB(); - - int getToolbarIconSize() {return iconSize;} - + int getToolbarIconSize(); void setSettings(QStringList setting); void readSettings(); void removeSettings(QStringList setting); void refreshCollectionPaths(); void collectionWatcher(); void addToWatcher(QStringList paths); - QStringList getCollectionPath() {return collectionPaths;} + QStringList getCollectionPath(); CollectionDB collection_db; - bool youtubeTrackDone=false; + bool youtubeTrackDone = false; enum iconSizes { - s16,s22,s24 + s16, s22, s24 }; - //enum albums { ALBUM_TITLE, ARTIST, ART}; - // enum artists { ARTIST_TITLE, ART}; private slots: - void on_open_clicked(); void on_toolbarIconSize_activated(const QString &arg1); void finishedAddingTracks(bool state); @@ -79,17 +70,12 @@ void handleDirectoryChanged(QString dir); void on_collectionPath_clicked(const QModelIndex &index); void on_remove_clicked(); - void on_debugBtn_clicked(); - void on_ytBtn_clicked(); - void on_fetchBtn_clicked(); - void on_checkBox_stateChanged(int arg1); public slots: - void populateDB(QString path); void fetchArt(); void refreshWatchFiles(); @@ -97,11 +83,8 @@ void handleDirectoryChanged_cache(QString dir); void handleDirectoryChanged_extension(); - private: Ui::settings *ui; - - const QString notifyDir= BaeUtils::getNotifyDir(); const QString collectionDBName = "collection.db"; const QString settingsName = "settings.conf"; @@ -114,8 +97,6 @@ QLabel *artFetcherNotice; QMovie *movie; QString pathToRemove; - // QFileSystemWatcher watcher; - //QThread* thread; About *about_ui; QStringList files; QStringList dirs; @@ -124,7 +105,6 @@ QTimer *cacheTimer; signals: - void toolbarIconSizeChanged(int newSize); void collectionPathChanged(QString newPath); void collectionDBFinishedAdding(bool state); diff --git a/settings.cpp b/settings.cpp --- a/settings.cpp +++ b/settings.cpp @@ -110,12 +110,10 @@ SLOT(handleDirectoryChanged(QString))); } -settings::~settings() { - //collection_db.closeConnection(); - +settings::~settings() +{ } - void settings::youtubeTrackReady(bool state) { @@ -183,7 +181,6 @@ refreshCollectionPaths(); refreshWatchFiles(); ui->remove->setEnabled(false); - //emit collectionPathRemoved(pathToRemove); emit refreshTables(); } } @@ -195,130 +192,98 @@ void settings::refreshWatchFiles() { - qDebug()<<"refreshing watched files"; - dirs.clear(); - QSqlQuery query = collection_db.getQuery("SELECT * FROM tracks"); - - while (query.next()) - { - if(!query.value(CollectionDB::LOCATION).toString().contains(youtubeCachePath)) - { - if (!dirs.contains(QFileInfo(query.value(CollectionDB::LOCATION).toString()).dir().path())&&QFileInfo(query.value(CollectionDB::LOCATION).toString()).exists()) - { - - QString dir =QFileInfo(query.value(CollectionDB::LOCATION).toString()).dir().path(); - + while (query.next()) { + if (!query.value(CollectionDB::LOCATION).toString().contains(youtubeCachePath)) { + if (!dirs.contains(QFileInfo(query.value(CollectionDB::LOCATION).toString()).dir().path()) + && QFileInfo(query.value(CollectionDB::LOCATION).toString()).exists()) { + QString dir = QFileInfo(query.value(CollectionDB::LOCATION).toString()).dir().path(); dirs << dir; QDirIterator it(dir,QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); - - while (it.hasNext()) - { + while (it.hasNext()) { QString subDir = it.next(); subDir=QFileInfo(subDir).path(); - if(QFileInfo(subDir).isDir()&&QFileInfo(subDir).exists()) - { - //QDir dir = new QDir(url.path()); - if(!dirs.contains(subDir)) + if (QFileInfo(subDir).isDir()&&QFileInfo(subDir).exists()) { + if (!dirs.contains(subDir)) dirs <removePaths(watcher->directories()); - // watcher->removePaths(watcher->files()); - addToWatcher(dirs); +} +CollectionDB &settings::getCollectionDB() +{ + return collection_db; } -CollectionDB &settings::getCollectionDB() { return collection_db; } +int settings::getToolbarIconSize() +{ + return iconSize; +} -void settings::on_toolbarIconSize_activated(const QString &arg1) { - // qDebug () <collectionPath->addItem(url); collectionPaths << url; - qDebug() << "Collection dir added: " << url; setSettings({"collectionPath=", url}); emit collectionPathChanged(url); } } -void settings::setSettings(QStringList setting) { +void settings::setSettings(QStringList setting) +{ std::string strNew; - // std::string strReplace; strNew = setting.at(0).toStdString() + setting.at(1).toStdString(); bool replace = false; - /**/ - // qDebug()<addPaths(paths); +} - if(!paths.isEmpty()) watcher->addPaths(paths); +QStringList settings::getCollectionPath() +{ + return collectionPaths; } void settings::collectionWatcher() { QSqlQuery query = collection_db.getQuery("SELECT * FROM tracks"); - while (query.next()) - { + while (query.next()) { QString location = query.value(CollectionDB::LOCATION).toString(); - if(!location.contains(youtubeCachePath)) //exclude the youtube cache folder - { - if (!dirs.contains(QFileInfo(location).dir().path()) && BaeUtils::fileExists(location)) //check if parent dir isn't already in list and it exists - { + if (!location.contains(youtubeCachePath)) { + if (!dirs.contains(QFileInfo(location).dir().path()) && BaeUtils::fileExists(location)) { QString dir =QFileInfo(location).dir().path(); dirs << dir; - QDirIterator it(dir, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); // get all the subdirectories to watch - while (it.hasNext()) - { + while (it.hasNext()) { QString subDir = it.next(); subDir = QFileInfo(subDir).path(); - - if(QFileInfo(subDir).isDir()) - if(!dirs.contains(subDir)) + if (QFileInfo(subDir).isDir()) + if (!dirs.contains(subDir)) dirs <collectionPath->addItem(get_setting.replace("collectionPath=", "")); - - // connect(&watcher, SIGNAL(fileChanged(QString)), this, - // SLOT(handleFileChanged(const QString&))); } - if (get_setting.contains("toolbarIconSize=")) { iconSize = get_setting.replace("toolbarIconSize=", "").toInt(); - qDebug() << "Setting the tSize: " << iconSize; - switch (iconSize) { case 16: ui->toolbarIconSize->setCurrentIndex(0); @@ -423,197 +366,105 @@ case 24: ui->toolbarIconSize->setCurrentIndex(2); break; - default: - qDebug() << "error setting icon size"; } } } } -bool settings::checkCollection() { - - - if (BaeUtils::fileExists(collectionDBPath + collectionDBName)) - { - qDebug() << "The CollectionDB does exists."; - - collection_db.openCollection(collectionDBPath + collectionDBName); +bool settings::checkCollection() +{ + if (BaeUtils::fileExists(collectionDBPath + collectionDBName)) { collectionWatcher(); - return true; - - } else { return false; } - + } + return false; } void settings::createCollectionDB() { - qDebug() << "The CollectionDB doesn't exists. Going to create the database " - "and tables"; - - collection_db.openCollection(collectionDBPath + collectionDBName); - collection_db.prepareCollectionDB(); - } -void settings::populateDB(QString path) { - - qDebug() << "Function Name: " << Q_FUNC_INFO - << "new path for database action: " << path; - +void settings::populateDB(QString path) +{ QStringList urlCollection; - // QDir dir = new QDir(url); - - if (QFileInfo(path).isDir()) - - { + if (QFileInfo(path).isDir()) { QDirIterator it(path, formats, QDir::Files, QDirIterator::Subdirectories); - - while (it.hasNext()) { + while (it.hasNext()) urlCollection << it.next(); - - // qDebug() << it.next(); - } } else if (QFileInfo(path).isFile()) { urlCollection << path; - qDebug() << path; } - - /* Playlist *collection= new Playlist(); - collection->addClean(urlCollection); - //updateList(); - collection_db.setTrackList(collection->getTracks());*/ ui->progressBar->setValue(0); ui->progressBar->setMaximum(urlCollection.size()); ui->progressBar->show(); collection_db.addTrack(urlCollection); - // thread->start(); - - // collection_db.start(); - - /*for(auto tr:urlCollection) - { - qDebug()<progressBar->hide(); ui->progressBar->setValue(0); - nof.notify("Songs added to collection","finished writting new songs to the collection :)"); - //emit collectionDBFinishedAdding(true); - - - qDebug() << "good to hear it finished yay! now going to fetch artwork"; - - collectionWatcher(); emit refreshTables(); fetchArt(); - - }else - { + } else { emit collectionDBFinishedAdding(true); - } } -void settings::fetchArt() { - - +void settings::fetchArt() +{ nof.notify("Fetching art","this might take some time depending on your collection size and internet connection speed..."); - - ui->label->show(); movie->start(); - QSqlQuery query_Covers = - collection_db.getQuery("SELECT * FROM albums WHERE art = ''"); - QSqlQuery query_Heads = - collection_db.getQuery("SELECT * FROM artists WHERE art = ''"); - - while (query_Covers.next()) - { - + QSqlQuery query_Covers = collection_db.getQuery("SELECT * FROM albums WHERE art = ''"); + QSqlQuery query_Heads = collection_db.getQuery("SELECT * FROM artists WHERE art = ''"); + while (query_Covers.next()) { QString artist = query_Covers.value(1).toString(); QString album = query_Covers.value(0).toString(); QString title; - QSqlQuery query_Title = - collection_db.getQuery("SELECT * FROM tracks WHERE artist = \""+artist+"\" AND album = \""+album+"\""); - if(query_Title.next()) title=query_Title.value(CollectionDB::TITLE).toString(); - - + QSqlQuery query_Title = collection_db.getQuery("SELECT * FROM tracks WHERE artist = \""+artist+"\" AND album = \""+album+"\""); + if (query_Title.next()) + title=query_Title.value(CollectionDB::TITLE).toString(); ArtWork coverArt; - connect(&coverArt, &ArtWork::coverReady, &coverArt, - &ArtWork::saveArt); - connect(&coverArt, &ArtWork::artSaved, &collection_db, - &CollectionDB::insertCoverArt); - - // QString art = cachePath+artist+"_"+album+".jpg"; - - qDebug() << artist << album; + connect(&coverArt, &ArtWork::coverReady, &coverArt, &ArtWork::saveArt); + connect(&coverArt, &ArtWork::artSaved, &collection_db, &CollectionDB::insertCoverArt); coverArt.setDataCover(artist, album,title, cachePath); - - } - - while (query_Heads.next()) - { - - // QString artist = query_Heads.value(0).toString(); - - + while (query_Heads.next()) { ArtWork artistHead; - - connect(&artistHead, &ArtWork::headReady, &artistHead, - &ArtWork::saveArt); - connect(&artistHead, &ArtWork::artSaved, &collection_db, - &CollectionDB::insertHeadArt); - + connect(&artistHead, &ArtWork::headReady, &artistHead, &ArtWork::saveArt); + connect(&artistHead, &ArtWork::artSaved, &collection_db, &CollectionDB::insertHeadArt); QString artist = query_Heads.value(0).toString(); - // QString art = cachePath+artist+".jpg"; - artistHead.setDataHead(artist, cachePath); } nof.notify("Finished fetching art","the artwork for your collection is now ready :)"); movie->stop(); ui->label->hide(); - - emit collectionDBFinishedAdding(true); - // emit refreshTables(); } void settings::on_pushButton_clicked() { - // QMessageBox::about(this, "Babe Tiny Music Player","Version: 0.0 - // Alpha\nWritten and designed\nby: Camilo Higuita"); about_ui->show(); } void settings::on_debugBtn_clicked() { - /*qDebug()<<"Current files being watched:"; - for(auto file: watcher->files()) qDebug()<directories()) qDebug()<directories()) + qDebug() << dir; } void settings::on_ytBtn_clicked() { - } void settings::on_fetchBtn_clicked() { - if(!ui->fetch->text().isEmpty()) - { + if (!ui->fetch->text().isEmpty()) { ytFetch->fetch({ui->fetch->text()}); ui->fetch->clear(); } @@ -621,11 +472,5 @@ void settings::on_checkBox_stateChanged(int arg1) { - if(arg1==0) - { - ui->frame_4->setEnabled(false); - }else - { - ui->frame_4->setEnabled(true); - } + ui->frame_4->setEnabled(arg1 != 0); }