views.py 2.6 KB

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