Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ファイルの閲覧注意フラグをファイル単位で連合するようにし、また、フラグを変更した場合は再投稿時などでリモートにも反映するようにして欲しい #11209

Closed
Sayamame-beans opened this issue Jul 9, 2023 · 10 comments · Fixed by #13879
Labels
✨Feature This adds/improves/enhances a feature 🌌Federation The Federation/ActivityPub feature

Comments

@Sayamame-beans
Copy link
Member

Sayamame-beans commented Jul 9, 2023

Summary

今のところ、ファイルの閲覧注意フラグを変更したとしても他のサーバーには(一度届いてから後は)一切反映されません。
これ自体は"ドライブ"システムによりファイルエントリ(?)を再利用することに起因する致し方のないことだと推測出来ます。
ですが、ドライブ画面から閲覧注意フラグを切り替えられる以上、例えば画像の閲覧注意設定を付け忘れて投稿してしまい、それを変更して、ノートを再投稿したとしてもその変更が反映されないのは非直感的で、不便であると思いました。
また、サーバーごとに規約が異なることによるモデレーション上の厄介な点もあります。(リモートで付いているがローカルで付いていない場合の対処)

<追記>
更に、閲覧注意がファイル単位ではなくノート単位で適用されているため、閲覧注意が本来付いていないファイルにも閲覧注意が付与されてしまう問題があります。
<追記終わり>

そこで、現在は以下のようになっているところ、

  • 画像の閲覧注意フラグはいつでも変更可能
  • リモートでは、ノート内の新規ファイルの1つにフラグが付いていたら、その他の新規ファイルにもフラグが付く(恐らく、ActivityPub的にノート単位でのフラグになっている)
  • ローカルではいつ変更しても反映されて、リモートでは新規ファイルが認識された時点のフラグを利用し更新されない

以下のようにするというのは実現可能でしょうか?

  • 画像の閲覧注意フラグ自体はいつでも変更可能(変わらず)
  • リモートでもファイル単位でフラグが反映されるようにする
    (ファイル単位のフラグ情報を、ActivityPub用のフラグ情報とは別に用意する)
  • ローカルではいつ変更しても反映されて、リモートでは新規ノート認識時の閲覧注意フラグを利用する
    (画像が別のノートで投稿された場合に、フラグの変化が反映されるようにする)

懸念点として

  • 新規投稿かRenoteかを区別することが出来るのかどうか
    (区別することが出来なければ、任意のリモートからのRenoteで更新されてしまいそうです。元サーバーからの更新だけ反映するようにしたとしても、ローカルでモデレーションとして閲覧注意を付与したものが元サーバーからのRenoteで剥がされる可能性があると推測します。)

があります。
追記: ActivityPub上では、新規投稿はCreate、RenoteはAnnounceとして区別されているので、その点については大丈夫という情報を頂きました。

なお、MisskeyからMastodonへの配送の場合は、ドライブの概念が無いことから(?)再投稿されるとその時点の閲覧注意フラグが反映されるようでした。
参考:
https://misskey.niri.la/notes/9gymuixsfg
https://misskey.niri.la/notes/9gymz1z11e

@Sayamame-beans Sayamame-beans added the ✨Feature This adds/improves/enhances a feature label Jul 9, 2023
@Sayamame-beans Sayamame-beans changed the title ファイルの閲覧注意フラグの変更を、再投稿時などにリモートにも反映されるようにして欲しい ファイルの閲覧注意フラグをファイル単位で連合するようにし、また、フラグを変更した場合は再投稿時などでリモートにも反映するようにして欲しい Mar 21, 2024
@Sayamame-beans
Copy link
Member Author

タイトルと説明が、issue投稿時の意図に即していなかったことに気付いたため、少し修正しました。

@KisaragiEffective
Copy link
Collaborator

このふるまいは連合結果を容易に確認できないユーザーには不本意と思われます。
実際、送信するときはこのふるまいを意識しないと個別に分けられているものだと気づかず、受信するときは送信者がすべてフラグを立てることを意図したように思えてしまいます。

@KisaragiEffective
Copy link
Collaborator

KisaragiEffective commented Mar 21, 2024

bisected: #2348:

NSFW, 非NSFWが混在している場合に、
リモートへは(Misskey向けでも)全ファイルNSFWで伝わるが
通信相手がMastodonかMisskeyを区別できないので仕方ない。

@KisaragiEffective
Copy link
Collaborator

bisected: #2348:

NSFW, 非NSFWが混在している場合に、
リモートへは(Misskey向けでも)全ファイルNSFWで伝わるが
通信相手がMastodonかMisskeyを区別できないので仕方ない。

const displayAsSensitive = (note, file) => (note.fromMastodon && note.isSensitive) || 
  file.isSensitive

のような形で実現されてほしい。note.fromMastodonは今日であればnodeinfoから取得できそう

@KisaragiEffective
Copy link
Collaborator

related:

sensitive: note.sensitive, // Noteがsensitiveなら添付もsensitiveにする

@KisaragiEffective
Copy link
Collaborator

ApNoteServiceにおけるイメージ (todoはホール):

		const fetchInstanceMetadataService: FederatedInstanceService = todo();
		const host: string = todo(note);
		const fromMastodon = await fetchInstanceMetadataService.fetch(host)
			// 安全性のために`true`へフォールバック
			.then(instance => instance.softwareName?.includes("mastodon") ?? true);

		const hasSensitiveFlag: (arg: unknown) => arg is { sensitive: unknown } = (x) => typeof(x) === "object" && x !== null && "sensitive" in x;

		const files = (await Promise.all(toArray(note.attachment).map(attach => {
			// if attach is IApImage, sensitive should be `attach.sensitive` instead of note.sensitive
			const markAsSensitive = (fromMastodon && note.sensitive) || (hasSensitiveFlag(attach) && attach.sensitive === true);
			
			return limit(() => this.apImageService.resolveImage(actor, {
				...attach,
				sensitive: markAsSensitive,
			}));
		})));

@Sayamame-beans
Copy link
Member Author

bisected: #2348:

NSFW, 非NSFWが混在している場合に、
リモートへは(Misskey向けでも)全ファイルNSFWで伝わるが
通信相手がMastodonかMisskeyを区別できないので仕方ない。

const displayAsSensitive = (note, file) => (note.fromMastodon && note.isSensitive) || 
  file.isSensitive

のような形で実現されてほしい。note.fromMastodonは今日であればnodeinfoから取得できそう

個人的にはMisskey/Mastodonを判別する必要は無いと思っています。
(個別のファイル情報としてフラグ情報を追加する前提においては、)個別のファイル情報にフラグ情報があるならそこのフラグを参照して、無ければノート全体のフラグを参照する従来の方式を取れば良いかなぁと

@KisaragiEffective
Copy link
Collaborator

(確かにそっちの方が相互運用性も高そうですね)

@KisaragiEffective
Copy link
Collaborator

KisaragiEffective commented Mar 21, 2024

(確かにそっちの方が相互運用性も高そうですね)

ということで修正版:

		function hasSensitiveFlag(obj: unknown): obj is { sensitive: unknown } {
			return typeof(obj) === "object" && obj !== null && "sensitive" in obj;
		}

		const files = (await Promise.all(toArray(note.attachment).map(attach => {
			// if attach has property "sensitive" (i.e. `IApImage` returned from `ApRendererService.renderImage`), 
			// sensitive should be `attach.sensitive` instead of `note.sensitive`
			const markAsSensitive = (hasSensitiveFlag(attach) && attach.sensitive === true) || note.sensitive;

			return limit(() => this.apImageService.resolveImage(actor, {
				...attach,
				sensitive: markAsSensitive,
			}));
		})));

↑これだと引き続きnote.sensitiveが立てられていた時にmarkAsSensitivetrueになってしまうのでよくないかも

@mei23
Copy link
Contributor

mei23 commented Apr 28, 2024

また、フラグを変更した場合は再投稿時などでリモートにも反映するようにして欲しい

ドライブファイルをid付きのAP Object扱いで公開して (現状はNote.attachmentに付いてるidなしオブジェクト)
フラグ更新時にUpdate Documentを送るようにした方がMisskey同士の連合ではいいかも。

DriveFile→添付されているNote→送信対象 を出すのがちょっと負荷高そう?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨Feature This adds/improves/enhances a feature 🌌Federation The Federation/ActivityPub feature
Projects
None yet
3 participants