Last active
August 29, 2015 14:14
-
-
Save knaka/a35243302ca657a9331b to your computer and use it in GitHub Desktop.
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
#!/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