diff --git a/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml b/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml
index 567c2df01..25a8f7e7e 100644
--- a/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml
+++ b/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml
@@ -139,6 +139,7 @@
您尚未在此页面新增任何标记。
+ 字体
字型大小:
边距
行距
@@ -204,4 +205,21 @@
条款和条件
管理帐户
登出
+
+
+ 收集箱
+ 非订阅内容
+ 订阅内容
+ 邮件简讯
+ 推荐
+ 所有内容
+ 已归档
+ 已高亮
+ 文档
+
+
+ 从新到旧
+ 从旧到新
+ 最近阅读
+ 最近发布
diff --git a/packages/rss-handler/src/index.ts b/packages/rss-handler/src/index.ts
index 75a621ee5..a3abb1416 100644
--- a/packages/rss-handler/src/index.ts
+++ b/packages/rss-handler/src/index.ts
@@ -360,7 +360,7 @@ const processSubscription = async (
// use published or updated if isoDate is not available for atom feeds
item.isoDate =
item.isoDate || item.published || item.updated || item.created
- console.log('Processing feed item', item.links, item.isoDate)
+ console.log('Processing feed item', item.links, item.isoDate, feed.feedUrl)
if (!item.links || item.links.length === 0) {
console.log('Invalid feed item', item)
diff --git a/pkg/admin/src/db.ts b/pkg/admin/src/db.ts
index f493fd30d..4591ac9de 100644
--- a/pkg/admin/src/db.ts
+++ b/pkg/admin/src/db.ts
@@ -52,6 +52,8 @@ export const registerDatabase = async (secrets: any): Promise => {
Subscription,
LibraryItem,
UploadFile,
+ Recommendation,
+ GroupMembership,
],
})
@@ -214,7 +216,7 @@ export class Group extends BaseEntity {
name!: string
@OneToOne(() => User)
- @JoinColumn({ name: 'created_by' })
+ @JoinColumn({ name: 'created_by_id' })
createdBy!: User
@Column({ type: 'timestamp', name: 'created_at' })
@@ -338,6 +340,12 @@ export class LibraryItem extends BaseEntity {
@Column('text', { nullable: true })
subscription?: string | null
+ @Column('text', { array: true, nullable: true })
+ recommender_names?: string[] | null
+
+ @Column('text', { array: true, nullable: true })
+ label_names?: string[] | null
+
@OneToOne(() => UploadFile, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'upload_file_id' })
uploadFile?: UploadFile
@@ -382,3 +390,49 @@ export class UploadFile extends BaseEntity {
@Column({ type: 'timestamp', name: 'updated_at' })
updatedAt!: Date
}
+
+@Entity({ name: 'recommendation' })
+export class Recommendation extends BaseEntity {
+ @PrimaryGeneratedColumn('uuid')
+ id!: string
+
+ @JoinColumn({ name: 'recommender_id' })
+ @ManyToOne(() => User, (user) => user.articles, { eager: true })
+ recommender!: User
+
+ @JoinColumn({ name: 'library_item_id' })
+ @ManyToOne(() => User, (user) => user.articles, { eager: true })
+ libraryItem!: LibraryItem
+
+ @JoinColumn({ name: 'group_id' })
+ @ManyToOne(() => User, (user) => user.articles, { eager: true })
+ group!: Group
+
+ @Column('text', { nullable: true })
+ note?: string | null
+
+ @Column({ type: 'timestamp', name: 'created_at' })
+ createdAt!: Date
+}
+
+@Entity({ name: 'group_membership' })
+export class GroupMembership extends BaseEntity {
+ @PrimaryGeneratedColumn('uuid')
+ id!: string
+
+ @JoinColumn({ name: 'user_id' })
+ @ManyToOne(() => User, (user) => user.articles, { eager: true })
+ user!: User
+
+ @JoinColumn({ name: 'group_id' })
+ group!: Group
+
+ @Column({ type: 'timestamp', name: 'created_at' })
+ createdAt!: Date
+
+ @Column({ type: 'timestamp', name: 'updated_at' })
+ updatedAt!: Date
+
+ @Column('boolean', { default: false })
+ is_admin!: boolean
+}
diff --git a/pkg/admin/src/index.ts b/pkg/admin/src/index.ts
index 543c0d987..894e4b733 100644
--- a/pkg/admin/src/index.ts
+++ b/pkg/admin/src/index.ts
@@ -13,6 +13,8 @@ import {
Subscription,
Integration,
LibraryItem,
+ Recommendation,
+ GroupMembership,
} from './db'
import { compare, hashSync } from 'bcryptjs'
const readYamlFile = require('read-yaml-file')
@@ -46,6 +48,8 @@ const ADMIN_USER_EMAIL =
{
resource: ContentDisplayReport,
},
+ { resource: Recommendation, options: { parent: { name: 'Users' } } },
+ { resource: GroupMembership, options: { parent: { name: 'Users' } } },
],
})