mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
feat: support blur processing for NSFW content with customizable NSFW tags (#4407)
This commit is contained in:
@@ -116,6 +116,10 @@ message WorkspaceMemoRelatedSetting {
|
|||||||
repeated string reactions = 10;
|
repeated string reactions = 10;
|
||||||
// disable_markdown_shortcuts disallow the registration of markdown shortcuts.
|
// disable_markdown_shortcuts disallow the registration of markdown shortcuts.
|
||||||
bool disable_markdown_shortcuts = 11;
|
bool disable_markdown_shortcuts = 11;
|
||||||
|
// enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
|
||||||
|
bool enable_blur_nsfw_content = 12;
|
||||||
|
// nsfw_tags is the list of tags that mark content as NSFW for blurring.
|
||||||
|
repeated string nsfw_tags = 13;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetWorkspaceSettingRequest {
|
message GetWorkspaceSettingRequest {
|
||||||
|
@@ -466,6 +466,10 @@ type WorkspaceMemoRelatedSetting struct {
|
|||||||
Reactions []string `protobuf:"bytes,10,rep,name=reactions,proto3" json:"reactions,omitempty"`
|
Reactions []string `protobuf:"bytes,10,rep,name=reactions,proto3" json:"reactions,omitempty"`
|
||||||
// disable_markdown_shortcuts disallow the registration of markdown shortcuts.
|
// disable_markdown_shortcuts disallow the registration of markdown shortcuts.
|
||||||
DisableMarkdownShortcuts bool `protobuf:"varint,11,opt,name=disable_markdown_shortcuts,json=disableMarkdownShortcuts,proto3" json:"disable_markdown_shortcuts,omitempty"`
|
DisableMarkdownShortcuts bool `protobuf:"varint,11,opt,name=disable_markdown_shortcuts,json=disableMarkdownShortcuts,proto3" json:"disable_markdown_shortcuts,omitempty"`
|
||||||
|
// enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
|
||||||
|
EnableBlurNsfwContent bool `protobuf:"varint,12,opt,name=enable_blur_nsfw_content,json=enableBlurNsfwContent,proto3" json:"enable_blur_nsfw_content,omitempty"`
|
||||||
|
// nsfw_tags is the list of tags that mark content as NSFW for blurring.
|
||||||
|
NsfwTags []string `protobuf:"bytes,13,rep,name=nsfw_tags,json=nsfwTags,proto3" json:"nsfw_tags,omitempty"`
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
@@ -570,6 +574,20 @@ func (x *WorkspaceMemoRelatedSetting) GetDisableMarkdownShortcuts() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *WorkspaceMemoRelatedSetting) GetEnableBlurNsfwContent() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.EnableBlurNsfwContent
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *WorkspaceMemoRelatedSetting) GetNsfwTags() []string {
|
||||||
|
if x != nil {
|
||||||
|
return x.NsfwTags
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type GetWorkspaceSettingRequest struct {
|
type GetWorkspaceSettingRequest struct {
|
||||||
state protoimpl.MessageState `protogen:"open.v1"`
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
// The resource name of the workspace setting.
|
// The resource name of the workspace setting.
|
||||||
@@ -853,7 +871,7 @@ var file_api_v1_workspace_setting_service_proto_rawDesc = string([]byte{
|
|||||||
0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c,
|
0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c,
|
||||||
0x0a, 0x08, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05,
|
0x0a, 0x08, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05,
|
||||||
0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x53, 0x33, 0x10, 0x03, 0x22,
|
0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x53, 0x33, 0x10, 0x03, 0x22,
|
||||||
0x8b, 0x04, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d,
|
0xe1, 0x04, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d,
|
||||||
0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12,
|
0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12,
|
||||||
0x3c, 0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x75, 0x62, 0x6c,
|
0x3c, 0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x75, 0x62, 0x6c,
|
||||||
0x69, 0x63, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20,
|
0x69, 0x63, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20,
|
||||||
@@ -885,50 +903,55 @@ var file_api_v1_workspace_setting_service_proto_rawDesc = string([]byte{
|
|||||||
0x3c, 0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x64,
|
0x3c, 0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x64,
|
||||||
0x6f, 0x77, 0x6e, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x18, 0x0b, 0x20,
|
0x6f, 0x77, 0x6e, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x18, 0x0b, 0x20,
|
||||||
0x01, 0x28, 0x08, 0x52, 0x18, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x72, 0x6b,
|
0x01, 0x28, 0x08, 0x52, 0x18, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x72, 0x6b,
|
||||||
0x64, 0x6f, 0x77, 0x6e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x22, 0x36, 0x0a,
|
0x64, 0x6f, 0x77, 0x6e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x12, 0x37, 0x0a,
|
||||||
0x1a, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74,
|
0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x6c, 0x75, 0x72, 0x5f, 0x6e, 0x73, 0x66,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x04, 0x6e,
|
0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52,
|
||||||
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52,
|
0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6c, 0x75, 0x72, 0x4e, 0x73, 0x66, 0x77, 0x43,
|
||||||
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x56, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b,
|
0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x73, 0x66, 0x77, 0x5f, 0x74,
|
||||||
0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75,
|
0x61, 0x67, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x73, 0x66, 0x77, 0x54,
|
||||||
0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01,
|
0x61, 0x67, 0x73, 0x22, 0x36, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70,
|
||||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
|
0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||||
0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74,
|
0x74, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0xd9, 0x02,
|
0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x56, 0x0a, 0x1a, 0x53,
|
||||||
0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69,
|
0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69,
|
||||||
0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x13, 0x47, 0x65,
|
0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x74,
|
||||||
0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x65, 0x6d,
|
||||||
0x67, 0x12, 0x28, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31,
|
0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70,
|
||||||
0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74,
|
0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x73, 0x65, 0x74, 0x74,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6d, 0x65,
|
0x69, 0x6e, 0x67, 0x32, 0xd9, 0x02, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
|
||||||
0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73,
|
0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
|
||||||
0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x32, 0xda, 0x41, 0x04,
|
0x93, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
|
||||||
0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69,
|
|
||||||
0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e,
|
|
||||||
0x61, 0x6d, 0x65, 0x3d, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x2a, 0x7d, 0x12,
|
|
||||||
0xa7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
|
|
||||||
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
|
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
|
||||||
0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70,
|
0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70,
|
||||||
0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||||
0x74, 0x1a, 0x1e, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31,
|
0x74, 0x1a, 0x1e, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31,
|
||||||
0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
||||||
0x67, 0x22, 0x46, 0xda, 0x41, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4,
|
0x67, 0x22, 0x32, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25,
|
||||||
0x93, 0x02, 0x36, 0x3a, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2b, 0x2f, 0x61,
|
0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70,
|
||||||
0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f,
|
0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
||||||
0x7b, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x73, 0x65,
|
0x67, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xa7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72,
|
||||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x2a, 0x7d, 0x42, 0xb4, 0x01, 0x0a, 0x10, 0x63, 0x6f,
|
0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x2e,
|
||||||
0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x1c,
|
0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74,
|
||||||
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30,
|
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
|
||||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65,
|
0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
|
||||||
0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
|
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x46, 0xda, 0x41, 0x07, 0x73, 0x65, 0x74, 0x74,
|
||||||
0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31,
|
0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69,
|
||||||
0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41,
|
0x6e, 0x67, 0x32, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b,
|
||||||
0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70,
|
0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x6e,
|
||||||
0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69,
|
0x61, 0x6d, 0x65, 0x3d, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x2a, 0x7d, 0x42,
|
||||||
0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
|
0xb4, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70,
|
||||||
0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31,
|
0x69, 0x2e, 0x76, 0x31, 0x42, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53,
|
||||||
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
|
||||||
|
0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||||
|
0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f,
|
||||||
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31,
|
||||||
|
0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d,
|
||||||
|
0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x4d, 0x65,
|
||||||
|
0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d,
|
||||||
|
0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74,
|
||||||
|
0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41,
|
||||||
|
0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
})
|
})
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@@ -2336,6 +2336,14 @@ definitions:
|
|||||||
disableMarkdownShortcuts:
|
disableMarkdownShortcuts:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: disable_markdown_shortcuts disallow the registration of markdown shortcuts.
|
description: disable_markdown_shortcuts disallow the registration of markdown shortcuts.
|
||||||
|
enableBlurNsfwContent:
|
||||||
|
type: boolean
|
||||||
|
description: enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
|
||||||
|
nsfwTags:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: nsfw_tags is the list of tags that mark content as NSFW for blurring.
|
||||||
apiv1WorkspaceSetting:
|
apiv1WorkspaceSetting:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
@@ -677,6 +677,10 @@ type WorkspaceMemoRelatedSetting struct {
|
|||||||
Reactions []string `protobuf:"bytes,10,rep,name=reactions,proto3" json:"reactions,omitempty"`
|
Reactions []string `protobuf:"bytes,10,rep,name=reactions,proto3" json:"reactions,omitempty"`
|
||||||
// disable markdown shortcuts
|
// disable markdown shortcuts
|
||||||
DisableMarkdownShortcuts bool `protobuf:"varint,11,opt,name=disable_markdown_shortcuts,json=disableMarkdownShortcuts,proto3" json:"disable_markdown_shortcuts,omitempty"`
|
DisableMarkdownShortcuts bool `protobuf:"varint,11,opt,name=disable_markdown_shortcuts,json=disableMarkdownShortcuts,proto3" json:"disable_markdown_shortcuts,omitempty"`
|
||||||
|
// enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
|
||||||
|
EnableBlurNsfwContent bool `protobuf:"varint,12,opt,name=enable_blur_nsfw_content,json=enableBlurNsfwContent,proto3" json:"enable_blur_nsfw_content,omitempty"`
|
||||||
|
// nsfw_tags is the list of tags that mark content as NSFW for blurring.
|
||||||
|
NsfwTags []string `protobuf:"bytes,13,rep,name=nsfw_tags,json=nsfwTags,proto3" json:"nsfw_tags,omitempty"`
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
@@ -781,6 +785,20 @@ func (x *WorkspaceMemoRelatedSetting) GetDisableMarkdownShortcuts() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *WorkspaceMemoRelatedSetting) GetEnableBlurNsfwContent() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.EnableBlurNsfwContent
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *WorkspaceMemoRelatedSetting) GetNsfwTags() []string {
|
||||||
|
if x != nil {
|
||||||
|
return x.NsfwTags
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
var File_store_workspace_setting_proto protoreflect.FileDescriptor
|
var File_store_workspace_setting_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
var file_store_workspace_setting_proto_rawDesc = string([]byte{
|
var file_store_workspace_setting_proto_rawDesc = string([]byte{
|
||||||
@@ -893,7 +911,7 @@ var file_store_workspace_setting_proto_rawDesc = string([]byte{
|
|||||||
0x6b, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
|
0x6b, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
|
||||||
0x74, 0x12, 0x24, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x74,
|
0x74, 0x12, 0x24, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x74,
|
||||||
0x79, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x50, 0x61,
|
0x79, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x50, 0x61,
|
||||||
0x74, 0x68, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x22, 0x8b, 0x04, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b,
|
0x74, 0x68, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x22, 0xe1, 0x04, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b,
|
||||||
0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64,
|
0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64,
|
||||||
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x3c, 0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x6c,
|
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x3c, 0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x6c,
|
||||||
0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62,
|
0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62,
|
||||||
@@ -926,25 +944,30 @@ var file_store_workspace_setting_proto_rawDesc = string([]byte{
|
|||||||
0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x73, 0x68, 0x6f, 0x72,
|
0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x73, 0x68, 0x6f, 0x72,
|
||||||
0x74, 0x63, 0x75, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x64, 0x69, 0x73,
|
0x74, 0x63, 0x75, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x64, 0x69, 0x73,
|
||||||
0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x68, 0x6f, 0x72,
|
0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x68, 0x6f, 0x72,
|
||||||
0x74, 0x63, 0x75, 0x74, 0x73, 0x2a, 0x73, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
|
0x74, 0x63, 0x75, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f,
|
||||||
0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x21,
|
0x62, 0x6c, 0x75, 0x72, 0x5f, 0x6e, 0x73, 0x66, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
|
||||||
0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e,
|
0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42,
|
||||||
0x47, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
|
0x6c, 0x75, 0x72, 0x4e, 0x73, 0x66, 0x77, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b,
|
||||||
0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x0b,
|
0x0a, 0x09, 0x6e, 0x73, 0x66, 0x77, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28,
|
||||||
0x0a, 0x07, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53,
|
0x09, 0x52, 0x08, 0x6e, 0x73, 0x66, 0x77, 0x54, 0x61, 0x67, 0x73, 0x2a, 0x73, 0x0a, 0x13, 0x57,
|
||||||
0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x45, 0x4d, 0x4f,
|
0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b,
|
||||||
0x5f, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x42, 0xa0, 0x01, 0x0a, 0x0f, 0x63,
|
0x65, 0x79, 0x12, 0x25, 0x0a, 0x21, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f,
|
||||||
0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x15,
|
0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50,
|
||||||
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x41, 0x53,
|
||||||
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
0x49, 0x43, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x10,
|
||||||
0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d,
|
0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x10,
|
||||||
0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x73, 0x74, 0x6f,
|
0x0a, 0x0c, 0x4d, 0x45, 0x4d, 0x4f, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x45, 0x44, 0x10, 0x04,
|
||||||
0x72, 0x65, 0xa2, 0x02, 0x03, 0x4d, 0x53, 0x58, 0xaa, 0x02, 0x0b, 0x4d, 0x65, 0x6d, 0x6f, 0x73,
|
0x42, 0xa0, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x73,
|
||||||
0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0b, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x53,
|
0x74, 0x6f, 0x72, 0x65, 0x42, 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53,
|
||||||
0x74, 0x6f, 0x72, 0x65, 0xe2, 0x02, 0x17, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x6f,
|
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x67,
|
||||||
0x72, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02,
|
0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d,
|
||||||
0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70,
|
0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x65, 0x6e, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0xa2, 0x02, 0x03, 0x4d, 0x53, 0x58, 0xaa, 0x02,
|
||||||
|
0x0b, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0b, 0x4d,
|
||||||
|
0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0xe2, 0x02, 0x17, 0x4d, 0x65, 0x6d,
|
||||||
|
0x6f, 0x73, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61,
|
||||||
|
0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74,
|
||||||
|
0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
})
|
})
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@@ -115,4 +115,8 @@ message WorkspaceMemoRelatedSetting {
|
|||||||
repeated string reactions = 10;
|
repeated string reactions = 10;
|
||||||
// disable markdown shortcuts
|
// disable markdown shortcuts
|
||||||
bool disable_markdown_shortcuts = 11;
|
bool disable_markdown_shortcuts = 11;
|
||||||
|
// enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
|
||||||
|
bool enable_blur_nsfw_content = 12;
|
||||||
|
// nsfw_tags is the list of tags that mark content as NSFW for blurring.
|
||||||
|
repeated string nsfw_tags = 13;
|
||||||
}
|
}
|
||||||
|
@@ -239,6 +239,8 @@ func convertWorkspaceMemoRelatedSettingFromStore(setting *storepb.WorkspaceMemoR
|
|||||||
EnableLocation: setting.EnableLocation,
|
EnableLocation: setting.EnableLocation,
|
||||||
Reactions: setting.Reactions,
|
Reactions: setting.Reactions,
|
||||||
DisableMarkdownShortcuts: setting.DisableMarkdownShortcuts,
|
DisableMarkdownShortcuts: setting.DisableMarkdownShortcuts,
|
||||||
|
EnableBlurNsfwContent: setting.EnableBlurNsfwContent,
|
||||||
|
NsfwTags: setting.NsfwTags,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,5 +259,7 @@ func convertWorkspaceMemoRelatedSettingToStore(setting *v1pb.WorkspaceMemoRelate
|
|||||||
EnableLocation: setting.EnableLocation,
|
EnableLocation: setting.EnableLocation,
|
||||||
Reactions: setting.Reactions,
|
Reactions: setting.Reactions,
|
||||||
DisableMarkdownShortcuts: setting.DisableMarkdownShortcuts,
|
DisableMarkdownShortcuts: setting.DisableMarkdownShortcuts,
|
||||||
|
EnableBlurNsfwContent: setting.EnableBlurNsfwContent,
|
||||||
|
NsfwTags: setting.NsfwTags,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -143,6 +143,9 @@ const DefaultContentLengthLimit = 8 * 1024
|
|||||||
// DefaultReactions is the default reactions for memo related setting.
|
// DefaultReactions is the default reactions for memo related setting.
|
||||||
var DefaultReactions = []string{"👍", "👎", "❤️", "🎉", "😄", "😕", "😢", "😡"}
|
var DefaultReactions = []string{"👍", "👎", "❤️", "🎉", "😄", "😕", "😢", "😡"}
|
||||||
|
|
||||||
|
// DefaultNsfwTags is the default tags that mark content as NSFW for blurring.
|
||||||
|
var DefaultNsfwTags = []string{"nsfw"}
|
||||||
|
|
||||||
func (s *Store) GetWorkspaceMemoRelatedSetting(ctx context.Context) (*storepb.WorkspaceMemoRelatedSetting, error) {
|
func (s *Store) GetWorkspaceMemoRelatedSetting(ctx context.Context) (*storepb.WorkspaceMemoRelatedSetting, error) {
|
||||||
workspaceSetting, err := s.GetWorkspaceSetting(ctx, &FindWorkspaceSetting{
|
workspaceSetting, err := s.GetWorkspaceSetting(ctx, &FindWorkspaceSetting{
|
||||||
Name: storepb.WorkspaceSettingKey_MEMO_RELATED.String(),
|
Name: storepb.WorkspaceSettingKey_MEMO_RELATED.String(),
|
||||||
@@ -161,6 +164,9 @@ func (s *Store) GetWorkspaceMemoRelatedSetting(ctx context.Context) (*storepb.Wo
|
|||||||
if len(workspaceMemoRelatedSetting.Reactions) == 0 {
|
if len(workspaceMemoRelatedSetting.Reactions) == 0 {
|
||||||
workspaceMemoRelatedSetting.Reactions = append(workspaceMemoRelatedSetting.Reactions, DefaultReactions...)
|
workspaceMemoRelatedSetting.Reactions = append(workspaceMemoRelatedSetting.Reactions, DefaultReactions...)
|
||||||
}
|
}
|
||||||
|
if len(workspaceMemoRelatedSetting.NsfwTags) == 0 {
|
||||||
|
workspaceMemoRelatedSetting.NsfwTags = append(workspaceMemoRelatedSetting.NsfwTags, DefaultNsfwTags...)
|
||||||
|
}
|
||||||
s.workspaceSettingCache.Store(storepb.WorkspaceSettingKey_MEMO_RELATED.String(), &storepb.WorkspaceSetting{
|
s.workspaceSettingCache.Store(storepb.WorkspaceSettingKey_MEMO_RELATED.String(), &storepb.WorkspaceSetting{
|
||||||
Key: storepb.WorkspaceSettingKey_MEMO_RELATED,
|
Key: storepb.WorkspaceSettingKey_MEMO_RELATED,
|
||||||
Value: &storepb.WorkspaceSetting_MemoRelatedSetting{MemoRelatedSetting: workspaceMemoRelatedSetting},
|
Value: &storepb.WorkspaceSetting_MemoRelatedSetting{MemoRelatedSetting: workspaceMemoRelatedSetting},
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { Tooltip } from "@mui/joy";
|
import { Tooltip } from "@mui/joy";
|
||||||
import { BookmarkIcon, MessageCircleMoreIcon } from "lucide-react";
|
import { BookmarkIcon, EyeOffIcon, MessageCircleMoreIcon } from "lucide-react";
|
||||||
import { memo, useCallback, useRef, useState } from "react";
|
import { memo, useCallback, useRef, useState } from "react";
|
||||||
import { Link, useLocation } from "react-router-dom";
|
import { Link, useLocation } from "react-router-dom";
|
||||||
import useAsyncEffect from "@/hooks/useAsyncEffect";
|
import useAsyncEffect from "@/hooks/useAsyncEffect";
|
||||||
@@ -32,6 +32,7 @@ interface Props {
|
|||||||
showCreator?: boolean;
|
showCreator?: boolean;
|
||||||
showVisibility?: boolean;
|
showVisibility?: boolean;
|
||||||
showPinned?: boolean;
|
showPinned?: boolean;
|
||||||
|
showNsfwContent?: boolean;
|
||||||
className?: string;
|
className?: string;
|
||||||
parentPage?: string;
|
parentPage?: string;
|
||||||
}
|
}
|
||||||
@@ -47,6 +48,7 @@ const MemoView: React.FC<Props> = (props: Props) => {
|
|||||||
const userStatsStore = useUserStatsStore();
|
const userStatsStore = useUserStatsStore();
|
||||||
const [showEditor, setShowEditor] = useState<boolean>(false);
|
const [showEditor, setShowEditor] = useState<boolean>(false);
|
||||||
const [creator, setCreator] = useState(userStore.getUserByName(memo.creator));
|
const [creator, setCreator] = useState(userStore.getUserByName(memo.creator));
|
||||||
|
const [showNSFWContent, setShowNSFWContent] = useState(props.showNsfwContent);
|
||||||
const memoContainerRef = useRef<HTMLDivElement>(null);
|
const memoContainerRef = useRef<HTMLDivElement>(null);
|
||||||
const workspaceMemoRelatedSetting = workspaceStore.state.memoRelatedSetting;
|
const workspaceMemoRelatedSetting = workspaceStore.state.memoRelatedSetting;
|
||||||
const referencedMemos = memo.relations.filter((relation) => relation.type === MemoRelation_Type.REFERENCE);
|
const referencedMemos = memo.relations.filter((relation) => relation.type === MemoRelation_Type.REFERENCE);
|
||||||
@@ -58,6 +60,9 @@ const MemoView: React.FC<Props> = (props: Props) => {
|
|||||||
const readonly = memo.creator !== user?.name && !isSuperUser(user);
|
const readonly = memo.creator !== user?.name && !isSuperUser(user);
|
||||||
const isInMemoDetailPage = location.pathname.startsWith(`/${memo.name}`);
|
const isInMemoDetailPage = location.pathname.startsWith(`/${memo.name}`);
|
||||||
const parentPage = props.parentPage || location.pathname;
|
const parentPage = props.parentPage || location.pathname;
|
||||||
|
const nsfw =
|
||||||
|
workspaceMemoRelatedSetting.enableBlurNsfwContent &&
|
||||||
|
memo.tags?.some((tag) => workspaceMemoRelatedSetting.nsfwTags.includes(tag.toLowerCase()));
|
||||||
|
|
||||||
// Initial related data: creator.
|
// Initial related data: creator.
|
||||||
useAsyncEffect(async () => {
|
useAsyncEffect(async () => {
|
||||||
@@ -204,9 +209,20 @@ const MemoView: React.FC<Props> = (props: Props) => {
|
|||||||
</span>
|
</span>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
|
{nsfw && showNSFWContent && (
|
||||||
|
<span className="cursor-pointer">
|
||||||
|
<EyeOffIcon className="w-4 h-auto text-amber-500" onClick={() => setShowNSFWContent(false)} />
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
<MemoActionMenu className="-ml-1" memo={memo} readonly={readonly} onEdit={() => setShowEditor(true)} />
|
<MemoActionMenu className="-ml-1" memo={memo} readonly={readonly} onEdit={() => setShowEditor(true)} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
className={cn(
|
||||||
|
"flex flex-col justify-start items-start w-full",
|
||||||
|
nsfw && !showNSFWContent && "blur-lg transition-all duration-200",
|
||||||
|
)}
|
||||||
|
>
|
||||||
<MemoContent
|
<MemoContent
|
||||||
key={`${memo.name}-${memo.updateTime}`}
|
key={`${memo.name}-${memo.updateTime}`}
|
||||||
memoName={memo.name}
|
memoName={memo.name}
|
||||||
@@ -221,6 +237,18 @@ const MemoView: React.FC<Props> = (props: Props) => {
|
|||||||
<MemoResourceListView resources={memo.resources} />
|
<MemoResourceListView resources={memo.resources} />
|
||||||
<MemoRelationListView memo={memo} relations={referencedMemos} parentPage={parentPage} />
|
<MemoRelationListView memo={memo} relations={referencedMemos} parentPage={parentPage} />
|
||||||
<MemoReactionistView memo={memo} reactions={memo.reactions} />
|
<MemoReactionistView memo={memo} reactions={memo.reactions} />
|
||||||
|
</div>
|
||||||
|
{nsfw && !showNSFWContent && (
|
||||||
|
<>
|
||||||
|
<div className="absolute inset-0 bg-transparent" />
|
||||||
|
<button
|
||||||
|
className="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 py-2 px-4 text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300 border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-zinc-800"
|
||||||
|
onClick={() => setShowNSFWContent(true)}
|
||||||
|
>
|
||||||
|
{t("memo.click-to-show-nsfw-content")}
|
||||||
|
</button>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -15,6 +15,7 @@ const MemoRelatedSettings = () => {
|
|||||||
const originalSetting = workspaceStore.state.memoRelatedSetting;
|
const originalSetting = workspaceStore.state.memoRelatedSetting;
|
||||||
const [memoRelatedSetting, setMemoRelatedSetting] = useState<WorkspaceMemoRelatedSetting>(originalSetting);
|
const [memoRelatedSetting, setMemoRelatedSetting] = useState<WorkspaceMemoRelatedSetting>(originalSetting);
|
||||||
const [editingReaction, setEditingReaction] = useState<string>("");
|
const [editingReaction, setEditingReaction] = useState<string>("");
|
||||||
|
const [editingNsfwTag, setEditingNsfwTag] = useState<string>("");
|
||||||
|
|
||||||
const updatePartialSetting = (partial: Partial<WorkspaceMemoRelatedSetting>) => {
|
const updatePartialSetting = (partial: Partial<WorkspaceMemoRelatedSetting>) => {
|
||||||
const newWorkspaceMemoRelatedSetting = WorkspaceMemoRelatedSetting.fromPartial({
|
const newWorkspaceMemoRelatedSetting = WorkspaceMemoRelatedSetting.fromPartial({
|
||||||
@@ -33,6 +34,15 @@ const MemoRelatedSettings = () => {
|
|||||||
setEditingReaction("");
|
setEditingReaction("");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const upsertNsfwTags = () => {
|
||||||
|
if (!editingNsfwTag) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
updatePartialSetting({ nsfwTags: uniq([...memoRelatedSetting.nsfwTags, editingNsfwTag.trim()]) });
|
||||||
|
setEditingNsfwTag("");
|
||||||
|
};
|
||||||
|
|
||||||
const updateSetting = async () => {
|
const updateSetting = async () => {
|
||||||
if (memoRelatedSetting.reactions.length === 0) {
|
if (memoRelatedSetting.reactions.length === 0) {
|
||||||
toast.error("Reactions must not be empty.");
|
toast.error("Reactions must not be empty.");
|
||||||
@@ -155,6 +165,47 @@ const MemoRelatedSettings = () => {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="w-full">
|
||||||
|
<div className="w-full flex flex-row justify-between items-center">
|
||||||
|
<span>{t("setting.memo-related-settings.enable-blur-nsfw-content")}</span>
|
||||||
|
<Switch
|
||||||
|
checked={memoRelatedSetting.enableBlurNsfwContent}
|
||||||
|
onChange={(event) => updatePartialSetting({ enableBlurNsfwContent: event.target.checked })}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="mt-2 w-full flex flex-row flex-wrap gap-1">
|
||||||
|
{memoRelatedSetting.nsfwTags.map((nsfwTag) => {
|
||||||
|
return (
|
||||||
|
<Chip
|
||||||
|
className="!h-8"
|
||||||
|
key={nsfwTag}
|
||||||
|
variant="outlined"
|
||||||
|
size="lg"
|
||||||
|
endDecorator={
|
||||||
|
<ChipDelete
|
||||||
|
onDelete={() => updatePartialSetting({ nsfwTags: memoRelatedSetting.nsfwTags.filter((r) => r !== nsfwTag) })}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{nsfwTag}
|
||||||
|
</Chip>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
<Input
|
||||||
|
className="w-32 !rounded-full !pl-3"
|
||||||
|
placeholder={t("common.input")}
|
||||||
|
size="sm"
|
||||||
|
value={editingNsfwTag}
|
||||||
|
onChange={(event) => setEditingNsfwTag(event.target.value.trim())}
|
||||||
|
endDecorator={
|
||||||
|
<CheckIcon
|
||||||
|
className="w-5 h-5 text-gray-500 dark:text-gray-400 cursor-pointer hover:text-teal-600"
|
||||||
|
onClick={() => upsertNsfwTags()}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div className="mt-2 w-full flex justify-end">
|
<div className="mt-2 w-full flex justify-end">
|
||||||
<Button color="primary" disabled={isEqual(memoRelatedSetting, originalSetting)} onClick={updateSetting}>
|
<Button color="primary" disabled={isEqual(memoRelatedSetting, originalSetting)} onClick={updateSetting}>
|
||||||
{t("common.save")}
|
{t("common.save")}
|
||||||
|
@@ -137,7 +137,9 @@
|
|||||||
"direction": "Direction",
|
"direction": "Direction",
|
||||||
"direction-desc": "Descending",
|
"direction-desc": "Descending",
|
||||||
"direction-asc": "Ascending",
|
"direction-asc": "Ascending",
|
||||||
"no-memos": "No memos."
|
"no-memos": "No memos.",
|
||||||
|
"click-to-show-nsfw-content": "Click to show NSFW contnet",
|
||||||
|
"click-to-hide-nsfw-content": "Click to hide NSFW content"
|
||||||
},
|
},
|
||||||
"message": {
|
"message": {
|
||||||
"archived-successfully": "Archived successfully",
|
"archived-successfully": "Archived successfully",
|
||||||
@@ -377,7 +379,8 @@
|
|||||||
"enable-memo-comments": "Enable memo comments",
|
"enable-memo-comments": "Enable memo comments",
|
||||||
"enable-memo-location": "Enable memo location",
|
"enable-memo-location": "Enable memo location",
|
||||||
"content-lenght-limit": "Content length limit (Byte)",
|
"content-lenght-limit": "Content length limit (Byte)",
|
||||||
"reactions": "Reactions"
|
"reactions": "Reactions",
|
||||||
|
"enable-blur-nsfw-content": "Enable NSFW content blurring (add NSFW tags below)"
|
||||||
},
|
},
|
||||||
"version": "Version"
|
"version": "Version"
|
||||||
},
|
},
|
||||||
|
@@ -133,7 +133,9 @@
|
|||||||
"direction": "排序方式",
|
"direction": "排序方式",
|
||||||
"direction-desc": "倒序",
|
"direction-desc": "倒序",
|
||||||
"direction-asc": "正序",
|
"direction-asc": "正序",
|
||||||
"no-memos": "无备忘"
|
"no-memos": "无备忘",
|
||||||
|
"click-to-show-nsfw-content": "点击显示 NSFW 内容",
|
||||||
|
"click-to-hide-nsfw-content": "点击隐藏 NSFW 内容"
|
||||||
},
|
},
|
||||||
"message": {
|
"message": {
|
||||||
"archived-successfully": "归档成功",
|
"archived-successfully": "归档成功",
|
||||||
@@ -352,7 +354,8 @@
|
|||||||
"enable-memo-comments": "启用备忘录评论",
|
"enable-memo-comments": "启用备忘录评论",
|
||||||
"enable-memo-location": "启用备忘录定位",
|
"enable-memo-location": "启用备忘录定位",
|
||||||
"content-lenght-limit": "内容长度限制(字节)",
|
"content-lenght-limit": "内容长度限制(字节)",
|
||||||
"reactions": "表态"
|
"reactions": "表态",
|
||||||
|
"enable-blur-nsfw-content": "启用 NSFW 内容模糊处理(在下方添加 NSFW 标签)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tag": {
|
"tag": {
|
||||||
|
@@ -131,7 +131,9 @@
|
|||||||
"direction": "方向",
|
"direction": "方向",
|
||||||
"direction-desc": "降序",
|
"direction-desc": "降序",
|
||||||
"direction-asc": "升序",
|
"direction-asc": "升序",
|
||||||
"no-memos": "沒有備忘錄"
|
"no-memos": "沒有備忘錄",
|
||||||
|
"click-to-show-nsfw-content": "點擊顯示 NSFW 內容",
|
||||||
|
"click-to-hide-nsfw-content": "點擊隱藏 NSFW 內容"
|
||||||
},
|
},
|
||||||
"message": {
|
"message": {
|
||||||
"archived-successfully": "封存成功",
|
"archived-successfully": "封存成功",
|
||||||
@@ -367,7 +369,8 @@
|
|||||||
"enable-memo-comments": "啟用備忘評論",
|
"enable-memo-comments": "啟用備忘評論",
|
||||||
"enable-memo-location": "啟用備忘位置",
|
"enable-memo-location": "啟用備忘位置",
|
||||||
"content-lenght-limit": "內容長度限制(位元組)",
|
"content-lenght-limit": "內容長度限制(位元組)",
|
||||||
"reactions": "表情回應"
|
"reactions": "表情回應",
|
||||||
|
"enable-blur-nsfw-content": "啟用 NSFW 內容模糊化(在下方添加 NSFW 標籤)"
|
||||||
},
|
},
|
||||||
"version": "版本"
|
"version": "版本"
|
||||||
},
|
},
|
||||||
|
@@ -112,6 +112,7 @@ const MemoDetail = () => {
|
|||||||
showCreator
|
showCreator
|
||||||
showVisibility
|
showVisibility
|
||||||
showPinned
|
showPinned
|
||||||
|
showNsfwContent
|
||||||
/>
|
/>
|
||||||
<div className="pt-8 pb-16 w-full">
|
<div className="pt-8 pb-16 w-full">
|
||||||
<h2 id="comments" className="sr-only">
|
<h2 id="comments" className="sr-only">
|
||||||
|
Reference in New Issue
Block a user