1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
This patch implements the -R option (to some extent), mostly by just not
showing id3v1 data (the rest is already rfc822 compliant).
It was written by Stefan Ott to close #198406
diff -Naur id3v2-0.1.12.orig//list.cpp id3v2-0.1.12//list.cpp
--- id3v2-0.1.12.orig//list.cpp 2010-05-04 05:18:04.767780069 +0200
+++ id3v2-0.1.12//list.cpp 2010-05-04 05:18:33.301530389 +0200
@@ -52,7 +52,7 @@
printf("%3d: %s\n", ii, GetGenreFromNum(ii));
}
-int PrintInformation(char *sFileName, const ID3_Tag &myTag)
+int PrintInformation(char *sFileName, const ID3_Tag &myTag, int rfc822)
{
bool firstLine = true;
const ID3_Frame * myFrame;
@@ -62,7 +62,10 @@
myFrame = Iter->GetNext();
if(firstLine) {
- std::cout << "id3v2 tag info for " << sFileName << ":" << std::endl;
+ if (rfc822)
+ std::cout << "\nFilename: " << sFileName << std::endl;
+ else
+ std::cout << "id3v2 tag info for " << sFileName << ":" << std::endl;
firstLine = false;
}
@@ -70,7 +73,10 @@
{
const char* desc = myFrame->GetDescription();
if (!desc) desc = "";
- std::cout << myFrame->GetTextID() << " (" << desc << "): ";
+ if (rfc822)
+ std::cout << myFrame->GetTextID() << ": ";
+ else
+ std::cout << myFrame->GetTextID() << " (" << desc << "): ";
ID3_FrameID eFrameID = myFrame->GetID();
switch (eFrameID)
@@ -377,7 +383,7 @@
return 0;
}
-void ListTag(int argc, char *argv[], int optind)
+void ListTag(int argc, char *argv[], int optind, int rfc822)
{
int ret = 0;
@@ -387,17 +393,20 @@
bool id3v2_tag = false;
ID3_Tag myTag;
- ret = PrintID3v1Tag(argv[nIndex]);
- if (ret == -1)
+ if (!rfc822)
{
- continue;
- }
- else if(ret == 0)
- {
- id3v1_tag = true;
+ ret = PrintID3v1Tag(argv[nIndex]);
+ if (ret == -1)
+ {
+ continue;
+ }
+ else if(ret == 0)
+ {
+ id3v1_tag = true;
+ }
}
myTag.Link(argv[nIndex], ID3TT_ID3V2);
- if(!PrintInformation(argv[nIndex],myTag))
+ if(!PrintInformation(argv[nIndex],myTag,rfc822))
id3v2_tag = true;
if(!id3v1_tag && !id3v2_tag)
std::cout << argv[nIndex] << ": No ID3 tag" << std::endl;
diff -Naur id3v2-0.1.12.orig/id3v2.cpp id3v2-0.1.12/id3v2.cpp
--- id3v2-0.1.12.orig/id3v2.cpp 2010-03-27 00:26:46.000000000 +0100
+++ id3v2-0.1.12/id3v2.cpp 2010-05-04 05:57:25.422540143 +0200
@@ -36,6 +36,7 @@
std::cout << " -L, --list-genres Lists all id3v1 genres" << std::endl;
std::cout << " -v, --version Display version information and exit" << std::endl;
std::cout << " -l, --list Lists the tag(s) on the file(s)" << std::endl;
+ std::cout << " -R, --list-rfc822 Lists using an rfc822-style format for output" << std::endl;
std::cout << " -d, --delete-v2 Deletes id3v2 tags" << std::endl;
std::cout << " -s, --delete-v1 Deletes id3v1 tags" << std::endl;
std::cout << " -D, --delete-all Deletes both id3v1 and id3v2 tags" << std::endl;
@@ -71,7 +72,7 @@
}
-extern void ListTag(int argc, char *argv[], int optind);
+extern void ListTag(int argc, char *argv[], int optind, int rfc822);
extern void PrintFrameHelp(char *sName);
extern void PrintGenreList();
@@ -115,6 +116,8 @@
// list / remove / convert
{ "list", no_argument, &iLongOpt, 'l' },
+ { "list-rfc822",
+ no_argument, &iLongOpt, 'R' },
{ "delete-v2", no_argument, &iLongOpt, 'd' },
{ "delete-v1",
no_argument, &iLongOpt, 's' },
@@ -209,7 +212,7 @@
{ "WXXX", required_argument, &optFrameID, ID3FID_WWWUSER },
{ 0, 0, 0, 0 }
};
- iOpt = getopt_long (argc, argv, "12hfLvldsDCr:a:A:t:c:g:y:T:",
+ iOpt = getopt_long (argc, argv, "12hfLvlRdsDCr:a:A:t:c:g:y:T:",
long_options, &option_index);
if (iOpt == -1 && argCounter == 0)
@@ -243,7 +246,9 @@
case 'v': PrintVersion(argv[0]); exit (0);
// listing / remove / convert -- see list.cpp and convert.cpp
- case 'l': ListTag(argc, argv, optind);
+ case 'l': ListTag(argc, argv, optind, 0);
+ exit (0);
+ case 'R': ListTag(argc, argv, optind, 1);
exit (0);
case 'd': DeleteTag(argc, argv, optind, 2);
exit (0);
|