@@ -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
13981455void 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+ }
0 commit comments