fix few locks and unpin message
This commit is contained in:
parent
0a0e79180a
commit
5c58492b60
2 changed files with 95 additions and 65 deletions
|
|
@ -40,8 +40,8 @@ public class BackgroundDelete : BackgroundService
|
|||
{
|
||||
string id = Path.GetFileName(account);
|
||||
SemaphoreSlim userLock = Utils.GetUserLock(id);
|
||||
await userLock.WaitAsync();
|
||||
await Requests.createLock.WaitAsync();
|
||||
await userLock.WaitAsync();
|
||||
try
|
||||
{
|
||||
string username = await Account.Utils.NameFromId(id);
|
||||
|
|
@ -55,8 +55,8 @@ public class BackgroundDelete : BackgroundService
|
|||
}
|
||||
finally
|
||||
{
|
||||
Requests.createLock.Release();
|
||||
userLock.Release();
|
||||
Requests.createLock.Release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -427,14 +427,19 @@ public class Requests
|
|||
}
|
||||
|
||||
string msgDir = $"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/messages";
|
||||
|
||||
long nextId = 0;
|
||||
Message msg = new Message();
|
||||
await createLock.WaitAsync();
|
||||
try
|
||||
{
|
||||
long last = 0;
|
||||
if (Fs.Exists($"{msgDir}/last"))
|
||||
{
|
||||
last = long.Parse(Encoding.UTF8.GetString(await Fs.ReadFile($"{msgDir}/last")));
|
||||
}
|
||||
long nextId = last + 1;
|
||||
nextId = last + 1;
|
||||
|
||||
Message msg = new Message();
|
||||
msg.author = id;
|
||||
msg.timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
|
||||
msg.type = "larp.text";
|
||||
|
|
@ -482,6 +487,11 @@ public class Requests
|
|||
|
||||
await Fs.WriteFile($"{msgDir}/{nextId}", Encoding.UTF8.GetBytes(JsonSerializer.Serialize(msg, AppJsonSerializerContext.Default.Message)));
|
||||
await Fs.WriteFile($"{msgDir}/last", Encoding.UTF8.GetBytes(nextId.ToString()));
|
||||
}
|
||||
finally
|
||||
{
|
||||
createLock.Release();
|
||||
}
|
||||
|
||||
string[] members = Fs.ReadDirectory($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/members");
|
||||
foreach(string memberWD in members)
|
||||
|
|
@ -548,6 +558,18 @@ public class Requests
|
|||
|
||||
await Fs.WriteFile(msgPath, Encoding.UTF8.GetBytes(JsonSerializer.Serialize(msg, AppJsonSerializerContext.Default.Message)));
|
||||
|
||||
string reactDir = $"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/reactions/{msgId}";
|
||||
if (Fs.Exists(reactDir))
|
||||
{
|
||||
Fs.DeleteDirectory(reactDir);
|
||||
}
|
||||
|
||||
string attDir = $"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/attachments/{msgId}";
|
||||
if (Fs.Exists(attDir))
|
||||
{
|
||||
Fs.DeleteDirectory(attDir);
|
||||
}
|
||||
|
||||
string[] members = Fs.ReadDirectory($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/members");
|
||||
foreach(string memberWD in members)
|
||||
{
|
||||
|
|
@ -593,6 +615,9 @@ public class Requests
|
|||
string reactDir = $"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/reactions/{msgId}";
|
||||
if (!Fs.Exists(reactDir)) Fs.CreateDirectory(reactDir);
|
||||
|
||||
await createLock.WaitAsync();
|
||||
try
|
||||
{
|
||||
long last = 0;
|
||||
if (Fs.Exists($"{reactDir}/last"))
|
||||
{
|
||||
|
|
@ -602,6 +627,11 @@ public class Requests
|
|||
|
||||
await Fs.WriteFile($"{reactDir}/{nextId}", Encoding.UTF8.GetBytes($"{id}\n{reaction}"));
|
||||
await Fs.WriteFile($"{reactDir}/last", Encoding.UTF8.GetBytes(nextId.ToString()));
|
||||
}
|
||||
finally
|
||||
{
|
||||
createLock.Release();
|
||||
}
|
||||
|
||||
string[] members = Fs.ReadDirectory($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/members");
|
||||
foreach(string memberWD in members)
|
||||
|
|
@ -680,6 +710,9 @@ public class Requests
|
|||
string pinnedFilePath = $"{pinnedDir}/{msgId}";
|
||||
bool isNowPinned = false;
|
||||
|
||||
await createLock.WaitAsync();
|
||||
try
|
||||
{
|
||||
if (Fs.Exists(pinnedFilePath))
|
||||
{
|
||||
Fs.DeleteFile(pinnedFilePath);
|
||||
|
|
@ -693,9 +726,6 @@ public class Requests
|
|||
|
||||
// Send larp.info.pin message
|
||||
long nextId = 0;
|
||||
await createLock.WaitAsync();
|
||||
try
|
||||
{
|
||||
if (Fs.Exists($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/messages/last"))
|
||||
{
|
||||
string lastStr = Encoding.UTF8.GetString(await Fs.ReadFile($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/messages/last"));
|
||||
|
|
@ -709,7 +739,7 @@ public class Requests
|
|||
infoMessage.attachment = "";
|
||||
infoMessage.author = id;
|
||||
infoMessage.timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
|
||||
infoMessage.type = "larp.info.pin";
|
||||
infoMessage.type = isNowPinned ? "larp.info.pin" : "larp.info.unpin";
|
||||
infoMessage.content = isNowPinned ? "{blah(message.pinned.by)}" : "{blah(message.unpinned.by)}";
|
||||
infoMessage.key = "";
|
||||
infoMessage.pervious = msgId;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue