add "dm/messages/get" request
All checks were successful
Server Build / publish (push) Successful in 29s
Voice Build / publish (push) Successful in 26s

This commit is contained in:
olcxja 2026-05-29 09:31:58 +02:00
commit bb57c26dea
3 changed files with 60 additions and 7 deletions

View file

@ -631,11 +631,17 @@ public class Requests
, password));
break;
case "user/dm/create":
await context.Response.WriteAsync(
Encryption.Encryption.EncryptString(
await Room.Requests.DmCreate(id, serializedBody.string2)
, password));
await context.Response.WriteAsync(Encryption.Encryption.EncryptString(await Room.Requests.DmCreate(id, serializedBody.string2), password));
break;
case "dm/messages/get":
{
Universal3String msgGet = JsonSerializer.Deserialize(
serializedBody.string2,
AppJsonSerializerContext.Default.Universal3String
);
await context.Response.WriteAsync(Encryption.Encryption.EncryptString(await Room.Requests.GetDmMessages(id, msgGet.string1, msgGet.string3, msgGet.string2), password));
break;
}
case "dm/key/get":
await context.Response.WriteAsync(
Encryption.Encryption.EncryptString(

View file

@ -160,11 +160,15 @@ public class Fs
try
{
var dir = Path.GetDirectoryName(path);
if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir))
var dir = Path.GetDirectoryName(path)?.Replace("\\", "/");
if (!string.IsNullOrEmpty(dir))
{
existCache[dir] = true;
if (!Directory.Exists(dir))
{
CreateDirectory(dir);
}
}
await File.WriteAllBytesAsync(path, content);
existCache[path] = true;

View file

@ -29,6 +29,49 @@ public class Requests
string memberPath = $"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/members/{id};{DOMAIN}";
return Fs.Exists(memberPath);
}
public static async Task<string> GetDmMessages(string id, string dmId, string startOffset, string countStr)
{
if (!await IsMemberOfDm(id, dmId)) return "error:forbidden";
string msgDir = $"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/messages";
if (!Fs.Exists(msgDir)) return "{}";
long last = 0;
if (Fs.Exists($"{msgDir}/last"))
{
string lastStr = Encoding.UTF8.GetString(await Fs.ReadFile($"{msgDir}/last"));
long.TryParse(lastStr, out last);
}
long start = last;
if (!string.IsNullOrEmpty(startOffset) && long.TryParse(startOffset, out long s))
{
start = s;
}
int count = 50;
if (!string.IsNullOrEmpty(countStr) && int.TryParse(countStr, out int c))
{
count = Math.Min(c, 100);
}
StringBuilder sb = new StringBuilder("{");
int fetched = 0;
for (long i = start; i >= 0 && fetched < count; i--)
{
string p = $"{msgDir}/{i}";
if (Fs.Exists(p))
{
if (fetched > 0) sb.Append(',');
sb.Append($"\"{i}\":");
sb.Append(Encoding.UTF8.GetString(await Fs.ReadFile(p)));
fetched++;
}
}
sb.Append("}");
return sb.ToString();
}
public static async Task<string> GetDmKey(string id, string dmId)
{