add verbose option

This commit is contained in:
Martchus 2015-09-23 00:02:06 +02:00
parent 8c1d2eaf81
commit 17923f9b23
3 changed files with 52 additions and 28 deletions

View File

@ -31,6 +31,9 @@ int main(int argc, char *argv[])
SET_APPLICATION_INFO;
QT_CONFIG_ARGUMENTS qtConfigArgs;
HelpArgument helpArg(parser);
// verbose option
Argument verboseArg("verbose", "v", "be verbose");
verboseArg.setCombinable(true);
// recursive option
Argument recursiveArg("recursive", "r", "includes subdirectories");
// input/output file/files
@ -55,15 +58,15 @@ int main(int argc, char *argv[])
// display general file info
Argument displayFileInfoArg("display-file-info", "file-info", "displays general file information");
displayFileInfoArg.setDenotesOperation(true);
displayFileInfoArg.setCallback(std::bind(Cli::displayFileInfo, _1, std::cref(filesArg)));
displayFileInfoArg.setSecondaryArguments({&filesArg});
displayFileInfoArg.setCallback(std::bind(Cli::displayFileInfo, _1, std::cref(filesArg), std::cref(verboseArg)));
displayFileInfoArg.setSecondaryArguments({&filesArg, &verboseArg});
// display tag info
Argument displayTagInfoArg("display-tag-info", "get", "displays the values of all specified tag fields (displays all fields if none specified)");
displayTagInfoArg.setDenotesOperation(true);
displayTagInfoArg.setCallback(std::bind(Cli::displayTagInfo, _1, std::cref(filesArg)));
displayTagInfoArg.setCallback(std::bind(Cli::displayTagInfo, _1, std::cref(filesArg), std::cref(verboseArg)));
displayTagInfoArg.setRequiredValueCount(-1);
displayTagInfoArg.setValueNames({"title", "album", "artist", "trackpos"});
displayTagInfoArg.setSecondaryArguments({&filesArg});
displayTagInfoArg.setSecondaryArguments({&filesArg, &verboseArg});
// set tag info
Argument removeOtherFieldsArg("remove-other-fields", string(), "if present ALL unspecified tag fields will be removed; otherwise use eg. \"album=\" to remove a specific field");
removeOtherFieldsArg.setCombinable(true);
@ -89,19 +92,19 @@ int main(int argc, char *argv[])
encodingArg.setCombinable(true);
Argument setTagInfoArg("set-tag-info", "set", "sets the values of all specified tag fields");
setTagInfoArg.setDenotesOperation(true);
setTagInfoArg.setCallback(std::bind(Cli::setTagInfo, _1, std::cref(filesArg), std::cref(removeOtherFieldsArg), std::cref(treatUnknownFilesAsMp3FilesArg), std::cref(id3v1UsageArg), std::cref(id3v2UsageArg), std::cref(mergeMultipleSuccessiveTagsArg), std::cref(id3v2VersionArg), std::cref(encodingArg)));
setTagInfoArg.setCallback(std::bind(Cli::setTagInfo, _1, std::cref(filesArg), std::cref(removeOtherFieldsArg), std::cref(treatUnknownFilesAsMp3FilesArg), std::cref(id3v1UsageArg), std::cref(id3v2UsageArg), std::cref(mergeMultipleSuccessiveTagsArg), std::cref(id3v2VersionArg), std::cref(encodingArg), std::cref(verboseArg)));
setTagInfoArg.setRequiredValueCount(-1);
setTagInfoArg.setValueNames({"title=foo", "album=bar", "cover=/path/to/file"});
setTagInfoArg.setSecondaryArguments({&filesArg, &removeOtherFieldsArg, &treatUnknownFilesAsMp3FilesArg, &id3v1UsageArg, &id3v2UsageArg, &mergeMultipleSuccessiveTagsArg, &id3v2VersionArg, &encodingArg});
setTagInfoArg.setSecondaryArguments({&filesArg, &removeOtherFieldsArg, &treatUnknownFilesAsMp3FilesArg, &id3v1UsageArg, &id3v2UsageArg, &mergeMultipleSuccessiveTagsArg, &id3v2VersionArg, &encodingArg, &verboseArg});
// extract cover
Argument extractFieldArg("extract", "ext", "extracts the specified field from the specified file");
extractFieldArg.setRequiredValueCount(1);
extractFieldArg.setValueNames({"field"});
extractFieldArg.setSecondaryArguments({&fileArg, &outputFileArg});
extractFieldArg.setSecondaryArguments({&fileArg, &outputFileArg, &verboseArg});
extractFieldArg.setDenotesOperation(true);
extractFieldArg.setCallback(std::bind(Cli::extractField, _1, std::cref(fileArg), std::cref(outputFileArg)));
extractFieldArg.setCallback(std::bind(Cli::extractField, _1, std::cref(fileArg), std::cref(outputFileArg), std::cref(verboseArg)));
// file info
Argument validateArg("validate", "v", "validates the file integrity as accurately as possible; the structure of the file will be parsed completely");
Argument validateArg("validate", "c", "validates the file integrity as accurately as possible; the structure of the file will be parsed completely");
validateArg.setDenotesOperation(true);
validateArg.setCombinable(true);
Argument genInfoArg("gen-info", "info", "generates technical information about the specified file as HTML document");

View File

@ -93,27 +93,47 @@ QString incremented(const QString &str, unsigned int toIncrement = 1)
return res;
}
void printNotifications(const MediaFileInfo &fileInfo, const char *head = nullptr)
void printNotifications(const MediaFileInfo &fileInfo, const char *head = nullptr, bool beVerbose = false)
{
auto notifications = fileInfo.gatherRelatedNotifications();
if(!beVerbose) {
for(const auto &notification : notifications) {
switch(notification.type()) {
case NotificationType::Debug:
case NotificationType::Information:
break;
default:
goto printNotifications;
}
}
return;
}
if(!notifications.empty()) {
printNotifications:
if(head) {
cout << head << endl;
}
Notification::sortByTime(notifications);
for(const Notification &notification : notifications) {
for(const auto &notification : notifications) {
switch(notification.type()) {
case NotificationType::Critical:
cout << "Error ";
break;
case NotificationType::Debug:
cout << "Debug ";
if(beVerbose) {
cout << "Debug ";
}
break;
case NotificationType::Information:
if(beVerbose) {
cout << "Information ";
}
break;
case NotificationType::Warning:
cout << "Warning ";
break;
case NotificationType::Critical:
cout << "Error ";
break;
default:
cout << "Information ";
;
}
cout << notification.creationTime().toString(DateTimeOutputFormat::TimeOnly) << " ";
cout << notification.context() << ": ";
@ -425,7 +445,7 @@ void printProperty(const char *propName, const intType value, const char *suffix
}
}
void displayFileInfo(const StringVector &, const Argument &filesArg)
void displayFileInfo(const StringVector &, const Argument &filesArg, const Argument &verboseArg)
{
CMD_UTILS_START_CONSOLE;
if(!filesArg.valueCount()) {
@ -515,12 +535,12 @@ void displayFileInfo(const StringVector &, const Argument &filesArg)
} catch(ApplicationUtilities::Failure &) {
cout << "Error: A parsing failure occured when reading the file \"" << file << "\"." << endl;
}
printNotifications(fileInfo, "Parsing notifications:");
printNotifications(fileInfo, "Parsing notifications:", verboseArg.isPresent());
cout << endl;
}
}
void displayTagInfo(const StringVector &parameterValues, const Argument &filesArg)
void displayTagInfo(const StringVector &parameterValues, const Argument &filesArg, const Argument &verboseArg)
{
CMD_UTILS_START_CONSOLE;
if(!filesArg.valueCount()) {
@ -592,14 +612,15 @@ void displayTagInfo(const StringVector &parameterValues, const Argument &filesAr
} catch(ApplicationUtilities::Failure &) {
cout << "Error: A parsing failure occured when reading the file \"" << file << "\"." << endl;
}
printNotifications(fileInfo, "Parsing notifications:");
printNotifications(fileInfo, "Parsing notifications:", verboseArg.isPresent());
cout << endl;
}
}
void setTagInfo(const StringVector &parameterValues, const Argument &filesArg, const Argument &removeOtherFieldsArg,
const Argument &treatUnknownFilesAsMp3FilesArg, const Argument &id3v1UsageArg, const Argument &id3v2UsageArg,
const Argument &mergeMultipleSuccessiveTagsArg, const Argument &id3v2VersionArg, const Argument &encodingArg)
const Argument &mergeMultipleSuccessiveTagsArg, const Argument &id3v2VersionArg, const Argument &encodingArg,
const Argument &verboseArg)
{
CMD_UTILS_START_CONSOLE;
if(!filesArg.valueCount()) {
@ -710,12 +731,12 @@ void setTagInfo(const StringVector &parameterValues, const Argument &filesArg, c
} catch(ApplicationUtilities::Failure &) {
cout << "Error: A parsing failure occured when reading/writing the file \"" << file << "\"." << endl;
}
printNotifications(fileInfo, "Notifications:");
printNotifications(fileInfo, "Notifications:", verboseArg.isPresent());
++fileIndex;
}
}
void extractField(const StringVector &parameterValues, const Argument &inputFileArg, const Argument &outputFileArg)
void extractField(const StringVector &parameterValues, const Argument &inputFileArg, const Argument &outputFileArg, const Argument &verboseArg)
{
CMD_UTILS_START_CONSOLE;
FieldDenotation fields[knownFieldArraySize];
@ -773,7 +794,7 @@ void extractField(const StringVector &parameterValues, const Argument &inputFile
} catch(ApplicationUtilities::Failure &) {
cout << "Error: A parsing failure occured when reading the file \"" << inputFileArg.values().front() << "\"." << endl;
}
printNotifications(inputFileInfo, "Parsing notifications:");
printNotifications(inputFileInfo, "Parsing notifications:", verboseArg.isPresent());
}
}

View File

@ -15,11 +15,11 @@ class Argument;
namespace Cli {
void printFieldNames(const ApplicationUtilities::StringVector &parameterValues);
void displayFileInfo(const ApplicationUtilities::StringVector &, const ApplicationUtilities::Argument &filesArg);
void displayFileInfo(const ApplicationUtilities::StringVector &, const ApplicationUtilities::Argument &filesArg, const ApplicationUtilities::Argument &verboseArg);
void generateFileInfo(const ApplicationUtilities::StringVector &parameterValues, const ApplicationUtilities::Argument &inputFileArg, const ApplicationUtilities::Argument &outputFileArg, const ApplicationUtilities::Argument &validateArg);
void displayTagInfo(const ApplicationUtilities::StringVector &parameterValues, const ApplicationUtilities::Argument &filesArg);
void setTagInfo(const ApplicationUtilities::StringVector &parameterValues, const ApplicationUtilities::Argument &filesArg, const ApplicationUtilities::Argument &removeOtherFieldsArg, const ApplicationUtilities::Argument &treatUnknownFilesAsMp3FilesArg, const ApplicationUtilities::Argument &id3v1UsageArg, const ApplicationUtilities::Argument &id3v2UsageArg, const ApplicationUtilities::Argument &mergeMultipleSuccessiveTagsArg, const ApplicationUtilities::Argument &id3v2VersionArg, const ApplicationUtilities::Argument &encodingArg);
void extractField(const ApplicationUtilities::StringVector &parameterValues, const ApplicationUtilities::Argument &inputFileArg, const ApplicationUtilities::Argument &outputFileArg);
void displayTagInfo(const ApplicationUtilities::StringVector &parameterValues, const ApplicationUtilities::Argument &filesArg, const ApplicationUtilities::Argument &verboseArg);
void setTagInfo(const ApplicationUtilities::StringVector &parameterValues, const ApplicationUtilities::Argument &filesArg, const ApplicationUtilities::Argument &removeOtherFieldsArg, const ApplicationUtilities::Argument &treatUnknownFilesAsMp3FilesArg, const ApplicationUtilities::Argument &id3v1UsageArg, const ApplicationUtilities::Argument &id3v2UsageArg, const ApplicationUtilities::Argument &mergeMultipleSuccessiveTagsArg, const ApplicationUtilities::Argument &id3v2VersionArg, const ApplicationUtilities::Argument &encodingArg, const ApplicationUtilities::Argument &verboseArg);
void extractField(const ApplicationUtilities::StringVector &parameterValues, const ApplicationUtilities::Argument &inputFileArg, const ApplicationUtilities::Argument &outputFileArg, const ApplicationUtilities::Argument &verboseArg);
void removeBackupFiles(const ApplicationUtilities::StringVector &parameterValues, const ApplicationUtilities::Argument &recursiveArg);
}