Guest User

Untitled

a guest
Feb 20th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. //importamos todas las librerias que usaremos para el desarrollo
  2. import PouchDB from 'pouchdb';
  3. import { File} from '@ionic-native/file';
  4. import { fromPromise} from 'rxjs/observable/fromPromise';
  5. import { Observable} from 'rxjs';
  6. import 'rxjs/add/operator/catch';
  7. import 'rxjs/add/operator/switchMap';
  8. import 'rxjs/add/observable/throw';
  9.  
  10. import cordovaSqlitePlugin from 'pouchdb-adapter-cordova-sqlite';
  11.  
  12. declare let window:any;
  13. // integracion de pouchdb-adapter-cordova-sqlite con PouchDB
  14. PouchDB.plugin(cordovaSqlitePlugin);
  15.  
  16. // Los metodos de esta clase son Estáticos para poder ser referenciados sin crear
  17. // alguna instancia de ellos
  18.  
  19. export class InitialDB{
  20. // Instancia de manejo se archivos.
  21. static file:File = new File();
  22.  
  23. // Método encargado en llamar los subprocesos para la inicialización de la Base de Datos
  24. static initDB(dbName:string){
  25. // Obtiene el path o ruta de la base de datos
  26. let sourceFileName = `${InitialDB.file.applicationDirectory}www/assets/${dbName}`;
  27. // Obtiene el lugar donde será o esta el archivo SQLite (Base de Datos)
  28. let targetDirName = InitialDB.file.dataDirectory;
  29.  
  30. return InitialDB.resolveLoadDB(dbName,sourceFileName,targetDirName)
  31. .switchMap((resource:any)=>{
  32. // Nos percatamos de que sea un Observable lo que nos devuelve
  33. if(resource.subscribe){
  34. // si es un Observable lo devolvemos sin modificar
  35. return resource;
  36. }else{
  37. // si no es un Observable creamos uno para no tener problemas al subscribirnos
  38. return Observable.from('a');
  39. }
  40. }).map(()=>{
  41. // En este paso ya tenemos la certeza de que la Base de Datos ya ha sido
  42. // movida en el lugar que necesitamos
  43. return InitialDB.initializeDB(dbName);
  44. });
  45. }
  46.  
  47. // Método que verifica y obtiene el contenido de cada path o ruta pasada como parámetro
  48. static resolveFile(path){
  49. return fromPromise(InitialDB.file.resolveLocalFilesystemUrl(path)).catch((data)=>{
  50. return Observable.throw(data);
  51. }
  52. )
  53. }
  54.  
  55. // Método que obtiene la Base de Datos
  56. static resolveLoadDB(dbName,path1,path2){
  57. return Observable.forkJoin(
  58. InitialDB.resolveFile(path1),
  59. InitialDB.resolveFile(path2),
  60. ).switchMap((files)=>{
  61. // una vez ejecutado las anteriores promesas obtenemos los resultados
  62. let sourceFile:any = files[0];
  63. let targetDir:any = files[1];
  64. // Inicializamos un Promise esta obtendra la Base de Datos.
  65. return fromPromise(new Promise((res,rej)=>{
  66. // Vereficamos si existe la Base de Datos en el path de archivos de la aplicación
  67. // si existe entonces devolvemos la base de datos para la inicialización con PouchDB
  68. targetDir.getFile(dbName,{},res,rej);
  69. // Caso contrario ocurrira un error que lo capturamos
  70. }).catch((e)=>{
  71. // Al capturar el error podemos ver q el archivo de la Base de Datos no esta localizado
  72. // en el lugar adecuado entonces copeamos el archivo que colocamos en assets y lo localizaremos
  73. // en el path de uso de la aplicación
  74. return fromPromise(new Promise((reso,reje)=>{
  75. sourceFile.copyTo(targetDir,dbName,reso,reje);
  76. }));
  77. }));
  78. });
  79. }
  80.  
  81. // Método que Inicializa con PouchDB
  82. static initializeDB(dbName){
  83. // Inicializamos la Base de Datos con PouchDB con el adaptador cordova-sqlite
  84. return new PouchDB(`${dbName}`,{
  85. adapter: 'cordova-sqlite',
  86. });
  87. }
  88. }
Add Comment
Please, Sign In to add comment