Guest User

paper.js

a guest
Aug 7th, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const sqlite3 = require("sqlite3").verbose();
  2. const Dropbox = require("dropbox").Dropbox;
  3. const fetch = require('isomorphic-fetch');
  4. const moment = require("moment");
  5. const sleep = require('sleep');
  6.  
  7. const dbx = new Dropbox({
  8.   accessToken: process.env.DROPBOX_ACCESS_TOKEN, fetch
  9. })
  10.  
  11. fetchMoreDocs = async (docIds, l, fetchMoreDocs) => {
  12.   docIds = docIds.concat(l.doc_ids);
  13.   console.info("Paper docs fetched batch", l.doc_ids.length);
  14.   if (l.has_more) {
  15.     return dbx.paperDocsListContinue({ cursor: l.cursor.value })
  16.       .then(n => fetchMoreDocs(docIds, n, fetchMoreDocs))
  17.       .catch(err => {
  18.         console.warn("Failed to fetch more docs", err);
  19.         return Promise.reject(err);
  20.       })
  21.   } else {
  22.     return Promise.resolve(docIds);
  23.   }
  24. }
  25.  
  26. main = async () => {
  27.   const docs =
  28.     await dbx.paperDocsList({ limit: 1000 })
  29.     .then(l => fetchMoreDocs([], l, fetchMoreDocs))
  30.     .catch(err => console.warn("Failed to fetch doc list", er))
  31.     .then(docs => {
  32.       return Promise.all(
  33.         docs.map(id => dbx.paperDocsDownload({
  34.           doc_id: id,
  35.           export_format: "markdown"
  36.         })
  37.           .then(doc => {
  38.             /// console.info("Doc " + id + " " + doc.title, doc)
  39.             return Promise.resolve(doc);
  40.           })
  41.           .catch(err => {
  42.             console.warn("Failed to download " + id, err);
  43.             return Promise.reject(err);
  44.           })
  45.         )
  46.       )
  47.     })
  48.  
  49.   console.info("Existing docs", docs.length);
  50.   const existing = {};
  51.   for (let i = 0; i < docs.length; i++) {
  52.     const title = docs[i].title;
  53.     const m = title.match(/^\[([0-9]+)\] .*/)
  54.     if (m) {
  55.       const id = parseInt(m[1], 10)
  56.       existing[id] = docs[i];
  57.     } else {
  58.       // console.warn("No id" + docs[i].title)
  59.     }
  60.   }
  61.  
  62.   const db = new sqlite3.Database(process.env.NOTE_DB);
  63.   db.serialize(() => {
  64.     db.each("select * from note", async (err, row) => {
  65.       if (row._id >= 0 && true) { //existing[row._id] === undefined) {
  66.         await dbx.paperDocsCreate({
  67.           contents: "[" + row._id + "] " + moment(row.modified_date).format("YYYY-MM-DD") + " " + row.snippet,
  68.           import_format: "plain_text",
  69.           parent_folder_id: process.env.FOLDER_ID
  70.         }).then(r => {
  71.           console.info("Created " + row._id, r);
  72.         }).catch(err => {
  73.           /// Gives 500 Internal Server Error but still creates a note?
  74.           console.warn("Failed to create " + row._id, JSON.stringify(err));
  75.         })
  76.       } else {
  77.         console.info("Skipping creating " + row._id);
  78.       }
  79.     })
  80.   })
  81.   db.close();
  82. }
  83.  
  84.   main();
Add Comment
Please, Sign In to add comment