added in a local webtorrent client we will call "βeacon"

This commit is contained in:
Keep Creating Online
2025-01-27 08:54:21 -05:00
parent 1c932a122d
commit 7669061e92
11 changed files with 563 additions and 458 deletions

View File

@@ -158,12 +158,12 @@
Roadmap
</a>
<a
href="https://btorrent.xyz/"
href="torrent/torrent.html"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_self"
rel="noopener noreferrer"
>
βTorrent
βeacon
</a>
</div>
<p

View File

@@ -158,12 +158,12 @@
Roadmap
</a>
<a
href="https://btorrent.xyz/"
href="torrent/torrent.html"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_self"
rel="noopener noreferrer"
>
βTorrent
βeacon
</a>
</div>
<p

View File

@@ -421,12 +421,12 @@
Roadmap
</a>
<a
href="https://btorrent.xyz/"
href="torrent/torrent.html"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_self"
rel="noopener noreferrer"
>
βTorrent
βeacon
</a>
</div>
<p

View File

@@ -157,12 +157,12 @@
Roadmap
</a>
<a
href="https://btorrent.xyz/"
href="torrent/torrent.html"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_self"
rel="noopener noreferrer"
>
βTorrent
βeacon
</a>
</div>
<p

View File

@@ -139,12 +139,12 @@
Roadmap
</a>
<a
href="https://btorrent.xyz/"
href="torrent/torrent.html"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_self"
rel="noopener noreferrer"
>
βTorrent
βeacon
</a>
</div>
<p

432
src/torrent/bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -19,14 +19,19 @@ body {
width: 100%;
}
/* Container used in header & footer */
.container {
width: 95%;
max-width: 95%;
margin: 0 auto;
padding: 1rem;
}
/* Header styling */
.header-torrent {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 2rem;
margin-bottom: 2rem;
background-color: var(--color-bg);
margin-bottom: 2rem;
/* No extra horizontal padding so it lines up with .container */
}
.logo-container {
@@ -37,166 +42,26 @@ body {
.bitvid-logo {
height: 4rem;
width: auto;
margin-right: 1.5rem;
}
.views {
display: flex;
gap: 1rem;
}
.view-link {
color: var(--color-primary);
text-decoration: none;
transition: color 0.2s;
}
.view-link:hover {
color: var(--color-secondary);
text-decoration: underline;
/* Adjust spacing around the logo if needed */
margin-bottom: 0.5rem;
}
/* Footer styling */
.footer-torrent {
border-top: 1px solid rgba(0, 0, 0, 0.1);
padding-top: 2rem;
text-align: center;
padding-bottom: 2rem;
margin-top: 2rem;
background-color: var(--color-bg);
}
.footer-link {
text-decoration: none;
color: #6b7280;
margin: 0 0.25rem;
transition: color 0.2s;
}
.footer-link:hover {
color: var(--color-secondary);
text-decoration: underline;
}
.footer-inline-links {
display: inline-block;
margin-top: 0.5rem;
}
.ipns-text {
margin-top: 0.5rem;
font-size: 0.8rem;
color: #6b7280;
}
.ipns-link {
color: #3b82f6;
text-decoration: underline;
}
.container {
width: 95%;
max-width: 95%;
margin: 0 auto;
padding: 1rem;
}
/* Table Cells */
th,
td {
padding: 2px 15px;
max-width: 200px;
overflow: auto;
white-space: nowrap;
color: var(--color-text);
}
h2,
h3,
h4,
h5,
h6,
ul,
li {
margin-bottom: 0;
color: var(--color-text);
}
/* Spinner / Loading overlay */
.spinner {
position: absolute;
top: 30%;
left: 30%;
width: 40%;
height: 40%;
z-index: 1000;
background-color: #1e293b;
border-radius: 0.75rem;
opacity: 0.8;
text-align: center;
box-shadow: var(--shadow-md);
}
.spinner-icon {
position: relative;
top: 50%;
margin-top: -100px;
font-size: 200px;
transform: translateY(-50%);
/* If you want to override the generic footer rules, remove them or unify here:
footer {
border-top: 1px solid rgba(255, 255, 255, 0.1);
margin-top: 4rem;
padding-top: 2rem;
}
*/
/* Danger (Red) Buttons */
.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: #f43f5e;
border-color: #f43f5e;
border-radius: 0.5rem;
padding: 0.5rem 1rem;
transition: background-color 0.2s, transform 0.2s;
cursor: pointer;
}
.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 {
background-color: #dc2626;
border-color: #dc2626;
transform: translateY(-1px);
}
/* Optionally for "Open torrent file" and "Seed files" if using those classes */
.open-torrent-btn,
.seed-files-btn {
color: #bdbdbd;
background-color: #f43f5e;
border: 1px solid #f43f5e;
border-radius: 0.5rem;
padding: 0.5rem 1rem;
cursor: pointer;
transition: background-color 0.2s, transform 0.2s;
}
.open-torrent-btn:hover,
.seed-files-btn:hover {
background-color: #dc2626;
border-color: #dc2626;
transform: translateY(-1px);
}
/* Any other grid or custom layout */
.grid {
margin-bottom: 20px;
width: 100%;
height: 200px;
}
.download-button {
margin-left: 10px;
}
/* Additional styling remains unchanged... */

View File

@@ -3,20 +3,21 @@
<head>
<base href="./" />
<meta charset="UTF-8" />
<title>bitvid | Browser WebTorrent Client</title>
<title>bitvid βeacon | A Browser Based WebTorrent Client</title>
<meta
name="description"
content="bitvid uses βTorrent. βTorrent is a fully-featured Browser WebTorrent Client"
content="bitvid βeacon uses code from βTorrent. βTorrent is a fully-featured Browser WebTorrent Client"
/>
<meta
name="keywords"
content="bitvid, client, webtorrent, browser, torrent, stream, bittorrent, torrenting, sharing, filesharing"
/>
<meta name="author" content="Diego Rodríguez Baquero - DiegoRBaquero" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<!-- Scripts: webtorrent, angular, etc. -->
<script src="https://cdn.jsdelivr.net/combine/npm/webtorrent/webtorrent.min.js,npm/moment@2,npm/angular@1.5/angular.min.js,npm/angular-route@1.5/angular-route.min.js,npm/angular-sanitize@1.5/angular-sanitize.min.js,npm/angular-ui-grid@3/ui-grid.min.js,gh/matowens/ng-notify/dist/ng-notify.min.js,npm/ng-file-upload@12.2.13/dist/ng-file-upload.min.js"></script>
<script src="bundle.min.js"></script>
<!-- External styles -->
<link
@@ -37,120 +38,120 @@
</head>
<body ng-controller="BTorrentCtrl" ng-cloak="">
<!-- Header -->
<!-- Header with container -->
<header class="header-torrent">
<div class="logo-container">
<img
src="../assets/svg/bitvid-logo-light-mode.svg"
alt="bitvid Logo"
class="bitvid-logo"
/>
</div>
<!-- Only show links if there's no active torrent -->
<div class="views" ng-show="$root.client.torrents.length == 0">
<a ng-href="#/" class="view-link">Full</a>
<a ng-href="#/download" class="view-link">Single Download</a>
<a ng-href="#/view" class="view-link">Stream / View</a>
<div class="container">
<div class="logo-container">
<img
src="../assets/svg/bitvid-logo-light-mode.svg"
alt="bitvid Logo"
class="bitvid-logo"
/>
</div>
</div>
</header>
<!-- Where the 'view.html', 'download.html', or 'full.html' content will appear -->
<!-- Main content -->
<div id="viewer" ng-style="$root.viewerStyle"></div>
<div id="view" ng-view></div>
<!-- Footer -->
<!-- Footer with container -->
<footer class="footer-torrent">
<a
href="http://bitvid.network/"
class="footer-link"
target="_blank"
rel="noopener noreferrer"
>
bitvid.network
</a>
|
<a
href="https://bitvid.btc.us"
class="footer-link"
target="_blank"
rel="noopener noreferrer"
>
bitvid.btc.us
</a>
|
<a
href="https://bitvid.eth.limo"
class="footer-link"
target="_blank"
rel="noopener noreferrer"
>
bitvid.eth.limo
</a>
|
<div class="footer-inline-links">
<div class="container">
<a
href="https://github.com/PR0M3TH3AN/bitvid"
class="footer-link"
href="http://bitvid.network/"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_blank"
rel="noopener noreferrer"
>
GitHub
bitvid.network
</a>
|
<a
href="https://primal.net/p/npub13yarr7j6vjqjjkahd63dmr27curypehx45ucue286ac7sft27y0srnpmpe"
class="footer-link"
href="https://bitvid.btc.us"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_blank"
rel="noopener noreferrer"
>
Nostr
bitvid.btc.us
</a>
|
<a
href="https://habla.news/p/nprofile1qyv8wumn8ghj7un9d3shjtnndehhyapwwdhkx6tpdsq3gamnwvaz7tmjv4kxz7fwv3sk6atn9e5k7qgdwaehxw309ahx7uewd3hkcqgswaehxw309ahx7um5wgh8w6twv5q3yamnwvaz7tm0venxx6rpd9hzuur4vgqzpzf6x8a95eyp99dmwm4zmkx4a3cxgrnwdtfe3ej504m3aqjk4ugldyww3a"
class="footer-link"
href="https://bitvid.eth.limo"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_blank"
rel="noopener noreferrer"
>
Blog
bitvid.eth.limo
</a>
<a
href="../getting-started.html"
class="footer-link"
target="_self"
rel="noopener noreferrer"
|
<div class="mt-2 space-x-4">
<a
href="https://github.com/PR0M3TH3AN/bitvid"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_blank"
rel="noopener noreferrer"
>
GitHub
</a>
<a
href="https://primal.net/p/npub13yarr7j6vjqjjkahd63dmr27curypehx45ucue286ac7sft27y0srnpmpe"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_blank"
rel="noopener noreferrer"
>
Nostr
</a>
<a
href="https://habla.news/p/nprofile1qyv8wumn8ghj7un9d3shjtnndehhyapwwdhkx6tpdsq3gamnwvaz7tmjv4kxz7fwv3sk6atn9e5k7qgdwaehxw309ahx7uewd3hkcqgswaehxw309ahx7um5wgh8w6twv5q3yamnwvaz7tm0venxx6rpd9hzuur4vgqzpzf6x8a95eyp99dmwm4zmkx4a3cxgrnwdtfe3ej504m3aqjk4ugldyww3a"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_blank"
rel="noopener noreferrer"
>
Blog
</a>
<a
href="../getting-started.html"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_self"
rel="noopener noreferrer"
>
Getting Started
</a>
<a
href="../about.html"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_self"
rel="noopener noreferrer"
>
About
</a>
<a
href="../roadmap.html"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_self"
rel="noopener noreferrer"
>
Roadmap
</a>
<a
href="torrent.html"
class="text-gray-500 hover:text-gray-400 transition-colors duration-200"
target="_self"
rel="noopener noreferrer"
>
βeacon
</a>
</div>
<p
class="mt-2 text-xs text-gray-600 font-mono break-all max-w-full overflow-hidden"
>
Getting Started
</a>
<a
href="../about.html"
class="footer-link"
target="_self"
rel="noopener noreferrer"
>
About
</a>
<a
href="../roadmap.html"
class="footer-link"
target="_self"
rel="noopener noreferrer"
>
Roadmap
</a>
<a
href="torrent.html"
class="footer-link"
target="_self"
rel="noopener noreferrer"
>
Torrent
</a>
IPNS:
<a href="ipns.html" class="text-blue-600 underline">
k51qzi5uqu5dgwr4oejq9rk41aoe9zcupenby6iqecsk5byc7rx48uecd133a1
</a>
</p>
</div>
<p class="ipns-text">
IPNS:
<a href="../ipns.html" class="ipns-link">
k51qzi5uqu5dgwr4oejq9rk41aoe9zcupenby6iqecsk5byc7rx48uecd133a1
</a>
</p>
</footer>
<!-- Processing Spinner -->
@@ -158,7 +159,7 @@
<i class="fa fa-spinner fa-spin spinner-icon"></i>
</div>
<!-- Our local Angular code -->
<!-- Local Angular code -->
<script src="app.js"></script>
</body>
</html>

View File

@@ -1,140 +0,0 @@
<div class="container">
<!-- Hide this portion if torrents are already added -->
<div
ng-hide="$root.client.torrents.length != 0"
style="vertical-align: middle; text-align: center"
>
<div class="row">
<!-- On submit, call addMagnet() -->
<form class="no-margin" ng-submit="addMagnet()">
<label>Enter magnet, hash or http(s) .torrent</label>
<input
type="text"
placeholder="magnet, hash or http(s) .torrent"
ng-model="torrentInput"
ng-disabled="$root.disabled"
style="width: 50%"
/>
</form>
</div>
<div class="row">
<label>or...</label>
<!-- Open torrent file button in red -->
<button
type="file"
ngf-select="$root.openTorrentFile($file)"
ng-disabled="$root.disabled"
class="button button-danger"
>
<i class="fa fa-folder-open"></i> Open torrent file
</button>
</div>
</div>
<!-- If there's a selected torrent, show its info -->
<div class="div" ng-if="selectedTorrent" style="text-align: center">
<div class="four columns" style="overflow: auto">
<h4>Information</h4>
<table class="u-full-width">
<tbody>
<tr>
<td>Name</td>
<td>{{$root.selectedTorrent.name}}</td>
</tr>
<tr>
<td>Size</td>
<td>{{$root.selectedTorrent.length | pbytes}}</td>
</tr>
<tr>
<td>Completed</td>
<td>
{{$root.selectedTorrent.progress | progress}}
({{$root.selectedTorrent.downloaded | pbytes}})
</td>
</tr>
<tr>
<td>Peers</td>
<td>{{$root.selectedTorrent.numPeers}}</td>
</tr>
<tr>
<td>↓ Speed</td>
<td>{{$root.selectedTorrent.downloadSpeed | pbytes:1}}</td>
</tr>
<tr>
<td>ETA</td>
<td>{{$root.selectedTorrent.timeRemaining | humanTime}}</td>
</tr>
</tbody>
</table>
</div>
<div class="four columns">
<h4>Files</h4>
<table class="u-full-width" style="margin: auto">
<thead>
<tr>
<th>Name</th>
<th>Size</th>
<th>Priority</th>
</tr>
</thead>
<tbody>
<tr class="files" ng-repeat="file in $root.selectedTorrent.files">
<td ng-hide="file.done">{{file.name}}</td>
<td ng-show="file.done">
<a
ng-href="{{file.url}}"
download="{{file.name}}"
target="_self"
ng-show="file.done"
>{{file.name}}</a
>
</td>
<td>{{file.length | pbytes}}</td>
<td>
<select
class="no-margin"
name="{{file.name}}Priority"
ng-model="file.priority"
ng-init="file.priority = '0'"
ng-change="$root.changePriority(file)"
>
<option value="1">High Priority</option>
<option value="0" selected="">Low Priority</option>
<option value="-1">Don't download</option>
</select>
</td>
</tr>
</tbody>
</table>
<h5>↑ Click a file to download it</h5>
</div>
<div class="four columns">
<h4>Share</h4>
<ul style="text-align: justify">
<li>
<a ng-href="#{{$root.selectedTorrent.infoHash}}" target="_blank"
>βTorrent</a
>
</li>
<li>
<a ng-href="{{$root.selectedTorrent.magnetURI}}" target="_blank"
>Magnet URI</a
>
</li>
<li>
<a
ng-href="{{$root.selectedTorrent.safeTorrentFileURL}}"
target="_self"
download="{{$root.selectedTorrent.fileName}}"
>.torrent</a
>
</li>
<li>
<strong>Hash: </strong>{{$root.selectedTorrent.infoHash}}
</li>
</ul>
</div>
</div>
</div>

View File

@@ -82,7 +82,7 @@
<ul>
<li>
<a ng-href="#{{$root.selectedTorrent.infoHash}}" target="_blank"
>βTorrent</a
>bitvid</a
>
</li>
<li>
@@ -98,9 +98,7 @@
>.torrent</a
>
</li>
<li>
<strong>Hash: </strong>{{$root.selectedTorrent.infoHash}}
</li>
<li><strong>Hash: </strong>{{$root.selectedTorrent.infoHash}}</li>
</ul>
</div>
@@ -150,10 +148,9 @@
<div class="center">
<strong>
Client Stats:
{{$root.client.downloadSpeed | pbytes}}/s ·
↑ {{$root.client.uploadSpeed | pbytes}}/s ·
Ratio: {{$root.client.ratio | number:2}}
Client Stats: ↓ {{$root.client.downloadSpeed | pbytes}}/s · ↑
{{$root.client.uploadSpeed | pbytes}}/s · Ratio: {{$root.client.ratio |
number:2}}
</strong>
</div>
</div>

View File

@@ -1,50 +0,0 @@
<div class="container">
<!-- Hide form if there are already torrents in progress -->
<div
ng-hide="$root.client.torrents.length != 0"
style="vertical-align: middle; text-align: center"
>
<div class="row">
<form class="no-margin" ng-submit="addMagnet()">
<label>Enter magnet, hash or http(s) .torrent</label>
<input
type="text"
placeholder="magnet, hash or http(s) .torrent"
ng-model="torrentInput"
ng-disabled="$root.disabled"
style="width: 50%"
/>
</form>
</div>
<div class="row">
<label>or...</label>
<!-- Open torrent file button in red -->
<button
type="file"
ngf-select="$root.openTorrentFile($file)"
ng-disabled="$root.disabled"
class="button button-danger"
>
<i class="fa fa-folder-open"></i> Open torrent file
</button>
</div>
</div>
<!-- If a torrent is selected, show its progress -->
<div
class="div"
ng-if="selectedTorrent"
style="text-align: center"
>
Downloaded
{{$root.selectedTorrent.downloaded | pbytes}} /
{{$root.selectedTorrent.length | pbytes}}
({{$root.selectedTorrent.progress | progress}})
at
{{$root.selectedTorrent.downloadSpeed | pbytes:1}}
from
{{$root.selectedTorrent.numPeers}} peers.
ETA:
{{$root.selectedTorrent.timeRemaining | humanTime}}
</div>
</div>