def __init__(self, skin_file, addon_path):
     log('script.__init__ started')
     self.ScraperManager = ScraperManager(SCRAPERS_PATH)
class GUI(xbmcgui.WindowXML):

    CONTROL_MAIN_IMAGE = 100
    CONTROL_VISIBLE = 102
    CONTROL_ASPECT_KEEP = 103
    CONTROL_ARROWS = 104
    ACTION_CONTEXT_MENU = [117]
    ACTION_PREVIOUS_MENU = [9, 92, 10]
    ACTION_SHOW_INFO = [11]
    ACTION_EXIT_SCRIPT = [13]
    ACTION_DOWN = [4]
    ACTION_UP = [3]
    ACTION_0 = [58, 18]
    ACTION_PLAY = [79]

    def __init__(self, skin_file, addon_path):
        log('script.__init__ started')
        self.ScraperManager = ScraperManager(SCRAPERS_PATH)

    def onInit(self):
        log('script.onInit started')
        self.show_info = True
        self.aspect_keep = True
        self.last_seen_album_id = 0
        if Addon.getSetting('show_arrows') == 'false':
            self.getControl(self.CONTROL_ARROWS).setVisible(False)
        if Addon.getSetting('aspect_ratio2') == '0':
            self.getControl(self.CONTROL_ASPECT_KEEP).setVisible(False)
        self.showHelp()
        self.showAlbums()
        self.setFocus(self.getControl(self.CONTROL_MAIN_IMAGE))
        log('script.onInit finished')

    def onAction(self, action):
        action_id = action.getId()
        if action_id in self.ACTION_SHOW_INFO:
            self.toggleInfo()
        elif action_id in self.ACTION_CONTEXT_MENU:
            self.download_album()
        elif action_id in self.ACTION_PREVIOUS_MENU:
            if self.current_mode == 'albums':
                self.close()
            elif self.current_mode == 'photos':
                self.showAlbums(self.last_seen_album_id)
        elif action_id in self.ACTION_EXIT_SCRIPT:
            self.close()
        elif action_id in self.ACTION_DOWN and self.current_mode == 'albums':
            self.ScraperManager.switch_to_next()
            self.showAlbums()
        elif action_id in self.ACTION_UP and self.current_mode == 'albums':
            self.ScraperManager.switch_to_previous()
            self.showAlbums()
        elif action_id in self.ACTION_0:
            self.toggleAspect()
        elif action_id in self.ACTION_PLAY:
            self.startSlideshow()

    def onClick(self, controlId):
        if controlId == self.CONTROL_MAIN_IMAGE:
            if self.current_mode == 'albums':
                self.showPhotos()
            elif self.current_mode == 'photos':
                self.toggleInfo()

    def showPhotos(self):
        log('script.showPhotos started')
        self.last_seen_album_id = int(self.getProperty('album_id'))
        self.current_mode = 'photos'
        w = xbmcgui.Window(xbmcgui.getCurrentWindowId())
        w.setProperty('Category', 'Photo')
        album_url = self.getProperty('album_url')
        self.getControl(self.CONTROL_MAIN_IMAGE).reset()
        photos = self.ScraperManager.get_photos(album_url)
        self.addItems(photos)
        log('script.showPhotos finished')

    def showAlbums(self, switch_to_album_id=0):
        log('script.showAlbums started with switch to album_id: %s'
            % switch_to_album_id)
        self.current_mode = 'albums'
        w = xbmcgui.Window(xbmcgui.getCurrentWindowId())
        w.setProperty('Category', 'Album')
        self.getControl(self.CONTROL_MAIN_IMAGE).reset()
        albums = self.ScraperManager.get_albums()
        self.addItems(albums)
        if switch_to_album_id:
            c = self.getControl(self.CONTROL_MAIN_IMAGE)
            c.selectItem(switch_to_album_id)
        log('script.showAlbums finished')

    def addItems(self, items):
        log('script.addItems started')
        for item in items:
            li = xbmcgui.ListItem(label=item['title'],
                                  label2=item['description'],
                                  iconImage=item['pic'])
            li.setProperty('album', self.ScraperManager.scraper_title)
            if 'album_url' in item.keys():
                li.setProperty('album_url', item['album_url'])
            if 'album_id' in item.keys():
                li.setProperty('album_id', str(item['album_id']))
            self.getControl(self.CONTROL_MAIN_IMAGE).addItem(li)

    def getProperty(self, property):
        c = self.getControl(self.CONTROL_MAIN_IMAGE)
        return c.getSelectedItem().getProperty(property)

    def toggleInfo(self):
        c = self.getControl(self.CONTROL_VISIBLE)
        self.show_info = not self.show_info
        c.setVisible(self.show_info)

    def toggleAspect(self):
        c = self.getControl(self.CONTROL_ASPECT_KEEP)
        self.aspect_keep = not self.aspect_keep
        c.setVisible(self.aspect_keep)

    def startSlideshow(self):
        log('script.startSlideshow started')
        params = {}
        params['scraper_id'] = self.ScraperManager.scraper_id
        params['mode'] = 'photos'
        params['album_url'] = self.getProperty('album_url')
        if Addon.getSetting('random_slideshow') == 'true':
            random = 'random'
        else:
            random = 'notrandom'
        url = 'plugin://%s/?%s' % (Addon.getAddonInfo('id'),
                                   urllib.urlencode(params))
        log('script.startSlideshow using url=%s' % url)
        xbmc.executebuiltin('Slideshow(%s, recursive, %s)'
                            % (url, random))
        log('script.startSlideshow finished')

    def download_album(self):
        log('script.download_album started')
        download_path = Addon.getSetting('download_path')
        if not download_path:
            s = Addon.getLocalizedString(32300)  # Choose default download path
            new_path = xbmcgui.Dialog().browse(3, s, 'pictures')
            if not new_path:
                return
            else:
                download_path = new_path
                Addon.setSetting('download_path', download_path)
        log('script.download_album using download_path="%s"' % download_path)
        album_url = self.getProperty('album_url')
        items = self.ScraperManager.get_photos(album_url)
        downloader.Downloader(items, download_path)
        log('script.download_album finished')

    def showHelp(self):
        if not Addon.getSetting('dont_show_help') == 'true':
            Addon.openSettings()