File size: 10,602 Bytes
215df2f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
package chaoxing

import (
	"bytes"
	"fmt"
	"strconv"
	"time"

	"github.com/alist-org/alist/v3/internal/model"
)

type Resp struct {
	Result int `json:"result"`
}

type UserAuth struct {
	GroupAuth struct {
		AddData                 int    `json:"addData"`
		AddDataFolder           int    `json:"addDataFolder"`
		AddLebel                int    `json:"addLebel"`
		AddManager              int    `json:"addManager"`
		AddMem                  int    `json:"addMem"`
		AddTopicFolder          int    `json:"addTopicFolder"`
		AnonymousAddReply       int    `json:"anonymousAddReply"`
		AnonymousAddTopic       int    `json:"anonymousAddTopic"`
		BatchOperation          int    `json:"batchOperation"`
		DelData                 int    `json:"delData"`
		DelDataFolder           int    `json:"delDataFolder"`
		DelMem                  int    `json:"delMem"`
		DelTopicFolder          int    `json:"delTopicFolder"`
		Dismiss                 int    `json:"dismiss"`
		ExamEnc                 string `json:"examEnc"`
		GroupChat               int    `json:"groupChat"`
		IsShowCircleChatButton  int    `json:"isShowCircleChatButton"`
		IsShowCircleCloudButton int    `json:"isShowCircleCloudButton"`
		IsShowCompanyButton     int    `json:"isShowCompanyButton"`
		Join                    int    `json:"join"`
		MemberShowRankSet       int    `json:"memberShowRankSet"`
		ModifyDataFolder        int    `json:"modifyDataFolder"`
		ModifyExpose            int    `json:"modifyExpose"`
		ModifyName              int    `json:"modifyName"`
		ModifyShowPic           int    `json:"modifyShowPic"`
		ModifyTopicFolder       int    `json:"modifyTopicFolder"`
		ModifyVisibleState      int    `json:"modifyVisibleState"`
		OnlyMgrScoreSet         int    `json:"onlyMgrScoreSet"`
		Quit                    int    `json:"quit"`
		SendNotice              int    `json:"sendNotice"`
		ShowActivityManage      int    `json:"showActivityManage"`
		ShowActivitySet         int    `json:"showActivitySet"`
		ShowAttentionSet        int    `json:"showAttentionSet"`
		ShowAutoClearStatus     int    `json:"showAutoClearStatus"`
		ShowBarcode             int    `json:"showBarcode"`
		ShowChatRoomSet         int    `json:"showChatRoomSet"`
		ShowCircleActivitySet   int    `json:"showCircleActivitySet"`
		ShowCircleSet           int    `json:"showCircleSet"`
		ShowCmem                int    `json:"showCmem"`
		ShowDataFolder          int    `json:"showDataFolder"`
		ShowDelReason           int    `json:"showDelReason"`
		ShowForward             int    `json:"showForward"`
		ShowGroupChat           int    `json:"showGroupChat"`
		ShowGroupChatSet        int    `json:"showGroupChatSet"`
		ShowGroupSquareSet      int    `json:"showGroupSquareSet"`
		ShowLockAddSet          int    `json:"showLockAddSet"`
		ShowManager             int    `json:"showManager"`
		ShowManagerIdentitySet  int    `json:"showManagerIdentitySet"`
		ShowNeedDelReasonSet    int    `json:"showNeedDelReasonSet"`
		ShowNotice              int    `json:"showNotice"`
		ShowOnlyManagerReplySet int    `json:"showOnlyManagerReplySet"`
		ShowRank                int    `json:"showRank"`
		ShowRank2               int    `json:"showRank2"`
		ShowRecycleBin          int    `json:"showRecycleBin"`
		ShowReplyByClass        int    `json:"showReplyByClass"`
		ShowReplyNeedCheck      int    `json:"showReplyNeedCheck"`
		ShowSignbanSet          int    `json:"showSignbanSet"`
		ShowSpeechSet           int    `json:"showSpeechSet"`
		ShowTopicCheck          int    `json:"showTopicCheck"`
		ShowTopicNeedCheck      int    `json:"showTopicNeedCheck"`
		ShowTransferSet         int    `json:"showTransferSet"`
	} `json:"groupAuth"`
	OperationAuth struct {
		Add                int `json:"add"`
		AddTopicToFolder   int `json:"addTopicToFolder"`
		ChoiceSet          int `json:"choiceSet"`
		DelTopicFromFolder int `json:"delTopicFromFolder"`
		Delete             int `json:"delete"`
		Reply              int `json:"reply"`
		ScoreSet           int `json:"scoreSet"`
		TopSet             int `json:"topSet"`
		Update             int `json:"update"`
	} `json:"operationAuth"`
}

// 手机端学习通上传的文件的json内容(content字段)与网页端上传的有所不同
// 网页端json `"puid": 54321, "size": 12345`
// 手机端json `"puid": "54321". "size": "12345"`
type int_str int

// json 字符串数字和纯数字解析
func (ios *int_str) UnmarshalJSON(data []byte) error {
	intValue, err := strconv.Atoi(string(bytes.Trim(data, "\"")))
	if err != nil {
		return err
	}
	*ios = int_str(intValue)
	return nil
}

type File struct {
	Cataid  int `json:"cataid"`
	Cfid    int `json:"cfid"`
	Content struct {
		Cfid             int     `json:"cfid"`
		Pid              int     `json:"pid"`
		FolderName       string  `json:"folderName"`
		ShareType        int     `json:"shareType"`
		Preview          string  `json:"preview"`
		Filetype         string  `json:"filetype"`
		PreviewURL       string  `json:"previewUrl"`
		IsImg            bool    `json:"isImg"`
		ParentPath       string  `json:"parentPath"`
		Icon             string  `json:"icon"`
		Suffix           string  `json:"suffix"`
		Duration         int     `json:"duration"`
		Pantype          string  `json:"pantype"`
		Puid             int_str `json:"puid"`
		Filepath         string  `json:"filepath"`
		Crc              string  `json:"crc"`
		Isfile           bool    `json:"isfile"`
		Residstr         string  `json:"residstr"`
		ObjectID         string  `json:"objectId"`
		Extinfo          string  `json:"extinfo"`
		Thumbnail        string  `json:"thumbnail"`
		Creator          int     `json:"creator"`
		ResTypeValue     int     `json:"resTypeValue"`
		UploadDateFormat string  `json:"uploadDateFormat"`
		DisableOpt       bool    `json:"disableOpt"`
		DownPath         string  `json:"downPath"`
		Sort             int     `json:"sort"`
		Topsort          int     `json:"topsort"`
		Restype          string  `json:"restype"`
		Size             int_str `json:"size"`
		UploadDate       int64   `json:"uploadDate"`
		FileSize         string  `json:"fileSize"`
		Name             string  `json:"name"`
		FileID           string  `json:"fileId"`
	} `json:"content"`
	CreatorID  int    `json:"creatorId"`
	DesID      string `json:"des_id"`
	ID         int    `json:"id"`
	Inserttime int64  `json:"inserttime"`
	Key        string `json:"key"`
	Norder     int    `json:"norder"`
	OwnerID    int    `json:"ownerId"`
	OwnerType  int    `json:"ownerType"`
	Path       string `json:"path"`
	Rid        int    `json:"rid"`
	Status     int    `json:"status"`
	Topsign    int    `json:"topsign"`
}

type ListFileResp struct {
	Msg      string   `json:"msg"`
	Result   int      `json:"result"`
	Status   bool     `json:"status"`
	UserAuth UserAuth `json:"userAuth"`
	List     []File   `json:"list"`
}

type DownResp struct {
	Msg        string `json:"msg"`
	Duration   int    `json:"duration"`
	Download   string `json:"download"`
	FileStatus string `json:"fileStatus"`
	URL        string `json:"url"`
	Status     bool   `json:"status"`
}

type UploadDataRsp struct {
	Result int `json:"result"`
	Msg    struct {
		Puid  int    `json:"puid"`
		Token string `json:"token"`
	} `json:"msg"`
}

type UploadFileDataRsp struct {
	Result   bool   `json:"result"`
	Msg      string `json:"msg"`
	Crc      string `json:"crc"`
	ObjectID string `json:"objectId"`
	Resid    int64  `json:"resid"`
	Puid     int    `json:"puid"`
	Data     struct {
		DisableOpt       bool      `json:"disableOpt"`
		Resid            int64     `json:"resid"`
		Crc              string    `json:"crc"`
		Puid             int       `json:"puid"`
		Isfile           bool      `json:"isfile"`
		Pantype          string    `json:"pantype"`
		Size             int       `json:"size"`
		Name             string    `json:"name"`
		ObjectID         string    `json:"objectId"`
		Restype          string    `json:"restype"`
		UploadDate       time.Time `json:"uploadDate"`
		ModifyDate       time.Time `json:"modifyDate"`
		UploadDateFormat string    `json:"uploadDateFormat"`
		Residstr         string    `json:"residstr"`
		Suffix           string    `json:"suffix"`
		Preview          string    `json:"preview"`
		Thumbnail        string    `json:"thumbnail"`
		Creator          int       `json:"creator"`
		Duration         int       `json:"duration"`
		IsImg            bool      `json:"isImg"`
		PreviewURL       string    `json:"previewUrl"`
		Filetype         string    `json:"filetype"`
		Filepath         string    `json:"filepath"`
		Sort             int       `json:"sort"`
		Topsort          int       `json:"topsort"`
		ResTypeValue     int       `json:"resTypeValue"`
		Extinfo          string    `json:"extinfo"`
	} `json:"data"`
}

type UploadDoneParam struct {
	Cataid string `json:"cataid"`
	Key    string `json:"key"`
	Param  struct {
		DisableOpt       bool      `json:"disableOpt"`
		Resid            int64     `json:"resid"`
		Crc              string    `json:"crc"`
		Puid             int       `json:"puid"`
		Isfile           bool      `json:"isfile"`
		Pantype          string    `json:"pantype"`
		Size             int       `json:"size"`
		Name             string    `json:"name"`
		ObjectID         string    `json:"objectId"`
		Restype          string    `json:"restype"`
		UploadDate       time.Time `json:"uploadDate"`
		ModifyDate       time.Time `json:"modifyDate"`
		UploadDateFormat string    `json:"uploadDateFormat"`
		Residstr         string    `json:"residstr"`
		Suffix           string    `json:"suffix"`
		Preview          string    `json:"preview"`
		Thumbnail        string    `json:"thumbnail"`
		Creator          int       `json:"creator"`
		Duration         int       `json:"duration"`
		IsImg            bool      `json:"isImg"`
		PreviewURL       string    `json:"previewUrl"`
		Filetype         string    `json:"filetype"`
		Filepath         string    `json:"filepath"`
		Sort             int       `json:"sort"`
		Topsort          int       `json:"topsort"`
		ResTypeValue     int       `json:"resTypeValue"`
		Extinfo          string    `json:"extinfo"`
	} `json:"param"`
}

func fileToObj(f File) *model.Object {
	if len(f.Content.FolderName) > 0 {
		return &model.Object{
			ID:       fmt.Sprintf("%d", f.ID),
			Name:     f.Content.FolderName,
			Size:     0,
			Modified: time.UnixMilli(f.Inserttime),
			IsFolder: true,
		}
	}
	paserTime := time.UnixMilli(f.Content.UploadDate)
	return &model.Object{
		ID:       fmt.Sprintf("%d$%s", f.ID, f.Content.FileID),
		Name:     f.Content.Name,
		Size:     int64(f.Content.Size),
		Modified: paserTime,
		IsFolder: false,
	}
}