annotate foosdk/sdk/foobar2000/SDK/album_art.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 <functional>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include "commonObjects.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #include "exception_io.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #include "filesystem.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 #include "metadb.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 namespace fb2k {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 class image;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 //! Namespace containing identifiers of album art types.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 namespace album_art_ids {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 //! Front cover.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 static constexpr GUID cover_front = { 0xf1e66f4e, 0xfe09, 0x4b94, { 0x91, 0xa3, 0x67, 0xc2, 0x3e, 0xd1, 0x44, 0x5e } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 //! Back cover.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 static constexpr GUID cover_back = { 0xcb552d19, 0x86d5, 0x434c, { 0xac, 0x77, 0xbb, 0x24, 0xed, 0x56, 0x7e, 0xe4 } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 //! Picture of a disc or other storage media.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 static constexpr GUID disc = { 0x3dba9f36, 0xf928, 0x4fa4, { 0x87, 0x9c, 0xd3, 0x40, 0x47, 0x59, 0x58, 0x7e } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 //! Album-specific icon (NOT a file type icon).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 static constexpr GUID icon = { 0x74cdf5b4, 0x7053, 0x4b3d, { 0x9a, 0x3c, 0x54, 0x69, 0xf5, 0x82, 0x6e, 0xec } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 //! Artist picture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 static constexpr GUID artist = { 0x9a654042, 0xacd1, 0x43f7, { 0xbf, 0xcf, 0xd3, 0xec, 0xf, 0xfe, 0x40, 0xfa } };
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 size_t num_types();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 GUID query_type( size_t );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 // returns lowercase name
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 const char * query_name( size_t );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 const char * name_of( const GUID & );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 const char * name_of_ex( const GUID &, const char * def = "undefined");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 // returns Capitalized name
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 const char * query_capitalized_name( size_t );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 const char * capitalized_name_of( const GUID & );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 GUID by_name(const char*);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 PFC_DECLARE_EXCEPTION(exception_album_art_not_found,exception_io_not_found,"Attached picture not found");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 PFC_DECLARE_EXCEPTION(exception_album_art_unsupported_entry,exception_io_data,"Unsupported attached picture entry");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 PFC_DECLARE_EXCEPTION(exception_album_art_unsupported_format,exception_io_data,"Attached picture operations not supported for this file format");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 //! Class encapsulating access to album art stored in a media file. Use album_art_extractor class obtain album_art_extractor_instance referring to specified media file.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 class NOVTABLE album_art_extractor_instance : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 FB2K_MAKE_SERVICE_INTERFACE(album_art_extractor_instance,service_base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 //! Throws exception_album_art_not_found when the requested album art entry could not be found in the referenced media file.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 virtual album_art_data_ptr query(const GUID & p_what,abort_callback & p_abort) = 0;
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 bool have_entry( const GUID & what, abort_callback & abort );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 bool query(const GUID & what, album_art_data::ptr & out, abort_callback & abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 //! Future compatiblity, load directly to fb2k::image
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 //! Might be eventually specialized for operating system supported formats
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 service_ptr_t<fb2k::image> query_image_(const GUID &, abort_callback&);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 //! Class encapsulating access to album art stored in a media file. Use album_art_editor class to obtain album_art_editor_instance referring to specified media file.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 class NOVTABLE album_art_editor_instance : public album_art_extractor_instance {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 FB2K_MAKE_SERVICE_INTERFACE(album_art_editor_instance,album_art_extractor_instance);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 //! Throws exception_album_art_unsupported_entry when the file format we're dealing with does not support specific entry.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 virtual void set(const GUID & p_what,album_art_data_ptr p_data,abort_callback & p_abort) = 0;
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 //! Removes the requested entry. Fails silently when the entry doesn't exist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 virtual void remove(const GUID & p_what) = 0;
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 //! Finalizes file tag update operation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 virtual void commit(abort_callback & p_abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 //! Helper; see album_art_editor_instance_v2::remove_all();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 void remove_all_();
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 //! Extension to album_art_editor_instance, adds remove_all().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 class NOVTABLE album_art_editor_instance_v2 : public album_art_editor_instance {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 FB2K_MAKE_SERVICE_INTERFACE(album_art_editor_instance_v2, album_art_editor_instance);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 //! Tells the editor to remove all entries, including unsupported picture types that do not translate to fb2k ids.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 virtual void remove_all() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 };
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 typedef service_ptr_t<album_art_extractor_instance> album_art_extractor_instance_ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 typedef service_ptr_t<album_art_editor_instance> album_art_editor_instance_ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 //! Entrypoint class for accessing album art extraction functionality. Register your own implementation to allow album art extraction from your media file format. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 //! If you want to extract album art from a media file, it's recommended that you use album_art_manager API instead of calling album_art_extractor directly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 class NOVTABLE album_art_extractor : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(album_art_extractor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 //! Returns whether the specified file is one of formats supported by our album_art_extractor implementation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 //! @param p_path Path to file being queried.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 //! @param p_extension Extension of file being queried (also present in p_path parameter) - provided as a separate parameter for performance reasons.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 virtual bool is_our_path(const char * p_path,const char * p_extension) = 0;
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 //! Instantiates album_art_extractor_instance providing access to album art stored in a specified media file. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 //! Throws one of I/O exceptions on failure; exception_album_art_not_found when the file has no album art record at all.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 //! @param p_filehint Optional; specifies a file interface to use for accessing the specified file; can be null - in that case, the implementation will open and close the file internally.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 virtual album_art_extractor_instance_ptr open(file_ptr p_filehint,const char * p_path,abort_callback & p_abort) = 0;
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 static bool g_get_interface(service_ptr_t<album_art_extractor> & out,const char * path);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 static bool g_is_supported_path(const char * path);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 static album_art_extractor_instance_ptr g_open(file_ptr p_filehint,const char * p_path,abort_callback & p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 static album_art_extractor_instance_ptr g_open_allowempty(file_ptr p_filehint,const char * p_path,abort_callback & p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 //! Returns GUID of the corresponding input class. Null GUID if none.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 GUID get_guid();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 //! \since 1.5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 class NOVTABLE album_art_extractor_v2 : public album_art_extractor {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 FB2K_MAKE_SERVICE_INTERFACE(album_art_extractor_v2 , album_art_extractor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 //! Returns GUID of the corresponding input class. Null GUID if none.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 virtual GUID get_guid() = 0;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 //! Entrypoint class for accessing album art editing functionality. Register your own implementation to allow album art editing on your media file format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 class NOVTABLE album_art_editor : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(album_art_editor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 //! Returns whether the specified file is one of formats supported by our album_art_editor implementation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 //! @param p_path Path to file being queried.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 //! @param p_extension Extension of file being queried (also present in p_path parameter) - provided as a separate parameter for performance reasons.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 virtual bool is_our_path(const char * p_path,const char * p_extension) = 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 //! Instantiates album_art_editor_instance providing access to album art stored in a specified media file. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 //! @param p_filehint Optional; specifies a file interface to use for accessing the specified file; can be null - in that case, the implementation will open and close the file internally.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 virtual album_art_editor_instance_ptr open(file_ptr p_filehint,const char * p_path,abort_callback & p_abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 //! Helper; attempts to retrieve an album_art_editor service pointer that supports the specified file.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 //! @returns True on success, false on failure (no registered album_art_editor supports this file type).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 static bool g_get_interface(service_ptr_t<album_art_editor> & out,const char * path);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 //! Helper; returns whether one of registered album_art_editor implementations is capable of opening the specified file.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 static bool g_is_supported_path(const char * path);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 static album_art_editor_instance_ptr g_open(file_ptr p_filehint,const char * p_path,abort_callback & p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 //! Returns GUID of the corresponding input class. Null GUID if none.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 GUID get_guid();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 //! \since 1.5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 class NOVTABLE album_art_editor_v2 : public album_art_editor {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 FB2K_MAKE_SERVICE_INTERFACE( album_art_editor_v2, album_art_editor )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 //! Returns GUID of the corresponding input class. Null GUID if none.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 virtual GUID get_guid() = 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 //! \since 0.9.5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 //! Helper API for extracting album art from APEv2 tags.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 class NOVTABLE tag_processor_album_art_utils : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 FB2K_MAKE_SERVICE_COREAPI(tag_processor_album_art_utils)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 //! Throws one of I/O exceptions on failure; exception_album_art_not_found when the file has no album art record at all.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 virtual album_art_extractor_instance_ptr open(file_ptr p_file,abort_callback & p_abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 //! \since 1.1.6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 //! Throws exception_not_implemented on earlier than 1.1.6.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 virtual album_art_editor_instance_ptr edit(file_ptr p_file,abort_callback & p_abort) = 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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 //! Album art path list - see album_art_extractor_instance_v2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 class NOVTABLE album_art_path_list : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 FB2K_MAKE_SERVICE_INTERFACE(album_art_path_list, service_base)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 virtual const char * get_path(t_size index) const = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 virtual t_size get_count() const = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 static bool equals(album_art_path_list const& v1, album_art_path_list const& v2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 static bool equals(ptr const& v1, ptr const& v2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 //! album_art_extractor_instance extension; lets the frontend query referenced file paths (eg. when using external album art).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 class NOVTABLE album_art_extractor_instance_v2 : public album_art_extractor_instance {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 FB2K_MAKE_SERVICE_INTERFACE(album_art_extractor_instance_v2, album_art_extractor_instance)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 virtual album_art_path_list::ptr query_paths(const GUID & p_what, abort_callback & p_abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 //! \since 1.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 //! Provides methods for interfacing with the foobar2000 core album art loader. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 //! Use this when you need to load album art for a specific group of tracks.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 class NOVTABLE album_art_manager_v2 : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 FB2K_MAKE_SERVICE_COREAPI(album_art_manager_v2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 //! Instantiates an album art extractor object for the specified group of items.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 virtual album_art_extractor_instance_v2::ptr open(metadb_handle_list_cref items, pfc::list_base_const_t<GUID> const & ids, abort_callback & abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 //! Instantiates an album art extractor object that retrieves stub images.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 virtual album_art_extractor_instance_v2::ptr open_stub(abort_callback & abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 //! \since 1.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 //! Called when no other album art source (internal, external, other registered fallbacks) returns relevant data for the specified items. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 //! Can be used to implement online lookup and such.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 class NOVTABLE album_art_fallback : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(album_art_fallback)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 virtual album_art_extractor_instance_v2::ptr open(metadb_handle_list_cref items, pfc::list_base_const_t<GUID> const & ids, abort_callback & abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 //! \since 1.1.7
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 class NOVTABLE album_art_manager_config : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 FB2K_MAKE_SERVICE_INTERFACE(album_art_manager_config, service_base)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 virtual bool get_external_pattern(pfc::string_base & out, const GUID & type) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 virtual bool use_embedded_pictures() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 virtual bool use_fallbacks() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 //! \since 1.1.7
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 class NOVTABLE album_art_manager_v3 : public album_art_manager_v2 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(album_art_manager_v3, album_art_manager_v2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 //! @param config An optional album_art_manager_config object to override global settings. Pass null to use global settings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 virtual album_art_extractor_instance_v2::ptr open_v3(metadb_handle_list_cref items, pfc::list_base_const_t<GUID> const & ids, album_art_manager_config::ptr config, abort_callback & abort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 //! \since 1.4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 //! A notification about a newly loaded album art being ready to display. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 //! See: now_playing_album_art_notify_manager.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 class NOVTABLE now_playing_album_art_notify {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 //! Called when album art has finished loading for the now playing track.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 //! @param data The newly loaded album art. Never a null object - the callbacks are simply not called when there is nothing to show.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 virtual void on_album_art( album_art_data::ptr data ) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 //! \since 1.4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 //! Since various components require the album art of the now-playing track, a centralized loader has been provided, so the file isn't hammered independently by different components. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 //! Use this in conjunction with play_callback notifications to render now-playing track information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 class NOVTABLE now_playing_album_art_notify_manager : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 FB2K_MAKE_SERVICE_COREAPI(now_playing_album_art_notify_manager)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 //! Register a notification to be told when the album art has been loaded.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 virtual void add(now_playing_album_art_notify*) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 //! Unregister a previously registered notification.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 virtual void remove(now_playing_album_art_notify*) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 //! Retrieves the album art for the currently playing track.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 //! @returns The current album art (front cover), or null if there is no art or the art is being loaded and is not yet available.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 virtual album_art_data::ptr current() = 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; register a lambda notification. Pass the returned obejct to remove() to unregister.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 now_playing_album_art_notify* add( std::function<void (album_art_data::ptr) > );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 //! \since 1.6.6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 class NOVTABLE now_playing_album_art_notify_manager_v2 : public now_playing_album_art_notify_manager {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(now_playing_album_art_notify_manager_v2, now_playing_album_art_notify_manager);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 struct info_t {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 album_art_data::ptr data;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 album_art_path_list::ptr paths;
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 static bool equals(const info_t& v1, const info_t& v2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 return album_art_data::equals(v1.data, v2.data) && album_art_path_list::equals(v1.paths, v2.paths);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 bool operator==(const info_t& other) const { return equals(*this, other); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 bool operator!=(const info_t& other) const { return !equals(*this, other); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 void clear() { *this = {}; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 bool is_valid() const { return data.is_valid(); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 operator bool() const { return is_valid(); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 virtual info_t current_v2() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 };