void testRead(FileName fileName, const String &title, const String &comment) { Mod::File file(fileName); CPPUNIT_ASSERT(file.isValid()); Mod::Properties *p = file.audioProperties(); Mod::Tag *t = file.tag(); CPPUNIT_ASSERT(0 != p); CPPUNIT_ASSERT(0 != t); CPPUNIT_ASSERT_EQUAL(0, p->length()); CPPUNIT_ASSERT_EQUAL(0, p->bitrate()); CPPUNIT_ASSERT_EQUAL(0, p->sampleRate()); CPPUNIT_ASSERT_EQUAL(8, p->channels()); CPPUNIT_ASSERT_EQUAL(31U, p->instrumentCount()); CPPUNIT_ASSERT_EQUAL((unsigned char)1, p->lengthInPatterns()); CPPUNIT_ASSERT_EQUAL(title, t->title()); CPPUNIT_ASSERT_EQUAL(String(), t->artist()); CPPUNIT_ASSERT_EQUAL(String(), t->album()); CPPUNIT_ASSERT_EQUAL(comment, t->comment()); CPPUNIT_ASSERT_EQUAL(String(), t->genre()); CPPUNIT_ASSERT_EQUAL(0U, t->year()); CPPUNIT_ASSERT_EQUAL(0U, t->track()); CPPUNIT_ASSERT_EQUAL(String("StarTrekker"), t->trackerName()); }
void testPropertyInterface() { Mod::Tag t; PropertyMap properties; properties["BLA"] = String("bla"); properties["ARTIST"] = String("artist1"); properties["ARTIST"].append("artist2"); properties["TITLE"] = String("title"); PropertyMap unsupported = t.setProperties(properties); CPPUNIT_ASSERT(unsupported.contains("BLA")); CPPUNIT_ASSERT(unsupported.contains("ARTIST")); CPPUNIT_ASSERT_EQUAL(properties["ARTIST"], unsupported["ARTIST"]); CPPUNIT_ASSERT(!unsupported.contains("TITLE")); }
void testRead(FileName fileName, const String &title, const String &comment) { IT::File file(fileName); CPPUNIT_ASSERT(file.isValid()); IT::AudioProperties *p = file.audioProperties(); Mod::Tag *t = file.tag(); CPPUNIT_ASSERT(0 != p); CPPUNIT_ASSERT(0 != t); CPPUNIT_ASSERT_EQUAL( 0, p->length()); CPPUNIT_ASSERT_EQUAL( 0, p->bitrate()); CPPUNIT_ASSERT_EQUAL( 0, p->sampleRate()); CPPUNIT_ASSERT_EQUAL(64, p->channels()); CPPUNIT_ASSERT_EQUAL((unsigned short) 0, p->lengthInPatterns()); CPPUNIT_ASSERT_EQUAL(true, p->stereo()); CPPUNIT_ASSERT_EQUAL((unsigned short) 0, p->instrumentCount()); CPPUNIT_ASSERT_EQUAL((unsigned short) 5, p->sampleCount()); CPPUNIT_ASSERT_EQUAL((unsigned short) 1, p->patternCount()); CPPUNIT_ASSERT_EQUAL((unsigned short)535, p->version()); CPPUNIT_ASSERT_EQUAL((unsigned short)532, p->compatibleVersion()); CPPUNIT_ASSERT_EQUAL((unsigned short) 9, p->flags()); CPPUNIT_ASSERT_EQUAL((unsigned char)128, p->globalVolume()); CPPUNIT_ASSERT_EQUAL((unsigned char) 48, p->mixVolume()); CPPUNIT_ASSERT_EQUAL((unsigned char)125, p->tempo()); CPPUNIT_ASSERT_EQUAL((unsigned char) 6, p->bpmSpeed()); CPPUNIT_ASSERT_EQUAL((unsigned char)128, p->panningSeparation()); CPPUNIT_ASSERT_EQUAL((unsigned char) 0, p->pitchWheelDepth()); CPPUNIT_ASSERT_EQUAL(title, t->title()); CPPUNIT_ASSERT_EQUAL(String(), t->artist()); CPPUNIT_ASSERT_EQUAL(String(), t->album()); CPPUNIT_ASSERT_EQUAL(comment, t->comment()); CPPUNIT_ASSERT_EQUAL(String(), t->genre()); CPPUNIT_ASSERT_EQUAL(0U, t->year()); CPPUNIT_ASSERT_EQUAL(0U, t->track()); CPPUNIT_ASSERT_EQUAL(String("Impulse Tracker"), t->trackerName()); }
void testRead(FileName fileName, const String &title, const String &comment) { S3M::File file(fileName); CPPUNIT_ASSERT(file.isValid()); S3M::Properties *p = file.audioProperties(); Mod::Tag *t = file.tag(); CPPUNIT_ASSERT(0 != p); CPPUNIT_ASSERT(0 != t); CPPUNIT_ASSERT_EQUAL( 0, p->length()); CPPUNIT_ASSERT_EQUAL( 0, p->bitrate()); CPPUNIT_ASSERT_EQUAL( 0, p->sampleRate()); CPPUNIT_ASSERT_EQUAL(16, p->channels()); CPPUNIT_ASSERT_EQUAL((unsigned short) 0, p->lengthInPatterns()); CPPUNIT_ASSERT_EQUAL(false, p->stereo()); CPPUNIT_ASSERT_EQUAL((unsigned short) 5, p->sampleCount()); CPPUNIT_ASSERT_EQUAL((unsigned short) 1, p->patternCount()); CPPUNIT_ASSERT_EQUAL((unsigned short) 0, p->flags()); CPPUNIT_ASSERT_EQUAL((unsigned short)4896, p->trackerVersion()); CPPUNIT_ASSERT_EQUAL((unsigned short) 2, p->fileFormatVersion()); CPPUNIT_ASSERT_EQUAL((unsigned char) 64, p->globalVolume()); CPPUNIT_ASSERT_EQUAL((unsigned char) 48, p->masterVolume()); CPPUNIT_ASSERT_EQUAL((unsigned char)125, p->tempo()); CPPUNIT_ASSERT_EQUAL((unsigned char) 6, p->bpmSpeed()); CPPUNIT_ASSERT_EQUAL(title, t->title()); CPPUNIT_ASSERT_EQUAL(String(), t->artist()); CPPUNIT_ASSERT_EQUAL(String(), t->album()); CPPUNIT_ASSERT_EQUAL(comment, t->comment()); CPPUNIT_ASSERT_EQUAL(String(), t->genre()); CPPUNIT_ASSERT_EQUAL(0U, t->year()); CPPUNIT_ASSERT_EQUAL(0U, t->track()); CPPUNIT_ASSERT_EQUAL(String("ScreamTracker III"), t->trackerName()); }
bool TagEditor::save() { if ( fRef ) { bool mustSave = false, result = false; if ( !isChecked() ) clearValues(); File &file = *fRef->file(); Tag &tag = getTag( *fRef, file ); if ( titleE->text() != tag.title().toCString( true ) ) { tag.setTitle( String( titleE->text().toUtf8().data(), String::UTF8 ) ); mustSave = true; } if ( artistE->text() != tag.artist().toCString( true ) ) { tag.setArtist( String( artistE->text().toUtf8().data(), String::UTF8 ) ); mustSave = true; } if ( albumE->text() != tag.album().toCString( true ) ) { tag.setAlbum( String( albumE->text().toUtf8().data(), String::UTF8 ) ); mustSave = true; } if ( commentE->text() != tag.comment().toCString( true ) ) { tag.setComment( String( commentE->text().toUtf8().data(), String::UTF8 ) ); mustSave = true; } if ( genreE->text() != tag.genre().toCString( true ) ) { tag.setGenre( String( genreE->text().toUtf8().data(), String::UTF8 ) ); mustSave = true; } if ( ( uint )yearB->value() != tag.year() ) { tag.setYear( yearB->value() ); mustSave = true; } if ( ( uint )trackB->value() != tag.track() ) { tag.setTrack( trackB->value() ); mustSave = true; } if ( isChecked() && ( pictureModificated || pictureBChecked != pictureB->isChecked() ) ) { const bool hasPicture = pictureB->isChecked() && !picture->isEmpty(); if ( instanceOf( file, MPEG::File ) || instanceOf( file, RIFF::AIFF::File ) ) { ID3v2::Tag *id3v2 = NULL; if ( instanceOf( file, MPEG::File ) ) id3v2 = ( ( MPEG::File & )file ).ID3v2Tag( hasPicture ); else if ( instanceOf( file, RIFF::AIFF::File ) ) id3v2 = ( ( RIFF::AIFF::File & )file ).tag(); if ( id3v2 ) { id3v2->removeFrames( "APIC" ); if ( hasPicture ) { ID3v2::AttachedPictureFrame *pictureFrame = new ID3v2::AttachedPictureFrame; pictureFrame->setType( ID3v2::AttachedPictureFrame::FrontCover ); pictureFrame->setMimeType( pictureMimeType.data() ); pictureFrame->setPicture( *picture ); id3v2->addFrame( pictureFrame ); } mustSave = true; } } else if ( instanceOf( file, FLAC::File ) ) { FLAC::File &flacF = ( FLAC::File & )file; flacF.removePictures(); if ( hasPicture ) { FLAC::Picture *flacPicture = new FLAC::Picture; flacPicture->setMimeType( pictureMimeType.data() ); flacPicture->setType( FLAC::Picture::FrontCover ); flacPicture->setData( *picture ); flacF.addPicture( flacPicture ); } mustSave = true; } else if ( instanceOf( file, MP4::File ) ) { MP4::ItemListMap &itemListMap = ( ( MP4::File & )file ).tag()->itemListMap(); if ( itemListMap.contains( "covr" ) ) itemListMap.erase( "covr" ); if ( hasPicture ) { MP4::CoverArt::Format format = ( MP4::CoverArt::Format )0; if ( pictureMimeType == "image/jpeg" ) format = MP4::CoverArt::JPEG; else if ( pictureMimeType == "image/png" ) format = MP4::CoverArt::PNG; #if TAGLIB18 else if ( pictureMimeType == "image/bmp" ) format = MP4::CoverArt::BMP; else if ( pictureMimeType == "image/gif" ) format = MP4::CoverArt::GIF; #endif if ( format ) { MP4::CoverArtList coverArtList; coverArtList.append( MP4::CoverArt( format, *picture ) ); itemListMap.insert( "covr", coverArtList ); } } mustSave = true; } else if ( isOgg( file ) ) { Ogg::XiphComment *xiphComment = getXiphComment( file ); if ( xiphComment ) { xiphComment->removeField( "METADATA_BLOCK_PICTURE" ); if ( hasPicture ) { FLAC::Picture flacPicture; flacPicture.setMimeType( pictureMimeType.data() ); flacPicture.setType( FLAC::Picture::FrontCover ); flacPicture.setData( *picture ); const ByteVector pict_data = flacPicture.render(); xiphComment->addField( "METADATA_BLOCK_PICTURE", QByteArray::fromRawData( pict_data.data(), pict_data.size() ).toBase64().data() ); } mustSave = true; } } } else if ( !isChecked() ) //Usuwanie wszystkich znanych tagów { mustSave = true; if ( instanceOf( file, MPEG::File ) ) ( ( MPEG::File & )file ).strip(); else if ( instanceOf( file, MPC::File ) ) ( ( MPC::File & )file ).strip(); else if ( instanceOf( file, WavPack::File ) ) ( ( WavPack::File & )file ).strip(); else if ( instanceOf( file, TrueAudio::File ) ) ( ( TrueAudio::File & )file ).strip(); else if ( instanceOf( file, APE::File ) ) ( ( APE::File & )file ).strip(); else if ( instanceOf( file, MP4::File ) ) ( ( MP4::File & )file ).tag()->itemListMap().clear(); else if ( instanceOf( file, ASF::File ) ) ( ( ASF::File & )file ).tag()->attributeListMap().clear(); else if ( isOgg( file ) ) removeXiphComment( getXiphComment( file ) ); else if ( instanceOf( file, FLAC::File ) ) { FLAC::File &flacF = ( FLAC::File & )file; flacF.removePictures(); #if TAGLIB19 if ( flacF.hasXiphComment() ) #endif removeXiphComment( flacF.xiphComment() ); } else if ( instanceOf( file, RIFF::AIFF::File ) ) { ID3v2::Tag *id3v2 = ( ( RIFF::AIFF::File & )file ).tag(); if ( id3v2 ) { ID3v2::FrameList frameList = id3v2->frameList(); for ( ID3v2::FrameList::ConstIterator it = frameList.begin() ; it != frameList.end() ; ++it ) id3v2->removeFrame( *it ); } } #if TAGLIB18 else if ( instanceOf( file, Mod::File ) || instanceOf( file, S3M::File ) || instanceOf( file, IT::File ) || instanceOf( file, XM::File ) ) { Mod::Tag *modTag = NULL; if ( instanceOf( file, Mod::File ) ) modTag = ( ( Mod::File & )file ).tag(); else if ( instanceOf( file, S3M::File ) ) modTag = ( ( S3M::File & )file ).tag(); else if ( instanceOf( file, IT::File ) ) modTag = ( ( IT::File & )file ).tag(); else if ( instanceOf( file, XM::File ) ) modTag = ( ( XM::File & )file ).tag(); if ( modTag ) modTag->setTrackerName( String::null ); } #endif } /* FLAC::File writer BUG workaround - remove ID3 tags */ if ( mustSave && instanceOf( file, FLAC::File ) ) { FLAC::File &flacF = ( FLAC::File & )file; #if TAGLIB19 if ( flacF.hasID3v1Tag() || flacF.hasID3v2Tag() ) #else if ( flacF.ID3v1Tag() || flacF.ID3v2Tag() ) #endif { const FileName fName = fRef->file()->name(); result = fRef->save(); delete fRef; fRef = NULL; if ( result ) result = MPEG::File( fName, false ).save( MPEG::File::NoTags ); mustSave = false; } } #if TAGLIB19 /* No ID3v2 in WAV, only InfoTag */ if ( mustSave && instanceOf( file, RIFF::WAV::File ) ) { RIFF::WAV::File &wavF = ( RIFF::WAV::File & )file; wavF.save( wavF.InfoTag()->isEmpty() ? RIFF::WAV::File::NoTags : RIFF::WAV::File::Info ); mustSave = false; } #endif return mustSave ? fRef->save() : ( fRef ? true : result ); } return false; }