Example #1
0
Itdb_Track* GPodDevice::AddTrackToITunesDb(const Song& metadata) {
  // Create the track
  Itdb_Track* track = itdb_track_new();
  metadata.ToItdb(track);

  // Add it to the DB and the master playlist
  // The DB takes ownership of the track
  itdb_track_add(db_, track, -1);
  Itdb_Playlist* mpl = itdb_playlist_mpl(db_);
  itdb_playlist_add_track(mpl, track, -1);

  return track;
}
Example #2
0
File: db.c Project: mattn/cpod
/* get an Itdb_Track from the given file */
Itdb_Track *track_parse(char *path, Itdb_iTunesDB *db) {
    TagLib_File *file = NULL;
    TagLib_Tag *tag = NULL;
    const TagLib_AudioProperties *audio = NULL;
    Itdb_Track *track = itdb_track_new();

    FILE *track_file = fopen(path, "r");
    fseek(track_file, 0, SEEK_END);
    track->size = ftell(track_file);
    fclose(track_file);

    /* we are storing our filename in userdata */
    track->userdata = g_strdup(path);
    track->userdata_duplicate = (gpointer (*)(gpointer))g_strdup;
    track->userdata_destroy = g_free;

    track->transferred = FALSE;
    itdb_track_add(db, track, -1);

    file = taglib_file_new(path);
    if (file == NULL) {
        /* should this be an error? */
        cpod_error("error reading metadata from \"%s\"\n", path);
        return track;
    }
    tag = taglib_file_tag(file);
    audio = taglib_file_audioproperties(file);

    /* g_strdup() string fields so that taglib_tag_free_strings() works */
    track->title = g_strdup(taglib_tag_title(tag));
    track->album = g_strdup(taglib_tag_album(tag));
    track->artist = g_strdup(taglib_tag_artist(tag));
    track->genre = g_strdup(taglib_tag_genre(tag));
    track->comment = g_strdup(taglib_tag_comment(tag));
    track->track_nr = taglib_tag_track(tag);
    track->year = taglib_tag_year(tag);
    /* audioproperties_length is in seconds and track->tracklen is in ms */
    track->tracklen = taglib_audioproperties_length(audio) * 1000;
    track->samplerate = taglib_audioproperties_samplerate(audio);

    taglib_tag_free_strings();
    /* taglib_file_free() frees TagLib_{Tag,AudioProperties} too */
    taglib_file_free(file);

    return track;
}
Example #3
0
	Itdb_Track* GpodDb::AddTrack (const QString& path, const QString& filename, const UnmountableFileInfo& info)
	{
		auto dup = [] (const QString& str) { return strdup (str.toUtf8 ().constData ()); };

		const auto track = itdb_track_new ();
		track->track_nr = info.TrackNumber_;
		track->title = dup (info.TrackTitle_);
		track->artist = dup (info.Artist_);
		track->album = dup (info.Album_);
		track->year = info.AlbumYear_;
		track->genre = dup (info.Genres_.join (" / "));
		track->size = QFileInfo { path }.size ();

		track->transferred = 1;

		track->filetype = strdup ("mp3");

		const auto& suffix = filename.section ('.', -1, -1).toUpper ();
		track->filetype_marker = 0;
		for (int i = 0; i < 4; ++i)
		{
			track->filetype_marker <<= 8;
			track->filetype_marker |= (i >= suffix.length () ?
						' ' :
						suffix [i].toLatin1 ());
		}

		track->ipod_path = strdup (filename.toUtf8 ().mid (1));
		itdb_filename_fs2ipod (track->ipod_path);

		itdb_track_add (DB_, track, -1);

		itdb_playlist_add_track (itdb_playlist_mpl (DB_), track, -1);

		return track;
	}