Commit graph libervia-backend/src/memory
Author SHA1 Message Date
Goffi
3d6cac0403 core (memory/sqlite): typo 2017-09-22 18:04:14 +02:00
Goffi
ab2e625607 core (memory/sqlite): better stability:
- timeout increased to 15 s
    - if a query fail, it's retried up to 5 times
    - foreign key PRAGMA is executed on every new connection object (should fix non working foreign keys)

those are Q&D workarounds for issues with Sqlite, before switching to a higher level module to handle it correctly.
2017-09-21 21:53:28 +02:00
Goffi
9f30634f14 core (memory/disco): added use_cache parameter to discoInfos/discoItems (set to False to ignore cache) 2017-08-22 22:12:57 +02:00
Goffi
3d7e11cd8f core (memory/persistent): fixed calls to delPrivateValue 2017-07-05 14:50:39 +02:00
Goffi
06fd34fe5e memory (persistent, sqlite): fixed getPrivates bug with keys arguments and its use in LazyPersistentBinaryDict 2017-03-29 19:27:52 +02:00
Goffi
ceab0c6bdc memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
- merged private values method handling in sqlite, and added a keys arguments to get only some keys
    - LazyPersistentBinaryDict allow to get values in database only when they are needed, saving memory for big data
2017-03-12 19:33:17 +01:00
Goffi
52dce48694 core (params): removed registerNewAccount button: it is misplaced and more confusing than useful, may come back in the future 2017-03-09 00:06:09 +01:00
Goffi
27f5dd80bf core (memory/cache): escape profile when creating cache dir 2017-02-26 18:20:27 +01:00
Goffi
0a2a18ebaf core(memory.disco), bridge: discoInfos and discoItems now handle node 2017-02-12 21:17:56 +01:00
Goffi
3bc851abf2 core (memory/disco): getInfos now handle node + use client instead of profile in many methods 2017-02-12 20:43:20 +01:00
Goffi
85f3bd5988 core, frontends: getProfilesList renamed to profilesGetList + behaviour change:
- profilesGetList now handles clients and components boolean arguments, to filter profiles
    - jp: added --clients and --components options to profile/list
    - profilesGetList now returns sorted profiles
2017-02-12 19:08:52 +01:00
Goffi
97337202cb core, jp: component handling + client handling refactoring:
- SàT can now handle components
    - plugin have now a "modes" key in PLUGIN_INFO where they declare if they can be used with clients and or components. They default to be client only.
    - components are really similar to clients, but with some changes in behaviour:
        * component has "entry point", which is a special plugin with a componentStart method, which is called just after component is connected
        * trigger end with a different suffixes (e.g. profileConnected vs profileConnectedComponent), so a plugin which manage both clients and components can have different workflow
        * for clients, only triggers of plugins handling client mode are launched
        * for components, only triggers of plugins needed in dependencies are launched. They all must handle component mode.
        * component have a sendHistory attribute (False by default) which can be set to True to allow saving sent messages into history
        * for convenience, "client" is still used in method even if it can now be a component
        * a new "component" boolean attribute tells if we have a component or a client
        * components have to add themselve Message protocol
        * roster and presence protocols are not added for components
        * component default port is 5347 (which is Prosody's default port)
    - asyncCreateProfile has been renamed for profileCreate, both to follow new naming convention and to prepare the transition to fully asynchronous bridge
    - createProfile has a new "component" attribute. When used to create a component, it must be set to a component entry point
    - jp: added --component argument to profile/create
    - disconnect bridge method is now asynchronous, this way frontends can know when disconnection is finished
    - new PI_* constants for PLUGIN_INFO values (not used everywhere yet)
    - client/component connection workflow has been moved to their classes instead of being a host methods
    - host.messageSend is now client.sendMessage, and former client.sendMessage is now client.sendMessageData.
    - identities are now handled in client.identities list, so it can be updated dynamically by plugins (in the future, frontends should be able to update them too through bridge)
    - profileConnecting* profileConnected* profileDisconnected* and getHandler now all use client instead of profile
2017-02-12 17:55:43 +01:00
Goffi
9b2923f161 memory (sqlite): introduced component table, schema updated:
components are special profiles, entry_point will be the plugin to launch when they are connected.
2017-02-07 00:15:03 +01:00
Goffi
3958c9eb97 core (memory/cache): geFilePath now return None when uid is empty 2017-01-15 16:00:40 +01:00
Goffi
6872df4fd3 core (memory/cache): file caching handling, first draft:
instead of having file caching handled individually by plugins, a generic module has been added in memory.

    - Cache can be global or associated to a profile. In the later case, client.cache can be used.
    - Cache are managed with unique ids (which can be any unique unicode, hash uuid, or something else).
    - To know if a file is in cache, getFilePath is used: if the file is in cache, its absolute path is returned, else None is returned.
    - To cache a file, cacheData is used with at list the source of cache (most of time plugin import name), and unique id. The method return file opened in binary writing mode (so cacheData can - and should - be used with "with" statement).
    - 2 files will be created: a metadata file (named after the unique id), and the actual file.
    - each file has a end of life time, after it, the cache is invalidated and the file must be requested again.
2017-01-05 20:23:38 +01:00
Goffi
1b7290aa70 core (memory/disco): recover getItems on bridge's discoItems method if an item is empty 2016-12-18 16:28:44 +01:00
Goffi
7ad14f2252 core: line feed (\n) are now forbidden in profile names 2016-08-28 20:09:09 +02:00
Goffi
9647e90943 backend (memory), frontends: improved history filtering:
a "filters" dictionnary is now use to filter, it can have, for now, filtering on:
        - "body": filter only on the body (equivalent to former "search" parameter, but not case sensitive)
        - "search": fitler on body + source resource
        - "types": allowed types
        - "not_types": forbidden types

    primitivus now do searching using "search", i.e. source resource is now taken into account (and search is now case insensitive)
2016-07-18 00:52:02 +02:00
Goffi
04515e5013 plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
- bridge methods/signals now all start with "muc" to follow new convention
    - internal method use client instead of profile to follow new convention
    - removed excetpions from plugin XEP-0045 in favor of core.exceptions, NotReady added
    - cleaned/simplified several part of the code. checkClient removed as it is not needed anymore
    - self.clients map removed, muc data are now stored directly in client
    - getRoomEntityNick and getRoomNicksOfUsers are removed as they don't look sane.
        /!\ This break all room game plugins for the moment
    - use of uuid4 instead of uuid1 for getUniqueName, as host ID and current time are used for uuid1
2016-06-27 21:45:11 +02:00
Goffi
a7de473107 backend, frontends: message refactoring (huge commit):
/!\ several features are temporarily disabled, like notifications in frontends

next step in refactoring, with the following changes:
    - jp: updated jp message to follow changes in backend/bridge
    - jp: added --lang, --subject, --subject_lang, and --type options to jp message + fixed unicode handling for jid
    - quick_frontend (QuickApp, QuickChat):
        - follow backend changes
        - refactored chat, message are now handled in OrderedDict and uid are kept so they can be updated
        - Message and Occupant classes handle metadata, so frontend just have to display them
    - Primitivus (Chat):
        - follow backend/QuickFrontend changes
        - info & standard messages are handled in the same MessageWidget class
        - improved/simplified handling of messages, removed update() method
        - user joined/left messages are merged when next to each other
        - a separator is shown when message is received while widget is out of focus, so user can quickly see the new messages
        - affiliation/role are shown (in a basic way for now) in occupants panel
        - removed "/me" messages handling, as it will be done by a backend plugin
        - message language is displayed when available (only one language per message for now)
        - fixed :history and :search commands
    - core (constants): new constants for messages type, XML namespace, entity type
    - core: *Message methods renamed to follow new code sytle (e.g. sendMessageToBridge => messageSendToBridge)
    - core (messages handling): fixed handling of language
    - core (messages handling): mes_data['from'] and ['to'] are now jid.JID
    - core (core.xmpp): reorganised message methods, added getNick() method to client.roster
    - plugin text commands: fixed plugin and adapted to new messages behaviour. client is now used in arguments instead of profile
    - plugins: added information for cancellation reason in CancelError calls
    - plugin XEP-0045: various improvments, but this plugin still need work:
        - trigger is used to avoid message already handled by the plugin to be handled a second time
        - changed the way to handle history, the last message from DB is checked and we request only messages since this one, in seconds (thanks Poezio folks :))
        - subject reception is waited before sending the roomJoined signal, this way we are sure that everything including history is ready
        - cmd_* method now follow the new convention with client instead of profile
        - roomUserJoined and roomUserLeft messages are removed, the events are now handled with info message with a "ROOM_USER_JOINED" info subtype
    - probably other forgotten stuffs :p
2016-06-20 18:41:53 +02:00
Goffi
feadc8c89e memory (sqlite): fixed handling of extra (pickled data) by using sqlite3.Binary 2016-06-19 22:22:13 +02:00
Goffi
74ebd4cb66 memory (sqlite): better handling of IntegrityError 2016-06-19 22:22:12 +02:00
Goffi
f12803fa65 backend, frontend: messages refactoring (huge commit, not finished):
/!\ database schema has been modified, do a backup before updating

    message have been refactored, here are the main changes:

    - languages are now handled
    - all messages have an uid (internal to SàT)
    - message updating is anticipated
    - subject is now first class
    - new naming scheme is used newMessage => messageNew, getHistory => historyGet, sendMessage => messageSend
    - minimal compatibility refactoring in quick_frontend/Primitivus, better refactoring should follow
    - threads handling
    - delayed messages are saved into history
    - info messages may also be saved in history (e.g. to keep track of people joining/leaving a room)
    - duplicate messages should be avoided
    - historyGet return messages in right order, no need to sort again
    - plugins have been updated to follow new features, some of them need to be reworked (e.g. OTR)
    - XEP-0203 (Delayed Delivery) is now fully handled in core, the plugin just handle disco and creation of a delay element
    - /!\ jp and Libervia are currently broken, as some features of Primitivus

    It has been put in one huge commit to avoid breaking messaging between changes.
    This is the main part of message refactoring, other commits will follow to take profit of the new features/behaviour.
2016-05-24 22:11:04 +02:00
Goffi
6bbcbaf522 use of /usr/bin/env instead of /usr/bin/python in shebang 2016-04-17 14:45:26 +02:00
Goffi
046fb62a52 core (memory/params): fixed exception when setting an empty password 2016-03-26 18:43:54 +01:00
Goffi
8403bd61ae core (memory, config): moved parseMainConf to tools/config so it can be used by frontends too 2016-02-29 16:13:47 +01:00
Goffi
d7bca38b31 core (params): return given profile for ProfileUnknownError 2016-01-25 17:03:45 +01:00
Goffi
348be27934 copyright update 2016-01-03 16:28:30 +01:00
Goffi
b140240996 core (disco): display a warning when a disco info/items request failed, and return empty DiscoInfo/DiscoITems 2015-12-17 21:58:41 +01:00
souliane
4d3d6fb8b8 memory (params): fixes loading user value and building params XML for jids_list type 2015-12-15 17:43:36 +01:00
Goffi
0ecb55517d core (params): removed unused values 2015-12-15 16:25:37 +01:00
Goffi
77c3e83ec8 plugin extra_pep, params: fixed insecure building of jids_list 2015-12-15 16:25:19 +01:00
souliane
9e0b24a4a5 memory (params): parameter jids_list values are specified with <jid>...</jid> 2015-12-15 14:12:19 +01:00
souliane
a29630c3b6 memory (params): forbid to pass a value to a parameter of type "list" with <param value...> 2015-12-15 13:33:35 +01:00
Goffi
d978e4918b core: avoid initialisation blocking when a long callback is added to backend.initialised (could prevent sessions starting) 2015-12-07 13:10:44 +01:00
Goffi
1a16f085d0 core (sqlite storage): do explicit delete to profile linked tables for deleteProfile 2015-11-30 20:42:14 +01:00
Goffi
a3c15277bc core (memory): fixed bad memory cleaning on asyncDeleteProfile 2015-11-30 20:40:55 +01:00
Goffi
fad4200be3 core (memory): asyncCreateProfile fix: a fake session is created to set general password param 2015-11-27 16:52:14 +01:00
Goffi
1bf3950ce6 core (memory): profile is checked in startSession (an error is raised if it doesn't exist) 2015-11-27 16:50:29 +01:00
Goffi
3d8d66fa43 core (memory): stopSession implementation 2015-11-27 16:48:41 +01:00
Goffi
939b6ba80b core (memory): catch exceptions.UnknownEntityError in getMainResource 2015-11-26 17:00:18 +01:00
Goffi
566de1dd33 core(params): replaced isConnected by isSessionStarted for profile update signal when a general param is modified 2015-11-26 16:04:45 +01:00
Goffi
c58da8d413 profile (params): fixed password setting: if profile was not connected, set was silently ignored 2015-11-26 15:47:01 +01:00
Goffi
95ad000f62 core (disco): disco hashes are now stored in database to avoid doing the same disco request on next load 2015-11-25 21:41:15 +01:00
Goffi
9c4ec1595c plugin XEP-0054: fixed vcard-update callback which was updating avatar when hash was empty, resulting in a really slow start 2015-11-25 20:01:39 +01:00
Goffi
5afdf1c1ca plugin XEP-0065: fixed bad error handling 2015-11-25 13:03:10 +01:00
souliane
3fa1ea0376 memory: fixes asyncCreateProfile to not overwrite the personal key 2015-11-23 18:51:15 +01:00
Goffi
cb27db7cdf core: fixed getStringParamA 2015-11-23 17:50:23 +01:00
Goffi
66739d9dfc core (param), plugin file: set security_limit for acount changes, backend (dis)connection, and put a higher one for file send 2015-11-23 13:19:42 +01:00
Goffi
ad973c6a2c core: fixed launchAction:
- getClient now raise a NotFound error if client is not available
    - errors ConnectedProfileError, NotConnectedProfileError anf ProfileKeyUnknownError renamed for consistency (all profile error must prefixed by Profile)
    - launchAction fixed, the case where client is not available is handled
    - kept actions are actuall1y removed on launchAction
2015-11-18 11:06:24 +01:00