TandoorRecipes/cookbook/views/api.py
2020-02-19 16:55:13 +01:00

71 lines
2.0 KiB
Python

from django.contrib import messages
from django.http import HttpResponse
from django.urls import reverse
from django.utils.translation import gettext as _
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect
from cookbook.models import Recipe, Sync, Storage
from cookbook.provider.dropbox import Dropbox
from cookbook.provider.nextcloud import Nextcloud
def update_recipe_links(recipe):
if recipe.storage.method == Storage.DROPBOX:
provider = Dropbox
elif recipe.storage.method == Storage.NEXTCLOUD:
provider = Nextcloud
else:
raise Exception('Provider not implemented')
if not recipe.link:
recipe.link = provider.get_share_link(recipe) # TODO response validation in apis
if not recipe.cors_link:
try:
recipe.cors_link = provider.get_cors_link(recipe)
except Exception:
pass
recipe.save()
@login_required
def get_external_file_link(request, recipe_id):
recipe = Recipe.objects.get(id=recipe_id)
if not recipe.link:
update_recipe_links(recipe)
return HttpResponse(recipe.link)
@login_required
def get_cors_file_link(request, recipe_id):
recipe = Recipe.objects.get(id=recipe_id)
if not recipe.cors_link:
update_recipe_links(recipe)
return HttpResponse(recipe.cors_link)
@login_required
def sync_all(request):
monitors = Sync.objects.filter(active=True)
error = False
for monitor in monitors:
if monitor.storage.method == Storage.DROPBOX:
ret = Dropbox.import_all(monitor)
if not ret:
error = True
if monitor.storage.method == Storage.NEXTCLOUD:
ret = Nextcloud.import_all(monitor)
if not ret:
error = True
if not error:
messages.add_message(request, messages.SUCCESS, _('Sync successful!'))
return redirect('list_import')
else:
messages.add_message(request, messages.ERROR, _('Error synchronizing with Storage'))
return redirect('list_import')