[delmonico] fuzzyclock

This commit is contained in:
Yann Leboulanger 2006-06-15 07:14:39 +00:00
parent 1c6c15f1c0
commit 7ec7acbb27
3 changed files with 142 additions and 2 deletions

View file

@ -81,6 +81,7 @@ class Config:
'sort_by_show': [ opt_bool, True, '', True ], 'sort_by_show': [ opt_bool, True, '', True ],
'use_speller': [ opt_bool, False, ], 'use_speller': [ opt_bool, False, ],
'print_time': [ opt_str, 'always', _('\'always\' - print time for every message.\n\'sometimes\' - print time every print_ichat_every_foo_minutes minute.\n\'never\' - never print time.')], 'print_time': [ opt_str, 'always', _('\'always\' - print time for every message.\n\'sometimes\' - print time every print_ichat_every_foo_minutes minute.\n\'never\' - never print time.')],
'print_time_fuzzy': [ opt_int, 0, _('Value of fuzziness from 1 to 4 or 0 to disable fuzzyclock. 1 is the most precise clock, 4 the less precise one.') ],
'emoticons_theme': [opt_str, 'static', '', True ], 'emoticons_theme': [opt_str, 'static', '', True ],
'ascii_formatting': [ opt_bool, True, 'ascii_formatting': [ opt_bool, True,
_('Treat * / _ pairs as possible formatting characters.'), True], _('Treat * / _ pairs as possible formatting characters.'), True],

131
src/common/fuzzyclock.py Executable file
View file

@ -0,0 +1,131 @@
############################################################################
# Copyright (C) 2005 by Christoph Neuroth <delmonico@gmx.net> #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program; if not, write to the #
# Free Software Foundation, Inc., #
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
############################################################################
'''
Python class to show a "fuzzy clock".
Homepage: http://home.gna.org/fuzzyclock/
Project Page: http://gna.org/projects/fuzzyclock
The class has been ported from PHP code by
Henrique Recidive <henrique at recidive.com> which was
in turn based on the Fuzzy Clock Applet of Frerich Raabe (KDE).
So most of the credit goes to this guys, thanks :-)
'''
import time
class FuzzyClock:
def __init__(self):
self.__hour = 0
self.__minute = 0
self.__dayOfWeek = 0
self.__hourNames = [ _('one'), _('two'), _('three'), _('four'), _('five'), _('six'),
_('seven'), _('eight'), _('nine'), _('ten'), _('eleven'),
_('twelve')]
#Strings to use for the output. %0 will be replaced with the preceding hour (e.g. "x PAST %0"), %1 with the coming hour (e.g. "x TO %1). '''
self.__normalFuzzy = [ _("%0 o'clock"), _('five past %0'), _('ten past %0'),
_('quarter past %0'), _('twenty past %0'),
_('twenty five past %0'), _('half past %0'),
_('twenty five to %1'), _('twenty to %1'),
_('quarter to %1'), _('ten to %1'), _('five to %1'),
_("%1 o'clock") ]
#A "singular-form". It is used when talking about hour 0
self.__normalFuzzyOne = [ _("%0 o'clock"), _('five past %0'),
_('ten past %0'), _('quarter past %0'),
_('twenty past %0'), _('twenty five past %0'),
_('half past %0'), _('twenty five to %1'),
_('twenty to %1'), _('quarter to %1'),
_('ten to %1'), _('five to %1'), _("%1 o'clock") ]
self.__dayTime = [ _('Night'), _('Early morning'), _('Morning'), _('Almost noon'),
_('Noon'), _('Afternoon'), _('Evening'), _('Late evening') ]
self.__fuzzyWeek = [ _('Start of week'), _('Middle of week'), _('End of week'),
_('Weekend!') ]
self.setCurrent()
def setHour(self,hour):
self.__hour = int(hour)
def setMinute(self,minute):
self.__minute=int(minute)
def setDayOfWeek(self,day):
self.__dayOfWeek=int(day)
def setTime(self,time):
timeArray = time.split(":")
self.setHour(timeArray[0])
self.setMinute(timeArray[1])
def setCurrent(self):
hour=time.strftime("%H")
minute=time.strftime("%M")
day=time.strftime("%w")
self.setTime(hour+":"+minute)
self.setDayOfWeek(day)
def getFuzzyTime(self, fuzzyness = 1):
sector = 0
realHour = 0
if fuzzyness == 1 or fuzzyness == 2:
if fuzzyness == 1:
if self.__minute >2:
sector = (self.__minute - 3) / 5 +1
else:
if self.__minute > 6:
sector = ((self.__minute - 7) / 15 + 1) * 3
newTimeStr = self.__normalFuzzy[sector]
#%0 or %1?
deltaHour = int(newTimeStr[newTimeStr.find("%")+1])
if (self.__hour + deltaHour) % 12 > 0:
realHour = (self.__hour + deltaHour) % 12 - 1
else:
realHour = 12 - ((self.__hour + deltaHour) % 12 + 1)
if realHour == 0:
newTimeStr = self.__normalFuzzyOne[sector]
newTimeStr = newTimeStr.replace("%"+str(deltaHour),
self.__hourNames[realHour])
elif fuzzyness == 3:
newTimeStr = self.__dayTime[self.__hour / 3]
else:
dayOfWeek = self.__dayOfWeek
if dayOfWeek == 1:
newTimeStr = self.__fuzzyWeek[0]
elif dayOfWeek >= 2 and dayOfWeek <= 4:
newTimeStr = self.__fuzzyWeek[1]
elif dayOfWeek == 5:
newTimeStr = self.__fuzzyWeek[2]
else:
newTimeStr = self.__fuzzyWeek[3]
return newTimeStr

View file

@ -36,6 +36,7 @@ import gtkgui_helpers
from common import gajim from common import gajim
from common import helpers from common import helpers
from calendar import timegm from calendar import timegm
from common.fuzzyclock import FuzzyClock
class ConversationTextview: class ConversationTextview:
'''Class for the conversation textview (where user reads already said messages) '''Class for the conversation textview (where user reads already said messages)
@ -619,8 +620,15 @@ class ConversationTextview:
if seconds_passed > every_foo_seconds: if seconds_passed > every_foo_seconds:
self.last_time_printout = time.mktime(tim) self.last_time_printout = time.mktime(tim)
end_iter = buffer.get_end_iter() end_iter = buffer.get_end_iter()
if gajim.config.get('print_time_fuzzy') > 0:
fc = FuzzyClock()
fc.setTime(time.strftime('%H:%M'))
ft = fc.getFuzzyTime(gajim.config.get('print_time_fuzzy'))
tim_format = ft.decode(locale.getpreferredencoding())
else:
tim_format = time.strftime('%H:%M', tim).decode( tim_format = time.strftime('%H:%M', tim).decode(
locale.getpreferredencoding()) locale.getpreferredencoding())
buffer.insert_with_tags_by_name(end_iter, tim_format + '\n', buffer.insert_with_tags_by_name(end_iter, tim_format + '\n',
'time_sometimes') 'time_sometimes')
other_text_tag = self.detect_other_text_tag(text, kind) other_text_tag = self.detect_other_text_tag(text, kind)