00001
00011 enum {
00013 autoplaylist_flag_sort = 1 << 0,
00014 };
00018 class NOVTABLE autoplaylist_client : public service_base {
00019 public:
00020 virtual GUID get_guid() = 0;
00022 virtual void filter(metadb_handle_list_cref data, bool * out) = 0;
00024 virtual bool sort(const pfc::list_base_const_t<metadb_handle_ptr> & p_items,t_size * p_orderbuffer) = 0;
00026 virtual void get_configuration(stream_writer * p_stream,abort_callback & p_abort) = 0;
00027
00028 virtual void show_ui(t_size p_source_playlist) = 0;
00029
00031 template<typename t_array> void get_configuration(t_array & p_out) {
00032 pfc::static_assert<sizeof(p_out[0]) == 1>();
00033 typedef pfc::array_t<t_uint8,pfc::alloc_fast_aggressive> t_temp; t_temp temp;
00034 get_configuration(&stream_writer_buffer_append_ref_t<t_temp>(temp),abort_callback_impl());
00035 p_out = temp;
00036 }
00037
00038
00039 FB2K_MAKE_SERVICE_INTERFACE(autoplaylist_client,service_base)
00040 };
00041
00042 typedef service_ptr_t<autoplaylist_client> autoplaylist_client_ptr;
00043
00047 class NOVTABLE autoplaylist_client_factory : public service_base {
00048 public:
00050 virtual GUID get_guid() = 0;
00052 virtual autoplaylist_client_ptr instantiate(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) = 0;
00053
00054 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(autoplaylist_client_factory)
00055 };
00056
00057 PFC_DECLARE_EXCEPTION(exception_autoplaylist,pfc::exception,"Autoplaylist error")
00058
00059 PFC_DECLARE_EXCEPTION(exception_autoplaylist_already_owned,exception_autoplaylist,"This playlist is already an autoplaylist")
00060 PFC_DECLARE_EXCEPTION(exception_autoplaylist_not_owned,exception_autoplaylist,"This playlist is not an autoplaylist")
00061 PFC_DECLARE_EXCEPTION(exception_autoplaylist_lock_failure,exception_autoplaylist,"Playlist could not be locked")
00062
00063
00067 class NOVTABLE autoplaylist_manager : public service_base {
00068 public:
00071 virtual void add_client(autoplaylist_client_ptr p_client,t_size p_playlist,t_uint32 p_flags) = 0;
00072 virtual bool is_client_present(t_size p_playlist) = 0;
00074 virtual autoplaylist_client_ptr query_client(t_size p_playlist) = 0;
00075 virtual void remove_client(t_size p_playlist) = 0;
00079 virtual void add_client_simple(const char * p_query,const char * p_sort,t_size p_playlist,t_uint32 p_flags) = 0;
00080
00081 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(autoplaylist_manager)
00082 };