-
Notifications
You must be signed in to change notification settings - Fork 2
/
cache.coffee
110 lines (97 loc) · 2.13 KB
/
cache.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
###*
* @fileoverview キャッシュ関係のメソッド
###
fs = require "fs-extra"
path = require "path"
{app} = require "electron"
denodeify = require "denodeify"
###*
* キャッシュをおくフォルダ
* @const
###
CACHE_FOLDER_PATH = path.join(app.getPath("userData"), "plistCache")
ensureFile = denodeify(fs.ensureFile)
readJson = denodeify(fs.readJson)
remove = denodeify(fs.remove)
###
* キャッシュファイルと実際のファイルのテーブル
###
table = {}
###
* tableの初期値
* @const
###
DEFAULT_DATA =
length: 0
###
* エラー出力
* @private
###
_outputError = (err) ->
console.error("Error: #{err}") if err?
return
###
* テーブル更新
* @private
###
_update = ->
fs.outputJson(path.join(CACHE_FOLDER_PATH,"table.json"), table, _outputError)
return
###
* テーブルをメモリに展開
* @constructor
###
init = ->
filePath = path.join(CACHE_FOLDER_PATH,"table.json")
return ensureFile(filePath).then( ->
return readJson(filePath, throws: false)
).then( (content) ->
table = if content? then content else DEFAULT_DATA
_update()
)
###
* キャッシュ名を取得
###
get = (key) ->
return table[key]
###
* キャッシュ名を追加
###
add = (key) ->
if get(key)?
return get(key)
num = table.length++
_update()
return num
###
* キャッシュを追加
###
setStringFile = (repoName, fileName, fileContent, callback = _outputError) ->
num = add("#{repoName}/#{fileName}")
table["#{repoName}/#{fileName}"] = num
fs.outputFile(path.join(CACHE_FOLDER_PATH,"#{num}.txt"), fileContent, callback)
return
###
* キャッシュを取得
###
getStringFile = (repoName, fileName, force = false) ->
num = get("#{repoName}/#{fileName}")
return new Promise( (resolve, reject) ->
if force
reject()
return
fs.readFile(path.join(CACHE_FOLDER_PATH,"#{num}.txt"), "utf8", (err, content) ->
if err?
reject(err)
return
resolve(content)
return
)
)
clear = ->
return remove(CACHE_FOLDER_PATH)
module.exports =
init: init
setStringFile: setStringFile
getStringFile: getStringFile
clear: clear