<feed xmlns='http://www.w3.org/2005/Atom'>
<title>viewer.git/indra/newview/llconversationlog.cpp, branch 26.5</title>
<subtitle>Megapahit's fork of the Second Life viewer.
</subtitle>
<id>https://megapahit.org/viewer.git/atom?h=26.5</id>
<link rel='self' href='https://megapahit.org/viewer.git/atom?h=26.5'/>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/'/>
<updated>2026-08-31T18:34:46Z</updated>
<entry>
<title>Keep mobile conversations current in Conversation Log</title>
<updated>2026-08-31T18:34:46Z</updated>
<author>
<name>pepper</name>
<email>3782201+rohvani@users.noreply.github.com</email>
</author>
<published>2026-08-31T18:34:46Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=229c4204b51ebb29c76006fd536bd48cacfce318'/>
<id>urn:sha1:229c4204b51ebb29c76006fd536bd48cacfce318</id>
<content type='text'>
Publish Conversation Log metadata after both replace and append ChatService archive changes. Upsert existing P2P rows only from newer archive timestamps so mobile conversations become discoverable and dates refresh before a live IM session opens, while preserving retained metadata and consent.

Notify and persist only real timestamp advances, leaving equal or older history as a no-op. Add coverage for exact archive times, monotonic updates, observer behavior, metadata retention, deduplication, and disabled logging.

Validated with the Release secondlife-bin build, the LLConversationLog test suite (3 tests), and the LLChatServiceHistoryCore test suite (13 tests).
</content>
</entry>
<entry>
<title>Publish ChatService history in Conversation Log</title>
<updated>2026-08-26T16:20:58Z</updated>
<author>
<name>pepper</name>
<email>3782201+rohvani@users.noreply.github.com</email>
</author>
<published>2026-08-26T16:20:58Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=20d6cc9911d4392196b6c267af3d70eb73a1317f'/>
<id>urn:sha1:20d6cc9911d4392196b6c267af3d70eb73a1317f</id>
<content type='text'>
Create P2P conversation metadata when the first durable service archive is published, so history downloaded on a new device is discoverable without a live IM session. Preserve Conversation Log consent, deduplicate existing rows, and persist through the existing observer contract.

Add focused coverage for cross-device discovery, duplicate publication, retained metadata, and disabled logging.

Validated with the Release secondlife-bin build, the LLConversationLog test suite (2 tests), and the LLChatServiceHistoryCore test suite (13 tests).
</content>
</entry>
<entry>
<title>Improve ChatService history readability</title>
<updated>2026-08-13T17:54:17Z</updated>
<author>
<name>pepper</name>
<email>3782201+rohvani@users.noreply.github.com</email>
</author>
<published>2026-08-13T17:40:10Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=e3c57f57c7585c1cf99d4b86fd70b06b1ce2b58d'/>
<id>urn:sha1:e3c57f57c7585c1cf99d4b86fd70b06b1ce2b58d</id>
<content type='text'>
Add phase-oriented comments around history synchronization, archive validation, asynchronous view updates, and transcript deletion.

Expand dense control flow and restore readable spacing throughout the ChatService implementation and its integration points without changing behavior. Restore unrelated end-of-file formatting so it drops out of the overall PR diff.
</content>
</entry>
<entry>
<title>Implement ChatService persistent history stitching</title>
<updated>2026-08-13T16:17:40Z</updated>
<author>
<name>pepper</name>
<email>3782201+rohvani@users.noreply.github.com</email>
</author>
<published>2026-08-12T01:02:47Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=473d6c2558c72a8dbbcf591e387c080baf2f531a'/>
<id>urn:sha1:473d6c2558c72a8dbbcf591e387c080baf2f531a</id>
<content type='text'>
Synchronize eligible direct IM conversations through the ChatService
capabilities into durable per-resident CSV archives. Validate deterministic
conversation IDs, UUIDv1 ordering, complete discovery and history payloads,
and the account-wide deletion cutoff before a bounded pass can append or
rebuild an archive.

Run discovery, pacing, retries, metadata resolution, and participant paging
through one account-scoped manager. Immediately prioritize new Direct
sessions, P2P previews, and accepted inbound IMs while honoring transcript
consent, authoritative mute state, capability changes, and fail-closed
account state.

Stitch ordinary and monthly legacy plaintext before the oldest accumulated
service row, keep normal plaintext logging active, and merge the first
validated service page in memory while older backfill continues. Drive
Direct and Preview reloads and their nonmodal loading status from shared
resident snapshots.

Maintain the human-readable chat_service_index.csv manifest and protect
archive updates with strict validation, torn-tail repair, corrupt-file
preservation, private file stamps, and atomic replacement. Extend Delete
Transcripts with a durable TimeUUID boundary and an asynchronous sweep that
suppresses every historical source until cleanup completes safely.

Add core coverage for deterministic IDs, UUIDv1 and timestamp validation,
strict page and list contracts, RFC 4180 CSV quoting, archive scanning, torn
tails, and corrupt records.
</content>
</entry>
<entry>
<title>Address feedback from copilot</title>
<updated>2026-01-07T00:15:43Z</updated>
<author>
<name>Rye</name>
<email>rye@alchemyviewer.org</email>
</author>
<published>2026-01-05T20:01:23Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=9873abfb94f0d9cbc6df60fef9df622ef51355ec'/>
<id>urn:sha1:9873abfb94f0d9cbc6df60fef9df622ef51355ec</id>
<content type='text'>
Signed-off-by: Rye &lt;rye@alchemyviewer.org&gt;
</content>
</entry>
<entry>
<title>Clean up LLFile and LLFilesystem operations to reduce temporaries allocations and utf8-&gt;utf16 conversions</title>
<updated>2026-01-07T00:15:43Z</updated>
<author>
<name>Rye</name>
<email>rye@alchemyviewer.org</email>
</author>
<published>2025-12-30T16:39:16Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=25dc8660efedecfd9f021142ac1e4ff3639e80d4'/>
<id>urn:sha1:25dc8660efedecfd9f021142ac1e4ff3639e80d4</id>
<content type='text'>
Fix LLFile::tmpdir failing when temp directory is located in a unicode path on windows
Add Tracy profiler tagging to LLFile that's disabled by default
Replace LLFile::utf8StringToWstring with our fsyspath std::filesystem::path adapter
Introduce std::filesystem::path to llifstream/llofstream wrappers
Add move operators to fsyspath to match copy operator
Restore LLUniqueFile RAII class for direct c file io wrapping and reducing merge conflicts with downstream code that may depend upon it

Signed-off-by: Rye &lt;rye@alchemyviewer.org&gt;
</content>
</entry>
<entry>
<title>#4931 Fix name cache callbacks not having connections</title>
<updated>2025-11-05T09:27:22Z</updated>
<author>
<name>Andrey Kleshchev</name>
<email>117672381+akleshchev@users.noreply.github.com</email>
</author>
<published>2025-11-04T21:15:06Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=c8d08ee388ff8c968802412db134136c529e5bca'/>
<id>urn:sha1:c8d08ee388ff8c968802412db134136c529e5bca</id>
<content type='text'>
</content>
</entry>
<entry>
<title>viewer#2172 AM/PM selector</title>
<updated>2025-09-10T19:48:16Z</updated>
<author>
<name>Andrey Kleshchev</name>
<email>andreykproductengine@lindenlab.com</email>
</author>
<published>2024-10-10T20:42:05Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=003092955486dfb0882d49d6b40586431df6368b'/>
<id>urn:sha1:003092955486dfb0882d49d6b40586431df6368b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merge commit '9e24b30' into marchcat/maint-c/restore</title>
<updated>2025-04-10T03:01:50Z</updated>
<author>
<name>Andrey Lihatskiy</name>
<email>alihatskiy@productengine.com</email>
</author>
<published>2025-04-10T03:01:50Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=5d7a5001b41df8989cd493433c3dc45459db8240'/>
<id>urn:sha1:5d7a5001b41df8989cd493433c3dc45459db8240</id>
<content type='text'>
# Conflicts:
#	indra/llmath/v2math.cpp
#	indra/llmath/v2math.h
#	indra/llmath/v3math.h
#	indra/llmath/v4math.h
#	indra/llui/llfolderviewitem.cpp
#	indra/llui/llfolderviewitem.h
#	indra/llui/llfolderviewmodel.h
#	indra/llui/llmodaldialog.cpp
#	indra/llui/lltexteditor.cpp
#	indra/llui/lltexteditor.h
#	indra/llwindow/llwindowwin32.cpp
#	indra/newview/llagent.cpp
#	indra/newview/llagentcamera.h
#	indra/newview/llavatarrenderinfoaccountant.cpp
#	indra/newview/llconversationmodel.h
#	indra/newview/llfloaterinventorysettings.cpp
#	indra/newview/llfloaternamedesc.cpp
#	indra/newview/llfloaternamedesc.h
#	indra/newview/llfloaterobjectweights.cpp
#	indra/newview/llfloaterobjectweights.h
#	indra/newview/llfolderviewmodelinventory.h
#	indra/newview/llinspecttexture.cpp
#	indra/newview/llinventorybridge.cpp
#	indra/newview/llinventorybridge.h
#	indra/newview/llinventoryfunctions.cpp
#	indra/newview/llinventorygallery.h
#	indra/newview/llinventorygallerymenu.cpp
#	indra/newview/llinventorymodel.cpp
#	indra/newview/llinventorypanel.cpp
#	indra/newview/llinventorypanel.h
#	indra/newview/llmaterialeditor.cpp
#	indra/newview/lloutfitgallery.cpp
#	indra/newview/lloutfitgallery.h
#	indra/newview/lloutfitslist.cpp
#	indra/newview/lloutfitslist.h
#	indra/newview/llpanelgroupcreate.cpp
#	indra/newview/llpanelgroupgeneral.cpp
#	indra/newview/llpanelobjectinventory.cpp
#	indra/newview/llpaneloutfitsinventory.h
#	indra/newview/llpanelprofile.cpp
#	indra/newview/llpanelwearing.cpp
#	indra/newview/llreflectionmap.cpp
#	indra/newview/llselectmgr.cpp
#	indra/newview/llsidepanelappearance.cpp
#	indra/newview/llsidepaneliteminfo.cpp
#	indra/newview/llteleporthistorystorage.cpp
#	indra/newview/lltexturectrl.cpp
#	indra/newview/lltexturectrl.h
#	indra/newview/lltexturefetch.cpp
#	indra/newview/lltexturefetch.h
#	indra/newview/llviewerassetupload.cpp
#	indra/newview/llviewercamera.cpp
#	indra/newview/llviewercamera.h
#	indra/newview/llviewermenufile.cpp
#	indra/newview/llviewerobject.h
#	indra/newview/llviewertexture.cpp
#	indra/newview/llviewerwindow.cpp
#	indra/newview/llvoavatar.cpp
#	indra/newview/llvoavatar.h
#	indra/newview/llvoavatarself.cpp
#	indra/newview/llvovolume.cpp
#	indra/newview/llvovolume.h
#	indra/newview/tests/llviewerassetstats_test.cpp
</content>
</entry>
<entry>
<title>viewer#2985 Odd crash when notifying voice observers</title>
<updated>2024-11-01T15:54:05Z</updated>
<author>
<name>Andrey Kleshchev</name>
<email>andreykproductengine@lindenlab.com</email>
</author>
<published>2024-10-31T23:29:06Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=0114be2c155ed5a3de17f6b49d06fab607b9d6bf'/>
<id>urn:sha1:0114be2c155ed5a3de17f6b49d06fab607b9d6bf</id>
<content type='text'>
Crash points at enableDisableCallBtn, but button's floater was cleaned
earlier and has a removeObserver call so an observer record should be
long gone. Likely something else is going on.
Went over various callbacks and made sure they are cleaned. But in case
floater somehow remained, added mSession = nullptr.
</content>
</entry>
</feed>
