Index: isrcsubmit.cpp =================================================================== --- isrcsubmit.cpp (revision 12994) +++ isrcsubmit.cpp (working copy) @@ -97,15 +97,14 @@ } printf("\nMatching releases:\n"); - vector ids; + vector releases; int cnt = 1; for (ReleaseResultList::iterator i = results.begin(); i != results.end(); i++) { ReleaseResult *result = *i; Release *release = result->getRelease(); printf("%d) %s.html %s\n", cnt, release->getId().c_str(), release->getTitle().c_str()); - ids.push_back(release->getId()); + releases.push_back(release); cnt += 1; - delete result; } printf("\nEnter the number of the correct release: "); @@ -119,7 +118,7 @@ Release *release; try { - release = q.getReleaseById(ids[c-1], &ReleaseIncludes().tracks().isrcs()); + release = q.getReleaseById(releases[c-1]->getId(), &ReleaseIncludes().tracks().isrcs()); } catch (WebServiceError &e) { fprintf(stderr, "Error: %s\n", e.what()); @@ -129,9 +128,21 @@ printf("\n"); int trackno = 0; map isrc_map; - for (TrackList::iterator j = release->getTracks().begin(); j != release->getTracks().end(); j++) { + for (TrackList::iterator j = releases[c-1]->getTracks().begin(); j != releases[c-1]->getTracks().end(); j++) { trackno += 1; - Track *track = *j; + Track *track = NULL; + for (TrackList::iterator k = release->getTracks().begin(); k != release->getTracks().end(); k++) { + if((*k)->getId() == (*j)->getId()) { + track = *k; + break; + } + } + + if (track == NULL) { + fprintf(stderr, "Data changed in musicbrainz during query"); + continue; + } + string isrc = discid_get_track_isrc(disc, trackno); if (isrc.size() == 0 || isrc == "000000000000") continue; @@ -152,6 +163,10 @@ } printf("\n"); + for (ReleaseResultList::iterator i = results.begin(); i != results.end(); i++) { + delete *i; + } + if (isrc_map.size() == 0) { printf("No ISRCs to submit.\n"); return 1;