Go to the documentation of this file.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