mirror of
https://github.com/go-shiori/shiori.git
synced 2025-01-16 12:57:58 +08:00
87 lines
2.1 KiB
Go
87 lines
2.1 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
fp "path/filepath"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func deleteCmd() *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "delete [indices]",
|
|
Short: "Delete the saved bookmarks",
|
|
Long: "Delete bookmarks. " +
|
|
"When a record is deleted, the last record is moved to the removed index. " +
|
|
"Accepts space-separated list of indices (e.g. 5 6 23 4 110 45), " +
|
|
"hyphenated range (e.g. 100-200) or both (e.g. 1-3 7 9). " +
|
|
"If no arguments, ALL records will be deleted.",
|
|
Aliases: []string{"rm"},
|
|
Run: deleteHandler,
|
|
}
|
|
|
|
cmd.Flags().BoolP("yes", "y", false, "Skip confirmation prompt and delete ALL bookmarks")
|
|
|
|
return cmd
|
|
}
|
|
|
|
func deleteHandler(cmd *cobra.Command, args []string) {
|
|
// Parse flags
|
|
skipConfirm, _ := cmd.Flags().GetBool("yes")
|
|
|
|
// If no arguments (i.e all bookmarks going to be deleted), confirm to user
|
|
if len(args) == 0 && !skipConfirm {
|
|
confirmDelete := ""
|
|
fmt.Print("Remove ALL bookmarks? (y/N): ")
|
|
fmt.Scanln(&confirmDelete)
|
|
|
|
if confirmDelete != "y" {
|
|
fmt.Println("No bookmarks deleted")
|
|
return
|
|
}
|
|
}
|
|
|
|
// Convert args to ids
|
|
ids, err := parseStrIndices(args)
|
|
if err != nil {
|
|
cError.Printf("Failed to parse args: %v\n", err)
|
|
return
|
|
}
|
|
|
|
// Delete bookmarks from database
|
|
err = db.DeleteBookmarks(ids...)
|
|
if err != nil {
|
|
cError.Printf("Failed to delete bookmarks: %v\n", err)
|
|
return
|
|
}
|
|
|
|
// Delete thumbnail image and archives from local disk
|
|
if len(ids) == 0 {
|
|
thumbDir := fp.Join(dataDir, "thumb")
|
|
archiveDir := fp.Join(dataDir, "archive")
|
|
os.RemoveAll(thumbDir)
|
|
os.RemoveAll(archiveDir)
|
|
} else {
|
|
for _, id := range ids {
|
|
strID := strconv.Itoa(id)
|
|
imgPath := fp.Join(dataDir, "thumb", strID)
|
|
archivePath := fp.Join(dataDir, "archive", strID)
|
|
|
|
os.Remove(imgPath)
|
|
os.Remove(archivePath)
|
|
}
|
|
}
|
|
|
|
// Show finish message
|
|
switch len(args) {
|
|
case 0:
|
|
fmt.Println("All bookmarks have been deleted")
|
|
case 1, 2, 3, 4, 5:
|
|
fmt.Printf("Bookmark(s) %s have been deleted\n", strings.Join(args, ", "))
|
|
default:
|
|
fmt.Println("Bookmark(s) have been deleted")
|
|
}
|
|
}
|