clix/roster.lua

Wed, 01 Dec 2021 17:25:25 +0100

author
Kim Alvefur <zash@zash.se>
date
Wed, 01 Dec 2021 17:25:25 +0100
changeset 164
fafdcde2e2eb
parent 123
c61fadb9d4fa
child 168
75e8ca131178
permissions
-rw-r--r--

clix: Import Verse where needed

In the olden days of `module()` this would have been a global, but that
is no longer the convention nor the case.

164
fafdcde2e2eb clix: Import Verse where needed
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
1 local verse = require "verse"
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 short_opts.i = "interactive";
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local split_jid = require "util.jid".split;
123
c61fadb9d4fa clix.roster: Print error resplies
Kim Alvefur <zash@zash.se>
parents: 121
diff changeset
4 local function printor(str)
c61fadb9d4fa clix.roster: Print error resplies
Kim Alvefur <zash@zash.se>
parents: 121
diff changeset
5 return function(ok, err)
c61fadb9d4fa clix.roster: Print error resplies
Kim Alvefur <zash@zash.se>
parents: 121
diff changeset
6 if ok then
c61fadb9d4fa clix.roster: Print error resplies
Kim Alvefur <zash@zash.se>
parents: 121
diff changeset
7 print(str)
c61fadb9d4fa clix.roster: Print error resplies
Kim Alvefur <zash@zash.se>
parents: 121
diff changeset
8 else
c61fadb9d4fa clix.roster: Print error resplies
Kim Alvefur <zash@zash.se>
parents: 121
diff changeset
9 print(err:get_error());
c61fadb9d4fa clix.roster: Print error resplies
Kim Alvefur <zash@zash.se>
parents: 121
diff changeset
10 end
c61fadb9d4fa clix.roster: Print error resplies
Kim Alvefur <zash@zash.se>
parents: 121
diff changeset
11 end
c61fadb9d4fa clix.roster: Print error resplies
Kim Alvefur <zash@zash.se>
parents: 121
diff changeset
12 end
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 return function (opts, arg)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 if opts.short_help then
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 print("Show or edit your roster");
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 return;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 if opts.help and not opts.interactive then
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 return 0;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 local function on_connect(conn)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 -- Fake socket object around stdin
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 local stdin = {
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 getfd = function () return 0; end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 dirty = function (self) return false; end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 settimeout = function () end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 send = function (_, d) return #d, 0; end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 close = function () end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 receive = function (_, patt)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local data = io.stdin:read(patt);
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 if data == nil then
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 conn:close();
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 if opts.echo then
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 io.write(data, patt == "*l" and "\n" or "");
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 return data;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 };
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 local commands = {
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 quit = function(param) conn:close(); end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 add = function(param) conn.roster:add_contact(param) end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 sub = function(param) conn:send(verse.presence{to=param, type="subscribe"}); end;
61
7d62bff46601 clix.roster: Add command for unsubscribing and canceling subscription
Kim Alvefur <zash@zash.se>
parents: 59
diff changeset
45 unsub = function(param) conn:send(verse.presence{to=param, type="unsubscribe"}); end;
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 auth = function(param) conn:send(verse.presence{to=param, type="subscribed"}); end;
61
7d62bff46601 clix.roster: Add command for unsubscribing and canceling subscription
Kim Alvefur <zash@zash.se>
parents: 59
diff changeset
47 unauth = function(param) conn:send(verse.presence{to=param, type="unsubscribed"}); end;
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 del = function(param) conn.roster:delete_contact(param) end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 setnick = function(param)
62
f455dad33efd clix.roster: Use rest of line as last parameter for nick and group sub-commands.
Kim Alvefur <zash@zash.se>
parents: 61
diff changeset
50 local jid, nick = param:match("^(%S+)%s+(.+)");
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 local item = conn.roster.items[jid];
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 if not item then print("no jid "..jid); return; end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 conn.roster:add_contact(jid, nick, item.groups or {}, printor("saved"));
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 addgroup = function(param)
62
f455dad33efd clix.roster: Use rest of line as last parameter for nick and group sub-commands.
Kim Alvefur <zash@zash.se>
parents: 61
diff changeset
56 local jid, group = param:match("^(%S+)%s+(.+)");
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 local item = conn.roster.items[jid];
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 local groups = item.groups or {};
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 table.insert(groups, group);
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 conn.roster:add_contact(jid, item.name, groups, printor("saved"));
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 delgroup = function(param)
62
f455dad33efd clix.roster: Use rest of line as last parameter for nick and group sub-commands.
Kim Alvefur <zash@zash.se>
parents: 61
diff changeset
63 local jid, group = param:match("^(%S+)%s+(.+)");
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 local item = conn.roster.items[jid];
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 local groups = item.groups;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 if not groups then return end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 for i = 1,#groups do
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 if groups[i] == group then
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 table.remove(groups, i);
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 break
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 conn.roster:add_contact(jid, item.name, groups, printor("saved"));
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 end;
66
13d6d39f5952 clix.roster: List now lets you search on nickname and jid.
Kim Alvefur <zash@zash.se>
parents: 63
diff changeset
75 list = function(param)
13d6d39f5952 clix.roster: List now lets you search on nickname and jid.
Kim Alvefur <zash@zash.se>
parents: 63
diff changeset
76 if param == "" then
13d6d39f5952 clix.roster: List now lets you search on nickname and jid.
Kim Alvefur <zash@zash.se>
parents: 63
diff changeset
77 param = nil
13d6d39f5952 clix.roster: List now lets you search on nickname and jid.
Kim Alvefur <zash@zash.se>
parents: 63
diff changeset
78 end
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 for jid, item in pairs(conn.roster.items) do
56
4b5f9a50ae68 clix.roster: Fix nickname fallback
Kim Alvefur <zash@zash.se>
parents: 48
diff changeset
80 local name, host = item.name or split_jid(jid);
66
13d6d39f5952 clix.roster: List now lets you search on nickname and jid.
Kim Alvefur <zash@zash.se>
parents: 63
diff changeset
81 local groups = table.concat(item.groups or {}, ", ");
121
896a25ed6b1b clix.roster: Turn off pattern matching in the list command (thanks mva)
Kim Alvefur <zash@zash.se>
parents: 110
diff changeset
82 if not param or ( (name and name:find(param, 1, true)) or jid:find(param, 1, true) ) then
91
7816f24d0fdc clix.roster: Switch order of name and jid in the list command
Kim Alvefur <zash@zash.se>
parents: 66
diff changeset
83 print(jid, name or host, groups);
66
13d6d39f5952 clix.roster: List now lets you search on nickname and jid.
Kim Alvefur <zash@zash.se>
parents: 63
diff changeset
84 end
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86 end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87 listgroups = function(param)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88 local groups = {};
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89 for jid, item in pairs(conn.roster.items) do
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90 for i = 1,#item.groups do
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
91 groups[item.groups[i]] = ( groups[item.groups[i]] or 0 ) + 1;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
93 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
94 for group, size in pairs(groups) do
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 print(group, size)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
96 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
97 end;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 show = function(param)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
99 local item = conn.roster.items[param];
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100 if not item then
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
101 print("No such contact");
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
102 return;
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
103 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
104
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 for k,v in pairs(item) do
59
46cb6e772e31 clix.roster: Add a separator between groups in the show sub command
Kim Alvefur <zash@zash.se>
parents: 58
diff changeset
106 print(k,type(v) == "table" and table.concat(v, ", ") or v)
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
107 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 end;
110
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
109 export = function()
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
110 local stored_roster = { [false] = { version = conn.roster.ver } }
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
111 for jid, item in pairs(conn.roster.items) do
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
112 stored_roster[jid] = {
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
113 name = item.name;
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
114 subscription = item.subscription;
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
115 groups = { unpack(item.groups) };
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
116 }
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
117 end
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
118 print("return "..require"util.serialization".serialize(stored_roster));
ded3938232f0 clix.roster: Add a sub-command that exports a prosody-style roster data structure
Kim Alvefur <zash@zash.se>
parents: 91
diff changeset
119 end
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 }
63
bbbef9f4a798 clix.roster: Add a help command to list available sub-commands.
Kim Alvefur <zash@zash.se>
parents: 62
diff changeset
121 function commands.help ()
bbbef9f4a798 clix.roster: Add a help command to list available sub-commands.
Kim Alvefur <zash@zash.se>
parents: 62
diff changeset
122 print("Roster commands");
bbbef9f4a798 clix.roster: Add a help command to list available sub-commands.
Kim Alvefur <zash@zash.se>
parents: 62
diff changeset
123 for cmd in pairs(commands) do
bbbef9f4a798 clix.roster: Add a help command to list available sub-commands.
Kim Alvefur <zash@zash.se>
parents: 62
diff changeset
124 print(" * " .. cmd);
bbbef9f4a798 clix.roster: Add a help command to list available sub-commands.
Kim Alvefur <zash@zash.se>
parents: 62
diff changeset
125 end
bbbef9f4a798 clix.roster: Add a help command to list available sub-commands.
Kim Alvefur <zash@zash.se>
parents: 62
diff changeset
126 print("Most commands takes a JID as argument.");
bbbef9f4a798 clix.roster: Add a help command to list available sub-commands.
Kim Alvefur <zash@zash.se>
parents: 62
diff changeset
127 end
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
128 local function on_incoming(stdin, text)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
129 local cmd = text:match("^(%a*)");
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
130 local param = text:match("%s+(.*)", #cmd);
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
131 if commands[cmd] then
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
132 commands[cmd](param);
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
133 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
134 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
135 stdin = require "net.server".wrapclient(stdin, "stdin", 0, {
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
136 onincoming = on_incoming, ondisconnect = function () end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
137 }, "*l");
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
138 conn:add_plugin("roster");
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
139 conn.roster:fetch(function(roster)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
140 if not roster then
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
141 print("There was an error fetching your roster");
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 conn:close()
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
144
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 if not opts.interactive then
58
d5d9f7dffc1f clix.roster: Don't run any command by default when --interactive
Kim Alvefur <zash@zash.se>
parents: 57
diff changeset
146 local firstcmd = commands[arg[1] or "list"];
d5d9f7dffc1f clix.roster: Don't run any command by default when --interactive
Kim Alvefur <zash@zash.se>
parents: 57
diff changeset
147 if firstcmd then
d5d9f7dffc1f clix.roster: Don't run any command by default when --interactive
Kim Alvefur <zash@zash.se>
parents: 57
diff changeset
148 firstcmd(table.concat(arg, " ", 2, #arg))
d5d9f7dffc1f clix.roster: Don't run any command by default when --interactive
Kim Alvefur <zash@zash.se>
parents: 57
diff changeset
149 end
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
150 conn:close();
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
151 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
152 end);
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
153 local function notif(e)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154 return function(item)
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
155 return print(("%s %s"):format((item.name and item.name .. " (" .. item.jid .. ")") or item.jid, e));
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
156 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
157 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
158 if opts.interactive then
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
159 conn:hook("roster/item-added", notif("added"));
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
160 conn:hook("roster/item-changed", notif("changed"));
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
161 conn:hook("roster/item-removed", notif("removed"));
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
162 end
57
830baad98c9a clix.roster: Show incomming subscription requests when --presence is used
Kim Alvefur <zash@zash.se>
parents: 56
diff changeset
163 if opts.presence then
830baad98c9a clix.roster: Show incomming subscription requests when --presence is used
Kim Alvefur <zash@zash.se>
parents: 56
diff changeset
164 conn:hook("presence", function(presence)
830baad98c9a clix.roster: Show incomming subscription requests when --presence is used
Kim Alvefur <zash@zash.se>
parents: 56
diff changeset
165 if presence.attr.type == "subscribe" then
830baad98c9a clix.roster: Show incomming subscription requests when --presence is used
Kim Alvefur <zash@zash.se>
parents: 56
diff changeset
166 print(("%s wants to subscribe to you"):format(presence.attr.from));
830baad98c9a clix.roster: Show incomming subscription requests when --presence is used
Kim Alvefur <zash@zash.se>
parents: 56
diff changeset
167 --elseif presence.attr.type == "subscribed" then
830baad98c9a clix.roster: Show incomming subscription requests when --presence is used
Kim Alvefur <zash@zash.se>
parents: 56
diff changeset
168 --print(("%s subscribed to you?"):format(presence.attr.from));
830baad98c9a clix.roster: Show incomming subscription requests when --presence is used
Kim Alvefur <zash@zash.se>
parents: 56
diff changeset
169 end
830baad98c9a clix.roster: Show incomming subscription requests when --presence is used
Kim Alvefur <zash@zash.se>
parents: 56
diff changeset
170 end)
830baad98c9a clix.roster: Show incomming subscription requests when --presence is used
Kim Alvefur <zash@zash.se>
parents: 56
diff changeset
171 end
48
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
172 end
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
173 clix_connect(opts, on_connect);
8206f3369d37 clix.roster: Roster management
Kim Alvefur <zash@zash.se>
parents:
diff changeset
174 end

mercurial