#pragma once #include #include "iPodDB.h" /* iPod shuffle Shadow Database code */ // iTunesSD (iPod Shuffle) Database Classes class iTunesSD_Song; class iTunesSD2_Song; class iTunesSD1 { public: iTunesSD1(); ~iTunesSD1(); long write(const iPod_mhlt::mhit_map_t *mhit, unsigned char * data, const unsigned long datasize); }; class iTunesSD2 { public: long write(const iPod_mhlt *mhit, const iPod_mhlp *playlists, unsigned char * data, const unsigned long datasize); }; #define SDSONG_FILENAME_LEN 260 class iTunesSD_Song { public: iTunesSD_Song(const iPod_mhit *mhit); enum FileType { MP3 = 0x01, AAC = 0x02, WAV = 0x04 }; enum PlayFlags { UNKNOWN = 0x000001, // Might do something special, but nothing has been observed so far BOOKMARKABLE = 0x000100, // Any song that has flag is bookmarked SHUFFLE = 0x010000 // Only songs that have this flag are available in shuffle playback mode }; long write(unsigned char * data, const unsigned long datasize); void SetFilename(const wchar_t *filename); void SetStartTime(const double milliseconds) { starttime = (unsigned int)(milliseconds / 256.0); } void SetStopTime(const double milliseconds) { stoptime = (unsigned int)(milliseconds / 256.0); } void SetVolume(const int percent); // These are also only 3 byte values uint32_t size_total; uint32_t starttime; uint32_t stoptime; uint32_t volume; // -100% = 0x0, 0% = 0x64 (100), 100% = 0xc8 (200) uint32_t filetype; // 0x01 = MP3, 0x02 = AAC, 0x04 = WAV wchar_t filename[SDSONG_FILENAME_LEN + 1]; // Equal to Windows' MAX_PATH, plus the trailing NULL (261 wide chars = 522 bytes) unsigned int playflags; }; class iTunesSD2_Song { public: static long write(const iPod_mhit *mhit, unsigned char * data, const unsigned long datasize); static uint32_t header_size; }; class iTunesSD2_Playlist { public: static long write(const iPod_mhyp *master_playlist, const iPod_mhyp *playlist, unsigned char * data, const unsigned long datasize); };