Merge branch 'develop' into pag-back
This commit is contained in:
commit
5bfb98df00
7 changed files with 38 additions and 16 deletions
|
@ -66,6 +66,7 @@
|
||||||
- Fix: Remove Meilisearch index when notes are deleted
|
- Fix: Remove Meilisearch index when notes are deleted
|
||||||
- Fix: 非英語環境でのPostgreSQLのエラーハンドリングを修正
|
- Fix: 非英語環境でのPostgreSQLのエラーハンドリングを修正
|
||||||
- Fix: インスタンスのアイコンがbase64の場合の挙動を修正
|
- Fix: インスタンスのアイコンがbase64の場合の挙動を修正
|
||||||
|
- Fix: ローカルの `Person` を指す `acct` URI を解析するときのバグを修正しました
|
||||||
|
|
||||||
## 13.13.2
|
## 13.13.2
|
||||||
|
|
||||||
|
|
|
@ -55,8 +55,8 @@ copyRSS: "RSS 복사"
|
||||||
copyUsername: "유저명 복사"
|
copyUsername: "유저명 복사"
|
||||||
copyUserId: "유저 ID 복사"
|
copyUserId: "유저 ID 복사"
|
||||||
copyNoteId: "노트 ID 복사"
|
copyNoteId: "노트 ID 복사"
|
||||||
copyFileId: "파일명 복사"
|
copyFileId: "파일 ID 복사"
|
||||||
copyFolderId: "폴더명 복사"
|
copyFolderId: "폴더 ID 복사"
|
||||||
copyProfileUrl: "프로필 URL 복사"
|
copyProfileUrl: "프로필 URL 복사"
|
||||||
searchUser: "사용자 검색"
|
searchUser: "사용자 검색"
|
||||||
reply: "답글"
|
reply: "답글"
|
||||||
|
@ -156,8 +156,8 @@ addEmoji: "이모지 추가"
|
||||||
settingGuide: "추천 설정"
|
settingGuide: "추천 설정"
|
||||||
cacheRemoteFiles: "리모트 파일을 캐시"
|
cacheRemoteFiles: "리모트 파일을 캐시"
|
||||||
cacheRemoteFilesDescription: "이 설정을 해지하면 리모트 파일을 캐시하지 않고 해당 파일을 직접 링크하게 됩니다. 그에 따라 서버의 저장 공간을 절약할 수 있지만, 썸네일이 생성되지 않기 때문에 통신량이 증가합니다."
|
cacheRemoteFilesDescription: "이 설정을 해지하면 리모트 파일을 캐시하지 않고 해당 파일을 직접 링크하게 됩니다. 그에 따라 서버의 저장 공간을 절약할 수 있지만, 썸네일이 생성되지 않기 때문에 통신량이 증가합니다."
|
||||||
cacheRemoteSensitiveFiles: "민감한 원격 파일을 캐시"
|
cacheRemoteSensitiveFiles: "리모트의 민감한 파일을 캐시"
|
||||||
cacheRemoteSensitiveFilesDescription: "이 설정을 비활성화하면 중요한 원격 파일은 캐싱 없이 원격 인스턴스에서 직접 로드됩니다."
|
cacheRemoteSensitiveFilesDescription: "이 설정을 비활성화하면 리모트의 민감한 파일은 캐시하지 않고 리모트에서 직접 가져오도록 합니다."
|
||||||
flagAsBot: "나는 봇입니다"
|
flagAsBot: "나는 봇입니다"
|
||||||
flagAsBotDescription: "이 계정을 자동화된 수단으로 운용할 경우에 활성화해 주세요. 이 플래그를 활성화하면, 다른 봇이 이를 참고하여 봇 끼리의 무한 연쇄 반응을 회피하거나, 이 계정의 시스템 상에서의 취급이 Bot 운영에 최적화되는 등의 변화가 생깁니다."
|
flagAsBotDescription: "이 계정을 자동화된 수단으로 운용할 경우에 활성화해 주세요. 이 플래그를 활성화하면, 다른 봇이 이를 참고하여 봇 끼리의 무한 연쇄 반응을 회피하거나, 이 계정의 시스템 상에서의 취급이 Bot 운영에 최적화되는 등의 변화가 생깁니다."
|
||||||
flagAsCat: "나는 고양이다냥"
|
flagAsCat: "나는 고양이다냥"
|
||||||
|
@ -1075,7 +1075,7 @@ enableServerMachineStats: "서버의 머신 사양을 공개하기"
|
||||||
enableIdenticonGeneration: "유저마다의 Identicon 생성 유효화"
|
enableIdenticonGeneration: "유저마다의 Identicon 생성 유효화"
|
||||||
turnOffToImprovePerformance: "이 기능을 끄면 성능이 향상될 수 있습니다."
|
turnOffToImprovePerformance: "이 기능을 끄면 성능이 향상될 수 있습니다."
|
||||||
createInviteCode: "초대 코드 생성"
|
createInviteCode: "초대 코드 생성"
|
||||||
createWithOptions: "설정으로 생성"
|
createWithOptions: "옵션을 지정하여 생성"
|
||||||
createCount: "초대 수"
|
createCount: "초대 수"
|
||||||
inviteCodeCreated: "초대 코드 생성됨"
|
inviteCodeCreated: "초대 코드 생성됨"
|
||||||
inviteLimitExceeded: "초대 코드 생성 한도를 초과했습니다."
|
inviteLimitExceeded: "초대 코드 생성 한도를 초과했습니다."
|
||||||
|
@ -1087,7 +1087,7 @@ inviteCodeUsedAt: "다음에 사용된 초대 코드"
|
||||||
registeredUserUsingInviteCode: "초대 코드 사용 대상"
|
registeredUserUsingInviteCode: "초대 코드 사용 대상"
|
||||||
waitingForMailAuth: "이메일 인증 보류 중"
|
waitingForMailAuth: "이메일 인증 보류 중"
|
||||||
inviteCodeCreator: "초대 코드 생성자"
|
inviteCodeCreator: "초대 코드 생성자"
|
||||||
usedAt: "사용 기간"
|
usedAt: "사용 시각"
|
||||||
unused: "사용되지 않음"
|
unused: "사용되지 않음"
|
||||||
used: "사용됨"
|
used: "사용됨"
|
||||||
expired: "만료됨"
|
expired: "만료됨"
|
||||||
|
@ -1402,7 +1402,7 @@ _role:
|
||||||
canPublicNote: "공개 노트 허용"
|
canPublicNote: "공개 노트 허용"
|
||||||
canInvite: "서버 초대 코드 발행"
|
canInvite: "서버 초대 코드 발행"
|
||||||
inviteLimit: "초대 한도"
|
inviteLimit: "초대 한도"
|
||||||
inviteLimitCycle: "초대 발급 재사용 대기 시간"
|
inviteLimitCycle: "초대 발급 간격"
|
||||||
inviteExpirationTime: "초대 만료 기간"
|
inviteExpirationTime: "초대 만료 기간"
|
||||||
canManageCustomEmojis: "커스텀 이모지 관리"
|
canManageCustomEmojis: "커스텀 이모지 관리"
|
||||||
driveCapacity: "드라이브 용량"
|
driveCapacity: "드라이브 용량"
|
||||||
|
@ -1996,7 +1996,7 @@ _deck:
|
||||||
introduction: "칼럼을 조합해서 나만의 인터페이스를 구성해 보아요!"
|
introduction: "칼럼을 조합해서 나만의 인터페이스를 구성해 보아요!"
|
||||||
introduction2: "나중에라도 화면 우측의 + 버튼을 눌러 새 칼럼을 추가할 수 있습니다."
|
introduction2: "나중에라도 화면 우측의 + 버튼을 눌러 새 칼럼을 추가할 수 있습니다."
|
||||||
widgetsIntroduction: "칼럼 메뉴의 \"위젯 편집\"에서 위젯을 추가해 주세요"
|
widgetsIntroduction: "칼럼 메뉴의 \"위젯 편집\"에서 위젯을 추가해 주세요"
|
||||||
useSimpleUiForNonRootPages: "탐색 페이지에 간단한 UI 사용하기"
|
useSimpleUiForNonRootPages: "루트 이외의 페이지로 접속한 경우 UI 간략화하기"
|
||||||
_columns:
|
_columns:
|
||||||
main: "메인"
|
main: "메인"
|
||||||
widgets: "위젯"
|
widgets: "위젯"
|
||||||
|
|
|
@ -481,6 +481,7 @@ windowMinimize: "Minimera"
|
||||||
windowRestore: "Återställ"
|
windowRestore: "Återställ"
|
||||||
pleaseDonate: "Misskey är en gratis programvara som används på {host}. Donera gärna för att göra utvecklingen ständigt, tack!"
|
pleaseDonate: "Misskey är en gratis programvara som används på {host}. Donera gärna för att göra utvecklingen ständigt, tack!"
|
||||||
resetPasswordConfirm: "Återställ verkligen ditt lösenord?"
|
resetPasswordConfirm: "Återställ verkligen ditt lösenord?"
|
||||||
|
dataSaver: "Databesparing"
|
||||||
_achievements:
|
_achievements:
|
||||||
_types:
|
_types:
|
||||||
_open3windows:
|
_open3windows:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
_lang_: "ภาษาไทย"
|
_lang_: "ภาษาไทย"
|
||||||
headlineMisskey: "เชื่อมต่อเครือข่ายโดยโน้ต"
|
headlineMisskey: "เชื่อมต่อระบบ Network ด้วย Note"
|
||||||
introMisskey: "ยินดีต้อนรับจ้าาา! Misskey เป็นบริการไมโครบล็อกโอเพ่นซอร์ส แบบการกระจายอำนาจ\nสร้าง \"โน้ต\" เพื่อแบ่งปันความคิดของคุณกับทุกคนรอบตัวคุณกันเถอะ 📡\nด้วยการ \"รีแอคชั่นผู้คน\" คุณยังสามารถแสดงความรู้สึกของคุณเกี่ยวกับบันทึกของทุกคนได้อย่างรวดเร็ว 👍\n\nแล้วมาท่องสำรวจโลกใบใหม่กันเถอะ! 🚀"
|
introMisskey: "ยินดีต้อนรับทุกคนจ้า! Misskey คือ บริการไมโครบล็อกกิ้ง (MicroBlogging) แบบกระจายศูนย์อำนาจ (Decentralized) \n\nเขียน \"โน้ต (Note)\" เพื่อส่งต่อเรื่องราวของคุณให้ทั้งโลกได้รับรู้📡\nและอย่าลืมที่จะ \"React\" กับเรื่องราวของคนอื่น ๆ ด้วย! 👍\n\nมุ่งสู่โลกใบใหม่กันเถอะ🚀"
|
||||||
poweredByMisskeyDescription: "{name} เป็นส่วนหนึ่งในบริการที่ถูกขับเคลื่อนโดยแพลตฟอร์มโอเพ่นซอร์ส <b>Misskey</b> (เรียกว่า \"อินสแตนซ์ Misskey\")"
|
poweredByMisskeyDescription: "{name} เป็นส่วนหนึ่งในบริการที่ถูกขับเคลื่อนโดยแพลตฟอร์มโอเพ่นซอร์ส <b>Misskey</b> (เรียกว่า \"อินสแตนซ์ Misskey\")"
|
||||||
monthAndDay: "{month}/{day}"
|
monthAndDay: "{month}/{day}"
|
||||||
search: "ค้นหา"
|
search: "ค้นหา"
|
||||||
|
@ -339,7 +339,7 @@ thisYear: "ปีนี้"
|
||||||
thisMonth: "เดือนนี้"
|
thisMonth: "เดือนนี้"
|
||||||
today: "วันนี้"
|
today: "วันนี้"
|
||||||
dayX: "{day}"
|
dayX: "{day}"
|
||||||
monthX: "{เดือน}"
|
monthX: "เดือน {month}"
|
||||||
yearX: "{year}"
|
yearX: "{year}"
|
||||||
pages: "หน้า"
|
pages: "หน้า"
|
||||||
integration: "รวบรวม"
|
integration: "รวบรวม"
|
||||||
|
@ -1996,6 +1996,7 @@ _deck:
|
||||||
introduction: "สร้างอินเทอร์เฟซที่สมบูรณ์แบบสำหรับคุณโดยจัดเรียงคอลัมน์ได้อย่างอิสระ!"
|
introduction: "สร้างอินเทอร์เฟซที่สมบูรณ์แบบสำหรับคุณโดยจัดเรียงคอลัมน์ได้อย่างอิสระ!"
|
||||||
introduction2: "คลิกที่เครื่องหมาย + ทางขวาของหน้าจอเพื่อเพิ่มคอลัมน์ใหม่ทุกครั้งที่คุณต้องการ"
|
introduction2: "คลิกที่เครื่องหมาย + ทางขวาของหน้าจอเพื่อเพิ่มคอลัมน์ใหม่ทุกครั้งที่คุณต้องการ"
|
||||||
widgetsIntroduction: "กรุณาเลือก \"แก้ไขวิดเจ็ต\" ในเมนูคอลัมน์และเพิ่มวิดเจ็ต"
|
widgetsIntroduction: "กรุณาเลือก \"แก้ไขวิดเจ็ต\" ในเมนูคอลัมน์และเพิ่มวิดเจ็ต"
|
||||||
|
useSimpleUiForNonRootPages: "แสดง UI ของ Root Page อย่างง่าย "
|
||||||
_columns:
|
_columns:
|
||||||
main: "หลัก"
|
main: "หลัก"
|
||||||
widgets: "วิดเจ็ต"
|
widgets: "วิดเจ็ต"
|
||||||
|
|
|
@ -8,8 +8,9 @@ import type { LocalUser, RemoteUser } from '@/models/entities/User.js';
|
||||||
import type { Config } from '@/config.js';
|
import type { Config } from '@/config.js';
|
||||||
import type Logger from '@/logger.js';
|
import type Logger from '@/logger.js';
|
||||||
import { UtilityService } from '@/core/UtilityService.js';
|
import { UtilityService } from '@/core/UtilityService.js';
|
||||||
import { WebfingerService } from '@/core/WebfingerService.js';
|
import { ILink, WebfingerService } from '@/core/WebfingerService.js';
|
||||||
import { RemoteLoggerService } from '@/core/RemoteLoggerService.js';
|
import { RemoteLoggerService } from '@/core/RemoteLoggerService.js';
|
||||||
|
import { ApDbResolverService } from '@/core/activitypub/ApDbResolverService.js';
|
||||||
import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
|
import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
|
||||||
import { bindThis } from '@/decorators.js';
|
import { bindThis } from '@/decorators.js';
|
||||||
|
|
||||||
|
@ -27,6 +28,7 @@ export class RemoteUserResolveService {
|
||||||
private utilityService: UtilityService,
|
private utilityService: UtilityService,
|
||||||
private webfingerService: WebfingerService,
|
private webfingerService: WebfingerService,
|
||||||
private remoteLoggerService: RemoteLoggerService,
|
private remoteLoggerService: RemoteLoggerService,
|
||||||
|
private apDbResolverService: ApDbResolverService,
|
||||||
private apPersonService: ApPersonService,
|
private apPersonService: ApPersonService,
|
||||||
) {
|
) {
|
||||||
this.logger = this.remoteLoggerService.logger.createSubLogger('resolve-user');
|
this.logger = this.remoteLoggerService.logger.createSubLogger('resolve-user');
|
||||||
|
@ -67,6 +69,22 @@ export class RemoteUserResolveService {
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
const self = await this.resolveSelf(acctLower);
|
const self = await this.resolveSelf(acctLower);
|
||||||
|
|
||||||
|
if (self.href.startsWith(this.config.url)) {
|
||||||
|
const local = this.apDbResolverService.parseUri(self.href);
|
||||||
|
if (local.local && local.type === 'users') {
|
||||||
|
// the LR points to local
|
||||||
|
return (await this.apDbResolverService
|
||||||
|
.getUserFromApId(self.href)
|
||||||
|
.then((u) => {
|
||||||
|
if (u == null) {
|
||||||
|
throw new Error('local user not found');
|
||||||
|
} else {
|
||||||
|
return u;
|
||||||
|
}
|
||||||
|
})) as LocalUser;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.logger.succ(`return new remote user: ${chalk.magenta(acctLower)}`);
|
this.logger.succ(`return new remote user: ${chalk.magenta(acctLower)}`);
|
||||||
return await this.apPersonService.createPerson(self.href);
|
return await this.apPersonService.createPerson(self.href);
|
||||||
}
|
}
|
||||||
|
@ -119,7 +137,7 @@ export class RemoteUserResolveService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
private async resolveSelf(acctLower: string) {
|
private async resolveSelf(acctLower: string): Promise<ILink> {
|
||||||
this.logger.info(`WebFinger for ${chalk.yellow(acctLower)}`);
|
this.logger.info(`WebFinger for ${chalk.yellow(acctLower)}`);
|
||||||
const finger = await this.webfingerService.webfinger(acctLower).catch(err => {
|
const finger = await this.webfingerService.webfinger(acctLower).catch(err => {
|
||||||
this.logger.error(`Failed to WebFinger for ${chalk.yellow(acctLower)}: ${ err.statusCode ?? err.message }`);
|
this.logger.error(`Failed to WebFinger for ${chalk.yellow(acctLower)}: ${ err.statusCode ?? err.message }`);
|
||||||
|
|
|
@ -6,12 +6,12 @@ import { query as urlQuery } from '@/misc/prelude/url.js';
|
||||||
import { HttpRequestService } from '@/core/HttpRequestService.js';
|
import { HttpRequestService } from '@/core/HttpRequestService.js';
|
||||||
import { bindThis } from '@/decorators.js';
|
import { bindThis } from '@/decorators.js';
|
||||||
|
|
||||||
type ILink = {
|
export type ILink = {
|
||||||
href: string;
|
href: string;
|
||||||
rel?: string;
|
rel?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
type IWebFinger = {
|
export type IWebFinger = {
|
||||||
links: ILink[];
|
links: ILink[];
|
||||||
subject: string;
|
subject: string;
|
||||||
};
|
};
|
||||||
|
|
|
@ -907,6 +907,7 @@ defineExpose({
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
|
margin-bottom: -10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.headerLeft {
|
.headerLeft {
|
||||||
|
@ -1024,7 +1025,7 @@ defineExpose({
|
||||||
}
|
}
|
||||||
|
|
||||||
.targetNote {
|
.targetNote {
|
||||||
padding: 0 20px 16px 20px;
|
padding: 10px 20px 16px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.withQuote {
|
.withQuote {
|
||||||
|
|
Loading…
Reference in a new issue