]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/form/USBSelector.js
use RestProxy from widget toolkit
[pve-manager.git] / www / manager6 / form / USBSelector.js
1 Ext.define('PVE.form.USBSelector', {
2 extend: 'Proxmox.form.ComboGrid',
3 alias: ['widget.pveUSBSelector'],
4 allowBlank: false,
5 autoSelect: false,
6 displayField: 'usbid',
7 valueField: 'usbid',
8 editable: true,
9
10 getUSBValue: function() {
11 var me = this;
12 var rec = me.store.findRecord('usbid', me.value);
13 var val = 'host='+ me.value;
14 if (rec && rec.data.speed === "5000") {
15 val = 'host=' + me.value + ",usb3=1";
16 }
17 return val;
18 },
19
20 validator: function(value) {
21 var me = this;
22 if (me.type === 'device') {
23 return (/^[a-f0-9]{4}\:[a-f0-9]{4}$/i).test(value);
24 } else if (me.type === 'port') {
25 return (/^[0-9]+\-[0-9]+(\.[0-9]+)*$/).test(value);
26 }
27 return false;
28 },
29
30 initComponent: function() {
31 var me = this;
32
33 var nodename = me.pveSelNode.data.node;
34
35 if (!nodename) {
36 throw "no nodename specified";
37 }
38
39 if (me.type !== 'device' && me.type !== 'port') {
40 throw "no valid type specified";
41 }
42
43 var store = new Ext.data.Store({
44 model: 'pve-usb-' + me.type,
45 proxy: {
46 type: 'proxmox',
47 url: "/api2/json/nodes/" + nodename + "/scan/usb"
48 },
49 filters: [
50 function (item) {
51 return !!item.data.usbpath && !!item.data.prodid && item.data['class'] != 9;
52 }
53 ]
54 });
55
56 Ext.apply(me, {
57 store: store,
58 listConfig: {
59 columns: [
60 {
61 header: (me.type === 'device')?gettext('Device'):gettext('Port'),
62 sortable: true,
63 dataIndex: 'usbid',
64 width: 80
65 },
66 {
67 header: gettext('Manufacturer'),
68 sortable: true,
69 dataIndex: 'manufacturer',
70 width: 100
71 },
72 {
73 header: gettext('Product'),
74 sortable: true,
75 dataIndex: 'product',
76 flex: 1
77 },
78 {
79 header: gettext('Speed'),
80 width: 70,
81 sortable: true,
82 dataIndex: 'speed',
83 renderer: function(value) {
84 if (value === "5000") {
85 return "USB 3.0";
86 } else if (value === "480") {
87 return "USB 2.0";
88 } else {
89 return "USB 1.x";
90 }
91 }
92 }
93 ]
94 }
95 });
96
97 me.callParent();
98
99 store.load();
100 }
101
102 }, function() {
103
104 Ext.define('pve-usb-device', {
105 extend: 'Ext.data.Model',
106 fields: [
107 {
108 name: 'usbid',
109 convert: function(val, data) {
110 if (val) {
111 return val;
112 }
113 return data.get('vendid') + ':' + data.get('prodid');
114 }
115 },
116 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
117 { name: 'port' , type: 'number' },
118 { name: 'level' , type: 'number' },
119 { name: 'class' , type: 'number' },
120 { name: 'devnum' , type: 'number' },
121 { name: 'busnum' , type: 'number' }
122 ]
123 });
124
125 Ext.define('pve-usb-port', {
126 extend: 'Ext.data.Model',
127 fields: [
128 {
129 name: 'usbid',
130 convert: function(val,data) {
131 if (val) {
132 return val;
133 }
134 return data.get('busnum') + '-' + data.get('usbpath');
135 }
136 },
137 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
138 { name: 'port' , type: 'number' },
139 { name: 'level' , type: 'number' },
140 { name: 'class' , type: 'number' },
141 { name: 'devnum' , type: 'number' },
142 { name: 'busnum' , type: 'number' }
143 ]
144 });
145 });