Merge branch 'develop'
This commit is contained in:
		
						commit
						08da5e9e0d
					
				
					 13 changed files with 65 additions and 17 deletions
				
			
		
							
								
								
									
										10
									
								
								CHANGELOG.md
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								CHANGELOG.md
									
										
									
									
									
								
							|  | @ -10,9 +10,19 @@ | ||||||
| You should also include the user name that made the change. | You should also include the user name that made the change. | ||||||
| --> | --> | ||||||
| 
 | 
 | ||||||
|  | ## 12.105.0 (2022/02/09) | ||||||
|  | 
 | ||||||
|  | ### Improvements | ||||||
|  | - インスタンスのテーマカラーを設定できるように @syuilo | ||||||
|  | 
 | ||||||
|  | ### Bugfixes | ||||||
|  | - 一部環境でマイグレーションが失敗する問題を修正 @syuilo | ||||||
|  | 
 | ||||||
| ## 12.104.0 (2022/02/09) | ## 12.104.0 (2022/02/09) | ||||||
| 
 | 
 | ||||||
| ### Note | ### Note | ||||||
|  | ビルドする前に`npm run clean`を実行してください。 | ||||||
|  | 
 | ||||||
| このリリースはマイグレーションの規模が大きいため、インスタンスによってはマイグレーションに時間がかかる可能性があります。 | このリリースはマイグレーションの規模が大きいため、インスタンスによってはマイグレーションに時間がかかる可能性があります。 | ||||||
| マイグレーションが終わらない場合は、チャートの情報はリセットされてしまいますが`__chart__`で始まるテーブルの**レコード**を全て削除(テーブル自体は消さないでください)してから再度試す方法もあります。 | マイグレーションが終わらない場合は、チャートの情報はリセットされてしまいますが`__chart__`で始まるテーブルの**レコード**を全て削除(テーブル自体は消さないでください)してから再度試す方法もあります。 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -828,6 +828,7 @@ overridedDeviceKind: "デバイスタイプ" | ||||||
| smartphone: "スマートフォン" | smartphone: "スマートフォン" | ||||||
| tablet: "タブレット" | tablet: "タブレット" | ||||||
| auto: "自動" | auto: "自動" | ||||||
|  | themeColor: "テーマカラー" | ||||||
| 
 | 
 | ||||||
| _emailUnavailable: | _emailUnavailable: | ||||||
|   used: "既に使用されています" |   used: "既に使用されています" | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| { | { | ||||||
| 	"name": "misskey", | 	"name": "misskey", | ||||||
| 	"version": "12.104.0", | 	"version": "12.105.0", | ||||||
| 	"codename": "indigo", | 	"codename": "indigo", | ||||||
| 	"repository": { | 	"repository": { | ||||||
| 		"type": "git", | 		"type": "git", | ||||||
|  |  | ||||||
|  | @ -158,18 +158,8 @@ module.exports = class chartV71644058404077 { | ||||||
| 		await queryRunner.query(`UPDATE "__chart_day__per_user_following" SET "___remote_followers_total"=2147483647 WHERE "___remote_followers_total" > 2147483647`); | 		await queryRunner.query(`UPDATE "__chart_day__per_user_following" SET "___remote_followers_total"=2147483647 WHERE "___remote_followers_total" > 2147483647`); | ||||||
| 		await queryRunner.query(`UPDATE "__chart_day__per_user_following" SET "___remote_followers_inc"=32767 WHERE "___remote_followers_inc" > 32767`); | 		await queryRunner.query(`UPDATE "__chart_day__per_user_following" SET "___remote_followers_inc"=32767 WHERE "___remote_followers_inc" > 32767`); | ||||||
| 		await queryRunner.query(`UPDATE "__chart_day__per_user_following" SET "___remote_followers_dec"=32767 WHERE "___remote_followers_dec" > 32767`); | 		await queryRunner.query(`UPDATE "__chart_day__per_user_following" SET "___remote_followers_dec"=32767 WHERE "___remote_followers_dec" > 32767`); | ||||||
| 		await queryRunner.query(`UPDATE "__chart__per_user_drive" SET "___totalCount"=2147483647 WHERE "___totalCount" > 2147483647`); | 		await queryRunner.query(`TRUNCATE TABLE "__chart__per_user_drive"`); | ||||||
| 		await queryRunner.query(`UPDATE "__chart__per_user_drive" SET "___totalSize"=2147483647 WHERE "___totalSize" > 2147483647`); | 		await queryRunner.query(`TRUNCATE TABLE "__chart_day__per_user_drive"`); | ||||||
| 		await queryRunner.query(`UPDATE "__chart__per_user_drive" SET "___incCount"=32767 WHERE "___incCount" > 32767`); |  | ||||||
| 		await queryRunner.query(`UPDATE "__chart__per_user_drive" SET "___incSize"=2147483647 WHERE "___incSize" > 2147483647`); |  | ||||||
| 		await queryRunner.query(`UPDATE "__chart__per_user_drive" SET "___decCount"=32767 WHERE "___decCount" > 32767`); |  | ||||||
| 		await queryRunner.query(`UPDATE "__chart__per_user_drive" SET "___decSize"=2147483647 WHERE "___decSize" > 2147483647`); |  | ||||||
| 		await queryRunner.query(`UPDATE "__chart_day__per_user_drive" SET "___totalCount"=2147483647 WHERE "___totalCount" > 2147483647`); |  | ||||||
| 		await queryRunner.query(`UPDATE "__chart_day__per_user_drive" SET "___totalSize"=2147483647 WHERE "___totalSize" > 2147483647`); |  | ||||||
| 		await queryRunner.query(`UPDATE "__chart_day__per_user_drive" SET "___incCount"=32767 WHERE "___incCount" > 32767`); |  | ||||||
| 		await queryRunner.query(`UPDATE "__chart_day__per_user_drive" SET "___incSize"=2147483647 WHERE "___incSize" > 2147483647`); |  | ||||||
| 		await queryRunner.query(`UPDATE "__chart_day__per_user_drive" SET "___decCount"=32767 WHERE "___decCount" > 32767`); |  | ||||||
| 		await queryRunner.query(`UPDATE "__chart_day__per_user_drive" SET "___decSize"=2147483647 WHERE "___decSize" > 2147483647`); |  | ||||||
| 
 | 
 | ||||||
| 		await queryRunner.query(`ALTER TABLE "__chart__federation" ALTER COLUMN "___instance_total" TYPE integer USING "___instance_total"::integer`); | 		await queryRunner.query(`ALTER TABLE "__chart__federation" ALTER COLUMN "___instance_total" TYPE integer USING "___instance_total"::integer`); | ||||||
| 		await queryRunner.query(`ALTER TABLE "__chart__federation" ALTER COLUMN "___instance_inc" TYPE smallint USING "___instance_inc"::smallint`); | 		await queryRunner.query(`ALTER TABLE "__chart__federation" ALTER COLUMN "___instance_inc" TYPE smallint USING "___instance_inc"::smallint`); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,13 @@ | ||||||
|  | const { MigrationInterface, QueryRunner } = require("typeorm"); | ||||||
|  | 
 | ||||||
|  | module.exports = class instanceThemeColor1644395759931 { | ||||||
|  |     name = 'instanceThemeColor1644395759931' | ||||||
|  | 
 | ||||||
|  |     async up(queryRunner) { | ||||||
|  |         await queryRunner.query(`ALTER TABLE "meta" ADD "themeColor" character varying(512)`); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async down(queryRunner) { | ||||||
|  |         await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "themeColor"`); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -88,6 +88,12 @@ export class Meta { | ||||||
| 	}) | 	}) | ||||||
| 	public pinnedClipId: Clip['id'] | null; | 	public pinnedClipId: Clip['id'] | null; | ||||||
| 
 | 
 | ||||||
|  | 	@Column('varchar', { | ||||||
|  | 		length: 512, | ||||||
|  | 		nullable: true, | ||||||
|  | 	}) | ||||||
|  | 	public themeColor: string | null; | ||||||
|  | 
 | ||||||
| 	@Column('varchar', { | 	@Column('varchar', { | ||||||
| 		length: 512, | 		length: 512, | ||||||
| 		nullable: true, | 		nullable: true, | ||||||
|  |  | ||||||
|  | @ -41,6 +41,10 @@ export const meta = { | ||||||
| 			validator: $.optional.nullable.arr($.str), | 			validator: $.optional.nullable.arr($.str), | ||||||
| 		}, | 		}, | ||||||
| 
 | 
 | ||||||
|  | 		themeColor: { | ||||||
|  | 			validator: $.optional.nullable.str, | ||||||
|  | 		}, | ||||||
|  | 
 | ||||||
| 		mascotImageUrl: { | 		mascotImageUrl: { | ||||||
| 			validator: $.optional.nullable.str, | 			validator: $.optional.nullable.str, | ||||||
| 		}, | 		}, | ||||||
|  | @ -331,6 +335,10 @@ export default define(meta, async (ps, me) => { | ||||||
| 		set.blockedHosts = ps.blockedHosts.filter(Boolean); | 		set.blockedHosts = ps.blockedHosts.filter(Boolean); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if (ps.themeColor !== undefined) { | ||||||
|  | 		set.themeColor = ps.themeColor; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if (ps.mascotImageUrl !== undefined) { | 	if (ps.mascotImageUrl !== undefined) { | ||||||
| 		set.mascotImageUrl = ps.mascotImageUrl; | 		set.mascotImageUrl = ps.mascotImageUrl; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -499,6 +499,7 @@ export default define(meta, async (ps, me) => { | ||||||
| 		enableRecaptcha: instance.enableRecaptcha, | 		enableRecaptcha: instance.enableRecaptcha, | ||||||
| 		recaptchaSiteKey: instance.recaptchaSiteKey, | 		recaptchaSiteKey: instance.recaptchaSiteKey, | ||||||
| 		swPublickey: instance.swPublicKey, | 		swPublickey: instance.swPublicKey, | ||||||
|  | 		themeColor: instance.themeColor, | ||||||
| 		mascotImageUrl: instance.mascotImageUrl, | 		mascotImageUrl: instance.mascotImageUrl, | ||||||
| 		bannerUrl: instance.bannerUrl, | 		bannerUrl: instance.bannerUrl, | ||||||
| 		errorImageUrl: instance.errorImageUrl, | 		errorImageUrl: instance.errorImageUrl, | ||||||
|  |  | ||||||
|  | @ -200,6 +200,7 @@ router.get(['/@:user', '/@:user/:sub'], async (ctx, next) => { | ||||||
| 			sub: ctx.params.sub, | 			sub: ctx.params.sub, | ||||||
| 			instanceName: meta.name || 'Misskey', | 			instanceName: meta.name || 'Misskey', | ||||||
| 			icon: meta.iconUrl, | 			icon: meta.iconUrl, | ||||||
|  | 			themeColor: meta.themeColor, | ||||||
| 		}); | 		}); | ||||||
| 		ctx.set('Cache-Control', 'public, max-age=30'); | 		ctx.set('Cache-Control', 'public, max-age=30'); | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -239,6 +240,7 @@ router.get('/notes/:note', async (ctx, next) => { | ||||||
| 			summary: getNoteSummary(_note), | 			summary: getNoteSummary(_note), | ||||||
| 			instanceName: meta.name || 'Misskey', | 			instanceName: meta.name || 'Misskey', | ||||||
| 			icon: meta.iconUrl, | 			icon: meta.iconUrl, | ||||||
|  | 			themeColor: meta.themeColor, | ||||||
| 		}); | 		}); | ||||||
| 
 | 
 | ||||||
| 		if (['public', 'home'].includes(note.visibility)) { | 		if (['public', 'home'].includes(note.visibility)) { | ||||||
|  | @ -277,6 +279,7 @@ router.get('/@:user/pages/:page', async (ctx, next) => { | ||||||
| 			profile, | 			profile, | ||||||
| 			instanceName: meta.name || 'Misskey', | 			instanceName: meta.name || 'Misskey', | ||||||
| 			icon: meta.iconUrl, | 			icon: meta.iconUrl, | ||||||
|  | 			themeColor: meta.themeColor, | ||||||
| 		}); | 		}); | ||||||
| 
 | 
 | ||||||
| 		if (['public'].includes(page.visibility)) { | 		if (['public'].includes(page.visibility)) { | ||||||
|  | @ -307,6 +310,7 @@ router.get('/clips/:clip', async (ctx, next) => { | ||||||
| 			profile, | 			profile, | ||||||
| 			instanceName: meta.name || 'Misskey', | 			instanceName: meta.name || 'Misskey', | ||||||
| 			icon: meta.iconUrl, | 			icon: meta.iconUrl, | ||||||
|  | 			themeColor: meta.themeColor, | ||||||
| 		}); | 		}); | ||||||
| 
 | 
 | ||||||
| 		ctx.set('Cache-Control', 'public, max-age=180'); | 		ctx.set('Cache-Control', 'public, max-age=180'); | ||||||
|  | @ -330,6 +334,7 @@ router.get('/gallery/:post', async (ctx, next) => { | ||||||
| 			profile, | 			profile, | ||||||
| 			instanceName: meta.name || 'Misskey', | 			instanceName: meta.name || 'Misskey', | ||||||
| 			icon: meta.iconUrl, | 			icon: meta.iconUrl, | ||||||
|  | 			themeColor: meta.themeColor, | ||||||
| 		}); | 		}); | ||||||
| 
 | 
 | ||||||
| 		ctx.set('Cache-Control', 'public, max-age=180'); | 		ctx.set('Cache-Control', 'public, max-age=180'); | ||||||
|  | @ -353,6 +358,7 @@ router.get('/channels/:channel', async (ctx, next) => { | ||||||
| 			channel: _channel, | 			channel: _channel, | ||||||
| 			instanceName: meta.name || 'Misskey', | 			instanceName: meta.name || 'Misskey', | ||||||
| 			icon: meta.iconUrl, | 			icon: meta.iconUrl, | ||||||
|  | 			themeColor: meta.themeColor, | ||||||
| 		}); | 		}); | ||||||
| 
 | 
 | ||||||
| 		ctx.set('Cache-Control', 'public, max-age=180'); | 		ctx.set('Cache-Control', 'public, max-age=180'); | ||||||
|  | @ -412,6 +418,7 @@ router.get('(.*)', async ctx => { | ||||||
| 		instanceName: meta.name || 'Misskey', | 		instanceName: meta.name || 'Misskey', | ||||||
| 		desc: meta.description, | 		desc: meta.description, | ||||||
| 		icon: meta.iconUrl, | 		icon: meta.iconUrl, | ||||||
|  | 		themeColor: meta.themeColor, | ||||||
| 	}); | 	}); | ||||||
| 	ctx.set('Cache-Control', 'public, max-age=300'); | 	ctx.set('Cache-Control', 'public, max-age=300'); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ module.exports = async (ctx: Koa.Context) => { | ||||||
| 
 | 
 | ||||||
| 	json.short_name = instance.name || 'Misskey'; | 	json.short_name = instance.name || 'Misskey'; | ||||||
| 	json.name = instance.name || 'Misskey'; | 	json.name = instance.name || 'Misskey'; | ||||||
|  | 	if (instance.themeColor) json.theme_color = instance.themeColor; | ||||||
| 
 | 
 | ||||||
| 	ctx.set('Cache-Control', 'max-age=300'); | 	ctx.set('Cache-Control', 'max-age=300'); | ||||||
| 	ctx.body = json; | 	ctx.body = json; | ||||||
|  |  | ||||||
|  | @ -19,8 +19,8 @@ html | ||||||
| 		meta(charset='utf-8') | 		meta(charset='utf-8') | ||||||
| 		meta(name='application-name' content='Misskey') | 		meta(name='application-name' content='Misskey') | ||||||
| 		meta(name='referrer' content='origin') | 		meta(name='referrer' content='origin') | ||||||
| 		meta(name='theme-color' content='#86b300') | 		meta(name='theme-color' content= themeColor || '#86b300') | ||||||
| 		meta(name='theme-color-orig' content='#86b300') | 		meta(name='theme-color-orig' content= themeColor || '#86b300') | ||||||
| 		meta(property='twitter:card' content='summary') | 		meta(property='twitter:card' content='summary') | ||||||
| 		meta(property='og:site_name' content= instanceName || 'Misskey') | 		meta(property='og:site_name' content= instanceName || 'Misskey') | ||||||
| 		meta(name='viewport' content='width=device-width, initial-scale=1') | 		meta(name='viewport' content='width=device-width, initial-scale=1') | ||||||
|  |  | ||||||
|  | @ -341,9 +341,11 @@ function addTag(tag: string) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function focus() { | function focus() { | ||||||
|  | 	if (textareaEl) { | ||||||
| 		textareaEl.focus(); | 		textareaEl.focus(); | ||||||
| 		textareaEl.setSelectionRange(textareaEl.value.length, textareaEl.value.length); | 		textareaEl.setSelectionRange(textareaEl.value.length, textareaEl.value.length); | ||||||
| 	} | 	} | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| function chooseFileFrom(ev) { | function chooseFileFrom(ev) { | ||||||
| 	selectFiles(ev.currentTarget ?? ev.target, i18n.ts.attachFile).then(files_ => { | 	selectFiles(ev.currentTarget ?? ev.target, i18n.ts.attachFile).then(files_ => { | ||||||
|  |  | ||||||
|  | @ -25,6 +25,12 @@ | ||||||
| 				<template #label>{{ $ts.backgroundImageUrl }}</template> | 				<template #label>{{ $ts.backgroundImageUrl }}</template> | ||||||
| 			</FormInput> | 			</FormInput> | ||||||
| 
 | 
 | ||||||
|  | 			<FormInput v-model="themeColor" class="_formBlock"> | ||||||
|  | 				<template #prefix><i class="fas fa-palette"></i></template> | ||||||
|  | 				<template #label>{{ $ts.themeColor }}</template> | ||||||
|  | 				<template #caption>#RRGGBB</template> | ||||||
|  | 			</FormInput> | ||||||
|  | 
 | ||||||
| 			<FormInput v-model="tosUrl" class="_formBlock"> | 			<FormInput v-model="tosUrl" class="_formBlock"> | ||||||
| 				<template #prefix><i class="fas fa-link"></i></template> | 				<template #prefix><i class="fas fa-link"></i></template> | ||||||
| 				<template #label>{{ $ts.tosUrl }}</template> | 				<template #label>{{ $ts.tosUrl }}</template> | ||||||
|  | @ -179,6 +185,7 @@ export default defineComponent({ | ||||||
| 			iconUrl: null, | 			iconUrl: null, | ||||||
| 			bannerUrl: null, | 			bannerUrl: null, | ||||||
| 			backgroundImageUrl: null, | 			backgroundImageUrl: null, | ||||||
|  | 			themeColor: null, | ||||||
| 			maxNoteTextLength: 0, | 			maxNoteTextLength: 0, | ||||||
| 			enableLocalTimeline: false, | 			enableLocalTimeline: false, | ||||||
| 			enableGlobalTimeline: false, | 			enableGlobalTimeline: false, | ||||||
|  | @ -206,6 +213,7 @@ export default defineComponent({ | ||||||
| 			this.iconUrl = meta.iconUrl; | 			this.iconUrl = meta.iconUrl; | ||||||
| 			this.bannerUrl = meta.bannerUrl; | 			this.bannerUrl = meta.bannerUrl; | ||||||
| 			this.backgroundImageUrl = meta.backgroundImageUrl; | 			this.backgroundImageUrl = meta.backgroundImageUrl; | ||||||
|  | 			this.themeColor = meta.themeColor; | ||||||
| 			this.maintainerName = meta.maintainerName; | 			this.maintainerName = meta.maintainerName; | ||||||
| 			this.maintainerEmail = meta.maintainerEmail; | 			this.maintainerEmail = meta.maintainerEmail; | ||||||
| 			this.maxNoteTextLength = meta.maxNoteTextLength; | 			this.maxNoteTextLength = meta.maxNoteTextLength; | ||||||
|  | @ -233,6 +241,7 @@ export default defineComponent({ | ||||||
| 				iconUrl: this.iconUrl, | 				iconUrl: this.iconUrl, | ||||||
| 				bannerUrl: this.bannerUrl, | 				bannerUrl: this.bannerUrl, | ||||||
| 				backgroundImageUrl: this.backgroundImageUrl, | 				backgroundImageUrl: this.backgroundImageUrl, | ||||||
|  | 				themeColor: this.themeColor === '' ? null : this.themeColor, | ||||||
| 				maintainerName: this.maintainerName, | 				maintainerName: this.maintainerName, | ||||||
| 				maintainerEmail: this.maintainerEmail, | 				maintainerEmail: this.maintainerEmail, | ||||||
| 				maxNoteTextLength: this.maxNoteTextLength, | 				maxNoteTextLength: this.maxNoteTextLength, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue