diff --git a/src/vorta/assets/UI/archivetab.ui b/src/vorta/assets/UI/archivetab.ui
index 3e3b0b4c5..6fc6d586b 100644
--- a/src/vorta/assets/UI/archivetab.ui
+++ b/src/vorta/assets/UI/archivetab.ui
@@ -142,9 +142,6 @@
false
-
- true
-
false
@@ -173,6 +170,11 @@
Name
+
+
+ Trigger
+
+
-
diff --git a/src/vorta/assets/icons/user.svg b/src/vorta/assets/icons/user.svg
new file mode 100644
index 000000000..0a751e335
--- /dev/null
+++ b/src/vorta/assets/icons/user.svg
@@ -0,0 +1 @@
+
diff --git a/src/vorta/borg/create.py b/src/vorta/borg/create.py
index 2e7b91965..69dc8b3f1 100644
--- a/src/vorta/borg/create.py
+++ b/src/vorta/borg/create.py
@@ -28,6 +28,7 @@ def process_result(self, result):
'repo': result['params']['repo_id'],
'duration': result['data']['archive']['duration'],
'size': result['data']['archive']['stats']['deduplicated_size'],
+ 'trigger': result['params'].get('category', 'user'),
},
)
new_archive.save()
diff --git a/src/vorta/store/connection.py b/src/vorta/store/connection.py
index 21e6ec258..dcddcd88d 100644
--- a/src/vorta/store/connection.py
+++ b/src/vorta/store/connection.py
@@ -21,7 +21,7 @@
)
from .settings import get_misc_settings
-SCHEMA_VERSION = 20
+SCHEMA_VERSION = 21
@signals.post_save(sender=SettingsModel)
diff --git a/src/vorta/store/migrations.py b/src/vorta/store/migrations.py
index 160addc87..cf4ddd5a7 100644
--- a/src/vorta/store/migrations.py
+++ b/src/vorta/store/migrations.py
@@ -228,6 +228,17 @@ def run_migrations(current_schema, db_connection):
migrator.add_column(SettingsModel._meta.table_name, 'tooltip', pw.CharField(default='')),
)
+ if current_schema.version < 21:
+ _apply_schema_update(
+ current_schema,
+ 21,
+ migrator.add_column(
+ ArchiveModel._meta.table_name,
+ 'trigger',
+ pw.CharField(null=True),
+ ),
+ )
+
def _apply_schema_update(current_schema, version_after, *operations):
with DB.atomic():
diff --git a/src/vorta/store/models.py b/src/vorta/store/models.py
index f0c32938a..bda3cfd95 100644
--- a/src/vorta/store/models.py
+++ b/src/vorta/store/models.py
@@ -132,6 +132,7 @@ class ArchiveModel(BaseModel):
time = pw.DateTimeField()
duration = pw.FloatField(null=True)
size = pw.IntegerField(null=True)
+ trigger = pw.CharField(null=True)
def formatted_time(self):
return
diff --git a/src/vorta/views/archive_tab.py b/src/vorta/views/archive_tab.py
index f5b92c8ee..71d74bb43 100644
--- a/src/vorta/views/archive_tab.py
+++ b/src/vorta/views/archive_tab.py
@@ -14,6 +14,7 @@
QLayout,
QMenu,
QMessageBox,
+ QStyledItemDelegate,
QTableView,
QTableWidgetItem,
QWidget,
@@ -57,6 +58,13 @@
SIZE_DECIMAL_DIGITS = 1
+# from https://stackoverflow.com/questions/63177587/pyqt-tableview-align-icons-to-center
+class IconDelegate(QStyledItemDelegate):
+ def initStyleOption(self, option, index):
+ super().initStyleOption(option, index)
+ option.decorationSize = option.rect.size() - QtCore.QSize(0, 10)
+
+
class ArchiveTab(ArchiveTabBase, ArchiveTabUI, BackupProfileMixin):
prune_intervals = ['hour', 'day', 'week', 'month', 'year']
@@ -83,7 +91,10 @@ def __init__(self, parent=None, app=None):
header.setSectionResizeMode(2, QHeaderView.ResizeMode.ResizeToContents)
header.setSectionResizeMode(3, QHeaderView.ResizeMode.Interactive)
header.setSectionResizeMode(4, QHeaderView.ResizeMode.Stretch)
- header.setStretchLastSection(True)
+ header.setSectionResizeMode(5, QHeaderView.ResizeMode.ResizeToContents)
+
+ delegate = IconDelegate(self.archiveTable)
+ self.archiveTable.setItemDelegateForColumn(5, delegate)
if sys.platform != 'darwin':
self._set_status('') # Set platform-specific hints.
@@ -255,6 +266,12 @@ def populate_from_profile(self):
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())]
+ # if no archive's name can be found in self.mount_points, then hide the mount point column
+ if not any(a.name in self.mount_points for a in archives):
+ self.archiveTable.hideColumn(3)
+ else:
+ self.archiveTable.showColumn(3)
+
sorting = self.archiveTable.isSortingEnabled()
self.archiveTable.setSortingEnabled(False)
best_unit = find_best_unit_for_sizes((a.size for a in archives), precision=SIZE_DECIMAL_DIGITS)
@@ -280,6 +297,16 @@ def populate_from_profile(self):
self.archiveTable.setItem(row, 4, QTableWidgetItem(archive.name))
+ if archive.trigger == 'scheduled':
+ item = QTableWidgetItem(get_colored_icon('clock-o'), '')
+ item.setToolTip(self.tr('Scheduled'))
+ self.archiveTable.setItem(row, 5, item)
+ elif archive.trigger == 'user':
+ item = QTableWidgetItem(get_colored_icon('user'), '')
+ item.setToolTip(self.tr('User initiated'))
+ item.setTextAlignment(Qt.AlignmentFlag.AlignRight)
+ self.archiveTable.setItem(row, 5, item)
+
self.archiveTable.setRowCount(len(archives))
self.archiveTable.setSortingEnabled(sorting)
item = self.archiveTable.item(0, 0)