Ticket #5949: mod.diff

File mod.diff, 4.5 KB (added by julien-c, 4 years ago)

Patch.transmission.js

  • web/javascript/transmission.js

     
    519519        },
    520520
    521521        dragenter: function(ev) {
    522                 if (ev.dataTransfer && ev.dataTransfer.types) {
    523                         var types = ["text/uri-list", "text/plain"];
    524                         for (var i = 0; i < types.length; ++i) {
    525                                 // it would be better to look at the links here;
    526                                 // sadly, with Firefox, trying would throw.
    527                                 if (ev.dataTransfer.types.contains(types[i])) {
    528                                         ev.stopPropagation();
    529                                         ev.preventDefault();
    530                                         ev.dropEffect = "copy";
    531                                         return false;
    532                                 }
    533                         }
    534                 }
    535                 else if (ev.dataTransfer) {
    536                         ev.dataTransfer.dropEffect = "none";
    537                 }
    538                 return true;
     522                ev.dataTransfer.dropEffect = "copy";
     523                ev.preventDefault();
     524                ev.stopPropagation();
     525                return false;
    539526        },
    540527
    541528        drop: function(ev)
    542529        {
    543530                var i, uri, uris=null,
    544                     types = ["text/uri-list", "text/plain"],
     531                    textTypes = ["text/uri-list", "text/plain"],
    545532                    paused = this.shouldAddedTorrentsStart();
    546533
    547                 if (!ev.dataTransfer || !ev.dataTransfer.types)
     534                if (!ev.dataTransfer || !ev.dataTransfer.files)
    548535                        return true;
    549 
    550                 for (i=0; !uris && i<types.length; ++i)
    551                         if (ev.dataTransfer.types.contains(types[i]))
    552                                 uris = ev.dataTransfer.getData(types[i]).split("\n");
    553 
    554                 for (i=0; uri=uris[i]; ++i) {
    555                         if (/^#/.test(uri)) // lines which start with "#" are comments
    556                                 continue;
    557                         if (/^[a-z-]+:/i.test(uri)) // close enough to a url
    558                                 this.remote.addTorrentByUrl(uri, paused);
     536               
     537                var files = ev.dataTransfer.files;
     538                for (var f = 0; f < files.length; f++) {
     539                        var file = files[f];
     540                       
     541                        if (file.type === 'application/x-bittorrent') {
     542                                this.addTorrentByMetainfo(file, paused);
     543                        }
     544                        else if (textTypes.indexOf(file.type) !== -1) {
     545                                var thatRemote = this.remote;
     546                                var reader = new FileReader();
     547                                reader.onload = function(e) {
     548                                        uris = e.target.result.split("\n");
     549                                        for (i=0; uri=uris[i]; ++i) {
     550                                                if (/^#/.test(uri)) // lines which start with "#" are comments
     551                                                        continue;
     552                                                if (/^[a-z-]+:/i.test(uri)) // close enough to a url
     553                                                        thatRemote.addTorrentByUrl(uri, paused);
     554                                        }
     555                                };
     556                                reader.readAsText(file);
     557                        }
     558                       
    559559                }
    560560
    561561                ev.preventDefault();
     
    909909        {
    910910                return this.prefsDialog.shouldAddedTorrentsStart();
    911911        },
    912 
     912       
     913       
     914        addTorrentByMetainfo: function(file, paused, destination) {
     915                var reader = new FileReader();
     916                var thatRemote = this.remote;
     917                reader.onload = function(e) {
     918                        var contents = e.target.result;
     919                        var key = "base64,"
     920                        var index = contents.indexOf(key);
     921                        if (index > -1) {
     922                                var metainfo = contents.substring(index + key.length);
     923                                var o = {
     924                                        'method': 'torrent-add',
     925                                        arguments: {
     926                                                'paused': paused,
     927                                                'download-dir': destination,
     928                                                'metainfo': metainfo
     929                                        }
     930                                };
     931                                thatRemote.sendRequest(o, function(response) {
     932                                        if (response.result != 'success')
     933                                                alert ('Error adding "' + file.name + '": ' + response.result);
     934                                });
     935                        }
     936                }
     937                reader.readAsDataURL(file);
     938        },
     939       
    913940        /*
    914941         * Select a torrent file to upload
    915942         */
     
    939966                else
    940967                {
    941968                        var paused = !startInput.is(':checked'),
    942                             destination = folderInput.val(),
    943                             remote = this.remote;
     969                            destination = folderInput.val();
    944970
    945                         jQuery.each (fileInput[0].files, function(i,file) {
    946                                 var reader = new FileReader();
    947                                 reader.onload = function(e) {
    948                                         var contents = e.target.result;
    949                                         var key = "base64,"
    950                                         var index = contents.indexOf (key);
    951                                         if (index > -1) {
    952                                                 var metainfo = contents.substring (index + key.length);
    953                                                 var o = {
    954                                                         'method': 'torrent-add',
    955                                                         arguments: {
    956                                                                 'paused': paused,
    957                                                                 'download-dir': destination,
    958                                                                 'metainfo': metainfo
    959                                                         }
    960                                                 };
    961                                                 remote.sendRequest (o, function(response) {
    962                                                         if (response.result != 'success')
    963                                                                 alert ('Error adding "' + file.name + '": ' + response.result);
    964                                                 });
    965                                         }
    966                                 }
    967                                 reader.readAsDataURL (file);
    968                         });
     971                        jQuery.each(fileInput[0].files, $.proxy(function(i, file) {
     972                                this.addTorrentByMetainfo(file, paused, destination);
     973                        }, this));
    969974
    970975                        var url = $('#torrent_upload_url').val();
    971976                        if (url != '') {
     
    979984                                                'filename': url
    980985                                        }
    981986                                };
    982                                 remote.sendRequest (o, function(response) {
     987                                this.remote.sendRequest (o, function(response) {
    983988                                        if (response.result != 'success')
    984989                                                alert ('Error adding "' + url + '": ' + response.result);
    985990                                });