|
|
@ -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
|
|
|
|
|
|
|
|
}
|
|
|
|