feat: frontend group folder configure page

pull/1882/head
WintBit 2 years ago
parent 2165c03c9d
commit 5132d2139b

@ -37,6 +37,8 @@ type GroupOption struct {
Aria2BatchSize int `json:"aria2_batch,omitempty"` Aria2BatchSize int `json:"aria2_batch,omitempty"`
AdvanceDelete bool `json:"advance_delete,omitempty"` AdvanceDelete bool `json:"advance_delete,omitempty"`
WebDAVProxy bool `json:"webdav_proxy,omitempty"` WebDAVProxy bool `json:"webdav_proxy,omitempty"`
GroupFolderEnabled bool `json:"group_folder_enabled,omitempty"`
GroupFolder string `json:"group_folder,omitempty"`
} }
// GetGroupByID 用ID获取用户组 // GetGroupByID 用ID获取用户组
@ -70,6 +72,21 @@ func (group *Group) BeforeSave() (err error) {
return err return err
} }
func (group *Group) AfterSave() (err error) {
err = json.Unmarshal([]byte(group.Options), &group.OptionsSerialized)
if err != nil {
return err
}
if group.OptionsSerialized.GroupFolderEnabled {
err = group.createGroupFolder(group.OptionsSerialized.GroupFolder)
} else {
err = group.deleteGroupFolder()
}
return err
}
// SerializePolicyList 将序列后的可选策略列表、配置写入数据库字段 // SerializePolicyList 将序列后的可选策略列表、配置写入数据库字段
// TODO 完善测试 // TODO 完善测试
func (group *Group) SerializePolicyList() (err error) { func (group *Group) SerializePolicyList() (err error) {
@ -89,3 +106,41 @@ func (group *Group) getGroupFolder() (*Folder, bool) {
result := DB.Where("owner_id = ?", -int(group.ID)).First(&folder) result := DB.Where("owner_id = ?", -int(group.ID)).First(&folder)
return &folder, !result.RecordNotFound() return &folder, !result.RecordNotFound()
} }
// createGroupFolder 创建用户组文件夹,如果已存在则更新
func (group *Group) createGroupFolder(name string) error {
tx := DB.Begin()
folder, ok := group.getGroupFolder()
if !ok {
folder = &Folder{
OwnerID: -int(group.ID),
Name: name,
}
if err := tx.Create(folder).Error; err != nil {
return err
}
} else {
folder.Name = name
if err := tx.Save(folder).Error; err != nil {
return err
}
}
group.GroupFolder = folder
return tx.Commit().Error
}
// deleteGroupFolder 删除用户组文件夹
func (group *Group) deleteGroupFolder() error {
tx := DB.Begin()
var folder Folder
if err := tx.Where("owner_id = ?", -int(group.ID)).First(&folder).Error; err != nil {
return err
}
if err := tx.Delete(&folder).Error; err != nil {
return err
}
return tx.Commit().Error
}

Loading…
Cancel
Save