merge: upstream

This commit is contained in:
Marie 2024-02-23 13:42:52 +01:00
commit 15d2319011
No known key found for this signature in database
GPG key ID: 56569BBE47D2C828
92 changed files with 1677 additions and 1086 deletions

View file

@ -334,35 +334,36 @@ export class ReactionService {
//#endregion
}
/**
*
* 0
*/
@bindThis
public convertLegacyReactions(reactions: Record<string, number>) {
const _reactions = {} as Record<string, number>;
public convertLegacyReactions(reactions: MiNote['reactions']): MiNote['reactions'] {
return Object.entries(reactions)
.filter(([, count]) => {
// `ReactionService.prototype.delete`ではリアクション削除時に、
// `MiNote['reactions']`のエントリの値をデクリメントしているが、
// デクリメントしているだけなのでエントリ自体は0を値として持つ形で残り続ける。
// そのため、この処理がなければ、「0個のリアクションがついている」ということになってしまう。
return count > 0;
})
.map(([reaction, count]) => {
// unchecked indexed access
const convertedReaction = legacies[reaction] as string | undefined;
for (const reaction of Object.keys(reactions)) {
if (reactions[reaction] <= 0) continue;
const key = this.decodeReaction(convertedReaction ?? reaction).reaction;
if (Object.keys(legacies).includes(reaction)) {
if (_reactions[legacies[reaction]]) {
_reactions[legacies[reaction]] += reactions[reaction];
} else {
_reactions[legacies[reaction]] = reactions[reaction];
}
} else {
if (_reactions[reaction]) {
_reactions[reaction] += reactions[reaction];
} else {
_reactions[reaction] = reactions[reaction];
}
}
}
return [key, count] as const;
})
.reduce<MiNote['reactions']>((acc, [key, count]) => {
// unchecked indexed access
const prevCount = acc[key] as number | undefined;
const _reactions2 = {} as Record<string, number>;
acc[key] = (prevCount ?? 0) + count;
for (const reaction of Object.keys(_reactions)) {
_reactions2[this.decodeReaction(reaction).reaction] = _reactions[reaction];
}
return _reactions2;
return acc;
}, {});
}
@bindThis