diff --git a/README.md b/README.md index 25caa57..400560b 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,13 @@ - [x] Informative GUI with easy sharing options - [x] Downloading from an info hash or magnet URI - [x] Downloading from a .torrent file (Coming Soon) -- [x] Seeding files (Single file only for the moment) +- [x] Seeding files (Single/multiple files) - [ ] Seeding CORS-enabled remote files (Coming Soon) - [x] Download/Upload speed per torrent - [x] Download/Upload speed of client (All torrents) -- [ ] Removing torrents from the client (Coming Soon) -- [ ] Pause torrent (Coming Soon) -- [ ] Selecting/Deselecting files (Coming Soon) +- [x] Removing torrents from the client +- [x] Pause/Resume torrent +- [x] Selecting/Deselecting files (Coming Soon) - [x] Client Debugging - [ ] Use custom trackers/rtcConfig diff --git a/app.coffee b/app.coffee index 66652a7..0705c2a 100644 --- a/app.coffee +++ b/app.coffee @@ -32,11 +32,11 @@ rtcConfig = { client = new WebTorrent {rtcConfig: rtcConfig} -dbg = (string, torrent, color) -> +dbg = (string, item, color) -> color = if color? then color else '#333333' if window.localStorage.getItem('debug')? - if torrent? && torrent.name - console.debug '%cβTorrent:torrent:' + torrent.name + ' (' + torrent.infoHash + ') %c' + string, 'color: #33C3F0', 'color: ' + color + if item? && item.name + console.debug '%cβTorrent:' + (if item.infoHash? then 'torrent ' else 'torrent ' + item._torrent.name + ':file ') + item.name + (if item.infoHash? then ' (' + item.infoHash + ')' else '') + ' %c' + string, 'color: #33C3F0', 'color: ' + color return else console.debug '%cβTorrent:client %c' + string, 'color: #33C3F0', 'color: ' + color @@ -73,7 +73,7 @@ app.controller 'bTorrentCtrl', ['$scope','$http','$log','$location', 'ngNotify', $scope.gridOptions = columnDefs: $scope.columns - data: $scope.client.validTorrents + data: $scope.client.torrents enableColumnResizing: true enableColumnMenus: false enableRowSelection: true @@ -96,11 +96,17 @@ app.controller 'bTorrentCtrl', ['$scope','$http','$log','$location', 'ngNotify', else $scope.selectedTorrent = row.entity - $scope.seedFile = (file) -> - if file? - dbg 'Seeding file ' + file.name + $scope.seedFiles = (files) -> + if files? + if files.length == 1 + dbg 'Seeding file ' + files[0].name + else + dbg 'Seeding ' + files.length + ' files' + name = prompt('Please name your torrent', 'My Awesome Torrent') || 'My Awesome Torrent' + opts.name = name $scope.client.processing = true - $scope.client.seed file, opts, $scope.onSeed + $scope.client.seed files, opts, $scope.onSeed + delete opts.name return $scope.openTorrentFile = (file) -> @@ -124,11 +130,20 @@ app.controller 'bTorrentCtrl', ['$scope','$http','$log','$location', 'ngNotify', return $scope.destroyedTorrent = (err) -> - $scope.client.processing = false if err throw err - dbg 'Destroyed torrent' + dbg 'Destroyed torrent', $scope.selectedTorrent + $scope.selectedTorrent = null + $scope.client.processing = false return + + $scope.changePriority = (file) -> + if file.priority == '-1' + dbg 'Deselected', file + file.deselect() + else + dbg 'Selected ', file + file.select() $scope.onTorrent = (torrent, isSeed) -> torrent.safeTorrentFileURL = torrent.torrentFileURL @@ -146,7 +161,8 @@ app.controller 'bTorrentCtrl', ['$scope','$http','$log','$location', 'ngNotify', throw err if isSeed dbg 'Started seeding', torrent - $scope.client.validTorrents.push torrent + if $scope.client.validTorrents.indexOf(torrent) == -1 + $scope.client.validTorrents.push torrent if !($scope.selectedTorrent?) $scope.selectedTorrent = torrent $scope.client.processing = false diff --git a/index.jade b/index.jade index 4fac09e..7b16bc4 100644 --- a/index.jade +++ b/index.jade @@ -8,7 +8,7 @@ html(ng-app='bTorrent', lang='en') meta(name='keywords', content='βTorrent, btorrent, client, webtorrent, browser, torrent, stream, bittorrent') meta(name='author', content='Diego Rodríguez Baquero - DiegoRBaquero') meta(name='viewport', content='width=device-width, initial-scale=1') - script(src='https://cdn.jsdelivr.net/g/webtorrent@0.63,momentjs@2.10,angularjs@1.4,angular.ui-grid@3.0,angular.ng-notify@0.7,angular.file-upload@10.1') + script(src='https://cdn.jsdelivr.net/g/webtorrent@0.66,momentjs@2.10,angularjs@1.4,angular.ui-grid@3.0,angular.ng-notify@0.7,angular.file-upload@10.1') link(rel='stylesheet', href='https://cdn.jsdelivr.net/g/normalize@3.0,skeleton@2.0,angular.ng-notify@0.7(ng-notify.min.css)') link(rel='stylesheet', href='https://cdn.jsdelivr.net/fontawesome/4.5/css/font-awesome.min.css') link(rel='stylesheet', href='https://cdn.jsdelivr.net/angular.ui-grid/3.0.7/ui-grid.min.css') @@ -17,7 +17,7 @@ html(ng-app='bTorrent', lang='en') header h1 | βTorrent - span.version v0.8.1 + span.version v0.9.0 .container .row .four.columns @@ -31,13 +31,24 @@ html(ng-app='bTorrent', lang='en') i.fa.fa-folder-open | Open torrent file .three.columns.u-pull-right - button.u-pull-right.button-primary(type='file', ngf-select='seedFile($file)') + button.u-pull-right.button-primary(ngf-select='seedFiles($files)', multiple='') i.fa.fa-upload - | Seed a file + | Seed files .row.grid(ui-grid='gridOptions', ui-grid-resize-columns, ui-grid-selection) .row(ng-if="selectedTorrent") .six.columns(style='overflow: auto') - h5 {{selectedTorrent.name}} + h5 {{selectedTorrent.name}} + button(ng-if='!selectedTorrent.swarm.paused', ng-click='selectedTorrent.pause()') + i.fa.fa-pause + | Pause + | + button(ng-if='selectedTorrent.swarm.paused', ng-click='selectedTorrent.resume()') + i.fa.fa-play + | Resume + | + button.button-danger(ng-click='client.remove(selectedTorrent.infoHash, destroyedTorrent)') + i.fa.fa-times + | Remove h6 Share ul li @@ -56,12 +67,18 @@ html(ng-app='bTorrent', lang='en') tr th Name th Size + th Priority tbody tr.files(ng-repeat='file in selectedTorrent.files') td(ng-hide='file.done') {{file.name}} td(ng-show='file.done') a(ng-href='{{file.url}}', download='{{file.name}}', target='_self', ng-show='file.done') {{file.name}} - td {{file.length | pbytes}} + td {{file.length | pbytes}} + td + select.no-margin(name='{{file.name}}Priority', ng-model='file.priority', ng-init='file.priority = "0"', ng-change='changePriority(file)') + option(value='1') High Priority + option(value='0' selected='') Low Priority + option(value='-1') Don't download .center strong Client Stats: | ↓ {{client.downloadSpeed() | pbytes}}/s · diff --git a/style.sass b/style.sass index b82a95f..7f133d7 100644 --- a/style.sass +++ b/style.sass @@ -33,6 +33,9 @@ footer .download-button margin-left: 10px +.no-margin + margin: 0px + .spinner position: absolute top: 30% @@ -50,4 +53,26 @@ footer top: 50% margin-top: -100px font-size: 200px - transform: translateY(-50%) \ No newline at end of file + transform: translateY(-50%) + +.button.button-danger, +button.button-danger, +input[type="submit"].button-danger, +input[type="reset"].button-danger, +input[type="button"].button-danger + color: #FFF + background-color: #D9534F + border-color: #D9534F +.button.button-danger:hover, +button.button-danger:hover, +input[type="submit"].button-danger:hover, +input[type="reset"].button-danger:hover, +input[type="button"].button-danger:hover, +.button.button-danger:focus, +button.button-danger:focus, +input[type="submit"].button-danger:focus, +input[type="reset"].button-danger:focus, +input[type="button"].button-danger:focus + color: #FFF + background-color: #C43E3A + border-color: #C43E3A \ No newline at end of file