virtui-manager 1.3.0__py3-none-any.whl → 1.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: virtui-manager
3
- Version: 1.3.0
3
+ Version: 1.5.0
4
4
  Summary: Terminal-based interface to manage virtual machines using libvirt
5
5
  Home-page: https://aginies.github.io/virtui-manager/
6
6
  Author: Antoine Ginies
@@ -1,39 +1,42 @@
1
- virtui_manager-1.3.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1
+ virtui_manager-1.5.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
2
2
  vmanager/__init__.py,sha256=-gTpOgkPAOtbLwxz-U9i2uVtFW1SB9JhBguViXnQPJ8,15
3
3
  vmanager/config.py,sha256=OBMWtXBTnmws1ITjQ7D_C0LVMxzvGaRH8nZOlW9cbqk,3102
4
4
  vmanager/connection_manager.py,sha256=osk0EHJ0ua2wnDOu-9faK8fMd7s9TGsI6OtgxLAMTCI,12984
5
- vmanager/constants.py,sha256=sFfQYqU1BmkYnFghzV4hlJFlV9rw0ijGHEgUkgHnlu8,48134
5
+ vmanager/constants.py,sha256=iynQh2ya31P0QMEdoUAVELtgCfZDx3p1mPYe-DWPfs0,48791
6
6
  vmanager/dialog.css,sha256=HhYqGy0U-R6Efig3JbyEmHJWiceL1Rh_hzpSaDewJro,11753
7
7
  vmanager/events.py,sha256=yvjcYHMoDnnDKsMjfweZYnu0-U7lxQlB2uuIbtK5FeY,1556
8
8
  vmanager/firmware_manager.py,sha256=bnjBnbT3iT-glKL0p6J14wbAcRIntksze8YnzgKmXNg,3481
9
- vmanager/i18n.py,sha256=-43SASKyq806Nkh4ITSq9wxLVbPxh4-YA-2NqeqeWEw,749
9
+ vmanager/gui_wrapper.py,sha256=olRqksAZr-mysAS3r-RGti9mkU1LNdVBQm346suPrJ8,3034
10
+ vmanager/i18n.py,sha256=a_3YCc5c4hDaj_oVCNB2u2W5Go7fzoNNXfuwyeFxva8,747
10
11
  vmanager/libvirt_error_handler.py,sha256=aDumo2yNv9_rsbWjYtglt0ixQx8T2WTvgdEF8Uuanqw,1797
11
12
  vmanager/libvirt_utils.py,sha256=eJML4YcmSxIUJWMi4_fzzG8nnCq97WH_Y5CEaLB35CY,20366
12
13
  vmanager/network_manager.py,sha256=0dlh9D-p4LlEfuiQnyd3s3lxhU1GjO4x89sCKVA3fzE,8748
13
14
  vmanager/remote_viewer.py,sha256=evFvp7ilKPuTf-YA4jCGMgO6dzdhbL1iea1lzETwWeU,89495
14
15
  vmanager/remote_viewer_gtk4.py,sha256=KIyejYq_PgmSL6yAUOnnloqpaIWdkYIPdoP6CmMaTOo,45994
15
16
  vmanager/storage_manager.py,sha256=MewZBTyBGUtKrVQpXH-DrQpr9CPIFi7VLE-8avrE8jw,46773
16
- vmanager/utils.py,sha256=67nGl_xInp-D3bvm80lU9v4nwZe3wGDJu2T4ZUU7g0U,18515
17
+ vmanager/utils.py,sha256=9MM7_jyAiY4vDljIYWwVK8Kqtyxwk-NKK90D_dY0P4A,18985
17
18
  vmanager/virtui_dev.py,sha256=M2pJEZRNApqezkj4RdEJR9neEdc_7HV3KInVGy9QgiQ,3118
18
- vmanager/vm_actions.py,sha256=8P8VKwaCN95NfDHdxijbQYc-BvDvUF2js6wdnpajrRU,117611
19
+ vmanager/vm_actions.py,sha256=xDP3KTHsyavSttp7UrcV36_13aCpMXTqYvBLW1UChuM,118436
19
20
  vmanager/vm_cache.py,sha256=dxNj1TrkIAI8NW8SZj0QsfhHkjCrylQ5rgcvPN2zDnQ,1181
20
- vmanager/vm_migration.py,sha256=x0lpjAS8P_Q90nkyGA5BnR9UMrECaCy_9xvpiy4HRsM,16077
21
+ vmanager/vm_migration.py,sha256=lg3m_nuHLNZuxBA91WRewZFYls8ZaP4XzPikzz_aqMo,16148
21
22
  vmanager/vm_provisioner.py,sha256=ZOlwHQzsa1Ur90wWtFl8oBUTfozT9wjURV6Yk1O6H84,46090
22
23
  vmanager/vm_queries.py,sha256=4yife9RymBqYR0Jk3NHJ7VYIQ0R5qdzb70OurlXDhtM,52776
23
24
  vmanager/vm_service.py,sha256=W_j4u5-I0ZujSho6ecC5NEapX5N4lzSWn8lR0ocr2RM,70819
24
- vmanager/vmanager.css,sha256=qGSM62YQr-tKgF2zH9CnZiD6c6OtPGkMElUFA2njILY,14839
25
- vmanager/vmanager.py,sha256=ZWIs2kAkxynKoSOGxKNJNZha1bWGBqoXdCgIPT0v5gs,79870
25
+ vmanager/vmanager.css,sha256=7HzaivsJ2lRMvbYP3QSqG2ZR8gwFdJr2hMBvjSu4WdI,14853
26
+ vmanager/vmanager.py,sha256=6eq5UiIwApWzG3HeBx2BGpYlVKueht_82TnpqcQN3FU,83037
26
27
  vmanager/vmanager_cmd.py,sha256=IQtCozK6OvdjpIgL_umuv8LkHNk-W9DsQtsxpZ5fQRk,32161
27
- vmanager/vmcard.css,sha256=IIAzRH4GMaTD9K4qb9MEvATMgyfWdJb1bTHGm0Ebee4,3087
28
- vmanager/vmcard.py,sha256=eaSKn1oISEDCgBvRISspBrQwPYMNuMkY36kFltkUIL0,98564
28
+ vmanager/vmcard.css,sha256=rHrDZftmwfnM5wjhZhLjSajnI3PRf8TW-ub3rG-Pqrg,3367
29
+ vmanager/vmcard.py,sha256=No9LsCCL08IK1cBQAHxOq4VG0l6pbwB4ntnvxKxXq6M,104016
29
30
  vmanager/vmcard_pool.py,sha256=IgZZIHNNt3t8CAiKalpQpEF69KY8MZ-csuBrh71AmKM,3514
30
- vmanager/webconsole_manager.py,sha256=wg1rAuVx1g9ZQMT4Q8KbZFiI6SGXQHfiJS-t-Q6EOCw,28878
31
+ vmanager/webconsole_manager.py,sha256=3Coafu6SiPWMLB3fMTKvXPHQK3zVCkiUrYaQ-5Ka0sM,28910
31
32
  vmanager/wrapper.py,sha256=6aIz7YRN__Cl78XEBxqQ6g7tWMZ9S_8Nq6XaOtaivTM,1265
32
- vmanager/locales/virtui-manager.pot,sha256=mdnuxSiP6h5-4uFtR7eWBBl_Z7dJYIderYmGMdpJEWg,54627
33
- vmanager/locales/de/LC_MESSAGES/virtui-manager.po,sha256=qR8_hhvCGFOKvsjkkbGA5CGBnusHMgw9UyeMo79hZKM,55811
34
- vmanager/locales/fr/LC_MESSAGES/virtui-manager.mo,sha256=5ejEBaAQM7amprHd0P9fV1B-qRGem_IK6ToFbmdSC_E,62773
35
- vmanager/locales/fr/LC_MESSAGES/virtui-manager.po,sha256=6_IhexAVuGchdvTTKfX4V4tIuGrYulKjFytsBNg4kJs,82562
36
- vmanager/locales/it/LC_MESSAGES/virtui-manager.po,sha256=NyjKLNEcg32JXPGM2EioP-3FlpH_2jDEcKs9UGYpoD4,55652
33
+ vmanager/locale/virtui-manager.pot,sha256=-aTS8Pci22WF3wnnjP5JhVNY5h07Pz6wcHvj4brUZww,55619
34
+ vmanager/locale/de/LC_MESSAGES/virtui-manager.mo,sha256=x48qmzKkXVWPlDdICY8ElZ2QxIEXPRFzZmCd4TK7SSg,63051
35
+ vmanager/locale/de/LC_MESSAGES/virtui-manager.po,sha256=oNOV-POIwDSD27psnJ2gYe2QNRtaynAEa2GVsBP2AZE,82660
36
+ vmanager/locale/fr/LC_MESSAGES/virtui-manager.mo,sha256=FIdsflho_pCD_qBqc4U4JdPpp_y4IghhH-6QgjzHd6M,64260
37
+ vmanager/locale/fr/LC_MESSAGES/virtui-manager.po,sha256=3IvnbIFEAAtNZMTbgaxXh8B4YK0_wAWsbUK1N4fRGmo,83899
38
+ vmanager/locale/it/LC_MESSAGES/virtui-manager.mo,sha256=Z0A8fuXZUHuZo-qJ3dMJMvzOvdUjv-f3wJ5tV0DnsKU,62432
39
+ vmanager/locale/it/LC_MESSAGES/virtui-manager.po,sha256=qJ0OKZHLd7XaBxna_vVTBGGrmrywNVncVH0AHPARDNs,80727
37
40
  vmanager/modals/__init__.py,sha256=Os1P7i7chUJCxGu4LOC_LJaJgpVOiOhxYzWNoW9Ubuw,36
38
41
  vmanager/modals/base_modals.py,sha256=quGmI_FnoD7UVemruvYsvtz1whhJCNVr2hzQ3tl0hak,1263
39
42
  vmanager/modals/bulk_modals.py,sha256=zlH5WxVFouJBJrchVLY3uAj3nl6NWC4PvWHhNH1cDFw,3172
@@ -44,6 +47,7 @@ vmanager/modals/cpu_mem_pc_modals.py,sha256=5FhQ6iOXLFQrkk1dUtgdSNP_rFLQEjQzz4NG
44
47
  vmanager/modals/custom_migration_modal.py,sha256=Ki7lhns7PvWzd2YTxnDTFCwYCLuedgN-uMPmL7c47xw,2462
45
48
  vmanager/modals/disk_pool_modals.py,sha256=4VX68q8nUERwoXMxYvZbrMywiQcVXqGZd5ijgx06uuQ,28923
46
49
  vmanager/modals/host_dashboard_modal.py,sha256=jXaZX1EucrX19uzVwyDcsepsnbUnmXl9wC4Wi7GNQuA,7667
50
+ vmanager/modals/host_stats.py,sha256=vkxOePY3VXEDIBpC13hai-eiRZWe_ecRADI3hko2rso,7155
47
51
  vmanager/modals/howto_disk_modal.py,sha256=uhiFSUKjBEDY0CddNwwDCQkhXD-0Tyo6LFlHbdftp_U,1241
48
52
  vmanager/modals/howto_network_modal.py,sha256=wzQLJgCMu4xJAMLnCpUost9oObS9TZEFLO07JKIsw08,1263
49
53
  vmanager/modals/howto_overlay_modal.py,sha256=BJqx5icwwnSzh-AO_CSX2eAxxZA9KkUEMVdN0NG3y7Q,1276
@@ -51,14 +55,14 @@ vmanager/modals/howto_ssh_modal.py,sha256=Zf_B-9jJDiRypwBsID0VqrJubunmodWZsVORak
51
55
  vmanager/modals/howto_virtiofs_modal.py,sha256=PyvrODsKbaLDnJSfvmXIhcxgIW9jHBRUdAjv30fnaDI,1257
52
56
  vmanager/modals/input_modals.py,sha256=ULByH3ytXuIhkZ08LKH9i2YIMU4CC3uSlia-G9EN6D0,7868
53
57
  vmanager/modals/log_modal.py,sha256=X8Is4gWyrovINQfwm_7xy2rzggWTvRqdWErntkNU974,1143
54
- vmanager/modals/migration_modals.py,sha256=fHPjikJitNE60X3FpwdTJ6QnJuwPFCzIMooZfH0oHW8,20598
58
+ vmanager/modals/migration_modals.py,sha256=bX2YwWUS2lgOdr1SHVMao1xQyKYzN-PZG007wFWjMYg,20610
55
59
  vmanager/modals/network_modals.py,sha256=Uj2-dOld5Z1pn2ijV4HH0b8BL8S4I73KLvMHqDCpOCA,19275
56
60
  vmanager/modals/provisioning_modals.py,sha256=KpdJlYDUHTGjtol375KDOBCNIhSDQAmlYKmI0CEja_Q,29702
57
61
  vmanager/modals/select_server_modals.py,sha256=_p75tASi_cfCQaJwOd1w43f50HhN-emeaVIsEQnDCHo,5191
58
62
  vmanager/modals/selection_modals.py,sha256=FpQQyVYXWXidFev62llyb8T6E0uyr6Y860PvzON-0uY,6175
59
63
  vmanager/modals/server_modals.py,sha256=y5tB7MWupl30RqGztRkQw5Zcdp2Ctpan8wq3ttv8DFg,10571
60
64
  vmanager/modals/server_prefs_modals.py,sha256=72qQLYpy9_tmIO58KVunSel64BGyALnnGvQMme0mGjs,40807
61
- vmanager/modals/utils_modals.py,sha256=MOnn0_goN9oS3f7Zrg5H1fu2FzAevVQyZDXBfUOjBZ0,8807
65
+ vmanager/modals/utils_modals.py,sha256=Sy_gtucN3ZbYVfNUyLPPiEkhOu3KWycTSdrpveuHH5E,8819
62
66
  vmanager/modals/virsh_modals.py,sha256=hxVEoMg4t7l-LfM2E8vdWvpgGoWzoSw17zGsEqm8qgQ,4694
63
67
  vmanager/modals/virtiofs_modals.py,sha256=52CTX3RTUCJ6RyldNLiyjMiYBz93swz8tUIWnXOOK3w,2240
64
68
  vmanager/modals/vm_type_info_modal.py,sha256=9eWhGgJDYfNwWjKvpfHDEulypPKaH8VePZ3Wt3kvaxI,4266
@@ -66,8 +70,8 @@ vmanager/modals/vmanager_modals.py,sha256=UL2nS5ZH3ik8wEALXptNL22xMsGhime2vX73HX
66
70
  vmanager/modals/vmcard_dialog.py,sha256=NP4qVYfZC58FF0_dXiI-2Q_XqZ1wfGcya1cKnYzBZTw,18848
67
71
  vmanager/modals/vmdetails_modals.py,sha256=VcNq2NZ9JUvfNufrQc4YnbwsxzS1ZoXw91AR3KGSN9Y,151040
68
72
  vmanager/modals/xml_modals.py,sha256=8lVJFqXM42w2kzCGyVa0Xks8-EfwMLHgkU_U6aqFnLY,1712
69
- virtui_manager-1.3.0.dist-info/METADATA,sha256=qdlYUgUFAy-uldFKEUbLF7H5StXcBAb7llUbwlCeKYc,5329
70
- virtui_manager-1.3.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
71
- virtui_manager-1.3.0.dist-info/entry_points.txt,sha256=hnJHxJyDFPSNdOaxmMYikXeoJMXG2llKG-l_Ygv7ges,163
72
- virtui_manager-1.3.0.dist-info/top_level.txt,sha256=fQ1nwH-4wZrf6Rc9HEHbudVahpy3TqeuMxgaaNHevxM,9
73
- virtui_manager-1.3.0.dist-info/RECORD,,
73
+ virtui_manager-1.5.0.dist-info/METADATA,sha256=yTO_cOBEu6FoDHJCZeHfum5l8r5fqc1xQtl3Yik8KLk,5329
74
+ virtui_manager-1.5.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
75
+ virtui_manager-1.5.0.dist-info/entry_points.txt,sha256=SrZ_7U4R3gPInnJ8Ia2i6yuM7lJ1lMDcnLomIVR3jFA,202
76
+ virtui_manager-1.5.0.dist-info/top_level.txt,sha256=fQ1nwH-4wZrf6Rc9HEHbudVahpy3TqeuMxgaaNHevxM,9
77
+ virtui_manager-1.5.0.dist-info/RECORD,,
@@ -1,4 +1,5 @@
1
1
  [console_scripts]
2
+ virtui-gui = vmanager.gui_wrapper:main
2
3
  virtui-manager = vmanager.wrapper:main
3
4
  virtui-manager-cmd = vmanager.wrapper:cmd_main
4
5
  virtui-remote-viewer = vmanager.wrapper:remote_viewer_main
vmanager/constants.py CHANGED
@@ -38,7 +38,7 @@ class AppInfo:
38
38
  """Define app data"""
39
39
  name = "virtui-manager"
40
40
  namecase = "VirtUI Manager"
41
- version = "1.3.0"
41
+ version = "1.5.0"
42
42
 
43
43
  class VmAction:
44
44
  """Defines constants for VM action types."""
@@ -63,6 +63,7 @@ class ButtonLabels:
63
63
  """Constants for button labels"""
64
64
  ADD = _("Add")
65
65
  SAVE = _("Save")
66
+ HIBERNATE_VM = _("Hibernate VM")
66
67
  SAVE_CHANGES = _("Save Changes")
67
68
  CREATE_NETWORK = _("Create Network")
68
69
  INSTALL = _("Install")
@@ -76,6 +77,7 @@ class ButtonLabels:
76
77
  RESUME = _("Resume")
77
78
  CONFIGURE = _("Configure")
78
79
  WEB_CONSOLE = _("Web Console")
80
+ TEXT_CONSOLE = _("Text Console")
79
81
  CONNECT = _("Connect")
80
82
  SNAPSHOT = _("Snapshot")
81
83
  RESTORE_SNAPSHOT = _("Restore Snapshot")
@@ -144,8 +146,8 @@ class ButtonLabels:
144
146
  BULK_CMD = _("[b][#FFD700]B[/][/]ulk CMD")
145
147
  PATTERN_SELECT = _("[b][#FFD700]P[/][/]attern Sel")
146
148
  CONFIG = _("Config")
147
- PREVIOUS_PAGE = _("Previous Page")
148
- NEXT_PAGE = _("Next Page")
149
+ PREVIOUS_PAGE = _("\\[Previous Page]")
150
+ NEXT_PAGE = _("\\[Next Page]")
149
151
  YES = _("Yes")
150
152
  NO = _("No")
151
153
  CANCEL = _("Cancel")
@@ -205,9 +207,7 @@ class TabTitles:
205
207
  """Constants for tab titles"""
206
208
  MANAGE = _("Manage")
207
209
  OTHER = _("Other")
208
- SNAPSHOT = _("Snapshot")
209
- SNAPSHOTS = _("Snapshots")
210
- OVERLAY = _("Overlay")
210
+ STATE_MANAGEMENT = _("State Management")
211
211
  SNAP_OVER_UPDATE = _("Updating Data...")
212
212
  ACTIVE_ALLOCATION = _("Active Allocation")
213
213
  TOTAL_ALLOCATION = _("Total Allocation")
@@ -406,6 +406,10 @@ class StaticText:
406
406
  TOPOLOGY = _("Topology:")
407
407
  WAITING_TO_START_COLLECTION = _("Waiting to start collection...")
408
408
  COLLECTING_VM_INFO = _("Collecting VM info: {current}/{total}")
409
+ EDIT_VIRTIOFS_MOUNT = _("Edit VirtIO-FS")
410
+ LATEST_SNAPSHOT = _("Latest Snapshot:")
411
+ NO_SNAPSHOTS_CREATED = _("No Snapshots created")
412
+ SELECT_OVERLAY_DISCARD = _("Select overlay disk to discard:")
409
413
 
410
414
  class SparklineLabels:
411
415
  """Constants for sparkline labels"""
@@ -684,11 +688,13 @@ class DialogMessages:
684
688
  CONFIRM_REMOVE_USB_DEVICE_TEMPLATE = _("Are you sure you want to remove USB device '{description}'?")
685
689
  CONFIRM_REMOVE_SCSI_CONTROLLER_TEMPLATE = _("Are you sure you want to remove SCSI controller '{model}' at index '{index}'?")
686
690
  CONFIRM_REMOVE_VIRTIOFS_TEMPLATE = _("Are you sure you want to remove VirtIO-FS mount '{target_path}'?")
691
+ CONFIRM_DISCARD_CHANGES = _("Are you sure you want to discard changes in '{target_disk}' and revert t o its backing file? This action cannot be undone.")
692
+ CONFIRM_MERGE_CHANGES = _("Are you sure you want to merge changes from '{target_disk}' into its backing file?")
687
693
 
688
694
 
689
695
  class QuickMessages:
690
696
  """Constants for quick messages"""
691
- REMOTE_VIEWER_SELECTED = _("The remove viewer {viewer} has been selected.")
697
+ REMOTE_VIEWER_SELECTED = _("The remote viewer {viewer} has been selected.")
692
698
  VM_DATA_LOADED = _("VM data loaded. Displaying VMs...")
693
699
  FILTER_RUNNING_VMS = _("Filter: Running VMs")
694
700
  FILTER_ALL_VMS = _("Filter: All VMs")
@@ -750,6 +756,7 @@ class SuccessMessages:
750
756
  NETWORK_UPDATED_TEMPLATE = _("Network {name} updated successfully.")
751
757
  VM_NAME_SANITIZED_TEMPLATE = _("VM name sanitized: '{original}' -> '{sanitized}'")
752
758
  VM_STARTED_TEMPLATE = _("VM '{vm_name}' started.")
759
+ VM_SAVED_TEMPLATE = _("VM '{vm_name}' saved (hibernated).")
753
760
  REMOTE_VIEWER_STARTED_TEMPLATE = _("Remote viewer {viewer} started for {vm_name}")
754
761
  VM_DEFINED_CONFIGURE_TEMPLATE = _("VM '{vm_name}' defined. Please configure and start it.")
755
762
  VM_CREATED_SUCCESSFULLY_TEMPLATE = _("VM '{vm_name}' created successfully!")
@@ -811,3 +818,4 @@ class ProgressMessages:
811
818
  CONNECTING_TO_SERVER = _("Connecting to [b]{uri}[/b]...")
812
819
  CONFIG_UPDATED_REFRESHING_VM_LIST = _("Configuration updated. Refreshing VM list...")
813
820
  LOADING_VM_DATA_FROM_REMOTE_SERVERS = _("Loading VM data from remote server(s)...")
821
+ COMMITTING_CHANGES_FOR = _("Committing changes for {name}...")
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env python3
2
+ import sys
3
+ import os
4
+ import gi
5
+
6
+ # Require GTK 3.0 and Vte 2.91
7
+ try:
8
+ gi.require_version('Gtk', '3.0')
9
+ gi.require_version('Vte', '2.91')
10
+ except ValueError as e:
11
+ print(f"Error: Missing required libraries. {e}")
12
+ sys.exit(1)
13
+
14
+ from gi.repository import Gtk, Vte, GLib, Pango
15
+
16
+ class VirtuiWrapper(Gtk.Window):
17
+ def __init__(self):
18
+ super().__init__(title="Virtui Manager Console")
19
+
20
+ self.set_default_size(1200, 1024)
21
+ self.terminal = Vte.Terminal()
22
+ self.terminal.set_size(92, 34)
23
+
24
+ font_desc = Pango.FontDescription("Monospace 12")
25
+ self.terminal.set_font(font_desc)
26
+
27
+ self.terminal.set_scrollback_lines(10000)
28
+
29
+ self.terminal.connect("child-exited", self.on_child_exited)
30
+
31
+ # Add terminal to a ScrolledWindow to handle scrolling
32
+ scrolled_window = Gtk.ScrolledWindow()
33
+ scrolled_window.set_hexpand(True)
34
+ scrolled_window.set_vexpand(True)
35
+ scrolled_window.add(self.terminal)
36
+
37
+ self.add(scrolled_window)
38
+
39
+ self.connect("destroy", Gtk.main_quit)
40
+ self.spawn_app()
41
+
42
+ def spawn_app(self):
43
+ # python3 -m vmanager.wrapper
44
+ cmd = [sys.executable, "-m", "vmanager.wrapper"]
45
+ env = os.environ.copy()
46
+
47
+ # Calculate src directory relative to this script
48
+ # This script is in src/vmanager/gui_wrapper.py
49
+ script_dir = os.path.dirname(os.path.realpath(__file__))
50
+ src_dir = os.path.dirname(script_dir)
51
+
52
+ current_pythonpath = env.get("PYTHONPATH", "")
53
+ if src_dir not in current_pythonpath:
54
+ env["PYTHONPATH"] = f"{src_dir}:{current_pythonpath}" if current_pythonpath else src_dir
55
+
56
+ # Convert env to list of strings "KEY=VALUE" for spawn_async
57
+ envv = [f"{k}={v}" for k, v in env.items()]
58
+
59
+ try:
60
+ # Vte.Terminal.spawn_async(pty_flags, working_directory, argv, envv, spawn_flags, child_setup, child_setup_data, timeout, cancellable, callback, user_data)
61
+ self.terminal.spawn_async(
62
+ Vte.PtyFlags.DEFAULT,
63
+ os.getcwd(), # Working directory
64
+ cmd, # Command arguments
65
+ envv, # Environment
66
+ GLib.SpawnFlags.DEFAULT,
67
+ None, # child_setup
68
+ None, # child_setup_data
69
+ -1, # timeout
70
+ None, # cancellable
71
+ None, # callback
72
+ None # user_data
73
+ )
74
+ except Exception as e:
75
+ error_msg = f"Error spawning application: {e}\n"
76
+ self.terminal.feed(error_msg.encode('utf-8'))
77
+ print(error_msg)
78
+
79
+ def on_child_exited(self, terminal, status):
80
+ print(f"Child exited with status: {status}")
81
+ Gtk.main_quit()
82
+
83
+ def main():
84
+ app = VirtuiWrapper()
85
+ app.show_all()
86
+ Gtk.main()
87
+
88
+ if __name__ == "__main__":
89
+ main()
vmanager/i18n.py CHANGED
@@ -3,9 +3,9 @@ import os
3
3
  import locale
4
4
  import logging
5
5
 
6
- # Setup path to locales
6
+ # Setup path to locale
7
7
  # This assumes the 'locales' directory is next to this file
8
- LOCALE_DIR = os.path.join(os.path.dirname(__file__), 'locales')
8
+ LOCALE_DIR = os.path.join(os.path.dirname(__file__), 'locale')
9
9
  DOMAIN = 'virtui-manager'
10
10
 
11
11
  _ = lambda s: s