diff --git a/deluge/ui/web/js/Deluge.Add.File.js b/deluge/ui/web/js/Deluge.Add.File.js index d5810b09f..77fb0d0ec 100644 --- a/deluge/ui/web/js/Deluge.Add.File.js +++ b/deluge/ui/web/js/Deluge.Add.File.js @@ -65,14 +65,21 @@ Ext.deluge.add.FileWindow = Ext.extend(Ext.deluge.add.Window, { onAdd: function(field, e) { if (this.form.getForm().isValid()) { + this.torrentId = this.createTorrentId(); this.form.getForm().submit({ url: '/upload', waitMsg: _('Uploading your torrent...'), success: this.onUploadSuccess, scope: this }); + var name = this.form.getForm().findField('torrentFile').value; + this.fireEvent('beforeadd', this.torrentId, name); } - this.fireEvent('beforeadd', null); + }, + + onGotInfo: function(info, obj, response, request) { + info['filename'] = request.options.filename; + this.fireEvent('add', this.torrentId, info); }, onUploadSuccess: function(fp, upload) { @@ -84,10 +91,5 @@ Ext.deluge.add.FileWindow = Ext.extend(Ext.deluge.add.Window, { scope: this, filename: filename }); - }, - - onGotInfo: function(info, obj, response, request) { - info['filename'] = request.options.filename; - this.fireEvent('add', info); } }); \ No newline at end of file diff --git a/deluge/ui/web/js/Deluge.Add.Url.js b/deluge/ui/web/js/Deluge.Add.Url.js index 1e054b09f..8bde2b02a 100644 --- a/deluge/ui/web/js/Deluge.Add.Url.js +++ b/deluge/ui/web/js/Deluge.Add.Url.js @@ -70,26 +70,29 @@ Ext.deluge.add.UrlWindow = Ext.extend(Ext.deluge.add.Window, { var field = this.form.items.get('url'); var url = field.getValue(); + var torrentId = this.createTorrentId(); Deluge.Client.web.download_torrent_from_url(url, { success: this.onDownload, - scope: this + scope: this, + torrentId: torrentId }); this.hide(); - this.fireEvent('beforeadd', url); + this.fireEvent('beforeadd', torrentId, url); }, - onDownload: function(filename) { + onDownload: function(filename, obj, resp, req) { this.form.items.get('url').setValue(''); Deluge.Client.web.get_torrent_info(filename, { success: this.onGotInfo, scope: this, - filename: filename + filename: filename, + torrentId: req.options.torrentId }); }, onGotInfo: function(info, obj, response, request) { info['filename'] = request.options.filename; - this.fireEvent('add', info); + this.fireEvent('add', request.options.torrentId, info); } }); \ No newline at end of file diff --git a/deluge/ui/web/js/Deluge.Add.js b/deluge/ui/web/js/Deluge.Add.js index e67b0c4e8..1b6968106 100644 --- a/deluge/ui/web/js/Deluge.Add.js +++ b/deluge/ui/web/js/Deluge.Add.js @@ -62,6 +62,30 @@ Ext.deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { new Ext.tree.TreeSorter(this.files, { folderSort: true }); + + this.form = this.add({ + xtype: 'form', + labelWidth: 1, + frame: false, + title: _('Options'), + bodyStyle: 'padding: 5px;', + border: false, + + + items: [{ + xtype: 'fieldset', + title: _('Download Location'), + border: false, + defaultType: 'textfield', + labelWidth: 1, + items: [{ + fieldLabel: '', + labelSeperator: '', + name: 'download_location', + width: 330 + }] + }] + }); }, clear: function() { @@ -89,13 +113,13 @@ Ext.deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { 'prioritize_first_last_pieces' ] Deluge.Client.core.get_config_values(keys, { - onSuccess: function(config) { + success: function(config) { this.defaults = config; - $each(config, function(value, key) { + for (var key in config) { var field = this.form.findField(key); if (!field) return; - field.setValue(value); - }, this); + field.setValue(config[key]); + } var field = this.form.findField('compact_allocation'); if (config['compact_allocation']) { field.items.get('compact_allocation_true').setValue(true); @@ -104,7 +128,8 @@ Ext.deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { field.items.get('compact_allocation_false').setValue(true); field.items.get('compact_allocation_true').setValue(false); } - }.bindWithEvent(this) + }, + scope: this }); } }); @@ -116,6 +141,10 @@ Ext.deluge.add.Window = Ext.extend(Ext.Window, { 'beforeadd', 'add' ); + }, + + createTorrentId: function() { + return new Date().getTime(); } }); @@ -145,19 +174,30 @@ Ext.deluge.add.AddWindow = Ext.extend(Ext.deluge.add.Window, { this.addButton(_('Cancel'), this.onCancel, this); this.addButton(_('Add'), this.onAdd, this); + function torrentRenderer(value, p, r) { + if (r.data['infohash']) { + return String.format('
{0}
', value); + } else { + return String.format('
{0}
', value); + } + } + this.grid = this.add({ xtype: 'grid', region: 'center', store: new Ext.data.SimpleStore({ - fields: [{name: 'torrent', mapping: 1}], + fields: [ + {name: 'info_hash', mapping: 1}, + {name: 'text', mapping: 2} + ], id: 0 }), columns: [{ id: 'torrent', width: 150, sortable: true, - renderer: fplain, - dataIndex: 'torrent' + renderer: torrentRenderer, + dataIndex: 'text' }], stripeRows: true, selModel: new Ext.grid.RowSelectionModel({ @@ -249,11 +289,11 @@ Ext.deluge.add.AddWindow = Ext.extend(Ext.deluge.add.Window, { delete this.torrents[torrent.id]; this.grid.getStore().remove(torrent); - this.clearFiles(); + this.options.clear(); }, onSelect: function(selModel, rowIndex, record) { - var torrentInfo = this.torrents[record.id]; + var torrentInfo = this.torrents[record.get('info_hash')]; function walk(files, parent) { for (var file in files) { @@ -299,10 +339,12 @@ Ext.deluge.add.AddWindow = Ext.extend(Ext.deluge.add.Window, { } }, - onTorrentBeforeAdd: function(temptext) { + onTorrentBeforeAdd: function(torrentId, text) { + var store = this.grid.getStore(); + store.loadData([[torrentId, null, text]], true); }, - onTorrentAdd: function(info) { + onTorrentAdd: function(torrentId, info) { if (!info) { Ext.MessageBox.show({ title: _('Error'), @@ -314,7 +356,11 @@ Ext.deluge.add.AddWindow = Ext.extend(Ext.deluge.add.Window, { }); return; } - this.grid.getStore().loadData([[info['info_hash'], info['name']]], true); + + var r = this.grid.getStore().getById(torrentId); + r.set('info_hash', info['info_hash']); + r.set('text', info['name']); + this.grid.getStore().commitChanges(); this.torrents[info['info_hash']] = info; }, @@ -322,332 +368,4 @@ Ext.deluge.add.AddWindow = Ext.extend(Ext.deluge.add.Window, { this.url.show(); } }); -Deluge.Add = new Ext.deluge.add.AddWindow(); - -/*Deluge.Add = { - onFile: function() { - this.File.Window.show(); - }, - - onOptionsRender: function(panel) { - panel.layout = new Ext.layout.FormLayout(); - panel.layout.setContainer(panel); - panel.doLayout(); - this.form = panel.getForm(); - this.getDefaults(); - }, - - onRender: function(window) { - new Ext.tree.TreeSorter(this.Files, { - folderSort: true - }); - }, - - onSelect: function(selModel, rowIndex, record) { - var torrentInfo = Deluge.Add.torrents[record.id]; - - function walk(files, parent) { - $each(files, function(item, file) { - if ($type(item) == 'object') { - var child = new Ext.tree.TreeNode({ - text: file - }); - walk(item, child); - parent.appendChild(child); - } else { - parent.appendChild(new Ext.tree.TreeNode({ - filename: file, - text: file, // this needs to be here for sorting reasons - size: fsize(item[0]), - leaf: true, - checked: item[1], - iconCls: 'x-deluge-file', - uiProvider: Ext.tree.ColumnNodeUI - })); - } - }); - } - - this.clearFiles(); - - var root = this.Files.getRootNode(); - walk(torrentInfo['files_tree'], root); - root.firstChild.expand(); - }, - - onTorrentAdded: function(info, filename) { - if (!info) { - Ext.MessageBox.show({ - title: _('Error'), - msg: _('Not a valid torrent'), - buttons: Ext.MessageBox.OK, - modal: false, - icon: Ext.MessageBox.ERROR, - iconCls: 'x-deluge-icon-error' - }); - return; - } - info['filename'] = filename; - this.Store.loadData([[info['info_hash'], info['name']]], true); - this.torrents[info['info_hash']] = info; - }, - - onUrl: function(button, event) { - this.Url.Window.show(); - }, - - onRemove: function() { - var selection = this.Grid.getSelectionModel(); - if (!selection.hasSelection()) return; - var torrent = selection.getSelected(); - - delete this.torrents[torrent.id]; - this.Store.remove(torrent); - this.clearFiles(); - } -} - -Deluge.Add.Options = new Ext.TabPanel({ - region: 'south', - margins: '5 5 5 5', - activeTab: 0, - height: 220, - items: [{ - id: 'addFilesTab', - title: _('Files'), - items: [Deluge.Add.Files] - },{ - id: 'addOptionsTab', - title: _('Options'), - layout: 'fit', - items: [new Ext.form.FormPanel({ - id: 'addOptionsForm', - bodyStyle: 'padding: 5px;', - border: false, - items: [{ - xtype: 'fieldset', - style: 'padding: 0px; padding-top: 5px;', - title: _('Download Location'), - border: false, - autoHeight: true, - border: false, - labelWidth: 1, - items: [{ - layout: 'column', - border: false, - items: [{ - xtype: 'textfield', - id: 'download_location', - fieldLabel: '', - labelSeparator: '', - width: 330 - }, { - border: false, - style: 'padding-left: 5px;', - items: [{ - xtype: 'button', - text: _('Browse') + '...', - disabled: true - }] - }] - }] - }, { - layout: 'column', - border: false, - defaults: { - border: false - }, - items: [{ - xtype: 'fieldset', - bodyStyle: 'margin-left: 5px; margin-right:5px;', - title: _('Allocation'), - autoHeight: true, - border: false, - labelWidth: 1, - width: 100, - items: [new Ext.form.RadioGroup({ - id: 'compact_allocation', - name: 'compact_allocation', - columns: 1, - labelSeparator: '', - items: [{ - boxLabel: _('Full'), - inputValue: 'false', - id: 'compact_allocation_false', - name: 'compact_allocation', - checked: true - },{ - boxLabel: _('Compact'), - inputValue: 'true', - id: 'compact_allocation_true', - name: 'compact_allocation' - }] - })] - }, { - xtype: 'fieldset', - title: _('Bandwidth'), - layout: 'form', - autoHeight: true, - defaultType: 'uxspinner', - labelWidth: 100, - items: [{ - id: 'max_download_speed_per_torrent', - fieldLabel: _('Max Down Speed'), - width: 60, - value: -1, - strategy: new Ext.ux.form.Spinner.NumberStrategy({ - minValue: -1, - maxValue: 99999, - incrementValue: 1 - }) - }, { - id: 'max_upload_speed_per_torrent', - fieldLabel: _('Max Up Speed'), - width: 60, - value: -1, - strategy: new Ext.ux.form.Spinner.NumberStrategy({ - minValue: -1, - maxValue: 99999, - incrementValue: 1 - }) - }, { - id: 'max_connections_per_torrent', - fieldLabel: _('Max Connections'), - width: 60, - value: -1, - strategy: new Ext.ux.form.Spinner.NumberStrategy({ - minValue: -1, - maxValue: 99999, - incrementValue: 1 - }) - }, { - id: 'max_upload_slots_per_torrent', - fieldLabel: _('Max Upload Slots'), - colspan: 2, - width: 60, - value: -1, - strategy: new Ext.ux.form.Spinner.NumberStrategy({ - minValue: -1, - maxValue: 99999, - incrementValue: 1 - }) - }] - }, { - xtype: 'fieldset', - title: _('General'), - autoHeight: true, - border: false, - labelWidth: 10, - defaultType: 'checkbox', - items: [{ - fieldLabel: '', - labelSeparator: '', - boxLabel: _('Add In Paused State'), - id: 'add_paused' - }, { - fieldLabel: '', - labelSeparator: '', - boxLabel: _('Prioritize First/Last Piece'), - id: 'prioritize_first_last_pieces' - }, { - xtype: 'button', - text: _('Apply to All'), - style: 'margin-left: 20px; margin-top: 5px;' - }, { - xtype: 'button', - text: _('Revert to Defaults'), - style: 'margin-left: 20px; margin-top: 5px;' - }] - }] - }], - listeners: { - 'render': { - fn: Deluge.Add.onOptionsRender, - scope: Deluge.Add - } - } - })] - }] -}); - -Deluge.Add.File = { - onAdd: function() { - if (this.form.getForm().isValid()) { - this.form.getForm().submit({ - url: '/upload', - waitMsg: _('Uploading your torrent...'), - success: this.onUploadSuccess.bindWithEvent(this) - }); - } - }, - - onUploadSuccess: function(fp, upload) { - this.Window.hide(); - var filename = upload.result.toString(); - this.form.items.get('torrentFile').setValue(''); - Deluge.Client.web.get_torrent_info(filename, { - onSuccess: Deluge.Add.onTorrentAdded.bindWithEvent(Deluge.Add, filename) - }); - } -} - -Deluge.Add.File.form = new Ext.form.FormPanel({ - fileUpload: true, - id: 'fileAddForm', - baseCls: 'x-plain', - labelWidth: 55, - autoHeight: true, - items: [{ - xtype: 'fileuploadfield', - id: 'torrentFile', - emptyText: _('Select a torrent'), - fieldLabel: _('File'), - name: 'file', - buttonCfg: { - text: _('Browse') + '...' - } - }] -}); - -Deluge.Add.File.Window = new Ext.Window({ - layout: 'fit', - width: 350, - height: 115, - bodyStyle: 'padding: 10px 5px;', - buttonAlign: 'center', - closeAction: 'hide', - modal: true, - plain: true, - title: _('Add from File'), - iconCls: 'x-deluge-add-file', - items: Deluge.Add.File.form, - buttons: [{ - text: _('Add'), - handler: Deluge.Add.File.onAdd, - scope: Deluge.Add.File - }] -}); - -Deluge.Add.Url = { - onAdd: function(field, e) { - if (field.id == 'url' && e.getKey() != e.ENTER) return; - - var field = this.form.items.get('url'); - var url = field.getValue(); - - Deluge.Client.web.download_torrent_from_url(url, { - onSuccess: this.onDownload.bindWithEvent(this) - }); - this.Window.hide(); - }, - - onDownload: function(filename) { - this.form.items.get('url').setValue(''); - Deluge.Client.web.get_torrent_info(filename, { - onSuccess: Deluge.Add.onTorrentAdded.bindWithEvent(Deluge.Add, filename) - }); - } -} - -Deluge.Add.Url.form = ; -*/ \ No newline at end of file +Deluge.Add = new Ext.deluge.add.AddWindow(); \ No newline at end of file