Skip to content

Instantly share code, notes, and snippets.

@knaka
Last active August 29, 2015 14:14
Show Gist options
  • Save knaka/a35243302ca657a9331b to your computer and use it in GitHub Desktop.
Save knaka/a35243302ca657a9331b to your computer and use it in GitHub Desktop.
#!/bin/bash
# -*- coding: utf-8 -*-
# db=~/Library/Kobito/Kobito.db # DB path for older version of Kobito
db=~/Library/Containers/com.qiita.Kobito//Data/Library/Kobito/Kobito.db
dir=~/kobito/
encode_filename() {
name="$@"
name="${name//%/%37}"
name="${name//\//%47}"
echo -n "$name"
}
# link_html() {
# target="$1"
# link="$2"
# ln -sf "$target" "$link"
# }
link_html() {
target="$1"
link="$2"
title="$3"
cat <<EOF > "$link"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>Link to "$title"</title>
<script type="text/javascript">
location.replace('$target');
</script>
<meta http-equiv="Refresh" content="0; URL=$target" />
</head>
<body>
<noscript>
<p><a href="$target">$title</a></p>
</noscript>
</body>
</html>
EOF
}
IFS=$'\t'
mddir="$dir"/.md
htmldir="$dir"/.html
mkdir -p $dir $mddir $htmldir
rsync -azr /Applications/Kobito.app/Contents/Resources/ "$htmldir"/
if test -r "$dir"/.stamp
then
stamp=$(cat $dir/.stamp)
else
stamp=0
fi
date -u "+%s" > "$dir"/.stamp.new
echo Generating MD and HTML files.
echo "SELECT zkey, zin_trash IS NOT NULL FROM zitem WHERE
strftime('%s', '2001-01-01') + zupdated_at > $stamp;" |
sqlite3 -separator $'\t' $db |
while read -r key in_trash
do
if test "$in_trash" = "1"
then
rm -f $mddir/$key.md $htmldir/$key.html
else
echo "SELECT zraw_body FROM zitem WHERE zkey = '$key';" |
sqlite3 $db > $mddir/$key.md
echo "SELECT zbody FROM zitem WHERE zkey = '$key';" |
sqlite3 $db > $htmldir/$key.html
fi
done
echo Done.
echo Generating links to HTML files.
tmpdir=$(mktemp -d /tmp/XXXXXX)
mkdir -p $tmpdir/_all/
echo "SELECT ztag.zname, zitem.zkey, zitem.ztitle FROM zitem, z_1tags, ztag
WHERE zitem.zin_trash IS NULL AND ztag.z_pk = z_1tags.z_2tags AND
zitem.z_pk = z_1tags.z_1items;" |
sqlite3 -separator $'\t' $db |
while read -r tag key title
do
path_title=$(encode_filename "$title")
link_html ../.html/$key.html "$tmpdir"/_all/"$path_title.html" "$title"
path_tag=$(encode_filename "$tag")
mkdir -p $tmpdir/"$path_tag"
link_html ../.html/$key.html "$tmpdir"/"$path_tag"/"$path_title.html" "$title"
done
echo Done.
echo Copying temporary files to target directory.
rsync -azr --delete --exclude '.*' $tmpdir/ "$dir"/
rm -fr $tmpdir
echo Done.
mv "$dir"/.stamp.new "$dir"/.stamp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment