annotate foosdk/sdk/foobar2000/SDK/file_info_merge.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 "file_info.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 static t_size merge_tags_calc_rating_by_index(const file_info & p_info,t_size p_index) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 t_size n,m = p_info.meta_enum_value_count(p_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 t_size ret = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 for(n=0;n<m;n++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 ret += strlen(p_info.meta_enum_value(p_index,n)) + 10;//yes, strlen on utf8 data, plus a slight bump to prefer multivalue over singlevalue w/ separator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 #if 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 static t_size merge_tags_calc_rating(const file_info & p_info,const char * p_field) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 t_size field_index = p_info.meta_find(p_field);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 if (field_index != ~0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 return merge_tags_calc_rating_by_index(p_info,field_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 return 0;
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 static void merge_tags_copy_info(const char * field,const file_info * from,file_info * to)
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 const char * val = from->info_get(field);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 if (val) to->info_set(field,val);
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 #endif
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 namespace {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 struct meta_merge_entry {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 meta_merge_entry() : m_rating(0) {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 t_size m_rating;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 pfc::array_t<const char *> m_data;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 class meta_merge_map_enumerator {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 meta_merge_map_enumerator(file_info & p_out) : m_out(p_out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 m_out.meta_remove_all();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 void operator() (const char * p_name, const meta_merge_entry & p_entry) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 if (p_entry.m_data.get_size() > 0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 t_size index = m_out.__meta_add_unsafe(p_name,p_entry.m_data[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 for(t_size walk = 1; walk < p_entry.m_data.get_size(); ++walk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 m_out.meta_add_value(index,p_entry.m_data[walk]);
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 }
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 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 file_info & m_out;
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 }
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 static void merge_meta(file_info & p_out,const pfc::list_base_const_t<const file_info*> & p_in) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 pfc::map_t<const char *,meta_merge_entry,pfc::comparator_stricmp_ascii> map;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 for(t_size in_walk = 0; in_walk < p_in.get_count(); in_walk++) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 const file_info & in = * p_in[in_walk];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 for(t_size meta_walk = 0, meta_count = in.meta_get_count(); meta_walk < meta_count; meta_walk++ ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 meta_merge_entry & entry = map.find_or_add(in.meta_enum_name(meta_walk));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 t_size rating = merge_tags_calc_rating_by_index(in,meta_walk);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 if (rating > entry.m_rating) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 entry.m_rating = rating;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 const t_size value_count = in.meta_enum_value_count(meta_walk);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 entry.m_data.set_size(value_count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 for(t_size value_walk = 0; value_walk < value_count; value_walk++ ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 entry.m_data[value_walk] = in.meta_enum_value(meta_walk,value_walk);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 }
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 }
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 meta_merge_map_enumerator en(p_out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 map.enumerate(en);
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 void file_info::merge(const pfc::list_base_const_t<const file_info*> & p_in)
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 t_size in_count = p_in.get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 if (in_count == 0)
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 meta_remove_all();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 return;
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 else if (in_count == 1)
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 const file_info * info = p_in[0];
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 copy_meta(*info);
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 set_replaygain(replaygain_info::g_merge(get_replaygain(),info->get_replaygain()));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 overwrite_info(*info);
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 //copy_info_single_by_name(*info,"tagtype");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 return;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 merge_meta(*this,p_in);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99
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 pfc::string8_fastalloc tagtype;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 replaygain_info rg = get_replaygain();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 t_size in_ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 for(in_ptr = 0; in_ptr < in_count; in_ptr++ )
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 const file_info * info = p_in[in_ptr];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 rg = replaygain_info::g_merge(rg, info->get_replaygain());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 t_size field_ptr, field_max = info->info_get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 for(field_ptr = 0; field_ptr < field_max; field_ptr++ )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 const char * field_name = info->info_enum_name(field_ptr), * field_value = info->info_enum_value(field_ptr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 if (*field_value)
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 if (!pfc::stricmp_ascii(field_name,"tagtype"))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 if (!tagtype.is_empty()) tagtype += "|";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 tagtype += field_value;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 }
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 if (!tagtype.is_empty()) info_set("tagtype",tagtype);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 set_replaygain(rg);
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 }
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 void file_info::overwrite_info(const file_info & p_source) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 t_size count = p_source.info_get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 for(t_size n=0;n<count;n++) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 info_set(p_source.info_enum_name(n),p_source.info_enum_value(n));
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 void file_info::merge_fallback(const file_info & source) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 set_replaygain( replaygain_info::g_merge(get_replaygain(), source.get_replaygain() ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 if (get_length() <= 0) set_length(source.get_length());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 t_size count = source.info_get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 for(t_size infoWalk = 0; infoWalk < count; ++infoWalk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 const char * name = source.info_enum_name(infoWalk);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 if (!info_exists(name)) __info_add_unsafe(name, source.info_enum_value(infoWalk));
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 count = source.meta_get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 for(t_size metaWalk = 0; metaWalk < count; ++metaWalk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 const char * name = source.meta_enum_name(metaWalk);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 if (!meta_exists(name)) _copy_meta_single_nocheck(source, metaWalk);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 }
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 static const char _tagtype[] = "tagtype";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 static bool isSC( const char * n ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 return pfc::string_has_prefix_i(n, "Apple SoundCheck" );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 void file_info::_set_tag(const file_info & tag) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 this->copy_meta(tag);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 this->set_replaygain( replaygain_info::g_merge( this->get_replaygain(), tag.get_replaygain() ) );
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 const size_t iCount = tag.info_get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 for( size_t iWalk = 0; iWalk < iCount; ++iWalk ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 auto n = tag.info_enum_name(iWalk);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 if ( pfc::stringEqualsI_ascii( n, _tagtype ) || isSC(n) ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 this->info_set(n, tag.info_enum_value( iWalk ) );
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 #ifdef FOOBAR2000_FILE_INFO_PICTURES
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 auto p = tag.info_get("pictures");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 if ( p != nullptr ) this->info_set("pictures", p);
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 #endif
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 void file_info::_add_tag(const file_info & otherTag) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 this->set_replaygain( replaygain_info::g_merge( this->get_replaygain(), otherTag.get_replaygain() ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 const char * tt1 = this->info_get(_tagtype);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 const char * tt2 = otherTag.info_get(_tagtype);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 if (tt2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 if (tt1) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 this->info_set(_tagtype, PFC_string_formatter() << tt1 << "|" << tt2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 this->info_set(_tagtype, tt2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 }
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 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 const size_t iCount = otherTag.info_get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 for( size_t w = 0; w < iCount; ++ w ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 auto n = otherTag.info_enum_name(w);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 if (isSC(n) && !this->info_get(n)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 this->info_set( n, otherTag.info_enum_value(w) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 }
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 #ifdef FOOBAR2000_FILE_INFO_PICTURES
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 if (this->info_get("pictures") == nullptr) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 auto p = otherTag.info_get("pictures");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 if ( p != nullptr ) info_set("pictures", p);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 }