Blame src/api/supports.c

Packit 3ff1e7
/* libquvi
Packit 3ff1e7
 * Copyright (C) 2012,2013  Toni Gundogdu <legatvs@gmail.com>
Packit 3ff1e7
 *
Packit 3ff1e7
 * This file is part of libquvi <http://quvi.sourceforge.net/>.
Packit 3ff1e7
 *
Packit 3ff1e7
 * This library is free software: you can redistribute it and/or
Packit 3ff1e7
 * modify it under the terms of the GNU Affero General Public
Packit 3ff1e7
 * License as published by the Free Software Foundation, either
Packit 3ff1e7
 * version 3 of the License, or (at your option) any later version.
Packit 3ff1e7
 *
Packit 3ff1e7
 * This library is distributed in the hope that it will be useful,
Packit 3ff1e7
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 3ff1e7
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 3ff1e7
 * GNU Affero General Public License for more details.
Packit 3ff1e7
 *
Packit 3ff1e7
 * You should have received a copy of the GNU Affero General
Packit 3ff1e7
 * Public License along with this library.  If not, see
Packit 3ff1e7
 * <http://www.gnu.org/licenses/>.
Packit 3ff1e7
 */
Packit 3ff1e7
Packit 3ff1e7
/** @file supports.c */
Packit 3ff1e7
Packit 3ff1e7
#include "config.h"
Packit 3ff1e7
Packit 3ff1e7
#include <glib.h>
Packit 3ff1e7
Packit 3ff1e7
#include "quvi.h"
Packit 3ff1e7
/* -- */
Packit 3ff1e7
#include "_quvi_s.h"
Packit 3ff1e7
#include "_quvi_media_s.h"
Packit 3ff1e7
#include "_quvi_playlist_s.h"
Packit 3ff1e7
#include "_quvi_subtitle_s.h"
Packit 3ff1e7
/* -- */
Packit 3ff1e7
#include "misc/match_playlist_script.h"
Packit 3ff1e7
#include "misc/match_subtitle_script.h"
Packit 3ff1e7
#include "misc/match_media_script.h"
Packit 3ff1e7
Packit 3ff1e7
static QuviBoolean _supports_playlist(_quvi_t q, const gchar *url,
Packit 3ff1e7
                                      const QuviSupportsMode mode)
Packit 3ff1e7
{
Packit 3ff1e7
  _quvi_playlist_t qp = NULL;
Packit 3ff1e7
Packit 3ff1e7
  q->status.rc = m_match_playlist_script(q, &qp, url,
Packit 3ff1e7
                                         (mode == QUVI_SUPPORTS_MODE_OFFLINE)
Packit 3ff1e7
                                         ? QM_MATCH_PS_SUPPORTED_OFFLINE
Packit 3ff1e7
                                         : QM_MATCH_PS_SUPPORTED_ONLINE);
Packit 3ff1e7
  if (qp != NULL)
Packit 3ff1e7
    {
Packit 3ff1e7
      quvi_playlist_free((quvi_playlist_t) qp);
Packit 3ff1e7
      qp = NULL;
Packit 3ff1e7
    }
Packit 3ff1e7
  return (quvi_ok(q));
Packit 3ff1e7
}
Packit 3ff1e7
Packit 3ff1e7
static QuviBoolean _supports_subtitle(_quvi_t q, const gchar *url,
Packit 3ff1e7
                                      const QuviSupportsMode mode)
Packit 3ff1e7
{
Packit 3ff1e7
  _quvi_subtitle_t qsub = NULL;
Packit 3ff1e7
Packit 3ff1e7
  q->status.rc = m_match_subtitle_script(q, &qsub, url,
Packit 3ff1e7
                                         (mode == QUVI_SUPPORTS_MODE_OFFLINE)
Packit 3ff1e7
                                         ? QM_MATCH_SUBS_SUPPORTED_OFFLINE
Packit 3ff1e7
                                         : QM_MATCH_SUBS_SUPPORTED_ONLINE);
Packit 3ff1e7
Packit 3ff1e7
  if (qsub != NULL)
Packit 3ff1e7
    {
Packit 3ff1e7
      quvi_subtitle_free((quvi_subtitle_t) qsub);
Packit 3ff1e7
      qsub = NULL;
Packit 3ff1e7
    }
Packit 3ff1e7
  return (quvi_ok(q));
Packit 3ff1e7
}
Packit 3ff1e7
Packit 3ff1e7
static QuviBoolean _supports_media(_quvi_t q, const gchar *url,
Packit 3ff1e7
                                   const QuviSupportsMode mode)
Packit 3ff1e7
{
Packit 3ff1e7
  _quvi_media_t qm = NULL;
Packit 3ff1e7
Packit 3ff1e7
  q->status.rc = m_match_media_script(q, &qm, url,
Packit 3ff1e7
                                      (mode == QUVI_SUPPORTS_MODE_OFFLINE)
Packit 3ff1e7
                                      ? QM_MATCH_MS_SUPPORTED_OFFLINE
Packit 3ff1e7
                                      : QM_MATCH_MS_SUPPORTED_ONLINE);
Packit 3ff1e7
  if (qm != NULL)
Packit 3ff1e7
    {
Packit 3ff1e7
      quvi_media_free((quvi_media_t) qm);
Packit 3ff1e7
      qm = NULL;
Packit 3ff1e7
    }
Packit 3ff1e7
  return (quvi_ok(q));
Packit 3ff1e7
}
Packit 3ff1e7
Packit 3ff1e7
/** @brief Check whether the URL is supported
Packit 3ff1e7
Packit 3ff1e7
Check if any of the scripts accepts the URL. Both offline and online
Packit 3ff1e7
checking is supported.
Packit 3ff1e7
Packit 3ff1e7
@note
Packit 3ff1e7
 - Offline check will fail with most @ref sh_url
Packit 3ff1e7
 - Online check will resolve @ref sh_url
Packit 3ff1e7
Packit 3ff1e7
Type may be a combination.
Packit 3ff1e7
Packit 3ff1e7
@code
Packit 3ff1e7
quvi_supports(q, URL, QUVI_SUPPORTS_OFFLINE,
Packit 3ff1e7
              QUVI_SUPPORTS_TYPE_PLAYLIST | QUVI_SUPPORTS_TYPE_MEDIA);
Packit 3ff1e7
@endcode
Packit 3ff1e7
Packit 3ff1e7
@ingroup convenience
Packit 3ff1e7
*/
Packit 3ff1e7
QuviBoolean quvi_supports(quvi_t handle, const char *url,
Packit 3ff1e7
                          QuviSupportsMode mode, QuviSupportsType type)
Packit 3ff1e7
{
Packit 3ff1e7
  QuviBoolean found;
Packit 3ff1e7
  _quvi_t q;
Packit 3ff1e7
Packit 3ff1e7
  /* If G_DISABLE_CHECKS is defined then the check is not performed. */
Packit 3ff1e7
  g_return_val_if_fail(handle != NULL, QUVI_FALSE);
Packit 3ff1e7
  g_return_val_if_fail(url != NULL, QUVI_FALSE);
Packit 3ff1e7
Packit 3ff1e7
  q = (_quvi_t) handle;
Packit 3ff1e7
  q->status.rc = QUVI_OK;
Packit 3ff1e7
  found = QUVI_FALSE;
Packit 3ff1e7
Packit 3ff1e7
  if (type & QUVI_SUPPORTS_TYPE_PLAYLIST)
Packit 3ff1e7
    found = _supports_playlist(q, url, mode);
Packit 3ff1e7
Packit 3ff1e7
  if (q->status.rc == QUVI_OK || q->status.rc == QUVI_ERROR_NO_SUPPORT)
Packit 3ff1e7
    {
Packit 3ff1e7
      if (type & QUVI_SUPPORTS_TYPE_SUBTITLE)
Packit 3ff1e7
        found = _supports_subtitle(q, url, mode);
Packit 3ff1e7
    }
Packit 3ff1e7
Packit 3ff1e7
  if (q->status.rc == QUVI_OK || q->status.rc == QUVI_ERROR_NO_SUPPORT)
Packit 3ff1e7
    {
Packit 3ff1e7
      if (type & QUVI_SUPPORTS_TYPE_MEDIA)
Packit 3ff1e7
        found = _supports_media(q, url, mode);
Packit 3ff1e7
    }
Packit 3ff1e7
  return (found);
Packit 3ff1e7
}
Packit 3ff1e7
Packit 3ff1e7
/* vim: set ts=2 sw=2 tw=72 expandtab: */