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