github.com/Ptt-official-app/go-bbs@v0.12.0/cmd/bbstool/articles.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"os"
     7  
     8  	"github.com/Ptt-official-app/go-bbs"
     9  )
    10  
    11  func showBoardArticleList() {
    12  	db, err := openDB()
    13  	if err != nil {
    14  		fmt.Println("openDB:", err)
    15  	}
    16  	inputArgs := parseArgsToMap(flag.Args())
    17  
    18  	// fmt.Println(inputArgs)
    19  
    20  	boardID, ok := inputArgs["board"].(string)
    21  	if !ok {
    22  		fmt.Println("please provide board argument")
    23  		return
    24  	}
    25  
    26  	records, err := db.ReadBoardArticleRecordsFile(boardID)
    27  
    28  	for _, r := range records {
    29  		if r.Filename() == "" {
    30  			continue
    31  		}
    32  		fmt.Printf("%s % 12s %s %s\n", r.Filename(), r.Owner(), r.Date(), r.Title())
    33  	}
    34  }
    35  
    36  func addBoardArticle() {
    37  	db, err := openDB()
    38  	if err != nil {
    39  		fmt.Println("openDB:", err)
    40  	}
    41  	inputArgs := parseArgsToMap(flag.Args())
    42  
    43  	boardID, ok := inputArgs["board"].(string)
    44  	if !ok {
    45  		fmt.Println("please provide board argument")
    46  		return
    47  	}
    48  
    49  	owner, ok := inputArgs["owner"].(string)
    50  	if !ok {
    51  		fmt.Println("please provide owner argument")
    52  		return
    53  	}
    54  
    55  	date, ok := inputArgs["date"].(string)
    56  	if !ok {
    57  		fmt.Println("please provide date argument")
    58  		return
    59  	}
    60  
    61  	title, ok := inputArgs["title"].(string)
    62  	if !ok {
    63  		fmt.Println("please provide title argument")
    64  		return
    65  	}
    66  
    67  	content, contentOk := inputArgs["content"].(string)
    68  	contentFile, inputFileOk := inputArgs["content_file"].(string)
    69  	if !contentOk && !inputFileOk {
    70  		fmt.Println("please provide content or content_file")
    71  	}
    72  
    73  	if !contentOk {
    74  		contentData, err := os.ReadFile(contentFile)
    75  		if err != nil {
    76  			fmt.Println("readfile error:", err)
    77  			return
    78  		}
    79  		content = string(contentData)
    80  	}
    81  
    82  	record, err := db.CreateArticleRecord(boardID, owner, date, title)
    83  	if err != nil {
    84  		fmt.Println("show_article_list: NewArticleRecord: ", err)
    85  		return
    86  	}
    87  	err = db.AddArticleRecordFileRecord(boardID, record)
    88  	if err != nil {
    89  		fmt.Println("AddArticleRecordFileRecord error:", err)
    90  		return
    91  	}
    92  
    93  	err = db.WriteBoardArticleFile(boardID, record.Filename(), bbs.Utf8ToBig5(content))
    94  	if err != nil {
    95  		fmt.Println("WriteBoardArticleFile error: ", err)
    96  		return
    97  	}
    98  	fmt.Printf("new filename: %s\n", record.Filename())
    99  	return
   100  
   101  }
   102  
   103  func showBoardArticle() {
   104  	db, err := openDB()
   105  	if err != nil {
   106  		fmt.Println("openDB:", err)
   107  	}
   108  	inputArgs := parseArgsToMap(flag.Args())
   109  
   110  	boardID, ok := inputArgs["board"].(string)
   111  	if !ok {
   112  		fmt.Println("please provide board argument")
   113  		return
   114  	}
   115  
   116  	filename, ok := inputArgs["filename"].(string)
   117  	if !ok {
   118  		fmt.Println("please provide filename argument")
   119  		return
   120  	}
   121  
   122  	data, err := db.ReadBoardArticleFile(boardID, filename)
   123  	if err != nil {
   124  		fmt.Println("ReadrBoardArticleFile error: %w", err)
   125  		return
   126  	}
   127  	fmt.Printf("filecontent: \n%s\n", bbs.Big5ToUtf8(data))
   128  	return
   129  
   130  }