def delete_meeting(meeting_id): """ Endpoint to asynchronously delete meeting """ if not meeting_id: return jsonify( success=False, message=u'Ingen møte ID mottatt' ) meeting = Meeting.get_meeting_by_id(meeting_id) # Check if user is owner if meeting.user_id == current_user.id: # Delete meeting from db before deleting world meeting.delete() # Object still exists in memory after deleting from db if meeting.world_id: # Also delete world if it's not favoured world = World.get_by_id(meeting.world_id) if meeting.user_id == world.user_id and not world.favourite: if world.delete(): # Will return false if in use by meeting return jsonify( success=True, message=u'Møtet ble slettet', world_id=world.id ) return jsonify( success=True, message=u'Møtet ble slettet' ) return jsonify( success=False, message=u'Du har ikke tilgang til å slette dette møtet' )
def world_info(world_id): """ Endpoint to asynchronously get Minecraft world info as partial html """ if not world_id: return jsonify( success=False, message=u'Ingen verden ID mottatt' ) world = World.get_by_id(world_id) return render_template( 'world_info.html', world=world )
def generate_preview(world_id): """ Not used? """ if not world_id: return jsonify( success=False, message=u'Ingen verden ID mottatt' ) w = World.get_by_id(world_id) world_ref = w.file_ref success = files.generate_world_preview(world_ref) if success: w.preview = True w.store() return 'Genererer forhåndsvisning. Dette kan ta noen minutter.' else: return 'Failure'
def show_preview(world_id): """ Render Minecraft world preview page or generate preview if it doesn't exist """ if not world_id: return jsonify( success=False, message=u'Ingen verden ID mottatt' ) # TODO Check if preview files is present world = World.get_by_id(world_id) preview = tasks.generate_preview_task.AsyncResult(world.file_ref) if preview.status == 'PENDING': print(str(world_id) + " PENDING") # Probably not started. Start it. success = files.generate_world_preview(world.file_ref) if success: return jsonify( status='PENDING', message=u'Ingen forhåndsvisning lagret. Ber om forhåndsvisning...' ) else: return jsonify( status='FAILED', message=u'Noe gikk galt!' ) elif preview.status == 'SENT': print(str(world_id) + " SENT") # Received by the worker, and in queue. Tell user to wait. return jsonify( status='SENT', message=u'Forespørsel om forhåndsvisning er sendt. Hvis det er stor pågang kan dette ta en stund.' ) elif preview.status == 'STARTED': print(str(world_id) + " STARTED") # Generating preview return jsonify( status='STARTED', message=u'Vi lager en forhåndsvisning. Dette kan ta noen minutter.' ) elif preview.status == 'SUCCESS': print(str(world_id) + " SUCCESS") # Finished. Show the preview. print('forhåndsvisningen er ferdig') return render_template( 'preview.html', world_ref=world.file_ref, ), 200
def toggle_favourite(world_id): """ Endpoint to asynchronously toggle a Minecraft world as favourite """ if not world_id: return jsonify( success=False, message=u'Ingen verden ID mottatt' ) world = World.get_by_id(world_id) # Check if current user is owner if current_user.id == world.user_id: # Invert current setting and store world.favourite = not world.favourite world.store() return jsonify( success=True, message=u'Lagret som favoritt' if world.favourite else u'Favoritt fjernet', favourite=world.favourite ) return jsonify( success=False, message=u'Du har ikke tilgang til å lagre denne verdenen som favoritt' )
def delete_world(world_id): """ Endpoint to asynchronously delete Minecraft world """ if not world_id: return jsonify( success=False, message=u'Ingen verden ID mottatt' ) world = World.get_by_id(world_id) # Check if user is owner if world.user_id == current_user.id: if world.delete(): # Will return false if in use by meeting return jsonify( success=True, message=u'Minecraft verdenen ble slettet' ) return jsonify( success=False, message=u'Denne Minecraft verdenen er registrert brukt i et møte' ) return jsonify( success=False, message=u'Du har ikke tilgang til å slette denne Minecraft verdenen' )
def home(): """ Renders the home page """ # Meeting list will be shown at the bottom of the page meeting_list = Meeting.get_user_meetings(current_user.id) # Selected world (in meeting tab) defaults to None and gets overridden if there is a world selected world = None # Default to world selection tab # 0 is world selection tab and 1 is meeting details tab set_tab = 0 # Locale encoding used for day names # preferred_encoding = locale.getpreferredencoding() preferred_encoding = 'UTF-8' # A form is posted if request.method == 'POST': # If request is a redirect from map page, we will have a WorldForm world_form = forms.WorldForm(request.form) if world_form.validate(): # Go to meeting details tab set_tab = 1 # Show empty meeting form meeting_form = forms.MeetingForm() try: world_id = int(world_form.world_id.data) description = world_form.description.data world = World.get_by_id(world_id) if world: # Update description if changed if world.description != description: world.description = description world.store() # Put world ID in meeting form for reference meeting_form.world_id.process_data(str(world_id)) else: # World does not exist flash(u'Den valgte Minecraft verdenen eksisterer ikke') set_tab = 0 except ValueError: # A number was not supplied as world ID flash(u'world_id ValueError') return render_template( 'index.html', set_tab=set_tab, title=u'Hjem', meetings=meeting_list, form=meeting_form, world=world, action=url_for('home'), locale=preferred_encoding ) # Check if a meeting form is posted form = forms.MeetingForm(request.form) if form.validate(): # If valid, put data from form into Meeting object meeting = Meeting(user_id=current_user.id) form.populate_obj(meeting) if meeting.world_id: # World ID will be none if the posted value is not an integer if World.exists(meeting.world_id): # Check that the world exists in the database meeting.store() # Celery stuff # tasks.meeting_test.apply_async() tasks.meeting_test.apply_async(eta=meeting.start_time, expires=meeting.end_time) flash(u'Nytt møte lagt til') return redirect(url_for('home')) else: # World does not exist flash(u'Den valgte Minecraft verdenen eksisterer ikke') set_tab = 1 else: # World probably not chosen flash(u'Ingen Minecraft verden valgt') set_tab = 0 else: # Form not valid flash(u'Feil i skjema!') set_tab = 1 try: # Insert world info world_id = int(form.world_id.data) world = World.get_by_id(world_id) except ValueError: pass else: # If not POST # Serve blank form form = forms.MeetingForm() return render_template( 'index.html', set_tab=set_tab, title=u'Hjem', meetings=meeting_list, form=form, world=world, action=url_for('home'), locale=preferred_encoding )