/** Add a new playlist tab. */ Playlist* TabPlaylist::addPlaylist() { QString newPlaylistName = tr("Playlist %1").arg(count() + 1); QByteArray ba; if (playlists().isEmpty()) { ba = SettingsPrivate::instance()->lastActivePlaylistGeometry(); } else { ba = currentPlayList()->horizontalHeader()->saveState(); } // Then append a new empty playlist to the others Playlist *p = new Playlist(_mediaPlayer, this); p->installEventFilter(this); if (!ba.isEmpty()) { p->horizontalHeader()->restoreState(ba); } // Always create an icon in Disabled mode. It will be enabled when one will provide some tracks int i = addTab(p, newPlaylistName); this->setTabIcon(i, this->defaultIcon(QIcon::Disabled)); connect(p->mediaPlaylist(), &QMediaPlaylist::mediaRemoved, this, [=](int start, int) { if (_mediaPlayer.data()->playlist() == p->mediaPlaylist() && p->mediaPlaylist()->currentIndex() == start) { _mediaPlayer.data()->stop(); } }); // Forward from inner class to MainWindow the signals connect(p, &Playlist::aboutToSendToTagEditor, this, &TabPlaylist::aboutToSendToTagEditor); connect(p, &Playlist::selectionChanged, this, &TabPlaylist::selectionChanged); // Check if tab icon should indicate that playlist has changed or not connect(p, &Playlist::contentHasChanged, this, [=]() { int playlistTabIndex = -1; for (int i = 0; i < playlists().count(); i++) { if (p == playlist(i)) { playlistTabIndex = i; break; } } if (playlistTabIndex != -1) { if (p->hash() != p->generateNewHash()) { this->setTabIcon(playlistTabIndex, this->defaultIcon(QIcon::Normal)); } } }); // Select the new empty playlist setCurrentIndex(i); uint hash = qHash(p); this->tabBar()->setTabData(i, hash); emit playlistCreated(); return p; }
void YouTube::createNewPlaylist(const QString &title, const QString &description, const bool &isPrivate) { QUrl url("http://gdata.youtube.com/feeds/api/users/default/playlists"); QByteArray xml("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" \ "<entry xmlns=\"http://www.w3.org/2005/Atom\"\n" \ "xmlns:yt=\"http://gdata.youtube.com/schemas/2007\">\n" \ "<title>" + title.toAscii().toPercentEncoding(" \n\t#[]{}=+$&*()<>@|',/!\":;?") + "</title>\n" \ "<summary>" + description.toAscii().toPercentEncoding(" \n\t#[]{}=+$&*()<>@|',/!\":;?") + "</summary>\n" \ "</entry>"); if (isPrivate) { int index = xml.lastIndexOf("<"); xml.insert(index, "<yt:private/>\n"); } postRequest(url, xml); connect(this, SIGNAL(postSuccessful()), this, SIGNAL(playlistCreated())); }