annotate frontends/src/tools/misc.py @ 853:c2f6ada7858f

core (sqlite): automatic database update: - new Updater class check database consistency (by calculating a hash on the .schema), and updates base if necessary - database now has a version (1 for current, 0 will be for 0.3's database), for each change this version will be increased - creation statements and update statements are in the form of dict of dict with tuples. There is a help text at the top of the module to explain how it works - if we are on a development version, the updater try to update the database automaticaly (without deleting table or columns). The Updater.generateUpdateData method can be used to ease the creation of update data (i.e. the dictionary at the top, see the one for the key 1 for an example). - if there is an inconsistency, an exception is raised, and a message indicate the SQL statements that should fix the situation. - well... this is rather complicated, a KISS method would maybe have been better. The future will say if we need to simplify it :-/ - new DatabaseError exception
author Goffi <goffi@goffi.org>
date Sun, 23 Feb 2014 23:30:32 +0100
parents 1fe00f0c9a91
children 0dca4f9b264d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
671
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
1 #!/usr/bin/python
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
3
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # SAT helpers methods for plugins
811
1fe00f0c9a91 dates update
Goffi <goffi@goffi.org>
parents: 719
diff changeset
5 # Copyright (C) 2013, 2014 Adrien Cossa (souliane@mailoo.org)
671
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
6
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # (at your option) any later version.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
11
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
16
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
19
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
20
712
f610864eb7a5 plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents: 673
diff changeset
21 # Default value for the "New discussion room" user input
f610864eb7a5 plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents: 673
diff changeset
22 DEFAULT_MUC = 'sat@chat.jabberfr.org'
f610864eb7a5 plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents: 673
diff changeset
23
f610864eb7a5 plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents: 673
diff changeset
24
671
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
25 class InputHistory(object):
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
26
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
27 def _updateInputHistory(self, text=None, step=None, callback=None, mode=""):
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
28 """Update the lists of previously sent messages. Several lists can be
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
29 handled as they are stored in a dictionary, the argument "mode" being
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
30 used as the entry key. There's also a temporary list to allow you play
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
31 with previous entries before sending a new message. Parameters values
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
32 can be combined: text is None and step is None to initialize a main
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
33 list and the temporary one, step is None to update a list and
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
34 reinitialize the temporary one, step is not None to update
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
35 the temporary list between two messages.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
36 @param text: text to be saved.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
37 @param step: step to move the temporary index.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
38 @param callback: method to display temporary entries.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
39 @param mode: the dictionary key for main lists.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
40 """
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
41 if not hasattr(self, "input_histories"):
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
42 self.input_histories = {}
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
43 history = self.input_histories.setdefault(mode, [])
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
44 if step is None and text is not None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
45 # update the main list
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
46 if text in history:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
47 history.remove(text)
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
48 history.append(text)
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
49 length = len(history)
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
50 if step is None or length == 0:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
51 # prepare the temporary list and index
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
52 self.input_history_tmp = history[:]
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
53 self.input_history_tmp.append("")
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
54 self.input_history_index = length
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
55 if step is None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
56 return
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
57 # update the temporary list
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
58 if text is not None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
59 # save the current entry
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
60 self.input_history_tmp[self.input_history_index] = text
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
61 # move to another entry if possible
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
62 index_tmp = self.input_history_index + step
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
63 if index_tmp >= 0 and index_tmp < len(self.input_history_tmp):
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
64 if callback is not None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
65 callback(self.input_history_tmp[index_tmp])
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
66 self.input_history_index = index_tmp