annotate foosdk/sdk/foobar2000/SDK/album_art.cpp @ 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 #include "foobar2000-sdk-pch.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "image.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "album_art.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include "album_art_helpers.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #include "input.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 GUID album_art_extractor::get_guid() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 album_art_extractor_v2::ptr v2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 if ( v2 &= this ) return v2->get_guid();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 return pfc::guid_null;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 GUID album_art_editor::get_guid() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 album_art_editor_v2::ptr v2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 if ( v2 &= this ) return v2->get_guid();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 return pfc::guid_null;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 bool album_art_extractor_instance::query(const GUID & what, album_art_data::ptr & out, abort_callback & abort) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 try { out = query(what, abort); return true; } catch (exception_album_art_not_found const &) { return false; }
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 service_ptr_t<fb2k::image> album_art_extractor_instance::query_image_(const GUID & what, abort_callback& a) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 auto data = this->query(what, a);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 return fb2k::imageCreator::get()->loadImageData( data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 bool album_art_extractor_instance::have_entry(const GUID & what, abort_callback & abort) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 try { query(what, abort); return true; } catch(exception_album_art_not_found const &) { return false; }
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 void album_art_editor_instance::remove_all_() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 album_art_editor_instance_v2::ptr v2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 if ( v2 &= this ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 v2->remove_all();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 for( size_t walk = 0; walk < album_art_ids::num_types(); ++ walk ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 this->remove( album_art_ids::query_type( walk ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 } catch(exception_io_data const &) {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 catch(exception_album_art_not_found const &) {}
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 bool album_art_editor::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
47 auto ext = pfc::string_extension(path);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 for (auto ptr : enumerate()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 if (ptr->is_our_path(path, ext)) { out = ptr; return true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 return false;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 bool album_art_editor::g_is_supported_path(const char * path) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 ptr ptr; return g_get_interface(ptr,path);
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 album_art_editor_instance_ptr album_art_editor::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
59
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 #ifdef FOOBAR2000_DESKTOP
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 input_manager_v2::ptr m;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 if (fb2k::std_api_try_get(m)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 album_art_editor_instance::ptr ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 ret ^= m->open_v2(album_art_editor_instance::class_guid, p_filehint, p_path, false, nullptr, p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 return ret;
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 #endif
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 album_art_editor::ptr obj;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 if (!g_get_interface(obj, p_path)) throw exception_album_art_unsupported_format();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 return obj->open(p_filehint, p_path, p_abort);
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
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 bool album_art_extractor::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
78
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 auto ext = pfc::string_extension(path);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 for (auto ptr : enumerate()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 if (ptr->is_our_path(path, ext)) { out = ptr; return true; }
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 return false;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 bool album_art_extractor::g_is_supported_path(const char * path) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 ptr ptr; return g_get_interface(ptr,path);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 album_art_extractor_instance_ptr album_art_extractor::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
90 #ifdef FOOBAR2000_DESKTOP
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 input_manager_v2::ptr m;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 if (fb2k::std_api_try_get(m)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 album_art_extractor_instance::ptr ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 ret ^= m->open_v2(album_art_extractor_instance::class_guid, p_filehint, p_path, false, nullptr, p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 #endif
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 album_art_extractor::ptr obj;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 if (!g_get_interface(obj, p_path)) throw exception_album_art_unsupported_format();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 return obj->open(p_filehint, p_path, p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 }
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 album_art_extractor_instance_ptr album_art_extractor::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
108 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 return g_open(p_filehint, p_path, p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 } catch(exception_album_art_not_found const &) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 return new service_impl_t<album_art_extractor_instance_simple>();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 namespace {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 class now_playing_album_art_notify_lambda : public now_playing_album_art_notify {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 void on_album_art(album_art_data::ptr data) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 f(data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 std::function<void(album_art_data::ptr) > f;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 now_playing_album_art_notify * now_playing_album_art_notify_manager::add(std::function<void (album_art_data::ptr) > f ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 PFC_ASSERT ( f != nullptr );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 auto obj = new now_playing_album_art_notify_lambda;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 obj->f = f;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 add(obj);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 return obj;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 namespace {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 struct aa_t {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 GUID type; const char * name;
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 const GUID guids[] = {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 album_art_ids::cover_front,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 album_art_ids::cover_back,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 album_art_ids::artist,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 album_art_ids::disc,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 album_art_ids::icon,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 static const char * const names[] = {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 "front cover",
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 "back cover",
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 "artist",
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 "disc",
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 "icon"
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 static const char * const names2[] = {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 "Front Cover",
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 "Back Cover",
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 "Artist",
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 "Disc",
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 "Icon"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 }
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 size_t album_art_ids::num_types() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 PFC_STATIC_ASSERT( PFC_TABSIZE( guids ) == PFC_TABSIZE( names ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 PFC_STATIC_ASSERT( PFC_TABSIZE( guids ) == PFC_TABSIZE( names2 ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 return PFC_TABSIZE( guids );
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 GUID album_art_ids::query_type(size_t idx) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 PFC_ASSERT( idx < PFC_TABSIZE( guids ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 return guids[idx];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 const char * album_art_ids::query_name(size_t idx) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 PFC_ASSERT( idx < PFC_TABSIZE( names ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 return names[idx];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 }
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 const char* album_art_ids::name_of_ex(const GUID& id, const char* def) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 auto ret = name_of(id);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 if ( ret == nullptr ) ret = def;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 const char * album_art_ids::name_of(const GUID & id) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 for( size_t w = 0; w < num_types(); ++w ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 if ( query_type(w) == id ) return query_name(w);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 return nullptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 const char * album_art_ids::query_capitalized_name( size_t idx ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 PFC_ASSERT( idx < PFC_TABSIZE( names2 ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 return names2[idx];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 }
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 const char * album_art_ids::capitalized_name_of( const GUID & id) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 for( size_t w = 0; w < num_types(); ++w ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 if ( query_type(w) == id ) return query_capitalized_name(w);
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 return nullptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 GUID album_art_ids::by_name(const char* arg) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 for (size_t w = 0; w < num_types(); ++w) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 if (pfc::stringEqualsI_ascii(query_name(w), arg)) return query_type(w);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 return pfc::guid_null;
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 bool album_art_path_list::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
209 const size_t n = v1.get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 if (n != v2.get_count()) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 for (size_t w = 0; w < n; ++w) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 if (playable_location::path_compare(v1.get_path(w), v2.get_path(w)) != 0) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 return true;
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 bool album_art_path_list::equals(ptr const& v1, ptr const& v2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 if (v1.is_valid() != v2.is_valid()) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 if (v1.is_empty() && v2.is_empty()) return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 return equals(*v1, *v2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 }