diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index f8ac24560dd855db1780ba990d10957e7b32b6ce..9bcbac405afc78c7efad6a7deb26d1c3f7525e65 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -5911,14 +5911,12 @@ class DbTools: False) new_session = scoped_session_storage - pool_exists_in_db_already = new_session.query( - DbTelemetryPool - ).filter( - DbTelemetryPool.pool_name == active_pool_info.filename, - DbTelemetryPool.modification_time == active_pool_info.modification_time - ).count() > 0 + filename_in_pool = new_session.query(DbTelemetryPool).filter(DbTelemetryPool.pool_name == active_pool_info.filename) + + pool_exists_in_db_already = filename_in_pool.filter(DbTelemetryPool.modification_time == active_pool_info.modification_time).count() > 0 + if (not pool_exists_in_db_already) or force_db_import: - if force_db_import: + if force_db_import or filename_in_pool.count(): del_time = time.strftime('%s') new_session.execute( 'UPDATE tm_pool SET pool_name="---TO-BE-DELETED{}" WHERE tm_pool.pool_name="{}"'.format( @@ -5940,13 +5938,16 @@ class DbTools: _loader_thread.daemon = True _loader_thread.start() - logger.info('Loaded Pool:' + str(filename)) + logger.info('Loading Pool:' + str(filename)) + + else: + _loader_thread = None new_session.close() - logger.info('Loaded Pool:' + str(filename)) + # logger.info('Loaded Pool:' + str(filename)) - return active_pool_info + return active_pool_info, _loader_thread @staticmethod def import_dump_in_db(pool_info, loadinfo, brute=False, protocol='PUS', pecmode='warn'): @@ -6052,6 +6053,7 @@ class DbTools: # pv.Functions('_set_list_and_display_Glib_idle_add', self.active_pool_info, int(self.my_bus_name[-1]), ignore_reply=True) # GLib.idle_add(self._set_pool_list_and_display) new_session.close() + logger.info('Loaded Pool:' + str(pool_info.filename)) @staticmethod def db_bulk_insert(filename, processor, bulk_insert_size=1000, brute=False, checkcrc=True, protocol='PUS', pecmode='warn'): @@ -6134,20 +6136,12 @@ class DbTools: class LoadInfo(Gtk.Window): def __init__(self, parent=None, title="DB Loader"): - Gtk.Window.__init__(self) - - if title is None: - self.set_title('Loading data to pool...') - else: - self.set_title(title) + Gtk.Window.__init__(self, transient_for=parent, destroy_with_parent=True) - self.pmgr = parent + self.set_title(title) grid = Gtk.VBox() - # pixbuf = Gtk.gdk.pixbuf_new_from_file('pixmap/Icon_Space_weiß_en.png') - # pixbuf = pixbuf.scale_simple(100, 100, Gtk.gdk.INTERP_BILINEAR) - # logo = Gtk.image_new_from_pixbuf(pixbuf) - logo = Gtk.Image.new_from_file('pixmap/ccs_logo_2.svg') + logo = Gtk.Image.new_from_file(os.path.join(cfg.get('paths', 'ccs'), 'pixmap/ccs_logo_2.svg')) self.spinner = Gtk.Spinner() self.spinner.set_size_request(48, 48) @@ -6167,9 +6161,6 @@ class LoadInfo(Gtk.Window): self.show_all() def destroy_window(self, widget, *args): - # if is_open('poolviewer', communication['poolviewer']): - # pv = dbus_connection('poolviewer', communication['poolviewer']) - # pv.Functions('small_refresh_function') try: self.destroy() except Exception as err: diff --git a/Ccs/poolview_sql.py b/Ccs/poolview_sql.py index 5f8303d8e73a2743054ce47c6c9638291d7d777b..8bc18e569819e082ab7af2d77dc07f1f47bf3425 100644 --- a/Ccs/poolview_sql.py +++ b/Ccs/poolview_sql.py @@ -1960,7 +1960,7 @@ class TMPoolView(Gtk.Window): for pool in model: if pool[3] == filename: self.logger.info('Pool {} already loaded'.format(filename)) - return True + return pool return False def update_columns(self): @@ -2795,14 +2795,49 @@ class TMPoolView(Gtk.Window): dialog.destroy() if no_duplicates and (not force_db_import): - if self._check_pool_is_loaded(filename): + loadeditem = self._check_pool_is_loaded(filename) + if loadeditem: + self.pool_selector.set_active_iter(loadeditem.iter) return - new_pool = cfl.DbTools.sql_insert_binary_dump(filename, brute=brute, force_db_import=force_db_import, - protocol=protocol, pecmode='warn', parent=self) + new_pool, loader_thread = cfl.DbTools.sql_insert_binary_dump(filename, brute=brute, force_db_import=force_db_import, + protocol=protocol, pecmode='warn', parent=self) self._set_pool_list_and_display(new_pool) + if loader_thread is not None: + checkloader_thread = threading.Thread(target=self._db_loading_checker, args=[new_pool, loader_thread]) + checkloader_thread.daemon = True + checkloader_thread.start() + + def _db_loading_checker(self, pool_info, thread): + + try: + model = self.pool_selector.get_model() + for pool in model: + if pool[3] == pool_info.filename: + pool[1] = '[LOAD]' + + while thread.is_alive(): + time.sleep(1) + + model = self.pool_selector.get_model() + + for pool in model: + if pool[3] == pool_info.filename: + pool[1] = None + break + + if self.pool_selector.get_active_iter() == pool.iter: + self.select_pool(self.pool_selector, pool_info) + + except Exception as err: + self.logger.error(err) + model = self.pool_selector.get_model() + for pool in model: + if pool[3] == pool_info.filename: + pool[1] = 'ERR' + def pool_loader_dialog_buttons(self): ''' Small Function to set up the buttons for the Pool Loading Window @@ -3081,10 +3116,10 @@ class TMPoolView(Gtk.Window): if poolmgr: poolmgr.Functions('disconnect', pool_name) - iter = self.pool_selector.get_active_iter() + itr = self.pool_selector.get_active_iter() mod = self.pool_selector.get_model() if mod is not None: - mod[iter][1] = self.live_signal[self.active_pool_info.live] + mod[itr][1] = self.live_signal[self.active_pool_info.live] self.stop_butt.set_sensitive(False) return