Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
437dc399
Commit
437dc399
authored
Feb 14, 2010
by
Jean-Baptiste Kempf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove shout.c
parent
1086c467
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
292 deletions
+0
-292
modules/services_discovery/shout.c
modules/services_discovery/shout.c
+0
-292
No files found.
modules/services_discovery/shout.c
deleted
100644 → 0
View file @
1086c467
/*****************************************************************************
* shout.c: Shoutcast services discovery module
*****************************************************************************
* Copyright (C) 2005-2007 the VideoLAN team
* $Id$
*
* Authors: Sigmund Augdal Helberg <dnumgis@videolan.org>
* Antoine Cellerier <dionoea -@T- videolan -d.t- org>
* Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
* Includes
*****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_services_discovery.h>
/*****************************************************************************
* Module descriptor
*****************************************************************************/
enum
type_e
{
ShoutRadio
=
0
,
ShoutTV
=
1
,
Freebox
=
2
,
FrenchTV
=
3
};
static
int
Open
(
vlc_object_t
*
,
enum
type_e
);
static
void
Close
(
vlc_object_t
*
);
struct
shout_item_t
{
const
char
*
psz_url
;
const
char
*
psz_name
;
const
char
*
ppsz_options
[
2
];
const
struct
shout_item_t
*
p_children
;
};
#define endItem( ) { NULL, NULL, { NULL }, NULL }
#define item( title, url ) { url, title, { NULL }, NULL }
#define itemWithOption( title, url, option ) { url, title, { option, NULL }, NULL }
#define itemWithChildren( title, children ) { "vlc://nop", title, { NULL }, children }
/* WARN: We support only two levels */
static
const
struct
shout_item_t
p_frenchtv_canalplus
[]
=
{
itemWithOption
(
N_
(
"Les Guignols"
),
"http://www.canalplus.fr/index.php?pid=1784"
,
"http-forward-cookies"
),
endItem
()
};
static
const
struct
shout_item_t
p_frenchtv
[]
=
{
itemWithChildren
(
N_
(
"Canal +"
),
p_frenchtv_canalplus
),
endItem
()
};
static
const
struct
shout_item_t
p_items
[]
=
{
item
(
N_
(
"Shoutcast Radio"
),
"http/shout-winamp://www.shoutcast.com/sbin/newxml.phtml"
),
item
(
N_
(
"Shoutcast TV"
),
"http/shout-winamp://www.shoutcast.com/sbin/newtvlister.phtml?alltv=1"
),
itemWithOption
(
N_
(
"Freebox TV"
),
"http://mafreebox.freebox.fr/freeboxtv/playlist.m3u"
,
"deinterlace=1"
),
itemWithChildren
(
N_
(
"French TV"
),
p_frenchtv
),
endItem
()
};
#undef endItem
#undef item
#undef itemWithOptions
#undef itemWithChildren
struct
shout_category_t
{
services_discovery_t
*
p_sd
;
const
char
*
psz_category
;
const
struct
shout_item_t
*
p_parent
;
};
/* Main functions */
#define OPEN( type ) \
static int Open ## type ( vlc_object_t *p_this ) \
{ \
msg_Dbg( p_this, "Starting " #type ); \
return Open( p_this, type ); \
}
OPEN
(
ShoutRadio
)
OPEN
(
ShoutTV
)
OPEN
(
Freebox
)
OPEN
(
FrenchTV
)
#undef OPEN
static
int
vlc_sd_probe_Open
(
vlc_object_t
*
);
vlc_module_begin
()
set_category
(
CAT_PLAYLIST
)
set_subcategory
(
SUBCAT_PLAYLIST_SD
)
add_obsolete_integer
(
"shoutcast-limit"
)
set_shortname
(
"Shoutcast"
)
set_description
(
N_
(
"Shoutcast Radio"
)
)
set_capability
(
"services_discovery"
,
0
)
set_callbacks
(
OpenShoutRadio
,
Close
)
add_shortcut
(
"shoutcast"
)
add_submodule
()
set_shortname
(
"ShoutcastTV"
)
set_description
(
N_
(
"Shoutcast TV"
)
)
set_capability
(
"services_discovery"
,
0
)
set_callbacks
(
OpenShoutTV
,
Close
)
add_shortcut
(
"shoutcasttv"
)
add_submodule
()
set_shortname
(
"frenchtv"
)
set_description
(
N_
(
"French TV"
)
)
set_capability
(
"services_discovery"
,
0
)
set_callbacks
(
OpenFrenchTV
,
Close
)
add_shortcut
(
"frenchtv"
)
add_submodule
()
set_shortname
(
"Freebox"
)
set_description
(
N_
(
"Freebox TV"
)
)
set_capability
(
"services_discovery"
,
0
)
set_callbacks
(
OpenFreebox
,
Close
)
add_shortcut
(
"freebox"
)
VLC_SD_PROBE_SUBMODULE
vlc_module_end
()
/*****************************************************************************
* Local prototypes
*****************************************************************************/
static
void
*
Run
(
void
*
);
struct
services_discovery_sys_t
{
vlc_thread_t
thread
;
enum
type_e
i_type
;
};
/*****************************************************************************
* Open: initialize and create stuff
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
p_this
,
enum
type_e
i_type
)
{
services_discovery_t
*
p_sd
=
(
services_discovery_t
*
)
p_this
;
p_sd
->
p_sys
=
malloc
(
sizeof
(
*
(
p_sd
->
p_sys
)));
if
(
p_sd
->
p_sys
==
NULL
)
return
VLC_ENOMEM
;
p_sd
->
p_sys
->
i_type
=
i_type
;
if
(
vlc_clone
(
&
p_sd
->
p_sys
->
thread
,
Run
,
p_sd
,
VLC_THREAD_PRIORITY_LOW
))
{
free
(
p_sd
->
p_sys
);
return
VLC_EGENERIC
;
}
return
VLC_SUCCESS
;
}
/*****************************************************************************
* ItemAdded:
*****************************************************************************/
static
void
ItemAdded
(
const
vlc_event_t
*
p_event
,
void
*
user_data
)
{
struct
shout_category_t
*
params
=
user_data
;
const
struct
shout_item_t
*
p_parent
=
params
->
p_parent
;
input_item_t
*
p_input
=
p_event
->
u
.
input_item_subitem_added
.
p_new_child
;
for
(
int
i
=
0
;
p_parent
->
ppsz_options
[
i
]
!=
NULL
;
i
++
)
input_item_AddOption
(
p_input
,
p_parent
->
ppsz_options
[
i
],
VLC_INPUT_OPTION_TRUSTED
);
services_discovery_AddItem
(
params
->
p_sd
,
p_input
,
params
->
psz_category
);
}
/*****************************************************************************
* CreateInputItemFromShoutItem:
*****************************************************************************/
static
input_item_t
*
CreateInputItemFromShoutItem
(
services_discovery_t
*
p_sd
,
const
struct
shout_item_t
*
p_item
)
{
/* Create the item */
input_item_t
*
p_input
=
input_item_New
(
p_sd
,
p_item
->
psz_url
,
vlc_gettext
(
p_item
->
psz_name
)
);
/* Copy options */
for
(
int
i
=
0
;
p_item
->
ppsz_options
[
i
]
!=
NULL
;
i
++
)
input_item_AddOption
(
p_input
,
p_item
->
ppsz_options
[
i
],
VLC_INPUT_OPTION_TRUSTED
);
input_item_AddOption
(
p_input
,
"no-playlist-autostart"
,
VLC_INPUT_OPTION_TRUSTED
);
return
p_input
;
}
/*****************************************************************************
* AddSubitemsOfShoutItemURL:
*****************************************************************************/
static
void
AddSubitemsOfShoutItemURL
(
services_discovery_t
*
p_sd
,
const
struct
shout_item_t
*
p_item
,
const
char
*
psz_category
)
{
struct
shout_category_t
category
=
{
p_sd
,
psz_category
,
p_item
};
/* Create the item */
input_item_t
*
p_input
=
CreateInputItemFromShoutItem
(
p_sd
,
p_item
);
/* Read every subitems, and add them in ItemAdded */
vlc_event_attach
(
&
p_input
->
event_manager
,
vlc_InputItemSubItemAdded
,
ItemAdded
,
&
category
);
input_Read
(
p_sd
,
p_input
);
vlc_event_detach
(
&
p_input
->
event_manager
,
vlc_InputItemSubItemAdded
,
ItemAdded
,
&
category
);
vlc_gc_decref
(
p_input
);
}
/*****************************************************************************
* Run:
*****************************************************************************/
static
void
*
Run
(
void
*
data
)
{
services_discovery_t
*
p_sd
=
data
;
services_discovery_sys_t
*
p_sys
=
p_sd
->
p_sys
;
enum
type_e
i_type
=
p_sys
->
i_type
;
int
i
,
j
;
int
canc
=
vlc_savecancel
();
if
(
!
p_items
[
i_type
].
p_children
)
{
AddSubitemsOfShoutItemURL
(
p_sd
,
&
p_items
[
i_type
],
NULL
);
vlc_restorecancel
(
canc
);
return
NULL
;
}
for
(
i
=
0
;
p_items
[
i_type
].
p_children
[
i
].
psz_name
;
i
++
)
{
const
struct
shout_item_t
*
p_subitem
=
&
p_items
[
i_type
].
p_children
[
i
];
if
(
!
p_subitem
->
p_children
)
{
AddSubitemsOfShoutItemURL
(
p_sd
,
p_subitem
,
p_subitem
->
psz_name
);
continue
;
}
for
(
j
=
0
;
p_subitem
->
p_children
[
j
].
psz_name
;
j
++
)
{
input_item_t
*
p_input
=
CreateInputItemFromShoutItem
(
p_sd
,
&
p_subitem
->
p_children
[
j
]
);
services_discovery_AddItem
(
p_sd
,
p_input
,
p_subitem
->
psz_name
);
vlc_gc_decref
(
p_input
);
}
}
vlc_restorecancel
(
canc
);
return
NULL
;
}
/*****************************************************************************
* Close:
*****************************************************************************/
static
void
Close
(
vlc_object_t
*
p_this
)
{
services_discovery_t
*
p_sd
=
(
services_discovery_t
*
)
p_this
;
services_discovery_sys_t
*
p_sys
=
p_sd
->
p_sys
;
vlc_join
(
p_sys
->
thread
,
NULL
);
free
(
p_sys
);
}
static
int
vlc_sd_probe_Open
(
vlc_object_t
*
obj
)
{
vlc_probe_t
*
probe
=
(
vlc_probe_t
*
)
obj
;
vlc_sd_probe_Add
(
probe
,
"shoutcast{longname=
\"
Shoutcast Radio
\"
}"
,
N_
(
"Shoutcast Radio"
),
SD_CAT_INTERNET
);
vlc_sd_probe_Add
(
probe
,
"shoutcasttv{longname=
\"
Shoutcast TV
\"
}"
,
N_
(
"Shoutcast TV"
),
SD_CAT_INTERNET
);
vlc_sd_probe_Add
(
probe
,
"frenchtv{longname=
\"
French TV
\"
}"
,
N_
(
"French TV"
),
SD_CAT_INTERNET
);
return
VLC_PROBE_CONTINUE
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment