# HG changeset patch # User Wuzzy # Date 1521249376 -3600 # Node ID 2a3c52c49e8e06a18678c5d611d96de3f914b28c # Parent 6193503c4727c4e14122be69fb511ec7b082156e Remove “Upload to YouTube” functionality which has been broken for years diff -r 6193503c4727 -r 2a3c52c49e8e ChangeLog.txt --- a/ChangeLog.txt Sat Mar 17 00:13:49 2018 +0100 +++ b/ChangeLog.txt Sat Mar 17 02:16:16 2018 +0100 @@ -23,6 +23,7 @@ + Schemes are now stored in separate files under Schemes + Add default directory DrawnMaps for hand-drawn maps + Lead player to training missions when starting Hedgewars the first time + * Remove “Upload to YouTube” functionality (it was broken for years) * Fix broken preview of team hats (e.g. cap_team) * Fix chart in stats screen not supporting negative numbers diff -r 6193503c4727 -r 2a3c52c49e8e QTfrontend/ui/dialog/upload_video.cpp --- a/QTfrontend/ui/dialog/upload_video.cpp Sat Mar 17 00:13:49 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,312 +0,0 @@ -/* - * Hedgewars, a free turn based strategy game - * Copyright (c) 2004-2015 Andrey Korotaev - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "upload_video.h" -#include "hwconsts.h" - -// User-agent string used in http requests. -// Don't make it a global varibale - crash on linux because of cVersionString -#define USER_AGENT ("Hedgewars-QtFrontend/" + *cVersionString).toLatin1() - -// This is developer key obtained from http://code.google.com/apis/youtube/dashboard/ -// If you are reusing this code outside Hedgewars, don't use this developer key, -// obtain you own at http://code.google.com/apis/youtube/dashboard/ -static const QByteArray devKey = "AI39si5pKjxR0XgNIlmrEFF-LyYD31rps4g2O5dZTxLgD0fvJ2rHxrMrNFY8FYTZrzeI3VlaFVQLKfFnSBugvdZmy8vFzRDefQ"; - -HWUploadVideoDialog::HWUploadVideoDialog(QWidget* parent, const QString &filename, QNetworkAccessManager* netManager) : QDialog(parent) -{ - this->filename = filename; - this->netManager = netManager; - - setWindowTitle(tr("Upload video")); - - // Google requires us to display this, see https://developers.google.com/youtube/terms - QString GoogleNotice = - "

By clicking 'upload,' you certify that you own all rights to the content or that " - "you are authorized by the owner to make the content publicly available on YouTube, " - "and that it otherwise complies with the YouTube Terms of Service located at " - "https://www.youtube.com/t/terms.

"; - - // youtube doesn't understand this characters, even when they are properly escaped - // (either with CDATA or with < or >) - QRegExp rx("[^<>]*"); - - int row = 0; - - QGridLayout * layout = new QGridLayout(this); - layout->setColumnStretch(0, 1); - layout->setColumnStretch(1, 2); - - QLabel * lbLabel = new QLabel(this); - lbLabel->setWordWrap(true); - lbLabel->setText(QLabel::tr( - "Please provide either the YouTube account name " - "or the email address associated with the Google Account.")); - layout->addWidget(lbLabel, row++, 0, 1, 2); - - lbLabel = new QLabel(this); - lbLabel->setText(QLabel::tr("Account name (or email): ")); - layout->addWidget(lbLabel, row, 0); - - leAccount = new QLineEdit(this); - layout->addWidget(leAccount, row++, 1); - - lbLabel = new QLabel(this); - lbLabel->setText(QLabel::tr("Password: ")); - layout->addWidget(lbLabel, row, 0); - - lePassword = new QLineEdit(this); - lePassword->setEchoMode(QLineEdit::Password); - layout->addWidget(lePassword, row++, 1); - - cbSave = new QCheckBox(this); - cbSave->setText(QCheckBox::tr("Save account name and password")); - layout->addWidget(cbSave, row++, 0, 1, 2); - - QFrame * hr = new QFrame(this); - hr->setFrameStyle(QFrame::HLine); - hr->setLineWidth(3); - hr->setFixedHeight(10); - layout->addWidget(hr, row++, 0, 1, 2); - - lbLabel = new QLabel(this); - lbLabel->setText(QLabel::tr("Video title: ")); - layout->addWidget(lbLabel, row, 0); - - leTitle = new QLineEdit(this); - leTitle->setText(filename); - leTitle->setValidator(new QRegExpValidator(rx, leTitle)); - layout->addWidget(leTitle, row++, 1); - - lbLabel = new QLabel(this); - lbLabel->setText(QLabel::tr("Video description: ")); - layout->addWidget(lbLabel, row++, 0, 1, 2); - - teDescription = new QPlainTextEdit(this); - layout->addWidget(teDescription, row++, 0, 1, 2); - - lbLabel = new QLabel(this); - lbLabel->setText(QLabel::tr("Tags (comma separated): ")); - layout->addWidget(lbLabel, row, 0); - - leTags = new QLineEdit(this); - leTags->setText("hedgewars"); - leTags->setMaxLength(500); - leTags->setValidator(new QRegExpValidator(rx, leTags)); - layout->addWidget(leTags, row++, 1); - - cbPrivate = new QCheckBox(this); - cbPrivate->setText(QCheckBox::tr("Video is private")); - layout->addWidget(cbPrivate, row++, 0, 1, 2); - - hr = new QFrame(this); - hr->setFrameStyle(QFrame::HLine); - hr->setLineWidth(3); - hr->setFixedHeight(10); - layout->addWidget(hr, row++, 0, 1, 2); - - lbLabel = new QLabel(this); - lbLabel->setWordWrap(true); - lbLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse); - lbLabel->setTextFormat(Qt::RichText); - lbLabel->setOpenExternalLinks(true); - lbLabel->setText(GoogleNotice); - layout->addWidget(lbLabel, row++, 0, 1, 2); - - QDialogButtonBox* dbbButtons = new QDialogButtonBox(this); - btnUpload = dbbButtons->addButton(tr("Upload"), QDialogButtonBox::ActionRole); - QPushButton * pbCancel = dbbButtons->addButton(QDialogButtonBox::Cancel); - layout->addWidget(dbbButtons, row++, 0, 1, 2); - - /* hr = new QFrame(this); - hr->setFrameStyle(QFrame::HLine); - hr->setLineWidth(3); - hr->setFixedHeight(10); - layout->addWidget(hr, row++, 0, 1, 2);*/ - - connect(btnUpload, SIGNAL(clicked()), this, SLOT(upload())); - connect(pbCancel, SIGNAL(clicked()), this, SLOT(reject())); - - this->setWindowModality(Qt::WindowModal); -} - -void HWUploadVideoDialog::showEvent(QShowEvent * event) -{ - QDialog::showEvent(event); - - // set width to the same value as height (otherwise dialog has too small width) - QSize s = size(); - QPoint p = pos(); - resize(s.height(), s.height()); - move(p.x() - (s.height() - s.width())/2, p.y()); -} - -void HWUploadVideoDialog::setEditable(bool editable) -{ - leTitle->setEnabled(editable); - leAccount->setEnabled(editable); - lePassword->setEnabled(editable); - btnUpload->setEnabled(editable); -} - -void HWUploadVideoDialog::upload() -{ - setEditable(false); - - // Documentation is at https://developers.google.com/youtube/2.0/developers_guide_protocol_clientlogin#ClientLogin_Authentication - QNetworkRequest request; - request.setUrl(QUrl("https://www.google.com/accounts/ClientLogin")); - request.setRawHeader("User-Agent", USER_AGENT); - request.setRawHeader("Content-Type", "application/x-www-form-urlencoded"); - - QString account(QUrl::toPercentEncoding(leAccount->text())); - QString pass(QUrl::toPercentEncoding(lePassword->text())); - QByteArray data = QString("Email=%1&Passwd=%2&service=youtube&source=Hedgewars").arg(account).arg(pass).toUtf8(); - - QNetworkReply *reply = netManager->post(request, data); - connect(reply, SIGNAL(finished()), this, SLOT(authFinished())); -} - -static QString XmlEscape(const QString& str) -{ - QString str2 = str; - // youtube doesn't understand this characters, even when they are properly escaped - // (either with CDATA or with < >) - str2.replace('<', ' ').replace('>', ' '); - return "", "]]]]>") + "]]>"; -} - -void HWUploadVideoDialog::authFinished() -{ - QNetworkReply *reply = (QNetworkReply*)sender(); - reply->deleteLater(); - - int HttpCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - - QByteArray answer = reply->readAll(); - QString authToken = ""; - QList lines = answer.split('\n'); - foreach (const QByteArray& line, lines) - { - QString str(line); - if (!str.startsWith("Auth=", Qt::CaseInsensitive)) - continue; - str.remove(0, 5); - authToken = str; - break; - } - if (authToken.isEmpty()) - { - QString errorStr = QMessageBox::tr("Error while authenticating at google.com:\n"); - if (HttpCode == 403) - errorStr += QMessageBox::tr("Login or password is incorrect"); - else - errorStr += reply->errorString(); - - QMessageBox deniedMsg(this); - deniedMsg.setIcon(QMessageBox::Warning); - deniedMsg.setWindowTitle(QMessageBox::tr("Video upload - Error")); - deniedMsg.setText(errorStr); - deniedMsg.setWindowModality(Qt::WindowModal); - deniedMsg.exec(); - - setEditable(true); - return; - } - - QByteArray auth = ("GoogleLogin auth=" + authToken).toLatin1(); - - // We have authenticated, now we can send metadata and start upload - // Documentation is here: https://developers.google.com/youtube/2.0/developers_guide_protocol_resumable_uploads#Resumable_uploads - QByteArray body = - "" - "" - "" - // "" - "Games" - "" - "" - + XmlEscape(leTitle->text()).toUtf8() + - "" - "" - + XmlEscape(teDescription->toPlainText()).toUtf8() + - "" - "" - + XmlEscape(leTags->text()).toUtf8() + - "" - + (cbPrivate->isChecked()? "" : "") + - "" - ""; - - QNetworkRequest request; - request.setUrl(QUrl("http://uploads.gdata.youtube.com/resumable/feeds/api/users/default/uploads")); - request.setRawHeader("User-Agent", USER_AGENT); - request.setRawHeader("Authorization", auth); - request.setRawHeader("GData-Version", "2"); - request.setRawHeader("X-GData-Key", "key=" + devKey); - request.setRawHeader("Slug", filename.toUtf8()); - request.setRawHeader("Content-Type", "application/atom+xml; charset=UTF-8"); - - reply = netManager->post(request, body); - connect(reply, SIGNAL(finished()), this, SLOT(startUpload())); -} - -void HWUploadVideoDialog::startUpload() -{ - QNetworkReply *reply = (QNetworkReply*)sender(); - reply->deleteLater(); - - location = QString::fromLatin1(reply->rawHeader("Location")); - if (location.isEmpty()) - { - QString errorStr = QMessageBox::tr("Error while sending metadata to youtube.com:\n"); - errorStr += reply->errorString(); - - QMessageBox deniedMsg(this); - deniedMsg.setIcon(QMessageBox::Warning); - deniedMsg.setWindowTitle(QMessageBox::tr("Video upload - Error")); - deniedMsg.setText(errorStr); - deniedMsg.setWindowModality(Qt::WindowModal); - deniedMsg.exec(); - - setEditable(true); - return; - } - - accept(); -} diff -r 6193503c4727 -r 2a3c52c49e8e QTfrontend/ui/dialog/upload_video.h --- a/QTfrontend/ui/dialog/upload_video.h Sat Mar 17 00:13:49 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* - * Hedgewars, a free turn based strategy game - * Copyright (c) 2004-2015 Andrey Korotaev - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef UPLOAD_VIDEO_H -#define UPLOAD_VIDEO_H - -#include - -class QLineEdit; -class QCheckBox; -class QPlainTextEdit; -class QLabel; -class QNetworkAccessManager; - -class HWUploadVideoDialog : public QDialog -{ - Q_OBJECT - public: - HWUploadVideoDialog(QWidget* parent, const QString& filename, QNetworkAccessManager* netManager); - - QLineEdit* leAccount; - QLineEdit* lePassword; - QCheckBox* cbSave; - - QLineEdit* leTitle; - QPlainTextEdit* teDescription; - QLineEdit* leTags; - QCheckBox* cbPrivate; - - QPushButton* btnUpload; - - QString location; - - private: - QNetworkAccessManager* netManager; - QString filename; - - void setEditable(bool editable); - - protected: - // virtual from QWidget - void showEvent(QShowEvent * event); - - private slots: - void upload(); - void authFinished(); - void startUpload(); -}; - -#endif // UPLOAD_VIDEO_H diff -r 6193503c4727 -r 2a3c52c49e8e QTfrontend/ui/page/pagevideos.cpp --- a/QTfrontend/ui/page/pagevideos.cpp Sat Mar 17 00:13:49 2018 +0100 +++ b/QTfrontend/ui/page/pagevideos.cpp Sat Mar 17 02:16:16 2018 +0100 @@ -39,9 +39,6 @@ #include #include #include -#include -#include -#include #include #include "hwconsts.h" @@ -51,7 +48,6 @@ #include "gameuiconfig.h" #include "recorder.h" #include "ask_quit.h" -#include "upload_video.h" static const QSize ThumbnailSize(350, 350*3/5); @@ -60,7 +56,7 @@ { vcName, vcSize, - vcProgress, // either encoding or uploading + vcProgress, // for encoding vcNumColumns, }; @@ -77,9 +73,7 @@ QString name; QString prefix; // original filename without extension QString desc; // description (duration, resolution, etc...) - QString uploadUrl; // https://youtu.be/??????? HWRecorder * pRecorder; // non NULL if file is being encoded - QNetworkReply * pUploading; // non NULL if file is being uploaded bool seen; // used when updating directory float lastSizeUpdate; float progress; @@ -96,7 +90,6 @@ { this->name = name; pRecorder = NULL; - pUploading = NULL; lastSizeUpdate = 0; progress = 0; seen = false; @@ -180,8 +173,6 @@ labelDesc->setTextFormat(Qt::RichText); labelDesc->setWordWrap(true); labelDesc->setOpenExternalLinks(true); - //labelDesc->setMinimumSize(ThumbnailSize); - //pTopDescLayout->addWidget(labelDesc, 1); // buttons: play and delete btnPlay = new QPushButton(QPushButton::tr("Play"), pDescGroup); @@ -192,10 +183,6 @@ btnDelete->setEnabled(false); btnDelete->setWhatsThis(QPushButton::tr("Delete this video")); pBottomDescLayout->addWidget(btnDelete); - btnToYouTube = new QPushButton(QPushButton::tr("Upload to YouTube"), pDescGroup); - btnToYouTube->setEnabled(false); - btnToYouTube->setWhatsThis(QPushButton::tr("Upload this video to your YouTube account")); - pBottomDescLayout->addWidget(btnToYouTube); pDescLayout->addWidget(labelThumbnail, 0); pDescLayout->addWidget(labelDesc, 0); @@ -220,16 +207,14 @@ connect(filesTable, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(currentCellChanged())); connect(btnPlay, SIGNAL(clicked()), this, SLOT(playSelectedFile())); connect(btnDelete, SIGNAL(clicked()), this, SLOT(deleteSelectedFiles())); - connect(btnToYouTube, SIGNAL(clicked()), this, SLOT(uploadToYouTube())); connect(btnOpenDir, SIGNAL(clicked()), this, SLOT(openVideosDirectory())); } PageVideos::PageVideos(QWidget* parent) : AbstractPage(parent), - config(0), netManager(0) + config(0) { nameChangedFromCode = false; numRecorders = 0; - numUploads = 0; initPage(); } @@ -491,15 +476,12 @@ clearThumbnail(); btnPlay->setEnabled(false); btnDelete->setEnabled(false); - btnToYouTube->setEnabled(false); return; } btnPlay->setEnabled(item->ready()); - btnToYouTube->setEnabled(item->ready()); btnDelete->setEnabled(true); btnDelete->setText(item->ready()? QPushButton::tr("Delete") : QPushButton::tr("Cancel")); - btnToYouTube->setText(item->pUploading? QPushButton::tr("Cancel uploading") : QPushButton::tr("Upload to YouTube")); // construct string with desctiption of this file to display it QString desc = item->name + "\n\n"; @@ -543,21 +525,6 @@ item->prefix.truncate(pt); } - if (item->ready() && item->uploadUrl.isEmpty()) - { - // try to load url from file - QFile * file = new QFile(cfgdir->absoluteFilePath("VideoTemp/" + item->prefix + "-url.txt"), this); - if (!file->open(QIODevice::ReadOnly)) - item->uploadUrl = "no"; - else - { - QByteArray data = file->readAll(); - file->close(); - item->uploadUrl = QString::fromUtf8(data.data()); - } - } - if (item->uploadUrl != "no") - desc += QString("%1").arg(item->uploadUrl); desc.replace("\n", "
"); labelDesc->setText(desc); @@ -688,14 +655,14 @@ QDesktopServices::openUrl(QUrl("file:///" + path)); } -// clear VideoTemp directory (except for thumbnails and upload links) +// clear VideoTemp directory (except for thumbnails) void PageVideos::clearTemp() { QDir temp(cfgdir->absolutePath() + "/VideoTemp"); QStringList files = temp.entryList(QDir::Files); foreach (const QString& file, files) { - if (!file.endsWith(".bmp") && !file.endsWith(".png") && !file.endsWith("-url.txt")) + if (!file.endsWith(".bmp") && !file.endsWith(".png")) temp.remove(file); } } @@ -703,7 +670,7 @@ bool PageVideos::tryQuit(HWForm * form) { bool quit = true; - if (numRecorders != 0 || numUploads != 0) + if (numRecorders != 0) { // ask user what to do - abort or wait HWAskQuitDialog * askd = new HWAskQuitDialog(this, form); @@ -718,7 +685,6 @@ // returns multi-line string with list of videos in progress /* it will look like this: foo.avi (15.21% - encoding) -bar.avi (18.21% - uploading) */ QString PageVideos::getVideosInProgress() { @@ -730,8 +696,6 @@ QString process; if (!item->ready()) process = tr("encoding"); - else if (item->pUploading) - process = tr("uploading"); else continue; float progress = 100*item->progress; @@ -771,168 +735,3 @@ } } -VideoItem * PageVideos::itemFromReply(QNetworkReply* reply, int & row) -{ - VideoItem * item = NULL; - int count = filesTable->rowCount(); - // find corresponding item (maybe there is a better way to implement this?) - for (int i = 0; i < count; i++) - { - item = nameItem(i); - if (item->pUploading == reply) - { - row = i; - break; - } - } - return item; -} - -void PageVideos::uploadProgress(qint64 bytesSent, qint64 bytesTotal) -{ - QNetworkReply* reply = (QNetworkReply*)sender(); - int row; - VideoItem * item = itemFromReply(reply, row); - setProgress(row, item, bytesSent*1.0/bytesTotal); -} - -void PageVideos::uploadFinished() -{ - QNetworkReply* reply = (QNetworkReply*)sender(); - reply->deleteLater(); - - int row; - VideoItem * item = itemFromReply(reply, row); - if (!item) - return; - - item->pUploading = NULL; - - // extract video id from reply - QString videoid; - QXmlStreamReader xml(reply); - while (!xml.atEnd()) - { - xml.readNext(); - if (xml.qualifiedName() == "yt:videoid") - { - videoid = xml.readElementText(); - break; - } - } - - if (!videoid.isEmpty()) - { - item->uploadUrl = "https://youtu.be/" + videoid; - updateDescription(); - - // save url in file - QFile * file = new QFile(cfgdir->absoluteFilePath("VideoTemp/" + item->prefix + "-url.txt"), this); - if (file->open(QIODevice::WriteOnly)) - { - file->write(item->uploadUrl.toUtf8()); - file->close(); - } - } - - filesTable->setCellWidget(row, vcProgress, NULL); // remove progress bar - numUploads--; -} - -// this will protect saved youtube password from those who cannot read source code -static QString protectPass(QString str) -{ - QByteArray array = str.toUtf8(); - for (int i = 0; i < array.size(); i++) - array[i] = array[i] ^ 0xC4 ^ i; - array = array.toBase64(); - return QString::fromLatin1(array.data()); -} - -static QString unprotectPass(QString str) -{ - QByteArray array = QByteArray::fromBase64(str.toLatin1()); - for (int i = 0; i < array.size(); i++) - array[i] = array[i] ^ 0xC4 ^ i; - return QString::fromUtf8(array); -} - -void PageVideos::uploadToYouTube() -{ - int row = filesTable->currentRow(); - VideoItem * item = nameItem(row); - - if (item->pUploading) //Act as 'cancel uploading' button - { - // ask user if (s)he is serious - QMessageBox reallyStopMsg(this); - reallyStopMsg.setIcon(QMessageBox::Question); - reallyStopMsg.setWindowTitle(QMessageBox::tr("Videos - Are you sure?")); - reallyStopMsg.setText(QMessageBox::tr("Do you really want to cancel uploading %1?").arg(item->name)); - reallyStopMsg.setWindowModality(Qt::WindowModal); - reallyStopMsg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); - - if (reallyStopMsg.exec() != QMessageBox::Ok) - return; - item->pUploading->abort(); - btnToYouTube->setText(QPushButton::tr("Upload to YouTube")); - filesTable->setCellWidget(row, vcProgress, NULL); // remove progress bar - //numUploads--; - return; - } - - if (!netManager) - netManager = new QNetworkAccessManager(this); - - HWUploadVideoDialog* dlg = new HWUploadVideoDialog(this, item->name, netManager); - dlg->deleteLater(); - if (config->value("youtube/save").toBool()) - { - dlg->cbSave->setChecked(true); - dlg->leAccount->setText(config->value("youtube/name").toString()); - dlg->lePassword->setText(unprotectPass(config->value("youtube/pswd").toString())); - } - - bool result = dlg->exec(); - - if (dlg->cbSave->isChecked()) - { - config->setValue("youtube/save", true); - config->setValue("youtube/name", dlg->leAccount->text()); - config->setValue("youtube/pswd", protectPass(dlg->lePassword->text())); - } - else - { - config->setValue("youtube/save", false); - config->setValue("youtube/name", ""); - config->setValue("youtube/pswd", ""); - } - - if (!result) - return; - - QNetworkRequest request(QUrl(dlg->location)); - request.setRawHeader("Content-Type", "application/octet-stream"); - - QFile * file = new QFile(item->path(), this); - if (!file->open(QIODevice::ReadOnly)) - return; - - // add progress bar - QProgressBar * progressBar = new QProgressBar(filesTable); - progressBar->setMinimum(0); - progressBar->setMaximum(10000); - progressBar->setValue(0); - // make it different from progress-bar used during encoding (use blue color) - progressBar->setStyleSheet("* {color: #00ccff; selection-background-color: #00ccff;}" ); - filesTable->setCellWidget(row, vcProgress, progressBar); - - QNetworkReply* reply = netManager->put(request, file); - file->setParent(reply); // automatically close file when needed - item->pUploading = reply; - connect(reply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(uploadProgress(qint64, qint64))); - connect(reply, SIGNAL(finished()), this, SLOT(uploadFinished())); - numUploads++; - - updateDescription(); -} diff -r 6193503c4727 -r 2a3c52c49e8e QTfrontend/ui/page/pagevideos.h --- a/QTfrontend/ui/page/pagevideos.h Sat Mar 17 00:13:49 2018 +0100 +++ b/QTfrontend/ui/page/pagevideos.h Sat Mar 17 02:16:16 2018 +0100 @@ -22,8 +22,6 @@ #include "AbstractPage.h" -class QNetworkAccessManager; -class QNetworkReply; class GameUIConfig; class HWRecorder; class VideoItem; @@ -60,17 +58,15 @@ void clearTemp(); void clearThumbnail(); void setProgress(int row, VideoItem* item, float value); - VideoItem * itemFromReply(QNetworkReply* reply, int & row); GameUIConfig * config; - QNetworkAccessManager* netManager; // file list group QTableWidget *filesTable; QPushButton *btnOpenDir; // description group - QPushButton *btnPlay, *btnDelete, *btnToYouTube; + QPushButton *btnPlay, *btnDelete; QLabel *labelDesc; QLabel *labelThumbnail; @@ -78,7 +74,7 @@ // (in signal cellChanged) bool nameChangedFromCode; - int numRecorders, numUploads; + int numRecorders; private slots: void encodingFinished(bool success); @@ -90,9 +86,6 @@ void deleteSelectedFiles(); void openVideosDirectory(); void updateFileList(const QString & path); - void uploadToYouTube(); - void uploadProgress(qint64 bytesSent, qint64 bytesTotal); - void uploadFinished(); }; #endif // PAGE_VIDEOS_H