#include "player_gui.h" #include "ui_player_gui.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include player_gui::player_gui(QWidget *parent) : QMainWindow(parent), ui(new Ui::player_gui){ ui->setupUi(this); std::cout << "starte..." << std::endl; ui->statusbar->showMessage("starte...", 0); this->set_ip(); this->sender_holen(); this->sender_laden(); //this->sender_ausgeben(); this->on_lineEdit_textChanged(""); // Play init /* Load the VLC engine */ inst = libvlc_new (0, NULL); } player_gui::~player_gui(){ if(mp){ /* Stop playing */ libvlc_media_player_stop (mp); /* Free the media_player */ libvlc_media_player_release (mp); libvlc_release (inst); } std::cout << "beende..." << std::endl; delete ui; } void player_gui::on_actionBeenden_triggered(){ exit(0); } void player_gui::set_ip(void){ QFile file("vlc-vdr.ini"); if(file.open(QIODevice::ReadWrite | QIODevice::Text)){ std::cout << " oeffnen erfolgreich..." << std::endl; QByteArray line = file.readLine(); QString string = line; if(string==""){ ip = "127.0.0.1:3000"; QTextStream output(&file); output << ip; }else{ ip = string; } std::cout << ip.toStdString() << " gesetzt..." << std::endl; }else{ std::cout << " oeffnen fehlgeschlagen..." << std::endl; } file.close(); } void player_gui::on_actionIP_Adresse_triggered() { this->set_ip(); QFile file("vlc-vdr.ini"); std::cout << "IP-Adresse setzen..." << std::endl; ui->statusbar->showMessage("IP-Adresse setzen...", 0); bool ok; QString text = QInputDialog::getText(this, "IP-Adresse", "IP-Adresse(127.0.0.1):Port(3000)", QLineEdit::Normal, ip, &ok); if(text!="") ip = text; if(file.open(QIODevice::WriteOnly | QIODevice::Text)){ QTextStream output(&file); output << ip; file.close(); } std::cout << text.toStdString() << " gesetzt." << std::endl; ui->statusbar->showMessage("IP-Adresse setzen... gesetzt.", 0); this->sender_holen(); this->sender_laden(); this->on_lineEdit_textChanged(""); } size_t player_gui::write_data(void *ptr, size_t size, size_t nmemb, void *stream){ size_t written = fwrite(ptr, size, nmemb, (FILE *)stream); return written; } int player_gui::sender_holen(void){ manager = new QNetworkAccessManager(); QString url = "http://" + ip + "/channels.m3u"; QNetworkRequest request(url); QNetworkReply *reply = manager->get(request); connect(reply, &QNetworkReply::finished, [=]() { if(reply->error() == QNetworkReply::NoError) { QByteArray response = reply->readAll(); std::string Daten = response.toStdString(); std::cout << Daten << std::endl; // do something with the data... FILE *file = fopen("channels.m3u", "wb"); if (file!=NULL) { std::fputs(response,file); } fclose(file); } else // handle error { ui->statusbar->showMessage(reply->errorString().toUtf8().constData()); std::cout << reply->errorString().toUtf8().constData() << std::endl; } }); return 0; } int player_gui::sender_laden(void){ int x=0; this->Sender=1; QFile file("channels.m3u"); if(file.open(QIODevice::ReadOnly | QIODevice::Text)){ while (!file.atEnd()){ QByteArray line = file.readLine(); if(line.toStdString()=="#EXTM3U\n") // erste Zeile überspringen continue; if(line.toStdString()=="\n") // lezte Zeile überspringen break; QString string = line; string.replace(QString("#EXTINF:-1,"), QString("")); string.replace(QString("\n"), QString("")); // Zeilenede entfernen if(++x%2){ std::cout << this->Sender << " Name: " << string.toStdString() << std::endl; this->Name[this->Sender]=string; } else { std::cout << this->Sender <<" Url: " << string.toStdString() << std::endl; this->URL[this->Sender++]=string; } } Sender--; //Senderkorrektur file.close(); } else { std::cout << "Fehler channels.m3u" << std::endl; return 1; } return 0; } int player_gui::sender_ausgeben(void){ for(int x=1;x<=this->Sender;x++){ std::cout << x << ". " << this->Name[x].toStdString() << "," << this->URL[x].toStdString() << std::endl; } return 0; } void player_gui::on_lineEdit_textChanged(const QString &arg1){ std::cout << "suchen" << std::endl; ui->listWidget->clear(); for(int x=1;x<=this->Sender;x++){ this->Name_tmp = this->Name[x].toLower(); if(this->Name_tmp.contains(arg1.toLower())){ ui->listWidget->addItem(this->Name[x]); } } } void player_gui::on_listWidget_itemClicked(QListWidgetItem *item){ std::cout << item->text().toStdString() << std::endl; this->play(item); } int player_gui::play(QListWidgetItem *item){ if (!item) return 1; std::cout << "Sender: " << item->text().toStdString() << std::endl; int x=1; for(;x<=this->Sender;x++){ if(item->text()==Name[x]){ std::cout << "Name: " << Name[x].toStdString() << " URL: " << URL[x].toStdString() << std::endl; break; } } ui->statusbar->showMessage(Name[x]+" - "+URL[x], 0); /* Stop playing */ if(mp) libvlc_media_player_stop (mp); QByteArray bla = URL[x].toLatin1(); const char *url = bla.data(); /* Create a new item */ m = libvlc_media_new_location (inst, url); /* Create a media player playing environement */ mp = libvlc_media_player_new_from_media (m); /* No need to keep the media now */ libvlc_media_release (m); #if defined(Q_OS_WIN) // Windows libvlc_media_player_set_hwnd(mp, (void *)ui->videoWidget->winId()); // hwnd #elif defined(Q_OS_MAC) // Mac libvlc_media_player_set_nsobject(mp, (void *)ui->videoWidget->winId()); // view #else //Linux int windid = ui->videoWidget->winId(); libvlc_media_player_set_xwindow (mp, windid); // xid #endif std::cout << "play..." << std::endl; /* play the media_player */ libvlc_media_player_play (mp); return 0; }