79
79
gboolean Mp4tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
82
MP4FileHandle mp4file = NULL;
83
uint16_t track, track_total;
84
uint16_t disk, disktotal;
87
Picture *prev_pic = NULL;
92
86
if (!filename || !FileTag)
102
96
fclose(file); // We close it cause mp4 opens/closes file itself
104
98
/* Get data from tag */
105
mp4file = MP4Read(filename, 0);
106
if (mp4file == MP4_INVALID_FILE_HANDLE)
99
mp4file = taglib_file_new_type(filename, TagLib_File_MP4);
108
102
gchar *filename_utf8 = filename_to_display(filename);
109
103
Log_Print(LOG_ERROR,_("ERROR while opening file: '%s' (%s)."),filename_utf8,_("MP4 format invalid"));
114
108
/* TODO Add error detection */
109
tag = taglib_file_tag(mp4file);
119
MP4GetMetadataName(mp4file, &FileTag->title);
114
FileTag->title = g_strdup(taglib_tag_title(tag));
124
MP4GetMetadataArtist(mp4file, &FileTag->artist);
119
FileTag->artist = g_strdup(taglib_tag_artist(tag));
129
MP4GetMetadataAlbum(mp4file, &FileTag->album);
124
FileTag->album = g_strdup(taglib_tag_album(tag));
131
126
/**********************
132
127
* Disk / Total Disks *
133
128
**********************/
134
130
if (MP4GetMetadataDisk(mp4file, &disk, &disktotal))
136
132
if (disk != 0 && disktotal != 0)
142
138
//if (disktotal != 0)
143
139
// FileTag->disk_number_total = g_strdup_printf("%d",(gint)disktotal);
149
MP4GetMetadataYear(mp4file, &FileTag->year);
146
FileTag->year = g_strdup_printf("%u", taglib_tag_year(tag));
151
148
/*************************
152
149
* Track and Total Track *
153
150
*************************/
154
if (MP4GetMetadataTrack(mp4file, &track, &track_total))
151
track = taglib_tag_track(tag);
157
155
FileTag->track = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)track); // Just to have numbers like this : '01', '05', '12', ...
158
if (track_total != 0)
159
FileTag->track_total = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)track_total); // Just to have numbers like this : '01', '05', '12', ...
156
//if (track_total != 0)
157
// FileTag->track_total = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)track_total); // Just to have numbers like this : '01', '05', '12', ...
165
MP4GetMetadataGenre(mp4file, &FileTag->genre);
163
FileTag->genre = g_strdup(taglib_tag_genre(tag));
170
MP4GetMetadataComment(mp4file, &FileTag->comment);
168
FileTag->comment = g_strdup(taglib_tag_comment(tag));
172
170
/**********************
173
171
* Composer or Writer *
174
172
**********************/
175
MP4GetMetadataWriter(mp4file, &FileTag->composer);
173
// MP4GetMetadataWriter(mp4file, &FileTag->composer);
177
175
/*****************
178
176
* Encoding Tool *
179
177
*****************/
180
MP4GetMetadataTool(mp4file, &FileTag->encoded_by);
178
// MP4GetMetadataTool(mp4file, &FileTag->encoded_by);
254
255
/* Open file for writing */
255
mp4file = MP4Modify(filename,0,0);
256
if (mp4file == MP4_INVALID_FILE_HANDLE)
256
mp4file = taglib_file_new_type(filename, TagLib_File_MP4);
258
259
Log_Print(LOG_ERROR,_("ERROR while opening file: '%s' (%s)."),filename_utf8,_("MP4 format invalid"));
263
tag = taglib_file_tag(mp4file);
265
268
if (FileTag->title && g_utf8_strlen(FileTag->title, -1) > 0)
267
MP4SetMetadataName(mp4file, FileTag->title);
270
taglib_tag_set_title(tag, FileTag->title);
270
273
//MP4DeleteMetadataName(mp4file); // Not available on mpeg4ip-1.2 (only in 1.3)
271
MP4SetMetadataName(mp4file, "");
274
taglib_tag_set_title(tag, "");
277
280
if (FileTag->artist && g_utf8_strlen(FileTag->artist, -1) > 0)
279
MP4SetMetadataArtist(mp4file, FileTag->artist);
282
taglib_tag_set_artist(tag, FileTag->artist);
282
285
//MP4DeleteMetadataArtist(mp4file);
283
MP4SetMetadataArtist(mp4file, "");
286
taglib_tag_set_artist(tag, "");
289
292
if (FileTag->album && g_utf8_strlen(FileTag->album, -1) > 0)
291
MP4SetMetadataAlbum(mp4file, FileTag->album);
294
taglib_tag_set_album(tag, FileTag->album);
294
297
//MP4DeleteMetadataAlbum(mp4file);
295
MP4SetMetadataAlbum(mp4file, "");
298
taglib_tag_set_album(tag, "");
298
301
/**********************
301
304
if (FileTag->disc_number && g_utf8_strlen(FileTag->disc_number, -1) > 0)
302
305
//|| FileTag->disc_number_total && g_utf8_strlen(FileTag->disc_number_total, -1) > 0)
305
uint16_t disktotal = 0;
307
307
/* At the present time, we manage only disk number like '1' or '1/2', we
308
308
* don't use disk number total... so here we try to decompose */
309
if (FileTag->disc_number)
309
/*if (FileTag->disc_number)
311
311
gchar *dn_tmp = g_strdup(FileTag->disc_number);
312
312
gchar *tmp = strchr(dn_tmp,'/');
328
/*if (FileTag->disc_number)
328
if (FileTag->disc_number)
329
329
disk = atoi(FileTag->disc_number);
330
330
if (FileTag->disc_number_total)
331
331
disktotal = atoi(FileTag->disc_number_total);
333
MP4SetMetadataDisk(mp4file, disk, disktotal);
333
// MP4SetMetadataDisk(mp4file, disk, disktotal);
336
336
//MP4DeleteMetadataDisk(mp4file);
337
MP4SetMetadataDisk(mp4file, 0, 0);
337
//MP4SetMetadataDisk(mp4file, 0, 0);
343
343
if (FileTag->year && g_utf8_strlen(FileTag->year, -1) > 0)
345
MP4SetMetadataYear(mp4file, FileTag->year);
345
taglib_tag_set_year(tag, atoi(FileTag->year));
348
348
//MP4DeleteMetadataYear(mp4file);
349
MP4SetMetadataYear(mp4file, "");
349
taglib_tag_set_year(tag, 0);
352
352
/*************************
353
353
* Track and Total Track *
354
354
*************************/
355
355
if ( (FileTag->track && g_utf8_strlen(FileTag->track, -1) > 0)
356
|| (FileTag->track_total && g_utf8_strlen(FileTag->track_total, -1) > 0) )
356
/*|| (FileTag->track_total && g_utf8_strlen(FileTag->track_total, -1) > 0) */)
359
uint16_t track_total = 0;
360
359
if (FileTag->track)
361
360
track = atoi(FileTag->track);
362
if (FileTag->track_total)
363
track_total = atoi(FileTag->track_total);
364
MP4SetMetadataTrack(mp4file, track, track_total);
361
//if (FileTag->track_total)
362
// track_total = atoi(FileTag->track_total);
363
taglib_tag_set_track(tag, track);
367
366
//MP4DeleteMetadataTrack(mp4file);
368
MP4SetMetadataTrack(mp4file, 0, 0);
367
taglib_tag_set_track(tag, 0);
374
373
if (FileTag->genre && g_utf8_strlen(FileTag->genre, -1) > 0 )
376
MP4SetMetadataGenre(mp4file, FileTag->genre);
375
taglib_tag_set_genre(tag, FileTag->genre);
379
378
//MP4DeleteMetadataGenre(mp4file);
380
MP4SetMetadataGenre(mp4file, "");
379
taglib_tag_set_genre(tag, "");
386
385
if (FileTag->comment && g_utf8_strlen(FileTag->comment, -1) > 0)
388
MP4SetMetadataComment(mp4file, FileTag->comment);
387
taglib_tag_set_comment(tag, FileTag->comment);
391
390
//MP4DeleteMetadataComment(mp4file);
392
MP4SetMetadataComment(mp4file, "");
391
taglib_tag_set_comment(tag, "");
395
394
/**********************
396
395
* Composer or Writer *
397
396
**********************/
398
398
if (FileTag->composer && g_utf8_strlen(FileTag->composer, -1) > 0)
400
400
MP4SetMetadataWriter(mp4file, FileTag->composer);
403
403
//MP4DeleteMetadataWriter(mp4file);
404
404
MP4SetMetadataWriter(mp4file, "");
407
408
/*****************
408
409
* Encoding Tool *
409
410
*****************/
410
412
if (FileTag->encoded_by && g_utf8_strlen(FileTag->encoded_by, -1) > 0)
412
414
MP4SetMetadataTool(mp4file, FileTag->encoded_by);