annotate foosdk/sdk/foobar2000/SDK/playlist.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "titleformat.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include "playback_control.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #include <functional>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #include "callback_merit.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 //! This interface allows filtering of playlist modification operations.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 //! Implemented by components "locking" playlists; use playlist_manager::playlist_lock_install() etc to takeover specific playlist with your instance of playlist_lock.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 class NOVTABLE playlist_lock : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 filter_add = 1 << 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 filter_remove = 1 << 1,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 filter_reorder = 1 << 2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 filter_replace = 1 << 3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 filter_rename = 1 << 4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 filter_remove_playlist = 1 << 5,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 filter_default_action = 1 << 6,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 //! Queries whether specified item insertiion operation is allowed in the locked playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 //! @param p_base Index from which the items are being inserted.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 //! @param p_data Items being inserted.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 //! @param p_selection Caller-requested selection state of items being inserted.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 //! @returns True to allow the operation, false to block it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 virtual bool query_items_add(t_size p_base, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 //! Queries whether specified item reorder operation is allowed in the locked playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 //! @param p_order Pointer to array containing permutation defining requested reorder operation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 //! @param p_count Number of items in array pointed to by p_order. This should always be equal to number of items on the locked playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 //! @returns True to allow the operation, false to block it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 virtual bool query_items_reorder(const t_size * p_order,t_size p_count) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 //! Queries whether specified item removal operation is allowed in the locked playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 //! @param p_mask Specifies which items from locked playlist are being removed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 //! @param p_force If set to true, the call is made only for notification purpose and items are getting removed regardless (after e.g. they have been physically removed).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 //! @returns True to allow the operation, false to block it. Note that return value is ignored if p_force is set to true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 virtual bool query_items_remove(const bit_array & p_mask,bool p_force) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 //! Queries whether specified item replacement operation is allowed in the locked playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 //! @param p_index Index of the item being replaced.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 //! @param p_old Old value of the item being replaced.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 //! @param p_new New value of the item being replaced.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 //! @returns True to allow the operation, false to block it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 virtual bool query_item_replace(t_size p_index,const metadb_handle_ptr & p_old,const metadb_handle_ptr & p_new)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 //! Queries whether renaming the locked playlist is allowed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 //! @param p_new_name Requested new name of the playlist; a UTF-8 encoded string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 //! @param p_new_name_len Length limit of the name string, in bytes (actual string may be shorter if null terminator is encountered before). Set this to infinite to use plain null-terminated strings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 //! @returns True to allow the operation, false to block it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 virtual bool query_playlist_rename(const char * p_new_name,t_size p_new_name_len) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 //! Queries whether removal of the locked playlist is allowed. Note that the lock will be released when the playlist is removed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 //! @returns True to allow the operation, false to block it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 virtual bool query_playlist_remove() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 //! Executes "default action" (doubleclick etc) for specified playlist item. When the playlist is not locked, default action starts playback of the item.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 //! @returns True if custom default action was executed, false to fall-through to default one for non-locked playlists (start playback).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 virtual bool execute_default_action(t_size p_item) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 //! Notifies lock about changed index of the playlist, in result of user reordering playlists or removing other playlists.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 virtual void on_playlist_index_change(t_size p_new_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 //! Notifies lock about the locked playlist getting removed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 virtual void on_playlist_remove() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 //! Retrieves human-readable name of playlist lock to display.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 virtual void get_lock_name(pfc::string_base & p_out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 //! Requests user interface of component controlling the playlist lock to be shown.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 virtual void show_ui() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 //! Queries which actions the lock filters. The return value must not change while the lock is registered with playlist_manager. The return value is a combination of one or more filter_* constants.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 virtual t_uint32 get_filter_mask() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 FB2K_MAKE_SERVICE_INTERFACE(playlist_lock,service_base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 struct t_playback_queue_item {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 metadb_handle_ptr m_handle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 t_size m_playlist,m_item;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 bool operator==(const t_playback_queue_item & p_item) const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 bool operator!=(const t_playback_queue_item & p_item) const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 //! This service provides methods for all sorts of playlist interaction.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 //! All playlist_manager methods are valid only from main app thread.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 //! Usage: playlist_manager::get() to obtain an instance.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 class NOVTABLE playlist_manager : public service_base
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 typedef std::function<bool(size_t, const metadb_handle_ptr&, bool) > enum_items_func;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 //! Callback interface for playlist enumeration methods.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 class NOVTABLE enum_items_callback {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 //! @returns True to continue enumeration, false to abort.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 virtual bool on_item(t_size p_index,const metadb_handle_ptr & p_location,bool b_selected) = 0;//return false to stop
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 //! Retrieves number of playlists.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 virtual t_size get_playlist_count() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 //! Retrieves index of active playlist; infinite if no playlist is active.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 virtual t_size get_active_playlist() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 //! Sets active playlist (infinite to set no active playlist).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 virtual void set_active_playlist(t_size p_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 //! Retrieves playlist from which items to be played are taken from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 virtual t_size get_playing_playlist() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 //! Sets playlist from which items to be played are taken from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 virtual void set_playing_playlist(t_size p_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 //! Removes playlists according to specified mask. See also: bit_array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 virtual bool remove_playlists(const bit_array & p_mask) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 //! Creates a new playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 //! @param p_name Name of playlist to create; a UTF-8 encoded string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 //! @param p_name_length Length limit of playlist name string, in bytes (actual string may be shorter if null terminator is encountered before). Set this to infinite to use plain null-terminated strings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 //! @param p_index Index at which to insert new playlist; set to infinite to put it at the end of playlist list.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 //! @returns Actual index of newly inserted playlist, infinite on failure (call from invalid context).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 virtual t_size create_playlist(const char * p_name,t_size p_name_length,t_size p_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 //! Reorders the playlist list according to specified permutation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 //! @returns True on success, false on failure (call from invalid context).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 virtual bool reorder(const t_size * p_order,t_size p_count) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 //! Retrieves number of items on specified playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 virtual t_size playlist_get_item_count(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 //! Enumerates contents of specified playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 virtual void playlist_enum_items(t_size p_playlist,enum_items_callback & p_callback,const bit_array & p_mask) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 void playlist_enum_items(size_t which, enum_items_func, const bit_array&);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 //! Retrieves index of focus item on specified playlist; returns infinite when no item has focus.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 virtual t_size playlist_get_focus_item(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 //! Retrieves name of specified playlist. Should never fail unless the parameters are invalid.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 virtual bool playlist_get_name(t_size p_playlist,pfc::string_base & p_out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 //! Reorders items in specified playlist according to specified permutation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 virtual bool playlist_reorder_items(t_size p_playlist,const t_size * p_order,t_size p_count) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 //! Selects/deselects items on specified playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 //! @param p_playlist Index of playlist to alter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 //! @param p_affected Mask of items to alter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 //! @param p_status Mask of selected/deselected state to apply to items specified by p_affected.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 virtual void playlist_set_selection(t_size p_playlist,const bit_array & p_affected,const bit_array & p_status) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 //! Removes specified items from specified playlist. Returns true on success or false on failure (playlist locked).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 virtual bool playlist_remove_items(t_size p_playlist,const bit_array & mask)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 //! Replaces specified item on specified playlist. Returns true on success or false on failure (playlist locked).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 virtual bool playlist_replace_item(t_size p_playlist,t_size p_item,const metadb_handle_ptr & p_new_item) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 //! Sets index of focus item on specified playlist; use infinite to set no focus item.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 virtual void playlist_set_focus_item(t_size p_playlist,t_size p_item) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 //! Inserts new items into specified playlist, at specified position.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 virtual t_size playlist_insert_items(t_size p_playlist,t_size p_base,const pfc::list_base_const_t<metadb_handle_ptr> & data,const bit_array & p_selection) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 //! Tells playlist renderers to make sure that specified item is visible.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 virtual void playlist_ensure_visible(t_size p_playlist,t_size p_item) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 //! Renames specified playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 //! @param p_name New name of playlist; a UTF-8 encoded string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 //! @param p_name_length Length limit of playlist name string, in bytes (actual string may be shorter if null terminator is encountered before). Set this to infinite to use plain null-terminated strings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 //! @returns True on success, false on failure (playlist locked).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 virtual bool playlist_rename(t_size p_index,const char * p_name,t_size p_name_length) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 //! Creates an undo restore point for specified playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 virtual void playlist_undo_backup(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 //! Reverts specified playlist to last undo restore point and generates a redo restore point.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 //! @returns True on success, false on failure (playlist locked or no restore point available).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 virtual bool playlist_undo_restore(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 //! Reverts specified playlist to next redo restore point and generates an undo restore point.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 //! @returns True on success, false on failure (playlist locked or no restore point available).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 virtual bool playlist_redo_restore(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 //! Returns whether an undo restore point is available for specified playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 virtual bool playlist_is_undo_available(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 //! Returns whether a redo restore point is available for specified playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 virtual bool playlist_is_redo_available(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 //! Renders information about specified playlist item, using specified titleformatting script parameters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 //! @param p_playlist Index of playlist containing item being processed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 //! @param p_item Index of item being processed in the playlist containing it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 //! @param p_hook Titleformatting script hook to use; see titleformat_hook documentation for more info. Set to NULL when hook functionality is not needed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 //! @param p_out String object receiving results.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 //! @param p_script Compiled titleformatting script to use; see titleformat_object cocumentation for more info.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 //! @param p_filter Text filter to use; see titleformat_text_filter documentation for more info. Set to NULL when text filter functionality is not needed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 //! @param p_playback_info_level Level of playback related information requested. See playback_control::t_display_level documentation for more info.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 virtual void playlist_item_format_title(t_size p_playlist,t_size p_item,titleformat_hook * p_hook,pfc::string_base & p_out,const service_ptr_t<titleformat_object> & p_script,titleformat_text_filter * p_filter,playback_control::t_display_level p_playback_info_level)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 //! Retrieves playlist position of currently playing item.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 //! @param p_playlist Receives index of playlist containing currently playing item on success.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 //! @param p_index Receives index of currently playing item in the playlist that contains it on success.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 //! @returns True on success, false on failure (not playing or currently played item has been removed from the playlist it was on when starting).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 virtual bool get_playing_item_location(t_size * p_playlist,t_size * p_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 //! Sorts specified playlist - entire playlist or selection only - by specified title formatting pattern, or randomizes the order.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 //! @param p_playlist Index of playlist to alter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 //! @param p_pattern Title formatting pattern to sort by (an UTF-8 encoded null-termindated string). Set to NULL to randomize the order of items.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 //! @param p_sel_only Set to false to sort/randomize whole playlist, or to true to sort/randomize only selection on the playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 //! @returns True on success, false on failure (playlist locked etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 virtual bool playlist_sort_by_format(t_size p_playlist,const char * p_pattern,bool p_sel_only) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 //! For internal use only; p_items must be sorted by metadb::path_compare; use file_operation_callback static methods instead of calling this directly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 virtual void on_files_deleted_sorted(const pfc::list_base_const_t<const char *> & p_items) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 //! For internal use only; p_from must be sorted by metadb::path_compare; use file_operation_callback static methods instead of calling this directly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 virtual void on_files_moved_sorted(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 virtual bool playlist_lock_install(t_size p_playlist,const service_ptr_t<playlist_lock> & p_lock) = 0;//returns false when invalid playlist or already locked
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 virtual bool playlist_lock_uninstall(t_size p_playlist,const service_ptr_t<playlist_lock> & p_lock) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 virtual bool playlist_lock_is_present(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 virtual bool playlist_lock_query_name(t_size p_playlist,pfc::string_base & p_out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 virtual bool playlist_lock_show_ui(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 virtual t_uint32 playlist_lock_get_filter_mask(t_size p_playlist) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 //! Retrieves number of available playback order modes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 virtual t_size playback_order_get_count() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 //! Retrieves name of specified playback order move.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 //! @param p_index Index of playback order mode to query, from 0 to playback_order_get_count() return value - 1.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 //! @returns Null-terminated UTF-8 encoded string containing name of the playback order mode. Returned pointer points to statically allocated string and can be safely stored without having to free it later.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 virtual const char * playback_order_get_name(t_size p_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 //! Retrieves GUID of specified playback order mode. Used for managing playback modes without relying on names.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 //! @param p_index Index of playback order mode to query, from 0 to playback_order_get_count() return value - 1.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 virtual GUID playback_order_get_guid(t_size p_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 //! Retrieves index of active playback order mode.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 virtual t_size playback_order_get_active() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 //! Sets index of active playback order mode.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 virtual void playback_order_set_active(t_size p_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 virtual void queue_remove_mask(bit_array const & p_mask) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 virtual void queue_add_item_playlist(t_size p_playlist,t_size p_item) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 virtual void queue_add_item(metadb_handle_ptr p_item) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 virtual t_size queue_get_count() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 virtual void queue_get_contents(pfc::list_base_t<t_playback_queue_item> & p_out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 //! Returns index (0-based) on success, infinite on failure (item not in queue).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 virtual t_size queue_find_index(t_playback_queue_item const & p_item) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 //! Registers a playlist callback; registered object receives notifications about any modifications of any of loaded playlists.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 //! @param p_callback Callback interface to register.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 //! @param p_flags Flags indicating which callback methods are requested. See playlist_callback::flag_* constants for more info. The main purpose of flags parameter is working set optimization by not calling methods that do nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 virtual void register_callback(class playlist_callback * p_callback,unsigned p_flags) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 //! Registers a playlist callback; registered object receives notifications about any modifications of active playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 //! @param p_callback Callback interface to register.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 //! @param p_flags Flags indicating which callback methods are requested. See playlist_callback_single::flag_* constants for more info. The main purpose of flags parameter is working set optimization by not calling methods that do nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 virtual void register_callback(class playlist_callback_single * p_callback,unsigned p_flags) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 //! Unregisters a playlist callback (playlist_callback version).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 virtual void unregister_callback(class playlist_callback * p_callback) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 //! Unregisters a playlist callback (playlist_callback_single version).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 virtual void unregister_callback(class playlist_callback_single * p_callback) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 //! Modifies flags indicating which calback methods are requested (playlist_callback version).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 virtual void modify_callback(class playlist_callback * p_callback,unsigned p_flags) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 //! Modifies flags indicating which calback methods are requested (playlist_callback_single version).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 virtual void modify_callback(class playlist_callback_single * p_callback,unsigned p_flags) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 //! Executes default doubleclick/enter action for specified item on specified playlist (starts playing the item unless overridden by a lock to do something else).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 virtual bool playlist_execute_default_action(t_size p_playlist,t_size p_item) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 //! Helper; removes all items from the playback queue.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 void queue_flush() {queue_remove_mask(pfc::bit_array_true());}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 //! Helper; returns whether there are items in the playback queue.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 bool queue_is_active() {return queue_get_count() > 0;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 //! Helper; highlights currently playing item; returns true on success or false on failure (not playing or currently played item has been removed from playlist since playback started).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 bool highlight_playing_item();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 //! Helper; removes single playlist of specified index.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 bool remove_playlist(t_size p_playlist);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 //! Helper; removes single playlist of specified index, and switches to another playlist when possible.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 bool remove_playlist_switch(t_size p_playlist);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 //! Helper; removes a playlist switching to another; gracefully refuses to remove the only playlist. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 //! It is recommended to call this as a result of user input requesting playlist removal. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 //! Do not call MessageBeep() etc when it returns false, the function handles these for you.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 bool remove_playlist_user(size_t which);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 bool remove_playlist_user();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 //! Helper; returns whether specified item on specified playlist is selected or not.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 bool playlist_is_item_selected(t_size p_playlist,t_size p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 //! Helper; retrieves metadb_handle of the specified playlist item. Returns true on success, false on failure (invalid parameters).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 bool playlist_get_item_handle(metadb_handle_ptr & p_out,t_size p_playlist,t_size p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 //! Helper; retrieves metadb_handle of the specified playlist item; throws pfc::exception_invalid_params() on failure.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 metadb_handle_ptr playlist_get_item_handle(t_size playlist, t_size item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 //! Moves selected items up/down in the playlist by specified offset.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 //! @param p_playlist Index of playlist to alter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 //! @param p_delta Offset to move items by. Set it to a negative valuye to move up, or to a positive value to move down.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 //! @returns True on success, false on failure (e.g. playlist locked).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 bool playlist_move_selection(t_size p_playlist,int p_delta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 //! Retrieves selection map of specific playlist, using bit_array_var interface.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 void playlist_get_selection_mask(t_size p_playlist,bit_array_var & out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 void playlist_get_items(t_size p_playlist,pfc::list_base_t<metadb_handle_ptr> & out,const bit_array & p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 void playlist_get_all_items(t_size p_playlist,pfc::list_base_t<metadb_handle_ptr> & out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 void playlist_get_selected_items(t_size p_playlist,pfc::list_base_t<metadb_handle_ptr> & out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 //! Clears contents of specified playlist (removes all items from it).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 void playlist_clear(t_size p_playlist);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 bool playlist_add_items(t_size playlist,const pfc::list_base_const_t<metadb_handle_ptr> & data,const bit_array & p_selection);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 void playlist_clear_selection(t_size p_playlist);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 void playlist_remove_selection(t_size p_playlist,bool p_crop = false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 //! Changes contents of the specified playlist to the specified items, trying to reuse existing playlist content as much as possible (preserving selection/focus/etc). Order of items in playlist not guaranteed to be the same as in the specified item list.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 //! @returns true if the playlist has been altered, false if there was nothing to update.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 bool playlist_update_content(t_size playlist, metadb_handle_list_cref content, bool bUndoBackup);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 //retrieving status
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 t_size activeplaylist_get_item_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 void activeplaylist_enum_items(enum_items_callback & p_callback,const bit_array & p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 void activeplaylist_enum_items(enum_items_func, const bit_array&);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 t_size activeplaylist_get_focus_item();//focus may be infinite if no item is focused
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 bool activeplaylist_get_name(pfc::string_base & p_out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 //modifying playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 bool activeplaylist_reorder_items(const t_size * order,t_size count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 void activeplaylist_set_selection(const bit_array & affected,const bit_array & status);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 bool activeplaylist_remove_items(const bit_array & mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 bool activeplaylist_replace_item(t_size p_item,const metadb_handle_ptr & p_new_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 void activeplaylist_set_focus_item(t_size p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 t_size activeplaylist_insert_items(t_size p_base,const pfc::list_base_const_t<metadb_handle_ptr> & data,const bit_array & p_selection);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 void activeplaylist_ensure_visible(t_size p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 bool activeplaylist_rename(const char * p_name,t_size p_name_len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 void activeplaylist_undo_backup();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 bool activeplaylist_undo_restore();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 bool activeplaylist_redo_restore();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 bool activeplaylist_is_item_selected(t_size p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 bool activeplaylist_get_item_handle(metadb_handle_ptr & item,t_size p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 metadb_handle_ptr activeplaylist_get_item_handle(t_size p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 void activeplaylist_move_selection(int p_delta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 void activeplaylist_get_selection_mask(bit_array_var & out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 void activeplaylist_get_items(pfc::list_base_t<metadb_handle_ptr> & out,const bit_array & p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 void activeplaylist_get_all_items(pfc::list_base_t<metadb_handle_ptr> & out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 void activeplaylist_get_selected_items(pfc::list_base_t<metadb_handle_ptr> & out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 void activeplaylist_clear();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 bool activeplaylist_add_items(const pfc::list_base_const_t<metadb_handle_ptr> & data,const bit_array & p_selection);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 bool playlist_insert_items_filter(t_size p_playlist,t_size p_base,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 bool activeplaylist_insert_items_filter(t_size p_base,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 //! \deprecated (since 0.9.3) Use playlist_incoming_item_filter_v2::process_locations_async whenever possible
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 bool playlist_insert_locations(t_size p_playlist,t_size p_base,const pfc::list_base_const_t<const char*> & p_urls,bool p_select,fb2k::hwnd_t p_parentwnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 //! \deprecated (since 0.9.3) Use playlist_incoming_item_filter_v2::process_locations_async whenever possible
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 bool activeplaylist_insert_locations(t_size p_base,const pfc::list_base_const_t<const char*> & p_urls,bool p_select,fb2k::hwnd_t p_parentwnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 bool playlist_add_items_filter(t_size p_playlist,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 bool activeplaylist_add_items_filter(const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 bool playlist_add_locations(t_size p_playlist,const pfc::list_base_const_t<const char*> & p_urls,bool p_select,fb2k::hwnd_t p_parentwnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 bool activeplaylist_add_locations(const pfc::list_base_const_t<const char*> & p_urls,bool p_select,fb2k::hwnd_t p_parentwnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 void reset_playing_playlist();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 void activeplaylist_clear_selection();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 void activeplaylist_remove_selection(bool p_crop = false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 void activeplaylist_item_format_title(t_size p_item,titleformat_hook * p_hook,pfc::string_base & out,const service_ptr_t<titleformat_object> & p_script,titleformat_text_filter * p_filter,play_control::t_display_level p_playback_info_level);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 void playlist_set_selection_single(t_size p_playlist,t_size p_item,bool p_state);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 void activeplaylist_set_selection_single(t_size p_item,bool p_state);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 t_size playlist_get_selection_count(t_size p_playlist,t_size p_max);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 t_size activeplaylist_get_selection_count(t_size p_max);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 bool playlist_get_focus_item_handle(metadb_handle_ptr & p_item,t_size p_playlist);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 bool activeplaylist_get_focus_item_handle(metadb_handle_ptr & item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 t_size find_playlist(const char * p_name,t_size p_name_length = ~0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 t_size find_or_create_playlist(const char * p_name,t_size p_name_length = ~0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 t_size find_or_create_playlist_unlocked(const char * p_name,t_size p_name_length = ~0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 t_size create_playlist_autoname(t_size p_index = ~0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 bool activeplaylist_sort_by_format(const char * spec,bool p_sel_only);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 t_uint32 activeplaylist_lock_get_filter_mask();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 bool activeplaylist_is_undo_available();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 bool activeplaylist_is_redo_available();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 bool activeplaylist_execute_default_action(t_size p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 void remove_items_from_all_playlists(const pfc::list_base_const_t<metadb_handle_ptr> & p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 void active_playlist_fix();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 bool get_all_items(pfc::list_base_t<metadb_handle_ptr> & out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 void playlist_activate_delta(int p_delta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 void playlist_activate_next() {playlist_activate_delta(1);}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 void playlist_activate_previous() {playlist_activate_delta(-1);}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378 t_size playlist_get_selected_count(t_size p_playlist,bit_array const & p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 t_size activeplaylist_get_selected_count(bit_array const & p_mask) {return playlist_get_selected_count(get_active_playlist(),p_mask);}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 bool playlist_find_item(t_size p_playlist,metadb_handle_ptr p_item,t_size & p_result);//inefficient, walks entire playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 bool playlist_find_item_selected(t_size p_playlist,metadb_handle_ptr p_item,t_size & p_result);//inefficient, walks entire playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 t_size playlist_set_focus_by_handle(t_size p_playlist,metadb_handle_ptr p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 bool activeplaylist_find_item(metadb_handle_ptr p_item,t_size & p_result);//inefficient, walks entire playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 t_size activeplaylist_set_focus_by_handle(metadb_handle_ptr p_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387 static void g_make_selection_move_permutation(t_size * p_output,t_size p_count,const bit_array & p_selection,int p_delta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 //! Helper to update playlists after rechaptering a file. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 //! You typically want to call metadb_io_v2::on_file_rechaptered() instead, as it will forcibly reload info first.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 void on_file_rechaptered(const char * path, metadb_handle_list_cref items);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 void on_files_rechaptered( metadb_handle_list_cref newHandles );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 FB2K_MAKE_SERVICE_COREAPI(playlist_manager);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 //! Extension of the playlist_manager service that manages playlist properties.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398 //! Playlist properties come in two flavors: persistent and runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 //! Persistent properties are blocks of binary that that will be preserved when the application is exited and restarted.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 //! Runtime properties are service pointers that will be lost when the application exits.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 //! \since 0.9.5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 class NOVTABLE playlist_manager_v2 : public playlist_manager {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 //! Write a persistent playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 //! \param p_stream stream that contains the data that will be associated with the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 //! \param p_abort abort_callback that will be used when reading from p_stream
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 virtual void playlist_set_property(t_size p_playlist,const GUID & p_property,stream_reader * p_stream,t_size p_size_hint,abort_callback & p_abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410 //! Read a persistent playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413 //! \param p_stream stream that will receive the stored data
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 //! \param p_abort abort_callback that will be used when writing to p_stream
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 //! \return true if the property exists, false otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 virtual bool playlist_get_property(t_size p_playlist,const GUID & p_property,stream_writer * p_stream,abort_callback & p_abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 //! Test existence of a persistent playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 //! \return true if the property exists, false otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 virtual bool playlist_have_property(t_size p_playlist,const GUID & p_property) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 //! Remove a persistent playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 //! \return true if the property existed, false otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 virtual bool playlist_remove_property(t_size p_playlist,const GUID & p_property) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 //! Write a runtime playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 //! \param p_data service pointer that will be associated with the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 virtual void playlist_set_runtime_property(t_size p_playlist,const GUID & p_property,service_ptr_t<service_base> p_data) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 //! Read a runtime playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 //! \param p_data base service pointer reference that will receive the stored servive pointer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 //! \return true if the property exists, false otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 virtual bool playlist_get_runtime_property(t_size p_playlist,const GUID & p_property,service_ptr_t<service_base> & p_data) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 //! Test existence of a runtime playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 //! \return true if the property exists, false otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 virtual bool playlist_have_runtime_property(t_size p_playlist,const GUID & p_property) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 //! Remove a runtime playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 //! \return true if the property existed, false otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 virtual bool playlist_remove_runtime_property(t_size p_playlist,const GUID & p_property) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 //! Write a persistent playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 //! \param p_data array that contains the data that will be associated with the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 template<typename t_array> void playlist_set_property(t_size p_playlist,const GUID & p_property,const t_array & p_data) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 PFC_STATIC_ASSERT( sizeof(p_data[0]) == 1 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456 stream_reader_memblock_ref reader(p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 playlist_set_property(p_playlist,p_property,&reader,p_data.get_size(),fb2k::noAbort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 //! Read a persistent playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 //! \param p_data array that will receive the stored data
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 //! \return true if the property exists, false otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 template<typename t_array> bool playlist_get_property(t_size p_playlist,const GUID & p_property,t_array & p_data) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 PFC_STATIC_ASSERT( sizeof(p_data[0]) == 1 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 typedef pfc::array_t<t_uint8,pfc::alloc_fast_aggressive> t_temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 t_temp temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 stream_writer_buffer_append_ref_t<t_temp> reader(temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 if (!playlist_get_property(p_playlist,p_property,&reader,fb2k::noAbort)) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 p_data = temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 pfc::array_t<uint8_t> playlist_get_property(t_size playlist, const GUID& prop) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 pfc::array_t<uint8_t> ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 this->playlist_get_property(playlist, prop, ret);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 //! Read a runtime playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 //! \param p_data specific service pointer reference that will receive the stored servive pointer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 //! \return true if the property exists and can be converted to the type of p_data, false otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 template<typename _t_interface> bool playlist_get_runtime_property(t_size p_playlist,const GUID & p_property,service_ptr_t<_t_interface> & p_data) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486 service_ptr_t<service_base> ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 if (!playlist_get_runtime_property(p_playlist,p_property,ptr)) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 return ptr->service_query_t(p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 //! Write a persistent playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 //! \param p_value integer that will be associated with the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 template<typename _t_int>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 void playlist_set_property_int(t_size p_playlist,const GUID & p_property,_t_int p_value) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497 pfc::array_t<t_uint8> temp; temp.set_size(sizeof(_t_int));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498 pfc::encode_little_endian(temp.get_ptr(),p_value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499 playlist_set_property(p_playlist,p_property,temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 //! Read a persistent playlist property.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502 //! \param p_playlist Index of the playlist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 //! \param p_property GUID that identifies the property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504 //! \param p_value integer reference that will receive the stored data
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 //! \return true if the property exists and if the data is compatible with p_value, false otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506 template<typename _t_int>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 bool playlist_get_property_int(t_size p_playlist,const GUID & p_property,_t_int & p_value) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 pfc::array_t<t_uint8> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 if (!playlist_get_property(p_playlist,p_property,temp)) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510 if (temp.get_size() != sizeof(_t_int)) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 pfc::decode_little_endian(p_value,temp.get_ptr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playlist_manager_v2,playlist_manager)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 //! \since 0.9.5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 class NOVTABLE playlist_manager_v3 : public playlist_manager_v2 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playlist_manager_v3,playlist_manager_v2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 virtual t_size recycler_get_count() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523 virtual void recycler_get_content(t_size which, metadb_handle_list_ref out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 virtual void recycler_get_name(t_size which, pfc::string_base & out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 virtual t_uint32 recycler_get_id(t_size which) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 virtual void recycler_purge(const bit_array & mask) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 virtual void recycler_restore(t_size which) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529 void recycler_restore_by_id(t_uint32 id);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530 t_size recycler_find_by_id(t_uint32 id);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 //! \since 0.9.5.4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534 class NOVTABLE playlist_manager_v4 : public playlist_manager_v3 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playlist_manager_v4, playlist_manager_v3)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537 virtual void playlist_get_sideinfo(t_size which, stream_writer * stream, abort_callback & abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538 virtual t_size create_playlist_ex(const char * p_name,t_size p_name_length,t_size p_index, metadb_handle_list_cref content, stream_reader * sideInfo, abort_callback & abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541 //! \since 2.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 class NOVTABLE playlist_manager_v5 : public playlist_manager_v4 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playlist_manager_v5, playlist_manager_v4)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 virtual GUID playlist_get_guid(size_t idx) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546 virtual size_t find_playlist_by_guid(const GUID&) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 //! \since 2.0 beta 8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 class NOVTABLE playlist_manager_v6 : public playlist_manager_v5 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playlist_manager_v6, playlist_manager_v5);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 virtual void set_callback_merit(class playlist_callback*, fb2k::callback_merit_t) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554 virtual void set_callback_merit(class playlist_callback_single*, fb2k::callback_merit_t) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558 // IMPLEMENTATION NOTE: all playlist_callback methods could not be declared noexcept for historical reasons, but it's strongly recommended that your overrides of these methods are noexcept.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 class NOVTABLE playlist_callback
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563 virtual void on_items_added(t_size p_playlist,t_size p_start, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection)=0;//inside any of these methods, you can call playlist APIs to get exact info about what happened (but only methods that read playlist state, not those that modify it)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564 virtual void on_items_reordered(t_size p_playlist,const t_size * p_order,t_size p_count)=0;//changes selection too; doesnt actually change set of items that are selected or item having focus, just changes their order
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 virtual void on_items_removing(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;//called before actually removing them
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566 virtual void on_items_removed(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 virtual void on_items_selection_change(t_size p_playlist,const bit_array & p_affected,const bit_array & p_state) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568 virtual void on_item_focus_change(t_size p_playlist,t_size p_from,t_size p_to)=0;//focus may be -1 when no item has focus; reminder: focus may also change on other callbacks
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 virtual void on_items_modified(t_size p_playlist,const bit_array & p_mask)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 virtual void on_items_modified_fromplayback(t_size p_playlist,const bit_array & p_mask,play_control::t_display_level p_level)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 struct t_on_items_replaced_entry
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 t_size m_index;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576 metadb_handle_ptr m_old,m_new;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 virtual void on_items_replaced(t_size p_playlist,const bit_array & p_mask,const pfc::list_base_const_t<t_on_items_replaced_entry> & p_data)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 virtual void on_item_ensure_visible(t_size p_playlist,t_size p_idx)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 virtual void on_playlist_activate(t_size p_old,t_size p_new) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584 virtual void on_playlist_created(t_size p_index,const char * p_name,t_size p_name_len) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 virtual void on_playlists_reorder(const t_size * p_order,t_size p_count) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586 virtual void on_playlists_removing(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 virtual void on_playlists_removed(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 virtual void on_playlist_renamed(t_size p_index,const char * p_new_name,t_size p_new_name_len) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 virtual void on_default_format_changed() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 virtual void on_playback_order_changed(t_size p_new_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 virtual void on_playlist_locked(t_size p_playlist,bool p_locked) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 flag_on_items_added = 1 << 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 flag_on_items_reordered = 1 << 1,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597 flag_on_items_removing = 1 << 2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 flag_on_items_removed = 1 << 3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 flag_on_items_selection_change = 1 << 4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600 flag_on_item_focus_change = 1 << 5,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 flag_on_items_modified = 1 << 6,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 flag_on_items_modified_fromplayback = 1 << 7,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603 flag_on_items_replaced = 1 << 8,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 flag_on_item_ensure_visible = 1 << 9,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 flag_on_playlist_activate = 1 << 10,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606 flag_on_playlist_created = 1 << 11,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607 flag_on_playlists_reorder = 1 << 12,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608 flag_on_playlists_removing = 1 << 13,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609 flag_on_playlists_removed = 1 << 14,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 flag_on_playlist_renamed = 1 << 15,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 flag_on_default_format_changed = 1 << 16,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 flag_on_playback_order_changed = 1 << 17,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 flag_on_playlist_locked = 1 << 18,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 flag_all = ~0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616 flag_item_ops = flag_on_items_added | flag_on_items_reordered | flag_on_items_removing | flag_on_items_removed | flag_on_items_selection_change | flag_on_item_focus_change | flag_on_items_modified | flag_on_items_modified_fromplayback | flag_on_items_replaced | flag_on_item_ensure_visible,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 flag_playlist_ops = flag_on_playlist_activate | flag_on_playlist_created | flag_on_playlists_reorder | flag_on_playlists_removing | flag_on_playlists_removed | flag_on_playlist_renamed | flag_on_playlist_locked,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619 protected:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 playlist_callback() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621 ~playlist_callback() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 class NOVTABLE playlist_callback_static : public service_base, public playlist_callback
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 virtual unsigned get_flags() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(playlist_callback_static);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 class NOVTABLE playlist_callback_single
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635 virtual void on_items_added(t_size p_base, metadb_handle_list_cref p_data,const bit_array & p_selection)=0;//inside any of these methods, you can call playlist APIs to get exact info about what happened (but only methods that read playlist state, not those that modify it)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 virtual void on_items_reordered(const t_size * p_order,t_size p_count)=0;//changes selection too; doesnt actually change set of items that are selected or item having focus, just changes their order
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 virtual void on_items_removing(const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;//called before actually removing them
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 virtual void on_items_removed(const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 virtual void on_items_selection_change(const bit_array & p_affected,const bit_array & p_state) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640 virtual void on_item_focus_change(t_size p_from,t_size p_to)=0;//focus may be -1 when no item has focus; reminder: focus may also change on other callbacks
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 virtual void on_items_modified(const bit_array & p_mask)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 virtual void on_items_modified_fromplayback(const bit_array & p_mask,play_control::t_display_level p_level)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 virtual void on_items_replaced(const bit_array & p_mask,const pfc::list_base_const_t<playlist_callback::t_on_items_replaced_entry> & p_data)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644 virtual void on_item_ensure_visible(t_size p_idx)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 virtual void on_playlist_switch() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 virtual void on_playlist_renamed(const char * p_new_name,t_size p_new_name_len) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 virtual void on_playlist_locked(bool p_locked) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 virtual void on_default_format_changed() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 virtual void on_playback_order_changed(t_size p_new_index) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 flag_on_items_added = 1 << 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655 flag_on_items_reordered = 1 << 1,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656 flag_on_items_removing = 1 << 2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 flag_on_items_removed = 1 << 3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 flag_on_items_selection_change = 1 << 4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 flag_on_item_focus_change = 1 << 5,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660 flag_on_items_modified = 1 << 6,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661 flag_on_items_modified_fromplayback = 1 << 7,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662 flag_on_items_replaced = 1 << 8,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663 flag_on_item_ensure_visible = 1 << 9,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664 flag_on_playlist_switch = 1 << 10,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 flag_on_playlist_renamed = 1 << 11,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 flag_on_playlist_locked = 1 << 12,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 flag_on_default_format_changed = 1 << 13,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668 flag_on_playback_order_changed = 1 << 14,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 flag_all = ~0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671 protected:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672 playlist_callback_single() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673 ~playlist_callback_single() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676 //! playlist_callback implementation helper - registers itself on creation / unregisters on destruction. Must not be instantiated statically!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 class playlist_callback_impl_base : public playlist_callback {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679 playlist_callback_impl_base(t_uint32 p_flags = 0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
680 playlist_manager::get()->register_callback(this,p_flags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
681 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
682 ~playlist_callback_impl_base() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
683 playlist_manager::get()->unregister_callback(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
684 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
685 void set_callback_flags(t_uint32 p_flags) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
686 playlist_manager::get()->modify_callback(this,p_flags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
687 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
688 //dummy implementations - avoid possible pure virtual function calls!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
689 void on_items_added(t_size p_playlist, t_size p_start, metadb_handle_list_cref p_data, const bit_array& p_selection) override { (void)p_playlist; (void)p_start; (void)p_data; (void)p_selection; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
690 void on_items_reordered(t_size p_playlist, const t_size* p_order, t_size p_count) override { (void)p_playlist; (void)p_order; (void)p_count; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
691 void on_items_removing(t_size p_playlist, const bit_array& p_mask, t_size p_old_count, t_size p_new_count) override { (void)p_playlist; (void)p_mask; (void)p_old_count; (void)p_new_count; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
692 void on_items_removed(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count) override { (void)p_playlist; (void)p_mask; (void)p_old_count; (void)p_new_count; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
693 void on_items_selection_change(t_size p_playlist, const bit_array& p_affected, const bit_array& p_state) override { (void)p_playlist; (void)p_affected; (void)p_state; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
694 void on_item_focus_change(t_size p_playlist, t_size p_from, t_size p_to) override { (void)p_playlist; (void)p_from; (void)p_to; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
695
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
696 void on_items_modified(t_size p_playlist, const bit_array& p_mask) override { (void)p_playlist; (void)p_mask; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
697 void on_items_modified_fromplayback(t_size p_playlist, const bit_array& p_mask, play_control::t_display_level p_level) override { (void)p_playlist; (void)p_mask; (void)p_level; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
698
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
699 void on_items_replaced(t_size p_playlist, const bit_array& p_mask, const pfc::list_base_const_t<t_on_items_replaced_entry>& p_data) override { (void)p_playlist; (void)p_mask; (void)p_data; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
700
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
701 void on_item_ensure_visible(t_size p_playlist, t_size p_idx) override { (void)p_playlist; (void)p_idx; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
702
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
703 void on_playlist_activate(t_size p_old, t_size p_new) override { (void)p_old; (void)p_new; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
704 void on_playlist_created(t_size p_index, const char* p_name, t_size p_name_len) override { (void)p_index; (void)p_name; (void)p_name_len; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
705 void on_playlists_reorder(const t_size* p_order, t_size p_count) override { (void)p_order; (void)p_count; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
706 void on_playlists_removing(const bit_array& p_mask, t_size p_old_count, t_size p_new_count) override { (void)p_mask; (void)p_old_count; (void)p_new_count; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
707 void on_playlists_removed(const bit_array& p_mask, t_size p_old_count, t_size p_new_count) override { (void)p_mask; (void)p_old_count; (void)p_new_count; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
708 void on_playlist_renamed(t_size p_index, const char* p_new_name, t_size p_new_name_len) override { (void)p_index; (void)p_new_name; (void)p_new_name_len; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
709
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
710 void on_default_format_changed() override {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
711 void on_playback_order_changed(t_size p_new_index) override { (void)p_new_index; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
712 void on_playlist_locked(t_size p_playlist, bool p_locked) override { (void)p_playlist; (void)p_locked; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
713 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
714
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
715 //! playlist_callback_single implementation helper - registers itself on creation / unregisters on destruction. Must not be instantiated statically!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
716 class playlist_callback_single_impl_base : public playlist_callback_single {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
717 protected:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
718 playlist_callback_single_impl_base(t_uint32 p_flags = 0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
719 playlist_manager::get()->register_callback(this,p_flags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
720 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
721 void set_callback_flags(t_uint32 p_flags) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
722 playlist_manager::get()->modify_callback(this,p_flags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
723 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
724 ~playlist_callback_single_impl_base() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
725 playlist_manager::get()->unregister_callback(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
726 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
727
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
728 //dummy implementations - avoid possible pure virtual function calls!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
729 void on_items_added(t_size p_base, metadb_handle_list_cref p_data, const bit_array& p_selection) override { (void)p_base; (void)p_data; (void)p_selection; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
730 void on_items_reordered(const t_size* p_order, t_size p_count) override { (void)p_order; (void)p_count; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
731 void on_items_removing(const bit_array& p_mask, t_size p_old_count, t_size p_new_count) override { (void)p_mask; (void)p_old_count; (void)p_new_count; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
732 void on_items_removed(const bit_array& p_mask, t_size p_old_count, t_size p_new_count) override { (void)p_mask; (void)p_old_count; (void)p_new_count; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
733 void on_items_selection_change(const bit_array& p_affected, const bit_array& p_state) override { (void)p_affected; (void)p_state; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
734 void on_item_focus_change(t_size p_from, t_size p_to) override { (void)p_from; (void)p_to; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
735 void on_items_modified(const bit_array& p_mask) override { (void)p_mask; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
736 void on_items_modified_fromplayback(const bit_array& p_mask, play_control::t_display_level p_level) override { (void)p_mask; (void)p_level; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
737 void on_items_replaced(const bit_array& p_mask, const pfc::list_base_const_t<playlist_callback::t_on_items_replaced_entry>& p_data) override { (void)p_mask; (void)p_data; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
738 void on_item_ensure_visible(t_size p_idx) override { (void)p_idx; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
739
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
740 void on_playlist_switch() override {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
741 void on_playlist_renamed(const char* p_new_name, t_size p_new_name_len) override { (void)p_new_name; (void)p_new_name_len; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
742 void on_playlist_locked(bool p_locked) override { (void)p_locked; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
743
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
744 void on_default_format_changed() override {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
745 void on_playback_order_changed(t_size p_new_index) override { (void)p_new_index; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
746
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
747 PFC_CLASS_NOT_COPYABLE(playlist_callback_single_impl_base,playlist_callback_single_impl_base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
748 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
749
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
750 class playlist_callback_single_static : public service_base, public playlist_callback_single
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
751 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
752 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
753 virtual unsigned get_flags() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
754
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
755 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(playlist_callback_single_static);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
756 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
757
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
758
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
759 //! Class used for async processing of IDataObject. Content of IDataObject can be dumped into dropped_files_data without any time-consuming operations - won't block calling app when used inside drag&drop handler - and actual time-consuming processing (listing directories and reading infos) can be done later.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
760 //! \deprecated In 0.9.3 and up, instead of going thru dropped_files_data, you can use playlist_incoming_item_filter_v2::process_dropped_files_async().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
761 class NOVTABLE dropped_files_data {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
762 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
763 virtual void set_paths(pfc::string_list_const const & p_paths) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
764 virtual void set_handles(const pfc::list_base_const_t<metadb_handle_ptr> & p_handles) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
765 protected:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
766 dropped_files_data() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
767 ~dropped_files_data() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
768 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
769
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
770
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
771 class NOVTABLE playlist_incoming_item_filter : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
772 FB2K_MAKE_SERVICE_COREAPI(playlist_incoming_item_filter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
773 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
774 //! Pre-sorts incoming items according to user-configured settings, removes duplicates. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
775 //! As of 1.4, this is the same as sort_by_pointer_remove_duplicates() + sort_by_format( get_incoming_item_sorter() ), see playlist_incoming_item_filter_v4 \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
776 //! This method is valid in main thread only. However, using playlist_incoming_item_filter_v4::get_incoming_item_sorter() lets you do the same off main thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
777 //! @param in Items to process.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
778 //! @param out Receives processed item list. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
779 //! @returns True when there's one or more item in the output list, false when the output list is empty.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
780 virtual bool filter_items(metadb_handle_list_cref in,metadb_handle_list_ref out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
781
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
782 //! Converts one or more paths to a list of metadb_handles; displays a progress dialog.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
783 //! Note that this function creates modal dialog and does not return until the operation has completed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
784 //! @returns True on success, false on user abort.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
785 //! \deprecated Use playlist_incoming_item_filter_v2::process_locations_async() when possible.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
786 virtual bool process_locations(const pfc::list_base_const_t<const char*> & p_urls,pfc::list_base_t<metadb_handle_ptr> & p_out,bool p_filter,const char * p_restrict_mask_override, const char * p_exclude_mask_override,fb2k::hwnd_t p_parentwnd) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
787
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
788 #ifdef _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
789 //! Converts an IDataObject to a list of metadb_handles.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
790 //! Using this function is strongly disrecommended as it implies blocking the drag&drop source app (as well as our app).\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
791 //! @returns True on success, false on user abort or unknown data format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
792 //! \deprecated Use playlist_incoming_item_filter_v2::process_dropped_files_async() when possible.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
793 virtual bool process_dropped_files(interface IDataObject * pDataObject,pfc::list_base_t<metadb_handle_ptr> & p_out,bool p_filter,HWND p_parentwnd) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
794
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
795 //! Checks whether IDataObject contains one of known data formats that can be translated to a list of metadb_handles.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
796 virtual bool process_dropped_files_check(interface IDataObject * pDataObject) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
797
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
798 //! Checks whether IDataObject contains our own private data format (drag&drop within the app etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
799 virtual bool process_dropped_files_check_if_native(interface IDataObject * pDataObject) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
800
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
801 //! Creates an IDataObject from specified metadb_handle list. The caller is responsible for releasing the returned object. It is recommended that you use create_dataobject_ex() to get an autopointer that ensures proper deletion.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
802 virtual interface IDataObject * create_dataobject(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
803
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
804 //! Checks whether IDataObject contains one of known data formats that can be translated to a list of metadb_handles.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
805 //! This function also returns drop effects to use (see: IDropTarget::DragEnter(), IDropTarget::DragOver() ). In certain cases, drag effects are necessary for drag&drop to work at all (such as dragging links from IE).\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
806 virtual bool process_dropped_files_check_ex(interface IDataObject * pDataObject, DWORD * p_effect) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
807
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
808 //! Dumps IDataObject content to specified dropped_files_data object, without any time-consuming processing.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
809 //! Using this function instead of process_dropped_files() and processing dropped_files_data outside drop handler allows you to avoid blocking drop source app when processing large directories etc.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
810 //! Note: since 0.9.3, it is recommended to use playlist_incoming_item_filter_v2::process_dropped_files_async() instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
811 //! @returns True on success, false when IDataObject does not contain any of known data formats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
812 virtual bool process_dropped_files_delayed(dropped_files_data & p_out,interface IDataObject * pDataObject) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
813 #endif // _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
814 //! Helper - calls process_locations() with a single URL. See process_locations() for more info.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
815 bool process_location(const char * url,pfc::list_base_t<metadb_handle_ptr> & out,bool filter,const char * p_mask,const char * p_exclude,fb2k::hwnd_t p_parentwnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
816
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
817 #ifdef _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
818 //! Helper - returns a pfc::com_ptr_t<> rather than a raw pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
819 pfc::com_ptr_t<interface IDataObject> create_dataobject_ex(metadb_handle_list_cref data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
820 #endif // _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
821 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
822
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
823 //! For use with playlist_incoming_item_filter_v2::process_locations_async().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
824 //! \since 0.9.3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
825 class NOVTABLE process_locations_notify : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
826 FB2K_MAKE_SERVICE_INTERFACE(process_locations_notify, service_base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
827 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
828 virtual void on_completion(metadb_handle_list_cref p_items) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
829 virtual void on_aborted() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
830
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
831 typedef std::function<void(metadb_handle_list_cref)> func_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
832 static process_locations_notify::ptr create(func_t);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
833 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
834
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
835 typedef service_ptr_t<process_locations_notify> process_locations_notify_ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
836
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
837 //! \since 0.9.3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
838 class NOVTABLE playlist_incoming_item_filter_v2 : public playlist_incoming_item_filter {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
839 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playlist_incoming_item_filter_v2, playlist_incoming_item_filter)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
840 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
841 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
842 //! Set this to disable presorting (according to user settings) and duplicate removal in output list. Should be unset in most cases.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
843 op_flag_no_filter = 1 << 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
844 //! Set this flag to make the progress dialog not steal focus on creation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
845 op_flag_background = 1 << 1,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
846 //! Set this flag to delay the progress dialog becoming visible, so it does not appear at all during short operations. Also implies op_flag_background effect.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
847 op_flag_delay_ui = 1 << 2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
848 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
849
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
850 //! Converts one or more paths to a list of metadb_handles. The function returns immediately; specified callback object receives results when the operation has completed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
851 //! @param p_urls List of paths to process.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
852 //! @param p_op_flags Can be null, or one or more of op_flag_* enum values combined, altering behaviors of the operation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
853 //! @param p_restrict_mask_override Override of "restrict incoming items to" setting. Pass NULL to use the value from preferences.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
854 //! @param p_exclude_mask_override Override of "exclude file types" setting. Pass NULL to use value from preferences.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
855 //! @param p_parentwnd Parent window for spawned progress dialogs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
856 //! @param p_notify Callback receiving notifications about success/abort of the operation as well as output item list.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
857 virtual void process_locations_async(const pfc::list_base_const_t<const char*> & p_urls,t_uint32 p_op_flags,const char * p_restrict_mask_override, const char * p_exclude_mask_override,fb2k::hwnd_t p_parentwnd,process_locations_notify_ptr p_notify) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
858
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
859 #ifdef _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
860 //! Converts an IDataObject to a list of metadb_handles. The function returns immediately; specified callback object receives results when the operation has completed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
861 //! @param p_dataobject IDataObject to process.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
862 //! @param p_op_flags Can be null, or one or more of op_flag_* enum values combined, altering behaviors of the operation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
863 //! @param p_parentwnd Parent window for spawned progress dialogs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
864 //! @param p_notify Callback receiving notifications about success/abort of the operation as well as output item list.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
865 virtual void process_dropped_files_async(interface IDataObject * p_dataobject,t_uint32 p_op_flags,HWND p_parentwnd,process_locations_notify_ptr p_notify) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
866 #endif // _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
867 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
868
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
869 //! \since 0.9.5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
870 class playlist_incoming_item_filter_v3 : public playlist_incoming_item_filter_v2 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
871 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playlist_incoming_item_filter_v3, playlist_incoming_item_filter_v2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
872 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
873 virtual bool auto_playlist_name(metadb_handle_list_cref data,pfc::string_base & out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
874 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
875
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
876 //! \since 1.4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
877 class playlist_incoming_item_filter_v4 : public playlist_incoming_item_filter_v3 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
878 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playlist_incoming_item_filter_v4, playlist_incoming_item_filter_v3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
879 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
880 //! Retrieves title formatting pattern for sorting incoming files. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
881 //! Valid from main thread only - however you can use the value for off-main-thread operations.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
882 virtual void get_incoming_item_sort_pattern( pfc::string_base & out ) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
883 //! Retrieves shared title formatting object for sorting incoming files. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
884 //! This is the same as compiling the string returned from get_incoming_item_sort_pattern, except the returned object is shared with others using this API. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
885 //! Valid from main thread only - however you can use the returned object for off-main-thread operations.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
886 virtual titleformat_object::ptr get_incoming_item_sorter() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
887 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
888
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
889 //! Implementation of dropped_files_data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
890 class dropped_files_data_impl : public dropped_files_data {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
891 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
892 dropped_files_data_impl() : m_is_paths(false) {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
893 void set_paths(pfc::string_list_const const & p_paths) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
894 m_is_paths = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
895 m_paths = p_paths;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
896 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
897 void set_paths(pfc::string_list_impl && paths) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
898 m_paths = std::move(paths);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
899 m_is_paths = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
900 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
901 void set_handles(const pfc::list_base_const_t<metadb_handle_ptr> & p_handles) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
902 m_is_paths = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
903 m_handles = p_handles;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
904 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
905
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
906 void to_handles_async(bool p_filter,fb2k::hwnd_t p_parentwnd,service_ptr_t<process_locations_notify> p_notify);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
907 //! @param p_op_flags Can be null, or one or more of playlist_incoming_item_filter_v2::op_flag_* enum values combined, altering behaviors of the operation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
908 void to_handles_async_ex(t_uint32 p_op_flags,fb2k::hwnd_t p_parentwnd,service_ptr_t<process_locations_notify> p_notify);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
909 bool to_handles(pfc::list_base_t<metadb_handle_ptr> & p_out,bool p_filter,fb2k::hwnd_t p_parentwnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
910 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
911 pfc::string_list_impl m_paths;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
912 metadb_handle_list m_handles;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
913 bool m_is_paths;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
914 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
915
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
916
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
917 class NOVTABLE playback_queue_callback : public service_base
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
918 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
919 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
920 enum t_change_origin {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
921 changed_user_added,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
922 changed_user_removed,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
923 changed_playback_advance,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
924 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
925 virtual void on_changed(t_change_origin p_origin) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
926
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
927 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(playback_queue_callback);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
928 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
929
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
930
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
931 class playlist_lock_change_notify : private playlist_callback_single_impl_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
932 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
933 playlist_lock_change_notify() : playlist_callback_single_impl_base(flag_on_playlist_switch|flag_on_playlist_locked) {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
934 protected:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
935 virtual void on_lock_state_change() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
936 bool is_playlist_command_available(t_uint32 what) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
937 auto api = playlist_manager::get();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
938 const t_size active = api->get_active_playlist();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
939 if (active == SIZE_MAX) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
940 return (api->playlist_lock_get_filter_mask(active) & what) == 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
941 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
942 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
943 void on_playlist_switch() override {on_lock_state_change();}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
944 void on_playlist_locked(bool) override {on_lock_state_change();}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
945 };