1package phnparser
2
3import (
4 "crypto/md5"
5 "fmt"
6 "io/ioutil"
7 "log"
8 "strings"
9)
10
11var LibraryPath string
12
13var LibraryTitles []string
14var LibraryAuthors []string
15var LibraryFileLocations []string
16var LibraryFormats []string
17var LibraryFileSizes []int
18var LibraryHashes []string
19
20var LoadedBookLines []string
21var LoadedBookTitle string
22var LoadedBookAuthor string
23var LoadedBookHash string
24
25var MaxLengthOfLine int
26
27func checkError(error error) {
28 if error != nil {
29 log.Fatal(error)
30 }
31}
32
33func ScanLibraryFolder() {
34 files, err := ioutil.ReadDir(LibraryPath)
35 checkError(err)
36 var authors []string
37 var titles []string
38 var fileLocations []string
39 var formats []string
40 var fileSizes []int
41 var hashes []string
42 for _, file := range files {
43 if !file.IsDir() {
44 content, err := ioutil.ReadFile(LibraryPath + file.Name())
45 checkError(err)
46 fileSizes = append(fileSizes, len(content))
47 formats = append(formats, "PHN")
48 fileLocations = append(fileLocations, LibraryPath+file.Name())
49 authors = append(authors, strings.Split(string(strings.Split(string(content), "\n-+---+-BOOK CONTENT-+---+-")[0]), "-+---+-BOOK AUTHOR-+---+-\n")[1])
50 titles = append(titles, strings.Split(string(content), "\n-+---+-BOOK AUTHOR-+---+-")[0][25:])
51 hashes = append(hashes, fmt.Sprintf("%x", md5.Sum(content)))
52 }
53 }
54 LibraryTitles = titles
55 LibraryAuthors = authors
56 LibraryFileLocations = fileLocations
57 LibraryFormats = formats
58 LibraryFileSizes = fileSizes
59 LibraryHashes = hashes
60}
61
62func LoadBook(bookIndex int) {
63 LoadedBookLines = []string{}
64 LoadedBookTitle = LibraryTitles[bookIndex]
65 LoadedBookAuthor = LibraryAuthors[bookIndex]
66 LoadedBookHash = LibraryHashes[bookIndex]
67 content, err := ioutil.ReadFile(LibraryFileLocations[bookIndex])
68 checkError(err)
69 lines := strings.Split(strings.Split(string(content), "-+---+-BOOK CONTENT-+---+-\n")[1], "\n")
70 for _, line := range lines {
71 lineWithReturn := line + "\n"
72 currentBuffer := []rune{}
73 for _, character := range lineWithReturn {
74 if (len(currentBuffer) >= MaxLengthOfLine) || (string(character) == "\n") {
75 LoadedBookLines = append(LoadedBookLines, string(currentBuffer))
76 currentBuffer = []rune{}
77 }
78 currentBuffer = append(currentBuffer, character)
79 }
80 }
81}