Only load the newest version of an agent's inventory cache
This isn't entirely correct, but without a cross-platform way to map specifically the requesting viewer to a cache directory this is the least annoying thing we can do.
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
import datetime as dt
|
||||
|
||||
from hippolyzer.lib.base.helpers import get_mtime
|
||||
from hippolyzer.lib.client.inventory_manager import InventoryManager
|
||||
from hippolyzer.lib.client.state import BaseClientSession
|
||||
from hippolyzer.lib.proxy.viewer_settings import iter_viewer_cache_dirs
|
||||
@@ -6,7 +9,20 @@ from hippolyzer.lib.proxy.viewer_settings import iter_viewer_cache_dirs
|
||||
class ProxyInventoryManager(InventoryManager):
|
||||
def __init__(self, session: BaseClientSession):
|
||||
super().__init__(session)
|
||||
newest_cache = None
|
||||
newest_timestamp = dt.datetime(year=1970, month=1, day=1, tzinfo=dt.timezone.utc)
|
||||
# Look for the newest version of the cached inventory and use that.
|
||||
# Not foolproof, but close enough if we're not sure what viewer is being used.
|
||||
for cache_dir in iter_viewer_cache_dirs():
|
||||
inv_cache_path = cache_dir / (str(session.agent_id) + ".inv.llsd.gz")
|
||||
if inv_cache_path.exists():
|
||||
self.load_cache(inv_cache_path)
|
||||
mod = get_mtime(inv_cache_path)
|
||||
if not mod:
|
||||
continue
|
||||
mod_ts = dt.datetime.fromtimestamp(mod, dt.timezone.utc)
|
||||
if mod_ts <= newest_timestamp:
|
||||
continue
|
||||
newest_cache = inv_cache_path
|
||||
|
||||
if newest_cache:
|
||||
self.load_cache(newest_cache)
|
||||
|
||||
Reference in New Issue
Block a user