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}