-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
501 lines (429 loc) · 17.7 KB
/
TODO
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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
- Change window names to buddy nick names?
- Retry a connection / re-log-on
- /msg command to send a buddy a message
- /away
- Fix TODOs in code
- Add INCDIR, LIBDIR to SConstruct
- Get rid of build warnings
- No error log msgs when failed login, also need to delete connection?
- Cleanup Client Swiften code
- Add backend to get multiple connections working at the same time
- Save chat histories to file (append to old, have max size of txt log)
- Add user nickname to chats
- Change to remove chat window border
- Change newconn command to take args: /newconn XMPP [email protected] as args
- Upgrade to BOOST's signal2
- Print all available commands (for remapping etc)
GUI
- Change buddy up/down use CTRL-up/down (use TAB/shifttab for change buddy)
- Add text notification on CTRL-c when entering newconn info
- Command helper/guesser (e.g. /ju(mp X, to window x)
. Tab does not complete command (maybe enter should complete a guessed command)
. Doesn't provide hint when backspace starts deleting command
. Doesn't provide command specific hints (eg /jump Wina, Winb, Winc ...)
- Console window drops from top
- Buddy list window fixes and animate hiding to right
- Search and highlight (CTRL-f starts "/find" to cmd)
- Make sure boxes can be removed from window edges, make no boxes default and cfg settable
Network
- Change to a more generic command string sending to client i/fs (instead of connect, disconnect, etc?)
- Add data model for handling sending msgs to specific user on specific connection
- Boost extension for plugin i/f model
- MS Communicator plugin creation
- Add commands and functions to i/f for handling conversations, new buddies, etc
- Handle multiple connections
Other
- OSX: boost, autotools/build scripts (allow swiften like INCDIR, LIBDIR, etc)
- Windows build
- General code cleanup
- Refactor cmds and keys into generic std::function-s that can get called and mapped to whatever
Fix/Remove Eclipse build settings so that can be used
should just generate makefiles automatically
- Cleanup
Auto hide buddy list (animated)
Save chat logs
Make colors configurable
Save config: key remap, autologin, etc
A /msg command
A /about command
A /away msg command
An auto away message
Escape doesn't quit - exits reverse search
Color enum string names
/help shows dynamic key mapping
Search chat history, highlight
Execute command and pipe output to chat or at least screen
Fix backspace for last char doesn't put cursor on the far right soon enough
Console drop down window
- Auto complete
Dimmed completed letters
Tab to finish
- Status bar
- Server client improvements
Replace libpurple (ms communicator)
Multiple connections (command management etc)
Reconnect
Offline, Online, Away Status
Group chats
Add buddy, request new buddy
Set nickname
Download files
Upload files
Connection status
Info on a buddy (away, busy, idle time)
IRC
Encrypted chat
- Port to
Windows
Build scripts for OS X, Linux, Windows
- Long term
Plugins for client libs (boost ext)
Plugins for extra behavior, bots, etc
Tile chat windows
Twitter
RSS
iChat
Txt msging
Use gmail?
OLD
- Fix backspacing on a wrapped cmd entry that doesn't move the cursor
back to the right hand side until the second backspace
- Add function to clear history
- Add function to get history entry from an index
- Add ability to load settings such as key mappings etc
- Add loading of previously saved settings
- Cursor stops blinking
. is this caused by the timeout? timeout causing clock to get updated?
- Libpurple conv != null failed
. need better conversation integration with libpurple
- Add an /uptime command to show how long app has been open
. what about buddy list conversation uptimes?
- winScrollBack->append("") does not show a line....
- Save command history to a file
. save periodically and when app exits
. load at startup
- Save and load settings
. Need to be able to make things configurable first (eg window wrap setting)
. Add a /save command for settings
. Load at startup
- Make buddy list automatically hide
. animate open/close and just hide mode
- Be able to parse double quotes in commands
. as a single setting
- MS Communicator
. crashes, might be a library issue
. incoming msgs are in HTML, need to parse it
- Google chat
. HTML chars like ' and ... don't come through properly
. <BR> show up and should be translated
- Text video mode (non graphics vga)
. SHIFT-UP/DOWN does not work in full screen terminal mode on laptop
DONE i think, buddy list needs attention though . every keypress refreshes everything (prob. a problem all the time)
- Container plus Current Index abstraction
DONE . Could be helpful for Cmd History
. Might be useful for NCWinScrollBack
- Break Container out of NCWinscrollBack for a more MVC like arch
. Might be a good time to start on this item which is listed out fuller below
- Show scrollback indicator
. parhaps a n/max number on the "status bar"
. in lieu of an actual status bar maybe throw it on top of the command window's upper right
. or maybe an asterisk on the far right hand side of the window - top being 0% bottom being 100%
- Remove TODO items from README.md
. Add build instructions to README.md
- Window background color
- Text attributes
. A_BOLD, A_STANDOUT, A_BLINKING, etc
. Create an enum in NCWin.h maybe to use as an additional CTOR param?
- Cleanup NCWin::NCWinData::printColor to use std::string::iterator
- Debug Window (started in CN10?)
. for getting keystrokes initially
. F6 or CTRL-F5 or something to toggle visibility (order in refresh list)
- Debug prpl-sipe bug
. Build debug version of libpurple etc
. Make sure it's not just a newer version of libpurple that's needed
. Run gdb ./hw with that g_debug set to whatever (see README.md)
- Need a more MVC type architecture
. Separate Window from data
. Create data store to group Text Buffer, Connection, Buddy Name
. Possibly use a BOOST::multi_map
- Buddy List
. Needs window size (too small) protection
. text wrapping should just cutoff instead (maybe add ...'s)
. Add plus sign and color to buddy who has typed something
. CTRL-n takes you to next buddy who has sent something
. Animate hiding and showing of the window if config says to
- Console window
. One console per connection?
. Drops down at start when there aren't any chat windows?
. F1 type drop down kind of like quake had
. Should show first "chat1" contents right now
. Make sure general debug statements go to console
. Try to get more debug info out of Chat client lib
. Animate hiding and showing of the window if config says to
- Configuration object
. Use to help create windows by supplying config attributes
. Use to persist data between sessions
. Want to script things like connecting sessions
. Want to keep text color settings: timestamp, buddy names, text, Status line
- Status line
. One line window with updating and useful information
. TIME INFO_COMMENT CONNECTION STATUS
- Command parsing improvements
. CTRL-r reverse search through command line history
. Auto complete (suggestions) with dimmed text - and info/help about command
- Log chats
. Write conversations (and commands) to (text) files
. ~/.nclone/chats/<BUDDYNAME>-<TIME>.log
. Use configuration for turning on/off and settings like maybe file type
- Command processing loop improvements
. (std::map<std::string,std::function<>)
- NCMAin breakup
. Getting too big
. Command parsing and executing could go somewhere else
. Window setup could probably happen in an NCApp child
- NCWin refreshes too much
. add lots of new windows: blinks too often
. logon to chat service with buddies online: doesn't always redraw fully
- NCWin/NCObject refresh and draw cleanup
. Currently there is refresh, rRefresh, clear, and updateSize
. Seems like that should be cleaned up into refresh and draw methods
- General cleanup
. Remove TODOs where possible
. Make more meaningful comments/design note where not possible and delete TODO
- Better chat client integration
. be able to log off (and delete connection)
. buddy names should always be consistent (gchat adds things to the end)
. buddy names should use a shorter version
. accept new buddy or chat request
. be able to log onto multiple services simultaneously
. be able to see offline buddies
. queue up messages to send to buddies when they are online
. group chat
. away message (auto sets after timeout)
. auto away message (after timeout)
. personalized away message (with buddy's name, etc)
- System/OS notification integration
. be able to notify the system when events happen (messages come in)
. would be annoying if it happens even when window is in focus
- Load chat clients through plugin libraries
- Be able to parse old ascii (ansi) color art
. Maybe be able to write it to logs too
- Build improvements
. Auto tool build environment
. Use auto tools and cmake possibly
. Still want to be able to use Eclipse, XCode, Linux, OSX, etc
. Build in deps statically
- Plugin Overridable
. config
. colors
. win placement
. login, saved
. signals
. msgs: in, out
. resize
. Client library
. CMD Map
- Version through makefile and git?
Next up (TODO list)
--------------
- Make windows resize and refresh properly based on terminal size
- Improvement: shorter buddy names to make reading easier
- Improvement: push text down in window at beginning when window not full
- Improvement: remove leading and trailing whitespace from commands
- Upgrade: text wrapping to mind spaces
- Wrap NCString with Msg with additional enum (INFO, MSG, WARNING, etc) to help aid color coding
- Get color settings working for msgs, timestamps, etc
- Char is only 8 bits we could
- int 32/64 bit 8 chars could stuff a color attr per each char
- would require more parsing routines
- Window background color
- Start command line parsing
- Text entry line wrapping
- Text entry line editing with cursor/arrow keys
- Text entry history, CTRL-r search
- Status bar
- Decide on license (GPL for libpurple)
- Buddy list window
- Drop down console window
- Split into modules:
- Utils
- Ncurses
- System
- Cleanup
- Add headers, footers, license
- take out unused code
- fix refresh vs draw vs rRefresh
- comments and code documentation
- Change .h to .hh
- Fix editing lines that wrap in the command window
- Fix keyboard layout for Mac
- Improve build scripts, use autotools to configure build
- Need some feature requirement type things...
- Command completion like bash: up for last command
- Command completion like web browser/naim: auto-completes while type and leaves the auto-completed portion to the right of the text cursor in a slightly greyed out state
- Future functionality: string handling routines such as right justify, pad with spaces/zeroes, fill line to (with dashes)
- Make chats full screen
- Take away chat window border
- Get "OK" input from user for cert problems
- look at ncurses.h also has a "pad" full window type.
- Configuration type system
----------------------------------------------------
-- Done
- Fix crash when no buddies available on initial startup, then someone logs on later
- Fix login from command line
- Fix delconn on active connection (XMPP), just deadlocks
- Add nickname setting
- Get buddy chat backend integrated
- New msg/online buddies don't put (new) window on top
- Add a timeout to the window when user doesn't press anything for awhile
- A /time command
- A /uptime command
- Highlight current chat window in different color in buddy list
- NCTextWinFormatter spaces aware
. Want to be able to split the lines on spaces where possible
. Turn NCTextWinFormatter into a class probably
. Then maybe write a LengthSpaceFinder (LengthFinder brother) class
. Make NCTextWinFormatter a templated class on FINDER (maybe?)
- House Keeping
. Redraw (to softcopy) of architecture/code overview
. Can use umbrello probally - put into notes section
. Put screenshot link from README.md
- Command parsing improvements
. Up/Down command line history
. Left/Right move cursor
. Text wrapping for commands/text that is too long for one window width
. Don't wait forever for a key to be entered (thread reuse)
- Fix page up/down scrolling
. Cleanup NCTextWinFormatter
. Improve functions in NCTextWinFormatter so they calculate line counts better
. Page up goes up too far when there are wrapping lines
- Fix initial text windows when there isn't enough text to fill window
. Right now we start from top but I want the text entered down near the cmd window
- Finish CTRL-r implementation
- Fix CTRL-r not always putting cursor on the correct place
especially when a line wrapped...
- Merge Jeremy and my views
- gloox i/f
- Command interpreter
. read user's input and convert to: messages, commands, searches, etc
- Map to hooking up @hostname.com addresses with puple protocol choices
. be able to (override) augment with local choices easily
. be able to augment from commandline, environment, config file?
- Pub/Sub type signal (internally) which efficiently connects PurpleClientIF
to particular window
. Do we want a hashed GUID, string,
- Probably want an internal data store which windows connect to
. separate concerns MVC
- Colors
. Make a Stream::Entry contain a secondary color attribute vector
. The vector enables use of BOOST::zip_iterator (I think)
. Make a default CTOR which makes color blank
. with this approach how easy will it be to add a colored time entry at
the beginning? Or should time be separated into another Stream::Entry
member variable?
- New window for incoming messages (per buddy)
- Be able to close/delete a window properly
- Change derivation of Window so that you don't override refresh
. instead use draw, this should help with windows inside of other windows
- Line wrapping does not currently work at all
. under the current scheme it's hard to know how many lines have been
drawn and when to quit - the nice getWindownDown() doesn't know about
entries with multiple lines
. it all depends on how wide the screen is
- Redraw when window is resized
- Segfault on quit (cleanly exits)
- Goes back to original text window after exit (order of unallocating objects)
. but make sure we can still get debug info from PurpleClientIF
- Add ability to remap keys other functionality
. Probably want to change around architecture to make it so that
commands can easily be accessed
- Command history
. Up/Down Arrow for Previous/Next commands
. CTRL-R for search
. SHIFT-CTRL-R for forward search (LOW priority)
- Be able to edit current command easily
. Left/Right arrow, delete/backspace work properly
- CTRL-u deletes current line behind cursor to beginning
- CTRL-a moves cursor to beginning of current line
- CTRL-e moves cursor to end of current line
- CTRL-c cancels current line (LOW priority, don't know if I like this)
- Send a buddy queued messages (only on certain networks which don't buffer)
LOW priority
- Fix but where "console" gets added as a window
- connect to chat client, CTRL-r for hello "yeah hello!!!" and hit enter seems to do it
- Fix /delconn on XMPP (swiften), "Client not disconnected properly"
- CTRL-n go to next window with unseen updates
----------------------------------------------------
-- Fixed
error:
/lorem
type single line
/d1
/clear
type single line enter ... nothing, page up crashes
fix: didn't have p_offs reset in the NCWinScrollBack::clear method
Research list
--------------
- In case I want help wrapping lines: http://people.sc.fsu.edu/~jburkardt/cpp_src/wrap2/wrap2.html
- Overview
- Google coding standards (style guide) http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
- Fast Streams: https://groups.google.com/forum/?fromgroups=#!topic/perfo/QmCHANgr_V8
- More of a stream "editor" / viewer
- Plugin for everything: like regex for reverse search through conversations and cmd hist
- Encryption, automatic message queueing, incoming message modification (spellings mistakes, /filter)
- can be used with screen?
- 64 bit (or 32)
- std::rope or some BOOST type as a string buffer replacement
- libpurple: pidgin-sipe, gmail chat, facebook, twitter
- BOOST
- MPI: look into the message passing interface for "event" type programming
- Spirit Parser
- Cmd line arg parsing
- Ranges (iterators)
- Regex
- Serialization
- Multimap
- Lock free (queues)
- Sandbox: extension (plugin support)
- C++ 11
- lambdas
- async, get (thread pooling - from BOOST?)
- Design Patterns
- "Listener"
- Facade
- Factory
- (command if jeremy wants to explore)
- Recursive Control
- General Comp Sci
- Lookup tables
- Trees, Trie (nedtrie) (map/search, see old xml file reader parser)
- Exceptions
- Multi-threading (see BOOST and C++11 thread "hiding" techniques)
- Type System (config, safe assignment, output formatting, etc)
- Scope lock (and other scope techniques)
- Compression
- MD5
- Enumerating enums
- Tools
- Doxygen
- wiki
- changelog
- git
- scons
- Google Protocol Buffers
- Web Service
- Need to be able to parse this from MS Office Communicator
<pre>
│[14:56:41] (sip:[email protected]) <DIV style="font-size: 9pt;font-family: MS Shell Dlg 2;color: #000000;di*│
│ection: ltr">balls</DIV>
</pre>
- There is a PurpleConnectionFlags enum that has PURPLE_CONNECTION_HTML to not that we need to decode HTML
- ncurses, BOOST, libpurple, pidgin-sipe, gcc 4.7 -> OSX, Windows?
- Collection Oriented Programming?? http://c2.com/cgi/wiki?CollectionOrientedProgramming
- Iterator Reverse: http://searchco.de/codesearch/view/16979256
- "Iterators Must Go" Range: Chain, Zip, Stride, Radial,
- Allow for more generic window packing
- 2D Bin Packing Algorithm
- https://github.com/juj/RectangleBinPack
- http://en.wikipedia.org/wiki/Knapsack_problem
- http://en.wikipedia.org/wiki/Bin_packing_problem