@@ -78,6 +78,14 @@ void MainWindow::init_similar_tracks(){
78
78
if (similarTracks==nullptr ){
79
79
similarTracks = new SimilarTracks (this ,5 );
80
80
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 ;
81
89
currentSimilarTrackList.clear ();
82
90
currentSimilarTrackList = list;
83
91
currentSimilarTrackProcessing = 0 ;
@@ -86,6 +94,10 @@ void MainWindow::init_similar_tracks(){
86
94
connect (similarTracks, &SimilarTracks::failedGetSimilarTracks,[=](){
87
95
ui->similarTrackLoader ->stop ();
88
96
});
97
+ connect (similarTracks, &SimilarTracks::clearList,[=](){
98
+ currentSimilarTrackList.clear ();
99
+ ui->recommListWidget ->clear ();
100
+ });
89
101
}
90
102
}
91
103
@@ -1285,7 +1297,6 @@ void MainWindow::addToSimilarTracksQueue(const QVariant Base64andDominantColor){
1285
1297
currentSimilarTrackMeta.append (dominantColor);
1286
1298
currentSimilarTrackMeta.append (base64);
1287
1299
1288
-
1289
1300
QWidget *track_widget = new QWidget (ui->recommListWidget );
1290
1301
track_widget->setToolTip (htmlToPlainText (title));
1291
1302
track_widget->setObjectName (" track-widget-" +songId);
@@ -1370,29 +1381,75 @@ void MainWindow::addToSimilarTracksQueue(const QVariant Base64andDominantColor){
1370
1381
a->start (QPropertyAnimation::DeleteWhenStopped);
1371
1382
ui->recommListWidget ->addItem (item);
1372
1383
1373
- ui->recommListWidget ->setCurrentRow (ui->recommListWidget ->count ()-1 );
1384
+ // ui->recommListWidget->setCurrentRow(ui->recommListWidget->count()-1);
1374
1385
if (store_manager->isDownloaded (songId)){
1375
1386
ui->recommListWidget ->itemWidget (item)->setEnabled (true );
1376
1387
track_ui.url ->setText (" file://" +setting_path+" /downloadedTracks/" +songId);
1377
1388
track_ui.offline ->setPixmap (QPixmap (" :/icons/offline.png" ).scaled (track_ui.offline ->size (),Qt::KeepAspectRatio,Qt::SmoothTransformation));
1378
1389
}else {
1379
1390
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
- }
1384
1391
}
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
+ }
1386
1435
}
1436
+ }
1387
1437
1438
+ void MainWindow::similarTracksProcessHelper (){
1388
1439
// clear meta of currentSimilarTrack and free it for next track
1389
1440
currentSimilarTrackMeta.clear ();
1390
1441
// 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
+ }
1394
1452
}
1395
-
1396
1453
}
1397
1454
1398
1455
void MainWindow::addToQueue (QString id,QString title,
@@ -1969,7 +2026,7 @@ void MainWindow::ytdlReadyRead(){
1969
2026
listWidgetItem->setEnabled (true );
1970
2027
QLineEdit *url = listWidgetItem->findChild <QLineEdit *>(" url" );
1971
2028
static_cast <QLineEdit*>(url)->setText (m48url);
1972
- qDebug ()<<" NEW URL:" <<m48url;
2029
+ // qDebug()<<"NEW URL:"<<m48url;
1973
2030
// TODO
1974
2031
store_manager->saveStreamUrl (songId,m48url,getExpireTime (m48url));
1975
2032
mfr->deleteLater ();
@@ -2353,11 +2410,17 @@ void MainWindow::listItemDoubleClicked(QListWidget *list,QListWidgetItem *item){
2353
2410
shadow_list_.back ()->setColor (QColor (" #292929" ));
2354
2411
lbl->setGraphicsEffect (shadow_list_.back ());
2355
2412
}
2413
+
2356
2414
if (store_manager->isDownloaded (songId)){
2357
2415
radio_manager->playRadio (false ,QUrl (url));
2358
2416
}else {
2359
2417
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
+ }
2361
2424
}
2362
2425
2363
2426
// update metadata of MPRIS interface
@@ -3926,3 +3989,8 @@ void MainWindow::on_showSimilarList_clicked()
3926
3989
ui->recommWidget ->isVisible () ? ui->showSimilarList ->setIcon (QIcon (" :/icons/sidebar/hideRecommend.png" )):
3927
3990
ui->showSimilarList ->setIcon (QIcon (" :/icons/sidebar/showRecommend.png" ));
3928
3991
}
3992
+
3993
+ // add playlist from web interface
3994
+ void MainWindow::addPlaylistByData (QString data){
3995
+ similarTracks->addPlaylist (data);
3996
+ }
0 commit comments