1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- from django.db.models import Count, Q
- from django.http import JsonResponse
- def channel_videos_distribution(request, playlist_id):
- labels = []
- data = []
- playlist_items = request.user.playlists.get(playlist_id=playlist_id).playlist_items.all()
- queryset = playlist_items.filter(Q(video__is_unavailable_on_yt=False) & Q(video__was_deleted_on_yt=False)).values(
- 'video__channel_name').annotate(channel_videos_count=Count('video_position'))
- for entry in queryset:
- labels.append(entry['video__channel_name'])
- data.append(entry['channel_videos_count'])
- return JsonResponse(data={
- 'labels': labels,
- 'data': data,
- })
- def overall_channels_distribution(request):
- labels = []
- data = []
- videos = request.user.videos.filter(Q(is_unavailable_on_yt=False) & Q(was_deleted_on_yt=False))
- queryset = videos.values(
- 'channel_name').annotate(channel_videos_count=Count('video_id'))
- for entry in queryset:
- labels.append(entry['channel_name'])
- data.append(entry['channel_videos_count'])
- return JsonResponse(data={
- 'labels': labels,
- 'data': data,
- })
- def overall_playlists_distribution(request):
- labels = []
- data = []
- user_playlists = request.user.playlists.filter(is_in_db=True)
- total_num_playlists = user_playlists.count()
- statistics = {
- "public": 0,
- "private": 0,
- "favorites": 0,
- "watching": 0,
- "imported": 0,
- "youtube mixes": 0
- }
- if total_num_playlists != 0:
- statistics["public"] = user_playlists.filter(is_private_on_yt=False).count()
- statistics["private"] = user_playlists.filter(is_private_on_yt=True).count()
- statistics["favorites"] = user_playlists.filter(is_favorite=True).count()
- statistics["watching"] = user_playlists.filter(marked_as="watching").count()
- statistics["imported"] = user_playlists.filter(is_user_owned=False).count()
- statistics["youtube mixes"] = user_playlists.filter(is_yt_mix=True).count()
- for key, value in statistics.items():
- labels.append(key)
- data.append(value)
- return JsonResponse(data={
- 'labels': labels,
- 'data': data,
- })
- def watching_playlists_percent_distribution(request):
- labels = []
- data = []
- watching_playlists = request.user.playlists.filter(Q(is_in_db=True) & Q(marked_as="watching"))
- if watching_playlists.exists():
- for playlist in watching_playlists:
- labels.append(playlist.name)
- data.append(playlist.get_percent_complete())
- return JsonResponse(data={
- 'labels': labels,
- 'data': data,
- })
|