react-native-realm-cache-image
Version:
A cache-image for react-native with using Realm
115 lines (98 loc) • 2.96 kB
JavaScript
/*
* (The MIT License)
* Copyright (c) 2015-2016 YunJiang.Fang <42550564@qq.com>
*/
;
var Realm = require('realm');
var fs = require('react-native-fs');
const DB_NAME = "cache_image";
const TABLE_CACHE_ID = "cache_id";
const TABLE_CACHE_IMAGE = "cache_image";
const TABLE_CACHE_STORAGE = "cache_storage";
const CACHE_IMAGE_DIR = 'cacheimages';
const CACHE_IMAGE_SIZE = 1024*1024*50;
//var db = Sqlite.openDatabase(DB_NAME, '1.0', 'cache image', 1024*1024*2);
class CacheIDSchema extends Realm.Object {}
class CacheImageSchema extends Realm.Object {}
class CacheStorageSchema extends Realm.Object {}
CacheIDSchema.schema = {
name: 'CacheID',
primaryKey: 'url',
properties: {
url: 'string',
ref: 'int',
size: 'int',
time: 'int'
}
};
CacheImageSchema.schema = {
name: 'CacheImage',
primaryKey: 'id',
properties: {
id: 'int',
url: 'string',
}
}
CacheStorageSchema.schema = {
name: 'CacheStorage',
primaryKey: 'key',
properties: {
key: 'int',
storage: 'int',
}
}
class StorageMgr {
constructor() {
this.realm = new Realm({
path: 'storageMgr.realm',
schema: [CacheIDSchema, CacheImageSchema, CacheStorageSchema]
});
this.storage = 0;
this.realm_storage = this.realm.objects('CacheStorage');
fs.mkdir(fs.DocumentDirectoryPath+'/'+CACHE_IMAGE_DIR);
var q = this.realm_storage.filtered('key=1');
if(q.length) self.storage = q[0].storage;
}
updateStorage(offset) {
var self = this;
//console.log('StorageMgr updateStorage', this.storage, offset);
return new Promise((resolve, reject) => {
//this.realm_storage
let q = self.realm_storage.filtered('key=1');
try{
self.realm.write(() => {
realm.create('CacheStorage', {
key: 1,
storage: (q.length ? q[0].storage : 0 ) + offset
});
}, true);
self.storage += offset;
resolve(true);
}catch(e){
resolve(false);
}
});
}
getCacheFilePath(filename) {
return fs.DocumentDirectoryPath+'/'+CACHE_IMAGE_DIR+'/'+filename;
}
clear() {
fs.unlink(fs.DocumentDirectoryPath+'/'+CACHE_IMAGE_DIR);
let q = realm.objects('CacheStorage');
let q1 = realm.objects('CacheID');
let q2 = realm.objects('CacheImage');
realm.delete(q);
realm.delete(q1);
realm.delete(q2);
this.storage = 0;
fs.mkdir(fs.DocumentDirectoryPath+'/'+CACHE_IMAGE_DIR);
}
}
StorageMgr.getSchema = () => {
return [CacheIDSchema, CacheImageSchema, CacheStorageSchema];
}
StorageMgr.TABLE_CACHE_ID = TABLE_CACHE_ID;
StorageMgr.TABLE_CACHE_IMAGE = TABLE_CACHE_IMAGE;
StorageMgr.CACHE_IMAGE_SIZE = CACHE_IMAGE_SIZE;
//StorageMgr.db = db;
module.exports = StorageMgr;