1
mirror of https://github.com/qbittorrent/qBittorrent synced 2025-11-04 16:42:38 +01:00

Compare commits

...

52 Commits

Author SHA1 Message Date
Christophe Dumez
6db048122a Tagged v1.5.0 release 2009-09-03 12:02:39 +00:00
Christophe Dumez
194eb3ba6e - v1.5.0 release 2009-09-03 11:35:28 +00:00
Christophe Dumez
8792637634 - Fixed uTorrent spoofing code 2009-09-03 11:29:15 +00:00
Christophe Dumez
63ad2def91 - Improve readability of tracker error tooltips
- Update uTorrent spoofer to v1.9.4
2009-09-03 11:05:20 +00:00
Christophe Dumez
f790b80aa3 - Updated Dutch translation 2009-09-02 06:47:32 +00:00
Christophe Dumez
ab78e5b438 - Updated Italian translation 2009-09-01 18:14:26 +00:00
Christophe Dumez
05948e2edf - Bump to rc5 2009-09-01 17:26:34 +00:00
Christophe Dumez
c9c4f7001a - Fix crash when right-clicking on RSS news list (closes #422495) 2009-09-01 17:24:47 +00:00
Christophe Dumez
6cd185d0d5 - Updated Finnish translation 2009-09-01 16:49:13 +00:00
Christophe Dumez
063219cbe7 - Updated Hungarian translation 2009-09-01 16:42:39 +00:00
Christophe Dumez
e324f3792b - Updated Greek translation
- Added Romanian translation to desktop file
2009-09-01 16:42:00 +00:00
Christophe Dumez
0267ecc342 - Updated Czech and Portuguese translations 2009-09-01 16:39:45 +00:00
Christophe Dumez
e53c7aaea6 - Added Portuguese and brazilian translations to desktop file
- Recursive torrent download now consider torrents with more than one file inside
2009-08-31 08:51:55 +00:00
Christophe Dumez
3e90e56266 - Added Slovak and Cseck translations to desktop file 2009-08-31 07:31:34 +00:00
Christophe Dumez
1c1b8acd67 Added Finnish translation to desktop file 2009-08-31 06:14:58 +00:00
Christophe Dumez
811846e5fa - Added Hungarian translation to desktop file (Thanks Charles Barcza) 2009-08-31 01:48:28 +00:00
Christophe Dumez
3ba28885b9 - Added Traditional Chinese translation 2009-08-30 03:42:14 +00:00
Christophe Dumez
8ed1c57c29 - Updated french translation
- Bump to rc4
2009-08-30 02:01:36 +00:00
Christophe Dumez
af5d24c5bc - Forgot to commit this file 2009-08-30 01:24:46 +00:00
Christophe Dumez
9dcd572d60 - BUGFIX: Better item coloring in torrent content filtering dialog
- Updated turkish translation
2009-08-29 09:42:20 +00:00
Christophe Dumez
e024a3ff35 - Updated Finish and Romanian translations 2009-08-29 08:01:43 +00:00
Christophe Dumez
37342e0f0c - Update number of unread items when a feed is deleted 2009-08-29 04:06:25 +00:00
Christophe Dumez
bfbbc1f497 - Updated language files 2009-08-29 04:01:31 +00:00
Christophe Dumez
5d31dcdb15 - Added an icon for articles without attachment 2009-08-29 03:55:14 +00:00
Christophe Dumez
6f89b1f131 - Be less restrictive about RSS feeds, we now display articles even if they don't have embedded torrents. However, RSS feed downloader is not available for said feeds.
- Added an icon to differenciate articles with attachment (torrent)
2009-08-29 03:47:14 +00:00
Christophe Dumez
9d35bda43c - Fix a crash introduced by last commit 2009-08-29 01:44:23 +00:00
Christophe Dumez
e780d83fd0 - Stop displaying items after they were read in "unread" news. 2009-08-28 17:29:34 +00:00
Christophe Dumez
7a59d5e47c - Do not update the icon when clicking "Mark all as read" on a feed that is still loading
- Added some more debug messages
2009-08-28 16:57:28 +00:00
Christophe Dumez
f2ea524be9 - Updated Slovak translation 2009-08-28 10:12:43 +00:00
Christophe Dumez
a33094519c - Fix crash when a new RSS feed is added and its URL is reformatted/simplified by QUrl(URL).toString(). (closes #420116) 2009-08-28 06:38:19 +00:00
Christophe Dumez
e313ae808f - Fixing desktop file (Thanks Alexey Morsov) 2009-08-27 14:38:38 +00:00
Christophe Dumez
dc9802fe1e - Forgot not to remove this file too 2009-08-27 13:20:33 +00:00
Christophe Dumez
64f1d306f4 - Do not remove older torrent parameters files, just to be on the safe side 2009-08-27 13:18:45 +00:00
Christophe Dumez
f3af4867fd - As a default, sort search results list by Top seed first 2009-08-27 12:40:14 +00:00
Christophe Dumez
4fe22dbc57 - Rewrote Column sorting code in search result lists 2009-08-27 12:37:39 +00:00
Christophe Dumez
1d9b524b77 - Fixes compilation problem regarding hash missing 2009-08-27 11:41:29 +00:00
Christophe Dumez
63761afd0a - Got rid of .speedlimits file and use new TorrentPersistantData system 2009-08-27 09:07:33 +00:00
Christophe Dumez
8da148ffa1 - Import URL seeds and trackers from v1.4.x too 2009-08-27 08:43:19 +00:00
Christophe Dumez
e2dc2207d8 - Fixed v1.4.x torrent import 2009-08-27 08:23:35 +00:00
Christophe Dumez
6e87d6655a - Unread items were not updated correctly when a feed was updated 2009-08-27 07:57:52 +00:00
Christophe Dumez
d72485a955 Updated swedish translation 2009-08-27 07:54:32 +00:00
Christophe Dumez
04c6760892 - Fixed missing SLOT usage 2009-08-27 03:29:54 +00:00
Christophe Dumez
382f3e3c86 - Disabled debug mode 2009-08-27 03:15:12 +00:00
Christophe Dumez
c1378450fc - Import torrents from v1.4.x (or earlier) in order not to lose them when updating 2009-08-27 03:13:39 +00:00
Christophe Dumez
4e10a8dbf7 rc1 bump & disabling debug 2009-08-27 02:24:20 +00:00
Christophe Dumez
4f7b4c2a55 - Fix last commit 2009-08-27 02:23:17 +00:00
Christophe Dumez
f98f076335 Updated Russian translation 2009-08-27 02:22:50 +00:00
Christophe Dumez
b148a93a8f - Can now create trackerless torrents 2009-08-27 02:15:47 +00:00
Christophe Dumez
37cf23fe33 - Updated Simplified Chinese translation 2009-08-26 14:33:08 +00:00
Christophe Dumez
87f43123c6 - Update news list when a feed is updated and Unread items are displayed 2009-08-26 12:26:43 +00:00
Christophe Dumez
11dd2d81b8 - Updated french translation 2009-08-26 06:23:13 +00:00
Christophe Dumez
d18d07efed - Updated language files 2009-08-26 06:13:37 +00:00
74 changed files with 4952 additions and 5839 deletions

View File

@@ -1,4 +1,4 @@
* Unknown - Christophe Dumez <chris@qbittorrent.org> - v1.5.0
* Thu Sep 3 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.0
- FEATURE: Added Magnet URI support
- FEATURE: Search engine supports category-based requests
- FEATURE: Make use of torrent enclosure in RSS feeds for direct download
@@ -12,9 +12,13 @@
- FEATURE: If a torrent contains a torrent file, process downloaded torrent file too
- FEATURE: A random listening port can be chosen automatically
- BUGFIX: torrent resume code rewrited
- BUGFIX: Fixed uTorrent spoofing code
- BUGFIX: Greatly improved column sorting code
- BUGFIX: Possibility to create trackerless torrents
- BUGFIX: Better item coloring in torrent content filtering dialog
- COSMETIC: Redesigned search tab to improve usability
- COSMETIC: Redesigned RSS tab to improve usability
- COSMETIC: Improved tracker errors readability
* Sun Aug 21 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.4.1
- BUGFIX: Fix problems when changing save path (if using temporary download folder)

View File

@@ -77,7 +77,6 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
// Make download list header clickable for sorting
finishedList->header()->setClickable(true);
finishedList->header()->setSortIndicatorShown(true);
connect(finishedList->header(), SIGNAL(sectionPressed(int)), this, SLOT(toggleFinishedListSortOrder(int)));
finishedListDelegate = new FinishedListDelegate(finishedList);
finishedList->setItemDelegate(finishedListDelegate);
connect(finishedList, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayFinishedListMenu(const QPoint&)));

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

View File

@@ -1,19 +1,26 @@
[Desktop Entry]
Categories=Qt;Network;P2P
Categories=Qt;Network;P2P;
Comment=V1.5.0
Exec=qbittorrent %f
GenericName=Bittorrent client
GenericName[bg]=Торент клиент
GenericName[cs]=Bittorrent klient
GenericName[de]=Bittorren Client
GenericName[el]=Τορεντ πελάτης
GenericName[el]=Bittorrent πελάτης
GenericName[es]=Cliente Bittorrent
GenericName[fi]=Bittorrent-ohjelma
GenericName[fr]=Client Bittorrent
GenericName[hu]=Bittorrent kliens
GenericName[it]=Client Bittorrent
GenericName[ja]=Bittorrent クライアント
GenericName[ko]=비토렌트 클라이언트
GenericName[nl]=Bittorrent client
GenericName[nl]=Bittorrent-cliënt
GenericName[pl]=Klient Bittorrent
GenericName[pt]=Cliente Bittorrent
GenericName[pt_BR]=Cliente Bittorrent
GenericName[ro]=Client Bittorrent
GenericName[ru]=клиент Bittorrent
GenericName[sk]=Klient siete Bittorrent
GenericName[sv]=Bittorrent-klient
GenericName[tr]=Bittorrent istemcisi
GenericName[uk]=Bittorrent-клієнт

View File

@@ -33,6 +33,7 @@
#include <QStandardItemModel>
#include <QHeaderView>
#include <QSettings>
#include <QSortFilterProxyModel>
#include "SearchTab.h"
#include "SearchListDelegate.h"
@@ -45,45 +46,63 @@
#define SEARCH_LEECHERS 3
#define SEARCH_ENGINE 4
SearchTab::SearchTab(SearchEngine *parent) : QWidget()
SearchTab::SearchTab(SearchEngine *parent) : QWidget(), parent(parent)
{
box=new QVBoxLayout();
results_lbl=new QLabel();
resultsBrowser = new QTreeView();
resultsBrowser->setSelectionMode(QAbstractItemView::ExtendedSelection);
box->addWidget(results_lbl);
box->addWidget(resultsBrowser);
setLayout(box);
// Set Search results list model
SearchListModel = new QStandardItemModel(0,6);
SearchListModel->setHeaderData(SEARCH_NAME, Qt::Horizontal, tr("Name", "i.e: file name"));
SearchListModel->setHeaderData(SEARCH_SIZE, Qt::Horizontal, tr("Size", "i.e: file size"));
SearchListModel->setHeaderData(SEARCH_SEEDERS, Qt::Horizontal, tr("Seeders", "i.e: Number of full sources"));
SearchListModel->setHeaderData(SEARCH_LEECHERS, Qt::Horizontal, tr("Leechers", "i.e: Number of partial sources"));
SearchListModel->setHeaderData(SEARCH_ENGINE, Qt::Horizontal, tr("Search engine"));
resultsBrowser->setModel(SearchListModel);
resultsBrowser->hideColumn(URL_COLUMN); // Hide url column
SearchDelegate = new SearchListDelegate();
resultsBrowser->setItemDelegate(SearchDelegate);
// Make search list header clickable for sorting
resultsBrowser->header()->setClickable(true);
resultsBrowser->header()->setSortIndicatorShown(true);
// Connect signals to slots (search part)
connect(resultsBrowser, SIGNAL(doubleClicked(const QModelIndex&)), parent, SLOT(downloadSelectedItem(const QModelIndex&)));
connect(resultsBrowser->header(), SIGNAL(sectionPressed(int)), this, SLOT(sortSearchList(int)));
// Load last columns width for search results list
if(!loadColWidthResultsList()){
resultsBrowser->header()->resizeSection(0, 275);
}
box=new QVBoxLayout();
results_lbl=new QLabel();
resultsBrowser = new QTreeView();
resultsBrowser->setSelectionMode(QAbstractItemView::ExtendedSelection);
box->addWidget(results_lbl);
box->addWidget(resultsBrowser);
setLayout(box);
// Set Search results list model
SearchListModel = new QStandardItemModel(0,6);
SearchListModel->setHeaderData(SEARCH_NAME, Qt::Horizontal, tr("Name", "i.e: file name"));
SearchListModel->setHeaderData(SEARCH_SIZE, Qt::Horizontal, tr("Size", "i.e: file size"));
SearchListModel->setHeaderData(SEARCH_SEEDERS, Qt::Horizontal, tr("Seeders", "i.e: Number of full sources"));
SearchListModel->setHeaderData(SEARCH_LEECHERS, Qt::Horizontal, tr("Leechers", "i.e: Number of partial sources"));
SearchListModel->setHeaderData(SEARCH_ENGINE, Qt::Horizontal, tr("Search engine"));
resultsBrowser->hideColumn(URL_COLUMN); // Hide url column
proxyModel = new QSortFilterProxyModel();
proxyModel->setDynamicSortFilter(true);
proxyModel->setSourceModel(SearchListModel);
resultsBrowser->setModel(proxyModel);
SearchDelegate = new SearchListDelegate();
resultsBrowser->setItemDelegate(SearchDelegate);
resultsBrowser->setRootIsDecorated(false);
resultsBrowser->setAllColumnsShowFocus(true);
resultsBrowser->setSortingEnabled(true);
// Connect signals to slots (search part)
connect(resultsBrowser, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(downloadSelectedItem(const QModelIndex&)));
// Load last columns width for search results list
if(!loadColWidthResultsList()){
resultsBrowser->header()->resizeSection(0, 275);
}
// Sort by Seeds
resultsBrowser->sortByColumn(SEEDERS, Qt::DescendingOrder);
}
void SearchTab::downloadSelectedItem(const QModelIndex& index) {
QString engine_url = proxyModel->data(proxyModel->index(index.row(), ENGINE_URL_COLUMN)).toString();
QString torrent_url = proxyModel->data(proxyModel->index(index.row(), URL_COLUMN)).toString();
setRowColor(index.row(), "red");
parent->downloadTorrent(engine_url, torrent_url);
}
SearchTab::~SearchTab() {
delete resultsBrowser;
delete SearchListModel;
delete SearchDelegate;
delete box;
delete results_lbl;
delete resultsBrowser;
delete SearchListModel;
delete proxyModel;
delete SearchDelegate;
}
QHeaderView* SearchTab::header() const {
@@ -100,87 +119,31 @@ bool SearchTab::loadColWidthResultsList() {
return false;
unsigned int listSize = width_list.size();
for(unsigned int i=0; i<listSize; ++i){
resultsBrowser->header()->resizeSection(i, width_list.at(i).toInt());
resultsBrowser->header()->resizeSection(i, width_list.at(i).toInt());
}
return true;
}
QLabel* SearchTab::getCurrentLabel()
{
return results_lbl;
return results_lbl;
}
QTreeView* SearchTab::getCurrentTreeView()
{
return resultsBrowser;
return resultsBrowser;
}
QStandardItemModel* SearchTab::getCurrentSearchListModel()
{
return SearchListModel;
return SearchListModel;
}
// Set the color of a row in data model
void SearchTab::setRowColor(int row, QString color){
for(int i=0; i<SearchListModel->columnCount(); ++i){
SearchListModel->setData(SearchListModel->index(row, i), QVariant(QColor(color)), Qt::ForegroundRole);
for(int i=0; i<proxyModel->columnCount(); ++i){
proxyModel->setData(proxyModel->index(row, i), QVariant(QColor(color)), Qt::ForegroundRole);
}
}
void SearchTab::sortSearchList(int index){
static Qt::SortOrder sortOrder = Qt::AscendingOrder;
if(resultsBrowser->header()->sortIndicatorSection() == index){
sortOrder = (sortOrder == Qt::DescendingOrder) ? Qt::AscendingOrder : Qt::DescendingOrder; ;
}
resultsBrowser->header()->setSortIndicator(index, sortOrder);
switch(index){
case SEEDERS:
case LEECHERS:
case SIZE:
sortSearchListInt(index, sortOrder);
break;
default:
sortSearchListString(index, sortOrder);
}
}
void SearchTab::sortSearchListInt(int index, Qt::SortOrder sortOrder){
QList<QPair<int, qlonglong> > lines;
// Insertion sorting
for(int i=0; i<SearchListModel->rowCount(); ++i){
misc::insertSort(lines, QPair<int,qlonglong>(i, SearchListModel->data(SearchListModel->index(i, index)).toLongLong()), sortOrder);
}
// Insert items in new model, in correct order
int nbRows_old = lines.size();
for(int row=0; row<lines.size(); ++row){
SearchListModel->insertRow(SearchListModel->rowCount());
int sourceRow = lines[row].first;
for(int col=0; col<6; ++col){
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col)));
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col), Qt::ForegroundRole), Qt::ForegroundRole);
}
}
// Remove old rows
SearchListModel->removeRows(0, nbRows_old);
}
void SearchTab::sortSearchListString(int index, Qt::SortOrder sortOrder){
QList<QPair<int, QString> > lines;
// Insetion sorting
for(int i=0; i<SearchListModel->rowCount(); ++i){
misc::insertSortString(lines, QPair<int, QString>(i, SearchListModel->data(SearchListModel->index(i, index)).toString()), sortOrder);
}
// Insert items in new model, in correct order
int nbRows_old = lines.size();
for(int row=0; row<nbRows_old; ++row){
SearchListModel->insertRow(SearchListModel->rowCount());
int sourceRow = lines[row].first;
for(int col=0; col<6; ++col){
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col)));
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col), Qt::ForegroundRole), Qt::ForegroundRole);
}
}
// Remove old rows
SearchListModel->removeRows(0, nbRows_old);
}

View File

@@ -41,32 +41,34 @@ class SearchEngine;
class QTreeView;
class QHeaderView;
class QStandardItemModel;
class QSortFilterProxyModel;
class SearchTab: public QWidget, public Ui::search_engine {
Q_OBJECT
private:
QVBoxLayout *box;
QLabel *results_lbl;
QTreeView *resultsBrowser;
QStandardItemModel *SearchListModel;
QSortFilterProxyModel *proxyModel;
SearchListDelegate *SearchDelegate;
SearchEngine *parent;
protected slots:
void downloadSelectedItem(const QModelIndex& index);
public:
SearchTab(SearchEngine *parent);
~SearchTab();
bool loadColWidthResultsList();
QLabel * getCurrentLabel();
QStandardItemModel * getCurrentSearchListModel();
QTreeView * getCurrentTreeView();
void setRowColor(int row, QString color);
QHeaderView* header() const;
class SearchTab : public QWidget, public Ui::search_engine
{
Q_OBJECT
private:
QVBoxLayout *box;
QLabel *results_lbl;
QTreeView *resultsBrowser;
QStandardItemModel *SearchListModel;
SearchListDelegate *SearchDelegate;
public:
SearchTab(SearchEngine *parent);
~SearchTab();
bool loadColWidthResultsList();
QLabel * getCurrentLabel();
QStandardItemModel * getCurrentSearchListModel();
QTreeView * getCurrentTreeView();
void setRowColor(int row, QString color);
QHeaderView* header() const;
protected slots:
void sortSearchList(int index);
void sortSearchListInt(int index, Qt::SortOrder sortOrder);
void sortSearchListString(int index, Qt::SortOrder sortOrder);
};
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -114,6 +114,9 @@ class bittorrent : public QObject {
public slots:
QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false);
QTorrentHandle addMagnetUri(QString magnet_uri, bool resumed=false);
void importOldTorrents();
void applyFormerAttributeFiles(QTorrentHandle h);
void importOldTempData(QString torrent_path);
void loadSessionState();
void saveSessionState();
void downloadFromUrl(QString url);
@@ -133,7 +136,6 @@ class bittorrent : public QObject {
void enableIPFilter(QString filter);
void disableIPFilter();
void setQueueingEnabled(bool enable);
void saveTorrentSpeedLimits(QString hash);
void loadTorrentSpeedLimits(QString hash);
void handleDownloadFailure(QString url, QString reason);
void loadWebSeeds(QString fileHash);

View File

@@ -166,10 +166,10 @@ void createtorrent::on_createButton_clicked(){
return;
}
QStringList trackers = allItems(trackers_list);
if(!trackers.size()){
/*if(!trackers.size()){
QMessageBox::critical(0, tr("No tracker path set"), tr("Please set at least one tracker"));
return;
}
}*/
QString destination = QFileDialog::getSaveFileName(this, tr("Select destination torrent file"), QDir::homePath(), tr("Torrent Files")+QString::fromUtf8(" (*.torrent)"));
if(!destination.isEmpty()) {
if(!destination.endsWith(QString::fromUtf8(".torrent")))

View File

@@ -141,6 +141,7 @@ void subDownloadThread::run(){
qDebug("Downloading %s", url.toLocal8Bit().data());
if(!abort)
res = curl_easy_perform(curl);
qDebug("done downloading %s", url.toLocal8Bit().data());
/* always cleanup */
curl_easy_cleanup(curl);
fclose(f);
@@ -151,6 +152,7 @@ void subDownloadThread::run(){
} else {
emit downloadFinishedST(this, url, filePath);
}
qDebug("%s Raised the signal", url.toLocal8Bit().data());
} else {
std::cerr << "Could not initialize CURL" << "\n";
}
@@ -213,6 +215,7 @@ void downloadThread::propagateDownloadedFile(subDownloadThread* st, QString url,
Q_ASSERT(index != -1);
subThreads.removeAt(index);
mutex.unlock();
qDebug("Deleting subthread");
delete st;
emit downloadFinished(url, path);
mutex.lock();
@@ -220,6 +223,7 @@ void downloadThread::propagateDownloadedFile(subDownloadThread* st, QString url,
condition.wakeOne();
}
mutex.unlock();
qDebug("Out of propagateDownloadedFile");
}
void downloadThread::propagateDownloadFailure(subDownloadThread* st, QString url, QString reason){

View File

@@ -85,6 +85,7 @@
<file>Icons/oxygen/encrypted.png</file>
<file>Icons/oxygen/edit_clear.png</file>
<file>Icons/oxygen/download.png</file>
<file>Icons/oxygen/application-x-kgetlist-no.png</file>
<file>Icons/oxygen/gear.png</file>
<file>Icons/oxygen/remove.png</file>
<file>Icons/oxygen/browse.png</file>
@@ -101,6 +102,7 @@
<file>Icons/oxygen/connection.png</file>
<file>Icons/oxygen/bug.png</file>
<file>Icons/oxygen/list-add.png</file>
<file>Icons/oxygen/application-x-kgetlist.png</file>
<file>Icons/oxygen/folder.png</file>
<file>Icons/oxygen/edit-cut.png</file>
<file>Icons/oxygen/unsubscribe.png</file>

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More