コード例 #1
0
 virtual void run(void)
 {
     threadRegister("Reconnect");
     if (gCoreContext->GetMasterHostPrefix().isEmpty())
         gCoreContext->dispatch(MythEvent(QString("RECONNECT_FAILURE")));
     else
         gCoreContext->dispatch(MythEvent(QString("RECONNECT_SUCCESS")));
     threadDeregister();
 }
コード例 #2
0
ファイル: housekeeper.cpp プロジェクト: paradoxbound/mythtv
QDateTime HouseKeeperTask::UpdateLastRun(QDateTime last)
{
    if (m_scope != kHKInst)
    {
        MSqlQuery query(MSqlQuery::InitCon());
        if (!query.isConnected())
            return last;

        if (m_lastRun == MythDate::fromTime_t(0))
        {
            // not previously set, perform insert

            if (m_scope == kHKGlobal)
                query.prepare("INSERT INTO housekeeping (tag, lastrun)"
                              "     VALUES (:TAG, :TIME)");
            else
                query.prepare("INSERT INTO housekeeping"
                              "            ( tag,  hostname, lastrun)"
                              "     VALUES (:TAG, :HOST,    :TIME)");
        }
        else
        {
            // previously set, perform update

            if (m_scope == kHKGlobal)
                query.prepare("UPDATE housekeeping SET lastrun=:TIME"
                              " WHERE tag = :TAG"
                              "   AND hostname IS NULL");
            else
                query.prepare("UPDATE housekeeping SET lastrun=:TIME"
                              " WHERE tag = :TAG"
                              "   AND hostname = :HOST");
        }

        if (m_scope == kHKGlobal)
            LOG(VB_GENERAL, LOG_DEBUG,
                QString("Updating global run time for %1").arg(m_dbTag));
        else
            LOG(VB_GENERAL, LOG_DEBUG,
                QString("Updating local run time for %1").arg(m_dbTag));

        if (m_scope == kHKLocal)
            query.bindValue(":HOST", gCoreContext->GetHostName());
        query.bindValue(":TAG", m_dbTag);
        query.bindValue(":TIME", MythDate::as_utc(last));

        if (!query.exec())
            MythDB::DBError("HouseKeeperTask::updateLastRun", query);
    }

    m_lastRun = last;
    m_confirm = false;

    QString msg = QString("HOUSE_KEEPER_RUNNING %1 %2 %3")
                  .arg(gCoreContext->GetHostName()).arg(m_dbTag)
                  .arg(MythDate::toString(last, MythDate::ISODate));
    gCoreContext->SendEvent(MythEvent(msg));

    return last;
}
コード例 #3
0
void AlarmNotifyThread::run()
{
    RunProlog();

    while (!m_stop)
    {
        // get the alarm status for all monitors
        if (ZMClient::get()->connected() && ZMClient::get()->updateAlarmStates())
        {
            // at least one monitor changed state
            for (int x = 0; x < ZMClient::get()->getMonitorCount(); x++)
            {
                Monitor *mon = ZMClient::get()->getMonitorAt(x);

                if (mon->previousState != mon->state && (mon->state == ALARM || (mon->state == ALERT && mon->previousState != ALARM)))
                {
                    // have notifications been turned on for this monitor?
                    if (mon->showNotifications)
                    {
                        // we can't show a popup from the AlarmNotifyThread so send
                        // a message to ZMClient to do it for us
                        gCoreContext->dispatch(MythEvent(QString("ZONEMINDER_NOTIFICATION %1").arg(mon->id)));
                    }
                }
            }
        }

        usleep(999999);
    }

    RunEpilog();
}
コード例 #4
0
ファイル: imagehandlers.cpp プロジェクト: jshattoc/mythtv
/*!
 \brief Deletes images/dirs
 \details Removes images/dirs from Photographs storage group and image database.
 Dirs will only be deleted if empty. Synchronises thumbnail cache and broadcasts
 a 'db changed' event. Only fails if nothing is deleted.
 \param fileIds Csv list of dir/file ids
 \return QStringList Error message or "OK"
*/
QStringList ImageHandler::HandleDelete(QString fileIds)
{
    // Get subtree of files
    ImageDbWriter db;
    ImageList images, dirs;
    db.ReadDbTree(images, dirs, fileIds.split(","));

    // Remove files from filesystem first
    ImageSg::getInstance()->RemoveFiles(images);
    // ... then dirs, which should now be empty
    ImageSg::getInstance()->RemoveFiles(dirs);

    // Fail if nothing deleted
    if (images.isEmpty() && dirs.isEmpty())
        return QStringList("ERROR") << "Delete failed";

    // Update Db
    db.RemoveFromDB(images + dirs);

    // Clean up thumbnails & update clients
    // Thumb generator now owns the image objects
    QStringList mesg = ImageThumb::getInstance()->DeleteThumbs(images, dirs);

    // Notify clients of deleted ids, images, thumbs
    gCoreContext->SendEvent(MythEvent("IMAGE_DB_CHANGED", mesg));

    return QStringList("OK");
}
コード例 #5
0
ファイル: ratingsettings.cpp プロジェクト: Olti/mythtv
void RatingSettings::slotSave(void)
{
    gCoreContext->SaveSetting("IntelliRatingWeight", m_ratingWeight->GetValue());
    gCoreContext->SaveSetting("IntelliPlayCountWeight", m_playCountWeight->GetValue());
    gCoreContext->SaveSetting("IntelliLastPlayWeight", m_lastPlayWeight->GetValue());
    gCoreContext->SaveSetting("IntelliRandomWeight", m_randomWeight->GetValue());

    gCoreContext->dispatch(MythEvent(QString("MUSIC_SETTINGS_CHANGED RATING_SETTINGS")));

    Close();
}
コード例 #6
0
ファイル: remoteutil.cpp プロジェクト: microe/mythtv
void RemoteSendMessage(const QString &message)
{
    if (gCoreContext->IsBackend())
    {
        gCoreContext->dispatch(MythEvent(message));
        return;
    }

    QStringList strlist( "MESSAGE" );
    strlist << message;

    gCoreContext->SendReceiveStringList(strlist);
}
コード例 #7
0
ファイル: visualizationsettings.cpp プロジェクト: Olti/mythtv
void VisualizationSettings::slotSave(void)
{
    int changeOnSongChange = (m_changeOnSongChange->GetCheckState() == MythUIStateType::Full) ? 1 : 0;
    gCoreContext->SaveSetting("VisualCycleOnSongChange", changeOnSongChange);
    int randomizeorder = (m_randomizeOrder->GetCheckState() == MythUIStateType::Full) ? 1 : 0;
    gCoreContext->SaveSetting("VisualRandomize", randomizeorder);

    gCoreContext->SaveSetting("VisualScaleWidth", m_scaleWidth->GetIntValue());
    gCoreContext->SaveSetting("VisualScaleHeight", m_scaleHeight->GetIntValue());

    gCoreContext->dispatch(MythEvent(QString("MUSIC_SETTINGS_CHANGED VISUALIZATION_SETTINGS")));

    Close();
}
コード例 #8
0
ファイル: imagescanner.cpp プロジェクト: sde1aney/mythtv
/*!
 \brief Notify listeners of mode & progress
 \param mode Mode to broadcast
*/
void ImageScanThread::BroadcastStatus(QString mode)
{
    QStringList status;

    { // Release lock before sending message
        QMutexLocker locker(&m_mutexProgress);

        status << mode
               << QString::number(m_progressCount)
               << QString::number(m_progressTotalCount);
    }

    MythEvent me = MythEvent("IMAGE_SCAN_STATUS", status);
    gCoreContext->SendEvent(me);
}
コード例 #9
0
ファイル: imagehandlers.cpp プロジェクト: jshattoc/mythtv
/*!
 \brief Change name of an image/dir
 \details Renames image/dir in Photographs storage group, synchronises image database
 and thumbnail cache and notifies clients. A new thumbnail will be generated by next client
 request.
 \param id File/dir id
 \param newBase New filename
 \return QStringList Error message or "OK"
*/
QStringList ImageHandler::HandleRename(QString id, QString newBase)
{
    // Sanity check new name
    if (newBase.isEmpty() || newBase.contains("/") || newBase.contains("\\"))
        return QStringList("ERROR") << "Invalid name";

    // Find image in DB
    ImageDbWriter db;
    ImageList images, dirs;
    db.ReadDbItemsById(images, id);

    // Either single id not found or multiple comma-delimited ids received
    if (images.size() != 1)
    {
        LOG(VB_FILE, LOG_NOTICE,
            QString("Image: Image %1 not found in Db").arg(id));
        qDeleteAll(images);
        return QStringList("ERROR") << "Unknown File";
    }

    // Get filepath for solitary image
    ImageItem *im = images[0];
    QString absFilename = ImageSg::getInstance()->GetFilePath(im);

    if (absFilename.isEmpty())
    {
        delete im;
        return QStringList("ERROR") << "File not found";
    }

    // Rename file
    QFileInfo info = QFileInfo(absFilename);
    QDir dir = info.absoluteDir();
    QString newName = im->IsDirectory()
            ? newBase : QString("%1.%2").arg(newBase, info.suffix());

    if (!dir.rename(im->m_name, newName))
    {
        LOG(VB_FILE, LOG_ERR, QString("Image: Rename of %1 -> %2 failed")
            .arg(im->m_name, newName));
        delete im;
        return QStringList("ERROR") << "Rename failed";
    }

    LOG(VB_FILE, LOG_DEBUG, QString("Image: Renamed %1 -> %2")
        .arg(im->m_fileName, newName));

    ImageList dummy;

    if (im->IsDirectory())
    {
        // Cleanup thumbdir/thumbnails
        // Thumb generator now owns the image object
        QStringList mesg = ImageThumb::getInstance()->DeleteThumbs(dummy, images);

        // Notify clients of deleted ids, images, thumbs
        gCoreContext->SendEvent(MythEvent("IMAGE_DB_CHANGED", mesg));

        // Dir name change affects path of all sub-dirs & files and their thumbs
        QStringList scan;
        scan << "IMAGE_SCAN" << "START";
        return ImageScan::getInstance()->HandleScanRequest(scan);
    }

    // Retain old image for cleanup
    ImageItem *newIm = new ImageItem(*im);

    // Update db
    newIm->m_name = newName;
    newIm->m_fileName = QDir::cleanPath(QDir(newIm->m_path).filePath(newName));
    db.UpdateDbFile(newIm);
    delete newIm;

    // Clean up thumbnail
    // Thumb generator now owns the images objects
    QStringList mesg = ImageThumb::getInstance()->DeleteThumbs(images, dummy);
    // Item is modified, not deleted
    mesg.swap(0,1);

    // New thumbnail will be created by client request

    // Notify clients of changed image & thumbnail
    gCoreContext->SendEvent(MythEvent("IMAGE_DB_CHANGED", mesg));

    return QStringList("OK");
}