<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>K&#039;s Lair &#187; ngg</title>
	<atom:link href="http://andreas.goelzer.de/tag/ngg/feed" rel="self" type="application/rss+xml" />
	<link>http://andreas.goelzer.de</link>
	<description>Electronics and small programs and other stuff</description>
	<lastBuildDate>Thu, 02 Sep 2010 12:30:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Synchronizing Digikam and NGG</title>
		<link>http://andreas.goelzer.de/synchronizing-digikam-and-ngg</link>
		<comments>http://andreas.goelzer.de/synchronizing-digikam-and-ngg#comments</comments>
		<pubDate>Thu, 06 Mar 2008 01:53:07 +0000</pubDate>
		<dc:creator>Andreas Goelzer</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[digikam]]></category>
		<category><![CDATA[ngg]]></category>

		<guid isPermaLink="false">http://www.goelzer.de/andreas/wordpress/index.php/synchronizing-digikam-and-ngg/.</guid>
		<description><![CDATA[This little script automatically generates the gallery on this site from the local digikam(kde 3) database. To accomplish that task, it looks for files tagged public, and uploads them if they aren&#8217;t already uploaded. It completely rewrites the ngg database, &#8230; <a href="http://andreas.goelzer.de/synchronizing-digikam-and-ngg">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This little script automatically generates the gallery on this site from the local <a href="http://www.digikam.org/">digikam</a>(kde 3) database. To accomplish that task, it looks for files tagged public, and uploads them if they aren&#8217;t already uploaded. It completely rewrites the <a href="http://alexrabe.boelinger.com/category/nextgengallery/">ngg</a> database, so don&#8217;t use this if yo have put effort into creating a database with the ngg frontend.<br />
Pictures are resized locally using imagemagick, so it avoids problems with low memory on some shared servers.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
<span style="color: #483d8b;">&quot;&quot;&quot;
Script to export Photos from Digikam to NGG
Copyright (C) 2008  Andreas Goelzer
&nbsp;
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
&nbsp;
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
&nbsp;
You should have received a copy of the GNU General Public License
along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
&nbsp;
&nbsp;
This program exports pictures from your 
DigiKam (http://www.digikam.org/) database to a
NGG (http://alexrabe.boelinger.com/category/nextgengallery/) database.
It is at the moment highly experimental and in a works-for-me-right-now
state.
Be really really careful if trying to use it, it will
- determine which photos are tagged &quot;public&quot;
- upload them to a dir, kill everything in the target dir not tagged public
- rewrite the remote database
- automatically create thumbnails along the way
I don't know much about databases, so this code is quite inefficient. It
doesn't pose a big problem for my ~5k local, 100 remote photos, though
&nbsp;
Once again, it *will* erase the remote directory, and possibly more. 
NO WARRANTY!
see http://andreas.goelzer.de/synchronizing-digikam-and-ngg for updates.
&quot;&quot;&quot;</span>
<span style="color: #ff7700;font-weight:bold;">import</span> sqlite3<span style="color: #66cc66;">;</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span><span style="color: #66cc66;">;</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span><span style="color: #66cc66;">;</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Calculating new remote DB&quot;</span>
&nbsp;
con = sqlite3.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;digikam3.db&quot;</span><span style="color: black;">&#41;</span>
target = <span style="color: #483d8b;">&quot;www.domain.de@ssh.strato.de&quot;</span>
targetdir = <span style="color: #483d8b;">&quot;subdir&quot;</span>	
openmysql = <span style="color: #483d8b;">&quot;mysql -h rdbms -u username --password=pw database&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> mymask<span style="color: black;">&#40;</span>obj<span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">type</span><span style="color: black;">&#40;</span>obj<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: black;">&#40;</span><span style="color: #008000;">str</span>, <span style="color: #008000;">unicode</span><span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span> + obj.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'&quot;'</span>, <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\\</span>&quot;'</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;'&quot;</span>, <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>'&quot;</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">else</span>:
		<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #dc143c;">repr</span><span style="color: black;">&#40;</span>obj<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">def</span> myrepr<span style="color: black;">&#40;</span>obj<span style="color: black;">&#41;</span>:
	<span style="color: #008000;">str</span>=<span style="color: #483d8b;">&quot;&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">type</span><span style="color: black;">&#40;</span>obj<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: black;">&#40;</span><span style="color: #008000;">tuple</span>, <span style="color: #008000;">list</span><span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">for</span> elem <span style="color: #ff7700;font-weight:bold;">in</span> obj:
			<span style="color: #008000;">str</span> += mymask<span style="color: black;">&#40;</span>elem<span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;,&quot;</span><span style="color: #66cc66;">;</span>
		<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;(&quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#91;</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;)&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">else</span>:
		<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #dc143c;">repr</span><span style="color: black;">&#40;</span>obj<span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> joinselect<span style="color: black;">&#40;</span>con, query<span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;,&quot;</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #008000;">list</span><span style="color: black;">&#40;</span>myrepr<span style="color: black;">&#40;</span>row<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> row <span style="color: #ff7700;font-weight:bold;">in</span> con.<span style="color: black;">execute</span><span style="color: black;">&#40;</span>query<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> remoteexec<span style="color: black;">&#40;</span><span style="color: #dc143c;">cmd</span><span style="color: black;">&#41;</span>:
	<span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ssh &quot;</span> + target + <span style="color: #483d8b;">&quot; <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + <span style="color: #dc143c;">cmd</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> copyremote<span style="color: black;">&#40;</span><span style="color: #008000;">file</span>,tsubdir<span style="color: black;">&#41;</span>:
	<span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;scp -p &quot;</span> + <span style="color: #008000;">file</span> + <span style="color: #483d8b;">&quot; &quot;</span> + target + <span style="color: #483d8b;">&quot;:&quot;</span> + <span style="color: #dc143c;">re</span>.<span style="color: black;">escape</span><span style="color: black;">&#40;</span>targetdir + tsubdir<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
dbprefix = <span style="color: #483d8b;">&quot;wp_ngg_&quot;</span>
chooseidsstring = <span style="color: #483d8b;">&quot;(SELECT DISTINCT imageid FROM imagetags WHERE tagid = (SELECT id FROM tags WHERE name = <span style="color: #000099; font-weight: bold;">\&quot;</span>public<span style="color: #000099; font-weight: bold;">\&quot;</span>))&quot;</span>
sqlcommands  = <span style="color: #483d8b;">&quot;DELETE FROM &quot;</span> + dbprefix + <span style="color: #483d8b;">&quot;pic2tags;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">;</span>
sqlcommands += <span style="color: #483d8b;">&quot;DELETE FROM &quot;</span> + dbprefix + <span style="color: #483d8b;">&quot;tags;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">;</span>
sqlcommands += <span style="color: #483d8b;">&quot;DELETE FROM &quot;</span> + dbprefix + <span style="color: #483d8b;">&quot;pictures;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">;</span>
sqlcommands += <span style="color: #483d8b;">&quot;DELETE FROM &quot;</span> + dbprefix + <span style="color: #483d8b;">&quot;gallery;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">;</span>
sqlcommands += <span style="color: #483d8b;">&quot;DELETE FROM &quot;</span> + dbprefix + <span style="color: #483d8b;">&quot;album;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">;</span>
&nbsp;
&nbsp;
&nbsp;
&nbsp;
sqlcommands += <span style="color: #483d8b;">&quot;INSERT INTO &quot;</span> + dbprefix + <span style="color: #483d8b;">&quot;pic2tags(picid,tagid) VALUES &quot;</span> + joinselect<span style="color: black;">&#40;</span>con, <span style="color: #483d8b;">&quot;SELECT  imageid, tagid FROM imagetags  WHERE imageid IN  &quot;</span> + chooseidsstring<span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
&nbsp;
sqlcommands += <span style="color: #483d8b;">&quot;INSERT INTO &quot;</span> + dbprefix + <span style="color: #483d8b;">&quot;tags(id, name, slug) VALUES &quot;</span> + joinselect<span style="color: black;">&#40;</span>con, <span style="color: #483d8b;">&quot;SELECT  id,name,name FROM tags WHERE id IN (SELECT DISTINCT tagid FROM imagetags   WHERE imageid IN    &quot;</span> + chooseidsstring + <span style="color: #483d8b;">&quot;)&quot;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
&nbsp;
sqlcommands += <span style="color: #483d8b;">&quot;INSERT INTO &quot;</span> + dbprefix + <span style="color: #483d8b;">&quot;pictures(pid, galleryid, filename, description) VALUES &quot;</span> + joinselect<span style="color: black;">&#40;</span>con, <span style="color: #483d8b;">&quot;SELECT  id,dirid,name,caption FROM images   WHERE id IN &quot;</span>  + chooseidsstring <span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
&nbsp;
&nbsp;
sqlcommands += <span style="color: #483d8b;">&quot;INSERT INTO &quot;</span> + dbprefix + <span style="color: #483d8b;">&quot;gallery(gid, name, path, title,previewpic) VALUES &quot;</span>
&nbsp;
&nbsp;
allalbums=<span style="color: #483d8b;">&quot;&quot;</span><span style="color: #66cc66;">;</span>
j=<span style="color: #ff4500;">0</span><span style="color: #66cc66;">;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> row <span style="color: #ff7700;font-weight:bold;">in</span> con.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT id,url,icon FROM albums WHERE id IN (SELECT DISTINCT dirid FROM images WHERE id IN &quot;</span> + chooseidsstring + <span style="color: #483d8b;">&quot;) ORDER BY url&quot;</span><span style="color: black;">&#41;</span>:
	allalbums += <span style="color: #483d8b;">&quot;i:&quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>j<span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;;i:&quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;;&quot;</span>
	j += <span style="color: #ff4500;">1</span>
	<span style="color: #808080; font-style: italic;">#if(row[2] == None): icon = &quot;NULL&quot;</span>
	<span style="color: #808080; font-style: italic;">#check whether icon is public</span>
	icon = <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span> == <span style="color: #008000;">None</span> <span style="color: #ff7700;font-weight:bold;">or</span> con.<span style="color: black;">execute</span><span style="color: black;">&#40;</span>chooseidsstring<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot; AND imageid = &quot;</span> + icon<span style="color: black;">&#41;</span>.<span style="color: black;">fetchone</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> == <span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
		nrow = con.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT id FROM images WHERE id IN &quot;</span> + chooseidsstring + <span style="color: #483d8b;">&quot; AND dirid = &quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>.<span style="color: black;">fetchone</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		icon=<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>nrow<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
	sqlcommands += <span style="color: #483d8b;">&quot;(&quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;, <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">basename</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> , <span style="color: #000099; font-weight: bold;">\&quot;</span>photos&quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>, <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span>+ <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">basename</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;_&quot;</span>,<span style="color: #483d8b;">&quot; &quot;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>,&quot;</span> + icon + <span style="color: #483d8b;">&quot;),&quot;</span>	
&nbsp;
sqlcommands = sqlcommands<span style="color: black;">&#91;</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
allalbums = <span style="color: #483d8b;">&quot;a:&quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>j<span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;:{&quot;</span> + allalbums + <span style="color: #483d8b;">&quot;}&quot;</span>
&nbsp;
sqlcommands += <span style="color: #483d8b;">&quot;INSERT INTO &quot;</span>+ dbprefix + <span style="color: #483d8b;">&quot;album(id, name, sortorder) VALUES (1, 'Main Gallery', '&quot;</span> + allalbums + <span style="color: #483d8b;">&quot;');<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#print s</span>
f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'remotedb.sql'</span>,<span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
f.<span style="color: black;">write</span><span style="color: black;">&#40;</span>sqlcommands.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'latin-1'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
copyremote<span style="color: black;">&#40;</span><span style="color: #483d8b;">'remotedb.sql'</span>,<span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>
remoteexec<span style="color: black;">&#40;</span>openmysql + <span style="color: #483d8b;">'&lt;'</span> + targetdir + <span style="color: #483d8b;">'/'</span> + <span style="color: #483d8b;">'remotedb.sql'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#exit()</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;creating remote directories&quot;</span>
<span style="color: #808080; font-style: italic;">#remotely create dirs</span>
con2 = sqlite3.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;:memory:&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;CREATE TABLE remotedirs (file varchar(255), PRIMARY KEY (file))&quot;</span><span style="color: black;">&#41;</span>
a = <span style="color: #dc143c;">os</span>.<span style="color: black;">popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ssh &quot;</span> + target + <span style="color: #483d8b;">&quot; find &quot;</span> + <span style="color: #dc143c;">re</span>.<span style="color: black;">escape</span><span style="color: black;">&#40;</span>targetdir<span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot; -type d&quot;</span><span style="color: black;">&#41;</span>.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> elem <span style="color: #ff7700;font-weight:bold;">in</span> a:
	<span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>elem <span style="color: #66cc66;">!</span>= <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>: con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;INSERT INTO remotedirs VALUES (<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + elem<span style="color: black;">&#91;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>targetdir<span style="color: black;">&#41;</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>)&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;CREATE TABLE localdirs (file varchar(255))&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> row <span style="color: #ff7700;font-weight:bold;">in</span>  con.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT DISTINCT albums.url from images INNER JOIN albums ON images.dirid = albums.id WHERE images.id IN &quot;</span> + chooseidsstring<span style="color: black;">&#41;</span>:
	dirs=row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;/&quot;</span><span style="color: black;">&#41;</span>
	dire=<span style="color: #483d8b;">&quot;&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> dirss <span style="color: #ff7700;font-weight:bold;">in</span> dirs<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>:<span style="color: black;">&#93;</span>:
		dire += <span style="color: #483d8b;">&quot;/&quot;</span> + dirss
		con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;INSERT INTO localdirs VALUES (<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + dire + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>)&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
	con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;INSERT INTO localdirs VALUES (<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>+<span style="color: #483d8b;">&quot;/thumbs<span style="color: #000099; font-weight: bold;">\&quot;</span>)&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #808080; font-style: italic;">#delete dirs</span>
<span style="color: #ff7700;font-weight:bold;">for</span> row <span style="color: #ff7700;font-weight:bold;">in</span> con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT file FROM remotedirs WHERE file NOT IN (SELECT DISTINCT file FROM localdirs) ORDER BY length(file) DESC&quot;</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;deleting &quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">;</span> 
	remoteexec<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;rmdir &quot;</span> + <span style="color: #dc143c;">re</span>.<span style="color: black;">escape</span><span style="color: black;">&#40;</span>targetdir + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#create dirs</span>
<span style="color: #ff7700;font-weight:bold;">for</span> row <span style="color: #ff7700;font-weight:bold;">in</span> con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT file FROM localdirs WHERE file NOT IN (SELECT file FROM remotedirs)&quot;</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;creating &quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">;</span> 
	remoteexec<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;mkdir &quot;</span> + <span style="color: #dc143c;">re</span>.<span style="color: black;">escape</span><span style="color: black;">&#40;</span>targetdir + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">#handle files</span>
a = <span style="color: #dc143c;">os</span>.<span style="color: black;">popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ssh &quot;</span> + target + <span style="color: #483d8b;">&quot; find &quot;</span> + <span style="color: #dc143c;">re</span>.<span style="color: black;">escape</span><span style="color: black;">&#40;</span>targetdir<span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot; -type f&quot;</span><span style="color: black;">&#41;</span>.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;CREATE TABLE remote (file varchar(255), PRIMARY KEY (file))&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> elem <span style="color: #ff7700;font-weight:bold;">in</span> a:
	<span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>elem <span style="color: #66cc66;">!</span>= <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>: con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;INSERT INTO remote VALUES (<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + elem<span style="color: black;">&#91;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>targetdir<span style="color: black;">&#41;</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>)&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;CREATE TABLE local (file varchar(255), isthumb bool , PRIMARY KEY (file))&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> row <span style="color: #ff7700;font-weight:bold;">in</span>  con.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT albums.url, images.name from images INNER JOIN albums ON images.dirid = albums.id WHERE images.id IN &quot;</span> + chooseidsstring<span style="color: black;">&#41;</span>:
	con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;INSERT INTO local VALUES (<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>+<span style="color: #483d8b;">&quot;/&quot;</span>+row<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>, 0)&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
	con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;INSERT INTO local VALUES (<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>+<span style="color: #483d8b;">&quot;/thumbs/thumbs_&quot;</span>+row<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>, 1)&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Deleting leftover files&quot;</span>
<span style="color: #808080; font-style: italic;">#delete files no longer in the db</span>
<span style="color: #ff7700;font-weight:bold;">for</span> row <span style="color: #ff7700;font-weight:bold;">in</span> con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT file FROM remote WHERE file NOT IN (SELECT file FROM local)&quot;</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;deleting &quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">;</span> 
	remoteexec<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;rm &quot;</span> +  <span style="color: #dc143c;">re</span>.<span style="color: black;">escape</span><span style="color: black;">&#40;</span>targetdir + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Uploading files&quot;</span>
<span style="color: #808080; font-style: italic;">#upload files</span>
<span style="color: #ff7700;font-weight:bold;">for</span> row <span style="color: #ff7700;font-weight:bold;">in</span> con2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT file,isthumb FROM local WHERE file NOT IN (SELECT file FROM remote)&quot;</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;creating and uploading thumbnail: &quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">;</span> 
		<span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;convert <span style="color: #000099; font-weight: bold;">\&quot;</span>.&quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;thumbs/thumbs_&quot;</span>,<span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> -thumbnail 100x75 thumb.jpg&quot;</span><span style="color: black;">&#41;</span>
		copyremote<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;thumb.jpg&quot;</span>, <span style="color: #dc143c;">re</span>.<span style="color: black;">escape</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">else</span>:
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;resizing and uploading image:     &quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">;</span> 
		<span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;convert <span style="color: #000099; font-weight: bold;">\&quot;</span>.&quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> -resize <span style="color: #000099; font-weight: bold;">\&quot;</span>1024x768&gt;<span style="color: #000099; font-weight: bold;">\&quot;</span> small.jpg&quot;</span><span style="color: black;">&#41;</span>
		copyremote<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;small.jpg&quot;</span>, <span style="color: #dc143c;">re</span>.<span style="color: black;">escape</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<hr /><a href='http://andreas.goelzer.de/download/uploader.py'><img src="http://andreas.goelzer.de/wp-content/plugins/kfile/fileicons/file-source-alt.png" width="16" height="16" alt="filetype" class="icon16" /> uploader.py</a> (7.25 kiB, 2008-10-06)<br/><br />
<hr />
]]></content:encoded>
			<wfw:commentRss>http://andreas.goelzer.de/synchronizing-digikam-and-ngg/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)

Served from: andreas.goelzer.de @ 2010-09-09 07:43:52 -->