Merge branch 'master' of git://git.assembla.com/fpdboz.git
Conflicts: pyfpdb/fpdb.py
This commit is contained in:
commit
05ccca63ad
|
@ -6,7 +6,7 @@ Build-Depends: debhelper, python-support
|
||||||
Standards-Version: 3.8.0
|
Standards-Version: 3.8.0
|
||||||
|
|
||||||
Package: python-fpdb
|
Package: python-fpdb
|
||||||
Architecture: any
|
Architecture: all
|
||||||
Section: games
|
Section: games
|
||||||
Priority: extra
|
Priority: extra
|
||||||
Depends: ${python:Depends}, python-gtk2, python-matplotlib,
|
Depends: ${python:Depends}, python-gtk2, python-matplotlib,
|
||||||
|
|
|
@ -278,6 +278,15 @@ class Import:
|
||||||
return " interval = %s\n callFpdbHud = %s\n hhArchiveBase = %s\n saveActions = %s\n fastStoreHudCache = %s\n" \
|
return " interval = %s\n callFpdbHud = %s\n hhArchiveBase = %s\n saveActions = %s\n fastStoreHudCache = %s\n" \
|
||||||
% (self.interval, self.callFpdbHud, self.hhArchiveBase, self.saveActions, self.fastStoreHudCache)
|
% (self.interval, self.callFpdbHud, self.hhArchiveBase, self.saveActions, self.fastStoreHudCache)
|
||||||
|
|
||||||
|
class HudUI:
|
||||||
|
def __init__(self, node):
|
||||||
|
self.node = node
|
||||||
|
self.label = node.getAttribute('label')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return " label = %s\n" % self.label
|
||||||
|
|
||||||
|
|
||||||
class Tv:
|
class Tv:
|
||||||
def __init__(self, node):
|
def __init__(self, node):
|
||||||
self.combinedStealFold = node.getAttribute("combinedStealFold")
|
self.combinedStealFold = node.getAttribute("combinedStealFold")
|
||||||
|
@ -311,13 +320,21 @@ class Config:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if file == None: # that didn't work either, just die
|
if file == None: # that didn't work either, just die
|
||||||
print "No HUD_config_xml found. Exiting"
|
print "No HUD_config_xml found after looking in current directory and "+self.default_config_path+"\nExiting"
|
||||||
sys.stderr.write("No HUD_config_xml found. Exiting")
|
sys.stderr.write("No HUD_config_xml found after looking in current directory and "+self.default_config_path+"\nExiting")
|
||||||
|
print "press enter to continue"
|
||||||
|
sys.stdin.readline()
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
# Parse even if there was no real config file found and we are using the example
|
# Parse even if there was no real config file found and we are using the example
|
||||||
# If using the example, we'll edit it later
|
# If using the example, we'll edit it later
|
||||||
|
# sc 2009/10/04 Example already copied to main filename, is this ok?
|
||||||
log.info("Reading configuration file %s" % file)
|
log.info("Reading configuration file %s" % file)
|
||||||
|
if os.sep in file:
|
||||||
|
print "\nReading configuration file %s\n" % file
|
||||||
|
else:
|
||||||
|
print "\nReading configuration file %s" % file
|
||||||
|
print "in %s\n" % os.getcwd()
|
||||||
try:
|
try:
|
||||||
doc = xml.dom.minidom.parse(file)
|
doc = xml.dom.minidom.parse(file)
|
||||||
except:
|
except:
|
||||||
|
@ -389,6 +406,10 @@ class Config:
|
||||||
imp = Import(node = imp_node)
|
imp = Import(node = imp_node)
|
||||||
self.imp = imp
|
self.imp = imp
|
||||||
|
|
||||||
|
for hui_node in doc.getElementsByTagName('hud_ui'):
|
||||||
|
hui = HudUI(node = hui_node)
|
||||||
|
self.ui = hui
|
||||||
|
|
||||||
for tv_node in doc.getElementsByTagName("tv"):
|
for tv_node in doc.getElementsByTagName("tv"):
|
||||||
tv = Tv(node = tv_node)
|
tv = Tv(node = tv_node)
|
||||||
self.tv = tv
|
self.tv = tv
|
||||||
|
@ -405,6 +426,8 @@ class Config:
|
||||||
db_pass = df_parms['db-password'])
|
db_pass = df_parms['db-password'])
|
||||||
self.save(file=os.path.join(self.default_config_path, "HUD_config.xml"))
|
self.save(file=os.path.join(self.default_config_path, "HUD_config.xml"))
|
||||||
|
|
||||||
|
print ""
|
||||||
|
|
||||||
def set_hhArchiveBase(self, path):
|
def set_hhArchiveBase(self, path):
|
||||||
self.imp.node.setAttribute("hhArchiveBase", path)
|
self.imp.node.setAttribute("hhArchiveBase", path)
|
||||||
|
|
||||||
|
@ -454,11 +477,15 @@ class Config:
|
||||||
|
|
||||||
def find_example_config(self):
|
def find_example_config(self):
|
||||||
if os.path.exists('HUD_config.xml.example'): # there is a HUD_config in the cwd
|
if os.path.exists('HUD_config.xml.example'): # there is a HUD_config in the cwd
|
||||||
file = 'HUD_config.xml.example' # so we use it
|
file = 'HUD_config.xml' # so we use it
|
||||||
|
try:
|
||||||
|
shutil.copyfile(file+'.example', file)
|
||||||
|
except:
|
||||||
|
file = ''
|
||||||
print "No HUD_config.xml found, using HUD_config.xml.example.\n", \
|
print "No HUD_config.xml found, using HUD_config.xml.example.\n", \
|
||||||
"A HUD_config.xml will be written. You will probably have to edit it."
|
"A HUD_config.xml has been created. You will probably have to edit it."
|
||||||
sys.stderr.write("No HUD_config.xml found, using HUD_config.xml.example.\n" + \
|
sys.stderr.write("No HUD_config.xml found, using HUD_config.xml.example.\n" + \
|
||||||
"A HUD_config.xml will be written. You will probably have to edit it.")
|
"A HUD_config.xml has been created. You will probably have to edit it.")
|
||||||
else:
|
else:
|
||||||
file = None
|
file = None
|
||||||
return file
|
return file
|
||||||
|
@ -599,6 +626,19 @@ class Config:
|
||||||
except: tv['combinedPostflop'] = True
|
except: tv['combinedPostflop'] = True
|
||||||
return tv
|
return tv
|
||||||
|
|
||||||
|
# Allow to change the menu appearance
|
||||||
|
def get_hud_ui_parameters(self):
|
||||||
|
hui = {}
|
||||||
|
default_text = 'FPDB Menu - Right click\nLeft-Drag to Move'
|
||||||
|
try:
|
||||||
|
hui['label'] = self.ui.label
|
||||||
|
if self.ui.label == '': # Empty menu label is a big no-no
|
||||||
|
hui['label'] = default_text
|
||||||
|
except:
|
||||||
|
hui['label'] = default_text
|
||||||
|
return hui
|
||||||
|
|
||||||
|
|
||||||
def get_import_parameters(self):
|
def get_import_parameters(self):
|
||||||
imp = {}
|
imp = {}
|
||||||
try: imp['callFpdbHud'] = self.imp.callFpdbHud
|
try: imp['callFpdbHud'] = self.imp.callFpdbHud
|
||||||
|
|
|
@ -537,6 +537,16 @@ class Database:
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def get_player_names(self, config, site_id=None, like_player_name="%"):
|
||||||
|
"""Fetch player names from players. Use site_id and like_player_name if provided"""
|
||||||
|
|
||||||
|
if site_id == None:
|
||||||
|
site_id = -1
|
||||||
|
c = self.get_cursor()
|
||||||
|
c.execute(self.sql.query['get_player_names'], (like_player_name, site_id, site_id))
|
||||||
|
rows = c.fetchall()
|
||||||
|
return rows
|
||||||
|
|
||||||
#returns the SQL ids of the names given in an array
|
#returns the SQL ids of the names given in an array
|
||||||
# TODO: if someone gets industrious, they should make the parts that use the output of this function deal with a dict
|
# TODO: if someone gets industrious, they should make the parts that use the output of this function deal with a dict
|
||||||
# { playername: id } instead of depending on it's relation to the positions list
|
# { playername: id } instead of depending on it's relation to the positions list
|
||||||
|
@ -1133,7 +1143,7 @@ class Database:
|
||||||
elif self.backend == self.MYSQL_INNODB:
|
elif self.backend == self.MYSQL_INNODB:
|
||||||
c.execute("""insert into TourneyTypes(id, siteId, buyin, fee, maxSeats, knockout
|
c.execute("""insert into TourneyTypes(id, siteId, buyin, fee, maxSeats, knockout
|
||||||
,rebuyOrAddon, speed, headsUp, shootout, matrix)
|
,rebuyOrAddon, speed, headsUp, shootout, matrix)
|
||||||
values (1, 1, 0, 0, 0, False, False, null, False, False, False);""")
|
values (1, 0, 0, 0, False, False, null, False, False, False);""")
|
||||||
|
|
||||||
#end def fillDefaultData
|
#end def fillDefaultData
|
||||||
|
|
||||||
|
@ -1372,11 +1382,17 @@ class Database:
|
||||||
importtime,
|
importtime,
|
||||||
seats,
|
seats,
|
||||||
maxseats,
|
maxseats,
|
||||||
|
playersVpi,
|
||||||
boardcard1,
|
boardcard1,
|
||||||
boardcard2,
|
boardcard2,
|
||||||
boardcard3,
|
boardcard3,
|
||||||
boardcard4,
|
boardcard4,
|
||||||
boardcard5,
|
boardcard5,
|
||||||
|
playersAtStreet1,
|
||||||
|
playersAtStreet2,
|
||||||
|
playersAtStreet3,
|
||||||
|
playersAtStreet4,
|
||||||
|
playersAtShowdown,
|
||||||
street1Pot,
|
street1Pot,
|
||||||
street2Pot,
|
street2Pot,
|
||||||
street3Pot,
|
street3Pot,
|
||||||
|
@ -1385,20 +1401,14 @@ class Database:
|
||||||
)
|
)
|
||||||
VALUES
|
VALUES
|
||||||
(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
|
(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
|
||||||
%s, %s, %s, %s, %s, %s, %s)"""
|
%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
|
||||||
|
%s, %s, %s)"""
|
||||||
#--- texture,
|
#--- texture,
|
||||||
#-- playersVpi,
|
|
||||||
#-- playersAtStreet1,
|
|
||||||
#-- playersAtStreet2,
|
|
||||||
#-- playersAtStreet3,
|
|
||||||
#-- playersAtStreet4,
|
|
||||||
#-- playersAtShowdown,
|
|
||||||
#-- street0Raises,
|
#-- street0Raises,
|
||||||
#-- street1Raises,
|
#-- street1Raises,
|
||||||
#-- street2Raises,
|
#-- street2Raises,
|
||||||
#-- street3Raises,
|
#-- street3Raises,
|
||||||
#-- street4Raises,
|
#-- street4Raises,
|
||||||
#-- seats,
|
|
||||||
|
|
||||||
q = q.replace('%s', self.sql.query['placeholder'])
|
q = q.replace('%s', self.sql.query['placeholder'])
|
||||||
print "DEBUG: p: %s" %p
|
print "DEBUG: p: %s" %p
|
||||||
|
@ -1409,20 +1419,19 @@ class Database:
|
||||||
p['siteHandNo'],
|
p['siteHandNo'],
|
||||||
p['handStart'],
|
p['handStart'],
|
||||||
datetime.today(), #importtime
|
datetime.today(), #importtime
|
||||||
# len(p['names']), #seats
|
|
||||||
p['maxSeats'],
|
|
||||||
p['seats'],
|
p['seats'],
|
||||||
|
p['maxSeats'],
|
||||||
|
p['playersVpi'],
|
||||||
p['boardcard1'],
|
p['boardcard1'],
|
||||||
p['boardcard2'],
|
p['boardcard2'],
|
||||||
p['boardcard3'],
|
p['boardcard3'],
|
||||||
p['boardcard4'],
|
p['boardcard4'],
|
||||||
p['boardcard5'],
|
p['boardcard5'],
|
||||||
# hudCache['playersVpi'],
|
p['playersAtStreet1'],
|
||||||
# hudCache['playersAtStreet1'],
|
p['playersAtStreet2'],
|
||||||
# hudCache['playersAtStreet2'],
|
p['playersAtStreet3'],
|
||||||
# hudCache['playersAtStreet3'],
|
p['playersAtStreet4'],
|
||||||
# hudCache['playersAtStreet4'],
|
p['playersAtShowdown'],
|
||||||
# hudCache['playersAtShowdown'],
|
|
||||||
# hudCache['street0Raises'],
|
# hudCache['street0Raises'],
|
||||||
# hudCache['street1Raises'],
|
# hudCache['street1Raises'],
|
||||||
# hudCache['street2Raises'],
|
# hudCache['street2Raises'],
|
||||||
|
|
|
@ -22,76 +22,6 @@ class DerivedStats():
|
||||||
def __init__(self, hand):
|
def __init__(self, hand):
|
||||||
self.hand = hand
|
self.hand = hand
|
||||||
|
|
||||||
self.activeSeats = 0
|
|
||||||
self.position = 0
|
|
||||||
self.tourneyTypeId = 0
|
|
||||||
|
|
||||||
self.HDs = 0
|
|
||||||
self.street0VPI = 0
|
|
||||||
self.street0Aggr = 0
|
|
||||||
self.street0_3BChance = 0
|
|
||||||
self.street0_3BDone = 0
|
|
||||||
self.street0_4BChance = 0
|
|
||||||
self.street0_4BDone = 0
|
|
||||||
|
|
||||||
self.street1Seen = 0
|
|
||||||
self.street2Seen = 0
|
|
||||||
self.street3Seen = 0
|
|
||||||
self.street4Seen = 0
|
|
||||||
self.sawShowdown = 0
|
|
||||||
|
|
||||||
self.street1Aggr = 0
|
|
||||||
self.street2Aggr = 0
|
|
||||||
self.street3Aggr = 0
|
|
||||||
self.street4Aggr = 0
|
|
||||||
|
|
||||||
self.otherRaisedStreet1 = 0
|
|
||||||
self.otherRaisedStreet2 = 0
|
|
||||||
self.otherRaisedStreet3 = 0
|
|
||||||
self.otherRaisedStreet4 = 0
|
|
||||||
self.foldToOtherRaisedStreet1 = 0
|
|
||||||
self.foldToOtherRaisedStreet2 = 0
|
|
||||||
self.foldToOtherRaisedStreet3 = 0
|
|
||||||
self.foldToOtherRaisedStreet4 = 0
|
|
||||||
self.wonWhenSeenStreet1 = 0
|
|
||||||
self.wonAtSD = 0
|
|
||||||
|
|
||||||
self.stealAttemptChance = 0
|
|
||||||
self.stealAttempted = 0
|
|
||||||
self.foldBbToStealChance = 0
|
|
||||||
self.foldedBbToSteal = 0
|
|
||||||
self.foldSbToStealChance = 0
|
|
||||||
self.foldedSbToSteal = 0
|
|
||||||
|
|
||||||
self.street1CBChance = 0
|
|
||||||
self.street1CBDone = 0
|
|
||||||
self.street2CBChance = 0
|
|
||||||
self.street2CBDone = 0
|
|
||||||
self.street3CBChance = 0
|
|
||||||
self.street3CBDone = 0
|
|
||||||
self.street4CBChance = 0
|
|
||||||
self.street4CBDone = 0
|
|
||||||
|
|
||||||
self.foldToStreet1CBChance = 0
|
|
||||||
self.foldToStreet1CBDone = 0
|
|
||||||
self.foldToStreet2CBChance = 0
|
|
||||||
self.foldToStreet2CBDone = 0
|
|
||||||
self.foldToStreet3CBChance = 0
|
|
||||||
self.foldToStreet3CBDone = 0
|
|
||||||
self.foldToStreet4CBChance = 0
|
|
||||||
self.foldToStreet4CBDone = 0
|
|
||||||
|
|
||||||
self.totalProfit = 0
|
|
||||||
|
|
||||||
self.street1CheckCallRaiseChance = 0
|
|
||||||
self.street1CheckCallRaiseDone = 0
|
|
||||||
self.street2CheckCallRaiseChance = 0
|
|
||||||
self.street2CheckCallRaiseDone = 0
|
|
||||||
self.street3CheckCallRaiseChance = 0
|
|
||||||
self.street3CheckCallRaiseDone = 0
|
|
||||||
self.street4CheckCallRaiseChance = 0
|
|
||||||
self.street4CheckCallRaiseDone = 0
|
|
||||||
|
|
||||||
self.hands = {}
|
self.hands = {}
|
||||||
self.handsplayers = {}
|
self.handsplayers = {}
|
||||||
|
|
||||||
|
@ -106,6 +36,9 @@ class DerivedStats():
|
||||||
print "hands =", self.hands
|
print "hands =", self.hands
|
||||||
print "handsplayers =", self.handsplayers
|
print "handsplayers =", self.handsplayers
|
||||||
|
|
||||||
|
def getHands(self):
|
||||||
|
return self.hands
|
||||||
|
|
||||||
def assembleHands(self, hand):
|
def assembleHands(self, hand):
|
||||||
self.hands['tableName'] = hand.tablename
|
self.hands['tableName'] = hand.tablename
|
||||||
self.hands['siteHandNo'] = hand.handid
|
self.hands['siteHandNo'] = hand.handid
|
||||||
|
@ -114,17 +47,46 @@ class DerivedStats():
|
||||||
self.hands['importTime'] = None
|
self.hands['importTime'] = None
|
||||||
self.hands['seats'] = self.countPlayers(hand)
|
self.hands['seats'] = self.countPlayers(hand)
|
||||||
self.hands['maxSeats'] = hand.maxseats
|
self.hands['maxSeats'] = hand.maxseats
|
||||||
self.hands['boardcard1'] = None
|
|
||||||
self.hands['boardcard2'] = None
|
|
||||||
self.hands['boardcard3'] = None
|
|
||||||
self.hands['boardcard4'] = None
|
|
||||||
self.hands['boardcard5'] = None
|
|
||||||
|
|
||||||
boardCard = 1
|
# This (i think...) is correct for both stud and flop games, as hand.board['street'] disappears, and
|
||||||
for street in hand.communityStreets:
|
# those values remain default in stud.
|
||||||
for card in hand.board[street]:
|
boardcards = hand.board['FLOP'] + hand.board['TURN'] + hand.board['RIVER'] + [u'0x', u'0x', u'0x', u'0x', u'0x']
|
||||||
self.hands['boardcard%s' % str(boardCard)] = Card.encodeCard(card)
|
cards = [Card.encodeCard(c) for c in boardcards[0:5]]
|
||||||
boardCard += 1
|
self.hands['boardcard1'] = cards[0]
|
||||||
|
self.hands['boardcard2'] = cards[1]
|
||||||
|
self.hands['boardcard3'] = cards[2]
|
||||||
|
self.hands['boardcard4'] = cards[3]
|
||||||
|
self.hands['boardcard5'] = cards[4]
|
||||||
|
|
||||||
|
#print "DEBUG: self.getStreetTotals = (%s, %s, %s, %s, %s)" % hand.getStreetTotals()
|
||||||
|
#FIXME: Pot size still in decimal, needs to be converted to cents
|
||||||
|
(self.hands['street1Pot'],
|
||||||
|
self.hands['street2Pot'],
|
||||||
|
self.hands['street3Pot'],
|
||||||
|
self.hands['street4Pot'],
|
||||||
|
self.hands['showdownPot']) = hand.getStreetTotals()
|
||||||
|
|
||||||
|
|
||||||
|
self.vpip(hand) # Gives playersVpi (num of players vpip)
|
||||||
|
self.playersAtStreetX(hand) # Gives playersAtStreet1..4 and Showdown
|
||||||
|
|
||||||
|
# texture smallint,
|
||||||
|
|
||||||
|
# street0Raises TINYINT NOT NULL, /* num small bets paid to see flop/street4, including blind */
|
||||||
|
# Needs to be recorded
|
||||||
|
# street1Raises TINYINT NOT NULL, /* num small bets paid to see turn/street5 */
|
||||||
|
# Needs to be recorded
|
||||||
|
# street2Raises TINYINT NOT NULL, /* num big bets paid to see river/street6 */
|
||||||
|
# Needs to be recorded
|
||||||
|
# street3Raises TINYINT NOT NULL, /* num big bets paid to see sd/street7 */
|
||||||
|
# Needs to be recorded
|
||||||
|
# street4Raises TINYINT NOT NULL, /* num big bets paid to see showdown */
|
||||||
|
# Needs to be recorded
|
||||||
|
|
||||||
|
# comment TEXT,
|
||||||
|
# commentTs DATETIME
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def assembleHandsPlayers(self, hand):
|
def assembleHandsPlayers(self, hand):
|
||||||
self.vpip(self.hand)
|
self.vpip(self.hand)
|
||||||
|
@ -144,6 +106,47 @@ class DerivedStats():
|
||||||
self.handsplayers[player[1]]['vpip'] = False
|
self.handsplayers[player[1]]['vpip'] = False
|
||||||
self.hands['playersVpi'] = len(vpipers)
|
self.hands['playersVpi'] = len(vpipers)
|
||||||
|
|
||||||
|
def playersAtStreetX(self, hand):
|
||||||
|
"""playersAtStreet1 SMALLINT NOT NULL, /* num of players seeing flop/street4/draw1 */"""
|
||||||
|
# self.actions[street] is a list of all actions in a tuple, contining the player name first
|
||||||
|
# [ (player, action, ....), (player2, action, ...) ]
|
||||||
|
# The number of unique players in the list per street gives the value for playersAtStreetXXX
|
||||||
|
|
||||||
|
self.hands['playersAtStreet1'] = 0
|
||||||
|
self.hands['playersAtStreet2'] = 0
|
||||||
|
self.hands['playersAtStreet3'] = 0
|
||||||
|
self.hands['playersAtStreet4'] = 0
|
||||||
|
self.hands['playersAtShowdown'] = 0
|
||||||
|
|
||||||
|
for street in hand.actionStreets:
|
||||||
|
actors = {}
|
||||||
|
for act in a[street]:
|
||||||
|
actors[act[0]] = 1
|
||||||
|
#print "len(actors.keys(%s)): %s" % ( street, len(actors.keys()))
|
||||||
|
if hand.gametype['base'] in ("hold"):
|
||||||
|
if street in "FLOP": self.hands['playersAtStreet1'] = len(actors.keys())
|
||||||
|
elif street in "TURN": self.hands['playersAtStreet2'] = len(actors.keys())
|
||||||
|
elif street in "RIVER": self.hands['playersAtStreet3'] = len(actors.keys())
|
||||||
|
elif hand.gametype['base'] in ("stud"):
|
||||||
|
if street in "FOURTH": self.hands['playersAtStreet1'] = len(actors.keys())
|
||||||
|
elif street in "FIFTH": self.hands['playersAtStreet2'] = len(actors.keys())
|
||||||
|
elif street in "SIXTH": self.hands['playersAtStreet3'] = len(actors.keys())
|
||||||
|
elif street in "SEVENTH": self.hands['playersAtStreet4'] = len(actors.keys())
|
||||||
|
elif hand.gametype['base'] in ("draw"):
|
||||||
|
if street in "DRAWONE": self.hands['playersAtStreet1'] = len(actors.keys())
|
||||||
|
elif street in "DRAWTWO": self.hands['playersAtStreet2'] = len(actors.keys())
|
||||||
|
elif street in "DRAWTHREE": self.hands['playersAtStreet3'] = len(actors.keys())
|
||||||
|
|
||||||
|
#Need playersAtShowdown
|
||||||
|
|
||||||
|
|
||||||
|
def streetXRaises(self, hand):
|
||||||
|
# self.actions[street] is a list of all actions in a tuple, contining the action as the second element
|
||||||
|
# [ (player, action, ....), (player2, action, ...) ]
|
||||||
|
# No idea what this value is actually supposed to be
|
||||||
|
# In theory its "num small bets paid to see flop/street4, including blind" which makes sense for limit. Not so useful for nl
|
||||||
|
|
||||||
|
|
||||||
def aggr(self, hand, i):
|
def aggr(self, hand, i):
|
||||||
aggrers = set()
|
aggrers = set()
|
||||||
for act in hand.actions[hand.actionStreets[i]]:
|
for act in hand.actions[hand.actionStreets[i]]:
|
||||||
|
|
|
@ -23,6 +23,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
from time import *
|
from time import *
|
||||||
|
import gobject
|
||||||
#import pokereval
|
#import pokereval
|
||||||
|
|
||||||
import Configuration
|
import Configuration
|
||||||
|
@ -228,7 +229,16 @@ class Filters(threading.Thread):
|
||||||
pname.set_width_chars(20)
|
pname.set_width_chars(20)
|
||||||
hbox.pack_start(pname, False, True, 0)
|
hbox.pack_start(pname, False, True, 0)
|
||||||
pname.connect("changed", self.__set_hero_name, site)
|
pname.connect("changed", self.__set_hero_name, site)
|
||||||
#TODO: Look at GtkCompletion - to fill out usernames
|
|
||||||
|
# Added EntryCompletion but maybe comboBoxEntry is more flexible? (e.g. multiple choices)
|
||||||
|
completion = gtk.EntryCompletion()
|
||||||
|
pname.set_completion(completion)
|
||||||
|
liststore = gtk.ListStore(gobject.TYPE_STRING)
|
||||||
|
completion.set_model(liststore)
|
||||||
|
completion.set_text_column(0)
|
||||||
|
names = self.db.get_player_names(self.conf) # (config=self.conf, site_id=None, like_player_name="%")
|
||||||
|
for n in names:
|
||||||
|
liststore.append(n)
|
||||||
|
|
||||||
self.__set_hero_name(pname, site)
|
self.__set_hero_name(pname, site)
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
|
|
||||||
<import callFpdbHud = "True" interval = "10" fastStoreHudCache="False" hhArchiveBase="~/.fpdb/HandHistories/" saveActions="True"></import>
|
<import callFpdbHud = "True" interval = "10" fastStoreHudCache="False" hhArchiveBase="~/.fpdb/HandHistories/" saveActions="True"></import>
|
||||||
|
|
||||||
|
<hud_ui label="FPDB Menu - Right-click
|
||||||
|
Left-Drag to Move" />
|
||||||
|
|
||||||
<supported_sites>
|
<supported_sites>
|
||||||
|
|
||||||
<site enabled="True"
|
<site enabled="True"
|
||||||
|
|
|
@ -194,64 +194,32 @@ dealt whether they were seen in a 'dealt to' line
|
||||||
""" Function to insert Hand into database
|
""" Function to insert Hand into database
|
||||||
Should not commit, and do minimal selects. Callers may want to cache commits
|
Should not commit, and do minimal selects. Callers may want to cache commits
|
||||||
db: a connected fpdb_db object"""
|
db: a connected fpdb_db object"""
|
||||||
# TODO:
|
|
||||||
|
#####
|
||||||
|
# Players, Gametypes, TourneyTypes are all shared functions that are needed for additional tables
|
||||||
|
# These functions are intended for prep insert eventually
|
||||||
|
#####
|
||||||
# Players - base playerid and siteid tuple
|
# Players - base playerid and siteid tuple
|
||||||
sqlids = db.getSqlPlayerIDs([p[1] for p in self.players], self.siteId)
|
sqlids = db.getSqlPlayerIDs([p[1] for p in self.players], self.siteId)
|
||||||
|
|
||||||
#Gametypes
|
#Gametypes
|
||||||
gtid = db.getGameTypeId(self.siteId, self.gametype)
|
gtid = db.getGameTypeId(self.siteId, self.gametype)
|
||||||
|
|
||||||
|
self.stats.assembleHands(self)
|
||||||
|
|
||||||
|
#####
|
||||||
|
# End prep functions
|
||||||
|
#####
|
||||||
|
|
||||||
# HudCache data to come from DerivedStats class
|
# HudCache data to come from DerivedStats class
|
||||||
# HandsActions - all actions for all players for all streets - self.actions
|
# HandsActions - all actions for all players for all streets - self.actions
|
||||||
|
|
||||||
# Hands - Summary information of hand indexed by handId - gameinfo
|
# Hands - Summary information of hand indexed by handId - gameinfo
|
||||||
#This should be moved to prepInsert
|
hh = self.stats.getHands()
|
||||||
hh = {}
|
|
||||||
hh['siteHandNo'] = self.handid
|
|
||||||
hh['handStart'] = self.starttime
|
|
||||||
hh['gameTypeId'] = gtid
|
hh['gameTypeId'] = gtid
|
||||||
# seats TINYINT NOT NULL,
|
# seats TINYINT NOT NULL,
|
||||||
hh['tableName'] = self.tablename
|
|
||||||
hh['maxSeats'] = self.maxseats
|
|
||||||
hh['seats'] = len(sqlids)
|
hh['seats'] = len(sqlids)
|
||||||
# Flop turn and river may all be empty - add (likely) too many elements and trim with range
|
|
||||||
boardcards = self.board['FLOP'] + self.board['TURN'] + self.board['RIVER'] + [u'0x', u'0x', u'0x', u'0x', u'0x']
|
|
||||||
cards = [Card.encodeCard(c) for c in boardcards[0:5]]
|
|
||||||
hh['boardcard1'] = cards[0]
|
|
||||||
hh['boardcard2'] = cards[1]
|
|
||||||
hh['boardcard3'] = cards[2]
|
|
||||||
hh['boardcard4'] = cards[3]
|
|
||||||
hh['boardcard5'] = cards[4]
|
|
||||||
|
|
||||||
# texture smallint,
|
|
||||||
# playersVpi SMALLINT NOT NULL, /* num of players vpi */
|
|
||||||
# Needs to be recorded
|
|
||||||
# playersAtStreet1 SMALLINT NOT NULL, /* num of players seeing flop/street4 */
|
|
||||||
# Needs to be recorded
|
|
||||||
# playersAtStreet2 SMALLINT NOT NULL,
|
|
||||||
# Needs to be recorded
|
|
||||||
# playersAtStreet3 SMALLINT NOT NULL,
|
|
||||||
# Needs to be recorded
|
|
||||||
# playersAtStreet4 SMALLINT NOT NULL,
|
|
||||||
# Needs to be recorded
|
|
||||||
# playersAtShowdown SMALLINT NOT NULL,
|
|
||||||
# Needs to be recorded
|
|
||||||
# street0Raises TINYINT NOT NULL, /* num small bets paid to see flop/street4, including blind */
|
|
||||||
# Needs to be recorded
|
|
||||||
# street1Raises TINYINT NOT NULL, /* num small bets paid to see turn/street5 */
|
|
||||||
# Needs to be recorded
|
|
||||||
# street2Raises TINYINT NOT NULL, /* num big bets paid to see river/street6 */
|
|
||||||
# Needs to be recorded
|
|
||||||
# street3Raises TINYINT NOT NULL, /* num big bets paid to see sd/street7 */
|
|
||||||
# Needs to be recorded
|
|
||||||
# street4Raises TINYINT NOT NULL, /* num big bets paid to see showdown */
|
|
||||||
# Needs to be recorded
|
|
||||||
|
|
||||||
#print "DEBUG: self.getStreetTotals = (%s, %s, %s, %s, %s)" % self.getStreetTotals()
|
|
||||||
#FIXME: Pot size still in decimal, needs to be converted to cents
|
|
||||||
(hh['street1Pot'], hh['street2Pot'], hh['street3Pot'], hh['street4Pot'], hh['showdownPot']) = self.getStreetTotals()
|
|
||||||
|
|
||||||
# comment TEXT,
|
|
||||||
# commentTs DATETIME
|
|
||||||
#print hh
|
#print hh
|
||||||
handid = db.storeHand(hh)
|
handid = db.storeHand(hh)
|
||||||
# HandsPlayers - ? ... Do we fix winnings?
|
# HandsPlayers - ? ... Do we fix winnings?
|
||||||
|
|
168
pyfpdb/Hud.py
168
pyfpdb/Hud.py
|
@ -82,6 +82,7 @@ class Hud:
|
||||||
|
|
||||||
(font, font_size) = config.get_default_font(self.table.site)
|
(font, font_size) = config.get_default_font(self.table.site)
|
||||||
self.colors = config.get_default_colors(self.table.site)
|
self.colors = config.get_default_colors(self.table.site)
|
||||||
|
self.hud_ui = config.get_hud_ui_parameters()
|
||||||
|
|
||||||
self.backgroundcolor = gtk.gdk.color_parse(self.colors['hudbgcolor'])
|
self.backgroundcolor = gtk.gdk.color_parse(self.colors['hudbgcolor'])
|
||||||
self.foregroundcolor = gtk.gdk.color_parse(self.colors['hudfgcolor'])
|
self.foregroundcolor = gtk.gdk.color_parse(self.colors['hudfgcolor'])
|
||||||
|
@ -116,7 +117,7 @@ class Hud:
|
||||||
win.set_opacity(self.colors["hudopacity"])
|
win.set_opacity(self.colors["hudopacity"])
|
||||||
|
|
||||||
eventbox = gtk.EventBox()
|
eventbox = gtk.EventBox()
|
||||||
label = gtk.Label("FPDB Menu - Right click\nLeft-Drag to Move")
|
label = gtk.Label(self.hud_ui['label'])
|
||||||
|
|
||||||
win.add(eventbox)
|
win.add(eventbox)
|
||||||
eventbox.add(label)
|
eventbox.add(label)
|
||||||
|
@ -146,14 +147,65 @@ class Hud:
|
||||||
menu.append(repositem)
|
menu.append(repositem)
|
||||||
repositem.connect("activate", self.reposition_windows)
|
repositem.connect("activate", self.reposition_windows)
|
||||||
|
|
||||||
aggitem = gtk.MenuItem('Show Stats')
|
aggitem = gtk.MenuItem('Show Player Stats')
|
||||||
menu.append(aggitem)
|
menu.append(aggitem)
|
||||||
self.aggMenu = gtk.Menu()
|
self.aggMenu = gtk.Menu()
|
||||||
aggitem.set_submenu(self.aggMenu)
|
aggitem.set_submenu(self.aggMenu)
|
||||||
# set agg_bb_mult to 1 to stop aggregation
|
# set agg_bb_mult to 1 to stop aggregation
|
||||||
item = gtk.CheckMenuItem('For This Blind Level Only')
|
item = gtk.CheckMenuItem('For This Blind Level Only')
|
||||||
self.aggMenu.append(item)
|
self.aggMenu.append(item)
|
||||||
item.connect("activate", self.set_aggregation, 1)
|
item.connect("activate", self.set_aggregation, ('P',1))
|
||||||
|
setattr(self, 'h_aggBBmultItem1', item)
|
||||||
|
#
|
||||||
|
item = gtk.MenuItem('For Multiple Blind Levels:')
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
#
|
||||||
|
item = gtk.CheckMenuItem(' 0.5 to 2.0 x Current Blinds')
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
item.connect("activate", self.set_aggregation, ('P',2))
|
||||||
|
setattr(self, 'h_aggBBmultItem2', item)
|
||||||
|
#
|
||||||
|
item = gtk.CheckMenuItem(' 0.33 to 3.0 x Current Blinds')
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
item.connect("activate", self.set_aggregation, ('P',3))
|
||||||
|
setattr(self, 'h_aggBBmultItem3', item)
|
||||||
|
#
|
||||||
|
item = gtk.CheckMenuItem(' 0.1 to 10 x Current Blinds')
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
item.connect("activate", self.set_aggregation, ('P',10))
|
||||||
|
setattr(self, 'h_aggBBmultItem10', item)
|
||||||
|
#
|
||||||
|
item = gtk.CheckMenuItem(' All Levels')
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
item.connect("activate", self.set_aggregation, ('P',10000))
|
||||||
|
setattr(self, 'h_aggBBmultItem10000', item)
|
||||||
|
#
|
||||||
|
item = gtk.MenuItem('Since:')
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
#
|
||||||
|
item = gtk.CheckMenuItem(' All Time')
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
item.connect("activate", self.set_hud_style, ('P','A'))
|
||||||
|
setattr(self, 'h_hudStyleOptionA', item)
|
||||||
|
#
|
||||||
|
item = gtk.CheckMenuItem(' Session')
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
item.connect("activate", self.set_hud_style, ('P','S'))
|
||||||
|
setattr(self, 'h_hudStyleOptionS', item)
|
||||||
|
#
|
||||||
|
item = gtk.CheckMenuItem(' %s Days' % (self.hud_params['h_hud_days']))
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
item.connect("activate", self.set_hud_style, ('P','T'))
|
||||||
|
setattr(self, 'h_hudStyleOptionT', item)
|
||||||
|
|
||||||
|
aggitem = gtk.MenuItem('Show Opponent Stats')
|
||||||
|
menu.append(aggitem)
|
||||||
|
self.aggMenu = gtk.Menu()
|
||||||
|
aggitem.set_submenu(self.aggMenu)
|
||||||
|
# set agg_bb_mult to 1 to stop aggregation
|
||||||
|
item = gtk.CheckMenuItem('For This Blind Level Only')
|
||||||
|
self.aggMenu.append(item)
|
||||||
|
item.connect("activate", self.set_aggregation, ('O',1))
|
||||||
setattr(self, 'aggBBmultItem1', item)
|
setattr(self, 'aggBBmultItem1', item)
|
||||||
#
|
#
|
||||||
item = gtk.MenuItem('For Multiple Blind Levels:')
|
item = gtk.MenuItem('For Multiple Blind Levels:')
|
||||||
|
@ -161,44 +213,54 @@ class Hud:
|
||||||
#
|
#
|
||||||
item = gtk.CheckMenuItem(' 0.5 to 2.0 x Current Blinds')
|
item = gtk.CheckMenuItem(' 0.5 to 2.0 x Current Blinds')
|
||||||
self.aggMenu.append(item)
|
self.aggMenu.append(item)
|
||||||
item.connect("activate", self.set_aggregation, 2)
|
item.connect("activate", self.set_aggregation, ('O',2))
|
||||||
setattr(self, 'aggBBmultItem2', item)
|
setattr(self, 'aggBBmultItem2', item)
|
||||||
#
|
#
|
||||||
item = gtk.CheckMenuItem(' 0.33 to 3.0 x Current Blinds')
|
item = gtk.CheckMenuItem(' 0.33 to 3.0 x Current Blinds')
|
||||||
self.aggMenu.append(item)
|
self.aggMenu.append(item)
|
||||||
item.connect("activate", self.set_aggregation, 3)
|
item.connect("activate", self.set_aggregation, ('O',3))
|
||||||
setattr(self, 'aggBBmultItem3', item)
|
setattr(self, 'aggBBmultItem3', item)
|
||||||
#
|
#
|
||||||
item = gtk.CheckMenuItem(' 0.1 to 10 x Current Blinds')
|
item = gtk.CheckMenuItem(' 0.1 to 10 x Current Blinds')
|
||||||
self.aggMenu.append(item)
|
self.aggMenu.append(item)
|
||||||
item.connect("activate", self.set_aggregation, 10)
|
item.connect("activate", self.set_aggregation, ('O',10))
|
||||||
setattr(self, 'aggBBmultItem10', item)
|
setattr(self, 'aggBBmultItem10', item)
|
||||||
#
|
#
|
||||||
item = gtk.CheckMenuItem(' All Levels')
|
item = gtk.CheckMenuItem(' All Levels')
|
||||||
self.aggMenu.append(item)
|
self.aggMenu.append(item)
|
||||||
item.connect("activate", self.set_aggregation, 10000)
|
item.connect("activate", self.set_aggregation, ('O',10000))
|
||||||
setattr(self, 'aggBBmultItem10000', item)
|
setattr(self, 'aggBBmultItem10000', item)
|
||||||
#
|
#
|
||||||
item = gtk.MenuItem('For Hero:')
|
item = gtk.MenuItem('Since:')
|
||||||
self.aggMenu.append(item)
|
self.aggMenu.append(item)
|
||||||
setattr(self, 'showStatsMenuItem7', item)
|
|
||||||
#
|
#
|
||||||
item = gtk.CheckMenuItem(' All Time')
|
item = gtk.CheckMenuItem(' All Time')
|
||||||
self.aggMenu.append(item)
|
self.aggMenu.append(item)
|
||||||
item.connect("activate", self.set_hud_style, 'HA')
|
item.connect("activate", self.set_hud_style, ('O','A'))
|
||||||
setattr(self, 'HAStyleOption', item)
|
setattr(self, 'hudStyleOptionA', item)
|
||||||
#
|
#
|
||||||
item = gtk.CheckMenuItem(' Session')
|
item = gtk.CheckMenuItem(' Session')
|
||||||
self.aggMenu.append(item)
|
self.aggMenu.append(item)
|
||||||
item.connect("activate", self.set_hud_style, 'HS')
|
item.connect("activate", self.set_hud_style, ('O','S'))
|
||||||
setattr(self, 'HSStyleOption', item)
|
setattr(self, 'hudStyleOptionS', item)
|
||||||
#
|
#
|
||||||
item = gtk.CheckMenuItem(' %s Days' % (self.hud_params['h_hud_days']))
|
item = gtk.CheckMenuItem(' %s Days' % (self.hud_params['h_hud_days']))
|
||||||
self.aggMenu.append(item)
|
self.aggMenu.append(item)
|
||||||
item.connect("activate", self.set_hud_style, 'HT')
|
item.connect("activate", self.set_hud_style, ('O','T'))
|
||||||
setattr(self, 'HTStyleOption', item)
|
setattr(self, 'hudStyleOptionT', item)
|
||||||
|
|
||||||
# set active on current options:
|
# set active on current options:
|
||||||
|
if self.hud_params['h_agg_bb_mult'] == 1:
|
||||||
|
getattr(self, 'h_aggBBmultItem1').set_active(True)
|
||||||
|
elif self.hud_params['h_agg_bb_mult'] == 2:
|
||||||
|
getattr(self, 'h_aggBBmultItem2').set_active(True)
|
||||||
|
elif self.hud_params['h_agg_bb_mult'] == 3:
|
||||||
|
getattr(self, 'h_aggBBmultItem3').set_active(True)
|
||||||
|
elif self.hud_params['h_agg_bb_mult'] == 10:
|
||||||
|
getattr(self, 'h_aggBBmultItem10').set_active(True)
|
||||||
|
elif self.hud_params['h_agg_bb_mult'] > 9000:
|
||||||
|
getattr(self, 'h_aggBBmultItemAll').set_active(True)
|
||||||
|
#
|
||||||
if self.hud_params['agg_bb_mult'] == 1:
|
if self.hud_params['agg_bb_mult'] == 1:
|
||||||
getattr(self, 'aggBBmultItem1').set_active(True)
|
getattr(self, 'aggBBmultItem1').set_active(True)
|
||||||
elif self.hud_params['agg_bb_mult'] == 2:
|
elif self.hud_params['agg_bb_mult'] == 2:
|
||||||
|
@ -209,12 +271,20 @@ class Hud:
|
||||||
getattr(self, 'aggBBmultItem10').set_active(True)
|
getattr(self, 'aggBBmultItem10').set_active(True)
|
||||||
elif self.hud_params['agg_bb_mult'] > 9000:
|
elif self.hud_params['agg_bb_mult'] > 9000:
|
||||||
getattr(self, 'aggBBmultItemAll').set_active(True)
|
getattr(self, 'aggBBmultItemAll').set_active(True)
|
||||||
|
#
|
||||||
if self.hud_params['h_hud_style'] == 'A':
|
if self.hud_params['h_hud_style'] == 'A':
|
||||||
getattr(self, 'HAStyleOption').set_active(True)
|
getattr(self, 'h_hudStyleOptionA').set_active(True)
|
||||||
elif self.hud_params['h_hud_style'] == 'S':
|
elif self.hud_params['h_hud_style'] == 'S':
|
||||||
getattr(self, 'HSStyleOption').set_active(True)
|
getattr(self, 'h_hudStyleOptionS').set_active(True)
|
||||||
elif self.hud_params['h_hud_style'] == 'T':
|
elif self.hud_params['h_hud_style'] == 'T':
|
||||||
getattr(self, 'HTStyleOption').set_active(True)
|
getattr(self, 'h_hudStyleOptionT').set_active(True)
|
||||||
|
#
|
||||||
|
if self.hud_params['hud_style'] == 'A':
|
||||||
|
getattr(self, 'hudStyleOptionA').set_active(True)
|
||||||
|
elif self.hud_params['hud_style'] == 'S':
|
||||||
|
getattr(self, 'hudStyleOptionS').set_active(True)
|
||||||
|
elif self.hud_params['hud_style'] == 'T':
|
||||||
|
getattr(self, 'hudStyleOptionT').set_active(True)
|
||||||
|
|
||||||
eventbox.connect_object("button-press-event", self.on_button_press, menu)
|
eventbox.connect_object("button-press-event", self.on_button_press, menu)
|
||||||
|
|
||||||
|
@ -254,41 +324,53 @@ class Hud:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def set_aggregation(self, widget, val):
|
def set_aggregation(self, widget, val):
|
||||||
# try setting these to true all the time, and set the multiplier to 1 to turn agg off:
|
(player_opp, num) = val
|
||||||
self.hud_params['aggregate_ring'] = True
|
if player_opp == 'P':
|
||||||
self.hud_params['aggregate_tour'] = True
|
# set these true all the time, set the multiplier to 1 to turn agg off:
|
||||||
self.hud_params['h_aggregate_ring'] = True
|
self.hud_params['h_aggregate_ring'] = True
|
||||||
self.hud_params['h_aggregate_tour'] = True
|
self.hud_params['h_aggregate_tour'] = True
|
||||||
|
|
||||||
if self.hud_params['agg_bb_mult'] != val \
|
if self.hud_params['h_agg_bb_mult'] != num \
|
||||||
and getattr(self, 'aggBBmultItem'+str(val)).get_active():
|
and getattr(self, 'h_aggBBmultItem'+str(num)).get_active():
|
||||||
print 'set_aggregation', val
|
print 'set_player_aggregation', num
|
||||||
self.hud_params['agg_bb_mult'] = val
|
self.hud_params['h_agg_bb_mult'] = num
|
||||||
self.hud_params['h_agg_bb_mult'] = val
|
for mult in ('1', '2', '3', '10', '10000'):
|
||||||
for mult in ('1', '2', '3', '10', '10000'):
|
if mult != str(num):
|
||||||
if mult != str(val):
|
getattr(self, 'h_aggBBmultItem'+mult).set_active(False)
|
||||||
getattr(self, 'aggBBmultItem'+mult).set_active(False)
|
else:
|
||||||
|
self.hud_params['aggregate_ring'] = True
|
||||||
|
self.hud_params['aggregate_tour'] = True
|
||||||
|
|
||||||
|
if self.hud_params['agg_bb_mult'] != num \
|
||||||
|
and getattr(self, 'aggBBmultItem'+str(num)).get_active():
|
||||||
|
print 'set_opponent_aggregation', num
|
||||||
|
self.hud_params['agg_bb_mult'] = num
|
||||||
|
for mult in ('1', '2', '3', '10', '10000'):
|
||||||
|
if mult != str(num):
|
||||||
|
getattr(self, 'aggBBmultItem'+mult).set_active(False)
|
||||||
|
|
||||||
def set_hud_style(self, widget, val):
|
def set_hud_style(self, widget, val):
|
||||||
# try setting these to true all the time, and set the multiplier to 1 to turn agg off:
|
(player_opp, style) = val
|
||||||
if val[0] == 'H':
|
if player_opp == 'P':
|
||||||
param = 'h_hud_style'
|
param = 'h_hud_style'
|
||||||
|
prefix = 'h_'
|
||||||
else:
|
else:
|
||||||
param = 'hud_style'
|
param = 'hud_style'
|
||||||
|
prefix = ''
|
||||||
|
|
||||||
if val[1] == 'A' and getattr(self, 'HAStyleOption').get_active():
|
if style == 'A' and getattr(self, prefix+'hudStyleOptionA').get_active():
|
||||||
self.hud_params[param] = 'A'
|
self.hud_params[param] = 'A'
|
||||||
getattr(self, 'HSStyleOption').set_active(False)
|
getattr(self, prefix+'hudStyleOptionS').set_active(False)
|
||||||
getattr(self, 'HTStyleOption').set_active(False)
|
getattr(self, prefix+'hudStyleOptionT').set_active(False)
|
||||||
elif val[1] == 'S' and getattr(self, 'HSStyleOption').get_active():
|
elif style == 'S' and getattr(self, prefix+'hudStyleOptionS').get_active():
|
||||||
self.hud_params[param] = 'S'
|
self.hud_params[param] = 'S'
|
||||||
getattr(self, 'HAStyleOption').set_active(False)
|
getattr(self, prefix+'hudStyleOptionA').set_active(False)
|
||||||
getattr(self, 'HTStyleOption').set_active(False)
|
getattr(self, prefix+'hudStyleOptionT').set_active(False)
|
||||||
elif val[1] == 'T' and self.HTStyleOption.get_active():
|
elif style == 'T' and getattr(self, prefix+'hudStyleOptionT').get_active():
|
||||||
self.hud_params[param] = 'T'
|
self.hud_params[param] = 'T'
|
||||||
getattr(self, 'HAStyleOption').set_active(False)
|
getattr(self, prefix+'hudStyleOptionA').set_active(False)
|
||||||
getattr(self, 'HSStyleOption').set_active(False)
|
getattr(self, prefix+'hudStyleOptionS').set_active(False)
|
||||||
print "setting self.hud_params[%s] = %s" % (param, val[1])
|
print "setting self.hud_params[%s] = %s" % (param, style)
|
||||||
|
|
||||||
def update_table_position(self):
|
def update_table_position(self):
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
|
|
|
@ -1235,6 +1235,13 @@ class Sql:
|
||||||
and Players.siteId = Sites.id
|
and Players.siteId = Sites.id
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
self.query['get_player_names'] = """
|
||||||
|
select p.name
|
||||||
|
from Players p
|
||||||
|
where lower(p.name) like lower(%s)
|
||||||
|
and (p.siteId = %s or %s = -1)
|
||||||
|
"""
|
||||||
|
|
||||||
self.query['getSiteId'] = """SELECT id from Sites where name = %s"""
|
self.query['getSiteId'] = """SELECT id from Sites where name = %s"""
|
||||||
|
|
||||||
self.query['get_stats_from_hand'] = """
|
self.query['get_stats_from_hand'] = """
|
||||||
|
|
7
pyfpdb/fpdb.py
Executable file → Normal file
7
pyfpdb/fpdb.py
Executable file → Normal file
|
@ -458,7 +458,12 @@ class fpdb:
|
||||||
except Exceptions.FpdbMySQLFailedError:
|
except Exceptions.FpdbMySQLFailedError:
|
||||||
self.warning_box("Unable to connect to MySQL! Is the MySQL server running?!", "FPDB ERROR")
|
self.warning_box("Unable to connect to MySQL! Is the MySQL server running?!", "FPDB ERROR")
|
||||||
exit()
|
exit()
|
||||||
|
except FpdbError:
|
||||||
|
print "Failed to connect to %s database with username %s." % (self.settings['db-server'], self.settings['db-user'])
|
||||||
|
sys.stderr.write("Failed to connect to %s database with username %s." % (self.settings['db-server'], self.settings['db-user']))
|
||||||
|
except:
|
||||||
|
print "Failed to connect to %s database with username %s." % (self.settings['db-server'], self.settings['db-user'])
|
||||||
|
sys.stderr.write("Failed to connect to %s database with username %s." % (self.settings['db-server'], self.settings['db-user']))
|
||||||
|
|
||||||
if self.db.fdb.wrongDbVersion:
|
if self.db.fdb.wrongDbVersion:
|
||||||
diaDbVersionWarning = gtk.Dialog(title="Strong Warning - Invalid database version", parent=None, flags=0, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
diaDbVersionWarning = gtk.Dialog(title="Strong Warning - Invalid database version", parent=None, flags=0, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user