diff options
author | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
---|---|---|
committer | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
commit | 420b91db29485df39fd6e724e782c449158811cb (patch) | |
tree | b471a94563af914d3ed3edd3e856d21cb1b69945 /indra/llcommon/lllivefile.cpp |
Print done when done.
Diffstat (limited to 'indra/llcommon/lllivefile.cpp')
-rw-r--r-- | indra/llcommon/lllivefile.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/indra/llcommon/lllivefile.cpp b/indra/llcommon/lllivefile.cpp new file mode 100644 index 0000000000..7dad6f82d8 --- /dev/null +++ b/indra/llcommon/lllivefile.cpp @@ -0,0 +1,74 @@ +/** + * @file lllivefile.cpp + * + * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "linden_common.h" + +#include "lllivefile.h" + + +LLLiveFile::LLLiveFile(const std::string &filename, const F32 refresh_period) : +mForceCheck(true), +mRefreshPeriod(refresh_period), +mFilename(filename), +mLastModTime(0), +mLastExists(false) +{ +} + + +LLLiveFile::~LLLiveFile() +{ +} + + +bool LLLiveFile::checkAndReload() +{ + if (!mForceCheck && mRefreshTimer.getElapsedTimeF32() < mRefreshPeriod) + { + // Skip the check if not enough time has elapsed and we're not + // forcing a check of the file + return false; + } + mForceCheck = false; + mRefreshTimer.reset(); + + // Stat the file to see if it exists and when it was last modified. + llstat stat_data; + int res = LLFile::stat(mFilename.c_str(), &stat_data); + + if (res) + { + // Couldn't stat the file, that means it doesn't exist or is + // broken somehow. Clear flags and return. + if (mLastExists) + { + loadFile(); // Load the file, even though it's missing to allow it to clear state. + mLastExists = false; + return true; + } + return false; + } + + // The file exists, decide if we want to load it. + if (mLastExists) + { + // The file existed last time, don't read it if it hasn't changed since + // last time. + if (stat_data.st_mtime <= mLastModTime) + { + return false; + } + } + + // We want to read the file. Update status info for the file. + mLastExists = true; + mLastModTime = stat_data.st_mtime; + + loadFile(); + return true; +} + |