Comparison

tools/ejabberdsql2prosody.lua @ 1595:9551055b5344

ejabberdsql2prosody: Added support for rosters
author Waqas Hussain <waqas20@gmail.com>
date Sun, 26 Jul 2009 00:32:51 +0500
parent 1594:6e639a34e503
child 1596:4fcb2df97141
comparison
equal deleted inserted replaced
1594:6e639a34e503 1595:9551055b5344
174 row[j] = nil; 174 row[j] = nil;
175 end 175 end
176 end 176 end
177 end 177 end
178 end 178 end
179 --print(serialize(t));
179 180
180 for i, row in ipairs(t["users"] or NULL) do 181 for i, row in ipairs(t["users"] or NULL) do
181 local node, password = row.username, row.password; 182 local node, password = row.username, row.password;
182 local ret, err = dm.store(node, host, "accounts", {password = password}); 183 local ret, err = dm.store(node, host, "accounts", {password = password});
183 print("["..(err or "success").."] accounts: "..node.."@"..host.." = "..password); 184 print("["..(err or "success").."] accounts: "..node.."@"..host.." = "..password);
184 end 185 end
185 for i, row in ipairs(t["private_storage"] or NULL) do 186
186 --local node, password = row.username, row.password; 187 function roster(node, host, jid, item)
187 --local ret, err = dm.store(node, host, "accounts", {password = password}); 188 local roster = dm.load(node, host, "roster") or {};
188 --print("["..(err or "success").."] accounts: "..node.."@"..host.." = "..password); 189 roster[jid] = item;
189 end 190 local ret, err = dm.store(node, host, "roster", roster);
191 print("["..(err or "success").."] roster: " ..node.."@"..host.." - "..jid);
192 end
193 function roster_pending(node, host, jid)
194 local roster = dm.load(node, host, "roster") or {};
195 roster.pending = roster.pending or {};
196 roster.pending[jid] = true;
197 local ret, err = dm.store(node, host, "roster", roster);
198 print("["..(err or "success").."] roster: " ..node.."@"..host.." - "..jid);
199 end
200 function roster_group(node, host, jid, group)
201 local roster = dm.load(node, host, "roster") or {};
202 local item = roster[jid];
203 if not item then print("Warning: No roster item "..jid.." for user "..user..", can't put in group "..group); return; end
204 item.groups[group] = true;
205 local ret, err = dm.store(node, host, "roster", roster);
206 print("["..(err or "success").."] roster: " ..node.."@"..host.." - "..jid);
207 end
208 for i, row in ipairs(t["rosterusers"] or NULL) do
209 local node, contact = row.username, row.jid;
210 local name = row.nick;
211 if name == "" then name = nil; end
212 local subscription = row.subscription;
213 if subscription == "N" then
214 subscription = "none"
215 elseif subscription == "B" then
216 subscription = "both"
217 elseif subscription == "F" then
218 subscription = "from"
219 elseif subscription == "T" then
220 subscription = "to"
221 else error("Unknown subscription type: "..subscription) end;
222 local ask = row.ask;
223 if ask == "N" then
224 ask = nil;
225 elseif ask == "O" then
226 ask = "subscribe";
227 elseif ask == "I" then
228 roster_pending(node, host, contact);
229 return;
230 else error("Unknown ask type: "..ask); end
231 local item = {name = name, ask = ask, subscription = subscription, groups = {}};
232 roster(node, host, contact, item);
233 end
234 for i, row in ipairs(t["rostergroups"] or NULL) do
235 roster_group(row.username, host, row.jid, row.grp);
236 end