/radio/rb/views.py

https://github.com/neskie/Secwepemc-Radio · Python · 122 lines · 100 code · 21 blank · 1 comment · 3 complexity · 2dc7ca181f1715dc6f9209530254ec73 MD5 · raw file

  1. # Create your views here.
  2. from django.views.generic.list_detail import object_list
  3. from show.models import *
  4. from django.core import serializers
  5. from django.http import HttpResponse
  6. from django.http import HttpResponseRedirect
  7. from django.template import RequestContext
  8. from django.template import loader
  9. from show.models import *
  10. from RhythmDB import *
  11. from django.views.decorators.cache import cache_page
  12. import cPickle as pickle
  13. from django.contrib.auth.decorators import login_required
  14. from rb.settings import *
  15. import os
  16. import socket
  17. import paramiko
  18. f = open(DB_FILE)
  19. db = pickle.load(f)
  20. @cache_page(60 * 15)
  21. def genres(request):
  22. genres = db.genres()
  23. counts_by_genre = [ (genre,len(Playlist(db.get('genre',genre)))) for genre in genres ]
  24. counts_by_genre = sorted(counts_by_genre,key=lambda a: -a[1])
  25. context= {
  26. 'genres': counts_by_genre,
  27. }
  28. return object_list(request,
  29. queryset=Show.objects.none(),template_name='rb/genres.html',
  30. extra_context=context)
  31. @cache_page(60 * 15)
  32. def artists(request):
  33. genres = db.artists()
  34. counts_by_genre = [ (genre,len(Playlist(db.get('artist',genre)))) for genre in genres ]
  35. counts_by_genre = sorted(counts_by_genre,key=lambda a: -a[1])
  36. context= {
  37. 'artists': counts_by_genre,
  38. }
  39. return object_list(request,
  40. queryset=Show.objects.none(),template_name='rb/artists.html',
  41. extra_context=context)
  42. @cache_page(60 * 15)
  43. def artists_detail(request, slug):
  44. artist_songs = db.get('artist', slug)
  45. context= {
  46. 'artist_songs': artist_songs,
  47. 'slug': slug
  48. }
  49. return object_list(request,
  50. queryset=Show.objects.none(),template_name='rb/artists_detail.html',
  51. extra_context=context)
  52. @cache_page(60 * 15)
  53. def albums(request):
  54. albums = set([song['album'] for song in db ])
  55. context= {
  56. 'albums': albums,
  57. }
  58. return object_list(request,
  59. queryset=Show.objects.none(),template_name='rb/albums.html',
  60. extra_context=context)
  61. @cache_page(60 * 15)
  62. def album_detail(request, slug):
  63. album = db.get('album', slug)
  64. context= {
  65. 'album': album,
  66. 'slug': slug
  67. }
  68. return object_list(request,
  69. queryset=Show.objects.none(),template_name='rb/album_detail.html',
  70. extra_context=context)
  71. @login_required
  72. def play(request):
  73. os.system("ssh -i %s -p %d %s@%s 'source init_dbus.sh; rhythmbox-client --play'" % (IDENTITY_FILE, PORT, USER, REMOTE_HOST))
  74. return HttpResponseRedirect('/rb/player/')
  75. @login_required
  76. def pause(request):
  77. os.system("ssh -i %s -p %d %s@%s 'source init_dbus.sh; rhythmbox-client --pause'" % (IDENTITY_FILE, PORT, USER, REMOTE_HOST))
  78. return HttpResponseRedirect('/rb/player/')
  79. @login_required
  80. def next(request):
  81. os.system("ssh -i %s -p %d %s@%s 'source init_dbus.sh; rhythmbox-client --next'" % (IDENTITY_FILE, PORT, USER, REMOTE_HOST))
  82. return HttpResponseRedirect('/rb/player/')
  83. @login_required
  84. def player(request):
  85. ip = socket.gethostbyaddr(REMOTE_HOST)[-1][0]
  86. ssh = paramiko.SSHClient()
  87. ssh.set_missing_host_key_policy(
  88. paramiko.AutoAddPolicy())
  89. ssh.connect(ip,
  90. key_filename=IDENTITY_FILE,
  91. username=USER,
  92. port=PORT,
  93. password='')
  94. a,b,c = ssh.exec_command(
  95. 'source init_dbus.sh 2&>/dev/null; rhythmbox-client --print-playing')
  96. t = loader.get_template('rb/player.html')
  97. c = RequestContext(request,
  98. {
  99. 'current_track': b.read().strip(),
  100. })
  101. return HttpResponse(t.render(c))