Skip to content

Commit e5c5cd5

Browse files
committed
better similar track implementation, bug fixes and improvements
1 parent 0112036 commit e5c5cd5

6 files changed

+117
-25
lines changed

Olivia.pro.user

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE QtCreatorProject>
3-
<!-- Written by QtCreator 4.9.1, 2019-10-07T18:51:49. -->
3+
<!-- Written by QtCreator 4.9.1, 2019-10-08T04:19:08. -->
44
<qtcreator>
55
<data>
66
<variable>EnvironmentId</variable>

mainwindow.cpp

+81-13
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,14 @@ void MainWindow::init_similar_tracks(){
7878
if(similarTracks==nullptr){
7979
similarTracks = new SimilarTracks(this,5);
8080
connect(similarTracks, &SimilarTracks::setSimilarTracks,[=](QStringList list){
81+
similarTracks->isLoadingPLaylist = false;
82+
currentSimilarTrackList.clear();
83+
currentSimilarTrackList = list;
84+
currentSimilarTrackProcessing = 0;
85+
prepareSimilarTracks();
86+
});
87+
connect(similarTracks, &SimilarTracks::setPlaylist,[=](QStringList list){
88+
similarTracks->isLoadingPLaylist = true;
8189
currentSimilarTrackList.clear();
8290
currentSimilarTrackList = list;
8391
currentSimilarTrackProcessing = 0;
@@ -86,6 +94,10 @@ void MainWindow::init_similar_tracks(){
8694
connect(similarTracks, &SimilarTracks::failedGetSimilarTracks,[=](){
8795
ui->similarTrackLoader->stop();
8896
});
97+
connect(similarTracks, &SimilarTracks::clearList,[=](){
98+
currentSimilarTrackList.clear();
99+
ui->recommListWidget->clear();
100+
});
89101
}
90102
}
91103

@@ -1285,7 +1297,6 @@ void MainWindow::addToSimilarTracksQueue(const QVariant Base64andDominantColor){
12851297
currentSimilarTrackMeta.append(dominantColor);
12861298
currentSimilarTrackMeta.append(base64);
12871299

1288-
12891300
QWidget *track_widget = new QWidget(ui->recommListWidget);
12901301
track_widget->setToolTip(htmlToPlainText(title));
12911302
track_widget->setObjectName("track-widget-"+songId);
@@ -1370,29 +1381,75 @@ void MainWindow::addToSimilarTracksQueue(const QVariant Base64andDominantColor){
13701381
a->start(QPropertyAnimation::DeleteWhenStopped);
13711382
ui->recommListWidget->addItem(item);
13721383

1373-
ui->recommListWidget->setCurrentRow(ui->recommListWidget->count()-1);
1384+
// ui->recommListWidget->setCurrentRow(ui->recommListWidget->count()-1);
13741385
if(store_manager->isDownloaded(songId)){
13751386
ui->recommListWidget->itemWidget(item)->setEnabled(true);
13761387
track_ui.url->setText("file://"+setting_path+"/downloadedTracks/"+songId);
13771388
track_ui.offline->setPixmap(QPixmap(":/icons/offline.png").scaled(track_ui.offline->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
13781389
}else{
13791390
getAudioStream(ytIds,songId);
1380-
//reverse the process queue, so that recently added song can get first chance to process
1381-
if(ytdlQueue.count()>1){
1382-
ytdlQueue.insert(1, ytdlQueue.takeAt(ytdlQueue.count()-1));
1383-
}
13841391
}
1385-
// ui->recommListWidget->scrollToBottom();
1392+
similarTracksProcessHelper();
1393+
}else{
1394+
QListWidgetItem* item;
1395+
item = new QListWidgetItem(ui->recommListWidget);
1396+
1397+
QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this);
1398+
1399+
item->setSizeHint(track_widget->minimumSizeHint());
1400+
ui->recommListWidget->setItemWidget(item, track_widget);
1401+
ui->recommListWidget->itemWidget(item)->setGraphicsEffect(eff);
1402+
ui->recommListWidget->itemWidget(item)->setEnabled(false); //enable when finds a url
1403+
1404+
QPropertyAnimation *a = new QPropertyAnimation(eff,"opacity");
1405+
a->setDuration(500);
1406+
a->setStartValue(0);
1407+
a->setEndValue(1);
1408+
a->setEasingCurve(QEasingCurve::InCirc);
1409+
a->start(QPropertyAnimation::DeleteWhenStopped);
1410+
ui->recommListWidget->addItem(item);
1411+
1412+
//ui->recommListWidget->setCurrentRow(ui->recommListWidget->count()-1);
1413+
if(store_manager->isDownloaded(songId)){
1414+
ui->recommListWidget->itemWidget(item)->setEnabled(true);
1415+
track_ui.url->setText("file://"+setting_path+"/downloadedTracks/"+songId);
1416+
track_ui.offline->setPixmap(QPixmap(":/icons/offline.png").scaled(track_ui.offline->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
1417+
}else{
1418+
QNetworkAccessManager *m_netwManager = new QNetworkAccessManager(this);
1419+
connect(m_netwManager,&QNetworkAccessManager::finished,[=](QNetworkReply* rep){
1420+
if(rep->error() == QNetworkReply::NoError){
1421+
QString id = rep->readAll();
1422+
getAudioStream(id,songId);
1423+
similarTracksProcessHelper();
1424+
rep->deleteLater();
1425+
m_netwManager->deleteLater();
1426+
}else{
1427+
qDebug()<<"error processing track"<<rep->request().url().toString();
1428+
}
1429+
});
1430+
QString query = title.replace("N/A","")+" - "+artist.replace("N/A","");
1431+
QUrl url("http://ktechpit.com/USS/Olivia/youtube.php?millis=0&query="+query);
1432+
QNetworkRequest request(url);
1433+
m_netwManager->get(request);
1434+
}
13861435
}
1436+
}
13871437

1438+
void MainWindow::similarTracksProcessHelper(){
13881439
//clear meta of currentSimilarTrack and free it for next track
13891440
currentSimilarTrackMeta.clear();
13901441
//process next track in currentSimilarTrackList list;
1391-
if(currentSimilarTrackProcessing < similarTracks->numberOfSimilarTracksToLoad /*currentSimilarTrackList.count()-1*/){
1392-
currentSimilarTrackProcessing++;
1393-
prepareSimilarTracks();
1442+
if(similarTracks->isLoadingPLaylist){
1443+
if(currentSimilarTrackProcessing < currentSimilarTrackList.count()-1){
1444+
currentSimilarTrackProcessing++;
1445+
prepareSimilarTracks();
1446+
}
1447+
}else{
1448+
if(currentSimilarTrackProcessing < similarTracks->numberOfSimilarTracksToLoad /*currentSimilarTrackList.count()-1*/){
1449+
currentSimilarTrackProcessing++;
1450+
prepareSimilarTracks();
1451+
}
13941452
}
1395-
13961453
}
13971454

13981455
void MainWindow::addToQueue(QString id,QString title,
@@ -1969,7 +2026,7 @@ void MainWindow::ytdlReadyRead(){
19692026
listWidgetItem->setEnabled(true);
19702027
QLineEdit *url = listWidgetItem->findChild<QLineEdit *>("url");
19712028
static_cast<QLineEdit*>(url)->setText(m48url);
1972-
qDebug()<<"NEW URL:"<<m48url;
2029+
//qDebug()<<"NEW URL:"<<m48url;
19732030
//TODO
19742031
store_manager->saveStreamUrl(songId,m48url,getExpireTime(m48url));
19752032
mfr->deleteLater();
@@ -2353,11 +2410,17 @@ void MainWindow::listItemDoubleClicked(QListWidget *list,QListWidgetItem *item){
23532410
shadow_list_.back()->setColor(QColor("#292929"));
23542411
lbl->setGraphicsEffect(shadow_list_.back());
23552412
}
2413+
23562414
if(store_manager->isDownloaded(songId)){
23572415
radio_manager->playRadio(false,QUrl(url));
23582416
}else{
23592417
saveTracksAfterBuffer = settingsObj.value("saveAfterBuffer","true").toBool();
2360-
radio_manager->playRadio(saveTracksAfterBuffer,QUrl(url));
2418+
//do not save tracks if playing from similar tracks list
2419+
if(list->objectName()=="recommListWidget"){
2420+
radio_manager->playRadio(false,QUrl(url));
2421+
}else{
2422+
radio_manager->playRadio(saveTracksAfterBuffer,QUrl(url));
2423+
}
23612424
}
23622425

23632426
//update metadata of MPRIS interface
@@ -3926,3 +3989,8 @@ void MainWindow::on_showSimilarList_clicked()
39263989
ui->recommWidget->isVisible() ? ui->showSimilarList->setIcon(QIcon(":/icons/sidebar/hideRecommend.png")):
39273990
ui->showSimilarList->setIcon(QIcon(":/icons/sidebar/showRecommend.png"));
39283991
}
3992+
3993+
//add playlist from web interface
3994+
void MainWindow::addPlaylistByData(QString data){
3995+
similarTracks->addPlaylist(data);
3996+
}

mainwindow.h

+2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class MainWindow : public QMainWindow
8585
Q_INVOKABLE void delete_song_cache(QVariant track_id);
8686
Q_INVOKABLE void remove_song(QVariant track_id);
8787
Q_INVOKABLE void addToSimilarTracksQueue(const QVariant Base64andDominantColor);
88+
Q_INVOKABLE void addPlaylistByData(QString data);
8889

8990
QString youtubeSearchTerm;
9091
bool saveTracksAfterBuffer;
@@ -231,6 +232,7 @@ private slots:
231232
void showRecommendedTrackOption();
232233
void showPayPalDonationMessageBox();
233234
void prepareSimilarTracks();
235+
void similarTracksProcessHelper();
234236
private:
235237
QStringList currentSimilarTrackMeta ,currentSimilarTrackList;
236238
int currentSimilarTrackProcessing = 0;

mainwindow.ui

+7-10
Original file line numberDiff line numberDiff line change
@@ -1333,7 +1333,7 @@ padding-left: 10px;</string>
13331333
<enum>QTabWidget::Rounded</enum>
13341334
</property>
13351335
<property name="currentIndex">
1336-
<number>0</number>
1336+
<number>1</number>
13371337
</property>
13381338
<property name="elideMode">
13391339
<enum>Qt::ElideNone</enum>
@@ -1477,6 +1477,9 @@ QScrollBar:vertical {
14771477
<property name="autoScrollMargin">
14781478
<number>5</number>
14791479
</property>
1480+
<property name="dragDropMode">
1481+
<enum>QAbstractItemView::NoDragDrop</enum>
1482+
</property>
14801483
<property name="verticalScrollMode">
14811484
<enum>QAbstractItemView::ScrollPerPixel</enum>
14821485
</property>
@@ -1629,15 +1632,6 @@ QScrollBar:vertical {
16291632
<property name="autoScrollMargin">
16301633
<number>5</number>
16311634
</property>
1632-
<property name="dragEnabled">
1633-
<bool>true</bool>
1634-
</property>
1635-
<property name="dragDropMode">
1636-
<enum>QAbstractItemView::DragDrop</enum>
1637-
</property>
1638-
<property name="defaultDropAction">
1639-
<enum>Qt::MoveAction</enum>
1640-
</property>
16411635
<property name="selectionMode">
16421636
<enum>QAbstractItemView::SingleSelection</enum>
16431637
</property>
@@ -1958,6 +1952,9 @@ QScrollBar:vertical {
19581952
<property name="autoScrollMargin">
19591953
<number>5</number>
19601954
</property>
1955+
<property name="dragDropMode">
1956+
<enum>QAbstractItemView::NoDragDrop</enum>
1957+
</property>
19611958
<property name="verticalScrollMode">
19621959
<enum>QAbstractItemView::ScrollPerPixel</enum>
19631960
</property>

similartracks.cpp

+22-1
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44

55
SimilarTracks::SimilarTracks(QObject *parent,int limit) : QObject(parent)
66
{
7+
78
numberOfSimilarTracksToLoad = limit;
89
}
910

1011
void SimilarTracks::addSimilarTracks(QString video_id){
11-
12+
isLoadingPLaylist = false;
1213
QNetworkAccessManager *m_netwManager = new QNetworkAccessManager(this);
1314
connect(m_netwManager,&QNetworkAccessManager::finished,[=](QNetworkReply* rep){
1415
if(rep->error() == QNetworkReply::NoError){
@@ -46,3 +47,23 @@ void SimilarTracks::addSimilarTracks(QString video_id){
4647
QNetworkRequest request(url);
4748
m_netwManager->get(request);
4849
}
50+
51+
void SimilarTracks::addPlaylist(QString data){
52+
isLoadingPLaylist = true;
53+
54+
emit clearList();
55+
56+
QStringList list = data.split("gettrackinfo(");
57+
list.removeFirst();
58+
59+
QStringList finalList;
60+
foreach (QString str, list) {
61+
finalList.append(QString(str.split(");\">").first()).remove("&quot;"));
62+
}
63+
if(finalList.count()>0){
64+
emit setPlaylist(finalList);
65+
}else{
66+
emit failedGetSimilarTracks();
67+
}
68+
}
69+

similartracks.h

+4
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,19 @@ class SimilarTracks : public QObject
1010
public:
1111
explicit SimilarTracks(QObject *parent = nullptr, int limit = 5);
1212
int numberOfSimilarTracksToLoad;
13+
bool isLoadingPLaylist = false;
1314
private:
1415
QStringList playedTracksIds;
1516

1617
signals:
1718
void setSimilarTracks(QStringList);
19+
void setPlaylist(QStringList);
1820
void failedGetSimilarTracks();
21+
void clearList();
1922

2023
public slots:
2124
void addSimilarTracks(QString video_id);
25+
void addPlaylist(QString data);
2226
};
2327

2428
#endif // SIMILARTRACKS_H

0 commit comments

Comments
 (0)