Changeset 91d93983e61dbc6cc7392fdfc71fede68dec7a5b
- Timestamp:
- 14/12/04 12:40:09
(4 years ago)
- Author:
- Clément Stenac <zorglub@videolan.org>
- git-committer:
- Clément Stenac <zorglub@videolan.org> 1103024409 +0000
- git-parent:
[5d3edb82f37d177671789808248251bfdeaf7fd1]
- git-author:
- Clément Stenac <zorglub@videolan.org> 1103024409 +0000
- Message:
* Provide playlist_LockFoo functions for some functions
* Fix deadlock with preparse
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r01aca2c |
r91d9398 |
|
| 80 | 80 | }; |
|---|
| 81 | 81 | |
|---|
| 82 | | #define PLAYLIST_SAVE_FLAG 0x1 /**< Must it be saved */ |
|---|
| 83 | | #define PLAYLIST_SKIP_FLAG 0x2 /**< Must playlist skip after it ? */ |
|---|
| 84 | | #define PLAYLIST_ENA_FLAG 0x4 /**< Is it enabled ? */ |
|---|
| 85 | | #define PLAYLIST_DEL_FLAG 0x8 /**< Autodelete ? */ |
|---|
| | 82 | #define PLAYLIST_SAVE_FLAG 0x01 /**< Must it be saved */ |
|---|
| | 83 | #define PLAYLIST_SKIP_FLAG 0x02 /**< Must playlist skip after it ? */ |
|---|
| | 84 | #define PLAYLIST_ENA_FLAG 0x04 /**< Is it enabled ? */ |
|---|
| | 85 | #define PLAYLIST_DEL_FLAG 0x08 /**< Autodelete ? */ |
|---|
| | 86 | #define PLAYLIST_RO_FLAG 0x10 /**< Write-enabled ? */ |
|---|
| 86 | 87 | |
|---|
| 87 | 88 | /** |
|---|
| … | … | |
| 248 | 249 | |
|---|
| 249 | 250 | VLC_EXPORT( int, playlist_Clear, ( playlist_t * ) ); |
|---|
| | 251 | VLC_EXPORT( int, playlist_LockClear, ( playlist_t * ) ); |
|---|
| 250 | 252 | |
|---|
| 251 | 253 | VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) ); |
|---|
| … | … | |
| 312 | 314 | /* Misc item operations (act on item+playlist) */ |
|---|
| 313 | 315 | VLC_EXPORT( int, playlist_Delete, ( playlist_t *, int ) ); |
|---|
| | 316 | VLC_EXPORT( int, playlist_LockDelete, ( playlist_t *, int ) ); |
|---|
| 314 | 317 | VLC_EXPORT( int, playlist_Disable, ( playlist_t *, playlist_item_t * ) ); |
|---|
| 315 | 318 | VLC_EXPORT( int, playlist_Enable, ( playlist_t *, playlist_item_t * ) ); |
|---|
| 316 | 319 | VLC_EXPORT( int, playlist_ItemToNode, (playlist_t *,playlist_item_t *) ); |
|---|
| | 320 | VLC_EXPORT( int, playlist_LockItemToNode, (playlist_t *,playlist_item_t *) ); |
|---|
| 317 | 321 | VLC_EXPORT( int, playlist_Replace, (playlist_t *,playlist_item_t *, input_item_t*) ); |
|---|
| | 322 | VLC_EXPORT( int, playlist_LockReplace, (playlist_t *,playlist_item_t *, input_item_t*) ); |
|---|
| 318 | 323 | |
|---|
| 319 | 324 | |
|---|
| 320 | 325 | /* Item search functions */ |
|---|
| 321 | 326 | VLC_EXPORT( playlist_item_t *, playlist_ItemGetById, (playlist_t *, int) ); |
|---|
| | 327 | VLC_EXPORT( playlist_item_t *, playlist_LockItemGetById, (playlist_t *, int) ); |
|---|
| 322 | 328 | VLC_EXPORT( playlist_item_t *, playlist_ItemGetByPos, (playlist_t *, int) ); |
|---|
| | 329 | VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByPos, (playlist_t *, int) ); |
|---|
| | 330 | VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInput, (playlist_t *,input_item_t * ) ); |
|---|
| | 331 | VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByInput, (playlist_t *,input_item_t * ) ); |
|---|
| 323 | 332 | VLC_EXPORT( int, playlist_GetPositionById, (playlist_t *,int ) ); |
|---|
| 324 | | VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInput, (playlist_t *,input_item_t * ) ); |
|---|
| 325 | 333 | |
|---|
| 326 | 334 | /* Info functions */ |
|---|
| rc569f53 |
r91d9398 |
|
| 921 | 921 | } |
|---|
| 922 | 922 | |
|---|
| 923 | | p_item = playlist_ItemGetByInput( p_playlist, |
|---|
| | 923 | p_item = playlist_LockItemGetByInput( p_playlist, |
|---|
| 924 | 924 | ((input_thread_t *)p_access->p_parent)->input.p_item ); |
|---|
| 925 | 925 | |
|---|
| r5a6a1bd |
r91d9398 |
|
| 229 | 229 | input_item_t *p_current = ( (input_thread_t*)p_access->p_parent)-> |
|---|
| 230 | 230 | input.p_item; |
|---|
| 231 | | p_item = playlist_ItemGetByInput( p_playlist, p_current ); |
|---|
| | 231 | p_item = playlist_LockItemGetByInput( p_playlist, p_current ); |
|---|
| 232 | 232 | msg_Dbg( p_access, "not starting directory playback"); |
|---|
| 233 | 233 | if( !p_item ) |
|---|
| r6c4b8e5 |
r91d9398 |
|
| 1365 | 1365 | p_playlist->i_index); |
|---|
| 1366 | 1366 | |
|---|
| 1367 | | } |
|---|
| 1368 | | else |
|---|
| | 1367 | } |
|---|
| | 1368 | else |
|---|
| 1369 | 1369 | { |
|---|
| 1370 | 1370 | vcdinfo_itemid_t list_itemid; |
|---|
| 1371 | 1371 | list_itemid.type=VCDINFO_ITEM_TYPE_ENTRY; |
|---|
| 1372 | 1372 | |
|---|
| 1373 | | playlist_Delete( p_playlist, p_playlist->i_index); |
|---|
| | 1373 | playlist_LockDelete( p_playlist, p_playlist->i_index); |
|---|
| 1374 | 1374 | |
|---|
| 1375 | 1375 | for( i = 0 ; i < p_vcd->num_entries ; i++ ) |
|---|
| ra90a19a |
r91d9398 |
|
| 1891 | 1891 | } |
|---|
| 1892 | 1892 | |
|---|
| 1893 | | playlist_Delete( p_sys->p_playlist, |
|---|
| | 1893 | playlist_LockDelete( p_sys->p_playlist, |
|---|
| 1894 | 1894 | p_items[i_index] ); |
|---|
| 1895 | 1895 | msg_Dbg( p_intf, "requested playlist delete: %d", |
|---|
| … | … | |
| 1931 | 1931 | if( j == i_nb_items ) |
|---|
| 1932 | 1932 | { |
|---|
| 1933 | | playlist_Delete( p_sys->p_playlist, i ); |
|---|
| | 1933 | playlist_LockDelete( p_sys->p_playlist, i ); |
|---|
| 1934 | 1934 | msg_Dbg( p_intf, "requested playlist delete: %d", |
|---|
| 1935 | 1935 | i ); |
|---|
| … | … | |
| 1942 | 1942 | case MVLC_EMPTY: |
|---|
| 1943 | 1943 | { |
|---|
| 1944 | | while( p_sys->p_playlist->i_size > 0 ) |
|---|
| 1945 | | { |
|---|
| 1946 | | playlist_Delete( p_sys->p_playlist, 0 ); |
|---|
| 1947 | | } |
|---|
| | 1944 | playlist_LockClear( p_sys->p_playlist ); |
|---|
| 1948 | 1945 | msg_Dbg( p_intf, "requested playlist empty" ); |
|---|
| 1949 | 1946 | break; |
|---|
| ra90a19a |
r91d9398 |
|
| 653 | 653 | input_item_t *p_current = |
|---|
| 654 | 654 | ((input_thread_t*)p_demux->p_parent)->input.p_item; |
|---|
| 655 | | *pp_item = playlist_ItemGetByInput( p_playlist, p_current ); |
|---|
| | 655 | *pp_item = playlist_LockItemGetByInput( p_playlist, p_current ); |
|---|
| 656 | 656 | |
|---|
| 657 | 657 | if( !*pp_item ) |
|---|
| ra90a19a |
r91d9398 |
|
| 339 | 339 | if( p_playlist ) |
|---|
| 340 | 340 | { |
|---|
| 341 | | p_item = playlist_ItemGetByInput( p_playlist, |
|---|
| | 341 | p_item = playlist_LockItemGetByInput( p_playlist, |
|---|
| 342 | 342 | ((input_thread_t *)p_demux->p_parent)->input.p_item ); |
|---|
| 343 | 343 | playlist_ItemToNode( p_playlist, p_item ); |
|---|
| r3fdff4b |
r91d9398 |
|
| 128 | 128 | input_item_t *p_current = ( (input_thread_t*)p_demux->p_parent)-> |
|---|
| 129 | 129 | input.p_item; |
|---|
| 130 | | *pp_item = playlist_ItemGetByInput( p_playlist, p_current ); |
|---|
| | 130 | *pp_item = playlist_LockItemGetByInput( p_playlist, p_current ); |
|---|
| 131 | 131 | if( !*pp_item ) |
|---|
| 132 | 132 | { |
|---|
| r562ab59 |
r91d9398 |
|
| 507 | 507 | playlist_t * p_playlist = param; |
|---|
| 508 | 508 | |
|---|
| 509 | | playlist_Delete( p_playlist, i_cur_row ); |
|---|
| | 509 | playlist_LockDelete( p_playlist, i_cur_row ); |
|---|
| 510 | 510 | } |
|---|
| 511 | 511 | |
|---|
| r5d3edb8 |
r91d9398 |
|
| 315 | 315 | playlist_Stop( p_playlist ); |
|---|
| 316 | 316 | } |
|---|
| 317 | | playlist_Delete( p_playlist, p_item->input.i_id ); |
|---|
| | 317 | playlist_LockDelete( p_playlist, p_item->input.i_id ); |
|---|
| 318 | 318 | } |
|---|
| 319 | 319 | [self playlistUpdated]; |
|---|
| ra90a19a |
r91d9398 |
|
| 420 | 420 | int i_item = p_sys->p_playlist->i_index; |
|---|
| 421 | 421 | |
|---|
| 422 | | playlist_Delete( p_sys->p_playlist, p_sys->i_box_plidx ); |
|---|
| 423 | | if( i_item < p_sys->p_playlist->i_size && i_item != p_sys->p_playlist->i_index ) |
|---|
| | 422 | playlist_LockDelete( p_sys->p_playlist, p_sys->i_box_plidx ); |
|---|
| | 423 | if( i_item < p_sys->p_playlist->i_size && |
|---|
| | 424 | i_item != p_sys->p_playlist->i_index ) |
|---|
| 424 | 425 | { |
|---|
| 425 | 426 | playlist_Goto( p_sys->p_playlist, i_item ); |
|---|
| r65fd1e9 |
r91d9398 |
|
| 874 | 874 | p_rows = g_list_reverse( p_rows ); |
|---|
| 875 | 875 | } |
|---|
| 876 | | |
|---|
| | 876 | |
|---|
| 877 | 877 | for (p_node=p_rows; p_node!=NULL; p_node = p_node->next) |
|---|
| 878 | 878 | { |
|---|
| … | … | |
| 888 | 888 | |
|---|
| 889 | 889 | gtk_tree_model_get(p_model, &iter, 2, &item, -1); |
|---|
| 890 | | playlist_Delete(p_playlist, item); |
|---|
| | 890 | playlist_LockDelete(p_playlist, item); |
|---|
| 891 | 891 | } |
|---|
| 892 | 892 | } |
|---|
| … | … | |
| 930 | 930 | for(item = p_playlist->i_size - 1; item >= 0 ;item-- ) |
|---|
| 931 | 931 | { |
|---|
| 932 | | playlist_Delete( p_playlist, item); |
|---|
| | 932 | playlist_LockDelete( p_playlist, item); |
|---|
| 933 | 933 | } |
|---|
| 934 | 934 | vlc_object_release( p_playlist ); |
|---|
| rb851c88 |
r91d9398 |
|
| 65 | 65 | if( (*it).m_selected ) |
|---|
| 66 | 66 | { |
|---|
| 67 | | playlist_item_t *p_item = playlist_ItemGetByPos( m_pPlaylist, |
|---|
| 68 | | index ); |
|---|
| 69 | | playlist_Delete( m_pPlaylist, p_item->input.i_id ); |
|---|
| | 67 | playlist_item_t *p_item = playlist_LockItemGetByPos( m_pPlaylist, |
|---|
| | 68 | index ); |
|---|
| | 69 | playlist_LockDelete( m_pPlaylist, p_item->input.i_id ); |
|---|
| 70 | 70 | } |
|---|
| 71 | 71 | else |
|---|
| r542b992 |
r91d9398 |
|
| 391 | 391 | (const char *)path.mb_str(), |
|---|
| 392 | 392 | PLAYLIST_APPEND, PLAYLIST_END ); |
|---|
| 393 | | p_item = playlist_ItemGetById( p_playlist, i_id ); |
|---|
| | 393 | p_item = playlist_LockItemGetById( p_playlist, i_id ); |
|---|
| 394 | 394 | if( p_item ) |
|---|
| 395 | 395 | { |
|---|
| r9de73f4 |
r91d9398 |
|
| 620 | 620 | } |
|---|
| 621 | 621 | |
|---|
| 622 | | p_item = playlist_ItemGetById( p_playlist, i ); |
|---|
| | 622 | p_item = playlist_LockItemGetById( p_playlist, i ); |
|---|
| 623 | 623 | |
|---|
| 624 | 624 | wxTreeItemId item = FindItem( treectrl->GetRootItem(), p_item); |
|---|
| … | … | |
| 924 | 924 | } |
|---|
| 925 | 925 | |
|---|
| 926 | | playlist_Delete( p_playlist, item_id ); |
|---|
| | 926 | playlist_LockDelete( p_playlist, item_id ); |
|---|
| 927 | 927 | |
|---|
| 928 | 928 | vlc_object_release( p_playlist ); |
|---|
| … | … | |
| 1481 | 1481 | if( p_popup_item->i_children == -1 ) |
|---|
| 1482 | 1482 | { |
|---|
| | 1483 | wxMutexGuiLeave(); |
|---|
| 1483 | 1484 | playlist_PreparseEnqueue( p_playlist, &p_popup_item->input ); |
|---|
| | 1485 | wxMutexGuiEnter(); |
|---|
| 1484 | 1486 | } |
|---|
| 1485 | 1487 | else |
|---|
| ra90a19a |
r91d9398 |
|
| 1376 | 1376 | if( p_announce->p_item ) |
|---|
| 1377 | 1377 | { |
|---|
| 1378 | | playlist_Delete( p_playlist, p_announce->p_item->input.i_id ); |
|---|
| | 1378 | playlist_LockDelete( p_playlist, p_announce->p_item->input.i_id ); |
|---|
| 1379 | 1379 | } |
|---|
| 1380 | 1380 | |
|---|
| rd090e47 |
r91d9398 |
|
| 241 | 241 | { |
|---|
| 242 | 242 | // vlc_mutex_lock(&p_playlist->object_lock ); |
|---|
| 243 | | p_item = playlist_ItemGetByPos( p_playlist, |
|---|
| 244 | | p_playlist->i_index ); |
|---|
| | 243 | p_item = p_playlist->status.p_item; |
|---|
| 245 | 244 | item = p_item->input; |
|---|
| 246 | 245 | if( !p_item ) |
|---|
| r0aed16b |
r91d9398 |
|
| 437 | 437 | } |
|---|
| 438 | 438 | |
|---|
| | 439 | playlist_item_t *playlist_LockItemGetByPos( playlist_t *p_playlist, int i_pos ) |
|---|
| | 440 | { |
|---|
| | 441 | playlist_item_t *p_ret; |
|---|
| | 442 | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| | 443 | p_ret = playlist_ItemGetByPos( p_playlist, i_pos ); |
|---|
| | 444 | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| | 445 | return p_ret; |
|---|
| | 446 | } |
|---|
| | 447 | |
|---|
| 439 | 448 | /** |
|---|
| 440 | 449 | * Search an item by its id |
|---|
| … | … | |
| 457 | 466 | } |
|---|
| 458 | 467 | |
|---|
| | 468 | playlist_item_t *playlist_LockItemGetById( playlist_t *p_playlist, int i_id) |
|---|
| | 469 | { |
|---|
| | 470 | playlist_item_t *p_ret; |
|---|
| | 471 | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| | 472 | p_ret = playlist_ItemGetById( p_playlist, i_id ); |
|---|
| | 473 | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| | 474 | return p_ret; |
|---|
| | 475 | } |
|---|
| | 476 | |
|---|
| 459 | 477 | /** |
|---|
| 460 | 478 | * Search an item by its input_item_t |
|---|
| … | … | |
| 483 | 501 | } |
|---|
| 484 | 502 | |
|---|
| | 503 | playlist_item_t *playlist_LockItemGetByInput( playlist_t *p_playlist, |
|---|
| | 504 | input_item_t *p_item ) |
|---|
| | 505 | { |
|---|
| | 506 | playlist_item_t *p_ret; |
|---|
| | 507 | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| | 508 | p_ret = playlist_ItemGetByInput( p_playlist, p_item ); |
|---|
| | 509 | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| | 510 | return p_ret; |
|---|
| | 511 | } |
|---|
| 485 | 512 | |
|---|
| 486 | 513 | |
|---|
| … | … | |
| 506 | 533 | } |
|---|
| 507 | 534 | |
|---|
| 508 | | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| 509 | | |
|---|
| 510 | 535 | /* Remove it from the array of available items */ |
|---|
| 511 | 536 | for( i = 0 ; i < p_playlist->i_size ; i++ ) |
|---|
| … | … | |
| 516 | 541 | } |
|---|
| 517 | 542 | } |
|---|
| 518 | | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| 519 | 543 | var_SetInteger( p_playlist, "item-change", p_item->input.i_id ); |
|---|
| 520 | 544 | |
|---|
| 521 | 545 | return VLC_SUCCESS; |
|---|
| | 546 | } |
|---|
| | 547 | |
|---|
| | 548 | int playlist_LockItemToNode( playlist_t *p_playlist, playlist_item_t *p_item ) |
|---|
| | 549 | { |
|---|
| | 550 | int i_ret; |
|---|
| | 551 | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| | 552 | i_ret = playlist_ItemToNode( p_playlist, p_item ); |
|---|
| | 553 | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| | 554 | return i_ret; |
|---|
| 522 | 555 | } |
|---|
| 523 | 556 | |
|---|
| … | … | |
| 528 | 561 | * \see playlist_Replace |
|---|
| 529 | 562 | */ |
|---|
| 530 | | int playlist_LockAndReplace( playlist_t *p_playlist, |
|---|
| | 563 | int playlist_LockReplace( playlist_t *p_playlist, |
|---|
| 531 | 564 | playlist_item_t *p_olditem, |
|---|
| 532 | 565 | input_item_t *p_new ) |
|---|
| … | … | |
| 605 | 638 | if( p_playlist->status.p_item == p_item ) |
|---|
| 606 | 639 | { |
|---|
| 607 | | playlist_Control( p_playlist, PLAYLIST_STOP ); |
|---|
| | 640 | /* Hack we don't call playlist_Control for lock reasons */ |
|---|
| | 641 | p_playlist->status.i_status = PLAYLIST_STOPPED; |
|---|
| | 642 | p_playlist->request.b_request = VLC_TRUE; |
|---|
| 608 | 643 | p_playlist->status.p_item = NULL; |
|---|
| 609 | 644 | } |
|---|
| 610 | | |
|---|
| 611 | | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| 612 | 645 | |
|---|
| 613 | 646 | msg_Dbg( p_playlist, "deleting playlist item `%s'", |
|---|
| … | … | |
| 629 | 662 | playlist_ItemDelete( p_item ); |
|---|
| 630 | 663 | |
|---|
| 631 | | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| 632 | | |
|---|
| 633 | 664 | return VLC_SUCCESS; |
|---|
| | 665 | } |
|---|
| | 666 | |
|---|
| | 667 | int playlist_LockDelete( playlist_t * p_playlist, int i_id ) |
|---|
| | 668 | { |
|---|
| | 669 | int i_ret; |
|---|
| | 670 | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| | 671 | i_ret = playlist_Delete( p_playlist, i_id ); |
|---|
| | 672 | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| | 673 | return i_ret; |
|---|
| 634 | 674 | } |
|---|
| 635 | 675 | |
|---|
| … | … | |
| 653 | 693 | } |
|---|
| 654 | 694 | return VLC_SUCCESS; |
|---|
| | 695 | } |
|---|
| | 696 | |
|---|
| | 697 | int playlist_LockClear( playlist_t *p_playlist ) |
|---|
| | 698 | { |
|---|
| | 699 | int i_ret; |
|---|
| | 700 | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| | 701 | playlist_Clear( p_playlist ); |
|---|
| | 702 | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| | 703 | return i_ret; |
|---|
| 655 | 704 | } |
|---|
| 656 | 705 | |
|---|
| r0aed16b |
r91d9398 |
|
| 128 | 128 | p_playlist->p_general = playlist_NodeCreate( p_playlist, VIEW_CATEGORY, |
|---|
| 129 | 129 | _( "General" ), p_view->p_root ); |
|---|
| | 130 | p_playlist->p_general->i_flags |= PLAYLIST_RO_FLAG; |
|---|
| 130 | 131 | |
|---|
| 131 | 132 | /* Set startup status |
|---|
| … | … | |
| 573 | 574 | if( p_autodelete_item ) |
|---|
| 574 | 575 | { |
|---|
| 575 | | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| 576 | 576 | playlist_Delete( p_playlist, |
|---|
| 577 | 577 | p_autodelete_item->input.i_id ); |
|---|
| 578 | | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| 579 | 578 | p_autodelete_item = NULL; |
|---|
| 580 | 579 | } |
|---|
| … | … | |
| 588 | 587 | if( p_autodelete_item ) |
|---|
| 589 | 588 | { |
|---|
| 590 | | vlc_mutex_unlock( &p_playlist->object_lock ); |
|---|
| 591 | 589 | playlist_Delete( p_playlist, p_autodelete_item->input.i_id ); |
|---|
| 592 | | vlc_mutex_lock( &p_playlist->object_lock ); |
|---|
| 593 | 590 | p_autodelete_item = NULL; |
|---|
| 594 | 591 | } |
|---|
| … | … | |
| 771 | 768 | } |
|---|
| 772 | 769 | |
|---|
| 773 | | if( !p_playlist->request.b_request && p_playlist->status.p_item && |
|---|
| | 770 | if( !p_playlist->request.b_request && p_playlist->status.p_item && |
|---|
| 774 | 771 | !(p_playlist->status.p_item->i_flags & PLAYLIST_SKIP_FLAG) ) |
|---|
| 775 | 772 | { |
|---|
| r0aed16b |
r91d9398 |
|
| 87 | 87 | * Creates a new view and add it to the list |
|---|
| 88 | 88 | * |
|---|
| | 89 | * This function must be entered without the playlist lock |
|---|
| | 90 | * |
|---|
| 89 | 91 | * \param p_playlist a playlist object |
|---|
| 90 | 92 | * \param i_id the view identifier |
|---|
| … | … | |
| 114 | 116 | * Deletes a view |
|---|
| 115 | 117 | * |
|---|
| | 118 | * This function must be entered wit the playlist lock |
|---|
| | 119 | * |
|---|
| 116 | 120 | * \param p_view the view to delete |
|---|
| 117 | 121 | * \return nothing |
|---|
| … | … | |
| 122 | 126 | return VLC_SUCCESS; |
|---|
| 123 | 127 | } |
|---|
| 124 | | |
|---|
| 125 | 128 | |
|---|
| 126 | 129 | /** |
|---|
| … | … | |
| 367 | 370 | } |
|---|
| 368 | 371 | } |
|---|
| 369 | | var_SetInteger( p_playlist, "item-deleted", p_root->input.i_id ); |
|---|
| 370 | 372 | /* Delete the node */ |
|---|
| 371 | | for( i = 0 ; i< p_root->i_parents; i++ ) |
|---|
| 372 | | { |
|---|
| 373 | | playlist_NodeRemoveItem( p_playlist, p_root, |
|---|
| 374 | | p_root->pp_parents[i]->p_parent ); |
|---|
| 375 | | } |
|---|
| 376 | | playlist_ItemDelete( p_root ); |
|---|
| 377 | | return VLC_SUCCESS; |
|---|
| | 373 | if( p_root->i_flags & PLAYLIST_RO_FLAG ) |
|---|
| | 374 | { |
|---|
| | 375 | msg_Dbg( p_playlist, "unable to remove node, write-protected" ); |
|---|
| | 376 | } |
|---|
| | 377 | else |
|---|
| | 378 | { |
|---|
| | 379 | for( i = 0 ; i< p_root->i_parents; i++ ) |
|---|
| | 380 | { |
|---|
| | 381 | playlist_NodeRemoveItem( p_playlist, p_root, |
|---|
| | 382 | p_root->pp_parents[i]->p_parent ); |
|---|
| | 383 | } |
|---|
| | 384 | var_SetInteger( p_playlist, "item-deleted", p_root->input.i_id ); |
|---|
| | 385 | playlist_ItemDelete( p_root ); |
|---|
| | 386 | } |
|---|
| | 387 | return VLC_SUCCESS; |
|---|
| 378 | 388 | } |
|---|
| 379 | 389 | |
|---|