diff --git a/src/searchengine.cpp b/src/searchengine.cpp
index 84a4014a8..f027e7c82 100644
--- a/src/searchengine.cpp
+++ b/src/searchengine.cpp
@@ -334,7 +334,8 @@ void SearchEngine::readSearchOutput(){
foreach(const QByteArray &line, lines_list){
appendSearchResult(QString::fromUtf8(line));
}
- currentSearchTab->getCurrentLabel()->setText(tr("Results")+QString::fromUtf8(" (")+misc::toQString(nb_search_results)+QString::fromUtf8("):"));
+ if(currentSearchTab)
+ currentSearchTab->getCurrentLabel()->setText(tr("Results")+QString::fromUtf8(" (")+misc::toQString(nb_search_results)+QString::fromUtf8("):"));
}
void SearchEngine::downloadFinished(int exitcode, QProcess::ExitStatus) {
@@ -436,6 +437,9 @@ void SearchEngine::updateNova() {
// Search can be finished for 3 reasons :
// Error | Stopped by user | Finished normally
void SearchEngine::searchFinished(int exitcode,QProcess::ExitStatus){
+ if(searchTimeout->isActive()) {
+ searchTimeout->stop();
+ }
QSettings settings("qBittorrent", "qBittorrent");
bool useNotificationBalloons = settings.value("Preferences/General/NotificationBaloons", true).toBool();
if(useNotificationBalloons && parent->getCurrentTabIndex() != TAB_SEARCH) {
@@ -457,22 +461,30 @@ void SearchEngine::searchFinished(int exitcode,QProcess::ExitStatus){
if(currentSearchTab)
currentSearchTab->getCurrentLabel()->setText(tr("Results", "i.e: Search results")+QString::fromUtf8(" (")+misc::toQString(nb_search_results)+QString::fromUtf8("):"));
search_button->setText("Search");
- if(searchTimeout->isActive()) {
- searchTimeout->stop();
- }
}
// SLOT to append one line to search results list
// Line is in the following form :
// file url | file name | file size | nb seeds | nb leechers | Search engine url
void SearchEngine::appendSearchResult(QString line){
+ if(!currentSearchTab) {
+ if(searchProcess->state() != QProcess::NotRunning){
+ searchProcess->terminate();
+ }
+ if(searchTimeout->isActive()) {
+ searchTimeout->stop();
+ }
+ search_stopped = true;
+ return;
+ }
QStringList parts = line.split("|");
if(parts.size() != 6){
return;
}
-
+ Q_ASSERT(currentSearchTab);
// Add item to search result list
QStandardItemModel* cur_model = currentSearchTab->getCurrentSearchListModel();
+ Q_ASSERT(cur_model);
int row = cur_model->rowCount();
cur_model->insertRow(row);
@@ -513,7 +525,7 @@ void SearchEngine::closeTab(int index) {
search_stopped = true;
currentSearchTab = 0;
}
- delete all_tab.takeAt(tabWidget->currentIndex());
+ delete all_tab.takeAt(index);
if(!all_tab.size()) {
download_button->setEnabled(false);
}
diff --git a/src/searchengine.h b/src/searchengine.h
index 61ce10d86..47a4add24 100644
--- a/src/searchengine.h
+++ b/src/searchengine.h
@@ -63,11 +63,11 @@ private:
Bittorrent *BTSession;
SupportedEngines *supported_engines;
QTimer *searchTimeout;
- SearchTab *currentSearchTab;
+ QPointer currentSearchTab;
#ifndef QT_4_5
QPushButton *closeTab_button;
#endif
- QList all_tab; // To store all tabs
+ QList > all_tab; // To store all tabs
const SearchCategories full_cat_names;
GUI *parent;