/*************************************************************************** * Copyright (C) 2010-2021 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include #include #include #include #include #include "statusoption.h" void StatusOption::registerOprions() { registerOption(STATUS, "--status", tr("Print playback status")); registerOption(NOW_PLAYING, "--nowplaying", tr("Print formatted track name (example: qmmp --nowplaying \"%t - %a\")"), QStringList() << "fmt"); registerOption(NOW_PLAYING_SYNTAX, "--nowplaying-syntax", tr("Print --nowplaying syntax")); setOptionFlags(NOW_PLAYING_SYNTAX, NoStart); } QString StatusOption::shortName() const { return QLatin1String("StatusOption"); } QString StatusOption::translation() const { return QLatin1String(":/status_plugin_"); } QString StatusOption::executeCommand(int id, const QStringList &args) { SoundCore *core = SoundCore::instance(); QString out; switch (id) { case STATUS: { QMap state_names; state_names.insert(Qmmp::Playing, "[playing]"); state_names.insert(Qmmp::Paused, "[paused]"); state_names.insert(Qmmp::Stopped, "[stopped]"); state_names.insert(Qmmp::Buffering, "[buffering]"); state_names.insert(Qmmp::NormalError, "[error]"); state_names.insert(Qmmp::FatalError, "[error]"); out += state_names[core->state()]; if(core->state() == Qmmp::Playing || core->state() == Qmmp::Paused) { out += " "; out += genProgressBar() + "\n"; out += "ARTIST = %p\n"; out += "ALBUMARTIST = %aa\n"; out += "TITLE = %t\n"; out += "ALBUM = %a\n"; out += "COMMENT = %c\n"; out += "GENRE = %g\n"; out += "YEAR = %y\n"; out += "TRACK = %n\n"; out += "FILE = %f"; MetaDataFormatter formatter(out); out = formatter.format(core->trackInfo()); } out += "\n"; } break; case NOW_PLAYING: { QString t = args.join(" "); MetaDataFormatter formatter(t); out = formatter.format(core->trackInfo()); out += "\n"; } break; case NOW_PLAYING_SYNTAX: { out += tr("Syntax:") + "\n"; out += tr("%p - artist") + "\n"; out += tr("%a - album") + "\n"; out += tr("%aa - album artist") + "\n"; out += tr("%t - title") + "\n"; out += tr("%n - track") + "\n"; out += tr("%NN - 2-digit track") + "\n"; out += tr("%g - genre") + "\n"; out += tr("%c - comment") + "\n"; out += tr("%C - composer") + "\n"; out += tr("%D - disc number") + "\n"; out += tr("%f - file name") + "\n"; out += tr("%F - full path") + "\n"; out += tr("%y - year") + "\n"; out += tr("%l - duration") + "\n"; out += tr("%{bitrate} - bitrate") + "\n"; out += tr("%{samplerate} - sample rate") + "\n"; out += tr("%{channels} - number of channels") + "\n"; out += tr("%{samplesize} - bits per sample") + "\n"; out += tr("%{format} - format name") + "\n"; out += tr("%{decoder} - decoder name") + "\n"; out += tr("%{filesize} - file size") + "\n"; out += tr("%if(A&B&C,D,E) - condition") + "\n"; out += tr("%dir(n) - directory name located on n levels above"); } break; default: ; } return out; } QString StatusOption::genProgressBar() { SoundCore *core = SoundCore::instance(); QString totalTime = QString("%1:%2").arg(core->duration()/60000) .arg(core->duration()%60000/1000, 2, 10, QChar('0')); QString currentTime = QString("%1:%2").arg(core->elapsed()/60000) .arg(core->elapsed()%60000/1000, 2, 10, QChar('0')); QString out = currentTime; if(core->duration()) { out.clear(); int played_count = 22 * (double)core->elapsed()/core->duration(); for(int i = 0; i < played_count; ++i) out += "="; out += "#"; for(int i = played_count; i < 22; ++i) out += "-"; out += " " + currentTime + "/" +totalTime; } return out; }