Project

General

Profile

GSoC 2016 » History » Version 4

gry, 02/04/2016 12:07 AM

1 1 gry
h1. GSoC 2016
2 1 gry
3 1 gry
h2. Core
4 1 gry
5 1 gry
h3. Log search
6 1 gry
7 1 gry
There needs to be a core-side thingy to search logs so that clients dont have to write all the db code from scratch
8 1 gry
9 2 gry
h3. Highlights
10 1 gry
11 2 gry
* #1122 Reworking of the code for notifications, highlights and ignores (implement on the back end)
12 2 gry
* #1121 Track highlights (Away log) server-side
13 2 gry
* #989 Add ignore highlight option in a channel's context menu
14 2 gry
* #734 Retrieve unread highlights on attach | Non-linear backlog
15 2 gry
16 2 gry
h4. Highlight rules
17 2 gry
18 3 gry
( source:  http://piratepad.net/vdo3UDwdRR )
19 1 gry
20 1 gry
QuasselNotify
21 4 gry
22 1 gry
 * By default, is on "core port + 1"
23 1 gry
 * Only available if core has SSL Certificate
24 1 gry
 * (This could also alternatively be on the same port as the core, but with protocol 0x03, in case quassel ever implements it natively; In the case of a native implementation, the GetRule/AddRule/DelRule would be issued through the normal Quassel protocol)
25 1 gry
 * Messages are described by protobuf
26 1 gry
 * Messages are distributed using MQTT
27 1 gry
28 1 gry
The following spec further discusses types of messages that can be delivered between clients. They will be sent with QoS 1 (at least once delivery).
29 1 gry
30 1 gry
Each rule belongs to a topic, and a client can decide to subscribe to multiple topics.
31 1 gry
32 1 gry
For example, one could create a rule for all "help" "please" messages in freenode#quassel, and declare this to be part of the group "work", while rules in other channels, say, #disney, could be part of the group "fun".
33 1 gry
During work hours, the client could decide to only subscribe to the topic "work", while during other hours, it would only subscribe to the topic "fun".
34 1 gry
35 1 gry
Types
36 1 gry
37 1 gry
 * MessageID: int
38 1 gry
 * UUID?
39 1 gry
 * Topic: String
40 1 gry
 * BufferInfo: { int: id | int: networkid | int: type | int: groupid | String: name  }
41 1 gry
 * Message: { MessageID: id |  int: time | int: type | int: flags | BufferInfo : buffer| String: sendermask | String: content }
42 1 gry
 * SmartRegex: { String: regex | boolean: inv }
43 1 gry
 * HighlightRule: { UUID : id | Topic : topic | SmartRegex : message | SmartRegex : sender | SmartRegex : channel | boolean : inverted }
44 1 gry
45 1 gry
Client -> Server
46 1 gry
47 1 gry
 * RequestRules{ }
48 1 gry
 * AddRule{ HighlightRule  : rule }
49 1 gry
 * DelRule{ UUID : id }
50 1 gry
 * RemoveNotification{ UUID : id } (if notification is swiped away)
51 1 gry
52 1 gry
Server -> Client
53 1 gry
54 1 gry
 * Notification{ Message : message }
55 1 gry
 * ListRules{ Array[HighlightRule]: rules}
56 1 gry
 * RemoveNotification{ MessageID : id } (if last read progresses, for example, or it’s read on other clients)
57 1 gry
58 1 gry
(obviously, mqtt handles pub/sub)
59 1 gry
60 1 gry
Specification of what "a message is a highlight" for a topic:
61 1 gry
All of the following apply:
62 1 gry
 # The message maches one or more highlight rules with inverted == false
63 1 gry
 # The message matches zero highlight rules with inverted == true
64 1 gry
65 1 gry
Pseudocode:
66 1 gry
67 1 gry
<pre>
68 1 gry
boolean Topic::matches(Message m) {
69 1 gry
    for (HighlightRule rule: invertedRules) {
70 1 gry
        if (rule.matches(m)) return false;
71 1 gry
    }
72 1 gry
    for (HighlightRule rule: normalRules) {
73 1 gry
        if (rule.matches(m)) return true;
74 1 gry
    }
75 1 gry
    return false;
76 1 gry
}
77 1 gry
</pre>
78 1 gry
79 1 gry
80 1 gry
Specification of "a message matches a highlight rule":
81 1 gry
All of the following apply:
82 1 gry
83 1 gry
 # The rule’s message regex matches the messages message content
84 1 gry
 # The rule’s sender regex matches the messages nick!ident@host
85 1 gry
 # The rule’s channel regex matches the messages network#channel
86 1 gry
87 1 gry
Pseudocode:
88 1 gry
89 1 gry
<pre>
90 1 gry
boolean HighlightRule::matches(Message m) {
91 1 gry
    return message.matches(m.content) && sender.matches(m.sender) && channel.matches(m.buffer.network + "#" + m.buffer.name);
92 1 gry
}
93 1 gry
</pre>
94 1 gry
95 1 gry
96 1 gry
Specification of "a SmartRegex matches on a String":
97 1 gry
98 1 gry
 * If inv is false, then the smartregex matches exactly when its wrapped regex would match
99 1 gry
 * If inv is true, then the smartregex matches exactly when its wrapped regex would not match
100 1 gry
101 1 gry
Pseudocode:
102 1 gry
103 1 gry
<pre>
104 1 gry
boolean SmartRegex::matches(String s) {
105 1 gry
    return inv ^ regex.matches(s));
106 1 gry
}
107 1 gry
108 1 gry
</pre>
109 1 gry
110 1 gry
h3. Backlog management
111 1 gry
112 1 gry
* #734 Retrieve unread highlights on attach | Non-linear backlog
113 1 gry
   * #1330 server-side log search in core
114 1 gry
   * «If the core would have such an API, it would be amazing... Especially for stuff like quasseldroid and so... Message filtering would be nice in general. "Give me all unread messages containing my nickname". Would be amazingly useful for notifications.»
115 1 gry
* #1252 separate log and backlog tables
116 1 gry
* #1083 Archive search
117 1 gry
* #1327 The search box should search the complete log
118 1 gry
* #716 Alternate Backlog Retrieval System - Timelines
119 1 gry
* #1204 Have an option to keep a buffer log, but not keep it in the channels tree
120 1 gry
* #1316 Quassel freezes when I switch to a buffer with large backlog
121 1 gry
122 1 gry
h3. Scripting
123 1 gry
124 1 gry
Scripting at the core side.
125 1 gry
126 1 gry
Currently implemented without hooks as a one-off command. [https://github.com/quassel/quassel/tree/master/data/scripts existing scripts], ? code where they are processed ?.
127 1 gry
128 1 gry
Needs to support scripting at the core side with hooks, "when someone joins do X", etc.
129 1 gry
130 1 gry
* [[Possiable Scripting Object]]
131 1 gry
* #265 Plug-In/Script support
132 1 gry
* "Task machinery":https://github.com/seezer/quassel/commit/8e4c1d8c20b04bd1b2e7a98ab3ad2899e5735724 (from seezer, needs feedback before using this to build event driven scripting thing)
133 1 gry
134 1 gry
h2. Clients
135 1 gry
136 1 gry
Improve any of the [[Mobile]] clients
137 1 gry
138 1 gry
h3. Web client
139 1 gry
140 1 gry
Improve Quassel-web for a "cloud" experience?
141 1 gry
142 1 gry
* https://github.com/sandsmark/quassel-web - sandsmark
143 1 gry
* https://github.com/magne4000/quassel-webserver - magne4000