Background threads for tab and application closing

This commit is contained in:
BasioMeusPuga
2017-11-14 11:51:56 +05:30
parent 1a59653011
commit b08d15deec
2 changed files with 35 additions and 17 deletions

View File

@@ -63,7 +63,7 @@ import mainwindow
import database
import sorter
from widgets import LibraryToolBar, BookToolBar, Tab, LibraryDelegate
from widgets import LibraryToolBar, BookToolBar, Tab, LibraryDelegate, BackGroundTabUpdate
from library import Library
from settings import Settings
@@ -125,6 +125,9 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
self.tab_switch()
self.tabWidget.currentChanged.connect(self.tab_switch)
# Background Thread
self.thread = None
# For fullscreening purposes
self.current_contentView = None
@@ -244,7 +247,7 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
self.bookToolBar.hide()
self.libraryToolBar.show()
if self.lib_ref.proxy_model:
# Making the proxy model available doesn't affect
# memory utilization at all. Bleh.
@@ -275,10 +278,12 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
current_author + ' - ' + current_title)
def tab_close(self, tab_index):
self.database_update_position(tab_index)
temp_dir = self.tabWidget.widget(tab_index).metadata['temp_dir']
if temp_dir:
shutil.rmtree(temp_dir)
tab_metadata = self.tabWidget.widget(tab_index).metadata
self.thread = BackGroundTabUpdate(
self.database_path, tab_metadata)
self.thread.start()
self.tabWidget.removeTab(tab_index)
def set_toc_position(self, event=None):
@@ -314,13 +319,6 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
current_tab.contentView.verticalScrollBar().setValue(0)
current_tab.contentView.setHtml(required_content)
def database_update_position(self, tab_index):
tab_metadata = self.tabWidget.widget(tab_index).metadata
file_hash = tab_metadata['hash']
position = tab_metadata['position']
database.DatabaseFunctions(
self.database_path).modify_position(file_hash, position)
def set_fullscreen(self):
current_tab = self.tabWidget.currentIndex()
current_tab_widget = self.tabWidget.widget(current_tab)
@@ -458,14 +456,15 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
font, font_size, foreground, background))
def closeEvent(self, event=None):
# All tabs must be iterated upon here
for i in range(1, self.tabWidget.count()):
self.database_update_position(i)
tab_metadata = self.tabWidget.widget(i).metadata
if tab_metadata['temp_dir']:
shutil.rmtree(tab_metadata['temp_dir'])
self.thread = BackGroundTabUpdate(
self.database_path, tab_metadata)
self.thread.start()
self.thread.finished.connect(QtWidgets.qApp.exit)
self.temp_dir.remove()
Settings(self).save_settings()
QtWidgets.qApp.exit()

View File

@@ -1,9 +1,11 @@
#!usr/bin/env python3
import os
import shutil
from PyQt5 import QtWidgets, QtGui, QtCore
import pie_chart
import database
class BookToolBar(QtWidgets.QToolBar):
@@ -372,3 +374,20 @@ class MyAbsModel(QtGui.QStandardItemModel, QtCore.QAbstractItemModel):
def __init__(self, parent=None):
# We're using this to be able to access the match() method
super(MyAbsModel, self).__init__(parent)
class BackGroundTabUpdate(QtCore.QThread):
def __init__(self, database_path, tab_metadata, parent=None):
super(BackGroundTabUpdate, self).__init__(parent)
self.database_path = database_path
self.tab_metadata = tab_metadata
def run(self):
file_hash = self.tab_metadata['hash']
position = self.tab_metadata['position']
database.DatabaseFunctions(
self.database_path).modify_position(file_hash, position)
temp_dir = self.tab_metadata['temp_dir']
if temp_dir:
shutil.rmtree(temp_dir)