views.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import bleach
  2. from django.db.models import Count, Q
  3. from django.http import JsonResponse
  4. def channel_videos_distribution(request, playlist_id):
  5. labels = []
  6. data = []
  7. playlist_items = request.user.playlists.get(playlist_id=bleach.clean(playlist_id)).playlist_items.all()
  8. queryset = playlist_items.filter(Q(video__is_unavailable_on_yt=False) & Q(video__was_deleted_on_yt=False)).values(
  9. 'video__channel_name').annotate(channel_videos_count=Count('video_position'))
  10. for entry in queryset:
  11. labels.append(entry['video__channel_name'])
  12. data.append(entry['channel_videos_count'])
  13. return JsonResponse(data={
  14. 'labels': labels,
  15. 'data': data,
  16. })
  17. def overall_channels_distribution(request):
  18. labels = []
  19. data = []
  20. videos = request.user.videos.filter(Q(is_unavailable_on_yt=False) & Q(was_deleted_on_yt=False))
  21. queryset = videos.values(
  22. 'channel_name').annotate(channel_videos_count=Count('video_id')).order_by('-channel_videos_count')[:100]
  23. for entry in queryset:
  24. labels.append(entry['channel_name'])
  25. data.append(entry['channel_videos_count'])
  26. return JsonResponse(data={
  27. 'labels': labels,
  28. 'data': data,
  29. })
  30. def overall_playlists_distribution(request):
  31. labels = []
  32. data = []
  33. user_playlists = request.user.playlists.filter(is_in_db=True).exclude(playlist_id="LL")
  34. total_num_playlists = user_playlists.count()
  35. statistics = {
  36. "public": 0,
  37. "private": 0,
  38. "favorites": 0,
  39. "watching": 0,
  40. "imported": 0,
  41. "youtube mixes": 0
  42. }
  43. if total_num_playlists != 0:
  44. statistics["public"] = user_playlists.filter(is_private_on_yt=False).count()
  45. statistics["private"] = user_playlists.filter(is_private_on_yt=True).count()
  46. statistics["favorites"] = user_playlists.filter(is_favorite=True).count()
  47. statistics["watching"] = user_playlists.filter(marked_as="watching").count()
  48. statistics["imported"] = user_playlists.filter(is_user_owned=False).count()
  49. statistics["youtube mixes"] = user_playlists.filter(is_yt_mix=True).count()
  50. for key, value in statistics.items():
  51. labels.append(key)
  52. data.append(value)
  53. return JsonResponse(data={
  54. 'labels': labels,
  55. 'data': data,
  56. })
  57. def watching_playlists_percent_distribution(request):
  58. labels = []
  59. data = []
  60. watching_playlists = request.user.playlists.filter(Q(is_in_db=True) & Q(marked_as="watching"))
  61. if watching_playlists.exists():
  62. for playlist in watching_playlists:
  63. labels.append(playlist.name)
  64. data.append(playlist.get_percent_complete())
  65. return JsonResponse(data={
  66. 'labels': labels,
  67. 'data': data,
  68. })