summaryrefslogtreecommitdiff
path: root/indra/llcommon/lllivefile.cpp
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/llcommon/lllivefile.cpp
Print done when done.
Diffstat (limited to 'indra/llcommon/lllivefile.cpp')
-rw-r--r--indra/llcommon/lllivefile.cpp74
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;
+}
+