def advanced_menu():
    """ Second Level Menu which provides advanced options """

    for camera_number in "123456":

        if settings.enabled_camera(camera_number):

            list_label = settings.getCameraName(camera_number)

            # List submenus for each enabled camera
            addDirectoryItem(name=list_label + ' ' + utils.translation(32029),
                             isFolder=True,
                             icon=utils.get_icon(camera_number),
                             fanart=utils.get_fanart(camera_number),
                             parameters={
                                 'action': 'advanced_camera',
                                 'camera_number': camera_number
                             })

    # Toggle Preview Ability to be activated by alarms
    addDirectoryItem(name=utils.translation(32217),
                     icon=utils.get_icon('settings'),
                     fanart=utils.get_fanart('default'),
                     parameters={'action': 'toggle_preview'})

    # Add-on Settings
    addDirectoryItem(name=utils.translation(32028),
                     icon=utils.get_icon('settings'),
                     fanart=utils.get_fanart('default'),
                     parameters={'action': 'settings'})

    # Restart the preview service
    addDirectoryItem(name='Restart Preview Service',
                     icon=utils.get_icon('settings'),
                     fanart=utils.get_fanart('default'),
                     parameters={'action': 'restart_service'})

    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
def advanced_menu():                                                
    """ Second Level Menu which provides advanced options """
    
    for camera_number in "123456":
        
        if settings.enabled_camera(camera_number):
            
            list_label = settings.getCameraName(camera_number)
            
            # List submenus for each enabled camera
            addDirectoryItem(name =  list_label + ' ' + utils.translation(32029),
                             isFolder = True,
                             icon = utils.get_icon(camera_number),
                             fanart = utils.get_fanart(camera_number),
                             parameters = {'action': 'advanced_camera',
                                           'camera_number': camera_number})
    

    # Toggle Preview Ability to be activated by alarms
    addDirectoryItem(name = utils.translation(32217),
                     icon = utils.get_icon('settings'), 
                     fanart = utils.get_fanart('default'),
                     parameters = {'action': 'toggle_preview'})

    # Add-on Settings  
    addDirectoryItem(name = utils.translation(32028),
                     icon = utils.get_icon('settings'), 
                     fanart = utils.get_fanart('default'),
                     parameters = {'action': 'settings'})

    # Restart the preview service
    addDirectoryItem(name = 'Restart Preview Service',
                     icon = utils.get_icon('settings'), 
                     fanart = utils.get_fanart('default'),
                     parameters = {'action': 'restart_service'})
        
    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
def advanced_camera_menu(camera_number):                                                
    """ Third Level Advanced Menu for additional IP Camera Functions """
    
    #EXTENDED MENU IDEAS
    #FPS Test
    #Force Show preview mjpeg / snapshot
    #Show snapshot

    if settings.getSetting('enabled_preview', camera_number) == 'true':
        
        #Show Preview
        addDirectoryItem(name = utils.translation(32210),
                     icon = utils.get_icon('settings'),
                     fanart = utils.get_fanart(camera_number),
                     parameters = {'action': 'show_preview',
                                   'camera_number': camera_number})
        
        #Disable Preview
        addDirectoryItem(name = utils.translation(32212),
                         icon = utils.get_icon('settings'),
                         fanart = utils.get_fanart(camera_number),
                         parameters = {'action': 'disable_preview',
                                       'camera_number': camera_number})

    else:
        
        #Enable Preview
        addDirectoryItem(name = utils.translation(32211),
                         icon = utils.get_icon('settings'),
                         fanart = utils.get_fanart(camera_number),
                         parameters = {'action': 'enable_preview',
                                       'camera_number': camera_number})

    if settings.getSetting_int('fanart') == 1:
        
        #Update Fanart
        addDirectoryItem(name = utils.translation(32213),
                         icon = utils.get_icon('settings'),
                         fanart = utils.get_fanart(camera_number),
                         parameters = {'action': 'update_fanart',
                                       'camera_number': camera_number})
    
    camera_type = settings.getCameraType(camera_number)
    
    if camera_type < 3:

        #Play Stream no Controls
        addDirectoryItem(name = utils.translation(32214),
                         icon = utils.get_icon('settings'),
                         fanart = utils.get_fanart(camera_number),
                         parameters = {'action': 'single_camera_no_controls',
                                       'camera_number': camera_number})
        
        
        #Camera Settings
        addDirectoryItem(name = utils.translation(32215),
                         icon = utils.get_icon('settings'),
                         fanart = utils.get_fanart(camera_number),
                         parameters = {'action': 'camera_settings',
                                       'camera_number': camera_number})

        #Reboot Camera
        addDirectoryItem(name = utils.translation(32216),
                         icon = utils.get_icon('settings'),
                         fanart = utils.get_fanart(camera_number),
                         parameters = {'action': 'reboot',
                                       'camera_number': camera_number})


    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
def main_menu():                                                
    """ First Level Menu to access main functions """

    if settings.atLeastOneCamera():

        # All Camera Player
        addDirectoryItem(name = utils.translation(32027),
                         icon = utils.get_icon('default'),
                         fanart = utils.get_fanart('default'),
                         parameters = {'action': 'all_cameras'})

        for camera_number in "123456":
            
            if settings.enabled_camera(camera_number):
                
                camera = Camera(camera_number)
                list_label = settings.getCameraName(camera_number)

                # Build Context Menu
                li = li = xbmcgui.ListItem(list_label)
                context_items = []

                if settings.getSetting('enabled_preview', camera_number) == 'true':
                    #Show Preview
                    context_items.append((utils.translation(32210), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=show_preview&camera_number=%s)' %camera_number))

                    #Disable Preview
                    context_items.append((utils.translation(32212), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=disable_preview&camera_number=%s)' %camera_number))
                else:
                    #Enable Preview
                    context_items.append((utils.translation(32211), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=enable_preview&camera_number=%s)' %camera_number))
                
                camera_type = settings.getCameraType(camera_number)
                if camera_type < 3:
                    #Play Stream no Controls
                    context_items.append((utils.translation(32214), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=single_camera_no_controls&camera_number=%s)' %camera_number))

                    #Camera Settings
                    context_items.append((utils.translation(32215), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=camera_settings&camera_number=%s)' %camera_number))

                # Update Fanart
                if settings.getSetting_int('fanart') == 1:
                    context_items.append((utils.translation(32213), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=update_fanart&camera_number=%s)' %camera_number))
                    
                li.addContextMenuItems(context_items, replaceItems=True)

                # Fanart URL
                new_art_url = None
                if camera.Connected(monitor):
                    new_art_url = camera.getSnapShotUrl()
                else:
                    if camera.Connected(monitor, False):
                        new_art_url = camera.getSnapShotUrl()
                
                # Single Camera Player for enabled cameras
                addDirectoryItem(name = list_label, 
                                 icon = utils.get_icon(camera_number),
                                 fanart = utils.get_fanart(camera_number, new_art_url),
                                 li = li, 
                                 parameters = {'action': 'single_camera',
                                               'camera_number': camera_number})

        # Link to Second Level Advanced Menu
        addDirectoryItem(name = utils.translation(32029),
                         isFolder = True,
                         icon = utils.get_icon('advanced'), 
                         fanart = utils.get_fanart('default'),
                         parameters={'action': 'advanced'})

    else:

        # Add-on Settings if no cameras are configured
        addDirectoryItem(name = utils.translation(32028),
                     icon = utils.get_icon('settings'), 
                     fanart = utils.get_fanart('default'),
                     parameters = {'action': 'settings'})

    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
    utils.cleanup_images()     
    # Enable Preview 
    elif action == 'enable_preview':
        settings.setSetting('enabled_preview', camera_number, 'true')
        xbmc.executebuiltin('Container.Refresh')


    # Toggle All Preview
    elif action == 'toggle_preview':
        monitor.togglePreview()

    
    # Update Fanart
    elif action == 'update_fanart':
        camera = Camera(camera_number)
        if camera.Connected(monitor, False):
            utils.get_fanart(camera_number, camera.getSnapShotUrl(), update = True)
            xbmc.executebuiltin('Container.Refresh')
            
        else:
            utils.notify(utils.translation(32222))


    # Restart Preview Service
    elif action == 'restart_service':
        monitor.stop()


    # Preliminary attempt to show an overlay based on a URL, not fully tested and does not close on its own yet
    elif action == 'show_preview_custom':
        url = params.get('url', '')
        if url != '':
def advanced_camera_menu(camera_number):
    """ Third Level Advanced Menu for additional IP Camera Functions """

    #EXTENDED MENU IDEAS
    #FPS Test
    #Force Show preview mjpeg / snapshot
    #Show snapshot

    if settings.getSetting('enabled_preview', camera_number) == 'true':

        #Show Preview
        addDirectoryItem(name=utils.translation(32210),
                         icon=utils.get_icon('settings'),
                         fanart=utils.get_fanart(camera_number),
                         parameters={
                             'action': 'show_preview',
                             'camera_number': camera_number
                         })

        #Disable Preview
        addDirectoryItem(name=utils.translation(32212),
                         icon=utils.get_icon('settings'),
                         fanart=utils.get_fanart(camera_number),
                         parameters={
                             'action': 'disable_preview',
                             'camera_number': camera_number
                         })

    else:

        #Enable Preview
        addDirectoryItem(name=utils.translation(32211),
                         icon=utils.get_icon('settings'),
                         fanart=utils.get_fanart(camera_number),
                         parameters={
                             'action': 'enable_preview',
                             'camera_number': camera_number
                         })

    if settings.getSetting_int('fanart') == 1:

        #Update Fanart
        addDirectoryItem(name=utils.translation(32213),
                         icon=utils.get_icon('settings'),
                         fanart=utils.get_fanart(camera_number),
                         parameters={
                             'action': 'update_fanart',
                             'camera_number': camera_number
                         })

    camera_type = settings.getCameraType(camera_number)

    if camera_type < 3:

        #Play Stream no Controls
        addDirectoryItem(name=utils.translation(32214),
                         icon=utils.get_icon('settings'),
                         fanart=utils.get_fanart(camera_number),
                         parameters={
                             'action': 'single_camera_no_controls',
                             'camera_number': camera_number
                         })

        #Camera Settings
        addDirectoryItem(name=utils.translation(32215),
                         icon=utils.get_icon('settings'),
                         fanart=utils.get_fanart(camera_number),
                         parameters={
                             'action': 'camera_settings',
                             'camera_number': camera_number
                         })

        #Reboot Camera
        addDirectoryItem(name=utils.translation(32216),
                         icon=utils.get_icon('settings'),
                         fanart=utils.get_fanart(camera_number),
                         parameters={
                             'action': 'reboot',
                             'camera_number': camera_number
                         })

    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
def main_menu():
    """ First Level Menu to access main functions """

    if settings.atLeastOneCamera():

        # All Camera Player
        addDirectoryItem(name=utils.translation(32027),
                         icon=utils.get_icon('default'),
                         fanart=utils.get_fanart('default'),
                         parameters={'action': 'all_cameras'})

        for camera_number in "123456":

            if settings.enabled_camera(camera_number):

                camera = Camera(camera_number)
                list_label = settings.getCameraName(camera_number)

                # Build Context Menu
                li = li = xbmcgui.ListItem(list_label)
                context_items = []

                if settings.getSetting('enabled_preview',
                                       camera_number) == 'true':
                    #Show Preview
                    context_items.append((utils.translation(
                        32210
                    ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=show_preview&camera_number=%s)'
                                          % camera_number))

                    #Disable Preview
                    context_items.append((utils.translation(
                        32212
                    ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=disable_preview&camera_number=%s)'
                                          % camera_number))
                else:
                    #Enable Preview
                    context_items.append((utils.translation(
                        32211
                    ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=enable_preview&camera_number=%s)'
                                          % camera_number))

                camera_type = settings.getCameraType(camera_number)
                if camera_type < 3:
                    #Play Stream no Controls
                    context_items.append((utils.translation(
                        32214
                    ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=single_camera_no_controls&camera_number=%s)'
                                          % camera_number))

                    #Camera Settings
                    context_items.append((utils.translation(
                        32215
                    ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=camera_settings&camera_number=%s)'
                                          % camera_number))

                # Update Fanart
                if settings.getSetting_int('fanart') == 1:
                    context_items.append((utils.translation(
                        32213
                    ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=update_fanart&camera_number=%s)'
                                          % camera_number))

                li.addContextMenuItems(context_items, replaceItems=True)

                # Fanart URL
                new_art_url = None
                if camera.Connected(monitor):
                    new_art_url = camera.getSnapShotUrl()
                else:
                    if camera.Connected(monitor, False):
                        new_art_url = camera.getSnapShotUrl()

                # Single Camera Player for enabled cameras
                addDirectoryItem(name=list_label,
                                 icon=utils.get_icon(camera_number),
                                 fanart=utils.get_fanart(
                                     camera_number, new_art_url),
                                 li=li,
                                 parameters={
                                     'action': 'single_camera',
                                     'camera_number': camera_number
                                 })

        # Link to Second Level Advanced Menu
        addDirectoryItem(name=utils.translation(32029),
                         isFolder=True,
                         icon=utils.get_icon('advanced'),
                         fanart=utils.get_fanart('default'),
                         parameters={'action': 'advanced'})

    else:

        # Add-on Settings if no cameras are configured
        addDirectoryItem(name=utils.translation(32028),
                         icon=utils.get_icon('settings'),
                         fanart=utils.get_fanart('default'),
                         parameters={'action': 'settings'})

    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
    utils.cleanup_images()
    # Enable Preview
    elif action == 'enable_preview':
        settings.setSetting('enabled_preview', camera_number, 'true')
        xbmc.executebuiltin('Container.Refresh')

    # Toggle All Preview
    elif action == 'toggle_preview':
        monitor.togglePreview()

    # Update Fanart
    elif action == 'update_fanart':
        camera = Camera(camera_number)
        if camera.Connected(monitor, False):
            utils.get_fanart(camera_number,
                             camera.getSnapShotUrl(),
                             update=True)
            xbmc.executebuiltin('Container.Refresh')

        else:
            utils.notify(utils.translation(32222))

    # Restart Preview Service
    elif action == 'restart_service':
        monitor.stop()

    # Preliminary attempt to show an overlay based on a URL, not fully tested and does not close on its own yet
    elif action == 'show_preview_custom':
        url = params.get('url', '')
        if url != '':
            monitor.overrideURL(camera_number, url)