123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import Keychain from './keychain';
- import { arrayToB64 } from './utils';
- import { del, fileInfo, setParams, setPassword } from './api';
- export default class OwnedFile {
- constructor(obj) {
- if (!obj.manifest) {
- throw new Error('invalid file object');
- }
- this.id = obj.id;
- this.url = obj.url;
- this.name = obj.name;
- this.size = obj.size;
- this.manifest = obj.manifest;
- this.time = obj.time;
- this.speed = obj.speed;
- this.createdAt = obj.createdAt;
- this.expiresAt = obj.expiresAt;
- this.ownerToken = obj.ownerToken;
- this.dlimit = obj.dlimit || 1;
- this.dtotal = obj.dtotal || 0;
- this.keychain = new Keychain(obj.secretKey, obj.nonce);
- this._hasPassword = !!obj.hasPassword;
- this.timeLimit = obj.timeLimit;
- }
- get hasPassword() {
- return !!this._hasPassword;
- }
- get expired() {
- return this.dlimit === this.dtotal || Date.now() > this.expiresAt;
- }
- async setPassword(password) {
- try {
- this.password = password;
- this._hasPassword = true;
- this.keychain.setPassword(password, this.url);
- const result = await setPassword(this.id, this.ownerToken, this.keychain);
- return result;
- } catch (e) {
- this.password = null;
- this._hasPassword = false;
- throw e;
- }
- }
- del() {
- return del(this.id, this.ownerToken);
- }
- changeLimit(dlimit, user = {}) {
- if (this.dlimit !== dlimit) {
- this.dlimit = dlimit;
- return setParams(this.id, this.ownerToken, user.bearerToken, { dlimit });
- }
- return Promise.resolve(true);
- }
- async updateDownloadCount() {
- const oldTotal = this.dtotal;
- const oldLimit = this.dlimit;
- try {
- const result = await fileInfo(this.id, this.ownerToken);
- this.dtotal = result.dtotal;
- this.dlimit = result.dlimit;
- } catch (e) {
- if (e.message === '404') {
- this.dtotal = this.dlimit;
- }
- // ignore other errors
- }
- return oldTotal !== this.dtotal || oldLimit !== this.dlimit;
- }
- toJSON() {
- return {
- id: this.id,
- url: this.url,
- name: this.name,
- size: this.size,
- manifest: this.manifest,
- time: this.time,
- speed: this.speed,
- createdAt: this.createdAt,
- expiresAt: this.expiresAt,
- secretKey: arrayToB64(this.keychain.rawSecret),
- ownerToken: this.ownerToken,
- dlimit: this.dlimit,
- dtotal: this.dtotal,
- hasPassword: this.hasPassword,
- timeLimit: this.timeLimit
- };
- }
- }
|