clix/archive.lua

Sun, 15 Nov 2020 20:45:50 +0100

author
Kim Alvefur <zash@zash.se>
date
Sun, 15 Nov 2020 20:45:50 +0100
changeset 140
8815232cbbeb
parent 118
8bb289b2b7be
child 146
ae85457eca8e
permissions
-rw-r--r--

clix.watch_pep: Take PEP node as positional argument

Thanks MattJ

75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local bare_jid = require"util.jid".bare;
78
bed3cfce7d60 clix.archive: Parse timestamps
Kim Alvefur <zash@zash.se>
parents: 77
diff changeset
2 local parse_datetime = require"util.datetime".parse;
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 return function (opts, arg)
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 if opts.short_help then
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 print("Fetch archived messages");
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 return;
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 end
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8
114
757647426af2 clix.archive: Add support for paging backwards
Kim Alvefur <zash@zash.se>
parents: 92
diff changeset
9 local reverse = opts.before;
78
bed3cfce7d60 clix.archive: Parse timestamps
Kim Alvefur <zash@zash.se>
parents: 77
diff changeset
10 if opts.start then
bed3cfce7d60 clix.archive: Parse timestamps
Kim Alvefur <zash@zash.se>
parents: 77
diff changeset
11 opts.start = parse_datetime(opts.start);
bed3cfce7d60 clix.archive: Parse timestamps
Kim Alvefur <zash@zash.se>
parents: 77
diff changeset
12 end
bed3cfce7d60 clix.archive: Parse timestamps
Kim Alvefur <zash@zash.se>
parents: 77
diff changeset
13 if opts["end"] then
bed3cfce7d60 clix.archive: Parse timestamps
Kim Alvefur <zash@zash.se>
parents: 77
diff changeset
14 opts["end"] = parse_datetime(opts["end"]);
bed3cfce7d60 clix.archive: Parse timestamps
Kim Alvefur <zash@zash.se>
parents: 77
diff changeset
15 end
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 local selfjid;
81
e87f4d0b1a80 clix.archive: Show timestamps
Kim Alvefur <zash@zash.se>
parents: 80
diff changeset
17 local function print_message(i)
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 -- TODO Roster lookup
81
e87f4d0b1a80 clix.archive: Show timestamps
Kim Alvefur <zash@zash.se>
parents: 80
diff changeset
19 local m = i.message;
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 local a = m.attr;
81
e87f4d0b1a80 clix.archive: Show timestamps
Kim Alvefur <zash@zash.se>
parents: 80
diff changeset
21 if i.stamp then
118
8bb289b2b7be clix.archive: Show proper timestamps
Kim Alvefur <zash@zash.se>
parents: 117
diff changeset
22 print(os.date("%Y-%m-%d %H:%M:%S", i.stamp));
81
e87f4d0b1a80 clix.archive: Show timestamps
Kim Alvefur <zash@zash.se>
parents: 80
diff changeset
23 end
80
ae77d9c41f4f clix.archive: The world doesn't revolve around us.
Kim Alvefur <zash@zash.se>
parents: 79
diff changeset
24 if a.to and bare_jid(a.to) ~= selfjid then
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 print("To ".. bare_jid(a.to));
80
ae77d9c41f4f clix.archive: The world doesn't revolve around us.
Kim Alvefur <zash@zash.se>
parents: 79
diff changeset
26 end
ae77d9c41f4f clix.archive: The world doesn't revolve around us.
Kim Alvefur <zash@zash.se>
parents: 79
diff changeset
27 if a.from and bare_jid(a.from) ~= selfjid then
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 print("From ".. bare_jid(a.from));
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 print(m:get_child_text"body");
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 print"";
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 end
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 local function on_connect(conn)
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 if opts.debug then
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 conn:hook("stanza-out", print);
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 conn:hook("stanza", print);
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 end
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 selfjid = bare_jid(conn.jid);
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 local function handle_results(ok, result)
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 for i=1,#result do
81
e87f4d0b1a80 clix.archive: Show timestamps
Kim Alvefur <zash@zash.se>
parents: 80
diff changeset
42 print_message(result[i]);
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 end
114
757647426af2 clix.archive: Add support for paging backwards
Kim Alvefur <zash@zash.se>
parents: 92
diff changeset
44 if result[reverse and "first" or "last"] then
90
3115bd81b9de clix.archive: Be interactive when --interactive is set. --everything makes it page by itself.
Kim Alvefur <zash@zash.se>
parents: 81
diff changeset
45 local fetch_next = opts.everything;
3115bd81b9de clix.archive: Be interactive when --interactive is set. --everything makes it page by itself.
Kim Alvefur <zash@zash.se>
parents: 81
diff changeset
46 if opts.interactive and not fetch_next then
3115bd81b9de clix.archive: Be interactive when --interactive is set. --everything makes it page by itself.
Kim Alvefur <zash@zash.se>
parents: 81
diff changeset
47 io.stderr:write "--More--"
92
a629b953780c clix.archive: Print a newline if reading a line fails (the user pressed ^D)
Kim Alvefur <zash@zash.se>
parents: 90
diff changeset
48 fetch_next = io.read"*l" or print();
90
3115bd81b9de clix.archive: Be interactive when --interactive is set. --everything makes it page by itself.
Kim Alvefur <zash@zash.se>
parents: 81
diff changeset
49 end
3115bd81b9de clix.archive: Be interactive when --interactive is set. --everything makes it page by itself.
Kim Alvefur <zash@zash.se>
parents: 81
diff changeset
50 if fetch_next then
114
757647426af2 clix.archive: Add support for paging backwards
Kim Alvefur <zash@zash.se>
parents: 92
diff changeset
51 if reverse then
757647426af2 clix.archive: Add support for paging backwards
Kim Alvefur <zash@zash.se>
parents: 92
diff changeset
52 opts.before = result.first and result.first[1];
757647426af2 clix.archive: Add support for paging backwards
Kim Alvefur <zash@zash.se>
parents: 92
diff changeset
53 else
115
1aaf30b457a0 clix.archive: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 114
diff changeset
54 opts.after = result.last;
114
757647426af2 clix.archive: Add support for paging backwards
Kim Alvefur <zash@zash.se>
parents: 92
diff changeset
55 end
79
a19ccb8f1ef9 clix.archive: Use --to specify where to direct the query
Kim Alvefur <zash@zash.se>
parents: 78
diff changeset
56 conn:query_archive(opts.to, opts, handle_results);
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 return
90
3115bd81b9de clix.archive: Be interactive when --interactive is set. --everything makes it page by itself.
Kim Alvefur <zash@zash.se>
parents: 81
diff changeset
58 else
116
3ee83c4801b4 clix.archive: Fix pagination message, rsm.first is a table
Kim Alvefur <zash@zash.se>
parents: 115
diff changeset
59 local whatnext, nextpage = reverse and "before" or "after";
3ee83c4801b4 clix.archive: Fix pagination message, rsm.first is a table
Kim Alvefur <zash@zash.se>
parents: 115
diff changeset
60 if reverse then
3ee83c4801b4 clix.archive: Fix pagination message, rsm.first is a table
Kim Alvefur <zash@zash.se>
parents: 115
diff changeset
61 nextpage = result.first and result.first[1];
3ee83c4801b4 clix.archive: Fix pagination message, rsm.first is a table
Kim Alvefur <zash@zash.se>
parents: 115
diff changeset
62 else
3ee83c4801b4 clix.archive: Fix pagination message, rsm.first is a table
Kim Alvefur <zash@zash.se>
parents: 115
diff changeset
63 nextpage = result.last;
3ee83c4801b4 clix.archive: Fix pagination message, rsm.first is a table
Kim Alvefur <zash@zash.se>
parents: 115
diff changeset
64 end
3ee83c4801b4 clix.archive: Fix pagination message, rsm.first is a table
Kim Alvefur <zash@zash.se>
parents: 115
diff changeset
65 conn:info("Next page: --%s=%s", whatnext, nextpage);
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 end
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 end
117
c6b5d2039f25 clix.archive: Show number of items if available
Kim Alvefur <zash@zash.se>
parents: 116
diff changeset
68 if result.count then
c6b5d2039f25 clix.archive: Show number of items if available
Kim Alvefur <zash@zash.se>
parents: 116
diff changeset
69 conn:info("Total: %d items", result.count);
c6b5d2039f25 clix.archive: Show number of items if available
Kim Alvefur <zash@zash.se>
parents: 116
diff changeset
70 end
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 conn:close();
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 end
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 conn:add_plugin"archive";
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 -- TODO conn:add_plugin"roster";
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 -- c.roster:fetch(function()
79
a19ccb8f1ef9 clix.archive: Use --to specify where to direct the query
Kim Alvefur <zash@zash.se>
parents: 78
diff changeset
76 conn:query_archive(opts.to, opts, handle_results);
75
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 end
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 clix_connect(opts, on_connect);
8d5c99f46cb8 clix.archive: New plugin, a MAM browser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 end

mercurial