Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
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-gpu
Commits
bc157d87
Commit
bc157d87
authored
Nov 07, 2009
by
Jakob Leben
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
podcast: per item add/remove request
parent
6194b345
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
130 additions
and
3 deletions
+130
-3
modules/services_discovery/podcast.c
modules/services_discovery/podcast.c
+130
-3
No files found.
modules/services_discovery/podcast.c
View file @
bc157d87
...
@@ -82,6 +82,11 @@ vlc_module_end ()
...
@@ -82,6 +82,11 @@ vlc_module_end ()
* Local structures
* Local structures
*****************************************************************************/
*****************************************************************************/
enum
{
UPDATE_URLS
,
UPDATE_REQUEST
};
/* FIXME Temporary. Updating by compound urls string to be removed later. */
struct
services_discovery_sys_t
struct
services_discovery_sys_t
{
{
/* playlist node */
/* playlist node */
...
@@ -98,6 +103,8 @@ struct services_discovery_sys_t
...
@@ -98,6 +103,8 @@ struct services_discovery_sys_t
vlc_mutex_t
lock
;
vlc_mutex_t
lock
;
vlc_cond_t
wait
;
vlc_cond_t
wait
;
bool
b_update
;
bool
b_update
;
char
*
psz_request
;
int
update_type
;
};
};
/*****************************************************************************
/*****************************************************************************
...
@@ -106,7 +113,11 @@ struct services_discovery_sys_t
...
@@ -106,7 +113,11 @@ struct services_discovery_sys_t
static
void
*
Run
(
void
*
);
static
void
*
Run
(
void
*
);
static
int
UrlsChange
(
vlc_object_t
*
,
char
const
*
,
vlc_value_t
,
static
int
UrlsChange
(
vlc_object_t
*
,
char
const
*
,
vlc_value_t
,
vlc_value_t
,
void
*
);
vlc_value_t
,
void
*
);
static
int
Request
(
vlc_object_t
*
,
char
const
*
,
vlc_value_t
,
vlc_value_t
,
void
*
);
static
void
ParseRequest
(
services_discovery_t
*
p_sd
);
static
void
ParseUrls
(
services_discovery_t
*
p_sd
,
char
*
psz_urls
);
static
void
ParseUrls
(
services_discovery_t
*
p_sd
,
char
*
psz_urls
);
static
void
SaveUrls
(
services_discovery_t
*
p_sd
);
/*****************************************************************************
/*****************************************************************************
* Open: initialize and create stuff
* Open: initialize and create stuff
...
@@ -128,6 +139,8 @@ static int Open( vlc_object_t *p_this )
...
@@ -128,6 +139,8 @@ static int Open( vlc_object_t *p_this )
vlc_mutex_init
(
&
p_sys
->
lock
);
vlc_mutex_init
(
&
p_sys
->
lock
);
vlc_cond_init
(
&
p_sys
->
wait
);
vlc_cond_init
(
&
p_sys
->
wait
);
p_sys
->
b_update
=
true
;
p_sys
->
b_update
=
true
;
p_sys
->
psz_request
=
NULL
;
p_sys
->
update_type
=
UPDATE_URLS
;
p_sd
->
p_sys
=
p_sys
;
p_sd
->
p_sys
=
p_sys
;
...
@@ -135,8 +148,12 @@ static int Open( vlc_object_t *p_this )
...
@@ -135,8 +148,12 @@ static int Open( vlc_object_t *p_this )
var_Create
(
p_sd
,
"podcast-urls"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_sd
,
"podcast-urls"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_AddCallback
(
p_sd
,
"podcast-urls"
,
UrlsChange
,
p_sys
);
var_AddCallback
(
p_sd
,
"podcast-urls"
,
UrlsChange
,
p_sys
);
var_Create
(
p_sd
,
"podcast-request"
,
VLC_VAR_STRING
);
var_AddCallback
(
p_sd
,
"podcast-request"
,
Request
,
p_sys
);
if
(
vlc_clone
(
&
p_sys
->
thread
,
Run
,
p_sd
,
VLC_THREAD_PRIORITY_LOW
))
if
(
vlc_clone
(
&
p_sys
->
thread
,
Run
,
p_sd
,
VLC_THREAD_PRIORITY_LOW
))
{
{
var_DelCallback
(
p_sd
,
"podcast-request"
,
Request
,
p_sys
);
var_DelCallback
(
p_sd
,
"podcast-urls"
,
UrlsChange
,
p_sys
);
var_DelCallback
(
p_sd
,
"podcast-urls"
,
UrlsChange
,
p_sys
);
vlc_cond_destroy
(
&
p_sys
->
wait
);
vlc_cond_destroy
(
&
p_sys
->
wait
);
vlc_mutex_destroy
(
&
p_sys
->
lock
);
vlc_mutex_destroy
(
&
p_sys
->
lock
);
...
@@ -159,6 +176,7 @@ static void Close( vlc_object_t *p_this )
...
@@ -159,6 +176,7 @@ static void Close( vlc_object_t *p_this )
vlc_join
(
p_sys
->
thread
,
NULL
);
vlc_join
(
p_sys
->
thread
,
NULL
);
var_DelCallback
(
p_sd
,
"podcast-urls"
,
UrlsChange
,
p_sys
);
var_DelCallback
(
p_sd
,
"podcast-urls"
,
UrlsChange
,
p_sys
);
var_DelCallback
(
p_sd
,
"podcast-request"
,
Request
,
p_sys
);
vlc_cond_destroy
(
&
p_sys
->
wait
);
vlc_cond_destroy
(
&
p_sys
->
wait
);
vlc_mutex_destroy
(
&
p_sys
->
lock
);
vlc_mutex_destroy
(
&
p_sys
->
lock
);
...
@@ -179,6 +197,7 @@ static void Close( vlc_object_t *p_this )
...
@@ -179,6 +197,7 @@ static void Close( vlc_object_t *p_this )
free
(
p_sys
->
ppsz_urls
);
free
(
p_sys
->
ppsz_urls
);
for
(
i
=
0
;
i
<
p_sys
->
i_items
;
i
++
)
vlc_gc_decref
(
p_sys
->
pp_items
[
i
]
);
for
(
i
=
0
;
i
<
p_sys
->
i_items
;
i
++
)
vlc_gc_decref
(
p_sys
->
pp_items
[
i
]
);
free
(
p_sys
->
pp_items
);
free
(
p_sys
->
pp_items
);
free
(
p_sys
->
psz_request
);
free
(
p_sys
);
free
(
p_sys
);
}
}
...
@@ -199,9 +218,18 @@ static void *Run( void *data )
...
@@ -199,9 +218,18 @@ static void *Run( void *data )
int
canc
=
vlc_savecancel
();
int
canc
=
vlc_savecancel
();
msg_Dbg
(
p_sd
,
"Update required"
);
msg_Dbg
(
p_sd
,
"Update required"
);
char
*
psz_urls
=
var_GetNonEmptyString
(
p_sd
,
"podcast-urls"
);
ParseUrls
(
p_sd
,
psz_urls
);
if
(
p_sys
->
update_type
==
UPDATE_URLS
)
free
(
psz_urls
);
{
char
*
psz_urls
=
var_GetNonEmptyString
(
p_sd
,
"podcast-urls"
);
ParseUrls
(
p_sd
,
psz_urls
);
free
(
psz_urls
);
}
else
if
(
p_sys
->
update_type
==
UPDATE_REQUEST
)
{
ParseRequest
(
p_sd
);
}
p_sys
->
b_update
=
false
;
p_sys
->
b_update
=
false
;
for
(
int
i
=
0
;
i
<
p_sd
->
p_sys
->
i_input
;
i
++
)
for
(
int
i
=
0
;
i
<
p_sd
->
p_sys
->
i_input
;
i
++
)
...
@@ -235,11 +263,32 @@ static int UrlsChange( vlc_object_t *p_this, char const *psz_var,
...
@@ -235,11 +263,32 @@ static int UrlsChange( vlc_object_t *p_this, char const *psz_var,
vlc_mutex_lock
(
&
p_sys
->
lock
);
vlc_mutex_lock
(
&
p_sys
->
lock
);
p_sys
->
b_update
=
true
;
p_sys
->
b_update
=
true
;
p_sys
->
update_type
=
UPDATE_URLS
;
vlc_cond_signal
(
&
p_sys
->
wait
);
vlc_cond_signal
(
&
p_sys
->
wait
);
vlc_mutex_unlock
(
&
p_sys
->
lock
);
vlc_mutex_unlock
(
&
p_sys
->
lock
);
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
static
int
Request
(
vlc_object_t
*
p_this
,
char
const
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
VLC_UNUSED
(
p_this
);
VLC_UNUSED
(
psz_var
);
VLC_UNUSED
(
oldval
);
services_discovery_sys_t
*
p_sys
=
(
services_discovery_sys_t
*
)
p_data
;
vlc_mutex_lock
(
&
p_sys
->
lock
);
free
(
p_sys
->
psz_request
);
p_sys
->
psz_request
=
NULL
;
if
(
newval
.
psz_string
&&
*
newval
.
psz_string
)
{
p_sys
->
psz_request
=
strdup
(
newval
.
psz_string
);
p_sys
->
b_update
=
true
;
p_sys
->
update_type
=
UPDATE_REQUEST
;
vlc_cond_signal
(
&
p_sys
->
wait
);
}
vlc_mutex_unlock
(
&
p_sys
->
lock
);
return
VLC_SUCCESS
;
}
static
void
ParseUrls
(
services_discovery_t
*
p_sd
,
char
*
psz_urls
)
static
void
ParseUrls
(
services_discovery_t
*
p_sd
,
char
*
psz_urls
)
{
{
services_discovery_sys_t
*
p_sys
=
p_sd
->
p_sys
;
services_discovery_sys_t
*
p_sys
=
p_sd
->
p_sys
;
...
@@ -306,3 +355,81 @@ static void ParseUrls( services_discovery_t *p_sd, char *psz_urls )
...
@@ -306,3 +355,81 @@ static void ParseUrls( services_discovery_t *p_sd, char *psz_urls )
p_sys
->
pp_items
=
pp_new_items
;
p_sys
->
pp_items
=
pp_new_items
;
p_sys
->
i_items
=
i_new_items
;
p_sys
->
i_items
=
i_new_items
;
}
}
static
void
ParseRequest
(
services_discovery_t
*
p_sd
)
{
services_discovery_sys_t
*
p_sys
=
p_sd
->
p_sys
;
char
*
psz_request
=
p_sys
->
psz_request
;
int
i
;
char
*
psz_tok
=
strchr
(
psz_request
,
':'
);
if
(
!
psz_tok
)
return
;
*
psz_tok
=
'\0'
;
if
(
!
strcmp
(
psz_request
,
"ADD"
)
)
{
psz_request
=
psz_tok
+
1
;
for
(
i
=
0
;
i
<
p_sys
->
i_urls
;
i
++
)
if
(
!
strcmp
(
p_sys
->
ppsz_urls
[
i
],
psz_request
)
)
break
;
if
(
i
==
p_sys
->
i_urls
)
{
INSERT_ELEM
(
p_sys
->
ppsz_urls
,
p_sys
->
i_urls
,
p_sys
->
i_urls
,
strdup
(
psz_request
)
);
input_item_t
*
p_input
;
p_input
=
input_item_New
(
p_sd
,
psz_request
,
psz_request
);
input_item_AddOption
(
p_input
,
"demux=podcast"
,
VLC_INPUT_OPTION_TRUSTED
);
INSERT_ELEM
(
p_sys
->
pp_items
,
p_sys
->
i_items
,
p_sys
->
i_items
,
p_input
);
services_discovery_AddItem
(
p_sd
,
p_input
,
NULL
/* no cat */
);
INSERT_ELEM
(
p_sys
->
pp_input
,
p_sys
->
i_input
,
p_sys
->
i_input
,
input_CreateAndStart
(
p_sd
,
p_input
,
NULL
)
);
SaveUrls
(
p_sd
);
}
}
else
if
(
!
strcmp
(
psz_request
,
"RM"
)
)
{
psz_request
=
psz_tok
+
1
;
for
(
i
=
0
;
i
<
p_sys
->
i_urls
;
i
++
)
if
(
!
strcmp
(
p_sys
->
ppsz_urls
[
i
],
psz_request
)
)
break
;
if
(
i
!=
p_sys
->
i_urls
)
{
services_discovery_RemoveItem
(
p_sd
,
p_sys
->
pp_items
[
i
]
);
vlc_gc_decref
(
p_sys
->
pp_items
[
i
]
);
REMOVE_ELEM
(
p_sys
->
ppsz_urls
,
p_sys
->
i_urls
,
i
);
REMOVE_ELEM
(
p_sys
->
pp_items
,
p_sys
->
i_items
,
i
);
}
SaveUrls
(
p_sd
);
}
free
(
p_sys
->
psz_request
);
p_sys
->
psz_request
=
NULL
;
}
static
void
SaveUrls
(
services_discovery_t
*
p_sd
)
{
services_discovery_sys_t
*
p_sys
=
p_sd
->
p_sys
;
int
i
;
char
*
psz_urls
;
int
len
=
0
;
for
(
i
=
0
;
i
<
p_sys
->
i_urls
;
i
++
)
len
+=
strlen
(
p_sys
->
ppsz_urls
[
i
]
)
+
1
;
psz_urls
=
(
char
*
)
calloc
(
len
,
sizeof
(
char
)
);
for
(
i
=
0
;
i
<
p_sys
->
i_urls
;
i
++
)
{
strcat
(
psz_urls
,
p_sys
->
ppsz_urls
[
i
]
);
if
(
i
<
p_sys
->
i_urls
-
1
)
strcat
(
psz_urls
,
"|"
);
}
config_PutPsz
(
p_sd
,
"podcast-urls"
,
psz_urls
);
config_SaveConfigFile
(
p_sd
,
"podcast"
);
free
(
psz_urls
);
}
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