forked from 0x2620/pandora
add transmission interface
This commit is contained in:
parent
d2aae7d958
commit
0510588b28
11 changed files with 130 additions and 1 deletions
|
@ -110,6 +110,7 @@ INSTALLED_APPS = (
|
||||||
'app',
|
'app',
|
||||||
'backend',
|
'backend',
|
||||||
'oxuser',
|
'oxuser',
|
||||||
|
'torrent',
|
||||||
)
|
)
|
||||||
|
|
||||||
AUTH_PROFILE_MODULE = 'oxuser.UserProfile'
|
AUTH_PROFILE_MODULE = 'oxuser.UserProfile'
|
||||||
|
@ -124,6 +125,11 @@ VIDEO_ENCODING = {
|
||||||
'high': {'profile': 'padma'}
|
'high': {'profile': 'padma'}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRANSMISSON_HOST='localhost'
|
||||||
|
TRANSMISSON_PORT=9091
|
||||||
|
TRANSMISSON_USER='transmission'
|
||||||
|
TRANSMISSON_PASSWORD='transmission'
|
||||||
|
|
||||||
#overwrite default settings with local settings
|
#overwrite default settings with local settings
|
||||||
try:
|
try:
|
||||||
from local_settings import *
|
from local_settings import *
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<script type="text/javascript" src="/static/oxjs/build/js/ox.js"></script>
|
<script type="text/javascript" src="/static/oxjs/build/js/ox.js"></script>
|
||||||
<script type="text/javascript" src="/static/oxjs/build/js/ox.ui.js"></script>
|
<script type="text/javascript" src="/static/oxjs/build/js/ox.ui.js"></script>
|
||||||
<script type="text/javascript" src="/site.js"></script>
|
<script type="text/javascript" src="/site.js"></script>
|
||||||
<script type="text/javascript" src="/static/js/oxdb.js"></script>
|
<script type="text/javascript" src="/static/js/pandora.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
</body>
|
</body>
|
||||||
|
|
0
pandora/torrent/__init__.py
Normal file
0
pandora/torrent/__init__.py
Normal file
0
pandora/torrent/management/__init__.py
Normal file
0
pandora/torrent/management/__init__.py
Normal file
0
pandora/torrent/management/commands/__init__.py
Normal file
0
pandora/torrent/management/commands/__init__.py
Normal file
22
pandora/torrent/management/commands/seeding.py
Normal file
22
pandora/torrent/management/commands/seeding.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vi:si:et:sw=4:sts=4:ts=4
|
||||||
|
|
||||||
|
import os
|
||||||
|
from os.path import join, dirname, basename, splitext, exists
|
||||||
|
|
||||||
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
from ... import daemon
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
"""
|
||||||
|
listen to rabbitmq and execute encoding tasks.
|
||||||
|
"""
|
||||||
|
help = 'listen to rabbitmq and execute encoding tasks.'
|
||||||
|
args = ''
|
||||||
|
|
||||||
|
def handle(self, **options):
|
||||||
|
transmission.startDaemon()
|
||||||
|
|
3
pandora/torrent/models.py
Normal file
3
pandora/torrent/models.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
23
pandora/torrent/tests.py
Normal file
23
pandora/torrent/tests.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
"""
|
||||||
|
This file demonstrates two different styles of tests (one doctest and one
|
||||||
|
unittest). These will both pass when you run "manage.py test".
|
||||||
|
|
||||||
|
Replace these with more appropriate tests for your application.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
class SimpleTest(TestCase):
|
||||||
|
def test_basic_addition(self):
|
||||||
|
"""
|
||||||
|
Tests that 1 + 1 always equals 2.
|
||||||
|
"""
|
||||||
|
self.failUnlessEqual(1 + 1, 2)
|
||||||
|
|
||||||
|
__test__ = {"doctest": """
|
||||||
|
Another way to test that 1 + 1 is equal to 2.
|
||||||
|
|
||||||
|
>>> 1 + 1 == 2
|
||||||
|
True
|
||||||
|
"""}
|
||||||
|
|
73
pandora/torrent/transmission.py
Normal file
73
pandora/torrent/transmission.py
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vi:si:et:sw=4:sts=4:ts=4
|
||||||
|
from __future__ import with_statement
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import base64
|
||||||
|
from subprocess import Popen
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
import oxlib.torrent
|
||||||
|
import transmissionrpc
|
||||||
|
|
||||||
|
def connect():
|
||||||
|
return transmissionrpc.Client(settings.TRANSMISSON_HOST,
|
||||||
|
port=settings.TRANSMISSON_PORT,
|
||||||
|
user=settings.TRANSMISSON_USER,
|
||||||
|
password=settings.TRANSMISSON_PASSWORD)
|
||||||
|
|
||||||
|
def remove(info_hash):
|
||||||
|
if settings.DEBUG:
|
||||||
|
print 'remove', info_hash
|
||||||
|
if info_hash:
|
||||||
|
try:
|
||||||
|
tc = connect()
|
||||||
|
tc.remove(info_hash.lower())
|
||||||
|
except:
|
||||||
|
if DEBUG:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
def add(torrent_file):
|
||||||
|
download_dir = os.path.dirname(torrent_file)
|
||||||
|
with open(torrent_file) as f:
|
||||||
|
torrent_data = base64.b64encode(f.read())
|
||||||
|
info_hash = oxlib.torrent.getInfoHash(torrent_file)
|
||||||
|
try:
|
||||||
|
tc = connect()
|
||||||
|
if not is_seeding(info_hash):
|
||||||
|
tc.add(torrent_data, download_dir=download_dir)
|
||||||
|
except:
|
||||||
|
if settings.DEBUG:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
def is_seeding(info_hash):
|
||||||
|
info_hash = info_hash.lower()
|
||||||
|
try:
|
||||||
|
tc = connect()
|
||||||
|
torrents = tc.info(info_hash)
|
||||||
|
except:
|
||||||
|
torrents = False
|
||||||
|
if settings.DEBUG:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
if torrents:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def start_daemon():
|
||||||
|
try:
|
||||||
|
tc = connect()
|
||||||
|
except:
|
||||||
|
Popen(['transmission-daemon',
|
||||||
|
'-a', '127.0.0.1',
|
||||||
|
'-r', '127.0.0.1',
|
||||||
|
'-p', str(settings.TRANSMISSON_PORT),
|
||||||
|
'--auth',
|
||||||
|
'-u', settings.TRANSMISSON_USER,
|
||||||
|
'-v', settings.TRANSMISSON_PASSWORD,
|
||||||
|
'-w', settings.MEDIA_ROOT,
|
||||||
|
])
|
||||||
|
time.sleep(1)
|
||||||
|
|
1
pandora/torrent/views.py
Normal file
1
pandora/torrent/views.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# Create your views here.
|
|
@ -11,3 +11,4 @@ carrot
|
||||||
django_extensions
|
django_extensions
|
||||||
-e bzr+http://firefogg.org/dev/python-firefogg/#egg=python-firefogg
|
-e bzr+http://firefogg.org/dev/python-firefogg/#egg=python-firefogg
|
||||||
-e git+git://github.com/dcramer/django-devserver#egg=django_devserver
|
-e git+git://github.com/dcramer/django-devserver#egg=django_devserver
|
||||||
|
transmissionrpc
|
||||||
|
|
Loading…
Reference in a new issue