Git Product home page Git Product logo

tohr's Introduction

Tohr

Tohr is an attempt to be a prettier interface for transmission-daemon, more mobile friendly, and connected to a torrent provider in order to search files and download them directly into specific directories such as "films", "series", "musics" and "other".

I need this because I think great tools as Radarr or Sonarr are overkill for my needs. So I decided to make my own, easy to configure, alternative.

This web application is also a way for me to improve my Angular, Node and Docker skills : feel free to give me some advices, fork this project or post issues.

Features

  • Search and download torrent from a configured provider in a linked Jackett instance
  • Add a torrent file manually
  • Download data in specific destination paths (usefull to send downloads into a Plex category...)
  • Manage Transmission torrents : list, details, deletion
  • Direct download files
  • Monitoring page : disks spaces left, used memory...
  • Installation with Docker and docker-compose
  • Progressive Web App enabled

Getting started

First of all, install Docker and Docker-Compose.

Prepare directories

First of all, prepare a directory to put in all your configuration. Then choose your version, available on the Tohr Docker Hub :

mkdir tohr && cd tohr
# Prepare directories that will contains downloads and configuration
mkdir -p transmission-data/config \
  transmission-data/data/films \
  transmission-data/data/musics \
  transmission-data/data/series \
  transmission-data/data/other

VERSION="1.0.3-SNAPSHOT-6"
SOURCE="https://github.com/cyril-colin/tohr/tree/${VERSION}"

Get and edit docker-compose.yml

Now you can get the docker-compose.yml sample from the github repository. This file will contains

curl -o docker-compose.yml ${SOURCE}/docker-compose-prod.yml
vi docker-compose.yml

Usual data to edit are :

  • tohr.image : the docker build tag. Available on Tohr Docker Hub
  • tohr.ports : to fit to your environments
  • volume : to add your tohr configuration and assets
  • tohr-transmission.ports : idem, to fit to your needs. See transmission documentation
  • tohr-transmission.volumes : to fit to your downloads favorite destinations

Get and edit Tohr configuration

curl -o config.production.json ${SOURCE}/back/config/config.sample.json
vi config.production.json

Usual data to edit are :

  • users : user and password to allow users to login.
  • jwtSecret : The secret to protect JWT
  • diskToWatch : The reference to a element of first column of "df -h" command. This allow Tohr to check spaces left on disks
  • transmissionDaemonLogin : The login to let Tohr access to transmission
  • transmissionDaemonPassword : The password to let Tohr access to transmission

Get and configure Transmission configuration

curl -o transmission-data/config/settings.json ${SOURCE}/back/config/transmission-settings.json
vi transmission-data/config/settings.json

Usual data to edit are :

  • rpc-username : The user login for transmission. Should be the same as transmissionDaemonLogin in config.production.json
  • rpc-password : The user password for transmission. Should be the same as transmissionDaemonPassword in config.production.json

Note : this file will be edited at the transmission start up in order to secure the password. Please see the Transmission documentation.

Get and configure Jackett configuration

curl -o jackett/config/ServerConfig.json ${SOURCE}/back/config/jackett.sample.json
vi transmission-data/config/settings.json

Finally, run Tohr !

docker-compose up -d

Now, go to http://localhost:9117 to access and configure Jackett in order to enable an indexer.

UI will be available at the exposed docker-compose.yml port. By default : http://localhost:4201

Useful command

docker-compose logs -f tohr # Show tohr logs
docker-compose exec tohr bash # Open a terminal in the Tohr container
docker-compose down # Stop and destroy containers. It will keep downloaded files

Development

First of all, install Docker and Docker-Compose. Install Node : all the project is based on JavaScript and TypeScript

# getting sources and dependencies
git clone [email protected]:cyril-colin/tohr.git
cd tohr
npm install


# Transmission configuration
mkdir -p transmission-data/config \
  transmission-data/data/films \
  transmission-data/data/musics \
  transmission-data/data/series \
  transmission-data/data/other
cp back/config/transmission-settings.json transmission-data/config/settings.json

# Configure jackett
docker-compose up -d jackett # http://localhost:9117 to access and configure Jackett in order to enable an indexer.
docker-compose down

# Run
cp back/config/config.sample.json back/config/config.dev.json # Edit with the jackett ApiKey
npm start # start back and front
docker-compose logs -f tohr-dev # to see the backend logs


npm run stop
rm -rf transmission-data/ jackett/

Build the production

npm run build # Check if build works
vi package.json # Update manually version
VERSION=$(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') &&\
 git add . && git commit -am ${VERSION} && \
 git tag -a ${VERSION} -m ${VERSION} 
git push --tags && git push

External links

This application works thanks to the transmission-daemon RPC api and jackett :

tohr's People

Contributors

cyril-colin avatar dependabot[bot] avatar

Stargazers

 avatar

Watchers

 avatar

tohr's Issues

Start-up checks

Do somes check at start-up :

  • Ping transmission-daemon at startup of the backend
  • Check existance of destinations
  • Check logs directory

Torrent details : show more

Transmission-daemon give a lot of information, such as list of files. This should appears in the torrent details page

Make torrent service generic

Create an interface "TorrentClient" in order to have possibility to have another torrent client than Transmission Daemon

Improve readme

Add screenshots
Describe why I use some libraries and how some parts of project are implemented
Wiki redactions : production environment (create a service etc...)

Fix search

Some error occurs sometimes :

1020, Access Denied (Custom Firewall Rules)
captcha

With invalid JWT, user should be rediected to login page

Scenario :

I am logged in
I modify the JWT on the front side (in order to make it invalid)
I refresh the page or navigate

Expected behaviour : I should be redirect to the login page, with a dialog or something to explain why
Current behaviour : Stuck on the loading page

Add search feature

backend :

  • service
  • api
  • configuration

front end

  • new search page with upload button
  • update current download page

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.