Ticket #7731: delay_unlink_2.patch

File delay_unlink_2.patch, 6.3 KB (added by stichnot@…, 12 years ago)
  • programs/mythtranscode/main.cpp

     
    816816    return unlink(filename.toLocal8Bit().constData());
    817817}
    818818
     819void WaitToDelete(ProgramInfo *pginfo)
     820{
     821    QDateTime startOfWaiting = mythCurrentDateTime();
     822
     823    VERBOSE(VB_GENERAL,
     824            "Transcode: delete old file: "
     825            "waiting while program is in use.");
     826    bool inUse = true;
     827    MSqlQuery query(MSqlQuery::InitCon());
     828    while (inUse)
     829    {
     830        query.prepare("SELECT count(*) FROM inuseprograms "
     831                      "WHERE chanid = :CHANID "
     832                      "AND starttime = :STARTTIME "
     833                      "AND lastupdatetime < :LASTUPDATETIME "
     834                      "AND recusage = 'player' ;");
     835        query.bindValue(":CHANID", pginfo->chanid);
     836        query.bindValue(":STARTTIME", pginfo->recstartts);
     837        query.bindValue(":LASTUPDATETIME", startOfWaiting);
     838        if (!query.exec() || !query.next())
     839        {
     840            VERBOSE(VB_GENERAL,
     841                    "Transcode: delete old file: in-use query failed;");
     842            inUse = false;
     843        }
     844        else
     845        {
     846            inUse = (query.value(0).toUInt() != 0);
     847        }
     848
     849        if (inUse)
     850        {
     851            unsigned secondsToWait = 10;
     852            VERBOSE(VB_GENERAL,
     853                    QString("Transcode: program in use, "
     854                            "rechecking in %1 seconds.").arg(secondsToWait));
     855            sleep(secondsToWait);
     856        }
     857    }
     858    VERBOSE(VB_GENERAL, "Transcode: program is no longer in use.");
     859}
     860
    819861void CompleteJob(int jobID, ProgramInfo *pginfo, bool useCutlist, int &resultCode)
    820862{
    821863    int status = JobQueue::GetJobStatus(jobID);
     
    869911                    .arg(tmpfile).arg(newfile) + ENO);
    870912        }
    871913
     914        MSqlQuery query(MSqlQuery::InitCon());
     915
     916        if (useCutlist)
     917        {
     918            query.prepare("DELETE FROM recordedmarkup "
     919                          "WHERE chanid = :CHANID "
     920                          "AND starttime = :STARTTIME ");
     921            query.bindValue(":CHANID", pginfo->chanid);
     922            query.bindValue(":STARTTIME", pginfo->recstartts);
     923
     924            if (!query.exec())
     925                MythDB::DBError("Error in mythtranscode", query);
     926
     927            query.prepare("UPDATE recorded "
     928                          "SET cutlist = :CUTLIST, bookmark = :BOOKMARK, "
     929                          "watched = :WATCHED WHERE chanid = :CHANID "
     930                          "AND starttime = :STARTTIME ;");
     931            query.bindValue(":CUTLIST", "0");
     932            query.bindValue(":BOOKMARK", "0");
     933            query.bindValue(":WATCHED", "0");
     934            query.bindValue(":CHANID", pginfo->chanid);
     935            query.bindValue(":STARTTIME", pginfo->recstartts);
     936
     937            if (!query.exec())
     938                MythDB::DBError("Error in mythtranscode", query);
     939
     940            pginfo->SetCommFlagged(COMM_FLAG_NOT_FLAGGED);
     941        }
     942        else
     943        {
     944            query.prepare("DELETE FROM recordedmarkup "
     945                          "WHERE chanid = :CHANID "
     946                          "AND starttime = :STARTTIME "
     947                          "AND type not in ( :COMM_START, "
     948                          "    :COMM_END, :BOOKMARK, "
     949                          "    :CUTLIST_START, :CUTLIST_END) ;");
     950            query.bindValue(":CHANID", pginfo->chanid);
     951            query.bindValue(":STARTTIME", pginfo->recstartts);
     952            query.bindValue(":COMM_START", MARK_COMM_START);
     953            query.bindValue(":COMM_END", MARK_COMM_END);
     954            query.bindValue(":BOOKMARK", MARK_BOOKMARK);
     955            query.bindValue(":CUTLIST_START", MARK_CUT_START);
     956            query.bindValue(":CUTLIST_END", MARK_CUT_END);
     957
     958            if (!query.exec())
     959                MythDB::DBError("Error in mythtranscode", query);
     960        }
     961
    872962        if (!gContext->GetNumSetting("SaveTranscoding", 0))
    873963        {
     964            WaitToDelete(pginfo);
    874965            int err;
    875966            bool followLinks = gContext->GetNumSetting("DeletesFollowLinks", 0);
    876967
     
    9711062            }
    9721063        }
    9731064
    974         MSqlQuery query(MSqlQuery::InitCon());
    975 
    976         if (useCutlist)
    977         {
    978             query.prepare("DELETE FROM recordedmarkup "
    979                           "WHERE chanid = :CHANID "
    980                           "AND starttime = :STARTTIME ");
    981             query.bindValue(":CHANID", pginfo->chanid);
    982             query.bindValue(":STARTTIME", pginfo->recstartts);
    983 
    984             if (!query.exec())
    985                 MythDB::DBError("Error in mythtranscode", query);
    986 
    987             query.prepare("UPDATE recorded "
    988                           "SET cutlist = :CUTLIST, bookmark = :BOOKMARK, "
    989                           "watched = :WATCHED WHERE chanid = :CHANID "
    990                           "AND starttime = :STARTTIME ;");
    991             query.bindValue(":CUTLIST", "0");
    992             query.bindValue(":BOOKMARK", "0");
    993             query.bindValue(":WATCHED", "0");
    994             query.bindValue(":CHANID", pginfo->chanid);
    995             query.bindValue(":STARTTIME", pginfo->recstartts);
    996 
    997             if (!query.exec())
    998                 MythDB::DBError("Error in mythtranscode", query);
    999 
    1000             pginfo->SetCommFlagged(COMM_FLAG_NOT_FLAGGED);
    1001         }
    1002         else
    1003         {
    1004             query.prepare("DELETE FROM recordedmarkup "
    1005                           "WHERE chanid = :CHANID "
    1006                           "AND starttime = :STARTTIME "
    1007                           "AND type not in ( :COMM_START, "
    1008                           "    :COMM_END, :BOOKMARK, "
    1009                           "    :CUTLIST_START, :CUTLIST_END) ;");
    1010             query.bindValue(":CHANID", pginfo->chanid);
    1011             query.bindValue(":STARTTIME", pginfo->recstartts);
    1012             query.bindValue(":COMM_START", MARK_COMM_START);
    1013             query.bindValue(":COMM_END", MARK_COMM_END);
    1014             query.bindValue(":BOOKMARK", MARK_BOOKMARK);
    1015             query.bindValue(":CUTLIST_START", MARK_CUT_START);
    1016             query.bindValue(":CUTLIST_END", MARK_CUT_END);
    1017 
    1018             if (!query.exec())
    1019                 MythDB::DBError("Error in mythtranscode", query);
    1020         }
    1021 
    10221065        JobQueue::ChangeJobStatus(jobID, JOB_FINISHED);
    10231066
    10241067    } else {