Last active
April 27, 2020 13:48
-
-
Save rbq/a42eaf490ead1399d3c2 to your computer and use it in GitHub Desktop.
Convert notes from Snippets.me to Quiver
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source 'https://rubygems.org' | |
gem 'data_mapper' | |
gem 'dm-sqlite-adapter' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# Author: rbq | |
# Source: https://gist.github.com/rbq/a42eaf490ead1399d3c2 | |
# Version: 2018-11-29 | |
# Usage: | |
# * `./snippetsme-to-quiver.rb` (requires recent Ruby/Bundler version) | |
# * Quiver: File -> Open Shared Notebook... -> Snippets.qvnotebook | |
SNIPPETS_DB_FILENAME = "#{Dir.home}/Library/Application Support/Snippets/Snippets.sqlite" | |
QUIVER_BOOK_FILENAME = 'Snippets.qvnotebook' | |
require 'fileutils' | |
require 'json' | |
require 'digest/sha1' | |
require 'bundler/setup' | |
Bundler.require | |
DataMapper.setup :default, "sqlite3://#{SNIPPETS_DB_FILENAME}" | |
DataMapper.repository(:default).adapter.field_naming_convention = lambda { |value| value.name.to_s } | |
class Snippet | |
include DataMapper::Resource | |
storage_names[:default] = 'Snippet' | |
belongs_to :language, child_key: [:HighlightKey] | |
has n, :labelings, child_key: [:SnippetKey] | |
has n, :labels, through: :labelings | |
property :id, String, field: 'Key', key: true | |
property :name, String, field: 'Name' | |
property :code, String, field: 'SourceCode' | |
property :comment, String, field: 'Comment' | |
property :author, String, field: 'Author' | |
property :url, String, field: 'RelatedUrl' | |
property :filename, String, field: 'ExportFileName' | |
property :created, Integer, field: 'DateAdded' | |
property :removed, Integer, field: 'DateRemoved' | |
def language_name | |
return 'plain_text' unless language && language.name | |
{ | |
'C' => 'c_cpp', | |
'C++' => 'c_cpp', | |
'C#' => 'csharp', | |
'Cold Fusion' => 'coldfusion', | |
'Objective-C' => 'objectivec', | |
'Shell Script' => 'sh', | |
}.fetch(language.name) { | |
language.name.gsub(' ', '_').downcase | |
} | |
end | |
end | |
class Language | |
include DataMapper::Resource | |
storage_names[:default] = 'Highlight' | |
property :id, String, field: 'Key', key: true | |
property :name, String, field: 'Name' | |
end | |
class Labeling | |
include DataMapper::Resource | |
storage_names[:default] = 'SnippetLabels' | |
belongs_to :snippet, child_key: [:SnippetKey] | |
belongs_to :label, child_key: [:LabelKey] | |
property :id, String, field: 'rowid', key: true | |
end | |
class Label | |
include DataMapper::Resource | |
storage_names[:default] = 'Label' | |
property :id, String, field: 'Key', key: true | |
property :name, String, field: 'Name' | |
end | |
DataMapper.finalize | |
quiver_book_metadata = { name: 'Snippets.me', uuid: 'Snippets' } | |
FileUtils::mkdir_p QUIVER_BOOK_FILENAME | |
quiver_book_meta_filename = File.join(QUIVER_BOOK_FILENAME, 'meta.json') | |
File.open(quiver_book_meta_filename, 'w') do | |
|file| file.write JSON.pretty_generate(quiver_book_metadata) | |
end | |
Snippet.all(:name.not => nil, :removed => nil).each do |snippet| | |
quiver_note_uuid = Digest::SHA1.hexdigest "Snippets.me #{snippet.id}" | |
quiver_note_meta_data = { | |
uuid: quiver_note_uuid, | |
title: snippet.name, | |
created_at: snippet.created, | |
updated_at: snippet.created, | |
tags: snippet.labels.map(&:name).to_a, | |
} | |
quiver_note_content_data = { | |
title: snippet.name, | |
cells: [ | |
snippet.comment ? { type: 'text', data: snippet.comment } : nil, | |
snippet.code ? { type: 'code', language: snippet.language_name, data: snippet.code } : nil, | |
].compact | |
} | |
quiver_note_filename = File.join(QUIVER_BOOK_FILENAME, "#{quiver_note_uuid}.qvnote") | |
quiver_note_meta_filename = File.join(quiver_note_filename, 'meta.json') | |
quiver_note_content_filename = File.join(quiver_note_filename, 'content.json') | |
FileUtils::mkdir_p quiver_note_filename | |
File.open(quiver_note_meta_filename, 'w') do |file| | |
file.write JSON.pretty_generate(quiver_note_meta_data) | |
end | |
FileUtils::mkdir_p quiver_note_filename | |
File.open(quiver_note_content_filename, 'w') do |file| | |
file.write JSON.pretty_generate(quiver_note_content_data) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
la casa amarilla