<commit_before>meddle
======

A based self hosted chat with hash invitation, logging and searching


How it works
------------

* start client
  - register for tags
  - get notified when tag is mentioned
  - start chatting with persons or alone
  - search for tags or plain text

* on command line
  - meddle send martin <message>


Under the hood
--------------

* Base language Python3
* zeromq for communication
* Clients: CLI, PyQt (later: web, Android)
* no capnproto/protobuf: complicated, binary dependencies


Installation
------------

Windows:

* Python3: https://www.python.org/download/
* json
* pyzmq: https://pypi.python.org/pypi/pyzmq/14.4.0
    c:\Python34\python.exe -m pip install c:\Users\fuerst\Downloads\pyzmq-14.4.0-cp34-none-win_amd64.whl
    https://github.com/zeromq/pyzmq/downloads
* PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/download


Linux:

* install zeromq `apt-get install python3-zmq`
* install PyQt4 `apt-get install python3-pyqt4`

* for capnproto: python3-Cython.x86_64
* for capnproto: python3-devel
* for capnproto: python3-pip http://jparyani.github.io/pycapnp/


Sequence
--------

* server initializes and listens on port 12345

* client1 initializes with name "alice" and connects to 12345

* client2 initializes with name "bob" and connects to 12345

* client1 sends a createChannel(invite: [bob])


ToDo
----

=== before public release

- [ ] bugfix: Wenn man einen Kanal öffnet und das Fenster nicht groß genug +
      ist, dann verschwindet der Kanal beim Großziehen des Fensters +
      Auch durch Doppelklick in der channels-Liste kommt er nicht. Man muss +
      erst nochmal mit der Fenstergröße rumspielen.
- [ ] server: refactor: server: one thread
- [ ] server: user id persistence
- [ ] save/load configuration files on correct location
- [ ] Search in logs
- [ ] setup.py file / http://www.pyinstaller.org/
- [ ] cookie based user verification
- [ ] @name notification
- [ ] check server/client versions
- [ ] program icon
- [ ] optional notification on user join
- [ ] concept for getting missed notification
- [ ] resizable UI elements
- [ ] names for channels
- [ ] sort channels by importance (activity, contribution, hashtags)
- [ ] show channel subscribers (currently only contributors)
- [ ] show timestamps with the posts
- [ ] set username on first startup

=== after public release

- [ ] server: use DB
- [ ] option modification dialog
- [ ] sync/async cleanup: make all calls fast and async where needed
- [ ] Send files
- [ ] WebClient (to circumvent http/proxy restrictions)
- [ ] Android Client
- [ ] encryption / authentication
- [ ] find contexts on a graphical map

=== done

- [x] Python 2.7+ compatibility for pyinstaller
- [x] see available tags
- [x] case insensitivity for tags
- [x] optional notification on messages
- [x] see users with channel names
- [x] reconnect
- [x] server: log messages (+timestamp)
- [x] leave room
- [x] load conversation on join
- [x] system notifications (on message/tag notification)
- [x] join an existing channel
- [x] notify/join on tag notification
- [x] config file (server, tags)
- [x] Invite on hashtags
- [x] Multi room
- [x] unsubscribe hashtags + tagging on enter + bold on active
- [x] instructions on startup when missing libs (zmq/qt4/json)
- [x] refactor: multipart-message concept
- [x] refactor: client instant invoke
- [x] Named messages
- [x] Qt interface
- [x] Recognize hashtags
- [x] list users
- [x] Watchdog / connection status<commit_msg>updated todo list<commit_after>meddle
======

A based self hosted chat with hash invitation, logging and searching


How it works
------------

* start client
  - register for tags
  - get notified when tag is mentioned
  - start chatting with persons or alone
  - search for tags or plain text

* on command line
  - meddle send martin <message>


Under the hood
--------------

* Base language Python3
* zeromq for communication
* Clients: CLI, PyQt (later: web, Android)
* no capnproto/protobuf: complicated, binary dependencies


Installation
------------

Windows:

* Python3: https://www.python.org/download/
* json
* pyzmq: https://pypi.python.org/pypi/pyzmq/14.4.0
    c:\Python34\python.exe -m pip install c:\Users\fuerst\Downloads\pyzmq-14.4.0-cp34-none-win_amd64.whl
    https://github.com/zeromq/pyzmq/downloads
* PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/download


Linux:

* install zeromq `apt-get install python3-zmq`
* install PyQt4 `apt-get install python3-pyqt4`

* for capnproto: python3-Cython.x86_64
* for capnproto: python3-devel
* for capnproto: python3-pip http://jparyani.github.io/pycapnp/


Sequence
--------

* server initializes and listens on port 12345

* client1 initializes with name "alice" and connects to 12345

* client2 initializes with name "bob" and connects to 12345

* client1 sends a createChannel(invite: [bob])


ToDo
----

=== before public release

- [ ] bugfix: Wenn man einen Kanal öffnet und das Fenster nicht groß genug +
      ist, dann verschwindet der Kanal beim Großziehen des Fensters +
      Auch durch Doppelklick in der channels-Liste kommt er nicht. Man muss +
      erst nochmal mit der Fenstergröße rumspielen.
- [ ] Search in logs
- [ ] cookie based user verification
- [ ] @name notification
- [ ] optional notification on user join
- [ ] resizable UI elements
- [ ] names for channels
- [ ] sort channels by importance (activity, contribution, hashtags)
- [ ] show channel subscribers (currently only contributors)
- [ ] show timestamps with the posts

=== after public release

- [ ] server: refactor: server: one thread
- [ ] concept for getting missed notification
- [ ] server: use DB
- [ ] option modification dialog
- [ ] sync/async cleanup: make all calls fast and async where needed
- [ ] Send files
- [ ] WebClient (to circumvent http/proxy restrictions)
- [ ] Android Client
- [ ] encryption / authentication
- [ ] find contexts on a graphical map

=== done

- [x] Python 2.7+ compatibility for pyinstaller
- [x] see available tags
- [x] case insensitivity for tags
- [x] optional notification on messages
- [x] see users with channel names
- [x] reconnect
- [x] server: log messages (+timestamp)
- [x] leave room
- [x] load conversation on join
- [x] system notifications (on message/tag notification)
- [x] join an existing channel
- [x] notify/join on tag notification
- [x] config file (server, tags)
- [x] Invite on hashtags
- [x] Multi room
- [x] unsubscribe hashtags + tagging on enter + bold on active
- [x] instructions on startup when missing libs (zmq/qt4/json)
- [x] refactor: multipart-message concept
- [x] refactor: client instant invoke
- [x] Named messages
- [x] Qt interface
- [x] Recognize hashtags
- [x] list users
- [x] Watchdog / connection status
- [x] server: user id persistence
- [x] save/load configuration files on correct location
- [x] setup.py file / http://www.pyinstaller.org/
- [x] check server/client versions
- [x] program icon
- [x] set username on first startup
{'fraction_non_alphanumeric': 0.11439220183486239, 'fraction_numerical': 0.01404816513761468, 'mean_word_length': 3.441120305537874, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 6, 'lorem ipsum': 0, 'www.': 6, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3154531', 'n_tokens_mistral': 2247, 'n_tokens_neox': 2134, 'n_words': 793}