add verbose option
This commit is contained in:
parent
8c1d2eaf81
commit
17923f9b23
|
@ -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");
|
||||
|
|
|
@ -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 ¬ification : 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 ¬ification : notifications) {
|
||||
for(const auto ¬ification : 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 ¶meterValues, const Argument &filesArg)
|
||||
void displayTagInfo(const StringVector ¶meterValues, const Argument &filesArg, const Argument &verboseArg)
|
||||
{
|
||||
CMD_UTILS_START_CONSOLE;
|
||||
if(!filesArg.valueCount()) {
|
||||
|
@ -592,14 +612,15 @@ void displayTagInfo(const StringVector ¶meterValues, 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 ¶meterValues, 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 ¶meterValues, 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 ¶meterValues, const Argument &inputFileArg, const Argument &outputFileArg)
|
||||
void extractField(const StringVector ¶meterValues, const Argument &inputFileArg, const Argument &outputFileArg, const Argument &verboseArg)
|
||||
{
|
||||
CMD_UTILS_START_CONSOLE;
|
||||
FieldDenotation fields[knownFieldArraySize];
|
||||
|
@ -773,7 +794,7 @@ void extractField(const StringVector ¶meterValues, 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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -15,11 +15,11 @@ class Argument;
|
|||
namespace Cli {
|
||||
|
||||
void printFieldNames(const ApplicationUtilities::StringVector ¶meterValues);
|
||||
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 ¶meterValues, const ApplicationUtilities::Argument &inputFileArg, const ApplicationUtilities::Argument &outputFileArg, const ApplicationUtilities::Argument &validateArg);
|
||||
void displayTagInfo(const ApplicationUtilities::StringVector ¶meterValues, const ApplicationUtilities::Argument &filesArg);
|
||||
void setTagInfo(const ApplicationUtilities::StringVector ¶meterValues, 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 ¶meterValues, const ApplicationUtilities::Argument &inputFileArg, const ApplicationUtilities::Argument &outputFileArg);
|
||||
void displayTagInfo(const ApplicationUtilities::StringVector ¶meterValues, const ApplicationUtilities::Argument &filesArg, const ApplicationUtilities::Argument &verboseArg);
|
||||
void setTagInfo(const ApplicationUtilities::StringVector ¶meterValues, 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 ¶meterValues, const ApplicationUtilities::Argument &inputFileArg, const ApplicationUtilities::Argument &outputFileArg, const ApplicationUtilities::Argument &verboseArg);
|
||||
void removeBackupFiles(const ApplicationUtilities::StringVector ¶meterValues, const ApplicationUtilities::Argument &recursiveArg);
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue