Monitor Inactivity

import justpy as jp
import time
import asyncio


def mouse_moved(self, msg):
    print('mouse moved')
    msg.page.start_time = time.perf_counter()
    return True

async def idle_test():
    wp = jp.WebPage()
    wp.start_time = time.perf_counter()
    d = jp.Div(style='height: 100vh', a=wp)
    d.add_event('mousemove')
    d.on('mousemove', mouse_moved)
    wp.idle_div = jp.Div(text='Idle time', classes='m-4 text-lg', a=d)

    # Has to be in request handler so can be specific per page
    async def monitor_timer():
        keep_monitoring = True
        idle_threshold = 5
        while keep_monitoring:
            try:
                await asyncio.sleep(5)
                idle_time = time.perf_counter() - wp.start_time
                if idle_time > idle_threshold:
                    wp.idle_div.text = f'Idle for {idle_time} seconds'
                    jp.run_task(wp.update())
            except:
                # When page is closed, it will be erased, the exception will occur and the task will terminate
                keep_monitoring = False

    jp.run_task(monitor_timer())

    return wp

jp.justpy(idle_test)