views.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. from django.contrib.auth.decorators import login_required
  2. from django.db.models import Q
  3. from django.http import HttpResponse
  4. from django.shortcuts import render, redirect, get_object_or_404
  5. from django.template import loader
  6. from django.views.decorators.http import require_POST
  7. from apps.main.models import Video, Tag
  8. @login_required
  9. def search(request):
  10. if request.method == "GET":
  11. return render(request, 'search_untube_page.html', {"playlists": request.user.playlists.all()})
  12. else:
  13. return redirect('home')
  14. @login_required
  15. @require_POST
  16. def search_UnTube(request):
  17. print(request.POST)
  18. search_query = request.POST["search"]
  19. all_playlists = request.user.playlists.filter(is_in_db=True)
  20. if 'playlist-tags' in request.POST:
  21. tags = request.POST.getlist('playlist-tags')
  22. for tag in tags:
  23. all_playlists = all_playlists.filter(tags__name=tag)
  24. channels = []
  25. if 'channel-names' in request.POST:
  26. channels = request.POST.getlist('channel-names')
  27. if request.POST['search-settings'] == 'playlists':
  28. playlists = all_playlists.filter(Q(name__istartswith=search_query) | Q(
  29. user_label__istartswith=search_query)) if search_query != "" else all_playlists.none()
  30. if search_query == "":
  31. playlists = all_playlists
  32. return HttpResponse(loader.get_template("intercooler/search_untube_results.html")
  33. .render({"playlists": playlists,
  34. "search_query": search_query}))
  35. else:
  36. playlists = all_playlists.filter(Q(name__icontains=search_query) | Q(
  37. user_label__istartswith=search_query)) if search_query != "" else all_playlists.none()
  38. if search_query == "":
  39. playlists = all_playlists
  40. videos = Video.objects.none()
  41. for playlist in playlists:
  42. pl_videos = playlist.videos.filter(is_unavailable_on_yt=False)
  43. videos = videos | pl_videos
  44. videos = videos.filter(
  45. Q(name__icontains=search_query) | Q(user_label__istartswith=search_query)).distinct()
  46. return HttpResponse(loader.get_template("intercooler/search_untube_results.html")
  47. .render({"videos": videos[:250],
  48. "show_all_videos": len(channels) > 0}))
  49. @login_required
  50. @require_POST
  51. def search_playlists(request, playlist_type):
  52. # print(request.POST) # prints <QueryDict: {'search': ['aa']}>
  53. search_query = request.POST["search"]
  54. watching = False
  55. playlists = None
  56. if playlist_type == "all":
  57. try:
  58. playlists = request.user.playlists.all().filter(Q(name__startswith=search_query) & Q(is_in_db=True))
  59. except:
  60. playlists = request.user.playlists.all()
  61. elif playlist_type == "user-owned": # YT playlists owned by user
  62. try:
  63. playlists = request.user.playlists.filter(
  64. Q(name__startswith=search_query) & Q(is_user_owned=True) & Q(is_in_db=True))
  65. except:
  66. playlists = request.user.playlists.filter(Q(is_user_owned=True) & Q(is_in_db=True))
  67. elif playlist_type == "imported": # YT playlists (public) owned by others
  68. try:
  69. playlists = request.user.playlists.filter(
  70. Q(name__startswith=search_query) & Q(is_user_owned=False) & Q(is_in_db=True))
  71. except:
  72. playlists = request.user.playlists.filter(Q(is_user_owned=True) & Q(is_in_db=True))
  73. elif playlist_type == "favorites": # YT playlists (public) owned by others
  74. try:
  75. playlists = request.user.playlists.filter(
  76. Q(name__startswith=search_query) & Q(is_favorite=True) & Q(is_in_db=True))
  77. except:
  78. playlists = request.user.playlists.filter(Q(is_favorite=True) & Q(is_in_db=True))
  79. elif playlist_type in ["watching", "plan-to-watch"]:
  80. try:
  81. playlists = request.user.playlists.filter(
  82. Q(name__startswith=search_query) & Q(marked_as=playlist_type) & Q(is_in_db=True))
  83. except:
  84. playlists = request.user.playlists.all().filter(Q(marked_as=playlist_type) & Q(is_in_db=True))
  85. if playlist_type == "watching":
  86. watching = True
  87. return HttpResponse(loader.get_template("intercooler/playlists.html")
  88. .render({"playlists": playlists,
  89. "watching": watching}))
  90. @login_required
  91. @require_POST
  92. def search_tagged_playlists(request, tag):
  93. tag = get_object_or_404(Tag, created_by=request.user, name=tag)
  94. playlists = tag.playlists.all()
  95. return HttpResponse("yay")