views.py 4.5 KB

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