Skip to content

Commit e890435

Browse files
committed
using rmsync library, which now exists
1 parent 94cd3aa commit e890435

File tree

1 file changed

+18
-131
lines changed

1 file changed

+18
-131
lines changed

main.go

Lines changed: 18 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
package main
22

33
import (
4-
"bytes"
54
"encoding/json"
65
"fmt"
7-
"io/ioutil"
8-
"mime/multipart"
96
"net/http"
107
"os"
11-
"path/filepath"
12-
"strings"
138
"time"
149

10+
"github.com/Maaarcocr/rmsync"
1511
"github.com/peterhellberg/link"
1612
)
1713

@@ -60,70 +56,6 @@ type ZoteroDirData struct {
6056
Relations interface{} `json:"relations"`
6157
}
6258

63-
type RemarkableFile struct {
64-
Filename string
65-
VisibleName string
66-
}
67-
68-
func getMetadataFilenames() ([]string, error) {
69-
var filenames []string
70-
err := filepath.Walk(BaseDir, func(path string, info os.FileInfo, err error) error {
71-
if err != nil {
72-
return err
73-
}
74-
if info.IsDir() || filepath.Ext(path) != ".metadata" {
75-
return nil
76-
}
77-
filenames = append(filenames, path)
78-
return nil
79-
})
80-
if err != nil {
81-
return nil, err
82-
}
83-
return filenames, nil
84-
}
85-
86-
func getDirectories(filenames []string) ([]RemarkableFile, error) {
87-
var directories []RemarkableFile
88-
for _, filename := range filenames {
89-
filecontent, err := ioutil.ReadFile(filename)
90-
if err != nil {
91-
return nil, err
92-
}
93-
var metadata Metadata
94-
err = json.Unmarshal(filecontent, &metadata)
95-
if err != nil {
96-
return nil, err
97-
}
98-
if metadata.Type == "CollectionType" {
99-
directories = append(directories, RemarkableFile{filename, metadata.VisibleName})
100-
}
101-
}
102-
return directories, nil
103-
}
104-
105-
func getPdfFiles(filenames []string) ([]RemarkableFile, error) {
106-
var pdfFiles []RemarkableFile
107-
for _, filename := range filenames {
108-
filecontent, err := ioutil.ReadFile(filename)
109-
if err != nil {
110-
return nil, err
111-
}
112-
var metadata Metadata
113-
err = json.Unmarshal(filecontent, &metadata)
114-
if err != nil {
115-
return nil, err
116-
}
117-
if metadata.Type == "DocumentType" {
118-
pdfFilename := strings.TrimSuffix(filename, filepath.Ext(filename)) + ".pdf"
119-
if _, err := os.Stat(pdfFilename); !os.IsNotExist(err) {
120-
pdfFiles = append(pdfFiles, RemarkableFile{pdfFilename, metadata.VisibleName})
121-
}
122-
}
123-
}
124-
return pdfFiles, nil
125-
}
126-
12759
func getJson(url string, target interface{}) (*http.Response, error) {
12860
req, _ := http.NewRequest("GET", url, nil)
12961
req.Header.Set("Zotero-API-Key", ApiKey)
@@ -147,11 +79,15 @@ func getZoteroDirectories() ([]ZoteroDirectory, error) {
14779

14880
func getZoteroItemsForDirectory(directory ZoteroDirectory) ([]ZoteroItem, error) {
14981
var zoteroItems []ZoteroItem
82+
fmt.Println(BaseZoteroURL + UserId + "/collections/" + directory.Key + "/items")
15083
res, err := getJson(BaseZoteroURL+UserId+"/collections/"+directory.Key+"/items", &zoteroItems)
15184
if err != nil {
15285
return nil, err
15386
}
154-
next := link.ParseResponse(res)["next"].String()
87+
next := ""
88+
if val, ok := link.ParseResponse(res)["next"]; ok {
89+
next = val.String()
90+
}
15591
for next != "" {
15692
var tempZoteroItems []ZoteroItem
15793
res, err := getJson(next, &tempZoteroItems)
@@ -178,15 +114,15 @@ func getZoteroPdfsFromItems(items []ZoteroItem) []ZoteroItem {
178114
return zoteroPdfs
179115
}
180116

181-
func createRemarkableFileMap(files []RemarkableFile) map[string]struct{} {
117+
func createRemarkableFileMap(files []rmsync.RemarkableFile) map[string]struct{} {
182118
fileMap := make(map[string]struct{}, 0)
183119
for _, file := range files {
184120
fileMap[file.VisibleName] = struct{}{}
185121
}
186122
return fileMap
187123
}
188124

189-
func getSharedDirectories(directories []RemarkableFile, zoteroDirectories []ZoteroDirectory) []ZoteroDirectory {
125+
func getSharedDirectories(directories []rmsync.RemarkableFile, zoteroDirectories []ZoteroDirectory) []ZoteroDirectory {
190126
var sharedDirectories []ZoteroDirectory
191127
dirMap := createRemarkableFileMap(directories)
192128
for _, zoteroDirectory := range zoteroDirectories {
@@ -197,60 +133,19 @@ func getSharedDirectories(directories []RemarkableFile, zoteroDirectories []Zote
197133
return sharedDirectories
198134
}
199135

200-
func downloadPdfFile(url string) ([]byte, error) {
201-
r, err := myClient.Get(url)
202-
if err != nil {
203-
return nil, err
204-
}
205-
defer r.Body.Close()
206-
fileContents, err := ioutil.ReadAll(r.Body)
207-
if err != nil {
208-
return nil, err
136+
func createRemarkableFilesToSync(pdfs []ZoteroItem) []rmsync.FileToSync {
137+
files := make([]rmsync.FileToSync, 0)
138+
for _, pdf := range pdfs {
139+
files = append(files, rmsync.FileToSync{pdf.Data.Filename, pdf.Data.Url})
209140
}
210-
return fileContents, nil
211-
}
212-
213-
func uploadPdfToTablet(fileContents []byte, filename string) error {
214-
body := new(bytes.Buffer)
215-
writer := multipart.NewWriter(body)
216-
part, err := writer.CreateFormFile("file", filename)
217-
if err != nil {
218-
return err
219-
}
220-
part.Write(fileContents)
221-
222-
err = writer.Close()
223-
if err != nil {
224-
return err
225-
}
226-
req, err := http.NewRequest("POST", "http://10.11.99.1/upload", body)
227-
req.Header.Set("Content-Type", writer.FormDataContentType())
228-
req.Header.Set("Accept", "*/*")
229-
req.Header.Set("Connection", "keep-alive")
230-
if err != nil {
231-
return err
232-
}
233-
_, err = myClient.Do(req)
234-
if err != nil {
235-
return err
236-
}
237-
return nil
141+
return files
238142
}
239143

240144
func sync() error {
241-
filenames, err := getMetadataFilenames()
145+
directories, err := rmsync.GetDirectoriesMetadataFiles()
242146
if err != nil {
243147
return err
244148
}
245-
directories, err := getDirectories(filenames)
246-
if err != nil {
247-
return err
248-
}
249-
pdfFiles, err := getPdfFiles(filenames)
250-
if err != nil {
251-
return err
252-
}
253-
pdfFileMap := createRemarkableFileMap(pdfFiles)
254149
zoteroDirectories, err := getZoteroDirectories()
255150
if err != nil {
256151
return err
@@ -262,18 +157,10 @@ func sync() error {
262157
return err
263158
}
264159
pdfs := getZoteroPdfsFromItems(items)
265-
for _, item := range pdfs {
266-
if _, ok := pdfFileMap[item.Data.Filename]; !ok {
267-
fmt.Println(item.Data.Url)
268-
fileContents, err := downloadPdfFile(item.Data.Url)
269-
if err != nil {
270-
return err
271-
}
272-
err = uploadPdfToTablet(fileContents, item.Data.Filename)
273-
if err != nil {
274-
return err
275-
}
276-
}
160+
filesToSync := createRemarkableFilesToSync(pdfs)
161+
err = rmsync.Sync(filesToSync)
162+
if err != nil {
163+
return err
277164
}
278165
}
279166
return nil

0 commit comments

Comments
 (0)