mirror of
https://github.com/go-shiori/shiori.git
synced 2024-11-16 22:25:13 +08:00
118 lines
2.8 KiB
Go
118 lines
2.8 KiB
Go
package cmd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/RadhiFadlillah/shiori/model"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
printCmd = &cobra.Command{
|
|
Use: "print [indices]",
|
|
Short: "Print the saved bookmarks",
|
|
Long: "Show the saved bookmarks by its DB 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 with actual index from DB are shown.",
|
|
Aliases: []string{"list", "ls"},
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
// Read flags
|
|
useJSON, _ := cmd.Flags().GetBool("json")
|
|
indexOnly, _ := cmd.Flags().GetBool("index-only")
|
|
|
|
// Read bookmarks from database
|
|
bookmarks, err := DB.GetBookmarks(false, args...)
|
|
if err != nil {
|
|
cError.Println(err)
|
|
return
|
|
}
|
|
|
|
if len(bookmarks) == 0 {
|
|
if len(args) > 0 {
|
|
cError.Println("No matching index found")
|
|
} else {
|
|
cError.Println("No bookmarks saved yet")
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Print data
|
|
if useJSON {
|
|
bt, err := json.MarshalIndent(&bookmarks, "", " ")
|
|
if err != nil {
|
|
cError.Println(err)
|
|
return
|
|
}
|
|
fmt.Println(string(bt))
|
|
} else if indexOnly {
|
|
printBookmarkIndex(bookmarks...)
|
|
} else {
|
|
printBookmark(bookmarks...)
|
|
}
|
|
},
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
printCmd.Flags().BoolP("json", "j", false, "Output data in JSON format")
|
|
printCmd.Flags().BoolP("index-only", "i", false, "Only print the index of bookmarks")
|
|
rootCmd.AddCommand(printCmd)
|
|
}
|
|
|
|
func printBookmarkIndex(bookmarks ...model.Bookmark) {
|
|
for _, bookmark := range bookmarks {
|
|
fmt.Printf("%d ", bookmark.ID)
|
|
}
|
|
fmt.Println()
|
|
}
|
|
|
|
func printBookmark(bookmarks ...model.Bookmark) {
|
|
for _, bookmark := range bookmarks {
|
|
// Create bookmark index
|
|
strBookmarkIndex := fmt.Sprintf("%d. ", bookmark.ID)
|
|
strSpace := strings.Repeat(" ", len(strBookmarkIndex))
|
|
|
|
// Print bookmark title
|
|
cIndex.Print(strBookmarkIndex)
|
|
cTitle.Print(bookmark.Title)
|
|
|
|
// Print read time
|
|
if bookmark.MinReadTime > 0 {
|
|
readTime := fmt.Sprintf(" (%d-%d minutes)", bookmark.MinReadTime, bookmark.MaxReadTime)
|
|
if bookmark.MinReadTime == bookmark.MaxReadTime {
|
|
readTime = fmt.Sprintf(" (%d minutes)", bookmark.MinReadTime)
|
|
}
|
|
cReadTime.Println(readTime)
|
|
} else {
|
|
fmt.Println()
|
|
}
|
|
|
|
// Print bookmark URL
|
|
cSymbol.Print(strSpace + "> ")
|
|
cURL.Println(bookmark.URL)
|
|
|
|
// Print bookmark excerpt
|
|
if bookmark.Excerpt != "" {
|
|
cSymbol.Print(strSpace + "+ ")
|
|
cExcerpt.Println(bookmark.Excerpt)
|
|
}
|
|
|
|
// Print bookmark tags
|
|
if len(bookmark.Tags) > 0 {
|
|
cSymbol.Print(strSpace + "# ")
|
|
for i, tag := range bookmark.Tags {
|
|
if i == len(bookmark.Tags)-1 {
|
|
cTag.Println(tag.Name)
|
|
} else {
|
|
cTag.Print(tag.Name + ", ")
|
|
}
|
|
}
|
|
}
|
|
|
|
// Append new line
|
|
fmt.Println()
|
|
}
|
|
}
|