add tracker announce URLs to torrents for sharing

This commit is contained in:
eyedeekay
2024-10-05 19:11:28 -04:00
parent 848902530b
commit 841150f4d5
2 changed files with 95 additions and 82 deletions

View File

@ -31,11 +31,15 @@ Step One: Symlink your i2psnark downloads directory to zzzot's docroot
After you install zzzot, symlink directory where I2PSnark stores it's downloads to a sub-directory of zzzot's document root.
If you're on Linux and used a `.jar` installer, this command will work:
`ln -sf ~/.i2p/i2psnark ~/.i2p/plugins/zzzot/eepsite/docroot/i2psnark`
```sh
ln -sf ~/.i2p/i2psnark ~/.i2p/plugins/zzzot/eepsite/docroot/i2psnark
```
Or, if you used a Debian package:
`sudo -u i2psvc ln -sf /var/lib/i2p/i2p-config/i2psnark /var/lib/i2p/i2p-config/plugins/zzzot/eepsite/docroot/i2psnark`
```sh
sudo -u i2psvc ln -sf /var/lib/i2p/i2p-config/i2psnark /var/lib/i2p/i2p-config/plugins/zzzot/eepsite/docroot/i2psnark
```
Step Two: Generate a new zzzot homepage
---------------------------------------

View File

@ -11,13 +11,21 @@ of files that you want to share.</p>
<ul>
<li><code>setup.sh</code> will do all this automatically on linux.</li>
</ul>
<h2 id="step-zero-install-zzzot">Step Zero: Install zzzot</h2>
<h2 id="step-zero-install-zzzot-and-script-dependencies">Step Zero:
Install zzzot and script dependencies</h2>
<p>You need zzzot to make this work. You can install zzzot by pasting
this link <code>http://stats.i2p/i2p/plugins/zzzot.su3</code> into
“Install from URL” on the <a
href="http://localhost:7657/configplugins">Plugin Config page</a>. You
can also obtain zzzot from zzzs plugins page <a
href="http://stats.i2p/i2p/plugins/">inside of I2P</a>.</p>
<p>Make a note of the zzzot tracker base32 address at <a
href="http://127.0.0.1:7662"><code>http://127.0.0.1:7662</code></a>.
Enter it into the environment variable <code>zzzot_announce</code> like
so:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="bu">export</span> <span class="va">zzzot_announce</span><span class="op">=</span><span class="st">&quot;thisisanexampleofafiftytwocharacterlongbasethirtytwo.b32.i2p&quot;</span></span></code></pre></div>
<p>Youll also need: <code>sed</code> <code>sort</code>
<code>uniq</code> and <code>transmission-edit</code>.</p>
<h2
id="step-one-symlink-your-i2psnark-downloads-directory-to-zzzots-docroot">Step
One: Symlink your i2psnark downloads directory to zzzots docroot</h2>
@ -37,58 +45,59 @@ homepage in order to show whatever you want. Were going to take
advantage of this to generate an index of the torrents were sharing
along with some details about them. To do this well use a shell script
to generate the page.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="co">#! /usr/bin/env sh</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="fu">tagList()</span> <span class="kw">{</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;div class=</span><span class="dt">\&quot;</span><span class="st">tags</span><span class="dt">\&quot;</span><span class="st">&gt;Tags:&quot;</span></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> torrent <span class="kw">in</span> i2psnark/<span class="pp">*</span>.torrent<span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a> <span class="va">filename</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$torrent</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|.torrent||g&#39;</span><span class="va">)</span></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a> <span class="va">title</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$filename</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|-| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|i2psnark/||g&#39;</span><span class="va">)</span></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a> <span class="va">tags</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$title</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|\.| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|@| |g&#39;</span><span class="va">)</span></span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> tag <span class="kw">in</span> <span class="va">$tags</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> tag <span class="kw">in</span> <span class="va">$tags</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;a class=</span><span class="dt">\&quot;</span><span class="va">$tag</span><span class="st"> lvix1</span><span class="dt">\&quot;</span><span class="st"> href=</span><span class="dt">\&quot;</span><span class="st">#</span><span class="va">$tag</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$tag</span><span class="st">&lt;/a&gt;&quot;</span></span>
<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;/div&gt;&quot;</span></span>
<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a><span class="fu">generatePage()</span> <span class="kw">{</span></span>
<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;!doctype html&gt;&quot;</span></span>
<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;html lang=en&gt;&quot;</span></span>
<span id="cb1-21"><a href="#cb1-21" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;head&gt;&quot;</span></span>
<span id="cb1-22"><a href="#cb1-22" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;meta charset=utf-8&gt;&quot;</span></span>
<span id="cb1-23"><a href="#cb1-23" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;title&gt;Torrent Index&lt;/title&gt;&quot;</span></span>
<span id="cb1-24"><a href="#cb1-24" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;script src=</span><span class="dt">\&quot;</span><span class="st">script.js</span><span class="dt">\&quot;</span><span class="st">&gt;&lt;/script&gt;&quot;</span></span>
<span id="cb1-25"><a href="#cb1-25" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;style&gt;&quot;</span></span>
<span id="cb1-26"><a href="#cb1-26" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;div {&quot;</span></span>
<span id="cb1-27"><a href="#cb1-27" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; display: </span><span class="dt">\&quot;</span><span class="st">inline</span><span class="dt">\&quot;</span><span class="st">;&quot;</span></span>
<span id="cb1-28"><a href="#cb1-28" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;}&quot;</span></span>
<span id="cb1-29"><a href="#cb1-29" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/style&gt;&quot;</span></span>
<span id="cb1-30"><a href="#cb1-30" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/head&gt;&quot;</span></span>
<span id="cb1-31"><a href="#cb1-31" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;body&gt;&quot;</span></span>
<span id="cb1-32"><a href="#cb1-32" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SHARE</span><span class="st">&quot;</span></span>
<span id="cb1-33"><a href="#cb1-33" aria-hidden="true" tabindex="-1"></a> <span class="ex">tagList</span> <span class="kw">|</span> <span class="fu">sort</span> <span class="at">-u</span></span>
<span id="cb1-34"><a href="#cb1-34" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> torrent <span class="kw">in</span> i2psnark/<span class="pp">*</span>.torrent<span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb1-35"><a href="#cb1-35" aria-hidden="true" tabindex="-1"></a> <span class="va">filename</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$torrent</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|.torrent||g&#39;</span><span class="va">)</span></span>
<span id="cb1-36"><a href="#cb1-36" aria-hidden="true" tabindex="-1"></a> <span class="va">title</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$filename</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|-| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|i2psnark/||g&#39;</span><span class="va">)</span></span>
<span id="cb1-37"><a href="#cb1-37" aria-hidden="true" tabindex="-1"></a> <span class="va">tags</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$title</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|\.| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|@| |g&#39;</span><span class="va">)</span></span>
<span id="cb1-38"><a href="#cb1-38" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;div id=&quot;</span><span class="va">$filename</span><span class="st">&quot; class=</span><span class="dt">\&quot;</span><span class="va">$tags</span><span class="dt">\&quot;</span><span class="st">&gt;&quot;</span></span>
<span id="cb1-39"><a href="#cb1-39" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;a href=</span><span class="dt">\&quot;</span><span class="va">$torrent</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$title</span><span class="st">&lt;/a&gt;&lt;/br&gt;&quot;</span></span>
<span id="cb1-40"><a href="#cb1-40" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;div class=</span><span class="dt">\&quot;</span><span class="st">tags</span><span class="dt">\&quot;</span><span class="st">&gt;Tags:&quot;</span></span>
<span id="cb1-41"><a href="#cb1-41" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> tag <span class="kw">in</span> <span class="va">$tags</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb1-42"><a href="#cb1-42" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;a class=</span><span class="dt">\&quot;</span><span class="va">$tag</span><span class="st"> lvix1</span><span class="dt">\&quot;</span><span class="st"> href=</span><span class="dt">\&quot;</span><span class="st">#</span><span class="va">$tag</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$tag</span><span class="st">&lt;/a&gt;&quot;</span></span>
<span id="cb1-43"><a href="#cb1-43" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb1-44"><a href="#cb1-44" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;/div&gt;&quot;</span></span>
<span id="cb1-45"><a href="#cb1-45" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;/div&gt;&quot;</span></span>
<span id="cb1-46"><a href="#cb1-46" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb1-47"><a href="#cb1-47" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> <span class="va">$BACK</span></span>
<span id="cb1-48"><a href="#cb1-48" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/body&gt;&quot;</span></span>
<span id="cb1-49"><a href="#cb1-49" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/html&gt;&quot;</span></span>
<span id="cb1-50"><a href="#cb1-50" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb1-51"><a href="#cb1-51" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-52"><a href="#cb1-52" aria-hidden="true" tabindex="-1"></a><span class="ex">generatePage</span></span></code></pre></div>
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="co">#! /usr/bin/env sh</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="fu">tagList()</span> <span class="kw">{</span></span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;div class=</span><span class="dt">\&quot;</span><span class="st">tags</span><span class="dt">\&quot;</span><span class="st">&gt;Tags:&quot;</span></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> torrent <span class="kw">in</span> i2psnark/<span class="pp">*</span>.torrent<span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a> <span class="va">filename</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$torrent</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|.torrent||g&#39;</span><span class="va">)</span></span>
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a> <span class="va">title</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$filename</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|-| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|i2psnark/||g&#39;</span><span class="va">)</span></span>
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a> <span class="va">tags</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$title</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|\.| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|@| |g&#39;</span><span class="va">)</span></span>
<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> tag <span class="kw">in</span> <span class="va">$tags</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> tag <span class="kw">in</span> <span class="va">$tags</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;a class=</span><span class="dt">\&quot;</span><span class="va">$tag</span><span class="st"> lvix1</span><span class="dt">\&quot;</span><span class="st"> href=</span><span class="dt">\&quot;</span><span class="st">#</span><span class="va">$tag</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$tag</span><span class="st">&lt;/a&gt;&quot;</span></span>
<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;/div&gt;&quot;</span></span>
<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-18"><a href="#cb2-18" aria-hidden="true" tabindex="-1"></a><span class="fu">generatePage()</span> <span class="kw">{</span></span>
<span id="cb2-19"><a href="#cb2-19" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;!doctype html&gt;&quot;</span></span>
<span id="cb2-20"><a href="#cb2-20" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;html lang=en&gt;&quot;</span></span>
<span id="cb2-21"><a href="#cb2-21" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;head&gt;&quot;</span></span>
<span id="cb2-22"><a href="#cb2-22" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;meta charset=utf-8&gt;&quot;</span></span>
<span id="cb2-23"><a href="#cb2-23" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;title&gt;Torrent Index&lt;/title&gt;&quot;</span></span>
<span id="cb2-24"><a href="#cb2-24" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;script src=</span><span class="dt">\&quot;</span><span class="st">script.js</span><span class="dt">\&quot;</span><span class="st">&gt;&lt;/script&gt;&quot;</span></span>
<span id="cb2-25"><a href="#cb2-25" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;style&gt;&quot;</span></span>
<span id="cb2-26"><a href="#cb2-26" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;div {&quot;</span></span>
<span id="cb2-27"><a href="#cb2-27" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; display: </span><span class="dt">\&quot;</span><span class="st">inline</span><span class="dt">\&quot;</span><span class="st">;&quot;</span></span>
<span id="cb2-28"><a href="#cb2-28" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;}&quot;</span></span>
<span id="cb2-29"><a href="#cb2-29" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/style&gt;&quot;</span></span>
<span id="cb2-30"><a href="#cb2-30" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/head&gt;&quot;</span></span>
<span id="cb2-31"><a href="#cb2-31" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;body&gt;&quot;</span></span>
<span id="cb2-32"><a href="#cb2-32" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SHARE</span><span class="st">&quot;</span></span>
<span id="cb2-33"><a href="#cb2-33" aria-hidden="true" tabindex="-1"></a> <span class="ex">tagList</span> <span class="kw">|</span> <span class="fu">sort</span> <span class="at">-u</span></span>
<span id="cb2-34"><a href="#cb2-34" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> torrent <span class="kw">in</span> i2psnark/<span class="pp">*</span>.torrent<span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb2-35"><a href="#cb2-35" aria-hidden="true" tabindex="-1"></a> <span class="ex">transmission-edit</span> <span class="at">-a</span> <span class="st">&quot;http://</span><span class="va">$zzzot_announce</span><span class="st">/a&quot;</span> <span class="st">&quot;</span><span class="va">$torrent</span><span class="st">&quot;</span></span>
<span id="cb2-36"><a href="#cb2-36" aria-hidden="true" tabindex="-1"></a> <span class="va">filename</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$torrent</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|.torrent||g&#39;</span><span class="va">)</span></span>
<span id="cb2-37"><a href="#cb2-37" aria-hidden="true" tabindex="-1"></a> <span class="va">title</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$filename</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|-| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|i2psnark/||g&#39;</span><span class="va">)</span></span>
<span id="cb2-38"><a href="#cb2-38" aria-hidden="true" tabindex="-1"></a> <span class="va">tags</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$title</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|\.| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|@| |g&#39;</span><span class="va">)</span></span>
<span id="cb2-39"><a href="#cb2-39" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;div id=&quot;</span><span class="va">$filename</span><span class="st">&quot; class=</span><span class="dt">\&quot;</span><span class="va">$tags</span><span class="dt">\&quot;</span><span class="st">&gt;&quot;</span></span>
<span id="cb2-40"><a href="#cb2-40" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;a href=</span><span class="dt">\&quot;</span><span class="va">$torrent</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$title</span><span class="st">&lt;/a&gt;&lt;/br&gt;&quot;</span></span>
<span id="cb2-41"><a href="#cb2-41" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;div class=</span><span class="dt">\&quot;</span><span class="st">tags</span><span class="dt">\&quot;</span><span class="st">&gt;Tags:&quot;</span></span>
<span id="cb2-42"><a href="#cb2-42" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> tag <span class="kw">in</span> <span class="va">$tags</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb2-43"><a href="#cb2-43" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;a class=</span><span class="dt">\&quot;</span><span class="va">$tag</span><span class="st"> lvix1</span><span class="dt">\&quot;</span><span class="st"> href=</span><span class="dt">\&quot;</span><span class="st">#</span><span class="va">$tag</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$tag</span><span class="st">&lt;/a&gt;&quot;</span></span>
<span id="cb2-44"><a href="#cb2-44" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb2-45"><a href="#cb2-45" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;/div&gt;&quot;</span></span>
<span id="cb2-46"><a href="#cb2-46" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;/div&gt;&quot;</span></span>
<span id="cb2-47"><a href="#cb2-47" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb2-48"><a href="#cb2-48" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> <span class="va">$BACK</span></span>
<span id="cb2-49"><a href="#cb2-49" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/body&gt;&quot;</span></span>
<span id="cb2-50"><a href="#cb2-50" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/html&gt;&quot;</span></span>
<span id="cb2-51"><a href="#cb2-51" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb2-52"><a href="#cb2-52" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-53"><a href="#cb2-53" aria-hidden="true" tabindex="-1"></a><span class="ex">generatePage</span></span></code></pre></div>
<h2
id="step-threeoptional-add-the-ability-to-filter-torrents-with-javascript">Step
Three(Optional): Add the ability to filter torrents with Javascript</h2>
@ -97,30 +106,30 @@ ability to filter the torrents based on their contents. Our script from
step two converts the titles of the torrents into a list of tags, which
can then be filtered. This provides us with a way of searching the
available torrents efficiently.</p>
<div class="sourceCode" id="cb2"><pre
class="sourceCode javascript"><code class="sourceCode javascript"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="bu">window</span><span class="op">.</span><span class="fu">addEventListener</span>(<span class="st">&quot;load&quot;</span><span class="op">,</span> <span class="kw">function</span>() {</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">setupTags</span>()<span class="op">;</span></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> <span class="kw">function</span> <span class="fu">setupTags</span>() {</span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> els <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.lvix1&quot;</span>)<span class="op">;</span></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> el <span class="kw">of</span> els) el<span class="op">.</span><span class="fu">addEventListener</span>(<span class="st">&quot;click&quot;</span><span class="op">,</span> <span class="kw">function</span>() {</span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> cl <span class="op">=</span> el<span class="op">.</span><span class="at">classList</span>[<span class="dv">0</span>]<span class="op">;</span></span>
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a> <span class="bu">console</span><span class="op">.</span><span class="fu">log</span>(cl)<span class="op">;</span></span>
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> divs <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.&quot;</span><span class="op">+</span>cl)<span class="op">;</span></span>
<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> div <span class="kw">of</span> divs) div<span class="op">.</span><span class="at">style</span><span class="op">.</span><span class="at">display</span> <span class="op">=</span> <span class="fu">hideDivs</span>(div<span class="op">.</span><span class="at">style</span><span class="op">.</span><span class="at">display</span>)<span class="op">;</span></span>
<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">showTags</span>()</span>
<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a> })</span>
<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">function</span> <span class="fu">showTags</span>() {</span>
<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> els <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.lvix1&quot;</span>)<span class="op">;</span></span>
<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> el <span class="kw">of</span> els) {</span>
<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a> <span class="bu">console</span><span class="op">.</span><span class="fu">log</span>(<span class="st">&quot;unhiding&quot;</span><span class="op">,</span> el<span class="op">.</span><span class="at">classList</span>)</span>
<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a> el<span class="op">.</span><span class="at">style</span><span class="op">.</span><span class="at">display</span> <span class="op">=</span> <span class="st">&quot;inline&quot;</span><span class="op">;</span></span>
<span id="cb2-18"><a href="#cb2-18" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb2-19"><a href="#cb2-19" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb2-20"><a href="#cb2-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">function</span> <span class="fu">hideDivs</span>(prev) {</span>
<span id="cb2-21"><a href="#cb2-21" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> (prev <span class="op">===</span> <span class="st">&quot;none&quot;</span>) {</span>
<span id="cb2-22"><a href="#cb2-22" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="st">&quot;inline&quot;</span><span class="op">;</span></span>
<span id="cb2-23"><a href="#cb2-23" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb2-24"><a href="#cb2-24" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="st">&quot;none&quot;</span></span>
<span id="cb2-25"><a href="#cb2-25" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb2-26"><a href="#cb2-26" aria-hidden="true" tabindex="-1"></a>})</span></code></pre></div>
<div class="sourceCode" id="cb3"><pre
class="sourceCode javascript"><code class="sourceCode javascript"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="bu">window</span><span class="op">.</span><span class="fu">addEventListener</span>(<span class="st">&quot;load&quot;</span><span class="op">,</span> <span class="kw">function</span>() {</span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">setupTags</span>()<span class="op">;</span></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a> <span class="kw">function</span> <span class="fu">setupTags</span>() {</span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> els <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.lvix1&quot;</span>)<span class="op">;</span></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> el <span class="kw">of</span> els) el<span class="op">.</span><span class="fu">addEventListener</span>(<span class="st">&quot;click&quot;</span><span class="op">,</span> <span class="kw">function</span>() {</span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> cl <span class="op">=</span> el<span class="op">.</span><span class="at">classList</span>[<span class="dv">0</span>]<span class="op">;</span></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a> <span class="bu">console</span><span class="op">.</span><span class="fu">log</span>(cl)<span class="op">;</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> divs <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.&quot;</span><span class="op">+</span>cl)<span class="op">;</span></span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> div <span class="kw">of</span> divs) div<span class="op">.</span><span class="at">style</span><span class="op">.</span><span class="at">display</span> <span class="op">=</span> <span class="fu">hideDivs</span>(div<span class="op">.</span><span class="at">style</span><span class="op">.</span><span class="at">display</span>)<span class="op">;</span></span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">showTags</span>()</span>
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a> })</span>
<span id="cb3-12"><a href="#cb3-12" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb3-13"><a href="#cb3-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">function</span> <span class="fu">showTags</span>() {</span>
<span id="cb3-14"><a href="#cb3-14" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> els <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.lvix1&quot;</span>)<span class="op">;</span></span>
<span id="cb3-15"><a href="#cb3-15" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> el <span class="kw">of</span> els) {</span>
<span id="cb3-16"><a href="#cb3-16" aria-hidden="true" tabindex="-1"></a> <span class="bu">console</span><span class="op">.</span><span class="fu">log</span>(<span class="st">&quot;unhiding&quot;</span><span class="op">,</span> el<span class="op">.</span><span class="at">classList</span>)</span>
<span id="cb3-17"><a href="#cb3-17" aria-hidden="true" tabindex="-1"></a> el<span class="op">.</span><span class="at">style</span><span class="op">.</span><span class="at">display</span> <span class="op">=</span> <span class="st">&quot;inline&quot;</span><span class="op">;</span></span>
<span id="cb3-18"><a href="#cb3-18" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb3-19"><a href="#cb3-19" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb3-20"><a href="#cb3-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">function</span> <span class="fu">hideDivs</span>(prev) {</span>
<span id="cb3-21"><a href="#cb3-21" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> (prev <span class="op">===</span> <span class="st">&quot;none&quot;</span>) {</span>
<span id="cb3-22"><a href="#cb3-22" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="st">&quot;inline&quot;</span><span class="op">;</span></span>
<span id="cb3-23"><a href="#cb3-23" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb3-24"><a href="#cb3-24" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="st">&quot;none&quot;</span></span>
<span id="cb3-25"><a href="#cb3-25" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb3-26"><a href="#cb3-26" aria-hidden="true" tabindex="-1"></a>})</span></code></pre></div>