annotate foosdk/sdk/foobar2000/SDK/metadb_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 "callback_merit.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 //! Callback service receiving notifications about metadb contents changes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 class NOVTABLE metadb_io_callback : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 //! Called when metadb contents change. (Or, one of display hook component requests display update). \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 //! Main thread only.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 //! @param p_items_sorted List of items that have been updated. The list is always sorted by pointer value, to allow fast bsearch to test whether specific item has changed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 //! @param p_fromhook Set to true when actual file contents haven't changed but one of metadb_display_field_provider implementations requested an update so output of metadb_handle::format_title() etc has changed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 virtual void on_changed_sorted(metadb_handle_list_cref p_items_sorted, bool p_fromhook) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(metadb_io_callback);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 //! Dynamically-registered version of metadb_io_callback. See metadb_io_callback for documentation, register instances using metadb_io_v3::register_callback(). It's recommended that you use the metadb_io_callback_dynamic_impl_base helper class to manage registration/unregistration.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 class NOVTABLE metadb_io_callback_dynamic {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 //! See metadb_io_callback::on_changed_sorted()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 virtual void on_changed_sorted(metadb_handle_list_cref p_items_sorted, bool p_fromhook) = 0;
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 void register_callback(); void unregister_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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 //! metadb_io_callback_dynamic implementation helper.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 class metadb_io_callback_dynamic_impl_base : public metadb_io_callback_dynamic {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 void on_changed_sorted(metadb_handle_list_cref p_items_sorted, bool p_fromhook) override { (void)p_items_sorted; (void)p_fromhook; }
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 metadb_io_callback_dynamic_impl_base();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 ~metadb_io_callback_dynamic_impl_base();
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 PFC_CLASS_NOT_COPYABLE_EX(metadb_io_callback_dynamic_impl_base)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 };
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 //! \since 1.1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 //! Callback service receiving notifications about user-triggered tag edits. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 //! You want to use metadb_io_callback instead most of the time, unless you specifically want to track tag edits for purposes other than updating user interface.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 class NOVTABLE metadb_io_edit_callback : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(metadb_io_edit_callback)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 //! Called after the user has edited tags on a set of files.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 typedef const pfc::list_base_const_t<const file_info*>& t_infosref;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 virtual void on_edited(metadb_handle_list_cref items, t_infosref before, t_infosref after) = 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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 //! \since 2.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 class NOVTABLE metadb_io_edit_callback_v2 : public metadb_io_edit_callback {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 FB2K_MAKE_SERVICE_INTERFACE(metadb_io_edit_callback_v2, metadb_io_edit_callback)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 //! With original on_edited(), the implementation could not tell what the info in metadb was before, 'before' parameter being actual infos freshly read from the file prior to writing. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 //! on_edited_v2() clarifies this, additional argument passes old metadb state to deal with cases where it was different than file contents.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 virtual void on_edited_v2(metadb_handle_list_cref items, t_infosref before, t_infosref after, t_infosref beforeInMetadb) = 0;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 //! \since 2.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 //! Parameter for on_changed_sorted_v2()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 class NOVTABLE metadb_io_callback_v2_data {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 virtual metadb_v2_rec_t get(size_t idxInList) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 metadb_v2_rec_t operator[](size_t i) { return get(i); }
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 //! \since 2.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 //! Extended version of metadb_io_callback.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 class NOVTABLE metadb_io_callback_v2 : public metadb_io_callback {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 FB2K_MAKE_SERVICE_INTERFACE(metadb_io_callback_v2, metadb_io_callback);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 virtual void on_changed_sorted_v2(metadb_handle_list_cref itemsSorted, metadb_io_callback_v2_data & data, bool bFromHook) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 //! Controls callback merit, see: fb2k::callback_merit_t
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 virtual fb2k::callback_merit_t get_callback_merit() { return fb2k::callback_merit_default; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 };
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 //! \since 2.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 //! NEW interface introduced in late 2.0. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 //! Invoked *BEFORE* actual update, with incoming info. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 //! Note that incoming info may be partial (either main info or browse info not set), in such cases the info will remain unchanged.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 class NOVTABLE metadb_pre_update_callback : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT( metadb_pre_update_callback );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 virtual void will_update( metadb_handle_list_cref itemsSorted, metadb_io_callback_v2_data & data) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 };
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 //! \since 2.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 //! Extended version of metadb_io_callback_dynamic.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 class NOVTABLE metadb_io_callback_v2_dynamic {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 virtual void on_changed_sorted_v2(metadb_handle_list_cref itemsSorted, metadb_io_callback_v2_data & data, bool bFromHook) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 //! Controls callback merit, see: fb2k::callback_merit_t
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 virtual fb2k::callback_merit_t get_callback_merit() { return fb2k::callback_merit_default; }
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 bool try_register_callback(); void try_unregister_callback();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 void register_callback(); void unregister_callback();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 class metadb_io_callback_v2_dynamic_impl_base : public metadb_io_callback_v2_dynamic {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 void on_changed_sorted_v2(metadb_handle_list_cref itemsSorted, metadb_io_callback_v2_data& data, bool bFromHook) override { (void)itemsSorted; (void)data; (void)bFromHook; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 metadb_io_callback_v2_dynamic_impl_base();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 ~metadb_io_callback_v2_dynamic_impl_base();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 PFC_CLASS_NOT_COPYABLE_EX(metadb_io_callback_v2_dynamic_impl_base)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 };