def init_repo_stats(self): repo = self.profile().repo if repo is not None: self.sizeCompressed.setText(pretty_bytes(repo.unique_csize)) self.sizeDeduplicated.setText(pretty_bytes(repo.unique_size)) self.sizeOriginal.setText(pretty_bytes(repo.total_size)) self.repoEncryption.setText(str(repo.encryption)) else: self.sizeCompressed.setText('') self.sizeDeduplicated.setText('') self.sizeOriginal.setText('') self.repoEncryption.setText('') self.repo_changed.emit()
def data(self, column): if column == 1: return self.itemData[column] elif column == 2: return pretty_bytes(self.itemData[column]) elif column == 0: return self.itemData[column]
def populate_from_profile(self): """Populate archive list and prune settings from profile.""" profile = self.profile() if profile.repo is not None: self.mount_points = get_mount_points(profile.repo.url) self.toolBox.setItemText( 0, self.tr('Archives for %s') % profile.repo.url) archives = [ s for s in profile.repo.archives.select().order_by( ArchiveModel.time.desc()) ] for row, archive in enumerate(archives): self.archiveTable.insertRow(row) formatted_time = archive.time.strftime('%Y-%m-%d %H:%M') self.archiveTable.setItem(row, 0, QTableWidgetItem(formatted_time)) self.archiveTable.setItem(row, 1, SizeItem(pretty_bytes(archive.size))) if archive.duration is not None: formatted_duration = str( timedelta(seconds=round(archive.duration))) else: formatted_duration = '' self.archiveTable.setItem(row, 2, QTableWidgetItem(formatted_duration)) mount_point = self.mount_points.get(archive.name) if mount_point is not None: item = QTableWidgetItem(mount_point) self.archiveTable.setItem(row, 3, item) self.archiveTable.setItem(row, 4, QTableWidgetItem(archive.name)) self.archiveTable.setRowCount(len(archives)) item = self.archiveTable.item(0, 0) self.archiveTable.scrollToItem(item) self._toggle_all_buttons(enabled=True) else: self.mount_points = {} self.archiveTable.setRowCount(0) self.toolBox.setItemText(0, self.tr('Archives')) self._toggle_all_buttons(enabled=False) self.archiveNameTemplate.setText(profile.new_archive_name) self.prunePrefixTemplate.setText(profile.prune_prefix) # Populate pruning options from database profile = self.profile() for i in self.prune_intervals: getattr(self, f'prune_{i}').setValue(getattr(profile, f'prune_{i}')) getattr(self, f'prune_{i}').valueChanged.connect(self.save_prune_setting) self.prune_keep_within.setText(profile.prune_keep_within) self.prune_keep_within.editingFinished.connect(self.save_prune_setting)
def data(self, column): if column == 1: return self.itemData[column] # .strftime('%Y-%m-%dT%H:%M') elif column == 2: return pretty_bytes(self.itemData[column]) elif column == 0: return self.itemData[column]
def populate_from_profile(self): profile = self.profile() if profile.repo is not None: self.currentRepoLabel.setText(profile.repo.url) archives = [ s for s in profile.repo.archives.select().order_by( ArchiveModel.time.desc()) ] for row, archive in enumerate(archives): self.archiveTable.insertRow(row) formatted_time = archive.time.strftime('%Y-%m-%d %H:%M') self.archiveTable.setItem(row, 0, QTableWidgetItem(formatted_time)) self.archiveTable.setItem( row, 1, QTableWidgetItem(pretty_bytes(archive.size))) if archive.duration is not None: formatted_duration = str( timedelta(seconds=round(archive.duration))) else: formatted_duration = '' self.archiveTable.setItem(row, 2, QTableWidgetItem(formatted_duration)) self.archiveTable.setItem(row, 3, QTableWidgetItem(archive.name)) self.archiveTable.setRowCount(len(archives)) self._toggle_all_buttons(enabled=True) else: self.archiveTable.setRowCount(0) self.currentRepoLabel.setText('N/A') self._toggle_all_buttons(enabled=False)
def set_path_info(self, path, data_size, files_count): items = self.sourceFilesWidget.findItems(path, QtCore.Qt.MatchExactly) # Conversion int->str->int needed because QT limits int to 32-bit data_size = int(data_size) files_count = int(files_count) for item in items: db_item = SourceFileModel.get(dir=path, profile=self.profile()) if QFileInfo(path).isDir(): self.sourceFilesWidget.item(item.row(), SourceColumn.Type).setText( self.tr("Folder")) self.sourceFilesWidget.item(item.row(), SourceColumn.FilesCount).setText( format(files_count)) db_item.path_isdir = True else: self.sourceFilesWidget.item(item.row(), SourceColumn.Type).setText( self.tr("File")) # No files count, if entry itself is a file self.sourceFilesWidget.item( item.row(), SourceColumn.FilesCount).setText("") db_item.path_isdir = False self.sourceFilesWidget.item(item.row(), SourceColumn.Size).setText( pretty_bytes(data_size)) db_item.dir_size = data_size db_item.dir_files_count = files_count db_item.save() # Remove thread from list when it's done for thrd in self.updateThreads: if thrd.objectName() == path: self.updateThreads.remove(thrd)
def populate_from_profile(self): """Populate archive list and prune settings from profile.""" profile = self.profile() if profile.repo is not None: self.toolBox.setItemText(0, f'Archives for {profile.repo.url}') archives = [ s for s in profile.repo.archives.select().order_by( ArchiveModel.time.desc()) ] for row, archive in enumerate(archives): self.archiveTable.insertRow(row) formatted_time = archive.time.strftime('%Y-%m-%d %H:%M') self.archiveTable.setItem(row, 0, QTableWidgetItem(formatted_time)) self.archiveTable.setItem( row, 1, QTableWidgetItem(pretty_bytes(archive.size))) if archive.duration is not None: formatted_duration = str( timedelta(seconds=round(archive.duration))) else: formatted_duration = '' self.archiveTable.setItem(row, 2, QTableWidgetItem(formatted_duration)) self.archiveTable.setItem(row, 3, QTableWidgetItem(archive.name)) self.archiveTable.setRowCount(len(archives)) item = self.archiveTable.item(0, 0) self.archiveTable.scrollToItem(item) self._toggle_all_buttons(enabled=True) else: self.archiveTable.setRowCount(0) self.toolBox.setItemText(0, 'Archives') self._toggle_all_buttons(enabled=False) self.archiveNameTemplate.setText(profile.new_archive_name) self.prunePrefixTemplate.setText(profile.prune_prefix)
def add_source_to_table(self, source, update_data=None): if update_data is None: update_data = SettingsModel.get(key="get_srcpath_datasize").value index_row = self.sourceFilesWidget.rowCount() self.sourceFilesWidget.insertRow(index_row) # Insert all items on current row, add tooltip containg the path name new_item = QTableWidgetItem(source.dir) new_item.setToolTip(source.dir) self.sourceFilesWidget.setItem(index_row, SourceColumn.Path, new_item) self.sourceFilesWidget.setItem(index_row, SourceColumn.Type, QTableWidgetItem("")) self.sourceFilesWidget.setItem(index_row, SourceColumn.Size, SizeItem("")) self.sourceFilesWidget.setItem(index_row, SourceColumn.FilesCount, FilesCount("")) if update_data: self.update_path_info(index_row) else: # Use cached data from DB if source.dir_size > -1: self.sourceFilesWidget.item(index_row, SourceColumn.Size).setText( pretty_bytes(source.dir_size)) if source.path_isdir: self.sourceFilesWidget.item(index_row, SourceColumn.Type).setText( self.tr("Folder")) self.sourceFilesWidget.item( index_row, SourceColumn.FilesCount).setText( format(source.dir_files_count)) else: self.sourceFilesWidget.item(index_row, SourceColumn.Type).setText( self.tr("File"))