Commit 8cf532a9 authored by Kevin Lyda's avatar Kevin Lyda
Browse files

Add flag to modify folder expire

Allow users to modify the default expire for a folder.
parent 7ea059bd
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1337,6 +1337,14 @@ If -1 is specified, messages will become permanent.`,
				MinArgs: 1,
				MaxArgs: 1,
				Action:  ActionSetDefaultExpire,
				Flags: dclish.Flags{
					"/FOLDER": {
						Description: `/FOLDER=foldername

  Specifies the folder for which the default expire is to modified.  If not
  specified, the system default expire is modified.`,
					},
				},
			},
			"EXPIRE_LIMIT": {
				Description: `Specifies expiration limit that  is allowed for messages. Non-privileged
+17 −1
Original line number Diff line number Diff line
@@ -193,8 +193,24 @@ func setExpire(cmd *dclish.Command, expire func(context.Context, int64) error) e

// ActionSetDefaultExpire handles the `SET DEFAULT_EXPIRE` command.
func ActionSetDefaultExpire(cmd *dclish.Command) error {
	folderName := cmd.Flags["/ALL"].Value
	if folderName == "" {
		return setExpire(cmd, this.Q.UpdateDefaultExpire)
	}
	isOwner, err := folders.IsFolderOwner(folderName, this.User.Login)
	if err != nil {
		return err
	}
	if !isOwner || this.User.Admin == 0 {
		return errors.New("privileges needed for changing defaults")
	}
	value, err := strconv.ParseInt(cmd.Args[0], 10, 64)
	if err != nil {
		return err
	}
	ctx := storage.Context()
	return this.Q.UpdateFolderExpire(ctx, value, folderName)
}

// ActionSetExpireLimit handles the `SET EXPIRE_LIMIT` command.
func ActionSetExpireLimit(cmd *dclish.Command) error {
+12 −0
Original line number Diff line number Diff line
@@ -290,6 +290,18 @@ func (q *Queries) UpdateFolderAlways(ctx context.Context, always int64, name str
	return err
}

const updateFolderExpire = `-- name: UpdateFolderExpire :exec
UPDATE folders SET expire = ? WHERE name = ?
`

// UpdateFolderExpire updates the default expiration (in days) for a folder.
//
//	UPDATE folders SET expire = ? WHERE name = ?
func (q *Queries) UpdateFolderExpire(ctx context.Context, expire int64, name string) error {
	_, err := q.db.ExecContext(ctx, updateFolderExpire, expire, name)
	return err
}

const updateFolderMain = `-- name: UpdateFolderMain :exec
UPDATE folders SET description = ?, owner = ?, name = ?3  WHERE name = ?4
`
+4 −0
Original line number Diff line number Diff line
@@ -57,6 +57,10 @@ SELECT 1 FROM folders WHERE name = ? AND owner = ?;
-- name: GetFolderExpire :one
SELECT expire FROM folders WHERE name = ?;

-- UpdateFolderExpire updates the default expiration (in days) for a folder.
-- name: UpdateFolderExpire :exec
UPDATE folders SET expire = ? WHERE name = ?;

-- UpdateFolderAlways updates the always setting for a folder.
-- name: UpdateFolderAlways :exec
UPDATE folders SET always = ? WHERE name = ?;