Signed-off-by: Fabian Ebner <[email protected]>
---
 src/Makefile                |   1 +
 src/node/APTRepositories.js | 131 ++++++++++++++++++++++++++++++++++++
 2 files changed, 132 insertions(+)
 create mode 100644 src/node/APTRepositories.js

diff --git a/src/Makefile b/src/Makefile
index fbc2627..b2e9495 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -54,6 +54,7 @@ JSSRC=                                        \
        window/DiskSmart.js             \
        window/ZFSDetail.js             \
        node/APT.js                     \
+       node/APTRepositories.js         \
        node/NetworkEdit.js             \
        node/NetworkView.js             \
        node/DNSEdit.js                 \
diff --git a/src/node/APTRepositories.js b/src/node/APTRepositories.js
new file mode 100644
index 0000000..5982306
--- /dev/null
+++ b/src/node/APTRepositories.js
@@ -0,0 +1,131 @@
+Ext.define('apt-repolist', {
+    extend: 'Ext.data.Model',
+    fields: [
+       'path',
+       'number',
+       {
+           name: "filetype",
+           convert: function(value, record) {
+               let path = record.data.path;
+               if (value || !path) {
+                   return value;
+               }
+               let match = path.match(/^.+\.(.+)/);
+               if (!match) {
+                   throw "got invalid path";
+               }
+               return match[1];
+           },
+       },
+       'enabled',
+       'comment',
+       'Types',
+       'URIs',
+       'Suites',
+       'Components',
+       'Options',
+    ],
+});
+
+Ext.define('Proxmox.node.APTRepositories', {
+    extend: 'Ext.grid.GridPanel',
+
+    xtype: 'proxmoxNodeAPTRepositories',
+
+    sortableColumns: false,
+
+    columns: [
+       {
+           header: gettext('Enabled'),
+           dataIndex: 'enabled',
+           renderer: Proxmox.Utils.format_enabled_toggle,
+           width: 90,
+       },
+       {
+           header: gettext('Types'),
+           dataIndex: 'Types',
+           width: 100,
+       },
+       {
+           header: gettext('URIs'),
+           dataIndex: 'URIs',
+           width: 350,
+       },
+       {
+           header: gettext('Suites'),
+           dataIndex: 'Suites',
+           width: 130,
+       },
+       {
+           header: gettext('Components'),
+           dataIndex: 'Components',
+           width: 170,
+       },
+       {
+           header: gettext('Options'),
+           dataIndex: 'Options',
+           renderer: function(options, cell, record) {
+               let filetype = record.data.filetype;
+               let text = '';
+               for (let [key, value] of Object.entries(options)) {
+                   if (filetype === 'list') {
+                       text += `${key}=${value} `;
+                   } else if (filetype === 'sources') {
+                       text += `${key}: ${value}\n`;
+                   } else {
+                       throw "unkown file type";
+                   }
+               }
+               return text;
+           },
+           flex: 1,
+       },
+       {
+           header: gettext('Comment'),
+           dataIndex: 'comment',
+           flex: 1,
+       },
+    ],
+
+    initComponent: function() {
+       let me = this;
+
+       if (!me.nodename) {
+           throw "no node name specified";
+       }
+
+       let store = Ext.create('Ext.data.Store', {
+           model: 'apt-repolist',
+           groupField: 'path',
+           proxy: {
+               type: 'proxmox',
+               url: "/api2/json/nodes/" + me.nodename + "/apt/repositories",
+           },
+           sorters: [
+               {
+                   property: 'number',
+                   direction: 'ASC',
+               },
+           ],
+       });
+
+       let groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
+           groupHeaderTpl: '{[ "File: " + values.name ]} ({rows.length} ' +
+               'repositor{[values.rows.length > 1 ? "ies" : "y"]})',
+           enableGroupingMenu: false,
+       });
+
+       let sm = Ext.create('Ext.selection.RowModel', {});
+
+       Ext.apply(me, {
+           store: store,
+           selModel: sm,
+           features: [groupingFeature],
+       });
+
+       Proxmox.Utils.monStoreErrors(me, store, true);
+       store.load();
+
+       me.callParent();
+    },
+});
-- 
2.20.1



_______________________________________________
pve-devel mailing list
[email protected]
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to