diff --git a/.gitignore b/.gitignore
index 44a8ef9..615062a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@ transmission-2.04.tar.xz
/transmission-2.76.tar.xz
/transmission-2.80.tar.xz
/transmission-2.81.tar.xz
+/transmission-2.82.tar.xz
diff --git a/sources b/sources
index 14673b4..70b5ac1 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-db1ad10ecff07150486dab2365ccb3a8 transmission-2.81.tar.xz
+a5ef870c0410b12d10449c2d36fa4661 transmission-2.82.tar.xz
diff --git a/transmission-2.82-changeset_14150.diff b/transmission-2.82-changeset_14150.diff
new file mode 100644
index 0000000..a72e63d
--- /dev/null
+++ b/transmission-2.82-changeset_14150.diff
@@ -0,0 +1,462 @@
+Index: /trunk/qt/README.txt
+===================================================================
+--- /trunk/qt/README.txt (revision 14149)
++++ /trunk/qt/README.txt (revision 14150)
+@@ -37,7 +37,7 @@
+ BUILDING ON UNIX
+
+- 1. Prerequisites: Qt >= 4.6 and its development packages
++ 1. Prerequisites: Qt >= 5 and its development packages
+ 2. Build Transmission as normal
+- 3. In the qt/ directory, type "qmake qtr.pro" or "qmake-qt4 qtr.pro"
++ 3. In the qt/ directory, type "qmake qtr.pro" or "qmake-qt5 qtr.pro"
+ 4. In the qt/ directory, type "make"
+ 5. In the qt/ directory, as root, type "INSTALL_ROOT=/usr make install"
+Index: /trunk/qt/about.cc
+===================================================================
+--- /trunk/qt/about.cc (revision 14149)
++++ /trunk/qt/about.cc (revision 14150)
+@@ -38,5 +38,5 @@
+
+ l = new QLabel;
+- l->setPixmap (QPixmap (QString::fromAscii (":/icons/transmission-48.png")));
++ l->setPixmap (QPixmap (QString::fromUtf8 (":/icons/transmission-48.png")));
+ l->setAlignment (Qt::AlignCenter);
+ v->addWidget (l);
+@@ -45,5 +45,5 @@
+ f.setWeight (QFont::Bold);
+ f.setPointSize (int (f.pointSize () * 1.2));
+- l = new QLabel (tr ("Transmission %1").arg (QString::fromAscii (LONG_VERSION_STRING)));
++ l = new QLabel (tr ("Transmission %1").arg (QString::fromUtf8 (LONG_VERSION_STRING)));
+ l->setAlignment (Qt::AlignCenter);
+ l->setFont (f);
+@@ -52,5 +52,5 @@
+
+ l = new QLabel (tr ("A fast and easy BitTorrent client"));
+- l->setStyleSheet (QString::fromAscii ("text-align: center"));
++ l->setStyleSheet (QString::fromUtf8 ("text-align: center"));
+ l->setAlignment (Qt::AlignCenter);
+ v->addWidget (l);
+@@ -60,5 +60,5 @@
+ v->addWidget (l);
+
+- l = new QLabel (QString::fromAscii ("http://www.transmissionbt.com/"));
++ l = new QLabel (QString::fromUtf8 ("http://www.transmissionbt.com/"));
+ l->setOpenExternalLinks (true);
+ l->setAlignment (Qt::AlignCenter);
+@@ -90,5 +90,5 @@
+ this,
+ tr ("Credits"),
+- QString::fromAscii ("Jordan Lee (Backend; Daemon; GTK+; Qt)\n"
++ QString::fromUtf8 ("Jordan Lee (Backend; Daemon; GTK+; Qt)\n"
+ "Michell Livingston (OS X)\n"));
+ }
+Index: /trunk/qt/add-data.cc
+===================================================================
+--- /trunk/qt/add-data.cc (revision 14149)
++++ /trunk/qt/add-data.cc (revision 14150)
+@@ -44,5 +44,5 @@
+ else if( Utils::isHexHashcode( key ) )
+ {
+- magnet = QString::fromAscii("magnet:?xt=urn:btih:") + key;
++ magnet = QString::fromUtf8("magnet:?xt=urn:btih:") + key;
+ type = MAGNET;
+ }
+Index: /trunk/qt/app.cc
+===================================================================
+--- /trunk/qt/app.cc (revision 14149)
++++ /trunk/qt/app.cc (revision 14150)
+@@ -46,7 +46,7 @@
+ namespace
+ {
+- const QString DBUS_SERVICE = QString::fromAscii ("com.transmissionbt.Transmission" );
+- const QString DBUS_OBJECT_PATH = QString::fromAscii ("/com/transmissionbt/Transmission");
+- const QString DBUS_INTERFACE = QString::fromAscii ("com.transmissionbt.Transmission" );
++ const QString DBUS_SERVICE = QString::fromUtf8 ("com.transmissionbt.Transmission" );
++ const QString DBUS_OBJECT_PATH = QString::fromUtf8 ("/com/transmissionbt/Transmission");
++ const QString DBUS_INTERFACE = QString::fromUtf8 ("com.transmissionbt.Transmission" );
+
+ const char * MY_READABLE_NAME ("transmission-qt");
+@@ -90,5 +90,5 @@
+ myLastFullUpdateTime (0)
+ {
+- const QString MY_CONFIG_NAME = QString::fromAscii ("transmission");
++ const QString MY_CONFIG_NAME = QString::fromUtf8 ("transmission");
+
+ setApplicationName (MY_CONFIG_NAME);
+@@ -109,5 +109,5 @@
+ sizes << 16 << 22 << 24 << 32 << 48 << 64 << 72 << 96 << 128 << 192 << 256;
+ foreach (int size, sizes)
+- icon.addPixmap (QPixmap (QString::fromAscii (":/icons/transmission-%1.png").arg (size)));
++ icon.addPixmap (QPixmap (QString::fromUtf8 (":/icons/transmission-%1.png").arg (size)));
+ setWindowIcon (icon);
+
+@@ -465,13 +465,13 @@
+ MyApp :: notify (const QString& title, const QString& body) const
+ {
+- const QString dbusServiceName = QString::fromAscii ("org.freedesktop.Notifications");
+- const QString dbusInterfaceName = QString::fromAscii ("org.freedesktop.Notifications");
+- const QString dbusPath = QString::fromAscii ("/org/freedesktop/Notifications");
+-
+- QDBusMessage m = QDBusMessage::createMethodCall (dbusServiceName, dbusPath, dbusInterfaceName, QString::fromAscii ("Notify"));
++ const QString dbusServiceName = QString::fromUtf8 ("org.freedesktop.Notifications");
++ const QString dbusInterfaceName = QString::fromUtf8 ("org.freedesktop.Notifications");
++ const QString dbusPath = QString::fromUtf8 ("/org/freedesktop/Notifications");
++
++ QDBusMessage m = QDBusMessage::createMethodCall (dbusServiceName, dbusPath, dbusInterfaceName, QString::fromUtf8 ("Notify"));
+ QList args;
+- args.append (QString::fromAscii ("Transmission")); // app_name
++ args.append (QString::fromUtf8 ("Transmission")); // app_name
+ args.append (0U); // replaces_id
+- args.append (QString::fromAscii ("transmission")); // icon
++ args.append (QString::fromUtf8 ("transmission")); // icon
+ args.append (title); // summary
+ args.append (body); // body
+@@ -511,5 +511,5 @@
+ DBUS_OBJECT_PATH,
+ DBUS_INTERFACE,
+- QString::fromAscii ("AddMetainfo"));
++ QString::fromUtf8 ("AddMetainfo"));
+ QList arguments;
+ AddData a (addme[i]);
+Index: /trunk/qt/details.cc
+===================================================================
+--- /trunk/qt/details.cc (revision 14149)
++++ /trunk/qt/details.cc (revision 14150)
+@@ -868,5 +868,5 @@
+ {
+ QString txt;
+- switch (ch.toAscii ())
++ switch (ch.unicode ())
+ {
+ case 'O': txt = tr ("Optimistic unchoke"); break;
+Index: /trunk/qt/favicon.cc
+===================================================================
+--- /trunk/qt/favicon.cc (revision 14149)
++++ /trunk/qt/favicon.cc (revision 14150)
+@@ -11,9 +11,9 @@
+ */
+
+-#include
+ #include
+ #include
+ #include
+ #include
++#include
+
+ #include "favicon.h"
+@@ -41,5 +41,5 @@
+ Favicons :: getCacheDir( )
+ {
+- const QString base = QDesktopServices::storageLocation( QDesktopServices::CacheLocation );
++ const QString base = QStandardPaths::writableLocation (QStandardPaths::CacheLocation);
+ return QDir( base ).absoluteFilePath( "favicons" );
+ }
+Index: /trunk/qt/file-tree.cc
+===================================================================
+--- /trunk/qt/file-tree.cc (revision 14149)
++++ /trunk/qt/file-tree.cc (revision 14150)
+@@ -437,5 +437,4 @@
+ {
+ QString oldpath;
+- QModelIndex walk = index;
+ FileTreeItem * item = itemFromIndex (index);
+
+@@ -576,7 +575,7 @@
+ FileTreeModel :: clear ()
+ {
++ beginResetModel ();
+ clearSubtree (QModelIndex());
+-
+- reset ();
++ endResetModel ();
+ }
+
+@@ -614,5 +613,5 @@
+ bool added = false;
+ FileTreeItem * item;
+- QStringList tokens = filename.split (QChar::fromAscii('/'));
++ QStringList tokens = filename.split (QChar::fromLatin1('/'));
+
+ item = findItemForFileIndex (fileIndex);
+@@ -887,5 +886,5 @@
+ {
+ setColumnHidden (i, (isetResizeMode(i, QHeaderView::Interactive);
++ header()->setSectionResizeMode(i, QHeaderView::Interactive);
+ }
+
+Index: /trunk/qt/filterbar.cc
+===================================================================
+--- /trunk/qt/filterbar.cc (revision 14149)
++++ /trunk/qt/filterbar.cc (revision 14150)
+@@ -11,4 +11,10 @@
+ */
+
++#include
++#include
++#include
++#include
++#include
++#include
+ #include
+ #include
+Index: /trunk/qt/freespace-label.cc
+===================================================================
+--- /trunk/qt/freespace-label.cc (revision 14149)
++++ /trunk/qt/freespace-label.cc (revision 14150)
+@@ -74,4 +74,6 @@
+ FreespaceLabel :: onSessionExecuted (int64_t tag, const QString& result, struct tr_variant * arguments)
+ {
++ Q_UNUSED (result);
++
+ if (tag != myTag)
+ return;
+Index: /trunk/qt/freespace-label.h
+===================================================================
+--- /trunk/qt/freespace-label.h (revision 14149)
++++ /trunk/qt/freespace-label.h (revision 14150)
+@@ -17,5 +17,5 @@
+ #include
+
+-#include
++#include
+
+ class Session;
+Index: /trunk/qt/mainwin.cc
+===================================================================
+--- /trunk/qt/mainwin.cc (revision 14149)
++++ /trunk/qt/mainwin.cc (revision 14150)
+@@ -15,4 +15,8 @@
+
+ #include
++#include
++#include
++#include
++#include
+
+ #include
+Index: /trunk/qt/make-dialog.cc
+===================================================================
+--- /trunk/qt/make-dialog.cc (revision 14149)
++++ /trunk/qt/make-dialog.cc (revision 14150)
+@@ -22,4 +22,5 @@
+ #include
+ #include
++#include
+ #include
+ #include
+@@ -343,5 +344,5 @@
+ QPushButton * b = new QPushButton;
+ b->setIcon( folderPixmap );
+- b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) );
++ b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) );
+ myDestination = QDir::homePath();
+ b->setText( myDestination );
+@@ -357,5 +358,5 @@
+ myFolderButton->setIcon( folderPixmap );
+ myFolderButton->setText( tr( "(None)" ) );
+- myFolderButton->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) );
++ myFolderButton->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) );
+ connect( myFolderButton, SIGNAL(clicked(bool)),
+ this, SLOT(onFolderClicked(void)) );
+@@ -372,5 +373,5 @@
+ myFileButton->setText( tr( "(None)" ) );
+ myFileButton->setIcon( filePixmap );
+- myFileButton->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) );
++ myFileButton->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) );
+ connect( myFileButton, SIGNAL(clicked(bool)),
+ this, SLOT(onFileClicked(void)) );
+@@ -385,5 +386,5 @@
+
+ hig->addWideControl( myTrackerEdit = new ShortPlainTextEdit );
+- const int height = fontMetrics().size( 0, QString::fromAscii("\n\n\n\n") ).height( );
++ const int height = fontMetrics().size( 0, QString::fromUtf8("\n\n\n\n") ).height( );
+ myTrackerEdit->setMinimumHeight( height );
+ hig->addTallRow( tr( "&Trackers:" ), myTrackerEdit );
+Index: /trunk/qt/options.cc
+===================================================================
+--- /trunk/qt/options.cc (revision 14149)
++++ /trunk/qt/options.cc (revision 14150)
+@@ -125,5 +125,5 @@
+ p = mySourceButton = new QPushButton;
+ p->setIcon (filePixmap);
+- p->setStyleSheet (QString::fromAscii ("text-align: left; padding-left: 5; padding-right: 5"));
++ p->setStyleSheet (QString::fromUtf8 ("text-align: left; padding-left: 5; padding-right: 5"));
+ p->installEventFilter (this);
+ w = p;
+@@ -140,5 +140,5 @@
+ }
+
+- const int width = fontMetrics.size (0, QString::fromAscii ("This is a pretty long torrent filename indeed.torrent")).width ();
++ const int width = fontMetrics.size (0, QString::fromUtf8 ("This is a pretty long torrent filename indeed.torrent")).width ();
+ w->setMinimumWidth (width);
+ layout->addWidget (w, row, 1);
+Index: /trunk/qt/prefs-dialog.cc
+===================================================================
+--- /trunk/qt/prefs-dialog.cc (revision 14149)
++++ /trunk/qt/prefs-dialog.cc (revision 14150)
+@@ -22,5 +22,4 @@
+ #include
+ #include
+-#include
+ #include
+ #include
+@@ -136,5 +135,5 @@
+ const int minutes( myPrefs.getInt( key ) );
+ QTimeEdit * e = new QTimeEdit( );
+- e->setDisplayFormat( QString::fromAscii( "hh:mm" ) );
++ e->setDisplayFormat( QString::fromUtf8( "hh:mm" ) );
+ e->setProperty( PREF_KEY, key );
+ e->setTime( QTime().addSecs( minutes * 60 ) );
+@@ -234,9 +233,9 @@
+ h->setSpacing( HIG :: PAD );
+ QLabel * label = new QLabel;
+- label->setPixmap( QPixmap( QString::fromAscii( ":/icons/alt-limit-off.png" ) ) );
++ label->setPixmap( QPixmap( QString::fromUtf8( ":/icons/alt-limit-off.png" ) ) );
+ label->setAlignment( Qt::AlignLeft|Qt::AlignVCenter );
+ h->addWidget( label );
+ label = new QLabel( tr( "Alternative Speed Limits" ) );
+- label->setStyleSheet( QString::fromAscii( "font: bold" ) );
++ label->setStyleSheet( QString::fromUtf8( "font: bold" ) );
+ label->setAlignment( Qt::AlignLeft|Qt::AlignVCenter );
+ h->addWidget( label );
+@@ -573,5 +572,5 @@
+ b = myWatchButton = new QPushButton;
+ b->setIcon( folderPixmap );
+- b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) );
++ b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) );
+ connect( b, SIGNAL(clicked(bool)), this, SLOT(onWatchClicked(void)) );
+ hig->addRow( l, b );
+@@ -586,5 +585,5 @@
+ b = myDestinationButton = new QPushButton;
+ b->setIcon( folderPixmap );
+- b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) );
++ b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) );
+ connect( b, SIGNAL(clicked(bool)), this, SLOT(onDestinationClicked(void)) );
+ hig->addRow( tr( "Save to &Location:" ), b );
+@@ -611,5 +610,5 @@
+ b = myIncompleteButton = new QPushButton;
+ b->setIcon( folderPixmap );
+- b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) );
++ b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) );
+ connect( b, SIGNAL(clicked(bool)), this, SLOT(onIncompleteClicked(void)) );
+ hig->addRow( myIncompleteCheckbox, b );
+@@ -619,5 +618,5 @@
+ b = myTorrentDoneScriptButton = new QPushButton;
+ b->setIcon( filePixmap );
+- b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) );
++ b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) );
+ connect( b, SIGNAL(clicked(bool)), this, SLOT(onScriptClicked(void)) );
+ hig->addRow( myTorrentDoneScriptCheckbox, b );
+Index: /trunk/qt/qtr.pro
+===================================================================
+--- /trunk/qt/qtr.pro (revision 14149)
++++ /trunk/qt/qtr.pro (revision 14150)
+@@ -2,5 +2,5 @@
+ NAME = "Transmission"
+ DESCRIPTION = "Transmission: a fast, easy, and free BitTorrent client"
+-VERSION = 2.00
++VERSION = 2.81
+ LICENSE = "GPL"
+
+@@ -12,6 +12,6 @@
+ man.files = transmission-qt.1
+
+-CONFIG += qt qdbus thread debug link_pkgconfig
+-QT += network
++CONFIG += qt thread debug link_pkgconfig
++QT += network dbus widgets
+ PKGCONFIG = fontconfig libcurl openssl libevent
+
+Index: /trunk/qt/session.cc
+===================================================================
+--- /trunk/qt/session.cc (revision 14149)
++++ /trunk/qt/session.cc (revision 14150)
+@@ -691,9 +691,9 @@
+ QNetworkRequest request;
+ request.setUrl (myUrl);
+- request.setRawHeader ("User-Agent", QString (QCoreApplication::instance ()->applicationName () + "/" + LONG_VERSION_STRING).toAscii ());
++ request.setRawHeader ("User-Agent", QString (QCoreApplication::instance ()->applicationName () + "/" + LONG_VERSION_STRING).toUtf8 ());
+ request.setRawHeader ("Content-Type", "application/json; charset=UTF-8");
+
+ if (!mySessionId.isEmpty ())
+- request.setRawHeader (TR_RPC_SESSION_ID_HEADER, mySessionId.toAscii ());
++ request.setRawHeader (TR_RPC_SESSION_ID_HEADER, mySessionId.toUtf8 ());
+
+ const QByteArray requestData (json);
+Index: /trunk/qt/squeezelabel.h
+===================================================================
+--- /trunk/qt/squeezelabel.h (revision 14149)
++++ /trunk/qt/squeezelabel.h (revision 14150)
+@@ -43,5 +43,5 @@
+ #define SQUEEZELABEL_H
+
+-#include
++#include
+
+ class SqueezeLabel : public QLabel
+Index: /trunk/qt/torrent-model.cc
+===================================================================
+--- /trunk/qt/torrent-model.cc (revision 14149)
++++ /trunk/qt/torrent-model.cc (revision 14150)
+@@ -23,9 +23,12 @@
+ TorrentModel :: clear( )
+ {
++ beginResetModel ();
++
+ myIdToRow.clear( );
+ myIdToTorrent.clear( );
+ foreach( Torrent * tor, myTorrents ) delete tor;
+ myTorrents.clear( );
+- reset( );
++
++ endResetModel ();
+ }
+
+Index: /trunk/qt/utils.h
+===================================================================
+--- /trunk/qt/utils.h (revision 14149)
++++ /trunk/qt/utils.h (revision 14150)
+@@ -43,10 +43,10 @@
+ ///
+
+- static bool isMagnetLink( const QString& s ) { return s.startsWith( QString::fromAscii( "magnet:?" ) ); }
++ static bool isMagnetLink( const QString& s ) { return s.startsWith( QString::fromUtf8( "magnet:?" ) ); }
+
+ static bool isHexHashcode( const QString& s )
+ {
+ if( s.length() != 40 ) return false;
+- foreach( QChar ch, s ) if( !isxdigit( ch.toAscii() ) ) return false;
++ foreach( QChar ch, s ) if( !isxdigit( ch.unicode() ) ) return false;
+ return true;
+ }
+@@ -54,7 +54,7 @@
+ static bool isUriWithSupportedScheme( const QString& s )
+ {
+- static const QString ftp = QString::fromAscii( "ftp://" );
+- static const QString http = QString::fromAscii( "http://" );
+- static const QString https = QString::fromAscii( "https://" );
++ static const QString ftp = QString::fromUtf8( "ftp://" );
++ static const QString http = QString::fromUtf8( "http://" );
++ static const QString https = QString::fromUtf8( "https://" );
+ return s.startsWith(http) || s.startsWith(https) || s.startsWith(ftp);
+ }
+Index: /trunk/qt/watchdir.cc
+===================================================================
+--- /trunk/qt/watchdir.cc (revision 14149)
++++ /trunk/qt/watchdir.cc (revision 14150)
+@@ -53,5 +53,5 @@
+ if( err )
+ ret = ERROR;
+- else if( myModel.hasTorrent( QString::fromAscii( inf.hashString ) ) )
++ else if( myModel.hasTorrent( QString::fromUtf8( inf.hashString ) ) )
+ ret = DUPLICATE;
+ else
+@@ -107,5 +107,5 @@
+ // try to add any new files which end in .torrent
+ const QSet newFiles( files - myWatchDirFiles );
+- const QString torrentSuffix = QString::fromAscii( ".torrent" );
++ const QString torrentSuffix = QString::fromUtf8( ".torrent" );
+ foreach( QString name, newFiles ) {
+ if( name.endsWith( torrentSuffix, Qt::CaseInsensitive ) ) {
diff --git a/transmission.spec b/transmission.spec
index 5649bbb..7d3b937 100644
--- a/transmission.spec
+++ b/transmission.spec
@@ -1,8 +1,8 @@
%global _hardened_build 1
Name: transmission
-Version: 2.81
-Release: 3%{?dist}
+Version: 2.82
+Release: 1%{?dist}
Summary: A lightweight GTK+ BitTorrent client
Group: Applications/Internet
@@ -10,6 +10,11 @@ Group: Applications/Internet
License: MIT and GPLv2
URL: http://www.transmissionbt.com
Source0: http://download.transmissionbt.com/files/transmission-%{version}.tar.xz
+
+# Revert to changeset 14150 to build with qt4. Doesn't build otherwise
+# Check in 2.83 and drop if fixed.
+Patch0: transmission-2.82-changeset_14150.diff
+
BuildRequires: openssl-devel >= 0.9.4
BuildRequires: glib2-devel >= 2.32.0
BuildRequires: gtk3-devel >= 3.2.0
@@ -88,6 +93,7 @@ exit 0
%prep
%setup -q
+%patch0 -p2 -R
iconv --from=ISO-8859-1 --to=UTF-8 AUTHORS > AUTHORS.new
mv AUTHORS.new AUTHORS
@@ -192,6 +198,11 @@ fi
%doc %{_mandir}/man1/transmission-qt.*
%changelog
+* Thu Aug 15 2013 Ankur Sinha 2.82-1
+- Update to latest upstream release
+- Changes listed at: https://trac.transmissionbt.com/wiki/Changes#version-2.82
+- Add patch to revert qt5 changes since it doesn't build with it.
+
* Sun Aug 04 2013 Fedora Release Engineering - 2.81-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild