MythTV  master
Enumerations | Functions
mythmiscutil.cpp File Reference
#include <sys/stat.h>
#include "mythmiscutil.h"
#include <array>
#include <cerrno>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sched.h>
#include "compat.h"
#include <QReadWriteLock>
#include <QNetworkProxy>
#include <QStringList>
#include <QDataStream>
#include <QUdpSocket>
#include <QFileInfo>
#include <QFile>
#include <QDir>
#include <QUrl>
#include <QHostAddress>
#include <QRegularExpression>
#include <QRegularExpressionMatchIterator>
#include "mythcorecontext.h"
#include "exitcodes.h"
#include "mythlogging.h"
#include "mythsocket.h"
#include "mythcoreutil.h"
#include "mythsystemlegacy.h"
#include "mythconfig.h"
Include dependency graph for mythmiscutil.cpp:

Go to the source code of this file.

Enumerations

enum  states {
  START, INTEXT, INSQUOTE, INDQUOTE,
  ESCTEXT, ESCSQUOTE, ESCDQUOTE
}
 

Functions

bool getUptime (std::chrono::seconds &uptime)
 
bool getMemStats (int &totalMB, int &freeMB, int &totalVM, int &freeVM)
 Returns memory statistics in megabytes. More...
 
loadArray getLoadAvgs (void)
 Returns the system load averages. More...
 
bool hasUtf8 (const char *str)
 Guess whether a string is UTF-8. More...
 
bool ping (const QString &host, std::chrono::milliseconds timeout)
 Can we ping host within timeout seconds? More...
 
bool telnet (const QString &host, int port)
 Can we talk to port on host? More...
 
long long copy (QFile &dst, QFile &src, uint block_size)
 Copies src file to dst file. More...
 
QString createTempFile (QString name_template, bool dir)
 
bool makeFileAccessible (const QString &filename)
 
QString getResponse (const QString &query, const QString &def)
 In an interactive shell, prompt the user to input a string. More...
 
int intResponse (const QString &query, int def)
 In an interactive shell, prompt the user to input a number. More...
 
QString getSymlinkTarget (const QString &start_file, QStringList *intermediaries, unsigned maxLinks)
 
bool IsMACAddress (const QString &MAC)
 
QString FileHash (const QString &filename)
 
bool WakeOnLAN (const QString &MAC)
 
bool MythWakeup (const QString &wakeUpCommand, uint flags, std::chrono::seconds timeout)
 
bool IsPulseAudioRunning (void)
 Is A/V Sync destruction daemon is running on this host? More...
 
bool myth_nice (int val)
 
void myth_yield (void)
 
bool myth_ioprio (int)
 Allows setting the I/O priority of the current process/thread. More...
 
bool MythRemoveDirectory (QDir &aDir)
 
void setHttpProxy (void)
 Get network proxy settings from OS, and use for [Q]Http[Comms]. More...
 
void wrapList (QStringList &list, int width)
 
QString xml_indent (uint level)
 
int naturalCompare (const QString &_a, const QString &_b, Qt::CaseSensitivity caseSensitivity)
 
QString MythFormatTime (std::chrono::milliseconds msecs, const QString &fmt)
 Format a milliseconds time value. More...
 
QStringList MythSplitCommandString (const QString &line)
 

Enumeration Type Documentation

◆ states

enum states
Enumerator
START 
INTEXT 
INSQUOTE 
INDQUOTE 
ESCTEXT 
ESCSQUOTE 
ESCDQUOTE 

Definition at line 1246 of file mythmiscutil.cpp.

Function Documentation

◆ getUptime()

bool getUptime ( std::chrono::seconds &  uptime)

◆ getMemStats()

getMemStats ( int &  totalMB,
int &  freeMB,
int &  totalVM,
int &  freeVM 
)

Returns memory statistics in megabytes.

Todo:
Memory Statistics are not supported (by MythTV) on NT or DOS.
Returns
true if it succeeds, false otherwise.

Definition at line 114 of file mythmiscutil.cpp.

Referenced by StatusBox::doMachineStatus(), BaseRequestHandler::HandleQueryMemStats(), MainServer::HandleQueryMemStats(), and NetworkControl::processQuery().

◆ getLoadAvgs()

getLoadAvgs ( void  )

Returns the system load averages.

Returns
A std::array<double,3> containing the system load averages. If the system call fails or is unsupported, returns array containing all -1.

Definition at line 181 of file mythmiscutil.cpp.

Referenced by StatusBox::doMachineStatus(), HttpStatus::FillStatusXML(), BaseRequestHandler::HandleQueryLoad(), MainServer::HandleQueryLoad(), and NetworkControl::processQuery().

◆ hasUtf8()

bool hasUtf8 ( const char *  str)

Guess whether a string is UTF-8.

Note
This does not attempt to validate the whole string. It just checks if it has any UTF-8 sequences in it.

Definition at line 198 of file mythmiscutil.cpp.

◆ ping()

bool ping ( const QString &  host,
std::chrono::milliseconds  timeout 
)

Can we ping host within timeout seconds?

Different operating systems use different parameters to specify a timeout to the ping command. FreeBSD and derivatives use '-t'; Linux and derivatives use '-w'. Using the right parameter also eliminates the need for the old behavior of falling back to pinging the localhost with and without a timeout, in order to characterize whether the right parameter was used in the first place.

Note
If ping fails to timeout on another supported platform, determine what parameter that platform's ping requires to specify the timeout and add another case to the #ifdef statement.

Definition at line 250 of file mythmiscutil.cpp.

Referenced by CardUtil::IsVBoxPresent(), and setHttpProxy().

◆ telnet()

bool telnet ( const QString &  host,
int  port 
)

Can we talk to port on host?

Definition at line 283 of file mythmiscutil.cpp.

Referenced by setHttpProxy().

◆ copy()

copy ( QFile &  dst,
QFile &  src,
uint  block_size 
)

Copies src file to dst file.

If the dst file is open, it must be open for writing. If the src file is open, if must be open for reading.

The files will be in the same open or close state after this function runs as they were prior to this function being called.

This function does not care if the files are actual files. For compatibility with pipes and socket streams the file location will not be reset to 0 at the end of this function. If the function is successful the file pointers will be at the end of the copied data.

Parameters
dstDestination QFile
srcSource QFile
block_sizeOptional block size in bytes, must be at least 1024, otherwise the default of 16 KB will be used.
Returns
bytes copied on success, -1 on failure.

Definition at line 314 of file mythmiscutil.cpp.

Referenced by MythNVDECInterop::Acquire(), TeletextReader::AddPageHeader(), TeletextReader::AddTeletextData(), RTjpeg::bcomp(), GalleryThumbView::Copy(), ImportMusicDialog::copyFile(), mythburn::copyRemote(), ProgramAssociationTable::CreateBlank(), ProgramMapTable::CreateBlank(), MythRAOPConnection::decodeAudioPacket(), mythburn::doProcessFile(), mythburn::doProcessFileProjectX(), MythRenderOpenGL::DrawBitmap(), dvb_decode_text(), MythDVDBuffer::GetChapterTimes(), Jitterometer::GetCPUStat(), mythburn::getFileInformation(), ProgramInfoCache::GetOrdered(), MythVAAPIInteropDRM::GetReferenceFrames(), MythVTBSurfaceInterop::GetReferenceFrames(), nv_python_libs.common.common_api.Common::getUrlData(), HLSStream::HLSStream(), TSPacket::InitPayload(), ImportRecorder::Open(), mythburn::preProcessFile(), ChannelImporter::Process(), MythRAOPConnection::ProcessRequest(), AudioOutputNULL::readOutputData(), MythDVDBuffer::SafeRead(), DiSEqCDevTree::SendCommand(), nv_python_libs.xsltfunctions.traileraddicts_api.xpathFunctions::traileraddictsLinkGenerationMovie(), ThumbFinder::updateThumb(), and NuppelVideoRecorder::WriteFileHeader().

◆ createTempFile()

QString createTempFile ( QString  name_template,
bool  dir 
)

Definition at line 374 of file mythmiscutil.cpp.

Referenced by DBUtil::CreateTemporaryDBConf(), and FillData::GrabData().

◆ makeFileAccessible()

bool makeFileAccessible ( const QString &  filename)

Definition at line 446 of file mythmiscutil.cpp.

Referenced by Content::GetPreviewImage(), and PreviewGenerator::SavePreview().

◆ getResponse()

QString getResponse ( const QString &  query,
const QString &  def 
)

In an interactive shell, prompt the user to input a string.

Definition at line 461 of file mythmiscutil.cpp.

Referenced by intResponse(), ChannelData::promptForChannelUpdates(), MythContextPrivate::PromptForDatabaseParams(), and SchemaUpgradeWizard::PromptForUpgrade().

◆ intResponse()

int intResponse ( const QString &  query,
int  def 
)

In an interactive shell, prompt the user to input a number.

Definition at line 491 of file mythmiscutil.cpp.

Referenced by MythContextPrivate::PromptForDatabaseParams().

◆ getSymlinkTarget()

QString getSymlinkTarget ( const QString &  start_file,
QStringList *  intermediaries,
unsigned  maxLinks 
)

◆ IsMACAddress()

bool IsMACAddress ( const QString &  MAC)

Definition at line 554 of file mythmiscutil.cpp.

Referenced by MythWakeup(), and Scheduler::WakeUpSlave().

◆ FileHash()

QString FileHash ( const QString &  filename)

◆ WakeOnLAN()

bool WakeOnLAN ( const QString &  MAC)

Definition at line 640 of file mythmiscutil.cpp.

Referenced by MythWakeup(), and Scheduler::WakeUpSlave().

◆ MythWakeup()

bool MythWakeup ( const QString &  wakeUpCommand,
uint  flags,
std::chrono::seconds  timeout 
)

◆ IsPulseAudioRunning()

bool IsPulseAudioRunning ( void  )

Is A/V Sync destruction daemon is running on this host?

Definition at line 689 of file mythmiscutil.cpp.

Referenced by AudioOutput::OpenAudio(), and PulseHandler::Suspend().

◆ myth_nice()

bool myth_nice ( int  val)

◆ myth_yield()

void myth_yield ( void  )

Definition at line 721 of file mythmiscutil.cpp.

◆ myth_ioprio()

bool myth_ioprio ( int  )

Allows setting the I/O priority of the current process/thread.

range -1..8, smaller is higher priority

As of November 14th, 2010 this only works on Linux when using the CFQ I/O Scheduler. The range is -1 to 8, with -1 being real-time priority 0 through 7 being standard best-time priorities and 8 being the idle priority. The deadline and noop I/O Schedulers will ignore this but are much less likely to starve video playback to feed the transcoder or flagger. (noop is only recommended for SSDs.)

Since a process needs to have elevated priviledges to use either the real-time or idle priority this will try priorities 0 or 7 respectively if -1 or 8 do not work. It will not report an error on these conditions as they will be the common case.

Only Linux on i386, ppc, x86_64 and ia64 are currently supported. This is a no-op on all other architectures and platforms.

Definition at line 809 of file mythmiscutil.cpp.

Referenced by JobQueue::DoTranscodeThread(), JobQueue::DoUserJobThread(), MythSystemLegacyUnix::Fork(), and main().

◆ MythRemoveDirectory()

bool MythRemoveDirectory ( QDir &  aDir)

◆ setHttpProxy()

void setHttpProxy ( void  )

Get network proxy settings from OS, and use for [Q]Http[Comms].

The HTTP_PROXY environment var. is parsed for values like; "proxy-host", "proxy-host:8080", "http://host:8080" and "http"//user:password@host:1080", and that is used for any Qt-based Http fetches. We also test connectivity here with ping and telnet, and warn if it fails.

If there is was no env. var, we use Qt to get proxy settings from the OS, and search through them for a proxy server we can connect to.

Definition at line 857 of file mythmiscutil.cpp.

Referenced by main().

◆ wrapList()

void wrapList ( QStringList &  list,
int  width 
)

◆ xml_indent()

QString xml_indent ( uint  level)

◆ naturalCompare()

int naturalCompare ( const QString &  _a,
const QString &  _b,
Qt::CaseSensitivity  caseSensitivity 
)

◆ MythFormatTime()

QString MythFormatTime ( std::chrono::milliseconds  msecs,
const QString &  fmt 
)

Format a milliseconds time value.

Convert a millisecond time value into a textual representation of the value.

Parameters
msecsThe time value in milliseconds. Since the type of this field is std::chrono::duration, any duration of a larger interval can be passed to this function and the compiler will convert it to milliseconds.
fmtA formatting string specifying how to output the time. See QTime::toString for the a definition fo valid formatting characters.

Definition at line 1238 of file mythmiscutil.cpp.

Referenced by CommBreakMap::AutoCommercialSkip(), DeleteMap::CreateTimeString(), CommBreakMap::DoSkipCommercials(), LyricsLine::formatTime(), ThumbFinder::frameToTime(), commDetector2::frameToTimestamp(), commDetector2::frameToTimestampms(), MusicCommon::getTimeString(), MythBDPlayer::GetTitleName(), TV::MenuItemDisplayPlayback(), AvFormatDecoder::OpenFile(), TV::ShowLCDDVDInfo(), MusicMetadata::toMap(), MythPlayerOverlayUI::UpdateSliderInfo(), MythBDBuffer::UpdateTitleInfo(), Ripper::updateTrackList(), and uptimeStr().

◆ MythSplitCommandString()

QStringList MythSplitCommandString ( const QString &  line)