Example #1
0
def removeImg(self, ImagesToRemove):
    # removing images
    toRemove = {}
    removedCount = 0
    for type, vals in ImagesToRemove.items():
        for img_type, v in vals.items():
            if len(v) > 0:
                debug.debug('=== REMOVING ' + type.upper() + ' ' +
                            img_type.upper() + ' IMAGES ===')
                for file in v:
                    if 'poster' == img_type:
                        toRemove[removedCount] = type + '_' + str(
                            file) + '.jpg'
                    if 'fanart' == img_type:
                        toRemove[removedCount] = type + '_' + str(
                            file) + '_f.jpg'
                    if 'thumb' == img_type:
                        toRemove[removedCount] = 'actors/' + str(file) + '.jpg'
                    if 'exthumb' == img_type:
                        toRemove[removedCount] = type + '_' + str(
                            file) + '.jpg'
                        removedCount += 1
                        toRemove[removedCount] = type + '_' + str(
                            file) + 'm.jpg'
                    removedCount += 1
    if len(toRemove) > 0:
        if sendRequest.send(self, 'removeimages', toRemove) is False:
            return False
        debug.notify(
            __lang__(32105).encode('utf-8') + ' ' +
            __lang__(32121).encode('utf-8') + ': ' + str(removedCount))
Example #2
0
def removeImg(self, ImagesToRemove):
    # removing images
    toRemove = {}
    removedCount = 0
    for type, vals in ImagesToRemove.items():
        for img_type, v in vals.items():
            if len(v) > 0:
                debug.debug('=== REMOVING ' + type.upper() + ' ' +
                            img_type.upper() + ' IMAGES ===')
                for file in v:
                    if 'poster' == img_type:
                        toRemove[removedCount] = type + '_' + str(
                            file) + '.jpg'
                    if 'fanart' == img_type:
                        toRemove[removedCount] = type + '_' + str(
                            file) + '_f.jpg'
                    if 'thumb' == img_type:
                        toRemove[removedCount] = 'actors/' + str(file) + '.jpg'
                    if 'exthumb' == img_type:
                        toRemove[removedCount] = type + '_' + str(
                            file) + '.jpg'
                        removedCount += 1
                        toRemove[removedCount] = type + '_' + str(
                            file) + 'm.jpg'
                    removedCount += 1
    if len(toRemove) > 0:
        if sendRequest.send(self, 'removeimages', toRemove) is False:
            return False
        debug.notify(
            __lang__(32105).encode('utf-8') + ' ' +
            __lang__(32121).encode('utf-8') + ': ' + str(removedCount))

        ImagesToRemove = {}
        for v_type in ImagesXBMC.keys():
            ImagesToRemove[v_type] = {}
            for img_type in ImagesXBMC[v_type].keys():
                ImagesToRemove[v_type][img_type] = set(
                    ImagesSite[v_type][img_type]) - set(
                        ImagesXBMC[v_type][img_type].keys())
        debug.debug('[ImagesToRemove]: ' + str(ImagesToRemove))
        removeImg(self, ImagesToRemove)

        # update hash
        value = {'images': str(hashImagesXBMC)}
        if sendRequest.send(self, 'updatehash', value) is False:
            return False
Example #3
0
def sync(self, ImagesXBMC, ImagesSORT, onlyAdd=False):
    # get panels list from XBMC

    ImagesSite = sendRequest.send(self, 'showimages')
    debug.debug('[ImagesSITE]: ' + str(ImagesSite))

    # prepare hash
    hashImagesXBMC = hashlib.md5(str(ImagesXBMC)).hexdigest()
    debug.debug('[hashImagesXBMC]: ' + str(hashImagesXBMC))
    if hashImagesXBMC != self.hashSITE['images'] or self.imageNeeded == True:
        debug.debug('[IMAGES UPDATE NEEDED]')
    else:
        debug.debug('[IMAGES UPDATE NOT NEEDED]')
        return False

    #prepare images to add
    ImagesToAdd = {}
    for v_type in ImagesXBMC.keys():
        ImagesToAdd[v_type] = {}
        for img_type in ImagesXBMC[v_type].keys():
            # check if user want sync images
            if self.setSITE['xbmc_' + img_type + 's'] == '1':
                ImagesToAdd[v_type][img_type] = set(
                    ImagesXBMC[v_type][img_type].keys()) - set(
                        ImagesSite[v_type][img_type])
    debug.debug('[ImagesToAdd]: ' + str(ImagesToAdd))
    addImg(self, ImagesXBMC, ImagesToAdd, ImagesSORT)

    #prepare images to remove
    if onlyAdd is False:
        ImagesToRemove = {}
        for v_type in ImagesXBMC.keys():
            ImagesToRemove[v_type] = {}
            for img_type in ImagesXBMC[v_type].keys():
                ImagesToRemove[v_type][img_type] = set(
                    ImagesSite[v_type][img_type]) - set(
                        ImagesXBMC[v_type][img_type].keys())
        debug.debug('[ImagesToRemove]: ' + str(ImagesToRemove))
        removeImg(self, ImagesToRemove)

        # update hash
        value = {'images': str(hashImagesXBMC)}
        if sendRequest.send(self, 'updatehash', value) is False:
            return False
Example #4
0
def remove(self, videoToRemove, table):

    removedCount = 0

    # get values
    values = {}
    for video in videoToRemove:
        removedCount += 1
        values[removedCount] = video

    # send requst
    if sendRequest.send(self, 'removevideo&t=' + table, values) is False:
        return False

    if removedCount > 0:
        debug.notify(
            __lang__(32105).encode('utf-8') + ' ' +
            __lang__(self.lang[table]).encode('utf-8') + ': ' +
            str(removedCount))
Example #5
0
def add(self, videosXBMC, videoToAdd, table, opt):

    # init progres bar
    addedCount = 0
    countToAdd = len(videoToAdd)
    self.progBar.create(
        __lang__(32200),
        __addonname__ + ', ' + __lang__(32204 if opt == 'add' else 32209) +
        ' ' + __lang__(self.lang[table]))

    for video in videoToAdd:
        start_time = time.time()

        # progress bar update
        p = int((float(100) / float(countToAdd)) * float(addedCount))
        progYear = ' (' + str(
            videosXBMC[table][video]
            ['year']) + ')' if 'year' in videosXBMC[table][video] else ''
        self.progBar.update(
            p,
            str(addedCount + 1) + '/' + str(countToAdd) + ' - ' +
            videosXBMC[table][video]['title'] + progYear)

        # get values
        values = prepareValues.prep(self, videosXBMC[table][video], table)

        # send requst
        if sendRequest.send(self, opt + 'video&t=' + table, values) is False:
            return False
        else:
            addedCount += 1
        debug.debug('[TIME]: ' + str(time.time() - start_time)[0:5])

    if addedCount > 0:
        debug.notify(
            __lang__(32104 if opt == 'add' else 32103).encode('utf-8') + ' ' +
            __lang__(self.lang[table]).encode('utf-8') + ': ' +
            str(addedCount))
Example #6
0
def sync(self, videosXBMC, videosSORT):

    for table in videosSORT:

        # check hash video library
        if hashlib.md5(str(
                videosXBMC[table])).hexdigest() == self.hashSITE[table]:
            debug.debug('[' + table.upper() + ' UPDATE NOT NEEDED]')
        else:
            debug.debug('[' + table.upper() + ' UPDATE NEEDED]')

            # if video has been updated force clean database and sync images
            self.cleanNeeded = True
            self.imageNeeded = True

            # get id and hash from site
            videosSite = sendRequest.send(self, 'showvideo&table=' + table, '')
            debug.debug('[' + table + 'SITE]: ' + str(videosSite))

            # prepare videos to add and remove
            videoToAdd = set(videosXBMC[table].keys()) - set(videosSite.keys())
            debug.debug('[' + table + 'ToAdd]: ' + str(videoToAdd))
            videoToRemove = set(videosSite.keys()) - set(
                videosXBMC[table].keys())
            debug.debug('[' + table + 'ToRemove]: ' + str(videoToRemove))

            # prepare videos to update
            videoToUpdate = {}
            for m in videosXBMC[table].keys():
                if m in videosSite:

                    # if hashes not match update video
                    if hashlib.md5(str(videosXBMC[table]
                                       [m])).hexdigest() != videosSite[m]:

                        # add hash to video array
                        videoToUpdate[m] = videosXBMC[table][m]
            debug.debug('[' + table + 'ToUpdate]: ' +
                        str(videoToUpdate.keys()))

            # add videos
            if len(videoToAdd) > 0:
                debug.debug('=== ADDING ' + table.upper() + ' VIDEOS ===')
                if add(self, videosXBMC, videoToAdd, table, 'add') is False:
                    self.progBar.close()
                    return False
                self.progBar.close()

            # remove videos
            if len(videoToRemove) > 0:
                debug.debug('=== REMOVING ' + table.upper() + ' VIDEOS ===')
                if remove(self, videoToRemove, table) is False:
                    return False

            # update videos
            if len(videoToUpdate) > 0:
                debug.debug('=== UPDATING ' + table.upper() + ' VIDEOS ===')
                if add(self, videosXBMC, videoToUpdate, table,
                       'update') is False:
                    self.progBar.close()
                    return False
                self.progBar.close()

            # update hash
            value = {table: hashlib.md5(str(videosXBMC[table])).hexdigest()}
            sendRequest.send(self, 'updatehash', value)
Example #7
0
def addImg(self, ImagesXBMC, ImagesToAdd, ImagesSORT):
    # adding new images
    for type in ImagesSORT['images']:

        for img_type in ImagesSORT[type]:

            if len(ImagesToAdd[type][img_type]) > 0:
                debug.debug('=== ADDING ' + type.upper() + ' ' +
                            img_type.upper() + ' IMAGES ===')

                countToAdd = len(ImagesToAdd[type][img_type])
                addedCount = 0
                self.progBar.create(
                    __lang__(32200), __addonname__ + ', ' + __lang__(32204) +
                    ' ' + __lang__(32121) + ' (' + __lang__(self.lang[type]) +
                    ' - ' + __lang__(self.lang[img_type]) + ')')

                for id in ImagesToAdd[type][img_type]:
                    # progress bar update
                    p = int(
                        (float(100) / float(countToAdd)) * float(addedCount))
                    self.progBar.update(
                        p,
                        str(addedCount + 1) + '/' + str(countToAdd) + ' - ' +
                        self.namesXBMC[type][id])

                    if 'poster' == img_type and 'episodes' in type:
                        t = art.create(ImagesXBMC[type][img_type][id], 'p',
                                       200, 113, 70)
                    if 'poster' == img_type and 'episodes' not in type:
                        t = art.create(ImagesXBMC[type][img_type][id], 'p',
                                       200, 294, 70)
                    if 'fanart' == img_type:
                        t = art.create(ImagesXBMC[type][img_type][id], 'f',
                                       1280, 720, 70)
                    if 'thumb' == img_type:
                        t = art.create(ImagesXBMC[type][img_type][id], 'a', 75,
                                       100, 70)
                    if 'exthumb' == img_type:
                        ex_size = self.setSITE['xbmc_exthumbs_q'].split('x')
                        t = art.create(
                            'image://' + urllib.quote_plus(
                                ImagesXBMC[type][img_type][id].encode('utf-8'))
                            + '/', 'e', int(ex_size[0]), int(ex_size[1]), 70)

                    if len(t) > 0:
                        if 'actors' in type:
                            name = 'actors/' + str(id) + '.jpg'
                        else:
                            f = '_f' if 'fanart' in img_type else ''
                            name = type + '_' + str(id) + f + '.jpg'
                        value = {'name': name, 'img': base64.b64encode(t)}
                        if sendRequest.send(self, 'addimages', value) is False:
                            self.progBar.close()
                            return False
                        addedCount += 1
                self.progBar.close()

                if addedCount > 0:
                    debug.notify(
                        __lang__(32104).encode('utf-8') + ' ' +
                        __lang__(32121).encode('utf-8') + ' (' +
                        __lang__(self.lang[type]).encode('utf-8') + ' - ' +
                        __lang__(self.lang[img_type]).encode('utf-8') + '): ' +
                        str(addedCount))
Example #8
0
def check(self):
    
    # get settings
    self.setSITE = sendRequest.send(self, 'checksettings')
    if self.setSITE is False:
        debug.notify(__lang__(32100).encode('utf-8'))
        return False
    if len(self.setSITE) > 0:
        for n, s in self.setSITE.items():
            debug.debug('Server: ' + n + ': ' + s)
    
    # post_max_size in bytes
    post_l = self.setSITE['POST_MAX_SIZE'].strip()[:-1]
    post_r = self.setSITE['POST_MAX_SIZE'].strip().lower()[-1:]
    v = { 'g': 3, 'm': 2, 'k': 1 }
    if post_r in v.keys():
        self.setSITE['POST_MAX_SIZE_B'] = int(post_l) * 1024 ** int(v[post_r])
    else:
        self.setSITE['POST_MAX_SIZE_B'] = int(post_l + post_r)
    debug.debug('Server: POST_MAX_SIZE_B: ' + str(self.setSITE['POST_MAX_SIZE_B']))
    
    # check master mode
    if self.setSITE['xbmc_master'] == '1':
        isMaster = xbmc.getCondVisibility('System.IsMaster')
        if isMaster == 0:
            return False
    
    # check version
    if 'version' not in self.setSITE or self.setSITE['version'] < self.versionWebScript:
        debug.notify(__lang__(32109).encode('utf-8'))
        debug.debug('Wrong Version of web script. Update is needed to version ' + self.versionWebScript + ' or higher')
        return False
    else:
        debug.debug('Version is valid')
    
    # check token
    if hashlib.md5(self.setXBMC['Token']).hexdigest() != self.setSITE['token_md5']:
        debug.notify(__lang__(32101).encode('utf-8'))
        debug.debug('Wrong Token')
        return False
    else:
        debug.debug('Token is valid')
    
    # only banner (mode = 2)
    if self.mode == 2:
        debug.debug('=== GENREATE BANNER (ONLY MODE) ===')
        if self.itemID != '' and self.itemTYPE != '':
            sendRequest.send(self, 'generatebanner', { 'id': self.itemID, 'type': self.itemTYPE })
        return False
    
    # get hash tables from site
    self.hashSITE = sendRequest.send(self, 'showhash')
    if self.hashSITE is False:
        return False
        
    # reset hash if forced start (mode = 0)
    if self.mode == 0:
        for t in self.hashSITE:
            self.hashSITE[t] = ""
    debug.debug('[hashSITE]: ' + str(self.hashSITE))
    
    self.lang = { 'movies': 32201, 'tvshows': 32202, 'episodes': 32203, 'poster': 32117, 'fanart': 32118, 'thumb': 32119, 'exthumb': 32120, 'actors': 32110 }
    
    self.panels = ['actor', 'genre', 'country', 'studio', 'director']
    
    self.tn = {
        'movies': 
        {
            'json': '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": {"properties": ["cast", "title", "plot", "rating", "year", "art", "runtime", "genre", "director", "originaltitle", "country", "set", "imdbnumber", "studio", "trailer", "playcount", "lastplayed", "dateadded", "streamdetails", "file"]}, "id": "1"}',
            'values' : ['id', 'table', 'title', 'originaltitle', 'year', 'rating', 'plot', 'set', 'imdbid', 'studio[]', 'genre[]', 'actor[]', 'runtime', 'country[]', 'director[]', 'trailer', 'file', 'last_played', 'play_count', 'date_added', 'stream[]', 'hash']
        },
        'tvshows':
        {
            'json': '{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties": ["title", "originaltitle", "plot", "genre", "cast", "art", "rating", "premiered", "playcount", "lastplayed", "dateadded"]}, "id": 1}',
            'values' : ['id', 'table', 'title', 'originaltitle', 'rating', 'plot', 'genre[]', 'actor[]', 'premiered', 'last_played', 'play_count', 'date_added', 'hash']
        },
        'episodes':
        {
            'json': '{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"properties": ["title", "plot", "episode", "season", "tvshowid", "art", "file", "firstaired", "playcount", "lastplayed", "dateadded", "streamdetails"]}, "id": 1}',
            'values' : ['id', 'table', 'title', 'plot', 'episode', 'season', 'tvshow', 'firstaired', 'last_played', 'play_count', 'date_added', 'file', 'stream[]', 'hash']
        }
    }
    
    # check source
    if 'true' in self.setXBMC['CheckSource']:
        jsonGetSource = '{"jsonrpc": "2.0", "method": "Files.GetSources", "params": {"media": "video"}, "id": 1}'
        jsonGetSource = xbmc.executeJSONRPC(jsonGetSource)
        jsonGetSource = unicode(jsonGetSource, 'utf-8', errors='ignore')
        jsonGetSourceResponse = json.loads(jsonGetSource)
        
        if 'result' in jsonGetSourceResponse and 'sources' in jsonGetSourceResponse['result']:
            for s in jsonGetSourceResponse['result']['sources']:
                if xbmcvfs.exists(s['file']) == 0:
                    debug.notify(__lang__(32123).encode('utf-8') + ': ' + s['file'].encode('utf-8'))
                    debug.debug('Source inaccessible: ' + s['file'].encode('utf-8'))
                    return False
    
    # get videos from XBMC
    dataSORT                            = {}
    dataSORT['videos']                  = ['movies', 'tvshows', 'episodes']
    
    dataSORT['images']                  = ['movies', 'tvshows', 'episodes', 'actors']
    dataSORT['movies']                  = ['poster', 'fanart', 'exthumb']
    dataSORT['tvshows']                 = ['poster', 'fanart']
    dataSORT['episodes']                = ['poster']
    dataSORT['actors']                  = ['thumb']
    
    if self.mode == 3 and self.itemID != '' and self.itemTYPE != '':
        debug.debug('=== UPDATE ONE VIDEO MODE ===')
        
        dataSORT['videos']                  = [self.itemTYPE+'s']
        
        tnMovies = json.loads(self.tn[self.itemTYPE+'s']['json'])
        tnMovies['method'] = 'VideoLibrary.GetMovieDetails' if self.itemTYPE == 'movie' else 'VideoLibrary.GetEpisodeDetails'
        tnMovies['params'][self.itemTYPE+'id'] = int(self.itemID)
        self.tn[self.itemTYPE+'s']['json'] = json.dumps(tnMovies)
        
        dataXBMC = getDataFromXBMC(self, dataSORT)
        
        if syncVideo.add(self, dataXBMC['videos'], [self.itemID], self.itemTYPE+'s', 'update') is False:
            self.progBar.close()
            return False
        self.progBar.close()
        
        syncImage.sync(self, dataXBMC['images'], dataSORT, True)
        
        return
    
    dataXBMC = getDataFromXBMC(self, dataSORT)
    
    # sync videos
    debug.debug('=== SYNC VIDEOS ===')
    self.cleanNeeded = False
    self.imageNeeded = False
    if syncVideo.sync(self, dataXBMC['videos'], dataSORT['videos']) is False:
        return False
    
    # sync images
    debug.debug('=== SYNC IMAGES ===')
    syncImage.sync(self, dataXBMC['images'], dataSORT)
    
    # send webserver settings
    if self.setSITE['xbmc_auto_conf_remote'] == '1':
        debug.debug('=== SYNC WEBSERVER SETTINGS ===')
        conf_remote = ['services.webserver', 'services.webserverport', 'services.webserverusername', 'services.webserverpassword']
        send_conf = {}
        for s in conf_remote:
            jsonGet = xbmc.executeJSONRPC('{"jsonrpc":"2.0","method":"Settings.GetSettingValue", "params":{"setting": "' + s + '"},"id":1}')
            jsonGet = unicode(jsonGet, 'utf-8', errors='ignore')
            jsonGetResponse = json.loads(jsonGet)
            send_conf[s.replace('services.', '')] = jsonGetResponse['result']['value']
        if send_conf['webserver'] == False:
            debug.notify(__lang__(32122).encode('utf-8'))
            debug.debug('Webserver is disabled')
        else:
            sendRequest.send(self, 'autoconfremote', send_conf)
    
    # start generate banner
    debug.debug('=== GENREATE BANNER ===')
    sendRequest.send(self, 'generatebanner', {'banner': ''})
    
    # start clean database
    if self.cleanNeeded is True:
        debug.debug('=== CLEAN DATABASE ===')
        sendRequest.send(self, 'cleandb', {'clean': ''})
def sync(self, ImagesXBMC, ImagesSORT):
    # get panels list from XBMC
    
    ImagesSite = sendRequest.send(self, 'showimages')
    debug.debug('[ImagesSITE]: ' + str(ImagesSite))
    
    # prepare hash
    hashImagesXBMC = hashlib.md5(str(ImagesXBMC)).hexdigest()
    debug.debug('[hashImagesXBMC]: ' + str(hashImagesXBMC))
    if hashImagesXBMC != self.hashSITE['images'] or self.imageNeeded == True:
        debug.debug('[IMAGES UPDATE NEEDED]')
    else:
        debug.debug('[IMAGES UPDATE NOT NEEDED]')
        return False
    
    #prepare images to add
    ImagesToAdd = {}
    for v_type in ImagesXBMC.keys():
        ImagesToAdd[v_type] = {}
        for img_type in ImagesXBMC[v_type].keys():
            # check if user want sync images
            if self.setSITE['xbmc_'+img_type+'s'] == '1':
                ImagesToAdd[v_type][img_type] = set(ImagesXBMC[v_type][img_type].keys()) - set(ImagesSite[v_type][img_type])
    debug.debug('[ImagesToAdd]: ' + str(ImagesToAdd))
    
    #prepare images to remove
    ImagesToRemove = {}
    for v_type in ImagesXBMC.keys():
        ImagesToRemove[v_type] = {}
        for img_type in ImagesXBMC[v_type].keys():
            ImagesToRemove[v_type][img_type] = set(ImagesSite[v_type][img_type]) - set(ImagesXBMC[v_type][img_type].keys())
    debug.debug('[ImagesToRemove]: ' + str(ImagesToRemove))
    
    # adding new images
    for type in ImagesSORT['images']:
        
        for img_type in ImagesSORT[type]:
            
            if len(ImagesToAdd[type][img_type]) > 0:
                debug.debug('=== ADDING ' + type.upper() + ' ' + img_type.upper() + ' IMAGES ===')
                
                countToAdd = len(ImagesToAdd[type][img_type])
                addedCount = 0
                self.progBar.create(__lang__(32200), __addonname__ + ', ' + __lang__(32204) + ' ' + __lang__(32121) + ' (' + __lang__(self.lang[type]) + ' - ' + __lang__(self.lang[img_type]) + ')')
                
                for id in ImagesToAdd[type][img_type]:
                    # progress bar update
                    p = int((float(100) / float(countToAdd)) * float(addedCount))
                    self.progBar.update(p, str(addedCount + 1) + '/' + str(countToAdd) + ' - ' + self.namesXBMC[type][id])
                    
                    if 'poster' == img_type and 'episodes' in type:
                        t = art.create(ImagesXBMC[type][img_type][id], 'p', 200, 113, 70)
                    if 'poster' == img_type and 'episodes' not in type:
                        t = art.create(ImagesXBMC[type][img_type][id], 'p', 200, 294, 70)
                    if 'fanart' == img_type:
                        t = art.create(ImagesXBMC[type][img_type][id], 'f', 1280, 720, 70)
                    if 'thumb' == img_type:
                        t = art.create(ImagesXBMC[type][img_type][id], 'a', 75, 100, 70)
                    if 'exthumb' == img_type:
                        ex_size = self.setSITE['xbmc_exthumbs_q'].split('x')
                        t = art.create('image://' + urllib.quote_plus(ImagesXBMC[type][img_type][id].encode('utf-8')) + '/', 'e', int(ex_size[0]), int(ex_size[1]), 70)
                    
                    if len(t) > 0:
                        if 'actors' in type:
                            name = 'actors/' + str(id) + '.jpg'
                        else:
                            f = '_f' if 'fanart' in img_type else ''
                            name = type + '_' + str(id) + f + '.jpg'
                        value = {
                            'name': name,
                            'img': base64.b64encode(t)
                        }
                        if sendRequest.send(self, 'addimages', value) is False:
                            self.progBar.close()
                            return False
                    addedCount += 1
                self.progBar.close()
                
                if addedCount > 0:
                    debug.notify(__lang__(32104).encode('utf-8') + ' ' + __lang__(32121).encode('utf-8') + ' (' + __lang__(self.lang[type]).encode('utf-8') + ' - ' + __lang__(self.lang[img_type]).encode('utf-8') + '): ' + str(addedCount))
    
    # removing images
    toRemove = {}
    removedCount = 0
    for type, vals in ImagesToRemove.items():
        for img_type, v in vals.items():
            if len(v) > 0:
                debug.debug('=== REMOVING ' + type.upper() + ' ' + img_type.upper() + ' IMAGES ===')
                for file in v:
                    if 'poster' == img_type:
                        toRemove[removedCount] = type + '_' + str(file) + '.jpg'
                    if 'fanart' == img_type:
                        toRemove[removedCount] = type + '_' + str(file) + '_f.jpg'
                    if 'thumb' == img_type:
                        toRemove[removedCount] = 'actors/' + str(file) + '.jpg'
                    if 'exthumb' == img_type:
                        toRemove[removedCount] = type + '_' + str(file) + '.jpg'
                        removedCount += 1
                        toRemove[removedCount] = type + '_' + str(file) + 'm.jpg'
                    removedCount += 1
    if len(toRemove) > 0:
        if sendRequest.send(self, 'removeimages', toRemove) is False:
            return False
        debug.notify(__lang__(32105).encode('utf-8') + ' ' + __lang__(32121).encode('utf-8') + ': ' + str(removedCount))
    
    # update hash
    value = { 'images': str(hashImagesXBMC) }
    if sendRequest.send(self, 'updatehash', value) is False:
        return False