Ejemplo n.º 1
0
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'
    )
Ejemplo n.º 2
0
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
    )
Ejemplo n.º 3
0
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'
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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'
    )
Ejemplo n.º 6
0
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'
    )
Ejemplo n.º 7
0
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
    )