00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
#include "tag_impl.h"
00028
00029
using namespace dami;
00030
00031 ID3_TagImpl::const_iterator ID3_TagImpl::Find(
const ID3_Frame *frame)
const
00032
{
00033
const_iterator cur = _frames.begin();
00034
00035
for (; cur != _frames.end(); ++cur)
00036 {
00037
if (*cur == frame)
00038 {
00039
break;
00040 }
00041 }
00042
00043
return cur;
00044 }
00045
00046 ID3_TagImpl::iterator ID3_TagImpl::Find(
const ID3_Frame *frame)
00047 {
00048
iterator cur = _frames.begin();
00049
00050
for (; cur != _frames.end(); ++cur)
00051 {
00052
if (*cur == frame)
00053 {
00054
break;
00055 }
00056 }
00057
00058
return cur;
00059 }
00060
00061 ID3_Frame *
ID3_TagImpl::Find(ID3_FrameID
id)
const
00062
{
00063
ID3_Frame *frame =
NULL;
00064
00065
00066
if (_frames.end() == _cursor)
00067 {
00068 _cursor = _frames.begin();
00069 }
00070
00071
00072
for (
int iCount = 0; iCount < 2 && frame ==
NULL; iCount++)
00073 {
00074
00075
00076
00077
00078
00079
00080
const_iterator
00081
begin = (0 == iCount ? _cursor : _frames.begin()),
00082
end = (0 == iCount ? _frames.end() : _cursor);
00083
00084
for (
const_iterator cur = begin; cur !=
end; ++cur)
00085 {
00086
if ((*cur !=
NULL) && ((*cur)->GetID() ==
id))
00087 {
00088
00089 frame = *cur;
00090 _cursor = ++cur;
00091
break;
00092 }
00093 }
00094 }
00095
00096
return frame;
00097 }
00098
00099 ID3_Frame *
ID3_TagImpl::Find(ID3_FrameID
id, ID3_FieldID fldID, String data)
const
00100
{
00101
ID3_Frame *frame =
NULL;
00102 ID3D_NOTICE(
"Find: looking for comment with data = " << data.c_str() );
00103
00104
00105
if (_frames.end() == _cursor)
00106 {
00107 _cursor = _frames.begin();
00108 ID3D_NOTICE(
"Find: resetting cursor" );
00109 }
00110
00111
for (
int iCount = 0; iCount < 2 && frame ==
NULL; iCount++)
00112 {
00113 ID3D_NOTICE(
"Find: iCount = " << iCount );
00114
00115
00116
00117
00118
00119
00120
const_iterator
00121
begin = (0 == iCount ? _cursor : _frames.begin()),
00122
end = (0 == iCount ? _frames.end() : _cursor);
00123
00124
for (
const_iterator cur = begin; cur !=
end; ++cur)
00125 {
00126 ID3D_NOTICE(
"Find: frame = 0x" << hex << (uint32) *cur << dec );
00127
if ((*cur !=
NULL) && ((*cur)->GetID() ==
id) &&
00128 (*cur)->Contains(fldID))
00129 {
00130
ID3_Field* fld = (*cur)->GetField(fldID);
00131
if (
NULL == fld)
00132 {
00133
continue;
00134 ID3D_NOTICE(
"Find: didn't have the right field" );
00135 }
00136
00137 String text(
NULL == fld->
GetRawText() ?
"" : fld->
GetRawText() , fld->
Size());
00138 ID3D_NOTICE(
"Find: text = " << text.c_str() );
00139
00140
if (text == data)
00141 {
00142
00143 frame = *cur;
00144 _cursor = ++cur;
00145
break;
00146 }
00147 }
00148 }
00149 }
00150
00151
return frame;
00152 }
00153
00154 ID3_Frame *
ID3_TagImpl::Find(ID3_FrameID
id, ID3_FieldID fldID, WString data)
const
00155
{
00156
ID3_Frame *frame =
NULL;
00157
00158
00159
if (_frames.end() == _cursor)
00160 {
00161 _cursor = _frames.begin();
00162 }
00163
00164
for (
int iCount = 0; iCount < 2 && frame ==
NULL; iCount++)
00165 {
00166
00167
00168
00169
00170
00171
00172
const_iterator
00173
begin = (0 == iCount ? _cursor : _frames.begin()),
00174
end = (0 == iCount ? _frames.end() : _cursor);
00175
00176
for (
const_iterator cur = begin; cur !=
end; ++cur)
00177 {
00178
if ((*cur !=
NULL) && ((*cur)->GetID() ==
id) &&
00179 (*cur)->Contains(fldID))
00180 {
00181
ID3_Field* fld = (*cur)->GetField(fldID);
00182
if (
NULL == fld)
00183 {
00184
continue;
00185 }
00186 WString text = toWString(fld->
GetRawUnicodeText(), fld->
Size());
00187
00188
if (text == data)
00189 {
00190
00191 frame = *cur;
00192 _cursor = ++cur;
00193
break;
00194 }
00195 }
00196 }
00197 }
00198
00199
return frame;
00200 }
00201
00202 ID3_Frame *
ID3_TagImpl::Find(ID3_FrameID
id, ID3_FieldID fldID, uint32 data)
const
00203
{
00204
ID3_Frame *frame =
NULL;
00205
00206
00207
if (_frames.end() == _cursor)
00208 {
00209 _cursor = _frames.begin();
00210 }
00211
00212
for (
int iCount = 0; iCount < 2 && frame ==
NULL; iCount++)
00213 {
00214
00215
00216
00217
00218
00219
00220
const_iterator
00221
begin = (0 == iCount ? _cursor : _frames.begin()),
00222
end = (0 == iCount ? _frames.end() : _cursor);
00223
00224
for (
const_iterator cur = begin; cur !=
end; ++cur)
00225 {
00226
if ((*cur !=
NULL) && ((*cur)->GetID() ==
id) &&
00227 ((*cur)->GetField(fldID)->Get() == data))
00228 {
00229
00230 frame = *cur;
00231 _cursor = ++cur;
00232
break;
00233 }
00234 }
00235 }
00236
00237
return frame;
00238 }
00239