Beispiel #1
0
 def change_thumb(self, row_id, thumb):
     execute = 'UPDATE {0!s} SET thumbnail=? WHERE id=? AND addon_id=?'.format(
         self.TABLE)
     result = DATABASE.execute(execute, (unquote(thumb), row_id, self.ID))
     if result != 1:
         kodi.notify(msg=kodi.i18n('thumbchange_failed'), sound=False)
     return result
Beispiel #2
0
 def rename_row_id(self, row_id, label):
     execute = 'UPDATE {0!s} SET label=? WHERE id=? AND addon_id=?'.format(
         self.TABLE)
     result = DATABASE.execute(execute, (label, row_id, self.ID))
     if result != 1:
         kodi.notify(msg=kodi.i18n('rename_failed'), sound=False)
     return result
def get_video_info(url):
    info = YDStreamExtractor.getVideoInfo(url)
    if hasattr(info, '_streams'):
        return info
    else:
        log_utils.log('Stream not available: |%s|' % url, log_utils.LOGERROR)
        kodi.notify(msg=kodi.i18n('stream_not_available'), sound=False)
        return None
Beispiel #4
0
def get_video_info(url):
    info = YDStreamExtractor.getVideoInfo(url)
    if hasattr(info, '_streams'):
        return info
    else:
        log_utils.log('Stream not available: |%s|' % url, log_utils.LOGERROR)
        kodi.notify(msg=kodi.i18n('stream_not_available'), sound=False)
        return None
Beispiel #5
0
 def delete_row_id(self, row_id):
     execute = 'DELETE FROM {0!s} WHERE id=? AND addon_id=?'.format(
         self.TABLE)
     result, rowcount = DATABASE.execute_w_rowcount(execute,
                                                    (row_id, self.ID))
     if result != 1:
         kodi.notify(msg=kodi.i18n('delete_failed'), sound=False)
     return result, rowcount
Beispiel #6
0
 def delete_url(self, url):
     execute = 'DELETE FROM {0!s} WHERE url=? AND addon_id=?'.format(
         self.TABLE)
     result, rowcount = DATABASE.execute_w_rowcount(execute, (url, self.ID))
     if result != 1:
         kodi.notify(msg=kodi.i18n('delete_failed'), sound=False)
     if rowcount > 0:
         self.vacuum()
     return result, rowcount
Beispiel #7
0
def clear_cache():
    confirmed = kodi.Dialog().yesno(kodi.i18n('confirm'),
                                    kodi.i18n('cache_yes_no'))
    if confirmed:
        result = cache.reset_cache()
        if result:
            kodi.notify(msg=kodi.i18n('cache_success'), sound=False)
        else:
            kodi.notify(msg=kodi.i18n('cache_failed'), sound=False)
def _download(info, background=True):
    if background:
        YDStreamExtractor.handleDownload(info, bg=True)
    else:
        result = YDStreamExtractor.handleDownload(info, bg=False)
        if result:
            log_utils.log('Download complete: |%s|' % result.filepath)
        elif result.status != 'canceled':
            log_utils.log('Download failed: |%s|' % result.message, log_utils.LOGERROR)
            kodi.notify(msg=result.message, sound=True)
        else:
            log_utils.log('Download cancelled')
Beispiel #9
0
 def clear(self, ctype=None):
     if ctype is None:
         result = DATABASE.execute('DROP TABLE {0!s}'.format(self.TABLE),
                                   '')
     else:
         result = DATABASE.execute(
             'DELETE FROM {0!s} WHERE content_type=?'.format(self.TABLE),
             (ctype, ))
     if result == 1:
         self.vacuum()
         kodi.notify(msg=kodi.i18n('history_cleared'), sound=False)
     else:
         kodi.notify(msg=kodi.i18n('fail_history_clear'), sound=False)
Beispiel #10
0
def _download(info, background=True):
    if background:
        YDStreamExtractor.handleDownload(info, bg=True)
    else:
        result = YDStreamExtractor.handleDownload(info, bg=False)
        if result:
            log_utils.log('Download complete: |%s|' % result.filepath)
        elif result.status != 'canceled':
            log_utils.log('Download failed: |%s|' % result.message,
                          log_utils.LOGERROR)
            kodi.notify(msg=result.message, sound=True)
        else:
            log_utils.log('Download cancelled')
Beispiel #11
0
def download_audio(video_id, background=True):
    url = YOUTUBE_VIDEO_URL % video_id
    info = get_video_info(url)
    if info:
        stream = info._streams[0]
        ytdl_format = stream.get('ytdl_format', {})
        formats = ytdl_format.get('formats', [])
        best_quality = 0
        best_format = None
        if formats:
            for fmt in formats:
                fmt_desc = fmt.get('format', '')
                log_utils.log('format: |%s|' % fmt_desc)
                if 'audio only' in fmt_desc.lower():
                    format_id = fmt.get('format_id', '')
                    asr = fmt.get('asr', '')
                    tbr = fmt.get('tbr', '')
                    abr = fmt.get('abr', '')
                    ext = fmt.get('ext', '')
                    log_utils.log(
                        'id: |%s| ext: |%s| asr: |%s| tbr: |%s| abr: |%s|' %
                        (format_id, ext, asr, tbr, abr))
                    if 'm4a' in ext:
                        tbr = int(fmt.get('tbr'))
                        if tbr > best_quality:
                            best_quality = tbr
                            best_format = fmt
                            log_utils.log(
                                'Updated best_format: |%s| id: |%s| ext: |%s| asr: |%s| tbr: |%s| abr: |%s|'
                                % (fmt_desc, format_id, ext, asr, tbr, abr))
            if best_format:
                stream['xbmc_url'] = best_format[
                    'url'] + '|' + urllib.urlencode({'User-Agent': USER_AGENT})
                stream['url'] = best_format['url']
                stream['ytdl_format'].update(best_format)
                stream['ytdl_format']['formats'] = [best_format]
                info._streams = [stream]
                log_utils.log(
                    'Downloading: |audio| video_id: |%s| Background: |%s|' %
                    (video_id, str(background)))
                _download(info, background)
            else:
                log_utils.log(
                    'No audio-only stream formats found: |%s|' % video_id,
                    log_utils.LOGERROR)
                kodi.notify(msg=kodi.i18n('no_audio_stream_formats'),
                            sound=False)
        else:
            log_utils.log('No stream formats found: |%s|' % video_id,
                          log_utils.LOGERROR)
            kodi.notify(msg=kodi.i18n('no_stream_formats'), sound=False)
Beispiel #12
0
def clear_cookies():
    confirmed = kodi.Dialog().yesno(kodi.i18n('confirm'),
                                    kodi.i18n('cookies_yes_no'))
    if confirmed:
        try:
            if kodi.vfs.exists(COOKIE_FILE):
                result = kodi.vfs.delete(COOKIE_FILE)
            else:
                result = True
        except:
            result = False
        if result:
            kodi.notify(msg=kodi.i18n('cookies_success'), sound=False)
        else:
            kodi.notify(msg=kodi.i18n('cookies_failed'), sound=False)
def download(download_type='video', background=True):
    download_type = download_type.lower()
    plugin_url = sys.listitem.getfilename()
    log_utils.log('ListItem.FileNameAndPath: |%s|' % plugin_url)
    if plugin_url:
        video_id = get_video_id(plugin_url)
        if video_id:
            if download_type == 'video':
                download_video(video_id, background=background)
            elif download_type == 'audio':
                download_audio(video_id, background=background)
            else:
                log_utils.log('Requested unknown download_type: |%s|' % download_type, log_utils.LOGERROR)
        else:
            kodi.notify(msg=kodi.i18n('not_found_video_id'), sound=False)
    else:
        log_utils.log('Plugin URL not found', log_utils.LOGERROR)
        kodi.notify(msg=kodi.i18n('not_found_plugin_url'), sound=False)
Beispiel #14
0
def download(download_type='video', background=True):
    download_type = download_type.lower()
    plugin_url = sys.listitem.getfilename()
    log_utils.log('ListItem.FileNameAndPath: |%s|' % plugin_url)
    if plugin_url:
        video_id = get_video_id(plugin_url)
        if video_id:
            if download_type == 'video':
                download_video(video_id, background=background)
            elif download_type == 'audio':
                download_audio(video_id, background=background)
            else:
                log_utils.log(
                    'Requested unknown download_type: |%s|' % download_type,
                    log_utils.LOGERROR)
        else:
            kodi.notify(msg=kodi.i18n('not_found_video_id'), sound=False)
    else:
        log_utils.log('Plugin URL not found', log_utils.LOGERROR)
        kodi.notify(msg=kodi.i18n('not_found_plugin_url'), sound=False)
def download_audio(video_id, background=True):
    url = YOUTUBE_VIDEO_URL % video_id
    info = get_video_info(url)
    if info:
        stream = info._streams[0]
        ytdl_format = stream.get('ytdl_format', {})
        formats = ytdl_format.get('formats', [])
        best_quality = 0
        best_format = None
        if formats:
            for fmt in formats:
                fmt_desc = fmt.get('format', '')
                log_utils.log('format: |%s|' % fmt_desc)
                if 'audio only' in fmt_desc.lower():
                    format_id = fmt.get('format_id', '')
                    asr = fmt.get('asr', '')
                    tbr = fmt.get('tbr', '')
                    abr = fmt.get('abr', '')
                    ext = fmt.get('ext', '')
                    log_utils.log('id: |%s| ext: |%s| asr: |%s| tbr: |%s| abr: |%s|' % (format_id, ext, asr, tbr, abr))
                    if 'm4a' in ext:
                        tbr = int(fmt.get('tbr'))
                        if tbr > best_quality:
                            best_quality = tbr
                            best_format = fmt
                            log_utils.log('Updated best_format: |%s| id: |%s| ext: |%s| asr: |%s| tbr: |%s| abr: |%s|' %
                                          (fmt_desc, format_id, ext, asr, tbr, abr))
            if best_format:
                stream['xbmc_url'] = best_format['url'] + '|' + urllib.urlencode({'User-Agent': USER_AGENT})
                stream['url'] = best_format['url']
                stream['ytdl_format'].update(best_format)
                stream['ytdl_format']['formats'] = [best_format]
                info._streams = [stream]
                log_utils.log('Downloading: |audio| video_id: |%s| Background: |%s|' % (video_id, str(background)))
                _download(info, background)
            else:
                log_utils.log('No audio-only stream formats found: |%s|' % video_id, log_utils.LOGERROR)
                kodi.notify(msg=kodi.i18n('no_audio_stream_formats'), sound=False)
        else:
            log_utils.log('No stream formats found: |%s|' % video_id, log_utils.LOGERROR)
            kodi.notify(msg=kodi.i18n('no_stream_formats'), sound=False)
Beispiel #16
0
    def export(self, row_id):
        rows = self._get(row_id)
        if rows:
            url, content_type, title, thumb = rows[0]
            play_path = {
                'mode': MODES.PLAY,
                'player': 'false',
                'history': 'false',
                'path': quote(url),
                'thumb': quote(thumb)
            }
            strm = kodi.get_plugin_url(play_path)

            if strm:
                log_utils.log(
                    'STRMUtils.export writing .m3u: |{0!s}|'.format(
                        self.filename), log_utils.LOGDEBUG)
                try:
                    with open(self.filename, 'w+') as f:
                        f.write(strm)
                    log_utils.log('STRMUtils.export writing .m3u completed.',
                                  log_utils.LOGDEBUG)
                    kodi.notify(msg=kodi.i18n('export_success'), sound=False)
                    return
                except:
                    log_utils.log('STRMUtils.export failed to write .strm',
                                  log_utils.LOGDEBUG)
                    kodi.notify(msg=kodi.i18n('export_fail'), sound=False)
                    return
        log_utils.log('STRMUtils.export no item for export to .strm',
                      log_utils.LOGDEBUG)
        kodi.notify(msg=kodi.i18n('no_items_export'), sound=False)
Beispiel #17
0
    def export(self, results='playthis', ctype='video'):
        if results == 'resolved':
            from addon_lib.playback import resolve
        else:

            def resolve(url):
                return url

        rows = self._get()
        if rows:
            _m3u = '#EXTM3U\n'
            m3u = _m3u
            for item, content_type, title, thumb in rows:
                if content_type != ctype:
                    continue
                if results == 'resolved':
                    resolved = resolve(item)
                else:
                    resolved = None
                if resolved:
                    log_utils.log(
                        'M3UUtils.export adding resolved item: |{0!s}| as |{1!s}|'
                        .format(resolved, title), log_utils.LOGDEBUG)
                    m3u += '#EXTINF:{0!s} tvg-logo="{3!s}",{1!s}\n{2!s}\n'.format(
                        '0', title, resolved, thumb)
                else:
                    if results == 'playthis':
                        pt_url = 'plugin://plugin.video.playthis/?mode=play&player=false&history=false&path={0!s}' \
                            .format(quote(item))
                        log_utils.log(
                            'M3UUtils.export adding PlayThis item: |{0!s}| as |{1!s}|'
                            .format(pt_url, title), log_utils.LOGDEBUG)
                        m3u += '#EXTINF:{0!s} tvg-logo="{3!s}",{1!s}\n{2!s}\n'.format(
                            '0', title, pt_url, thumb)
                    else:
                        log_utils.log(
                            'M3UUtils.export adding unresolved item: |{0!s}| as |{1!s}|'
                            .format(item, title), log_utils.LOGDEBUG)
                        m3u += '#EXTINF:{0!s} tvg-logo="{3!s}",{1!s}\n{2!s}\n'.format(
                            '0', title, item, thumb)

            if m3u != _m3u:
                log_utils.log(
                    'M3UUtils.export writing .m3u: |{0!s}|'.format(
                        self.filename), log_utils.LOGDEBUG)
                try:
                    with open(self.filename, 'w+') as f:
                        f.write(m3u)
                    log_utils.log('M3UUtils.export writing .m3u completed.',
                                  log_utils.LOGDEBUG)
                    kodi.notify(msg=kodi.i18n('export_success'), sound=False)
                    return
                except:
                    log_utils.log('M3UUtils.export failed to write .m3u',
                                  log_utils.LOGDEBUG)
                    kodi.notify(msg=kodi.i18n('export_fail'), sound=False)
                    return
        log_utils.log('M3UUtils.export no items for export to .m3u',
                      log_utils.LOGDEBUG)
        kodi.notify(msg=kodi.i18n('no_items_export'), sound=False)
Beispiel #18
0
def play_remote(path, thumb='', title=''):
    rpc_client = HttpJSONRPC()
    command = {'jsonrpc': '2.0', 'id': 1, 'method': 'Player.GetActivePlayers'}
    response = rpc_client.execute_rpc(command)
    if 'error' in response:
        kodi.notify(kodi.get_name(), response['error'], duration=7000)
        return
    try:
        player_id = response['result'][0]['playerid']
    except IndexError:
        player_id = None
    if player_id == 2:  # stop picture player if active, it will block
        command = {
            'jsonrpc': '2.0',
            'id': 1,
            'method': 'Player.Stop',
            'params': {
                'playerid': player_id
            }
        }
        response = rpc_client.execute_rpc(command)
        if 'error' in response:
            kodi.notify(kodi.get_name(), response['error'], duration=7000)
            return
    filename = kodi.get_plugin_url({
        'mode': MODES.PLAY,
        'player': 'false',
        'path': path,
        'thumb': thumb,
        'title': title
    })
    command = {
        'jsonrpc': '2.0',
        'id': 1,
        'method': 'Player.Open',
        'params': {
            'item': {
                'file': filename
            }
        }
    }
    response = rpc_client.execute_rpc(command)
    if 'error' in response:
        kodi.notify(kodi.get_name(), response['error'], duration=7000)
    else:
        if 'No Response' not in response['result']:
            kodi.notify(kodi.get_name(), kodi.i18n('send_success'))