|
1
|
1 #pragma once
|
|
|
2 #include "library_manager.h"
|
|
|
3 #include "metadb_callbacks.h"
|
|
|
4 #include "callback_merit.h"
|
|
|
5
|
|
|
6 //! Callback service receiving notifications about Media Library content changes. Methods called only from main thread.\n
|
|
|
7 //! Use library_callback_factory_t template to register.
|
|
|
8 class NOVTABLE library_callback : public service_base {
|
|
|
9 public:
|
|
|
10 //! Called when new items are added to the Media Library.
|
|
|
11 virtual void on_items_added(metadb_handle_list_cref items) = 0;
|
|
|
12 //! Called when some items have been removed from the Media Library.
|
|
|
13 virtual void on_items_removed(metadb_handle_list_cref items) = 0;
|
|
|
14 //! Called when some items in the Media Library have been modified. \n
|
|
|
15 //! The list is sorted by pointer value for convenient matching by binary search.
|
|
|
16 virtual void on_items_modified(metadb_handle_list_cref items) = 0;
|
|
|
17
|
|
|
18 //! Is current on_items_modified() cycle called due to actual tags changed or dispaly hook operations? \n
|
|
|
19 //! Supported since foobar2000 v2.0 beta 13
|
|
|
20 static bool is_modified_from_hook();
|
|
|
21
|
|
|
22 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(library_callback);
|
|
|
23 };
|
|
|
24
|
|
|
25 //! \since 2.0
|
|
|
26 class NOVTABLE library_callback_v2 : public library_callback {
|
|
|
27 public:
|
|
|
28 virtual void on_items_modified_v2(metadb_handle_list_cref items, metadb_io_callback_v2_data& data) = 0;
|
|
|
29 virtual void on_library_initialized() = 0;
|
|
|
30
|
|
|
31 FB2K_MAKE_SERVICE_INTERFACE(library_callback_v2, library_callback);
|
|
|
32 };
|
|
|
33
|
|
|
34 template<typename T>
|
|
|
35 class library_callback_factory_t : public service_factory_single_t<T> {};
|
|
|
36
|
|
|
37 class NOVTABLE library_callback_dynamic {
|
|
|
38 public:
|
|
|
39 //! Called when new items are added to the Media Library.
|
|
|
40 virtual void on_items_added(metadb_handle_list_cref items) = 0;
|
|
|
41 //! Called when some items have been removed from the Media Library.
|
|
|
42 virtual void on_items_removed(metadb_handle_list_cref items) = 0;
|
|
|
43 //! Called when some items in the Media Library have been modified.
|
|
|
44 //! The list is sorted by pointer value for convenient matching by binary search.
|
|
|
45 virtual void on_items_modified(metadb_handle_list_cref items) = 0;
|
|
|
46
|
|
|
47 void register_callback(); void unregister_callback();
|
|
|
48 };
|
|
|
49
|
|
|
50 //! Base class for library_callback_dynamic implementations, manages register/unregister calls for you
|
|
|
51 class library_callback_dynamic_impl_base : public library_callback_dynamic {
|
|
|
52 public:
|
|
|
53 library_callback_dynamic_impl_base() { register_callback(); }
|
|
|
54 ~library_callback_dynamic_impl_base() { unregister_callback(); }
|
|
|
55
|
|
|
56 //stub implementations - avoid pure virtual function call issues
|
|
|
57 void on_items_added(metadb_handle_list_cref) override {}
|
|
|
58 void on_items_removed(metadb_handle_list_cref) override {}
|
|
|
59 void on_items_modified(metadb_handle_list_cref) override {}
|
|
|
60
|
|
|
61 PFC_CLASS_NOT_COPYABLE_EX(library_callback_dynamic_impl_base);
|
|
|
62 };
|
|
|
63
|
|
|
64 //! \since 2.0
|
|
|
65 class NOVTABLE library_callback_v2_dynamic {
|
|
|
66 public:
|
|
|
67 //! Called when new items are added to the Media Library.
|
|
|
68 virtual void on_items_added(metadb_handle_list_cref items) = 0;
|
|
|
69 //! Called when some items have been removed from the Media Library.
|
|
|
70 virtual void on_items_removed(metadb_handle_list_cref items) = 0;
|
|
|
71 //! Called when some items in the Media Library have been modified.
|
|
|
72 //! The list is sorted by pointer value for convenient matching by binary search.
|
|
|
73 virtual void on_items_modified_v2(metadb_handle_list_cref items, metadb_io_callback_v2_data & data) = 0;
|
|
|
74
|
|
|
75 virtual void on_library_initialized() = 0;
|
|
|
76
|
|
|
77 void register_callback(); void unregister_callback();
|
|
|
78 };
|
|
|
79
|
|
|
80 //! \since 2.0
|
|
|
81 //! //! Base class for library_callback_v2_dynamic implementations, manages register/unregister calls for you
|
|
|
82 class library_callback_v2_dynamic_impl_base : public library_callback_v2_dynamic {
|
|
|
83 public:
|
|
|
84 library_callback_v2_dynamic_impl_base() { register_callback(); }
|
|
|
85 ~library_callback_v2_dynamic_impl_base() { unregister_callback(); }
|
|
|
86
|
|
|
87 //stub implementations - avoid pure virtual function call issues
|
|
|
88 void on_items_added(metadb_handle_list_cref) override {}
|
|
|
89 void on_items_removed(metadb_handle_list_cref) override {}
|
|
|
90 void on_items_modified_v2(metadb_handle_list_cref, metadb_io_callback_v2_data&) override {}
|
|
|
91 void on_library_initialized() override {}
|
|
|
92
|
|
|
93 PFC_CLASS_NOT_COPYABLE_EX(library_callback_v2_dynamic_impl_base);
|
|
|
94 };
|