Merge branch 'master' of git://git.assembla.com/fpdboz
Conflicts: pyfpdb/Configuration.py pyfpdb/HUD_main.py
This commit is contained in:
commit
76680e8511
|
@ -26,7 +26,7 @@ except:
|
|||
diaSQLLibMissing = gtk.Dialog(title="Fatal Error - SQL interface library missing", parent=None, flags=0, buttons=(gtk.STOCK_QUIT,gtk.RESPONSE_OK))
|
||||
|
||||
print "Please note that the CLI importer only works with MySQL, if you use PostgreSQL this error is expected."
|
||||
|
||||
|
||||
import fpdb_import
|
||||
import fpdb_db
|
||||
|
||||
|
@ -36,9 +36,9 @@ if __name__ == "__main__":
|
|||
parser.add_option("-c", "--handCount", default="0", type="int",
|
||||
help="Number of hands to import (default 0 means unlimited)")
|
||||
parser.add_option("-d", "--database", default="fpdb", help="The MySQL database to use (default fpdb)")
|
||||
parser.add_option("-e", "--errorFile", default="failed.txt",
|
||||
parser.add_option("-e", "--errorFile", default="failed.txt",
|
||||
help="File to store failed hands into. (default: failed.txt) Not implemented.")
|
||||
parser.add_option("-f", "--inputFile", "--file", "--inputfile", default="stdin",
|
||||
parser.add_option("-f", "--inputFile", "--file", "--inputfile", default="stdin",
|
||||
help="The file you want to import (remember to use quotes if necessary)")
|
||||
parser.add_option("-m", "--minPrint", "--status", default="50", type="int",
|
||||
help="How often to print a one-line status report (0 means never, default is 50)")
|
||||
|
@ -51,8 +51,8 @@ if __name__ == "__main__":
|
|||
parser.add_option("-x", "--failOnError", action="store_true",
|
||||
help="If this option is passed it quits when it encounters any error")
|
||||
|
||||
(options, sys.argv) = parser.parse_args()
|
||||
|
||||
(options, argv) = parser.parse_args()
|
||||
|
||||
settings={'callFpdbHud':False, 'db-backend':2}
|
||||
settings['db-host']=options.server
|
||||
settings['db-user']=options.user
|
||||
|
|
|
@ -55,7 +55,6 @@ def get_exec_path():
|
|||
if hasattr(sys, "frozen"): # compiled by py2exe
|
||||
return os.path.dirname(sys.executable)
|
||||
else:
|
||||
print "argv=", sys.argv
|
||||
pathname = os.path.dirname(sys.argv[0])
|
||||
return os.path.abspath(pathname)
|
||||
|
||||
|
@ -537,6 +536,9 @@ class Config:
|
|||
file = None
|
||||
return file
|
||||
|
||||
def get_doc(self):
|
||||
return self.doc
|
||||
|
||||
def get_site_node(self, site):
|
||||
for site_node in self.doc.getElementsByTagName("site"):
|
||||
if site_node.getAttribute("site_name") == site:
|
||||
|
@ -571,11 +573,9 @@ class Config:
|
|||
return location_node
|
||||
|
||||
def save(self, file = None):
|
||||
if file is not None:
|
||||
with open(file, 'w') as f:
|
||||
self.doc.writexml(f)
|
||||
else:
|
||||
shutil.move(self.file, self.file+".backup")
|
||||
if file is None:
|
||||
file = self.file
|
||||
shutil.move(file, file+".backup")
|
||||
with open(file, 'w') as f:
|
||||
self.doc.writexml(f)
|
||||
|
||||
|
@ -689,38 +689,50 @@ class Config:
|
|||
except:
|
||||
hui['label'] = default_text
|
||||
|
||||
try: hui['hud_style'] = self.ui.hud_style
|
||||
except: hui['hud_style'] = 'A' # default is show stats for All-time, also S(session) and T(ime)
|
||||
|
||||
try: hui['hud_days'] = int(self.ui.hud_days)
|
||||
except: hui['hud_days'] = 90
|
||||
|
||||
try: hui['aggregate_ring'] = self.ui.aggregate_ring
|
||||
except: hui['aggregate_ring'] = False
|
||||
|
||||
try: hui['aggregate_tour'] = self.ui.aggregate_tour
|
||||
except: hui['aggregate_tour'] = True
|
||||
|
||||
try: hui['hud_style'] = self.ui.hud_style
|
||||
except: hui['hud_style'] = 'A'
|
||||
|
||||
try: hui['hud_days'] = int(self.ui.hud_days)
|
||||
except: hui['hud_days'] = 90
|
||||
|
||||
try: hui['agg_bb_mult'] = self.ui.agg_bb_mult
|
||||
except: hui['agg_bb_mult'] = 1
|
||||
|
||||
try: hui['seats_style'] = self.ui.seats_style
|
||||
except: hui['seats_style'] = 'C' # A / C / E, use A(ll) / C(ustom) / E(xact) seat numbers
|
||||
|
||||
try: hui['seats_cust_nums'] = self.ui.seats_cust_nums
|
||||
except: hui['seats_cust_nums'] = ['n/a', 'n/a', (2,2), (3,4), (3,5), (4,6), (5,7), (6,8), (7,9), (8,10), (8,10)]
|
||||
|
||||
# Hero specific
|
||||
|
||||
try: hui['h_aggregate_ring'] = self.ui.h_aggregate_ring
|
||||
except: hui['h_aggregate_ring'] = False
|
||||
|
||||
try: hui['h_aggregate_tour'] = self.ui.h_aggregate_tour
|
||||
except: hui['h_aggregate_tour'] = True
|
||||
|
||||
try: hui['h_hud_style'] = self.ui.h_hud_style
|
||||
except: hui['h_hud_style'] = 'S'
|
||||
|
||||
try: hui['h_hud_days'] = int(self.ui.h_hud_days)
|
||||
except: hui['h_hud_days'] = 30
|
||||
|
||||
try: hui['h_aggregate_ring'] = self.ui.h_aggregate_ring
|
||||
except: hui['h_aggregate_ring'] = False
|
||||
|
||||
try: hui['h_aggregate_tour'] = self.ui.h_aggregate_tour
|
||||
except: hui['h_aggregate_tour'] = True
|
||||
|
||||
try: hui['h_agg_bb_mult'] = self.ui.h_agg_bb_mult
|
||||
except: hui['h_agg_bb_mult'] = 1
|
||||
|
||||
try: hui['h_seats_style'] = self.ui.h_seats_style
|
||||
except: hui['h_seats_style'] = 'E' # A / C / E, use A(ll) / C(ustom) / E(xact) seat numbers
|
||||
|
||||
try: hui['h_seats_cust_nums'] = self.ui.h_seats_cust_nums
|
||||
except: hui['h_seats_cust_nums'] = ['n/a', 'n/a', (2,2), (3,4), (3,5), (4,6), (5,7), (6,8), (7,9), (8,10), (8,10)]
|
||||
|
||||
return hui
|
||||
|
||||
|
||||
|
@ -965,8 +977,14 @@ if __name__== "__main__":
|
|||
for game in c.get_supported_games():
|
||||
print c.get_game_parameters(game)
|
||||
|
||||
for hud_param, value in c.get_hud_ui_parameters().iteritems():
|
||||
print "hud param %s = %s" % (hud_param, value)
|
||||
|
||||
print "start up path = ", c.execution_path("")
|
||||
|
||||
from xml.dom.ext import PrettyPrint
|
||||
for site_node in c.doc.getElementsByTagName("site"):
|
||||
PrettyPrint(site_node, stream=sys.stdout, encoding="utf-8")
|
||||
try:
|
||||
from xml.dom.ext import PrettyPrint
|
||||
for site_node in c.doc.getElementsByTagName("site"):
|
||||
PrettyPrint(site_node, stream=sys.stdout, encoding="utf-8")
|
||||
except:
|
||||
print "xml.dom.ext needs PyXML to be installed!"
|
||||
|
|
|
@ -433,17 +433,50 @@ class Database:
|
|||
|
||||
def get_stats_from_hand( self, hand, type # type is "ring" or "tour"
|
||||
, hud_params = {'hud_style':'A', 'agg_bb_mult':1000
|
||||
,'h_hud_style':'S', 'h_agg_bb_mult':1000}
|
||||
,'seats_style':'A', 'seats_cust_nums':['n/a', 'n/a', (2,2), (3,4), (3,5), (4,6), (5,7), (6,8), (7,9), (8,10), (8,10)]
|
||||
,'h_hud_style':'S', 'h_agg_bb_mult':1000
|
||||
,'h_seats_style':'A', 'h_seats_cust_nums':['n/a', 'n/a', (2,2), (3,4), (3,5), (4,6), (5,7), (6,8), (7,9), (8,10), (8,10)]
|
||||
}
|
||||
, hero_id = -1
|
||||
, num_seats = 6
|
||||
):
|
||||
hud_style = hud_params['hud_style']
|
||||
agg_bb_mult = hud_params['agg_bb_mult']
|
||||
seats_style = hud_params['seats_style']
|
||||
seats_cust_nums = hud_params['seats_cust_nums']
|
||||
h_hud_style = hud_params['h_hud_style']
|
||||
h_agg_bb_mult = hud_params['h_agg_bb_mult']
|
||||
h_seats_style = hud_params['h_seats_style']
|
||||
h_seats_cust_nums = hud_params['h_seats_cust_nums']
|
||||
|
||||
stat_dict = {}
|
||||
|
||||
if seats_style == 'A':
|
||||
seats_min, seats_max = 0, 10
|
||||
elif seats_style == 'C':
|
||||
seats_min, seats_max = seats_cust_nums[num_seats][0], seats_cust_nums[num_seats][1]
|
||||
elif seats_style == 'E':
|
||||
seats_min, seats_max = num_seats, num_seats
|
||||
else:
|
||||
seats_min, seats_max = 0, 10
|
||||
print "bad seats_style value:", seats_style
|
||||
|
||||
if h_seats_style == 'A':
|
||||
h_seats_min, h_seats_max = 0, 10
|
||||
elif h_seats_style == 'C':
|
||||
h_seats_min, h_seats_max = h_seats_cust_nums[num_seats][0], h_seats_cust_nums[num_seats][1]
|
||||
elif h_seats_style == 'E':
|
||||
h_seats_min, h_seats_max = num_seats, num_seats
|
||||
else:
|
||||
h_seats_min, h_seats_max = 0, 10
|
||||
print "bad h_seats_style value:", h_seats_style
|
||||
print "opp seats style", seats_style, "hero seats style", h_seats_style
|
||||
print "opp seats:", seats_min, seats_max, " hero seats:", h_seats_min, h_seats_max
|
||||
|
||||
if hud_style == 'S' or h_hud_style == 'S':
|
||||
self.get_stats_from_hand_session(hand, stat_dict, hero_id, hud_style, h_hud_style)
|
||||
self.get_stats_from_hand_session(hand, stat_dict, hero_id
|
||||
,hud_style, seats_min, seats_max
|
||||
,h_hud_style, h_seats_min, h_seats_max)
|
||||
|
||||
if hud_style == 'S' and h_hud_style == 'S':
|
||||
return stat_dict
|
||||
|
@ -475,7 +508,9 @@ class Database:
|
|||
# h_stylekey = date_nhands_ago needs array by player here ...
|
||||
|
||||
query = 'get_stats_from_hand_aggregated'
|
||||
subs = (hand, hero_id, stylekey, agg_bb_mult, agg_bb_mult, hero_id, h_stylekey, h_agg_bb_mult, h_agg_bb_mult)
|
||||
subs = (hand
|
||||
,hero_id, stylekey, agg_bb_mult, agg_bb_mult, seats_min, seats_max # hero params
|
||||
,hero_id, h_stylekey, h_agg_bb_mult, h_agg_bb_mult, h_seats_min, h_seats_max) # villain params
|
||||
|
||||
#print "get stats: hud style =", hud_style, "query =", query, "subs =", subs
|
||||
c = self.connection.cursor()
|
||||
|
@ -495,12 +530,15 @@ class Database:
|
|||
return stat_dict
|
||||
|
||||
# uses query on handsplayers instead of hudcache to get stats on just this session
|
||||
def get_stats_from_hand_session(self, hand, stat_dict, hero_id, hud_style, h_hud_style):
|
||||
def get_stats_from_hand_session(self, hand, stat_dict, hero_id
|
||||
,hud_style, seats_min, seats_max
|
||||
,h_hud_style, h_seats_min, h_seats_max):
|
||||
"""Get stats for just this session (currently defined as any play in the last 24 hours - to
|
||||
be improved at some point ...)
|
||||
h_hud_style and hud_style params indicate whether to get stats for hero and/or others
|
||||
- only fetch heros stats if h_hud_style == 'S',
|
||||
and only fetch others stats if hud_style == 'S'
|
||||
seats_min/max params give seats limits, only include stats if between these values
|
||||
"""
|
||||
|
||||
query = self.sql.query['get_stats_from_hand_session']
|
||||
|
@ -509,7 +547,8 @@ class Database:
|
|||
else:
|
||||
query = query.replace("<signed>", '')
|
||||
|
||||
subs = (self.hand_1day_ago, hand)
|
||||
subs = (self.hand_1day_ago, hand, hero_id, seats_min, seats_max
|
||||
, hero_id, h_seats_min, h_seats_max)
|
||||
c = self.get_cursor()
|
||||
|
||||
# now get the stats
|
||||
|
@ -524,6 +563,7 @@ class Database:
|
|||
# Loop through stats adding them to appropriate stat_dict:
|
||||
while row:
|
||||
playerid = row[0]
|
||||
seats = row[1]
|
||||
if (playerid == hero_id and h_hud_style == 'S') or (playerid != hero_id and hud_style == 'S'):
|
||||
for name, val in zip(colnames, row):
|
||||
if not playerid in stat_dict:
|
||||
|
@ -535,7 +575,7 @@ class Database:
|
|||
stat_dict[playerid][name.lower()] += val
|
||||
n += 1
|
||||
if n >= 10000: break # todo: don't think this is needed so set nice and high
|
||||
# for now - comment out or remove?
|
||||
# prevents infinite loop so leave for now - comment out or remove?
|
||||
row = c.fetchone()
|
||||
else:
|
||||
log.error("ERROR: query %s result does not have player_id as first column" % (query,))
|
||||
|
@ -1343,7 +1383,9 @@ class Database:
|
|||
|
||||
q = q.replace('%s', self.sql.query['placeholder'])
|
||||
|
||||
self.cursor.execute(q, (
|
||||
c = self.connection.cursor()
|
||||
|
||||
c.execute(q, (
|
||||
p['tableName'],
|
||||
p['gameTypeId'],
|
||||
p['siteHandNo'],
|
||||
|
@ -1374,7 +1416,7 @@ class Database:
|
|||
p['street4Pot'],
|
||||
p['showdownPot']
|
||||
))
|
||||
return self.get_last_insert_id(self.cursor)
|
||||
return self.get_last_insert_id(c)
|
||||
# def storeHand
|
||||
|
||||
def storeHandsPlayers(self, hid, pids, pdata):
|
||||
|
@ -1393,16 +1435,39 @@ class Database:
|
|||
pdata[p]['card6'],
|
||||
pdata[p]['card7'],
|
||||
pdata[p]['winnings'],
|
||||
pdata[p]['rake'],
|
||||
pdata[p]['totalProfit'],
|
||||
pdata[p]['street0VPI'],
|
||||
pdata[p]['street1Seen'],
|
||||
pdata[p]['street2Seen'],
|
||||
pdata[p]['street3Seen'],
|
||||
pdata[p]['street4Seen'],
|
||||
pdata[p]['sawShowdown'],
|
||||
pdata[p]['wonAtSD'],
|
||||
pdata[p]['street0Aggr'],
|
||||
pdata[p]['street1Aggr'],
|
||||
pdata[p]['street2Aggr'],
|
||||
pdata[p]['street3Aggr'],
|
||||
pdata[p]['street4Aggr']
|
||||
pdata[p]['street4Aggr'],
|
||||
pdata[p]['street1CBChance'],
|
||||
pdata[p]['street2CBChance'],
|
||||
pdata[p]['street3CBChance'],
|
||||
pdata[p]['street4CBChance'],
|
||||
pdata[p]['street1CBDone'],
|
||||
pdata[p]['street2CBDone'],
|
||||
pdata[p]['street3CBDone'],
|
||||
pdata[p]['street4CBDone'],
|
||||
pdata[p]['wonWhenSeenStreet1'],
|
||||
pdata[p]['street0Calls'],
|
||||
pdata[p]['street1Calls'],
|
||||
pdata[p]['street2Calls'],
|
||||
pdata[p]['street3Calls'],
|
||||
pdata[p]['street4Calls'],
|
||||
pdata[p]['street0Bets'],
|
||||
pdata[p]['street1Bets'],
|
||||
pdata[p]['street2Bets'],
|
||||
pdata[p]['street3Bets'],
|
||||
pdata[p]['street4Bets'],
|
||||
) )
|
||||
|
||||
q = """INSERT INTO HandsPlayers (
|
||||
|
@ -1418,19 +1483,46 @@ class Database:
|
|||
card6,
|
||||
card7,
|
||||
winnings,
|
||||
rake,
|
||||
totalProfit,
|
||||
street0VPI,
|
||||
street1Seen,
|
||||
street2Seen,
|
||||
street3Seen,
|
||||
street4Seen,
|
||||
sawShowdown,
|
||||
wonAtSD,
|
||||
street0Aggr,
|
||||
street1Aggr,
|
||||
street2Aggr,
|
||||
street3Aggr,
|
||||
street4Aggr
|
||||
street4Aggr,
|
||||
street1CBChance,
|
||||
street2CBChance,
|
||||
street3CBChance,
|
||||
street4CBChance,
|
||||
street1CBDone,
|
||||
street2CBDone,
|
||||
street3CBDone,
|
||||
street4CBDone,
|
||||
wonWhenSeenStreet1,
|
||||
street0Calls,
|
||||
street1Calls,
|
||||
street2Calls,
|
||||
street3Calls,
|
||||
street4Calls,
|
||||
street0Bets,
|
||||
street1Bets,
|
||||
street2Bets,
|
||||
street3Bets,
|
||||
street4Bets
|
||||
)
|
||||
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, %s, %s,
|
||||
|
@ -1440,11 +1532,8 @@ class Database:
|
|||
# position,
|
||||
# tourneyTypeId,
|
||||
# startCards,
|
||||
# rake,
|
||||
# totalProfit,
|
||||
# street0_3BChance,
|
||||
# street0_3BDone,
|
||||
# sawShowdown,
|
||||
# otherRaisedStreet1,
|
||||
# otherRaisedStreet2,
|
||||
# otherRaisedStreet3,
|
||||
|
@ -1453,22 +1542,12 @@ class Database:
|
|||
# foldToOtherRaisedStreet2,
|
||||
# foldToOtherRaisedStreet3,
|
||||
# foldToOtherRaisedStreet4,
|
||||
# wonWhenSeenStreet1,
|
||||
# wonAtSD,
|
||||
# stealAttemptChance,
|
||||
# stealAttempted,
|
||||
# foldBbToStealChance,
|
||||
# foldedBbToSteal,
|
||||
# foldSbToStealChance,
|
||||
# foldedSbToSteal,
|
||||
# street1CBChance,
|
||||
# street1CBDone,
|
||||
# street2CBChance,
|
||||
# street2CBDone,
|
||||
# street3CBChance,
|
||||
# street3CBDone,
|
||||
# street4CBChance,
|
||||
# street4CBDone,
|
||||
# foldToStreet1CBChance,
|
||||
# foldToStreet1CBDone,
|
||||
# foldToStreet2CBChance,
|
||||
|
@ -1485,21 +1564,13 @@ class Database:
|
|||
# street3CheckCallRaiseDone,
|
||||
# street4CheckCallRaiseChance,
|
||||
# street4CheckCallRaiseDone,
|
||||
# street0Calls,
|
||||
# street1Calls,
|
||||
# street2Calls,
|
||||
# street3Calls,
|
||||
# street4Calls,
|
||||
# street0Bets,
|
||||
# street1Bets,
|
||||
# street2Bets,
|
||||
# street3Bets,
|
||||
# street4Bets
|
||||
|
||||
q = q.replace('%s', self.sql.query['placeholder'])
|
||||
|
||||
#print "DEBUG: inserts: %s" %inserts
|
||||
self.cursor.executemany(q, inserts)
|
||||
#print "DEBUG: q: %s" % q
|
||||
c = self.connection.cursor()
|
||||
c.executemany(q, inserts)
|
||||
|
||||
def storeHudCacheNew(self, gid, pid, hc):
|
||||
q = """INSERT INTO HudCache (
|
||||
|
@ -1641,6 +1712,15 @@ class Database:
|
|||
# street4CheckCallRaiseChance,
|
||||
# street4CheckCallRaiseDone)
|
||||
|
||||
def isDuplicate(self, gametypeID, siteHandNo):
|
||||
dup = False
|
||||
c = self.get_cursor()
|
||||
c.execute(self.sql.query['isAlreadyInDB'], (gametypeID, siteHandNo))
|
||||
result = c.fetchall()
|
||||
if len(result) > 0:
|
||||
dup = True
|
||||
return dup
|
||||
|
||||
def getGameTypeId(self, siteid, game):
|
||||
c = self.get_cursor()
|
||||
#FIXME: Fixed for NL at the moment
|
||||
|
@ -1680,6 +1760,13 @@ class Database:
|
|||
q = "SELECT name, id FROM Players WHERE siteid=%s and name=%s"
|
||||
q = q.replace('%s', self.sql.query['placeholder'])
|
||||
|
||||
#NOTE/FIXME?: MySQL has ON DUPLICATE KEY UPDATE
|
||||
#Usage:
|
||||
# INSERT INTO `tags` (`tag`, `count`)
|
||||
# VALUES ($tag, 1)
|
||||
# ON DUPLICATE KEY UPDATE `count`=`count`+1;
|
||||
|
||||
|
||||
#print "DEBUG: name: %s site: %s" %(name, site_id)
|
||||
|
||||
c.execute (q, (site_id, name))
|
||||
|
@ -2699,7 +2786,9 @@ if __name__=="__main__":
|
|||
# db_connection = Database(c, 'PTrackSv2', 'razz') # mysql razz
|
||||
# db_connection = Database(c, 'ptracks', 'razz') # postgres
|
||||
print "database connection object = ", db_connection.connection
|
||||
db_connection.recreate_tables()
|
||||
# db_connection.recreate_tables()
|
||||
db_connection.dropAllIndexes()
|
||||
db_connection.createAllIndexes()
|
||||
|
||||
h = db_connection.get_last_hand()
|
||||
print "last hand = ", h
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
"""Database manager
|
||||
|
||||
@todo: (gtk) how to validate user input in gtk.Dialog? as soon as the user clicks ok the dialog is dead. we use a while loop as workaround. not nice
|
||||
@todo: (gtk) how to validate user input in gtk.Dialog? as soon as the user clicks ok the dialog is dead. we use a while loop as workaround. not nice
|
||||
@todo: (fpdb) we need the application name 'fpdb' from somewhere to put it in dialog titles
|
||||
@todo: (fpdb) config object should be initialized globally and accessible from all modules via Configuration.py
|
||||
|
||||
|
@ -24,10 +24,10 @@ import gobject
|
|||
#*******************************************************************************************************
|
||||
class DatabaseManager(gobject.GObject):
|
||||
DatabaseTypes = {}
|
||||
|
||||
|
||||
@classmethod
|
||||
def from_fpdb(klass, data, defaultDatabaseType=None):
|
||||
|
||||
|
||||
#NOTE: if no databases are present in config fpdb fails with
|
||||
# Traceback (most recent call last):
|
||||
# File "/home/me2/Scr/Repos/fpdb-mme/pyfpdb/DatabaseManager.py", line 783, in <module>
|
||||
|
@ -38,12 +38,12 @@ class DatabaseManager(gobject.GObject):
|
|||
# db = self.get_db_parameters()
|
||||
# File "/home/me2/Scr/Repos/fpdb-mme/pyfpdb/Configuration.py", line 583, in get_db_parameters
|
||||
# name = self.db_selected
|
||||
# AttributeError: Config instance has no attribute 'db_selected'
|
||||
# AttributeError: Config instance has no attribute 'db_selected'
|
||||
import sys
|
||||
import Options
|
||||
import Configuration
|
||||
#NOTE: fpdb should perform this globally
|
||||
(options, sys.argv) = Options.fpdb_options()
|
||||
(options, argv) = Options.fpdb_options()
|
||||
config = Configuration.Config(file=options.config, dbname=options.dbname)
|
||||
#TODO: handle no database present
|
||||
defaultDatabaseName = config.get_db_parameters().get('db-databaseName', None)
|
||||
|
@ -54,7 +54,7 @@ class DatabaseManager(gobject.GObject):
|
|||
#NOTE: Config does not seem to validate user input, so anything may end up here
|
||||
if databaseKlass is None:
|
||||
raise ValueError('Unknown databasetype: %s' % fpdbDatabase.db_server)
|
||||
|
||||
|
||||
database = databaseKlass()
|
||||
if database.Type == 'sqlite':
|
||||
database.name = fpdbDatabase.db_name
|
||||
|
@ -66,17 +66,17 @@ class DatabaseManager(gobject.GObject):
|
|||
database.port = int(fpdbDatabase.db_ip)
|
||||
database.user = fpdbDatabase.db_user
|
||||
database.password = fpdbDatabase.db_pass
|
||||
databases.append(database)
|
||||
|
||||
databases.append(database)
|
||||
|
||||
return klass(databases=databases, defaultDatabaseType=defaultDatabaseType)
|
||||
|
||||
|
||||
def to_fpdb(self):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
def __init__(self, databases=None, defaultDatabaseType=None):
|
||||
gobject.GObject.__init__(self)
|
||||
|
||||
|
||||
self._defaultDatabaseType = defaultDatabaseType
|
||||
self._databases = [] if databases is None else list(databases)
|
||||
self._activeDatabase = None
|
||||
|
@ -98,21 +98,21 @@ class DatabaseManager(gobject.GObject):
|
|||
self._databases.append(database)
|
||||
def remove_database(self, database):
|
||||
self._databases.remove(database)
|
||||
|
||||
|
||||
def activate_database(self, database):
|
||||
if self._activeDatabase is not None:
|
||||
self._activeDatabase.status = self._activeDatabase.StatusInactive
|
||||
#TODO: finalize database
|
||||
self.emit('database-deactivated', self.database_id(self._activeDatabase) )
|
||||
|
||||
|
||||
database.status = database.StatusActive
|
||||
#TODO: activate database
|
||||
self._activeDatabase = database
|
||||
self.emit('database-activated', self.database_id(database) )
|
||||
|
||||
|
||||
def active_database(self):
|
||||
return self._activeDatabase
|
||||
|
||||
|
||||
# register DatabaseManager signals
|
||||
gobject.type_register(DatabaseManager)
|
||||
gobject.signal_new('database-activated', DatabaseManager, gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (int, ))
|
||||
|
@ -134,20 +134,20 @@ class DatabaseTypeBase(object):
|
|||
StatusActive = 'active'
|
||||
StatusInactive = 'inactive'
|
||||
StatusError = 'error' #TODO: not implemented
|
||||
|
||||
|
||||
#TODO: not happy with returning error string. just being too lazy to impl dozens of error codes for later translation
|
||||
def init_new_database(self):
|
||||
"""initializes a new empty database
|
||||
@return: (str) error if something goes wrong, None otherwise
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
def validate_database(self):
|
||||
"""checks if the database is valid
|
||||
@return: (str) error if something goes wrong, None otherwise
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class DatabaseTypePostgres(DatabaseTypeBase):
|
||||
Type = 'postgresql'
|
||||
@classmethod
|
||||
|
@ -161,15 +161,15 @@ class DatabaseTypePostgres(DatabaseTypeBase):
|
|||
self.password = password
|
||||
self.database = database
|
||||
self.status = self.StatusInactive
|
||||
|
||||
|
||||
#TODO: implement
|
||||
def init_new_database(self):
|
||||
pass
|
||||
|
||||
|
||||
#TODO: implement
|
||||
def validate_database(self):
|
||||
pass
|
||||
|
||||
|
||||
class DatabaseTypeMysql(DatabaseTypeBase):
|
||||
Type = 'mysql'
|
||||
@classmethod
|
||||
|
@ -183,11 +183,11 @@ class DatabaseTypeMysql(DatabaseTypeBase):
|
|||
self.password = password
|
||||
self.database = database
|
||||
self.status = self.StatusInactive
|
||||
|
||||
|
||||
#TODO: implement
|
||||
def init_new_database(self):
|
||||
pass
|
||||
|
||||
|
||||
#TODO: implement
|
||||
def validate_database(self):
|
||||
pass
|
||||
|
@ -202,7 +202,7 @@ class DatabaseTypeSqLite(DatabaseTypeBase):
|
|||
self.name = name
|
||||
self.file = file
|
||||
self.status = self.StatusInactive
|
||||
|
||||
|
||||
def init_new_database(self):
|
||||
# make shure all attrs are specified
|
||||
if not self.file:
|
||||
|
@ -212,15 +212,15 @@ class DatabaseTypeSqLite(DatabaseTypeBase):
|
|||
open(self.file, 'w').close()
|
||||
except IOError:
|
||||
return 'can not write file'
|
||||
|
||||
|
||||
#TODO: init tables (...)
|
||||
|
||||
|
||||
|
||||
|
||||
def validate_database(self):
|
||||
pass
|
||||
#TODO: check if tables (...) exist
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#TODO: how do we want to handle unsupported database types?
|
||||
# ..uncomment to remove unsupported database types
|
||||
|
@ -235,7 +235,7 @@ class DatabaseTypeSqLite(DatabaseTypeBase):
|
|||
#TODO: there is no title (on linux), wtf?
|
||||
def DialogError(parent=None, msg=''):
|
||||
dlg = gtk.MessageDialog(
|
||||
parent=parent,
|
||||
parent=parent,
|
||||
flags=gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
type=gtk.MESSAGE_ERROR,
|
||||
buttons=gtk.BUTTONS_OK,
|
||||
|
@ -248,33 +248,33 @@ def DialogError(parent=None, msg=''):
|
|||
|
||||
#TODO: derrive from gtk.VBox?
|
||||
class WidgetDatabaseProperties(gtk.VBox):
|
||||
|
||||
|
||||
ModeNew = 0
|
||||
ModeEdit = 1
|
||||
ModeAdd = 2
|
||||
|
||||
|
||||
class SqLiteFileChooserButton(gtk.HBox):
|
||||
#NOTE: for some weird reason it is impossible to let the user choose a non exiting filename with gtk.FileChooserButton, so impl our own on the fly
|
||||
def __init__(self, widgetDatabaseProperties, parentWidget):
|
||||
gtk.HBox.__init__(self)
|
||||
self.set_homogeneous(False)
|
||||
|
||||
|
||||
self.parentWidget = parentWidget
|
||||
self.widgetDatabaseProperties = widgetDatabaseProperties
|
||||
self.entry = gtk.Entry()
|
||||
self.button = gtk.Button('...')
|
||||
self.button.connect('clicked', self.on_button_clicked)
|
||||
|
||||
|
||||
# layout widgets
|
||||
self.pack_start(self.entry, True, True)
|
||||
self.pack_start(self.button, False, False)
|
||||
|
||||
|
||||
def get_filename(self):
|
||||
return self.entry.get_text()
|
||||
|
||||
|
||||
def set_filename(self, name):
|
||||
self.entry.set_text(name)
|
||||
|
||||
|
||||
def on_button_clicked(self, button):
|
||||
if self.widgetDatabaseProperties.mode == WidgetDatabaseProperties.ModeAdd:
|
||||
action = gtk.FILE_CHOOSER_ACTION_OPEN
|
||||
|
@ -283,13 +283,13 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
else:
|
||||
raise ValueError('unsupported dialog mode')
|
||||
dlg = gtk.FileChooserDialog(
|
||||
title='Choose an exiting database file or type in name of a new one',
|
||||
parent=self.parentWidget,
|
||||
action=action,
|
||||
title='Choose an exiting database file or type in name of a new one',
|
||||
parent=self.parentWidget,
|
||||
action=action,
|
||||
buttons=(
|
||||
gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
|
||||
gtk.STOCK_OK, gtk.RESPONSE_OK,
|
||||
),
|
||||
),
|
||||
backend=None
|
||||
)
|
||||
dlg.set_default_response(gtk.RESPONSE_OK)
|
||||
|
@ -298,8 +298,8 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
fileName = dlg.get_filename()
|
||||
self.set_filename(fileName)
|
||||
dlg.destroy()
|
||||
|
||||
|
||||
|
||||
|
||||
#TODO: bit ugly this thingy. try to find a better way to map database attrs to gtk widgets
|
||||
class FieldWidget(object):
|
||||
def __init__(self, text='', attrDatabase='', widget=None, attrGet=None, attrSet=None, defaultValue=None, canEdit=False, tooltip=''):
|
||||
|
@ -310,15 +310,15 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
self._attrDatabase = attrDatabase
|
||||
self._widget = widget
|
||||
self._defaultValue = defaultValue
|
||||
self._attrGetter=None,
|
||||
self._attrGet = attrGet
|
||||
self._attrSet = attrSet
|
||||
self._attrGetter=None,
|
||||
self._attrGet = attrGet
|
||||
self._attrSet = attrSet
|
||||
self._canEdit = canEdit
|
||||
|
||||
|
||||
self._label.set_tooltip_text(tooltip)
|
||||
self._widget.set_tooltip_text(tooltip)
|
||||
|
||||
def widget(self):
|
||||
|
||||
def widget(self):
|
||||
return self._widget
|
||||
def label(self):
|
||||
return self._label
|
||||
|
@ -335,10 +335,10 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
setattr(database, self._attrDatabase, getattr(self._widget, self._attrGet)() )
|
||||
def reset_value(self):
|
||||
getattr(self._widget, self._attrSet)(self._defaultValue)
|
||||
|
||||
|
||||
def __init__(self, databaseManager, database, mode=ModeEdit, parentWidget=None):
|
||||
gtk.VBox.__init__(self)
|
||||
|
||||
|
||||
self.databaseManager = databaseManager
|
||||
self.database = database
|
||||
self.mode = mode
|
||||
|
@ -346,76 +346,76 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
self.fieldWidgets = (
|
||||
self.FieldWidget(
|
||||
text='Name:',
|
||||
attrDatabase='name',
|
||||
attrDatabase='name',
|
||||
widget=gtk.Entry(),
|
||||
defaultValue='',
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
canEdit=True,
|
||||
tooltip='Any name you like to name the database '
|
||||
),
|
||||
self.FieldWidget(
|
||||
text='File:',
|
||||
attrDatabase='file',
|
||||
widget=self.SqLiteFileChooserButton(self, self.parentWidget),
|
||||
text='File:',
|
||||
attrDatabase='file',
|
||||
widget=self.SqLiteFileChooserButton(self, self.parentWidget),
|
||||
defaultValue='',
|
||||
attrGet='get_filename',
|
||||
attrSet='set_filename',
|
||||
canEdit=False,
|
||||
attrGet='get_filename',
|
||||
attrSet='set_filename',
|
||||
canEdit=False,
|
||||
tooltip='Fully qualified path of the file to hold the database '
|
||||
),
|
||||
self.FieldWidget(
|
||||
text='Host:',
|
||||
attrDatabase='host',
|
||||
widget=gtk.Entry(),
|
||||
text='Host:',
|
||||
attrDatabase='host',
|
||||
widget=gtk.Entry(),
|
||||
defaultValue='',
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
canEdit=False,
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
canEdit=False,
|
||||
tooltip='Host the database is located at'
|
||||
),
|
||||
self.FieldWidget(
|
||||
text='Port:',
|
||||
attrDatabase='port',
|
||||
widget=gtk.SpinButton(adjustment=gtk.Adjustment(value=0, lower=0, upper=999999, step_incr=1, page_incr=10) ),
|
||||
text='Port:',
|
||||
attrDatabase='port',
|
||||
widget=gtk.SpinButton(adjustment=gtk.Adjustment(value=0, lower=0, upper=999999, step_incr=1, page_incr=10) ),
|
||||
defaultValue=0,
|
||||
attrGet='get_value',
|
||||
attrSet='set_value',
|
||||
canEdit=False,
|
||||
attrGet='get_value',
|
||||
attrSet='set_value',
|
||||
canEdit=False,
|
||||
tooltip='Port to use to connect to the host'
|
||||
),
|
||||
self.FieldWidget(
|
||||
text='User:',
|
||||
attrDatabase='user',
|
||||
widget=gtk.Entry(),
|
||||
text='User:',
|
||||
attrDatabase='user',
|
||||
widget=gtk.Entry(),
|
||||
defaultValue='',
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
canEdit=False,
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
canEdit=False,
|
||||
tooltip='User name used to login to the host'
|
||||
),
|
||||
self.FieldWidget(
|
||||
text='Pwd:',
|
||||
attrDatabase='password',
|
||||
widget=gtk.Entry(),
|
||||
text='Pwd:',
|
||||
attrDatabase='password',
|
||||
widget=gtk.Entry(),
|
||||
defaultValue='',
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
canEdit=False,
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
canEdit=False,
|
||||
tooltip='Password used to login to the host'
|
||||
),
|
||||
self.FieldWidget(
|
||||
text='Db:',
|
||||
attrDatabase='database',
|
||||
widget=gtk.Entry(),
|
||||
text='Db:',
|
||||
attrDatabase='database',
|
||||
widget=gtk.Entry(),
|
||||
defaultValue='',
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
attrGet='get_text',
|
||||
attrSet='set_text',
|
||||
canEdit=False,
|
||||
tooltip='Name of the database'
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
# setup database type combo
|
||||
self.comboType = gtk.ComboBox()
|
||||
listStore= gtk.ListStore(str, str)
|
||||
|
@ -424,7 +424,7 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
self.comboType.pack_start(cell, True)
|
||||
self.comboType.add_attribute(cell, 'text', 0)
|
||||
self.comboType.connect('changed', self.on_combo_type_changed)
|
||||
|
||||
|
||||
# fill database type combo with available database klasses. we store (databaseDisplayName, databaseType) in our model for later lookup
|
||||
iCurrentDatabase = 0
|
||||
databaseTypes = [(klass.display_name(), klass.Type) for klass in databaseManager.DatabaseTypes.values()]
|
||||
|
@ -435,7 +435,7 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
iCurrentDatabase = i
|
||||
if self.mode == self.ModeEdit or len(databaseTypes) < 2:
|
||||
self.comboType.set_button_sensitivity(gtk.SENSITIVITY_OFF)
|
||||
|
||||
|
||||
# init and layout field widgets
|
||||
self.pack_start(self.comboType, False, False, 2)
|
||||
table = gtk.Table(rows=len(self.fieldWidgets) +1, columns=2, homogeneous=False)
|
||||
|
@ -443,11 +443,11 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
for i,fieldWidget in enumerate(self.fieldWidgets):
|
||||
table.attach(fieldWidget.label(), 0, 1, i, i+1, xoptions=gtk.FILL)
|
||||
table.attach(fieldWidget.widget(), 1, 2, i, i+1)
|
||||
|
||||
|
||||
# init widget
|
||||
self.comboType.set_active(iCurrentDatabase)
|
||||
self._adjust_widgets(self.database)
|
||||
|
||||
|
||||
def _adjust_widgets(self, database):
|
||||
for fieldWidget in self.fieldWidgets:
|
||||
isSensitive = fieldWidget.is_sensitive(database)
|
||||
|
@ -458,24 +458,24 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
if self.mode == self.ModeEdit:
|
||||
isSensitive = isSensitive and fieldWidget.can_edit()
|
||||
fieldWidget.set_sensitive(isSensitive)
|
||||
|
||||
|
||||
|
||||
|
||||
def on_combo_type_changed(self, combo):
|
||||
i = self.comboType.get_active()
|
||||
if i < 0:
|
||||
return
|
||||
|
||||
|
||||
# check if we need to init a new database
|
||||
currentDatabaseType = self.comboType.get_model()[i][1]
|
||||
if currentDatabaseType == self.database.Type:
|
||||
return
|
||||
|
||||
|
||||
# create new empty database
|
||||
#NOTE: we dont register it in DatabaseManager
|
||||
self.database = self.databaseManager.DatabaseTypes[currentDatabaseType]()
|
||||
self._adjust_widgets(self.database)
|
||||
|
||||
|
||||
|
||||
|
||||
def get_database(self):
|
||||
for fieldWidget in self.fieldWidgets:
|
||||
if fieldWidget.is_sensitive(self.database):
|
||||
|
@ -486,7 +486,7 @@ class WidgetDatabaseProperties(gtk.VBox):
|
|||
class DialogDatabaseProperties(gtk.Dialog):
|
||||
def __init__(self, databaseManager, database, parent=None, mode=WidgetDatabaseProperties.ModeEdit, title=''):
|
||||
gtk.Dialog.__init__(self,
|
||||
title=title,
|
||||
title=title,
|
||||
parent=parent,
|
||||
flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
buttons=(
|
||||
|
@ -495,7 +495,7 @@ class DialogDatabaseProperties(gtk.Dialog):
|
|||
)
|
||||
)
|
||||
self.connect('response', self.on_dialog_response)
|
||||
|
||||
|
||||
# setup widget
|
||||
self.widgetDatabaseProperties = WidgetDatabaseProperties(databaseManager,database, mode=mode, parentWidget=self)
|
||||
self.vbox.pack_start(self.widgetDatabaseProperties, True, True)
|
||||
|
@ -503,23 +503,23 @@ class DialogDatabaseProperties(gtk.Dialog):
|
|||
|
||||
def get_widget_database_properties(self):
|
||||
return self.widgetDatabaseProperties
|
||||
|
||||
|
||||
def on_dialog_response(self, dlg, responseId):
|
||||
if responseId == gtk.RESPONSE_REJECT:
|
||||
pass
|
||||
elif responseId == gtk.RESPONSE_ACCEPT:
|
||||
pass
|
||||
|
||||
|
||||
#TODO: derrive from gtk.VBox?
|
||||
|
||||
#TODO: derrive from gtk.VBox?
|
||||
# ..is there a way to derrive from gtk.Widget or similar? this would make parentWidget kw obsolete
|
||||
class WidgetDatabaseManager(gtk.VBox):
|
||||
"""
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self, databaseManager, parentWidget=None):
|
||||
gtk.VBox.__init__(self)
|
||||
|
||||
|
||||
self.parentWidget = parentWidget
|
||||
self.databaseManager = databaseManager
|
||||
self.databaseManager.connect('database-activated', self.on_database_manager_database_activated)
|
||||
|
@ -529,17 +529,17 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
DatabaseTypeBase.StatusInactive: 'Inactive',
|
||||
DatabaseTypeBase.StatusError: 'Error',
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#TODO: dono how to make word wrap work as expected
|
||||
self.labelInfo = gtk.Label('database management')
|
||||
self.labelInfo.set_line_wrap(True)
|
||||
self.labelInfo.set_selectable(True)
|
||||
self.labelInfo.set_single_line_mode(False)
|
||||
self.labelInfo.set_alignment(0, 0)
|
||||
|
||||
|
||||
# database management buttons
|
||||
|
||||
|
||||
#TODO: bit messy the distinction New/Add/Edit. we'd have to pass three flags to DialogDatabaseProperties
|
||||
# to handle this. maybe drop Edit (is just a Remove + Add), to keep things simple
|
||||
self.buttonDatabaseActivate = gtk.Button("Activate")
|
||||
|
@ -560,13 +560,13 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
self.buttonDatabaseRemove.set_tooltip_text('removes the database from the list')
|
||||
self.buttonDatabaseRemove.set_sensitive(False)
|
||||
self.buttonDatabaseRemove.connect('clicked', self.on_button_database_remove_clicked)
|
||||
|
||||
|
||||
#TODO: i dont think we should do any real database management here. maybe drop it
|
||||
#self.buttonDatabaseDelete = gtk.Button("Delete")
|
||||
#self.buttonDatabaseDelete.set_tooltip_text('removes the database from the list and deletes it')
|
||||
#self.buttonDatabaseDelete.set_sensitive(False)
|
||||
|
||||
# init database tree
|
||||
|
||||
# init database tree
|
||||
self.treeDatabases = gtk.TreeView()
|
||||
treeDatabaseColumns = ( # name, displayName, dataType
|
||||
('name', 'Name', str),
|
||||
|
@ -584,7 +584,7 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
col.set_visible(False)
|
||||
self.treeDatabaseColumns[name] = i
|
||||
self.treeDatabases.get_selection().connect('changed', self.on_tree_databases_selection_changed)
|
||||
|
||||
|
||||
# layout widgets
|
||||
vbox = gtk.VBox(self)
|
||||
vbox.pack_start(self.labelInfo, False, False, 2)
|
||||
|
@ -602,12 +602,12 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
#vbox.pack_start(self.buttonDatabaseDelete, False, False, 2)
|
||||
box = gtk.VBox()
|
||||
vbox.pack_start(box, True, True, 0)
|
||||
|
||||
|
||||
hbox.pack_start(gtk.VSeparator(), False, False, 2)
|
||||
hbox.pack_end(self.treeDatabases, True, True, 2)
|
||||
|
||||
|
||||
self.show_all()
|
||||
|
||||
|
||||
# init widget
|
||||
model = self.treeDatabases.get_model()
|
||||
for database in self.databaseManager:
|
||||
|
@ -616,8 +616,8 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
model.set_value(it, self.treeDatabaseColumns['status'], self.databaseStatusNames[database.status] )
|
||||
model.set_value(it, self.treeDatabaseColumns['type'], database.display_name() )
|
||||
model.set_value(it, self.treeDatabaseColumns['_id'], self.databaseManager.database_id(database))
|
||||
|
||||
|
||||
|
||||
|
||||
def on_database_manager_database_activated(self, databaseManager, idDatabase):
|
||||
database = self.databaseManager.database_from_id(idDatabase)
|
||||
model = self.treeDatabases.get_model()
|
||||
|
@ -627,8 +627,8 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
break
|
||||
else:
|
||||
raise ValueError('database not found')
|
||||
|
||||
|
||||
|
||||
|
||||
def on_database_manager_database_deactivated(self, databaseManager, idDatabase):
|
||||
database = self.databaseManager.database_from_id(idDatabase)
|
||||
model = self.treeDatabases.get_model()
|
||||
|
@ -638,31 +638,31 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
break
|
||||
else:
|
||||
raise ValueError('database not found')
|
||||
|
||||
|
||||
|
||||
|
||||
def on_button_database_activate_clicked(self, button):
|
||||
selection = self.treeDatabases.get_selection()
|
||||
if selection is None:
|
||||
return
|
||||
|
||||
|
||||
model, it = selection.get_selected()
|
||||
idDatabase = model.get_value(it, self.treeDatabaseColumns['_id'])
|
||||
database = self.databaseManager.database_from_id(idDatabase)
|
||||
self.databaseManager.activate_database(database)
|
||||
|
||||
|
||||
#TODO: for some reason i have to click OK/Cancel twice to close the dialog
|
||||
|
||||
|
||||
#TODO: for some reason i have to click OK/Cancel twice to close the dialog
|
||||
def on_button_database_new_clicked(self, button):
|
||||
databaseKlass = self.databaseManager.get_default_database_type()
|
||||
if databaseKlass is None:
|
||||
raise ValueError('no default database type set')
|
||||
database = databaseKlass()
|
||||
|
||||
|
||||
while True:
|
||||
dlg = DialogDatabaseProperties(
|
||||
self.databaseManager,
|
||||
database,
|
||||
parent=self.parentWidget,
|
||||
self.databaseManager,
|
||||
database,
|
||||
parent=self.parentWidget,
|
||||
mode=WidgetDatabaseProperties.ModeNew,
|
||||
title='New database'
|
||||
)
|
||||
|
@ -679,11 +679,11 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
database = None
|
||||
dlg.destroy()
|
||||
break
|
||||
|
||||
|
||||
|
||||
|
||||
if database is None:
|
||||
return
|
||||
|
||||
|
||||
self.databaseManager.add_database(database)
|
||||
model = self.treeDatabases.get_model()
|
||||
it = model.append()
|
||||
|
@ -691,19 +691,19 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
model.set_value(it, self.treeDatabaseColumns['status'], self.databaseStatusNames[database.status] )
|
||||
model.set_value(it, self.treeDatabaseColumns['type'], database.display_name() )
|
||||
model.set_value(it, self.treeDatabaseColumns['_id'], self.databaseManager.database_id(database))
|
||||
|
||||
|
||||
|
||||
|
||||
def on_button_database_add_clicked(self, button):
|
||||
databaseKlass = self.databaseManager.get_default_database_type()
|
||||
if databaseKlass is None:
|
||||
raise ValueError('no defult database type set')
|
||||
database = databaseKlass()
|
||||
|
||||
|
||||
while True:
|
||||
dlg = DialogDatabaseProperties(
|
||||
self.databaseManager,
|
||||
database,
|
||||
parent=self.parentWidget,
|
||||
self.databaseManager,
|
||||
database,
|
||||
parent=self.parentWidget,
|
||||
mode=WidgetDatabaseProperties.ModeAdd,
|
||||
title='Add database'
|
||||
)
|
||||
|
@ -719,11 +719,11 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
else:
|
||||
database = None
|
||||
dlg.destroy()
|
||||
break
|
||||
|
||||
break
|
||||
|
||||
if database is None:
|
||||
return
|
||||
|
||||
|
||||
self.databaseManager.add_database(database)
|
||||
model = self.treeDatabases.get_model()
|
||||
it = model.append()
|
||||
|
@ -732,20 +732,20 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
model.set_value(it, self.treeDatabaseColumns['type'], database.display_name() )
|
||||
model.set_value(it, self.treeDatabaseColumns['_id'], self.databaseManager.database_id(database))
|
||||
dlg.destroy()
|
||||
|
||||
|
||||
def on_button_database_edit_clicked(self, button):
|
||||
selection = self.treeDatabases.get_selection()
|
||||
if selection is None:
|
||||
return
|
||||
|
||||
|
||||
model, it = selection.get_selected()
|
||||
idDatabase = model.get_value(it, self.treeDatabaseColumns['_id'])
|
||||
database = self.databaseManager.database_from_id(idDatabase)
|
||||
dlg = DialogDatabaseProperties(
|
||||
self.databaseManager,
|
||||
database,
|
||||
parent=self.parentWidget,
|
||||
mode=WidgetDatabaseProperties.ModeEdit,
|
||||
self.databaseManager,
|
||||
database,
|
||||
parent=self.parentWidget,
|
||||
mode=WidgetDatabaseProperties.ModeEdit,
|
||||
title='Edit database'
|
||||
)
|
||||
response = dlg.run()
|
||||
|
@ -759,31 +759,31 @@ class WidgetDatabaseManager(gtk.VBox):
|
|||
model.set_value(it, self.treeDatabaseColumns['name'], database.name)
|
||||
dlg.destroy()
|
||||
|
||||
|
||||
|
||||
def on_button_database_remove_clicked(self, button):
|
||||
selection = self.treeDatabases.get_selection()
|
||||
if selection is None:
|
||||
return
|
||||
|
||||
|
||||
model, it = selection.get_selected()
|
||||
#TODO: finalize database
|
||||
model.remove(it)
|
||||
|
||||
|
||||
|
||||
|
||||
def on_tree_databases_selection_changed(self, treeSelection):
|
||||
hasSelection = bool(treeSelection.count_selected_rows())
|
||||
|
||||
|
||||
# enable/disable selection dependend widgets
|
||||
self.buttonDatabaseActivate.set_sensitive(hasSelection)
|
||||
self.buttonDatabaseEdit.set_sensitive(hasSelection)
|
||||
self.buttonDatabaseRemove.set_sensitive(hasSelection)
|
||||
#self.buttonDatabaseDelete.set_sensitive(hasSelection)
|
||||
|
||||
|
||||
|
||||
class DialogDatabaseManager(gtk.Dialog):
|
||||
def __init__(self, databaseManager, parent=None):
|
||||
gtk.Dialog.__init__(self,
|
||||
title="Databases",
|
||||
title="Databases",
|
||||
parent=parent,
|
||||
flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
buttons=(
|
||||
|
@ -794,11 +794,11 @@ class DialogDatabaseManager(gtk.Dialog):
|
|||
self.widgetDatabaseManager = WidgetDatabaseManager(databaseManager, parentWidget=self)
|
||||
self.vbox.pack_start(self.widgetDatabaseManager, True, True)
|
||||
self.show_all()
|
||||
|
||||
|
||||
#**************************************************************************************************
|
||||
if __name__ == '__main__':
|
||||
databaseManager = DatabaseManager.from_fpdb('', defaultDatabaseType=DatabaseTypeSqLite)
|
||||
|
||||
|
||||
#d = DialogDatabaseProperties(
|
||||
# DatabaseManager(defaultDatabaseType=DatabaseTypeSqLite),
|
||||
#database=DatabaseTypePostgres(),
|
||||
|
@ -808,5 +808,3 @@ if __name__ == '__main__':
|
|||
d.connect("destroy", gtk.main_quit)
|
||||
d.run()
|
||||
#gtk.main()
|
||||
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#fpdb modules
|
||||
import Card
|
||||
|
||||
DEBUG = True
|
||||
DEBUG = False
|
||||
|
||||
if DEBUG:
|
||||
import pprint
|
||||
|
@ -39,12 +39,24 @@ class DerivedStats():
|
|||
#Init vars that may not be used, but still need to be inserted.
|
||||
# All stud street4 need this when importing holdem
|
||||
self.handsplayers[player[1]]['winnings'] = 0
|
||||
self.handsplayers[player[1]]['rake'] = 0
|
||||
self.handsplayers[player[1]]['totalProfit'] = 0
|
||||
self.handsplayers[player[1]]['street4Seen'] = False
|
||||
self.handsplayers[player[1]]['street4Aggr'] = False
|
||||
self.handsplayers[player[1]]['wonWhenSeenStreet1'] = False
|
||||
self.handsplayers[player[1]]['sawShowdown'] = False
|
||||
self.handsplayers[player[1]]['wonAtSD'] = False
|
||||
for i in range(5):
|
||||
self.handsplayers[player[1]]['street%dCalls' % i] = 0
|
||||
self.handsplayers[player[1]]['street%dBets' % i] = 0
|
||||
for i in range(1,5):
|
||||
self.handsplayers[player[1]]['street%dCBChance' %i] = False
|
||||
self.handsplayers[player[1]]['street%dCBDone' %i] = False
|
||||
|
||||
self.assembleHands(self.hand)
|
||||
self.assembleHandsPlayers(self.hand)
|
||||
|
||||
|
||||
if DEBUG:
|
||||
print "Hands:"
|
||||
pp.pprint(self.hands)
|
||||
|
@ -95,33 +107,56 @@ class DerivedStats():
|
|||
#print "DEBUG: playersAtStreet 1:'%s' 2:'%s' 3:'%s' 4:'%s'" %(self.hands['playersAtStreet1'],self.hands['playersAtStreet2'],self.hands['playersAtStreet3'],self.hands['playersAtStreet4'])
|
||||
self.streetXRaises(hand) # Empty function currently
|
||||
|
||||
# comment TEXT,
|
||||
# commentTs DATETIME
|
||||
|
||||
def assembleHandsPlayers(self, hand):
|
||||
#street0VPI/vpip already called in Hand
|
||||
# sawShowdown is calculated in playersAtStreetX, as that calculation gives us a convenient list of names
|
||||
|
||||
#hand.players = [[seat, name, chips],[seat, name, chips]]
|
||||
for player in hand.players:
|
||||
self.handsplayers[player[1]]['seatNo'] = player[0]
|
||||
self.handsplayers[player[1]]['startCash'] = player[2]
|
||||
|
||||
# Winnings is a non-negative value of money collected from the pot, which already includes the
|
||||
# rake taken out. hand.collectees is Decimal, database requires cents
|
||||
for player in hand.collectees:
|
||||
self.handsplayers[player]['winnings'] = int(100 * hand.collectees[player])
|
||||
|
||||
for i, street in enumerate(hand.actionStreets[2:]):
|
||||
self.seen(self.hand, i+1)
|
||||
|
||||
for i, street in enumerate(hand.actionStreets[1:]):
|
||||
self.aggr(self.hand, i)
|
||||
self.calls(self.hand, i)
|
||||
self.bets(self.hand, i)
|
||||
|
||||
default_holecards = ["Xx", "Xx", "Xx", "Xx"]
|
||||
# Winnings is a non-negative value of money collected from the pot, which already includes the
|
||||
# rake taken out. hand.collectees is Decimal, database requires cents
|
||||
for player in hand.collectees:
|
||||
self.handsplayers[player]['winnings'] = int(100 * hand.collectees[player])
|
||||
#FIXME: This is pretty dodgy, rake = hand.rake/#collectees
|
||||
# You can really only pay rake when you collect money, but
|
||||
# different sites calculate rake differently.
|
||||
# Should be fine for split-pots, but won't be accurate for multi-way pots
|
||||
self.handsplayers[player]['rake'] = int(100* hand.rake)/len(hand.collectees)
|
||||
if self.handsplayers[player]['street1Seen'] == True:
|
||||
self.handsplayers[player]['wonWhenSeenStreet1'] = True
|
||||
if self.handsplayers[player]['sawShowdown'] == True:
|
||||
self.handsplayers[player]['wonAtSD'] = True
|
||||
|
||||
for player in hand.pot.committed:
|
||||
self.handsplayers[player]['totalProfit'] = int(self.handsplayers[player]['winnings'] - (100*hand.pot.committed[player]))
|
||||
|
||||
self.calcCBets(hand)
|
||||
|
||||
#default_holecards = ["Xx", "Xx", "Xx", "Xx"]
|
||||
#if hand.gametype['base'] == "hold":
|
||||
# pass
|
||||
#elif hand.gametype['base'] == "stud":
|
||||
# pass
|
||||
#else:
|
||||
# # Flop hopefully...
|
||||
# pass
|
||||
|
||||
for street in hand.holeStreets:
|
||||
for player in hand.players:
|
||||
for i in range(1,8): self.handsplayers[player[1]]['card%d' % i] = 0
|
||||
if player[1] in hand.holecards[street].keys():
|
||||
#print "DEBUG: hand.holecards[%s]: %s" % (street, hand.holecards[street])
|
||||
if player[1] in hand.holecards[street].keys() and hand.gametype['base'] == "hold":
|
||||
self.handsplayers[player[1]]['card1'] = Card.encodeCard(hand.holecards[street][player[1]][1][0])
|
||||
self.handsplayers[player[1]]['card2'] = Card.encodeCard(hand.holecards[street][player[1]][1][1])
|
||||
try:
|
||||
|
@ -174,7 +209,11 @@ class DerivedStats():
|
|||
self.hands['playersAtStreet%d' % (i+1)] = len(set.union(alliners, actors))
|
||||
|
||||
actions = hand.actions[hand.actionStreets[-1]]
|
||||
self.hands['playersAtShowdown'] = len(set.union(self.pfba(actions) - self.pfba(actions, l=('folds',)), alliners))
|
||||
pas = set.union(self.pfba(actions) - self.pfba(actions, l=('folds',)), alliners)
|
||||
self.hands['playersAtShowdown'] = len(pas)
|
||||
|
||||
for player in pas:
|
||||
self.handsplayers[player]['sawShowdown'] = True
|
||||
|
||||
def streetXRaises(self, hand):
|
||||
# self.actions[street] is a list of all actions in a tuple, contining the action as the second element
|
||||
|
@ -188,6 +227,20 @@ class DerivedStats():
|
|||
for (i, street) in enumerate(hand.actionStreets[1:]):
|
||||
self.hands['street%dRaises' % i] = len(filter( lambda action: action[1] in ('raises','bets'), hand.actions[street]))
|
||||
|
||||
def calcCBets(self, hand):
|
||||
# Continuation Bet chance, action:
|
||||
# Had the last bet (initiative) on previous street, got called, close street action
|
||||
# Then no bets before the player with initiatives first action on current street
|
||||
# ie. if player on street-1 had initiative
|
||||
# and no donkbets occurred
|
||||
for i, street in enumerate(hand.actionStreets[2:], start=1):
|
||||
name = self.lastBetOrRaiser(hand.actionStreets[i])
|
||||
if name:
|
||||
chance = self.noBetsBefore(hand.actionStreets[i+1], name)
|
||||
self.handsplayers[name]['street%dCBChance' %i] = True
|
||||
if chance == True:
|
||||
self.handsplayers[name]['street%dCBDone' %i] = self.betStreet(hand.actionStreets[i+1], name)
|
||||
|
||||
def seen(self, hand, i):
|
||||
pas = set()
|
||||
for act in hand.actions[hand.actionStreets[i+1]]:
|
||||
|
@ -211,6 +264,20 @@ class DerivedStats():
|
|||
else:
|
||||
self.handsplayers[player[1]]['street%sAggr' % i] = False
|
||||
|
||||
def calls(self, hand, i):
|
||||
callers = []
|
||||
for act in hand.actions[hand.actionStreets[i+1]]:
|
||||
if act[1] in ('calls'):
|
||||
self.handsplayers[act[0]]['street%sCalls' % i] = 1 + self.handsplayers[act[0]]['street%sCalls' % i]
|
||||
|
||||
# CG - I'm sure this stat is wrong
|
||||
# Best guess is that raise = 2 bets
|
||||
def bets(self, hand, i):
|
||||
betters = []
|
||||
for act in hand.actions[hand.actionStreets[i+1]]:
|
||||
if act[1] in ('bets'):
|
||||
self.handsplayers[act[0]]['street%sBets' % i] = 1 + self.handsplayers[act[0]]['street%sBets' % i]
|
||||
|
||||
def countPlayers(self, hand):
|
||||
pass
|
||||
|
||||
|
@ -226,3 +293,35 @@ class DerivedStats():
|
|||
if f is not None and action[1] in f: continue
|
||||
players.add(action[0])
|
||||
return players
|
||||
|
||||
def noBetsBefore(self, street, player):
|
||||
"""Returns true if there were no bets before the specified players turn, false otherwise"""
|
||||
betOrRaise = False
|
||||
for act in self.hand.actions[street]:
|
||||
#Must test for player first in case UTG
|
||||
if act[0] == player:
|
||||
betOrRaise = True
|
||||
break
|
||||
if act[1] in ('bets', 'raises'):
|
||||
break
|
||||
return betOrRaise
|
||||
|
||||
def betStreet(self, street, player):
|
||||
"""Returns true if player bet/raised the street as their first action"""
|
||||
betOrRaise = False
|
||||
for act in self.hand.actions[street]:
|
||||
if act[0] == player and act[1] in ('bets', 'raises'):
|
||||
betOrRaise = True
|
||||
else:
|
||||
break
|
||||
return betOrRaise
|
||||
|
||||
|
||||
def lastBetOrRaiser(self, street):
|
||||
"""Returns player name that placed the last bet or raise for that street.
|
||||
None if there were no bets or raises on that street"""
|
||||
lastbet = None
|
||||
for act in self.hand.actions[street]:
|
||||
if act[1] in ('bets', 'raises'):
|
||||
lastbet = act[0]
|
||||
return lastbet
|
||||
|
|
|
@ -27,5 +27,12 @@ class FpdbMySQLAccessDenied(FpdbDatabaseError):
|
|||
def __str__(self):
|
||||
return repr(self.value +" " + self.errmsg)
|
||||
|
||||
class FpdbMySQLNoDatabase(FpdbDatabaseError):
|
||||
def __init__(self, value='', errmsg=''):
|
||||
self.value = value
|
||||
self.errmsg = errmsg
|
||||
def __str__(self):
|
||||
return repr(self.value +" " + self.errmsg)
|
||||
|
||||
class DuplicateError(FpdbError):
|
||||
pass
|
||||
|
|
|
@ -69,7 +69,7 @@ class Filters(threading.Thread):
|
|||
self.sbGroups = {}
|
||||
self.numHands = 0
|
||||
|
||||
# Outer Packing box
|
||||
# Outer Packing box
|
||||
self.mainVBox = gtk.VBox(False, 0)
|
||||
|
||||
playerFrame = gtk.Frame("Hero:")
|
||||
|
@ -312,9 +312,11 @@ class Filters(threading.Thread):
|
|||
self.cbAllLimits.set_active(False)
|
||||
if not self.limits[limit]:
|
||||
if limit.isdigit():
|
||||
self.cbFL.set_active(False)
|
||||
if self.cbFl is not None:
|
||||
self.cbFl.set_active(False)
|
||||
else:
|
||||
self.cbNL.set_active(False)
|
||||
if self.cbNL is not None:
|
||||
self.cbNL.set_active(False)
|
||||
elif limit == "all":
|
||||
if self.limits[limit]:
|
||||
#for cb in self.cbLimits.values():
|
||||
|
@ -332,7 +334,7 @@ class Filters(threading.Thread):
|
|||
elif limit == "fl":
|
||||
if not self.limits[limit]:
|
||||
# only toggle all fl limits off if they are all currently on
|
||||
# this stops turning one off from cascading into 'fl' box off
|
||||
# this stops turning one off from cascading into 'fl' box off
|
||||
# and then all fl limits being turned off
|
||||
all_fl_on = True
|
||||
for cb in self.cbLimits.values():
|
||||
|
@ -359,7 +361,7 @@ class Filters(threading.Thread):
|
|||
elif limit == "nl":
|
||||
if not self.limits[limit]:
|
||||
# only toggle all nl limits off if they are all currently on
|
||||
# this stops turning one off from cascading into 'nl' box off
|
||||
# this stops turning one off from cascading into 'nl' box off
|
||||
# and then all nl limits being turned off
|
||||
all_nl_on = True
|
||||
for cb in self.cbLimits.values():
|
||||
|
@ -731,11 +733,11 @@ def main(argv=None):
|
|||
gtk.main_quit()
|
||||
|
||||
parser = OptionParser()
|
||||
(options, sys.argv) = parser.parse_args(args = argv)
|
||||
(options, argv) = parser.parse_args(args = argv)
|
||||
|
||||
config = Configuration.Config()
|
||||
db = None
|
||||
|
||||
|
||||
db = fpdb_db.fpdb_db()
|
||||
db.do_connect(config)
|
||||
|
||||
|
@ -750,5 +752,3 @@ def main(argv=None):
|
|||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ class GuiAutoImport (threading.Thread):
|
|||
self.importer.setFailOnError(False)
|
||||
self.importer.setHandCount(0)
|
||||
# self.importer.setWatchTime()
|
||||
|
||||
|
||||
self.server = settings['db-host']
|
||||
self.user = settings['db-user']
|
||||
self.password = settings['db-password']
|
||||
|
@ -63,7 +63,7 @@ class GuiAutoImport (threading.Thread):
|
|||
|
||||
hbox = gtk.HBox(True, 0) # contains 2 equal vboxes
|
||||
self.mainVBox.pack_start(hbox, False, False, 0)
|
||||
|
||||
|
||||
vbox1 = gtk.VBox(True, 0)
|
||||
hbox.pack_start(vbox1, True, True, 0)
|
||||
vbox2 = gtk.VBox(True, 0)
|
||||
|
@ -144,13 +144,13 @@ class GuiAutoImport (threading.Thread):
|
|||
gobject.timeout_add(1000, self.reset_startbutton)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def reset_startbutton(self):
|
||||
if self.pipe_to_hud is not None:
|
||||
self.startButton.set_label(u' _Stop Autoimport ')
|
||||
else:
|
||||
self.startButton.set_label(u' _Start Autoimport ')
|
||||
|
||||
|
||||
return False
|
||||
|
||||
|
||||
|
@ -169,7 +169,7 @@ class GuiAutoImport (threading.Thread):
|
|||
if widget.get_active(): # toggled on
|
||||
# - Does the lock acquisition need to be more sophisticated for multiple dirs?
|
||||
# (see comment above about what to do if pipe already open)
|
||||
# - Ideally we want to release the lock if the auto-import is killed by some
|
||||
# - Ideally we want to release the lock if the auto-import is killed by some
|
||||
# kind of exception - is this possible?
|
||||
if self.settings['global_lock'].acquire(False): # returns false immediately if lock not acquired
|
||||
print "\nGlobal lock taken ..."
|
||||
|
@ -183,7 +183,7 @@ class GuiAutoImport (threading.Thread):
|
|||
command = os.path.join(sys.path[0], 'HUD_main.py')
|
||||
command = [command, ] + string.split(self.settings['cl_options'])
|
||||
bs = 1
|
||||
|
||||
|
||||
try:
|
||||
self.pipe_to_hud = subprocess.Popen(command, bufsize=bs,
|
||||
stdin=subprocess.PIPE,
|
||||
|
@ -191,17 +191,17 @@ class GuiAutoImport (threading.Thread):
|
|||
except:
|
||||
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
||||
print "*** GuiAutoImport Error opening pipe: " + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1])
|
||||
else:
|
||||
else:
|
||||
for site in self.input_settings:
|
||||
self.importer.addImportDirectory(self.input_settings[site][0], True, site, self.input_settings[site][1])
|
||||
print " * Add", site, " import directory", str(self.input_settings[site][0])
|
||||
print "+Import directory - Site: " + site + " dir: " + str(self.input_settings[site][0])
|
||||
self.do_import()
|
||||
self.do_import()
|
||||
interval = int(self.intervalEntry.get_text())
|
||||
if self.importtimer != 0:
|
||||
gobject.source_remove(self.importtimer)
|
||||
self.importtimer = gobject.timeout_add(interval * 1000, self.do_import)
|
||||
|
||||
|
||||
else:
|
||||
print "auto-import aborted - global lock not available"
|
||||
else: # toggled off
|
||||
|
@ -258,7 +258,7 @@ class GuiAutoImport (threading.Thread):
|
|||
vbox1.pack_start(pathHBox1, False, True, 0)
|
||||
pathHBox2 = gtk.HBox(False, 0)
|
||||
vbox2.pack_start(pathHBox2, False, True, 0)
|
||||
|
||||
|
||||
params = self.config.get_site_parameters(site)
|
||||
paths = self.config.get_default_paths(site)
|
||||
self.createSiteLine(pathHBox1, pathHBox2, site, False, paths['hud-defaultPath'], params['converter'], params['enabled'])
|
||||
|
@ -281,7 +281,7 @@ if __name__== "__main__":
|
|||
parser.add_option("-q", "--quiet", action="store_false", dest="gui", default=True, help="don't start gui")
|
||||
parser.add_option("-m", "--minPrint", "--status", dest="minPrint", default="0", type="int",
|
||||
help="How often to print a one-line status report (0 (default) means never)")
|
||||
(options, sys.argv) = parser.parse_args()
|
||||
(options, argv) = parser.parse_args()
|
||||
|
||||
config = Configuration.Config()
|
||||
# db = fpdb_db.fpdb_db()
|
||||
|
@ -305,4 +305,3 @@ if __name__== "__main__":
|
|||
gtk.main()
|
||||
else:
|
||||
pass
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ class GuiBulkImport():
|
|||
def dopulse(self):
|
||||
self.progressbar.pulse()
|
||||
return True
|
||||
|
||||
|
||||
def load_clicked(self, widget, data=None):
|
||||
stored = None
|
||||
dups = None
|
||||
|
@ -58,9 +58,9 @@ class GuiBulkImport():
|
|||
self.progressbar.set_text("Importing...")
|
||||
self.progressbar.pulse()
|
||||
while gtk.events_pending(): # see http://faq.pygtk.org/index.py?req=index for more hints (3.7)
|
||||
gtk.main_iteration(False)
|
||||
gtk.main_iteration(False)
|
||||
self.timer = gobject.timeout_add(100, self.dopulse)
|
||||
|
||||
|
||||
# get the dir to import from the chooser
|
||||
selected = self.chooser.get_filenames()
|
||||
|
||||
|
@ -87,7 +87,7 @@ class GuiBulkImport():
|
|||
else:
|
||||
self.importer.setDropHudCache("auto")
|
||||
sitename = self.cbfilter.get_model()[self.cbfilter.get_active()][0]
|
||||
|
||||
|
||||
for selection in selected:
|
||||
self.importer.addBulkImportImportFileOrDir(selection, site = sitename)
|
||||
self.importer.setCallHud(False)
|
||||
|
@ -99,7 +99,7 @@ class GuiBulkImport():
|
|||
# raise Exceptions.FpdbError
|
||||
# finally:
|
||||
gobject.source_remove(self.timer)
|
||||
|
||||
|
||||
ttime = time() - starttime
|
||||
if ttime == 0:
|
||||
ttime = 1
|
||||
|
@ -324,9 +324,9 @@ def main(argv=None):
|
|||
help="If this option is passed it quits when it encounters any error")
|
||||
parser.add_option("-m", "--minPrint", "--status", dest="minPrint", default="0", type="int",
|
||||
help="How often to print a one-line status report (0 (default) means never)")
|
||||
parser.add_option("-u", "--usage", action="store_true", dest="usage", default=False,
|
||||
parser.add_option("-u", "--usage", action="store_true", dest="usage", default=False,
|
||||
help="Print some useful one liners")
|
||||
(options, sys.argv) = parser.parse_args(args = argv)
|
||||
(options, argv) = parser.parse_args(args = argv)
|
||||
|
||||
if options.usage == True:
|
||||
#Print usage examples and exit
|
||||
|
@ -339,7 +339,7 @@ def main(argv=None):
|
|||
sys.exit(0)
|
||||
|
||||
config = Configuration.Config()
|
||||
|
||||
|
||||
settings = {}
|
||||
settings['minPrint'] = options.minPrint
|
||||
if os.name == 'nt': settings['os'] = 'windows'
|
||||
|
@ -362,7 +362,7 @@ def main(argv=None):
|
|||
gtk.main()
|
||||
else:
|
||||
#Do something useful
|
||||
importer = fpdb_import.Importer(False,settings, config)
|
||||
importer = fpdb_import.Importer(False,settings, config)
|
||||
# importer.setDropIndexes("auto")
|
||||
importer.setDropIndexes("don't drop")
|
||||
importer.setFailOnError(options.failOnError)
|
||||
|
@ -377,4 +377,3 @@ def main(argv=None):
|
|||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
|
||||
|
|
|
@ -152,14 +152,17 @@ class GuiGraphViewer (threading.Thread):
|
|||
if not sitenos:
|
||||
#Should probably pop up here.
|
||||
print "No sites selected - defaulting to PokerStars"
|
||||
self.db.rollback()
|
||||
return
|
||||
|
||||
if not playerids:
|
||||
print "No player ids found"
|
||||
self.db.rollback()
|
||||
return
|
||||
|
||||
if not limits:
|
||||
print "No limits found"
|
||||
self.db.rollback()
|
||||
return
|
||||
|
||||
#Set graph properties
|
||||
|
|
169
pyfpdb/GuiPrefs.py
Executable file
169
pyfpdb/GuiPrefs.py
Executable file
|
@ -0,0 +1,169 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#Copyright 2008 Carl Gherardi
|
||||
#This program is free software: you can redistribute it and/or modify
|
||||
#it under the terms of the GNU Affero General Public License as published by
|
||||
#the Free Software Foundation, version 3 of the License.
|
||||
#
|
||||
#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 Affero General Public License
|
||||
#along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#In the "official" distribution you can find the license in
|
||||
#agpl-3.0.txt in the docs folder of the package.
|
||||
|
||||
|
||||
import xml.dom.minidom
|
||||
from xml.dom.minidom import Node
|
||||
|
||||
import pygtk
|
||||
pygtk.require('2.0')
|
||||
import gtk
|
||||
import gobject
|
||||
|
||||
import Configuration
|
||||
|
||||
|
||||
class GuiPrefs:
|
||||
|
||||
def __init__(self, config, mainwin, dia):
|
||||
self.config = config
|
||||
self.main_window = mainwin
|
||||
self.dialog = dia
|
||||
|
||||
self.tree_box = gtk.ScrolledWindow()
|
||||
self.tree_box.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
||||
|
||||
self.dialog.add(self.tree_box)
|
||||
self.dialog.show()
|
||||
|
||||
self.doc = None
|
||||
self.configStore = None
|
||||
self.configView = None
|
||||
|
||||
self.fillFrames()
|
||||
|
||||
def fillFrames(self):
|
||||
self.doc = self.config.get_doc()
|
||||
|
||||
self.configStore = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING, gobject.TYPE_STRING)
|
||||
self.configView = gtk.TreeView(self.configStore)
|
||||
self.configView.set_enable_tree_lines(True)
|
||||
|
||||
configColumn = gtk.TreeViewColumn("Setting")
|
||||
self.configView.append_column(configColumn)
|
||||
cRender = gtk.CellRendererText()
|
||||
configColumn.pack_start(cRender, True)
|
||||
configColumn.add_attribute(cRender, 'text', 1)
|
||||
|
||||
configColumn = gtk.TreeViewColumn("Value")
|
||||
self.configView.append_column(configColumn)
|
||||
cRender = gtk.CellRendererText()
|
||||
configColumn.pack_start(cRender, True)
|
||||
configColumn.add_attribute(cRender, 'text', 2)
|
||||
|
||||
if self.doc.documentElement.tagName == 'FreePokerToolsConfig':
|
||||
self.configStore.clear()
|
||||
self.root = self.configStore.append( None, [self.doc.documentElement, "fpdb", None] )
|
||||
for elem in self.doc.documentElement.childNodes:
|
||||
iter = self.addTreeRows(self.root, elem)
|
||||
if self.root != None:
|
||||
self.configView.expand_row(self.configStore.get_path(self.root), False)
|
||||
self.configView.connect("row-activated", self.rowChosen)
|
||||
self.configView.show()
|
||||
self.tree_box.add(self.configView)
|
||||
self.tree_box.show()
|
||||
self.dialog.show()
|
||||
|
||||
def addTreeRows(self, parent, node):
|
||||
if (node.nodeType == node.ELEMENT_NODE):
|
||||
(setting, value) = (node.nodeName, None)
|
||||
elif (node.nodeType == node.TEXT_NODE):
|
||||
# text nodes hold the whitespace (or whatever) between the xml elements, not used here
|
||||
(setting, value) = ("TEXT: ["+node.nodeValue+"|"+node.nodeValue+"]", node.data)
|
||||
else:
|
||||
(setting, value) = ("?? "+node.nodeValue, "type="+str(node.nodeType))
|
||||
|
||||
#iter = self.configStore.append( parent, [node.nodeValue, None] )
|
||||
iter = None
|
||||
if node.nodeType != node.TEXT_NODE and node.nodeType != node.COMMENT_NODE:
|
||||
iter = self.configStore.append( parent, [node, setting, value] )
|
||||
if node.hasAttributes():
|
||||
for i in xrange(node.attributes.length):
|
||||
self.configStore.append( iter, [node, node.attributes.item(i).localName, node.attributes.item(i).value] )
|
||||
if node.hasChildNodes():
|
||||
for elem in node.childNodes:
|
||||
self.addTreeRows(iter, elem)
|
||||
return iter
|
||||
|
||||
def rowChosen(self, tview, path, something2, data=None):
|
||||
# tview should= self.configStore
|
||||
tmodel = tview.get_model()
|
||||
iter = tmodel.get_iter(path)
|
||||
if tmodel.iter_has_child(iter):
|
||||
# toggle children display
|
||||
if tview.row_expanded(path):
|
||||
tview.collapse_row(tmodel.get_path(iter))
|
||||
else:
|
||||
tview.expand_row(tmodel.get_path(iter), False)
|
||||
else:
|
||||
# display value and allow edit
|
||||
name = tmodel.get_value( iter, 1 )
|
||||
val = tmodel.get_value( iter, 2 )
|
||||
dia_edit = gtk.Dialog(name,
|
||||
self.main_window,
|
||||
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
|
||||
gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
|
||||
#dia_edit.set_default_size(350, 100)
|
||||
entry = gtk.Entry()
|
||||
if val:
|
||||
entry.set_text(val)
|
||||
entry.set_width_chars(40)
|
||||
dia_edit.vbox.pack_start(entry, False, False, 0)
|
||||
entry.show()
|
||||
entry.connect("activate", self.__set_entry, dia_edit)
|
||||
response = dia_edit.run()
|
||||
if response == gtk.RESPONSE_ACCEPT:
|
||||
# update configStore
|
||||
new_val = entry.get_text()
|
||||
tmodel.set_value(iter, 2, new_val)
|
||||
tmodel.get_value(iter, 0).setAttribute(name, new_val)
|
||||
dia_edit.destroy()
|
||||
|
||||
def __set_entry(self, w, dia=None):
|
||||
if dia is not None:
|
||||
dia.response(gtk.RESPONSE_ACCEPT)
|
||||
|
||||
|
||||
|
||||
if __name__=="__main__":
|
||||
|
||||
config = Configuration.Config()
|
||||
|
||||
win = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
win.set_title("Test Preferences Dialog")
|
||||
win.set_border_width(1)
|
||||
win.set_default_size(600, 500)
|
||||
win.set_resizable(True)
|
||||
|
||||
dia = gtk.Dialog("Preferences",
|
||||
win,
|
||||
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
|
||||
gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT))
|
||||
dia.set_default_size(500, 500)
|
||||
prefs = GuiPrefs(config, win, dia.vbox)
|
||||
response = dia.run()
|
||||
if response == gtk.RESPONSE_ACCEPT:
|
||||
# save updated config
|
||||
config.save()
|
||||
dia.destroy()
|
||||
|
||||
|
||||
|
||||
|
581
pyfpdb/HUD_config.test.xml
Normal file
581
pyfpdb/HUD_config.test.xml
Normal file
|
@ -0,0 +1,581 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
|
||||
<FreePokerToolsConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FreePokerToolsConfig.xsd">
|
||||
|
||||
<import callFpdbHud = "True" interval = "10" fastStoreHudCache="False" hhArchiveBase="~/.fpdb/HandHistories/" saveActions="True"></import>
|
||||
|
||||
<!-- These values determine what stats are displayed in the HUD
|
||||
|
||||
The following values define how opponents' stats are done, the first 2 determine
|
||||
the time period stats are displayed for, the next 3 determine what blind levels
|
||||
are included (i.e. aggregated):
|
||||
|
||||
stat_range :
|
||||
- A/S/T
|
||||
- if set to A, includes stats from all time
|
||||
- if set to S, includes stats from current session
|
||||
- if set to T, includes stats from last N days; set value in stat_days
|
||||
- defaults to A
|
||||
|
||||
stat_days :
|
||||
- a numeric value
|
||||
- only used if stat_range is set to 'T', this value tells how many days are
|
||||
included in the stat calculation
|
||||
- defaults to 90
|
||||
- value not used by default as it depends on stat_range setting
|
||||
|
||||
aggregate_ring_game_stats :
|
||||
- True/False
|
||||
- if set to True, opponents stats include other blind levels during ring games
|
||||
- defaults to False
|
||||
|
||||
aggregate_tourney_stats :
|
||||
- True/False
|
||||
- if set to True, opponents stats include other blind levels during tourneys
|
||||
- defaults to True
|
||||
|
||||
aggregation_level_multiplier :
|
||||
- float value
|
||||
- defines how many blind levels are included in stats displayed in HUD
|
||||
- if value is M, stats for blind levels are combined if the higher level
|
||||
is less than or equal to M times the lower blind level
|
||||
- defaults to 3, meaning blind levels from 1/3 of the current level to 3
|
||||
times the current level are included in the stats displayed in the HUD
|
||||
- e.g. if current big blind is 50, stats for blind levels from big blind
|
||||
of 16.7 (50 divided by 3) to big blind of 150 (50 times 3) are included
|
||||
|
||||
|
||||
The following values define how hero's stats are done, the first 2 determine
|
||||
the time period stats are displayed for, the next 3 determine what blind levels
|
||||
are included (i.e. aggregated):
|
||||
|
||||
hero_stat_range :
|
||||
- A/S/T
|
||||
- if set to A, includes stats from all time
|
||||
- if set to S, includes stats from current session
|
||||
- if set to T, includes stats from last N days; set value in hero_stat_days
|
||||
- defaults to S
|
||||
|
||||
hero_stat_days :
|
||||
- a numeric value
|
||||
- if hero_stat_range is set to 'T', this value tells how many days are
|
||||
included in the stat calculation
|
||||
- defaults to 30
|
||||
- value not used by default as it depends on hero_stat_range setting
|
||||
|
||||
aggregate_hero_ring_game_stats :
|
||||
- True/False
|
||||
- if set to True, hero's stats are calculated over multiple blind levels
|
||||
- defaults to False
|
||||
|
||||
aggregate_hero_tourney_stats :
|
||||
- True/False
|
||||
- if set to True, hero's stats are calculated over multiple blind levels
|
||||
- defaults to False
|
||||
|
||||
hero_aggregation_level_multiplier :
|
||||
- float value
|
||||
- defines how many blind levels are included in stats displayed in HUD
|
||||
- if value is M, stats for blind levels are combined if the higher level
|
||||
is less than or equal to M times the lower blind level
|
||||
- defaults to 1, meaning only stats from current blind level are included
|
||||
- e.g. if set to 3 and current big blind is 50, stats for blind levels from
|
||||
16.7 (50 divided by 3) to big blind of 150 (50 times 3) are included
|
||||
-->
|
||||
<hud_ui
|
||||
stat_range="A"
|
||||
stat_days="90"
|
||||
aggregate_ring_game_stats="False"
|
||||
aggregate_tourney_stats="True"
|
||||
aggregation_level_multiplier="3"
|
||||
|
||||
hero_stat_range="S"
|
||||
hero_stat_days="30"
|
||||
aggregate_hero_ring_game_stats="False"
|
||||
aggregate_hero_tourney_stats="False"
|
||||
hero_aggregation_level_multiplier="1"
|
||||
|
||||
label="FPDB Menu - Right-click
|
||||
Left-Drag to Move"
|
||||
/>
|
||||
|
||||
<supported_sites>
|
||||
|
||||
<site enabled="True"
|
||||
site_name="PokerStars"
|
||||
table_finder="PokerStars.exe"
|
||||
screen_name="YOUR SCREEN NAME HERE"
|
||||
site_path="C:/Program Files/PokerStars/"
|
||||
HH_path="C:/Program Files/PokerStars/HandHistory/YOUR SCREEN NAME HERE/"
|
||||
decoder="pokerstars_decode_table"
|
||||
converter="PokerStarsToFpdb"
|
||||
bgcolor="#000000"
|
||||
fgcolor="#FFFFFF"
|
||||
hudopacity="1.0"
|
||||
font="Sans"
|
||||
font_size="8"
|
||||
supported_games="holdem,razz,omahahi,omahahilo,studhi,studhilo">
|
||||
<layout max="8" width="792" height="546" fav_seat="0">
|
||||
<location seat="1" x="684" y="61"> </location>
|
||||
<location seat="2" x="689" y="239"> </location>
|
||||
<location seat="3" x="692" y="346"> </location>
|
||||
<location seat="4" x="525" y="402"> </location>
|
||||
<location seat="5" x="259" y="402"> </location>
|
||||
<location seat="6" x="0" y="348"> </location>
|
||||
<location seat="7" x="0" y="240"> </location>
|
||||
<location seat="8" x="0" y="35"> </location>
|
||||
</layout>
|
||||
<layout max="6" width="792" height="546" fav_seat="0">
|
||||
<location seat="1" x="681" y="119"> </location>
|
||||
<location seat="2" x="681" y="301"> </location>
|
||||
<location seat="3" x="487" y="369"> </location>
|
||||
<location seat="4" x="226" y="369"> </location>
|
||||
<location seat="5" x="0" y="301"> </location>
|
||||
<location seat="6" x="0" y="119"> </location>
|
||||
</layout>
|
||||
<layout max="10" width="792" height="546" fav_seat="0">
|
||||
<location seat="1" x="684" y="61"> </location>
|
||||
<location seat="2" x="689" y="239"> </location>
|
||||
<location seat="3" x="692" y="346"> </location>
|
||||
<location seat="4" x="586" y="393"> </location>
|
||||
<location seat="5" x="421" y="440"> </location>
|
||||
<location seat="6" x="267" y="440"> </location>
|
||||
<location seat="7" x="0" y="361"> </location>
|
||||
<location seat="8" x="0" y="280"> </location>
|
||||
<location seat="9" x="121" y="280"> </location>
|
||||
<location seat="10" x="46" y="30"> </location>
|
||||
</layout>
|
||||
<layout max="9" width="792" height="546" fav_seat="0">
|
||||
<location seat="1" x="560" y="0"> </location>
|
||||
<location seat="2" x="679" y="123"> </location>
|
||||
<location seat="3" x="688" y="309"> </location>
|
||||
<location seat="4" x="483" y="370"> </location>
|
||||
<location seat="5" x="444" y="413"> </location>
|
||||
<location seat="6" x="224" y="372"> </location>
|
||||
<location seat="7" x="0" y="307"> </location>
|
||||
<location seat="8" x="0" y="121"> </location>
|
||||
<location seat="9" x="140" y="0"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="546" max="2" width="792">
|
||||
<location seat="1" x="651" y="288"> </location>
|
||||
<location seat="2" x="10" y="288"> </location>
|
||||
</layout>
|
||||
</site>
|
||||
|
||||
<site enabled="True"
|
||||
site_name="Full Tilt Poker"
|
||||
table_finder="FullTiltPoker"
|
||||
screen_name="YOUR SCREEN NAME HERE"
|
||||
site_path="C:/Program Files/Full Tilt Poker/"
|
||||
HH_path="C:/Program Files/Full Tilt Poker/HandHistory/YOUR SCREEN NAME HERE/"
|
||||
decoder="fulltilt_decode_table"
|
||||
converter="FulltiltToFpdb"
|
||||
bgcolor="#000000"
|
||||
fgcolor="#FFFFFF"
|
||||
hudopacity="1.0"
|
||||
font="Sans"
|
||||
font_size="8"
|
||||
supported_games="holdem,razz,omahahi,omahahilo,studhi,studhilo">
|
||||
<layout fav_seat="0" height="547" max="8" width="794">
|
||||
<location seat="1" x="640" y="64"> </location>
|
||||
<location seat="2" x="650" y="230"> </location>
|
||||
<location seat="3" x="650" y="385"> </location>
|
||||
<location seat="4" x="588" y="425"> </location>
|
||||
<location seat="5" x="92" y="425"> </location>
|
||||
<location seat="6" x="0" y="373"> </location>
|
||||
<location seat="7" x="0" y="223"> </location>
|
||||
<location seat="8" x="25" y="50"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="6" width="794">
|
||||
<location seat="1" x="640" y="58"> </location>
|
||||
<location seat="2" x="654" y="288"> </location>
|
||||
<location seat="3" x="615" y="424"> </location>
|
||||
<location seat="4" x="70" y="421"> </location>
|
||||
<location seat="5" x="0" y="280"> </location>
|
||||
<location seat="6" x="70" y="58"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="2" width="794">
|
||||
<location seat="1" x="651" y="288"> </location>
|
||||
<location seat="2" x="10" y="288"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="9" width="794">
|
||||
<location seat="1" x="634" y="38"> </location>
|
||||
<location seat="2" x="667" y="184"> </location>
|
||||
<location seat="3" x="667" y="321"> </location>
|
||||
<location seat="4" x="667" y="445"> </location>
|
||||
<location seat="5" x="337" y="459"> </location>
|
||||
<location seat="6" x="0" y="400"> </location>
|
||||
<location seat="7" x="0" y="322"> </location>
|
||||
<location seat="8" x="0" y="181"> </location>
|
||||
<location seat="9" x="70" y="53"> </location>
|
||||
</layout>
|
||||
</site>
|
||||
|
||||
<site enabled="False"
|
||||
site_name="Everleaf"
|
||||
table_finder="Everleaf.exe"
|
||||
screen_name="YOUR SCREEN NAME HERE"
|
||||
site_path=""
|
||||
HH_path=""
|
||||
decoder="everleaf_decode_table"
|
||||
converter="EverleafToFpdb"
|
||||
supported_games="holdem">
|
||||
<layout fav_seat="0" height="547" max="8" width="794">
|
||||
<location seat="1" x="640" y="64"> </location>
|
||||
<location seat="2" x="650" y="230"> </location>
|
||||
<location seat="3" x="650" y="385"> </location>
|
||||
<location seat="4" x="588" y="425"> </location>
|
||||
<location seat="5" x="92" y="425"> </location>
|
||||
<location seat="6" x="0" y="373"> </location>
|
||||
<location seat="7" x="0" y="223"> </location>
|
||||
<location seat="8" x="25" y="50"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="6" width="794">
|
||||
<location seat="1" x="640" y="58"> </location>
|
||||
<location seat="2" x="654" y="288"> </location>
|
||||
<location seat="3" x="615" y="424"> </location>
|
||||
<location seat="4" x="70" y="421"> </location>
|
||||
<location seat="5" x="0" y="280"> </location>
|
||||
<location seat="6" x="70" y="58"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="2" width="794">
|
||||
<location seat="1" x="651" y="288"> </location>
|
||||
<location seat="2" x="10" y="288"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="9" width="794">
|
||||
<location seat="1" x="634" y="38"> </location>
|
||||
<location seat="2" x="667" y="184"> </location>
|
||||
<location seat="3" x="667" y="321"> </location>
|
||||
<location seat="4" x="667" y="445"> </location>
|
||||
<location seat="5" x="337" y="459"> </location>
|
||||
<location seat="6" x="0" y="400"> </location>
|
||||
<location seat="7" x="0" y="322"> </location>
|
||||
<location seat="8" x="0" y="181"> </location>
|
||||
<location seat="9" x="70" y="53"> </location>
|
||||
</layout>
|
||||
</site>
|
||||
|
||||
<site enabled="False"
|
||||
site_name="Win2day"
|
||||
table_finder="Win2day.exe"
|
||||
screen_name="YOUR SCREEN NAME HERE"
|
||||
site_path=""
|
||||
HH_path=""
|
||||
decoder="everleaf_decode_table"
|
||||
converter="Win2dayToFpdb"
|
||||
supported_games="holdem">
|
||||
<layout fav_seat="0" height="547" max="8" width="794">
|
||||
<location seat="1" x="640" y="64"> </location>
|
||||
<location seat="2" x="650" y="230"> </location>
|
||||
<location seat="3" x="650" y="385"> </location>
|
||||
<location seat="4" x="588" y="425"> </location>
|
||||
<location seat="5" x="92" y="425"> </location>
|
||||
<location seat="6" x="0" y="373"> </location>
|
||||
<location seat="7" x="0" y="223"> </location>
|
||||
<location seat="8" x="25" y="50"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="6" width="794">
|
||||
<location seat="1" x="640" y="58"> </location>
|
||||
<location seat="2" x="654" y="288"> </location>
|
||||
<location seat="3" x="615" y="424"> </location>
|
||||
<location seat="4" x="70" y="421"> </location>
|
||||
<location seat="5" x="0" y="280"> </location>
|
||||
<location seat="6" x="70" y="58"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="2" width="794">
|
||||
<location seat="1" x="651" y="288"> </location>
|
||||
<location seat="2" x="10" y="288"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="9" width="794">
|
||||
<location seat="1" x="634" y="38"> </location>
|
||||
<location seat="2" x="667" y="184"> </location>
|
||||
<location seat="3" x="667" y="321"> </location>
|
||||
<location seat="4" x="667" y="445"> </location>
|
||||
<location seat="5" x="337" y="459"> </location>
|
||||
<location seat="6" x="0" y="400"> </location>
|
||||
<location seat="7" x="0" y="322"> </location>
|
||||
<location seat="8" x="0" y="181"> </location>
|
||||
<location seat="9" x="70" y="53"> </location>
|
||||
</layout>
|
||||
</site>
|
||||
|
||||
|
||||
<site enabled="False"
|
||||
site_name="Absolute"
|
||||
table_finder="AbsolutePoker.exe"
|
||||
screen_name="YOUR SCREEN NAME HERE"
|
||||
site_path=""
|
||||
HH_path=""
|
||||
decoder="everleaf_decode_table"
|
||||
converter="AbsoluteToFpdb"
|
||||
supported_games="holdem">
|
||||
<layout fav_seat="0" height="547" max="8" width="794">
|
||||
<location seat="1" x="640" y="64"> </location>
|
||||
<location seat="2" x="650" y="230"> </location>
|
||||
<location seat="3" x="650" y="385"> </location>
|
||||
<location seat="4" x="588" y="425"> </location>
|
||||
<location seat="5" x="92" y="425"> </location>
|
||||
<location seat="6" x="0" y="373"> </location>
|
||||
<location seat="7" x="0" y="223"> </location>
|
||||
<location seat="8" x="25" y="50"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="6" width="794">
|
||||
<location seat="1" x="640" y="58"> </location>
|
||||
<location seat="2" x="654" y="288"> </location>
|
||||
<location seat="3" x="615" y="424"> </location>
|
||||
<location seat="4" x="70" y="421"> </location>
|
||||
<location seat="5" x="0" y="280"> </location>
|
||||
<location seat="6" x="70" y="58"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="2" width="794">
|
||||
<location seat="1" x="651" y="288"> </location>
|
||||
<location seat="2" x="10" y="288"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="9" width="794">
|
||||
<location seat="1" x="634" y="38"> </location>
|
||||
<location seat="2" x="667" y="184"> </location>
|
||||
<location seat="3" x="667" y="321"> </location>
|
||||
<location seat="4" x="667" y="445"> </location>
|
||||
<location seat="5" x="337" y="459"> </location>
|
||||
<location seat="6" x="0" y="400"> </location>
|
||||
<location seat="7" x="0" y="322"> </location>
|
||||
<location seat="8" x="0" y="181"> </location>
|
||||
<location seat="9" x="70" y="53"> </location>
|
||||
</layout>
|
||||
</site>
|
||||
|
||||
|
||||
<site enabled="False"
|
||||
site_name="PartyPoker"
|
||||
table_finder="PartyGaming.exe"
|
||||
screen_name="YOUR SCREEN NAME HERE"
|
||||
site_path="C:/Program Files/PartyGaming/PartyPoker"
|
||||
HH_path="C:/Program Files/PartyGaming/PartyPoker/HandHistory/YOUR SCREEN NAME HERE/"
|
||||
decoder="everleaf_decode_table"
|
||||
converter="PartyPokerToFpdb"
|
||||
supported_games="holdem">
|
||||
<layout fav_seat="0" height="547" max="8" width="794">
|
||||
<location seat="1" x="640" y="64"> </location>
|
||||
<location seat="2" x="650" y="230"> </location>
|
||||
<location seat="3" x="650" y="385"> </location>
|
||||
<location seat="4" x="588" y="425"> </location>
|
||||
<location seat="5" x="92" y="425"> </location>
|
||||
<location seat="6" x="0" y="373"> </location>
|
||||
<location seat="7" x="0" y="223"> </location>
|
||||
<location seat="8" x="25" y="50"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="6" width="794">
|
||||
<location seat="1" x="640" y="58"> </location>
|
||||
<location seat="2" x="654" y="288"> </location>
|
||||
<location seat="3" x="615" y="424"> </location>
|
||||
<location seat="4" x="70" y="421"> </location>
|
||||
<location seat="5" x="0" y="280"> </location>
|
||||
<location seat="6" x="70" y="58"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="2" width="794">
|
||||
<location seat="1" x="651" y="288"> </location>
|
||||
<location seat="2" x="10" y="288"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="9" width="794">
|
||||
<location seat="1" x="634" y="38"> </location>
|
||||
<location seat="2" x="667" y="184"> </location>
|
||||
<location seat="3" x="667" y="321"> </location>
|
||||
<location seat="4" x="667" y="445"> </location>
|
||||
<location seat="5" x="337" y="459"> </location>
|
||||
<location seat="6" x="0" y="400"> </location>
|
||||
<location seat="7" x="0" y="322"> </location>
|
||||
<location seat="8" x="0" y="181"> </location>
|
||||
<location seat="9" x="70" y="53"> </location>
|
||||
</layout>
|
||||
</site>
|
||||
|
||||
|
||||
<site enabled="False"
|
||||
site_name="Betfair"
|
||||
table_finder="Betfair Poker.exe"
|
||||
screen_name="YOUR SCREEN NAME HERE"
|
||||
site_path="C:/Program Files/Betfair/Betfair Poker/"
|
||||
HH_path="C:/Program Files/Betfair/Betfair Poker/HandHistory/YOUR SCREEN NAME HERE/"
|
||||
decoder="everleaf_decode_table"
|
||||
converter="BetfairToFpdb"
|
||||
supported_games="holdem">
|
||||
<layout fav_seat="0" height="547" max="8" width="794">
|
||||
<location seat="1" x="640" y="64"> </location>
|
||||
<location seat="2" x="650" y="230"> </location>
|
||||
<location seat="3" x="650" y="385"> </location>
|
||||
<location seat="4" x="588" y="425"> </location>
|
||||
<location seat="5" x="92" y="425"> </location>
|
||||
<location seat="6" x="0" y="373"> </location>
|
||||
<location seat="7" x="0" y="223"> </location>
|
||||
<location seat="8" x="25" y="50"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="6" width="794">
|
||||
<location seat="1" x="640" y="58"> </location>
|
||||
<location seat="2" x="654" y="288"> </location>
|
||||
<location seat="3" x="615" y="424"> </location>
|
||||
<location seat="4" x="70" y="421"> </location>
|
||||
<location seat="5" x="0" y="280"> </location>
|
||||
<location seat="6" x="70" y="58"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="2" width="794">
|
||||
<location seat="1" x="651" y="288"> </location>
|
||||
<location seat="2" x="10" y="288"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="9" width="794">
|
||||
<location seat="1" x="634" y="38"> </location>
|
||||
<location seat="2" x="667" y="184"> </location>
|
||||
<location seat="3" x="667" y="321"> </location>
|
||||
<location seat="4" x="667" y="445"> </location>
|
||||
<location seat="5" x="337" y="459"> </location>
|
||||
<location seat="6" x="0" y="400"> </location>
|
||||
<location seat="7" x="0" y="322"> </location>
|
||||
<location seat="8" x="0" y="181"> </location>
|
||||
<location seat="9" x="70" y="53"> </location>
|
||||
</layout>
|
||||
</site>
|
||||
</supported_sites>
|
||||
|
||||
<supported_games>
|
||||
|
||||
<game cols="3" db="fpdb" game_name="holdem" rows="2" aux="mucked">
|
||||
<stat click="tog_decorate" col="0" popup="default" row="0" stat_name="vpip" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="0" stat_name="pfr" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="0" stat_name="ffreq1" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="0" popup="default" row="1" stat_name="n" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="1" stat_name="wtsd" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="1" stat_name="wmsd" tip="tip1"> </stat>
|
||||
</game>
|
||||
|
||||
<game cols="3" db="fpdb" game_name="razz" rows="2" aux="stud_mucked">
|
||||
<stat click="tog_decorate" col="0" popup="default" row="0" stat_name="vpip" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="0" stat_name="pfr" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="0" stat_name="ffreq1" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="0" popup="default" row="1" stat_name="n" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="1" stat_name="wtsd" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="1" stat_name="wmsd" tip="tip1"> </stat>
|
||||
</game>
|
||||
|
||||
<game cols="3" db="fpdb" game_name="omahahi" rows="2" aux="mucked">
|
||||
<stat click="tog_decorate" col="0" popup="default" row="0" stat_name="vpip" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="0" stat_name="pfr" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="0" stat_name="ffreq1" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="0" popup="default" row="1" stat_name="n" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="1" stat_name="wtsd" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="1" stat_name="wmsd" tip="tip1"> </stat>
|
||||
</game>
|
||||
|
||||
<game cols="3" db="fpdb" game_name="omahahilo" rows="2" aux="mucked">
|
||||
<stat click="tog_decorate" col="0" popup="default" row="0" stat_name="vpip" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="0" stat_name="pfr" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="0" stat_name="ffreq1" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="0" popup="default" row="1" stat_name="n" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="1" stat_name="wtsd" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="1" stat_name="wmsd" tip="tip1"> </stat>
|
||||
</game>
|
||||
|
||||
<game cols="3" db="fpdb" game_name="studhi" rows="2" aux="stud_mucked">
|
||||
<stat click="tog_decorate" col="0" popup="default" row="0" stat_name="vpip" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="0" stat_name="pfr" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="0" stat_name="ffreq1" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="0" popup="default" row="1" stat_name="n" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="1" stat_name="wtsd" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="1" stat_name="wmsd" tip="tip1"> </stat>
|
||||
</game>
|
||||
|
||||
<game cols="3" db="fpdb" game_name="studhilo" rows="2" aux="stud_mucked">
|
||||
<stat click="tog_decorate" col="0" popup="default" row="0" stat_name="vpip" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="0" stat_name="pfr" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="0" stat_name="ffreq1" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="0" popup="default" row="1" stat_name="n" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="1" popup="default" row="1" stat_name="wtsd" tip="tip1"> </stat>
|
||||
<stat click="tog_decorate" col="2" popup="default" row="1" stat_name="wmsd" tip="tip1"> </stat>
|
||||
</game>
|
||||
</supported_games>
|
||||
|
||||
<popup_windows>
|
||||
<pu pu_name="default">
|
||||
<pu_stat pu_stat_name="n"> </pu_stat>
|
||||
<pu_stat pu_stat_name="vpip"> </pu_stat>
|
||||
<pu_stat pu_stat_name="pfr"> </pu_stat>
|
||||
<pu_stat pu_stat_name="three_B_0"> </pu_stat>
|
||||
<pu_stat pu_stat_name="steal"> </pu_stat>
|
||||
<pu_stat pu_stat_name="f_BB_steal"> </pu_stat>
|
||||
<pu_stat pu_stat_name="f_SB_steal"> </pu_stat>
|
||||
<pu_stat pu_stat_name="wmsd"> </pu_stat>
|
||||
<pu_stat pu_stat_name="wtsd"> </pu_stat>
|
||||
<pu_stat pu_stat_name="WMsF"> </pu_stat>
|
||||
<pu_stat pu_stat_name="a_freq1"> </pu_stat>
|
||||
<pu_stat pu_stat_name="a_freq2"> </pu_stat>
|
||||
<pu_stat pu_stat_name="a_freq3"> </pu_stat>
|
||||
<pu_stat pu_stat_name="a_freq4"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb1"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb2"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb3"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb4"> </pu_stat>
|
||||
<pu_stat pu_stat_name="ffreq1"> </pu_stat>
|
||||
<pu_stat pu_stat_name="ffreq2"> </pu_stat>
|
||||
<pu_stat pu_stat_name="ffreq3"> </pu_stat>
|
||||
<pu_stat pu_stat_name="ffreq4"> </pu_stat>
|
||||
</pu>
|
||||
</popup_windows>
|
||||
|
||||
<aux_windows>
|
||||
<aw card_ht="42" card_wd="30" class="Stud_mucked" cols="11" deck="Cards01.png" module="Mucked" name="stud_mucked" rows="8"> </aw>
|
||||
<aw class="Hello" module="Hello" name="Hello"> </aw>
|
||||
<aw class="Hello_Menu" module="Hello" name="Hello_menu"> </aw>
|
||||
<aw class="Hello_plus" module="Hello" name="Hello_plus"> </aw>
|
||||
<aw card_ht="42" card_wd="30" class="Flop_Mucked" deck="Cards01.png" module="Mucked" name="mucked" opacity="0.7" timeout="5">
|
||||
<layout height="546" max="6" width="792">
|
||||
<location seat="1" x="555" y="169"> </location>
|
||||
<location seat="2" x="572" y="276"> </location>
|
||||
<location seat="3" x="363" y="348"> </location>
|
||||
<location seat="4" x="150" y="273"> </location>
|
||||
<location seat="5" x="150" y="169"> </location>
|
||||
<location seat="6" x="363" y="113"> </location>
|
||||
<location common="1" x="323" y="232"> </location>
|
||||
</layout>
|
||||
<layout height="546" max="9" width="792">
|
||||
<location seat="1" x="486" y="113"> </location>
|
||||
<location seat="2" x="555" y="169"> </location>
|
||||
<location seat="3" x="572" y="276"> </location>
|
||||
<location seat="4" x="522" y="345"> </location>
|
||||
<location seat="5" x="363" y="348"> </location>
|
||||
<location seat="6" x="217" y="341"> </location>
|
||||
<location seat="7" x="150" y="273"> </location>
|
||||
<location seat="8" x="150" y="169"> </location>
|
||||
<location seat="9" x="230" y="115"> </location>
|
||||
<location common="1" x="323" y="232"> </location>
|
||||
</layout>
|
||||
<layout height="546" max="10" width="792">
|
||||
<location seat="1" x="486" y="113"> </location>
|
||||
<location seat="2" x="499" y="138"> </location>
|
||||
<location seat="3" x="522" y="212"> </location>
|
||||
<location seat="4" x="501" y="281"> </location>
|
||||
<location seat="5" x="402" y="323"> </location>
|
||||
<location seat="6" x="243" y="311"> </location>
|
||||
<location seat="7" x="203" y="262"> </location>
|
||||
<location seat="8" x="170" y="185"> </location>
|
||||
<location seat="9" x="183" y="128"> </location>
|
||||
<location seat="10" x="213" y="86"> </location>
|
||||
<location common="1" x="317" y="237"> </location>
|
||||
</layout>
|
||||
</aw>
|
||||
</aux_windows>
|
||||
|
||||
<hhcs>
|
||||
<hhc site="PokerStars" converter="PokerStarsToFpdb"/>
|
||||
<hhc site="Full Tilt Poker" converter="FulltiltToFpdb"/>
|
||||
<hhc site="Everleaf" converter="EverleafToFpdb"/>
|
||||
<hhc site="Win2day" converter="Win2dayToFpdb"/>
|
||||
<hhc site="Absolute" converter="AbsoluteToFpdb"/>
|
||||
<hhc site="PartyPoker" converter="PartyPokerToFpdb"/>
|
||||
<hhc site="Betfair" converter="BetfairToFpdb"/>
|
||||
<hhc site="Partouche" converter="PartoucheToFpdb"/>
|
||||
</hhcs>
|
||||
|
||||
<supported_databases>
|
||||
<database db_ip="localhost" db_name=":memory:" db_pass="fpdb" db_server="sqlite" db_user="fpdb"/>
|
||||
</supported_databases>
|
||||
|
||||
</FreePokerToolsConfig>
|
||||
|
|
@ -129,9 +129,9 @@ class HUD_main(object):
|
|||
m.update_gui(new_hand_id)
|
||||
self.hud_dict[table_name].update(new_hand_id, self.config)
|
||||
self.hud_dict[table_name].reposition_windows()
|
||||
return False
|
||||
finally:
|
||||
gtk.gdk.threads_leave()
|
||||
return False
|
||||
|
||||
self.hud_dict[table_name] = Hud.Hud(self, table, max, poker_game, self.config, self.db_connection)
|
||||
self.hud_dict[table_name].table_name = table_name
|
||||
|
@ -166,9 +166,13 @@ class HUD_main(object):
|
|||
# function idle_func() to be run by the gui thread, at its leisure.
|
||||
def idle_func():
|
||||
gtk.gdk.threads_enter()
|
||||
try:
|
||||
self.hud_dict[table_name].update(new_hand_id, config)
|
||||
self.hud_dict[table_name].update(new_hand_id, config)
|
||||
# The HUD could get destroyed in the above call ^^, which leaves us with a KeyError here vv
|
||||
# if we ever get an error we need to expect ^^ then we need to handle it vv - Eric
|
||||
try:
|
||||
[aw.update_gui(new_hand_id) for aw in self.hud_dict[table_name].aux_windows]
|
||||
except KeyError:
|
||||
pass
|
||||
finally:
|
||||
gtk.gdk.threads_leave()
|
||||
return False
|
||||
|
@ -204,7 +208,7 @@ class HUD_main(object):
|
|||
# get basic info about the new hand from the db
|
||||
# if there is a db error, complain, skip hand, and proceed
|
||||
try:
|
||||
(table_name, max, poker_game, type, site_id, site_name, tour_number, tab_number) = \
|
||||
(table_name, max, poker_game, type, site_id, site_name, num_seats, tour_number, tab_number) = \
|
||||
self.db_connection.get_table_info(new_hand_id)
|
||||
except Exception, err:
|
||||
self.log.error("db error: skipping %s" % new_hand_id)
|
||||
|
@ -220,8 +224,16 @@ class HUD_main(object):
|
|||
# get stats using hud's specific params and get cards
|
||||
self.db_connection.init_hud_stat_vars( self.hud_dict[temp_key].hud_params['hud_days']
|
||||
, self.hud_dict[temp_key].hud_params['h_hud_days'])
|
||||
stat_dict = self.db_connection.get_stats_from_hand(new_hand_id, type, self.hud_dict[temp_key].hud_params, self.hero_ids[site_id])
|
||||
self.hud_dict[temp_key].stat_dict = stat_dict
|
||||
stat_dict = self.db_connection.get_stats_from_hand(new_hand_id, type, self.hud_dict[temp_key].hud_params
|
||||
,self.hero_ids[site_id], num_seats)
|
||||
try:
|
||||
self.hud_dict[temp_key].stat_dict = stat_dict
|
||||
except KeyError: # HUD instance has been killed off, key is stale
|
||||
sys.stderr.write('hud_dict[%s] was not found\n' % temp_key)
|
||||
sys.stderr.write('will not send hand\n')
|
||||
# Unlocks table, copied from end of function
|
||||
self.db_connection.connection.rollback()
|
||||
return
|
||||
cards = self.db_connection.get_cards(new_hand_id)
|
||||
comm_cards = self.db_connection.get_common_cards(new_hand_id)
|
||||
if comm_cards != {}: # stud!
|
||||
|
@ -234,7 +246,8 @@ class HUD_main(object):
|
|||
else:
|
||||
# get stats using default params--also get cards
|
||||
self.db_connection.init_hud_stat_vars( self.hud_params['hud_days'], self.hud_params['h_hud_days'] )
|
||||
stat_dict = self.db_connection.get_stats_from_hand(new_hand_id, type, self.hud_params, self.hero_ids[site_id])
|
||||
stat_dict = self.db_connection.get_stats_from_hand(new_hand_id, type, self.hud_params
|
||||
,self.hero_ids[site_id], num_seats)
|
||||
cards = self.db_connection.get_cards(new_hand_id)
|
||||
comm_cards = self.db_connection.get_common_cards(new_hand_id)
|
||||
if comm_cards != {}: # stud!
|
||||
|
@ -253,7 +266,12 @@ class HUD_main(object):
|
|||
else:
|
||||
tablewindow.max = max
|
||||
tablewindow.site = site_name
|
||||
self.create_HUD(new_hand_id, tablewindow, temp_key, max, poker_game, type, stat_dict, cards)
|
||||
# Test that the table window still exists
|
||||
if hasattr(tablewindow, 'number'):
|
||||
self.create_HUD(new_hand_id, tablewindow, temp_key, max, poker_game, type, stat_dict, cards)
|
||||
else:
|
||||
sys.stderr.write('Table "%s" no longer exists\n', table_name)
|
||||
|
||||
self.db_connection.connection.rollback()
|
||||
|
||||
if __name__== "__main__":
|
||||
|
|
|
@ -210,24 +210,24 @@ db: a connected fpdb_db object"""
|
|||
#####
|
||||
# End prep functions
|
||||
#####
|
||||
|
||||
# HandsActions - all actions for all players for all streets - self.actions
|
||||
# HudCache data can be generated from HandsActions (HandsPlayers?)
|
||||
|
||||
# Hands - Summary information of hand indexed by handId - gameinfo
|
||||
hh = self.stats.getHands()
|
||||
hh['gameTypeId'] = gtid
|
||||
# seats TINYINT NOT NULL,
|
||||
hh['seats'] = len(sqlids)
|
||||
|
||||
#print hh
|
||||
handid = db.storeHand(hh)
|
||||
# HandsPlayers - ? ... Do we fix winnings?
|
||||
db.storeHandsPlayers(handid, sqlids, self.stats.getHandsPlayers())
|
||||
# Tourneys ?
|
||||
# TourneysPlayers
|
||||
if not db.isDuplicate(gtid, hh['siteHandNo']):
|
||||
# Hands - Summary information of hand indexed by handId - gameinfo
|
||||
hh['gameTypeId'] = gtid
|
||||
# seats TINYINT NOT NULL,
|
||||
hh['seats'] = len(sqlids)
|
||||
|
||||
pass
|
||||
handid = db.storeHand(hh)
|
||||
db.storeHandsPlayers(handid, sqlids, self.stats.getHandsPlayers())
|
||||
# HandsActions - all actions for all players for all streets - self.actions
|
||||
# HudCache data can be generated from HandsActions (HandsPlayers?)
|
||||
# Tourneys ?
|
||||
# TourneysPlayers
|
||||
else:
|
||||
log.info("Hand.insert(): hid #: %s is a duplicate" % hh['siteHandNo'])
|
||||
#Raise Duplicate exception?
|
||||
pass
|
||||
|
||||
def select(self, handId):
|
||||
""" Function to create Hand object from database """
|
||||
|
@ -510,7 +510,7 @@ Map the tuple self.gametype onto the pokerstars string describing it
|
|||
def printHand(self):
|
||||
self.writeHand(sys.stdout)
|
||||
|
||||
def actionString(self, act):
|
||||
def actionString(self, act, street=None):
|
||||
if act[1] == 'folds':
|
||||
return ("%s: folds " %(act[0]))
|
||||
elif act[1] == 'checks':
|
||||
|
@ -535,7 +535,7 @@ Map the tuple self.gametype onto the pokerstars string describing it
|
|||
elif act[1] == 'bringin':
|
||||
return ("%s: brings in for %s%s%s" %(act[0], self.sym, act[2], ' and is all-in' if act[3] else ''))
|
||||
elif act[1] == 'discards':
|
||||
return ("%s: discards %s %s%s" %(act[0], act[2], 'card' if act[2] == 1 else 'cards' , " [" + " ".join(self.discards[act[0]]['DRAWONE']) + "]" if self.hero == act[0] else ''))
|
||||
return ("%s: discards %s %s%s" %(act[0], act[2], 'card' if act[2] == 1 else 'cards' , " [" + " ".join(self.discards[street][act[0]]) + "]" if self.hero == act[0] else ''))
|
||||
elif act[1] == 'stands pat':
|
||||
return ("%s: stands pat" %(act[0]))
|
||||
|
||||
|
@ -872,7 +872,7 @@ class DrawHand(Hand):
|
|||
self.streetList = ['BLINDSANTES', 'DEAL', 'DRAWONE', 'DRAWTWO', 'DRAWTHREE']
|
||||
self.allStreets = ['BLINDSANTES', 'DEAL', 'DRAWONE', 'DRAWTWO', 'DRAWTHREE']
|
||||
self.holeStreets = ['DEAL', 'DRAWONE', 'DRAWTWO', 'DRAWTHREE']
|
||||
self.actionStreets = ['PREDEAL', 'DEAL', 'DRAWONE', 'DRAWTWO', 'DRAWTHREE']
|
||||
self.actionStreets = ['BLINDSANTES', 'DEAL', 'DRAWONE', 'DRAWTWO', 'DRAWTHREE']
|
||||
self.communityStreets = []
|
||||
Hand.__init__(self, sitename, gametype, handText)
|
||||
self.sb = gametype['sb']
|
||||
|
@ -953,6 +953,13 @@ class DrawHand(Hand):
|
|||
act = (player, 'discards', num)
|
||||
self.actions[street].append(act)
|
||||
|
||||
def holecardsAsSet(self, street, player):
|
||||
"""Return holdcards: (oc, nc) as set()"""
|
||||
(nc,oc) = self.holecards[street][player]
|
||||
nc = set(nc)
|
||||
oc = set(oc)
|
||||
return (nc, oc)
|
||||
|
||||
def getStreetTotals(self):
|
||||
# street1Pot INT, /* pot size at flop/street4 */
|
||||
# street2Pot INT, /* pot size at turn/street5 */
|
||||
|
@ -979,18 +986,19 @@ class DrawHand(Hand):
|
|||
if 'DEAL' in self.actions:
|
||||
print >>fh, _("*** DEALING HANDS ***")
|
||||
for player in [x[1] for x in self.players if x[1] in players_who_act_ondeal]:
|
||||
if 'DEAL' in self.holecards[player]:
|
||||
(nc,oc) = self.holecards[player]['DEAL']
|
||||
print >>fh, _("Dealt to %s: [%s]") % (player, " ".join(nc))
|
||||
if 'DEAL' in self.holecards:
|
||||
if self.holecards['DEAL'].has_key(player):
|
||||
(nc,oc) = self.holecards['DEAL'][player]
|
||||
print >>fh, _("Dealt to %s: [%s]") % (player, " ".join(nc))
|
||||
for act in self.actions['DEAL']:
|
||||
print >>fh, self.actionString(act)
|
||||
print >>fh, self.actionString(act, 'DEAL')
|
||||
|
||||
if 'DRAWONE' in self.actions:
|
||||
print >>fh, _("*** FIRST DRAW ***")
|
||||
for act in self.actions['DRAWONE']:
|
||||
print >>fh, self.actionString(act)
|
||||
print >>fh, self.actionString(act, 'DRAWONE')
|
||||
if act[0] == self.hero and act[1] == 'discards':
|
||||
(nc,oc) = self.holecards['DRAWONE'][act[0]]
|
||||
(nc,oc) = self.holecardsAsSet('DRAWONE', act[0])
|
||||
dc = self.discards['DRAWONE'][act[0]]
|
||||
kc = oc - dc
|
||||
print >>fh, _("Dealt to %s [%s] [%s]" % (act[0], " ".join(kc), " ".join(nc)))
|
||||
|
@ -998,9 +1006,9 @@ class DrawHand(Hand):
|
|||
if 'DRAWTWO' in self.actions:
|
||||
print >>fh, _("*** SECOND DRAW ***")
|
||||
for act in self.actions['DRAWTWO']:
|
||||
print >>fh, self.actionString(act)
|
||||
print >>fh, self.actionString(act, 'DRAWTWO')
|
||||
if act[0] == self.hero and act[1] == 'discards':
|
||||
(nc,oc) = self.holecards['DRAWTWO'][act[0]]
|
||||
(nc,oc) = self.holecardsAsSet('DRAWONE', act[0])
|
||||
dc = self.discards['DRAWTWO'][act[0]]
|
||||
kc = oc - dc
|
||||
print >>fh, _("Dealt to %s [%s] [%s]" % (act[0], " ".join(kc), " ".join(nc)))
|
||||
|
@ -1008,9 +1016,9 @@ class DrawHand(Hand):
|
|||
if 'DRAWTHREE' in self.actions:
|
||||
print >>fh, _("*** THIRD DRAW ***")
|
||||
for act in self.actions['DRAWTHREE']:
|
||||
print >>fh, self.actionString(act)
|
||||
print >>fh, self.actionString(act, 'DRAWTHREE')
|
||||
if act[0] == self.hero and act[1] == 'discards':
|
||||
(nc,oc) = self.holecards['DRAWTHREE'][act[0]]
|
||||
(nc,oc) = self.holecardsAsSet('DRAWONE', act[0])
|
||||
dc = self.discards['DRAWTHREE'][act[0]]
|
||||
kc = oc - dc
|
||||
print >>fh, _("Dealt to %s [%s] [%s]" % (act[0], " ".join(kc), " ".join(nc)))
|
||||
|
|
|
@ -94,7 +94,7 @@ follow : whether to tail -f the input"""
|
|||
else:
|
||||
log.info("Created directory '%s'" % out_dir)
|
||||
try:
|
||||
self.out_fh = codecs.open(self.out_path, 'w', 'cp1252')
|
||||
self.out_fh = codecs.open(self.out_path, 'w', 'utf8')
|
||||
except:
|
||||
log.error("out_path %s couldn't be opened" % (self.out_path))
|
||||
else:
|
||||
|
@ -261,8 +261,8 @@ which it expects to find at self.re_TailSplitHands -- see for e.g. Everleaf.py.
|
|||
gametype = self.determineGameType(handText)
|
||||
log.debug("gametype %s" % gametype)
|
||||
hand = None
|
||||
l = None
|
||||
if gametype is None:
|
||||
l = None
|
||||
gametype = "unmatched"
|
||||
# TODO: not ideal, just trying to not error.
|
||||
# TODO: Need to count failed hands.
|
||||
|
|
264
pyfpdb/Hud.py
264
pyfpdb/Hud.py
|
@ -6,17 +6,17 @@ Create and manage the hud overlays.
|
|||
"""
|
||||
# Copyright 2008, 2009 Ray E. Barker
|
||||
|
||||
#
|
||||
#
|
||||
# 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
|
||||
|
@ -57,7 +57,7 @@ def importName(module_name, name):
|
|||
return(getattr(module, name))
|
||||
|
||||
class Hud:
|
||||
|
||||
|
||||
def __init__(self, parent, table, max, poker_game, config, db_connection):
|
||||
# __init__ is (now) intended to be called from the stdin thread, so it
|
||||
# cannot touch the gui
|
||||
|
@ -74,16 +74,16 @@ class Hud:
|
|||
self.site = table.site
|
||||
self.mw_created = False
|
||||
self.hud_params = parent.hud_params
|
||||
|
||||
|
||||
|
||||
self.stat_windows = {}
|
||||
self.popup_windows = {}
|
||||
self.aux_windows = []
|
||||
|
||||
|
||||
(font, font_size) = config.get_default_font(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.foregroundcolor = gtk.gdk.color_parse(self.colors['hudfgcolor'])
|
||||
|
||||
|
@ -98,7 +98,7 @@ class Hud:
|
|||
if my_import == None:
|
||||
continue
|
||||
self.aux_windows.append(my_import(self, config, aux_params))
|
||||
|
||||
|
||||
self.creation_attrs = None
|
||||
|
||||
def create_mw(self):
|
||||
|
@ -110,16 +110,16 @@ class Hud:
|
|||
win.set_skip_taskbar_hint(True)
|
||||
win.set_decorated(False)
|
||||
win.set_opacity(self.colors["hudopacity"])
|
||||
|
||||
|
||||
eventbox = gtk.EventBox()
|
||||
label = gtk.Label(self.hud_ui['label'])
|
||||
|
||||
|
||||
win.add(eventbox)
|
||||
eventbox.add(label)
|
||||
|
||||
|
||||
label.modify_bg(gtk.STATE_NORMAL, self.backgroundcolor)
|
||||
label.modify_fg(gtk.STATE_NORMAL, self.foregroundcolor)
|
||||
|
||||
|
||||
eventbox.modify_bg(gtk.STATE_NORMAL, self.backgroundcolor)
|
||||
eventbox.modify_fg(gtk.STATE_NORMAL, self.foregroundcolor)
|
||||
|
||||
|
@ -128,20 +128,20 @@ class Hud:
|
|||
|
||||
# A popup menu for the main window
|
||||
menu = gtk.Menu()
|
||||
|
||||
|
||||
killitem = gtk.MenuItem('Kill This HUD')
|
||||
menu.append(killitem)
|
||||
if self.parent is not None:
|
||||
killitem.connect("activate", self.parent.kill_hud, self.table_name)
|
||||
|
||||
|
||||
saveitem = gtk.MenuItem('Save HUD Layout')
|
||||
menu.append(saveitem)
|
||||
saveitem.connect("activate", self.save_layout)
|
||||
|
||||
|
||||
repositem = gtk.MenuItem('Reposition StatWindows')
|
||||
menu.append(repositem)
|
||||
repositem.connect("activate", self.reposition_windows)
|
||||
|
||||
|
||||
aggitem = gtk.MenuItem('Show Player Stats')
|
||||
menu.append(aggitem)
|
||||
self.aggMenu = gtk.Menu()
|
||||
|
@ -150,49 +150,67 @@ class Hud:
|
|||
item = gtk.CheckMenuItem('For This Blind Level Only')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_aggregation, ('P',1))
|
||||
setattr(self, 'h_aggBBmultItem1', item)
|
||||
#
|
||||
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)
|
||||
#
|
||||
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)
|
||||
#
|
||||
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)
|
||||
#
|
||||
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:')
|
||||
item = gtk.MenuItem('For #Seats:')
|
||||
self.aggMenu.append(item)
|
||||
#
|
||||
item = gtk.CheckMenuItem(' Any Number')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_seats_style, ('P','A'))
|
||||
setattr(self, 'h_seatsStyleOptionA', item)
|
||||
#
|
||||
item = gtk.CheckMenuItem(' Custom')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_seats_style, ('P','C'))
|
||||
setattr(self, 'h_seatsStyleOptionC', item)
|
||||
#
|
||||
item = gtk.CheckMenuItem(' Exact')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_seats_style, ('P','E'))
|
||||
setattr(self, 'h_seatsStyleOptionE', 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)
|
||||
#
|
||||
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)
|
||||
|
||||
setattr(self, 'h_hudStyleOptionT', item)
|
||||
|
||||
aggitem = gtk.MenuItem('Show Opponent Stats')
|
||||
menu.append(aggitem)
|
||||
self.aggMenu = gtk.Menu()
|
||||
|
@ -201,48 +219,66 @@ class Hud:
|
|||
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:')
|
||||
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, ('O',2))
|
||||
setattr(self, 'aggBBmultItem2', item)
|
||||
#
|
||||
setattr(self, 'aggBBmultItem2', item)
|
||||
#
|
||||
item = gtk.CheckMenuItem(' 0.33 to 3.0 x Current Blinds')
|
||||
self.aggMenu.append(item)
|
||||
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')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_aggregation, ('O',10))
|
||||
setattr(self, 'aggBBmultItem10', item)
|
||||
#
|
||||
setattr(self, 'aggBBmultItem10', item)
|
||||
#
|
||||
item = gtk.CheckMenuItem(' All Levels')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_aggregation, ('O',10000))
|
||||
setattr(self, 'aggBBmultItem10000', item)
|
||||
#
|
||||
item = gtk.MenuItem('Since:')
|
||||
item = gtk.MenuItem('For #Seats:')
|
||||
self.aggMenu.append(item)
|
||||
#
|
||||
item = gtk.CheckMenuItem(' Any Number')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_seats_style, ('O','A'))
|
||||
setattr(self, 'seatsStyleOptionA', item)
|
||||
#
|
||||
item = gtk.CheckMenuItem(' Custom')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_seats_style, ('O','C'))
|
||||
setattr(self, 'seatsStyleOptionC', item)
|
||||
#
|
||||
item = gtk.CheckMenuItem(' Exact')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_seats_style, ('O','E'))
|
||||
setattr(self, 'seatsStyleOptionE', 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, ('O','A'))
|
||||
setattr(self, 'hudStyleOptionA', item)
|
||||
#
|
||||
#
|
||||
item = gtk.CheckMenuItem(' Session')
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_hud_style, ('O','S'))
|
||||
setattr(self, 'hudStyleOptionS', item)
|
||||
#
|
||||
setattr(self, 'hudStyleOptionS', item)
|
||||
#
|
||||
item = gtk.CheckMenuItem(' %s Days' % (self.hud_params['h_hud_days']))
|
||||
self.aggMenu.append(item)
|
||||
item.connect("activate", self.set_hud_style, ('O','T'))
|
||||
setattr(self, 'hudStyleOptionT', item)
|
||||
setattr(self, 'hudStyleOptionT', item)
|
||||
|
||||
# set active on current options:
|
||||
if self.hud_params['h_agg_bb_mult'] == 1:
|
||||
|
@ -267,6 +303,20 @@ class Hud:
|
|||
elif self.hud_params['agg_bb_mult'] > 9000:
|
||||
getattr(self, 'aggBBmultItem10000').set_active(True)
|
||||
#
|
||||
if self.hud_params['h_seats_style'] == 'A':
|
||||
getattr(self, 'h_seatsStyleOptionA').set_active(True)
|
||||
elif self.hud_params['h_seats_style'] == 'C':
|
||||
getattr(self, 'h_seatsStyleOptionC').set_active(True)
|
||||
elif self.hud_params['h_seats_style'] == 'E':
|
||||
getattr(self, 'h_seatsStyleOptionE').set_active(True)
|
||||
#
|
||||
if self.hud_params['seats_style'] == 'A':
|
||||
getattr(self, 'seatsStyleOptionA').set_active(True)
|
||||
elif self.hud_params['seats_style'] == 'C':
|
||||
getattr(self, 'seatsStyleOptionC').set_active(True)
|
||||
elif self.hud_params['seats_style'] == 'E':
|
||||
getattr(self, 'seatsStyleOptionE').set_active(True)
|
||||
#
|
||||
if self.hud_params['h_hud_style'] == 'A':
|
||||
getattr(self, 'h_hudStyleOptionA').set_active(True)
|
||||
elif self.hud_params['h_hud_style'] == 'S':
|
||||
|
@ -280,13 +330,13 @@ class Hud:
|
|||
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)
|
||||
|
||||
|
||||
debugitem = gtk.MenuItem('Debug StatWindows')
|
||||
menu.append(debugitem)
|
||||
debugitem.connect("activate", self.debug_stat_windows)
|
||||
|
||||
|
||||
item5 = gtk.MenuItem('Set max seats')
|
||||
menu.append(item5)
|
||||
maxSeatsMenu = gtk.Menu()
|
||||
|
@ -296,8 +346,8 @@ class Hud:
|
|||
item.ms = i
|
||||
maxSeatsMenu.append(item)
|
||||
item.connect("activate", self.change_max_seats)
|
||||
setattr(self, 'maxSeatsMenuItem%d' % (i-1), item)
|
||||
|
||||
setattr(self, 'maxSeatsMenuItem%d' % (i-1), item)
|
||||
|
||||
eventbox.connect_object("button-press-event", self.on_button_press, menu)
|
||||
|
||||
self.mw_created = True
|
||||
|
@ -305,7 +355,7 @@ class Hud:
|
|||
menu.show_all()
|
||||
self.main_window.show_all()
|
||||
self.topify_window(self.main_window)
|
||||
|
||||
|
||||
def change_max_seats(self, widget):
|
||||
if self.max != widget.ms:
|
||||
print 'change_max_seats', widget.ms
|
||||
|
@ -344,6 +394,29 @@ class Hud:
|
|||
if mult != str(num):
|
||||
getattr(self, 'aggBBmultItem'+mult).set_active(False)
|
||||
|
||||
def set_seats_style(self, widget, val):
|
||||
(player_opp, style) = val
|
||||
if player_opp == 'P':
|
||||
param = 'h_seats_style'
|
||||
prefix = 'h_'
|
||||
else:
|
||||
param = 'seats_style'
|
||||
prefix = ''
|
||||
|
||||
if style == 'A' and getattr(self, prefix+'seatsStyleOptionA').get_active():
|
||||
self.hud_params[param] = 'A'
|
||||
getattr(self, prefix+'seatsStyleOptionC').set_active(False)
|
||||
getattr(self, prefix+'seatsStyleOptionE').set_active(False)
|
||||
elif style == 'C' and getattr(self, prefix+'seatsStyleOptionC').get_active():
|
||||
self.hud_params[param] = 'C'
|
||||
getattr(self, prefix+'seatsStyleOptionA').set_active(False)
|
||||
getattr(self, prefix+'seatsStyleOptionE').set_active(False)
|
||||
elif style == 'E' and getattr(self, prefix+'seatsStyleOptionE').get_active():
|
||||
self.hud_params[param] = 'E'
|
||||
getattr(self, prefix+'seatsStyleOptionA').set_active(False)
|
||||
getattr(self, prefix+'seatsStyleOptionC').set_active(False)
|
||||
print "setting self.hud_params[%s] = %s" % (param, style)
|
||||
|
||||
def set_hud_style(self, widget, val):
|
||||
(player_opp, style) = val
|
||||
if player_opp == 'P':
|
||||
|
@ -352,7 +425,7 @@ class Hud:
|
|||
else:
|
||||
param = 'hud_style'
|
||||
prefix = ''
|
||||
|
||||
|
||||
if style == 'A' and getattr(self, prefix+'hudStyleOptionA').get_active():
|
||||
self.hud_params[param] = 'A'
|
||||
getattr(self, prefix+'hudStyleOptionS').set_active(False)
|
||||
|
@ -431,7 +504,7 @@ class Hud:
|
|||
# print self.table, "\n", self.main_window.window.get_transient_for()
|
||||
for w in self.stat_windows:
|
||||
print self.stat_windows[w].window.window.get_transient_for()
|
||||
|
||||
|
||||
def save_layout(self, *args):
|
||||
new_layout = [(0, 0)] * self.max
|
||||
for sw in self.stat_windows:
|
||||
|
@ -447,7 +520,7 @@ class Hud:
|
|||
|
||||
def adj_seats(self, hand, config):
|
||||
|
||||
# Need range here, not xrange -> need the actual list
|
||||
# Need range here, not xrange -> need the actual list
|
||||
adj = range(0, self.max + 1) # default seat adjustments = no adjustment
|
||||
# does the user have a fav_seat?
|
||||
if self.max not in config.supported_sites[self.table.site].layout:
|
||||
|
@ -481,12 +554,12 @@ class Hud:
|
|||
#
|
||||
# this method also manages the creating and destruction of stat
|
||||
# windows via calls to the Stat_Window class
|
||||
self.creation_attrs = hand, config, stat_dict, cards
|
||||
self.creation_attrs = hand, config, stat_dict, cards
|
||||
|
||||
self.hand = hand
|
||||
self.hand = hand
|
||||
if not self.mw_created:
|
||||
self.create_mw()
|
||||
|
||||
|
||||
self.stat_dict = stat_dict
|
||||
self.cards = cards
|
||||
sys.stderr.write("------------------------------------------------------------\nCreating hud from hand %s\n" % hand)
|
||||
|
@ -498,24 +571,24 @@ class Hud:
|
|||
loc = self.config.get_locations(self.table.site, 9)
|
||||
|
||||
# create the stat windows
|
||||
for i in xrange(1, self.max + 1):
|
||||
for i in xrange(1, self.max + 1):
|
||||
(x, y) = loc[adj[i]]
|
||||
if i in self.stat_windows:
|
||||
self.stat_windows[i].relocate(x, y)
|
||||
else:
|
||||
self.stat_windows[i] = Stat_Window(game = config.supported_games[self.poker_game],
|
||||
parent = self,
|
||||
table = self.table,
|
||||
table = self.table,
|
||||
x = x,
|
||||
y = y,
|
||||
seat = i,
|
||||
adj = adj[i],
|
||||
adj = adj[i],
|
||||
player_id = 'fake',
|
||||
font = self.font)
|
||||
|
||||
self.stats = []
|
||||
game = config.supported_games[self.poker_game]
|
||||
|
||||
|
||||
for i in xrange(0, game.rows + 1):
|
||||
row_list = [''] * game.cols
|
||||
self.stats.append(row_list)
|
||||
|
@ -523,14 +596,15 @@ class Hud:
|
|||
self.stats[config.supported_games[self.poker_game].stats[stat].row] \
|
||||
[config.supported_games[self.poker_game].stats[stat].col] = \
|
||||
config.supported_games[self.poker_game].stats[stat].stat_name
|
||||
|
||||
|
||||
if os.name == "nt":
|
||||
gobject.timeout_add(500, self.update_table_position)
|
||||
|
||||
|
||||
def update(self, hand, config):
|
||||
self.hand = hand # this is the last hand, so it is available later
|
||||
if os.name == 'nt':
|
||||
self.update_table_position()
|
||||
if self.update_table_position() == False: # we got killed by finding our table was gone
|
||||
return
|
||||
|
||||
for s in self.stat_dict:
|
||||
try:
|
||||
|
@ -546,18 +620,18 @@ class Hud:
|
|||
self.max = 10
|
||||
self.create(hand, config, self.stat_dict, self.cards)
|
||||
self.stat_windows[statd['seat']].player_id = statd['player_id']
|
||||
|
||||
|
||||
for r in xrange(0, config.supported_games[self.poker_game].rows):
|
||||
for c in xrange(0, config.supported_games[self.poker_game].cols):
|
||||
this_stat = config.supported_games[self.poker_game].stats[self.stats[r][c]]
|
||||
number = Stats.do_stat(self.stat_dict, player = statd['player_id'], stat = self.stats[r][c])
|
||||
statstring = "%s%s%s" % (this_stat.hudprefix, str(number[1]), this_stat.hudsuffix)
|
||||
window = self.stat_windows[statd['seat']]
|
||||
|
||||
|
||||
if this_stat.hudcolor != "":
|
||||
self.label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.colors['hudfgcolor']))
|
||||
window.label[r][c].modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(this_stat.hudcolor))
|
||||
|
||||
|
||||
window.label[r][c].set_text(statstring)
|
||||
if statstring != "xxx": # is there a way to tell if this particular stat window is visible already, or no?
|
||||
window.window.show_all()
|
||||
|
@ -567,7 +641,7 @@ class Hud:
|
|||
def topify_window(self, window):
|
||||
window.set_focus_on_map(False)
|
||||
window.set_accept_focus(False)
|
||||
|
||||
|
||||
if not self.table.gdkhandle:
|
||||
self.table.gdkhandle = gtk.gdk.window_foreign_new(int(self.table.number)) # gtk handle to poker window
|
||||
window.window.set_transient_for(self.table.gdkhandle)
|
||||
|
@ -575,7 +649,7 @@ class Hud:
|
|||
class Stat_Window:
|
||||
|
||||
def button_press_cb(self, widget, event, *args):
|
||||
# This handles all callbacks from button presses on the event boxes in
|
||||
# This handles all callbacks from button presses on the event boxes in
|
||||
# the stat windows. There is a bit of an ugly kludge to separate single-
|
||||
# and double-clicks.
|
||||
self.window.show_all()
|
||||
|
@ -599,15 +673,15 @@ class Stat_Window:
|
|||
self.window.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def noop(self, arga=None, argb=None): # i'm going to try to connect the focus-in and focus-out events here, to see if that fixes any of the focus problems.
|
||||
return True
|
||||
|
||||
|
||||
def kill_popup(self, popup):
|
||||
print "remove popup", popup
|
||||
self.popups.remove(popup)
|
||||
self.popups.remove(popup)
|
||||
popup.window.destroy()
|
||||
|
||||
|
||||
def kill_popups(self):
|
||||
map(lambda x: x.window.destroy(), self.popups)
|
||||
self.popups = { }
|
||||
|
@ -639,10 +713,10 @@ class Stat_Window:
|
|||
self.window.set_focus_on_map(False)
|
||||
|
||||
grid = gtk.Table(rows = game.rows, columns = game.cols, homogeneous = False)
|
||||
self.grid = grid
|
||||
self.grid = grid
|
||||
self.window.add(grid)
|
||||
self.window.modify_bg(gtk.STATE_NORMAL, parent.backgroundcolor)
|
||||
|
||||
|
||||
self.e_box = []
|
||||
self.frame = []
|
||||
self.label = []
|
||||
|
@ -658,10 +732,10 @@ class Stat_Window:
|
|||
if usegtkframes:
|
||||
self.frame[r].append( gtk.Frame() )
|
||||
e_box[r].append( gtk.EventBox() )
|
||||
|
||||
|
||||
e_box[r][c].modify_bg(gtk.STATE_NORMAL, parent.backgroundcolor)
|
||||
e_box[r][c].modify_fg(gtk.STATE_NORMAL, parent.foregroundcolor)
|
||||
|
||||
|
||||
Stats.do_tip(e_box[r][c], 'stuff')
|
||||
if usegtkframes:
|
||||
grid.attach(self.frame[r][c], c, c+1, r, r+1, xpadding = game.xpad, ypadding = game.ypad)
|
||||
|
@ -669,7 +743,7 @@ class Stat_Window:
|
|||
else:
|
||||
grid.attach(e_box[r][c], c, c+1, r, r+1, xpadding = game.xpad, ypadding = game.ypad)
|
||||
label[r].append( gtk.Label('xxx') )
|
||||
|
||||
|
||||
if usegtkframes:
|
||||
self.frame[r][c].modify_bg(gtk.STATE_NORMAL, parent.backgroundcolor)
|
||||
label[r][c].modify_bg(gtk.STATE_NORMAL, parent.backgroundcolor)
|
||||
|
@ -690,17 +764,17 @@ class Stat_Window:
|
|||
self.window.set_focus_on_map(False)
|
||||
self.window.set_accept_focus(False)
|
||||
|
||||
|
||||
|
||||
self.window.move(self.x, self.y)
|
||||
self.window.realize() # window must be realized before it has a gdkwindow so we can attach it to the table window..
|
||||
self.topify_window(self.window)
|
||||
|
||||
|
||||
self.window.hide()
|
||||
|
||||
|
||||
def topify_window(self, window):
|
||||
window.set_focus_on_map(False)
|
||||
window.set_accept_focus(False)
|
||||
|
||||
|
||||
if not self.table.gdkhandle:
|
||||
self.table.gdkhandle = gtk.gdk.window_foreign_new(int(self.table.number)) # gtk handle to poker window
|
||||
# window.window.reparent(self.table.gdkhandle, 0, 0)
|
||||
|
@ -723,11 +797,11 @@ class Popup_window:
|
|||
self.window.set_title("popup")
|
||||
self.window.set_property("skip-taskbar-hint", True)
|
||||
self.window.set_focus_on_map(False)
|
||||
self.window.set_accept_focus(False)
|
||||
self.window.set_accept_focus(False)
|
||||
self.window.set_transient_for(parent.get_toplevel())
|
||||
|
||||
|
||||
self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
|
||||
|
||||
|
||||
self.ebox = gtk.EventBox()
|
||||
self.ebox.connect("button_press_event", self.button_press_cb)
|
||||
self.lab = gtk.Label("stuff\nstuff\nstuff")
|
||||
|
@ -735,14 +809,14 @@ class Popup_window:
|
|||
# need an event box so we can respond to clicks
|
||||
self.window.add(self.ebox)
|
||||
self.ebox.add(self.lab)
|
||||
|
||||
|
||||
self.ebox.modify_bg(gtk.STATE_NORMAL, stat_window.parent.backgroundcolor)
|
||||
self.ebox.modify_fg(gtk.STATE_NORMAL, stat_window.parent.foregroundcolor)
|
||||
self.window.modify_bg(gtk.STATE_NORMAL, stat_window.parent.backgroundcolor)
|
||||
self.window.modify_fg(gtk.STATE_NORMAL, stat_window.parent.foregroundcolor)
|
||||
self.lab.modify_bg(gtk.STATE_NORMAL, stat_window.parent.backgroundcolor)
|
||||
self.lab.modify_fg(gtk.STATE_NORMAL, stat_window.parent.foregroundcolor)
|
||||
|
||||
|
||||
# figure out the row, col address of the click that activated the popup
|
||||
row = 0
|
||||
col = 0
|
||||
|
@ -769,7 +843,7 @@ class Popup_window:
|
|||
|
||||
# get a database connection
|
||||
# db_connection = Database.Database(stat_window.parent.config, stat_window.parent.db_name, 'temp')
|
||||
|
||||
|
||||
# calculate the stat_dict and then create the text for the pu
|
||||
# stat_dict = db_connection.get_stats_from_hand(stat_window.parent.hand, stat_window.player_id)
|
||||
# stat_dict = self.db_connection.get_stats_from_hand(stat_window.parent.hand)
|
||||
|
@ -781,16 +855,16 @@ class Popup_window:
|
|||
number = Stats.do_stat(stat_dict, player = int(stat_window.player_id), stat = s)
|
||||
mo_text += number[5] + " " + number[4] + "\n"
|
||||
pu_text += number[3] + "\n"
|
||||
|
||||
|
||||
|
||||
self.lab.set_text(pu_text)
|
||||
Stats.do_tip(self.lab, mo_text)
|
||||
self.window.show_all()
|
||||
|
||||
|
||||
self.window.set_transient_for(stat_window.window)
|
||||
|
||||
def button_press_cb(self, widget, event, *args):
|
||||
# This handles all callbacks from button presses on the event boxes in
|
||||
# This handles all callbacks from button presses on the event boxes in
|
||||
# the popup windows. There is a bit of an ugly kludge to separate single-
|
||||
# and double-clicks. This is the same code as in the Stat_window class
|
||||
if event.button == 1: # left button event
|
||||
|
@ -808,7 +882,7 @@ class Popup_window:
|
|||
def toggle_decorated(self, widget):
|
||||
top = widget.get_toplevel()
|
||||
(x, y) = top.get_position()
|
||||
|
||||
|
||||
if top.get_decorated():
|
||||
top.set_decorated(0)
|
||||
top.move(x, y)
|
||||
|
@ -819,7 +893,7 @@ class Popup_window:
|
|||
def topify_window(self, window):
|
||||
window.set_focus_on_map(False)
|
||||
window.set_accept_focus(False)
|
||||
|
||||
|
||||
if not self.table.gdkhandle:
|
||||
self.table.gdkhandle = gtk.gdk.window_foreign_new(int(self.table.number)) # gtk handle to poker window
|
||||
# window.window.reparent(self.table.gdkhandle, 0, 0)
|
||||
|
@ -833,14 +907,14 @@ if __name__== "__main__":
|
|||
label = gtk.Label('Fake main window, blah blah, blah\nblah, blah')
|
||||
main_window.add(label)
|
||||
main_window.show_all()
|
||||
|
||||
|
||||
c = Configuration.Config()
|
||||
#tables = Tables.discover(c)
|
||||
t = Tables.discover_table_by_name(c, "Corona")
|
||||
if t is None:
|
||||
print "Table not found."
|
||||
db = Database.Database(c, 'fpdb', 'holdem')
|
||||
|
||||
|
||||
stat_dict = db.get_stats_from_hand(1)
|
||||
|
||||
# for t in tables:
|
||||
|
|
|
@ -39,7 +39,7 @@ def fpdb_options():
|
|||
return (options, argv)
|
||||
|
||||
if __name__== "__main__":
|
||||
(options, sys.argv) = fpdb_options()
|
||||
(options, argv) = fpdb_options()
|
||||
print "errorsToConsole =", options.errorsToConsole
|
||||
print "database name =", options.dbname
|
||||
print "config file =", options.config
|
||||
|
|
|
@ -50,7 +50,7 @@ class PokerStars(HandHistoryConverter):
|
|||
\s?(?P<TOUR_ISO>%(LEGAL_ISO)s)?
|
||||
)\s)? # close paren of tournament info
|
||||
(?P<MIXED>HORSE|8\-Game|HOSE)?\s?\(?
|
||||
(?P<GAME>Hold\'em|Razz|7\sCard\sStud|7\sCard\sStud\sHi/Lo|Omaha|Omaha\sHi/Lo|Badugi|Triple\sDraw\s2\-7\sLowball)\s
|
||||
(?P<GAME>Hold\'em|Razz|7\sCard\sStud|7\sCard\sStud\sHi/Lo|Omaha|Omaha\sHi/Lo|Badugi|Triple\sDraw\s2\-7\sLowball|5\sCard\sDraw)\s
|
||||
(?P<LIMIT>No\sLimit|Limit|Pot\sLimit)\)?,?\s
|
||||
(-\sLevel\s(?P<LEVEL>[IVXLC]+)\s)?
|
||||
\(? # open paren of the stakes
|
||||
|
@ -101,7 +101,7 @@ class PokerStars(HandHistoryConverter):
|
|||
self.re_HeroCards = re.compile(r"^Dealt to %(PLYR)s(?: \[(?P<OLDCARDS>.+?)\])?( \[(?P<NEWCARDS>.+?)\])" % subst, re.MULTILINE)
|
||||
self.re_Action = re.compile(r"""
|
||||
^%(PLYR)s:(?P<ATYPE>\sbets|\schecks|\sraises|\scalls|\sfolds|\sdiscards|\sstands\spat)
|
||||
(\s%(CUR)s(?P<BET>[.\d]+))?(\sto\s%(CUR)s(?P<BETTO>[.\d]+))? # the number discarded goes in <BET>
|
||||
(\s(%(CUR)s)?(?P<BET>[.\d]+))?(\sto\s%(CUR)s(?P<BETTO>[.\d]+))? # the number discarded goes in <BET>
|
||||
(\scards?(\s\[(?P<DISCARDED>.+?)\])?)?"""
|
||||
% subst, re.MULTILINE|re.VERBOSE)
|
||||
self.re_ShowdownAction = re.compile(r"^%s: shows \[(?P<CARDS>.*)\]" % player_re, re.MULTILINE)
|
||||
|
@ -133,6 +133,7 @@ class PokerStars(HandHistoryConverter):
|
|||
info = {}
|
||||
m = self.re_GameInfo.search(handText)
|
||||
if not m:
|
||||
print "DEBUG: determineGameType(): did not match"
|
||||
return None
|
||||
|
||||
mg = m.groupdict()
|
||||
|
@ -147,6 +148,7 @@ class PokerStars(HandHistoryConverter):
|
|||
'7 Card Stud Hi/Lo' : ('stud','studhilo'),
|
||||
'Badugi' : ('draw','badugi'),
|
||||
'Triple Draw 2-7 Lowball' : ('draw','27_3draw'),
|
||||
'5 Card Draw' : ('draw','fivedraw')
|
||||
}
|
||||
currencies = { u'€':'EUR', '$':'USD', '':'T$' }
|
||||
# I don't think this is doing what we think. mg will always have all
|
||||
|
|
123
pyfpdb/SQL.py
123
pyfpdb/SQL.py
|
@ -1402,6 +1402,7 @@ class Sql:
|
|||
AND gt1.bigblind <= gt2.bigblind * %s /* bigblind similar size */
|
||||
AND gt1.bigblind >= gt2.bigblind / %s
|
||||
AND gt2.id = h.gametypeId)
|
||||
AND hc.activeSeats between %s and %s
|
||||
)
|
||||
OR
|
||||
( hp.playerId = %s
|
||||
|
@ -1415,6 +1416,7 @@ class Sql:
|
|||
AND gt1.bigblind <= gt2.bigblind * %s /* bigblind similar size */
|
||||
AND gt1.bigblind >= gt2.bigblind / %s
|
||||
AND gt2.id = h.gametypeId)
|
||||
AND hc.activeSeats between %s and %s
|
||||
)
|
||||
)
|
||||
GROUP BY hc.PlayerId, p.name
|
||||
|
@ -1432,11 +1434,11 @@ class Sql:
|
|||
|
||||
if db_server == 'mysql':
|
||||
self.query['get_stats_from_hand_session'] = """
|
||||
SELECT hp.playerId AS player_id,
|
||||
SELECT hp.playerId AS player_id, /* playerId and seats must */
|
||||
h.seats AS seats, /* be first and second field */
|
||||
hp.handId AS hand_id,
|
||||
hp.seatNo AS seat,
|
||||
p.name AS screen_name,
|
||||
h.seats AS seats,
|
||||
1 AS n,
|
||||
cast(hp2.street0VPI as <signed>integer) AS vpip,
|
||||
cast(hp2.street0Aggr as <signed>integer) AS pfr,
|
||||
|
@ -1494,21 +1496,30 @@ class Sql:
|
|||
cast(hp2.street4CheckCallRaiseChance as <signed>integer) AS ccr_opp_4,
|
||||
cast(hp2.street4CheckCallRaiseDone as <signed>integer) AS ccr_4
|
||||
FROM
|
||||
Hands h /* players in this hand */
|
||||
Hands h
|
||||
INNER JOIN Hands h2 ON (h2.id > %s AND h2.tableName = h.tableName)
|
||||
INNER JOIN HandsPlayers hp ON (h.id = hp.handId)
|
||||
INNER JOIN HandsPlayers hp ON (h.id = hp.handId) /* players in this hand */
|
||||
INNER JOIN HandsPlayers hp2 ON (hp2.playerId+0 = hp.playerId+0 AND (hp2.handId = h2.id+0)) /* other hands by these players */
|
||||
INNER JOIN Players p ON (p.id = hp2.PlayerId+0)
|
||||
WHERE hp.handId = %s
|
||||
/* check activeseats once this data returned (don't want to do that here as it might
|
||||
assume a session ended just because the number of seats dipped for a few hands)
|
||||
*/
|
||||
AND ( /* 2 separate parts for hero and opponents */
|
||||
( hp2.playerId != %s
|
||||
AND h2.seats between %s and %s
|
||||
)
|
||||
OR
|
||||
( hp2.playerId = %s
|
||||
AND h2.seats between %s and %s
|
||||
)
|
||||
)
|
||||
ORDER BY h.handStart desc, hp2.PlayerId
|
||||
/* order rows by handstart descending so that we can stop reading rows when
|
||||
there's a gap over X minutes between hands (ie. when we get back to start of
|
||||
the session */
|
||||
"""
|
||||
else: # assume postgresql
|
||||
elif db_server == 'postgresql':
|
||||
self.query['get_stats_from_hand_session'] = """
|
||||
SELECT hp.playerId AS player_id,
|
||||
hp.handId AS hand_id,
|
||||
|
@ -1582,6 +1593,103 @@ class Sql:
|
|||
/* check activeseats once this data returned (don't want to do that here as it might
|
||||
assume a session ended just because the number of seats dipped for a few hands)
|
||||
*/
|
||||
AND ( /* 2 separate parts for hero and opponents */
|
||||
( hp2.playerId != %s
|
||||
AND h2.seats between %s and %s
|
||||
)
|
||||
OR
|
||||
( hp2.playerId = %s
|
||||
AND h2.seats between %s and %s
|
||||
)
|
||||
)
|
||||
ORDER BY h.handStart desc, hp2.PlayerId
|
||||
/* order rows by handstart descending so that we can stop reading rows when
|
||||
there's a gap over X minutes between hands (ie. when we get back to start of
|
||||
the session */
|
||||
"""
|
||||
elif db_server == 'sqlite':
|
||||
self.query['get_stats_from_hand_session'] = """
|
||||
SELECT hp.playerId AS player_id,
|
||||
hp.handId AS hand_id,
|
||||
hp.seatNo AS seat,
|
||||
p.name AS screen_name,
|
||||
h.seats AS seats,
|
||||
1 AS n,
|
||||
cast(hp2.street0VPI as <signed>integer) AS vpip,
|
||||
cast(hp2.street0Aggr as <signed>integer) AS pfr,
|
||||
cast(hp2.street0_3BChance as <signed>integer) AS TB_opp_0,
|
||||
cast(hp2.street0_3BDone as <signed>integer) AS TB_0,
|
||||
cast(hp2.street1Seen as <signed>integer) AS saw_f,
|
||||
cast(hp2.street1Seen as <signed>integer) AS saw_1,
|
||||
cast(hp2.street2Seen as <signed>integer) AS saw_2,
|
||||
cast(hp2.street3Seen as <signed>integer) AS saw_3,
|
||||
cast(hp2.street4Seen as <signed>integer) AS saw_4,
|
||||
cast(hp2.sawShowdown as <signed>integer) AS sd,
|
||||
cast(hp2.street1Aggr as <signed>integer) AS aggr_1,
|
||||
cast(hp2.street2Aggr as <signed>integer) AS aggr_2,
|
||||
cast(hp2.street3Aggr as <signed>integer) AS aggr_3,
|
||||
cast(hp2.street4Aggr as <signed>integer) AS aggr_4,
|
||||
cast(hp2.otherRaisedStreet1 as <signed>integer) AS was_raised_1,
|
||||
cast(hp2.otherRaisedStreet2 as <signed>integer) AS was_raised_2,
|
||||
cast(hp2.otherRaisedStreet3 as <signed>integer) AS was_raised_3,
|
||||
cast(hp2.otherRaisedStreet4 as <signed>integer) AS was_raised_4,
|
||||
cast(hp2.foldToOtherRaisedStreet1 as <signed>integer) AS f_freq_1,
|
||||
cast(hp2.foldToOtherRaisedStreet2 as <signed>integer) AS f_freq_2,
|
||||
cast(hp2.foldToOtherRaisedStreet3 as <signed>integer) AS f_freq_3,
|
||||
cast(hp2.foldToOtherRaisedStreet4 as <signed>integer) AS f_freq_4,
|
||||
cast(hp2.wonWhenSeenStreet1 as <signed>integer) AS w_w_s_1,
|
||||
cast(hp2.wonAtSD as <signed>integer) AS wmsd,
|
||||
cast(hp2.stealAttemptChance as <signed>integer) AS steal_opp,
|
||||
cast(hp2.stealAttempted as <signed>integer) AS steal,
|
||||
cast(hp2.foldSbToStealChance as <signed>integer) AS SBstolen,
|
||||
cast(hp2.foldedSbToSteal as <signed>integer) AS SBnotDef,
|
||||
cast(hp2.foldBbToStealChance as <signed>integer) AS BBstolen,
|
||||
cast(hp2.foldedBbToSteal as <signed>integer) AS BBnotDef,
|
||||
cast(hp2.street1CBChance as <signed>integer) AS CB_opp_1,
|
||||
cast(hp2.street1CBDone as <signed>integer) AS CB_1,
|
||||
cast(hp2.street2CBChance as <signed>integer) AS CB_opp_2,
|
||||
cast(hp2.street2CBDone as <signed>integer) AS CB_2,
|
||||
cast(hp2.street3CBChance as <signed>integer) AS CB_opp_3,
|
||||
cast(hp2.street3CBDone as <signed>integer) AS CB_3,
|
||||
cast(hp2.street4CBChance as <signed>integer) AS CB_opp_4,
|
||||
cast(hp2.street4CBDone as <signed>integer) AS CB_4,
|
||||
cast(hp2.foldToStreet1CBChance as <signed>integer) AS f_cb_opp_1,
|
||||
cast(hp2.foldToStreet1CBDone as <signed>integer) AS f_cb_1,
|
||||
cast(hp2.foldToStreet2CBChance as <signed>integer) AS f_cb_opp_2,
|
||||
cast(hp2.foldToStreet2CBDone as <signed>integer) AS f_cb_2,
|
||||
cast(hp2.foldToStreet3CBChance as <signed>integer) AS f_cb_opp_3,
|
||||
cast(hp2.foldToStreet3CBDone as <signed>integer) AS f_cb_3,
|
||||
cast(hp2.foldToStreet4CBChance as <signed>integer) AS f_cb_opp_4,
|
||||
cast(hp2.foldToStreet4CBDone as <signed>integer) AS f_cb_4,
|
||||
cast(hp2.totalProfit as <signed>integer) AS net,
|
||||
cast(hp2.street1CheckCallRaiseChance as <signed>integer) AS ccr_opp_1,
|
||||
cast(hp2.street1CheckCallRaiseDone as <signed>integer) AS ccr_1,
|
||||
cast(hp2.street2CheckCallRaiseChance as <signed>integer) AS ccr_opp_2,
|
||||
cast(hp2.street2CheckCallRaiseDone as <signed>integer) AS ccr_2,
|
||||
cast(hp2.street3CheckCallRaiseChance as <signed>integer) AS ccr_opp_3,
|
||||
cast(hp2.street3CheckCallRaiseDone as <signed>integer) AS ccr_3,
|
||||
cast(hp2.street4CheckCallRaiseChance as <signed>integer) AS ccr_opp_4,
|
||||
cast(hp2.street4CheckCallRaiseDone as <signed>integer) AS ccr_4
|
||||
FROM Hands h /* this hand */
|
||||
INNER JOIN Hands h2 ON ( h2.id > %s /* other hands */
|
||||
AND h2.tableName = h.tableName)
|
||||
INNER JOIN HandsPlayers hp ON (h.id = hp.handId) /* players in this hand */
|
||||
INNER JOIN HandsPlayers hp2 ON ( hp2.playerId+0 = hp.playerId+0
|
||||
AND hp2.handId = h2.id) /* other hands by these players */
|
||||
INNER JOIN Players p ON (p.id = hp2.PlayerId+0)
|
||||
WHERE h.id = %s
|
||||
/* check activeseats once this data returned (don't want to do that here as it might
|
||||
assume a session ended just because the number of seats dipped for a few hands)
|
||||
*/
|
||||
AND ( /* 2 separate parts for hero and opponents */
|
||||
( hp2.playerId != %s
|
||||
AND h2.seats between %s and %s
|
||||
)
|
||||
OR
|
||||
( hp2.playerId = %s
|
||||
AND h2.seats between %s and %s
|
||||
)
|
||||
)
|
||||
ORDER BY h.handStart desc, hp2.PlayerId
|
||||
/* order rows by handstart descending so that we can stop reading rows when
|
||||
there's a gap over X minutes between hands (ie. when we get back to start of
|
||||
|
@ -1605,10 +1713,13 @@ class Sql:
|
|||
|
||||
self.query['get_table_name'] = """
|
||||
SELECT h.tableName, h.maxSeats, gt.category, gt.type, s.id, s.name
|
||||
FROM Hands h, Gametypes gt, Sites s
|
||||
, count(1) as numseats
|
||||
FROM Hands h, Gametypes gt, Sites s, HandsPlayers hp
|
||||
WHERE h.id = %s
|
||||
AND gt.id = h.gametypeId
|
||||
AND s.id = gt.siteID
|
||||
AND hp.handId = h.id
|
||||
GROUP BY h.tableName, h.maxSeats, gt.category, gt.type, s.id, s.name
|
||||
"""
|
||||
|
||||
self.query['get_actual_seat'] = """
|
||||
|
|
|
@ -3,17 +3,17 @@
|
|||
Based on HUD_main .. who knows if we want to actually use this or not
|
||||
"""
|
||||
# Copyright 2008, 2009, Eric Blade
|
||||
#
|
||||
#
|
||||
# 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
|
||||
|
@ -31,7 +31,7 @@ import os
|
|||
import Options
|
||||
import traceback
|
||||
|
||||
(options, sys.argv) = Options.fpdb_options()
|
||||
(options, argv) = Options.fpdb_options()
|
||||
|
||||
if not options.errorsToConsole:
|
||||
print "Note: error output is being diverted to fpdb-error-log.txt and HUD-error.txt. Any major error will be reported there _only_."
|
||||
|
@ -55,7 +55,7 @@ import SummaryEverleaf
|
|||
|
||||
class Tournament:
|
||||
"""Tournament will hold the information about a tournament, I guess ? Remember I'm new to this language, so I don't know the best ways to do things"""
|
||||
|
||||
|
||||
def __init__(self, parent, site, tid): # site should probably be something in the config object, but i don't know how the config object works right now, so we're going to make it a str ..
|
||||
print "Tournament init"
|
||||
self.parent = parent
|
||||
|
@ -74,7 +74,7 @@ class Tournament:
|
|||
self.prizepool = 0
|
||||
self.players = {} # eventually i'd guess we'd probably want to fill this with playername:playerid's
|
||||
self.results = {} # i'd guess we'd want to load this up with playerid's instead of playernames, too, as well, also
|
||||
|
||||
|
||||
# if site == "Everleaf": # this should be attached to a button that says "retrieve tournament info" or something for sites that we know how to do it for
|
||||
summary = SummaryEverleaf.EverleafSummary()
|
||||
self.site = summary.parser.SiteName
|
||||
|
@ -87,9 +87,9 @@ class Tournament:
|
|||
self.rebuys = (summary.parser.TourneyRebuys == "yes")
|
||||
self.prizepool = summary.parser.TourneyPool
|
||||
self.numplayers = summary.parser.TourneyPlayers
|
||||
|
||||
|
||||
self.openwindow() # let's start by getting any info we need.. meh
|
||||
|
||||
|
||||
def openwindow(self, widget=None):
|
||||
if self.window is not None:
|
||||
self.window.show() # isn't there a better way to bring something to the front? not that GTK focus works right anyway, ever
|
||||
|
@ -102,24 +102,24 @@ class Tournament:
|
|||
self.window.set_border_width(1)
|
||||
self.window.set_default_size(480,640)
|
||||
self.window.set_resizable(True)
|
||||
|
||||
|
||||
self.main_vbox = gtk.VBox(False, 1)
|
||||
self.main_vbox.set_border_width(1)
|
||||
self.window.add(self.main_vbox)
|
||||
self.window.show()
|
||||
|
||||
|
||||
def addrebuy(self, widget=None):
|
||||
t = self
|
||||
t.numrebuys += 1
|
||||
t.mylabel.set_label("%s - %s - %s - %s - %s %s - %s - %s - %s - %s - %s" % (t.site, t.id, t.starttime, t.endtime, t.structure, t.game, t.buyin, t.fee, t.numrebuys, t.numplayers, t.prizepool))
|
||||
|
||||
|
||||
def delete_event(self, widget, event, data=None):
|
||||
return False
|
||||
|
||||
|
||||
def destroy(self, widget, data=None):
|
||||
return False
|
||||
#end def destroy
|
||||
|
||||
#end def destroy
|
||||
|
||||
|
||||
class ttracker_main(object):
|
||||
"""A main() object to own both the read_stdin thread and the gui."""
|
||||
|
@ -143,11 +143,11 @@ class ttracker_main(object):
|
|||
self.addbutton = gtk.Button(label="Enter Tournament")
|
||||
self.addbutton.connect("clicked", self.addClicked, "add tournament")
|
||||
self.vb.add(self.addbutton)
|
||||
|
||||
|
||||
self.main_window.add(self.vb)
|
||||
self.main_window.set_title("FPDB Tournament Tracker")
|
||||
self.main_window.show_all()
|
||||
|
||||
|
||||
def addClicked(self, widget, data): # what is "data"? i'm guessing anything i pass in after the function name in connect() but unsure because the documentation sucks
|
||||
print "addClicked", widget, data
|
||||
t = Tournament(self, None, None)
|
||||
|
@ -162,7 +162,7 @@ class ttracker_main(object):
|
|||
rebuybutton = gtk.Button(label="Rebuy")
|
||||
rebuybutton.connect("clicked", t.addrebuy)
|
||||
self.vb.add(rebuybutton)
|
||||
self.vb.add(editbutton) # These should probably be put in.. a.. h-box? i don't know..
|
||||
self.vb.add(editbutton) # These should probably be put in.. a.. h-box? i don't know..
|
||||
self.vb.add(mylabel)
|
||||
self.main_window.resize_children()
|
||||
self.main_window.show()
|
||||
|
@ -172,29 +172,29 @@ class ttracker_main(object):
|
|||
t.mylabel = mylabel
|
||||
t.editbutton = editbutton
|
||||
t.rebuybutton = rebuybutton
|
||||
self.vb.show()
|
||||
self.vb.show()
|
||||
print self.tourney_list
|
||||
|
||||
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
# when we move the start command over to the main program, we can have the main program ask for the tourney id, and pipe it into the stdin here
|
||||
# at least that was my initial thought on it
|
||||
|
||||
|
||||
def destroy(*args): # call back for terminating the main eventloop
|
||||
gtk.main_quit()
|
||||
|
||||
def create_HUD(self, new_hand_id, table, table_name, max, poker_game, stat_dict, cards):
|
||||
|
||||
|
||||
def idle_func():
|
||||
|
||||
|
||||
gtk.gdk.threads_enter()
|
||||
try:
|
||||
newlabel = gtk.Label("%s - %s" % (table.site, table_name))
|
||||
self.vb.add(newlabel)
|
||||
newlabel.show()
|
||||
self.main_window.resize_children()
|
||||
|
||||
|
||||
self.hud_dict[table_name].tablehudlabel = newlabel
|
||||
self.hud_dict[table_name].create(new_hand_id, self.config, stat_dict, cards)
|
||||
for m in self.hud_dict[table_name].aux_windows:
|
||||
|
@ -212,11 +212,11 @@ class ttracker_main(object):
|
|||
self.hud_dict[table_name].cards = cards
|
||||
[aw.update_data(new_hand_id, self.db_connection) for aw in self.hud_dict[table_name].aux_windows]
|
||||
gobject.idle_add(idle_func)
|
||||
|
||||
|
||||
def update_HUD(self, new_hand_id, table_name, config):
|
||||
"""Update a HUD gui from inside the non-gui read_stdin thread."""
|
||||
# This is written so that only 1 thread can touch the gui--mainly
|
||||
# for compatibility with Windows. This method dispatches the
|
||||
# for compatibility with Windows. This method dispatches the
|
||||
# function idle_func() to be run by the gui thread, at its leisure.
|
||||
def idle_func():
|
||||
gtk.gdk.threads_enter()
|
||||
|
@ -227,7 +227,7 @@ class ttracker_main(object):
|
|||
finally:
|
||||
gtk.gdk.threads_leave()
|
||||
gobject.idle_add(idle_func)
|
||||
|
||||
|
||||
def read_stdin(self): # This is the thread function
|
||||
"""Do all the non-gui heavy lifting for the HUD program."""
|
||||
|
||||
|
@ -238,7 +238,7 @@ class ttracker_main(object):
|
|||
self.db_connection = Database.Database(self.config, self.db_name, 'temp')
|
||||
# self.db_connection.init_hud_stat_vars(hud_days)
|
||||
tourny_finder = re.compile('(\d+) (\d+)')
|
||||
|
||||
|
||||
while 1: # wait for a new hand number on stdin
|
||||
new_hand_id = sys.stdin.readline()
|
||||
new_hand_id = string.rstrip(new_hand_id)
|
||||
|
@ -248,7 +248,7 @@ class ttracker_main(object):
|
|||
# get basic info about the new hand from the db
|
||||
# if there is a db error, complain, skip hand, and proceed
|
||||
try:
|
||||
(table_name, max, poker_game, type, site_id) = self.db_connection.get_table_name(new_hand_id)
|
||||
(table_name, max, poker_game, type, site_id, numseats) = self.db_connection.get_table_name(new_hand_id)
|
||||
stat_dict = self.db_connection.get_stats_from_hand(new_hand_id, aggregate_stats[type]
|
||||
,hud_style, agg_bb_mult)
|
||||
|
||||
|
@ -272,7 +272,7 @@ class ttracker_main(object):
|
|||
print "could not find tournament: skipping "
|
||||
sys.stderr.write("Could not find tournament %d in hand %d. Skipping.\n" % (int(tour_number), int(new_hand_id)))
|
||||
continue
|
||||
|
||||
|
||||
else:
|
||||
temp_key = table_name
|
||||
|
||||
|
@ -282,7 +282,7 @@ class ttracker_main(object):
|
|||
self.hud_dict[temp_key].cards = cards
|
||||
[aw.update_data(new_hand_id, self.db_connection) for aw in self.hud_dict[temp_key].aux_windows]
|
||||
self.update_HUD(new_hand_id, temp_key, self.config)
|
||||
|
||||
|
||||
# Or create a new HUD
|
||||
else:
|
||||
if type == "tour":
|
||||
|
|
|
@ -9,12 +9,12 @@ Routines for detecting and handling poker client windows for MS Windows.
|
|||
# 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
|
||||
|
@ -56,9 +56,13 @@ class Table(Table_Window):
|
|||
if 'Chat:' in titles[hwnd]: continue # Some sites (FTP? PS? Others?) have seperable or seperately constructed chat windows
|
||||
self.window = hwnd
|
||||
break
|
||||
|
||||
if self.window == None:
|
||||
print "Window %s not found. Skipping." % search_string
|
||||
|
||||
try:
|
||||
if self.window == None:
|
||||
print "Window %s not found. Skipping." % search_string
|
||||
return None
|
||||
except AttributeError:
|
||||
print "self.window doesn't exist? why?"
|
||||
return None
|
||||
|
||||
(x, y, width, height) = win32gui.GetWindowRect(hwnd)
|
||||
|
@ -70,7 +74,7 @@ class Table(Table_Window):
|
|||
print "x = %s y = %s width = %s height = %s" % (self.x, self.y, self.width, self.height)
|
||||
#self.height = int(height) - b_width - tb_height
|
||||
#self.width = int(width) - 2*b_width
|
||||
|
||||
|
||||
self.exe = self.get_nt_exe(hwnd)
|
||||
self.title = titles[hwnd]
|
||||
self.site = ""
|
||||
|
@ -99,37 +103,37 @@ class Table(Table_Window):
|
|||
|
||||
def get_nt_exe(self, hwnd):
|
||||
"""Finds the name of the executable that the given window handle belongs to."""
|
||||
|
||||
|
||||
# Request privileges to enable "debug process", so we can later use PROCESS_VM_READ, retardedly required to GetModuleFileNameEx()
|
||||
priv_flags = win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY
|
||||
hToken = win32security.OpenProcessToken (win32api.GetCurrentProcess(), priv_flags)
|
||||
# enable "debug process"
|
||||
privilege_id = win32security.LookupPrivilegeValue (None, win32security.SE_DEBUG_NAME)
|
||||
old_privs = win32security.AdjustTokenPrivileges (hToken, 0, [(privilege_id, win32security.SE_PRIVILEGE_ENABLED)])
|
||||
|
||||
|
||||
# Open the process, and query it's filename
|
||||
processid = win32process.GetWindowThreadProcessId(hwnd)
|
||||
pshandle = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, False, processid[1])
|
||||
exename = win32process.GetModuleFileNameEx(pshandle, 0)
|
||||
|
||||
|
||||
# clean up
|
||||
win32api.CloseHandle(pshandle)
|
||||
win32api.CloseHandle(hToken)
|
||||
|
||||
|
||||
return exename
|
||||
def topify(self, hud):
|
||||
"""Set the specified gtk window to stayontop in MS Windows."""
|
||||
|
||||
|
||||
# def windowEnumerationHandler(hwnd, resultList):
|
||||
# '''Callback for win32gui.EnumWindows() to generate list of window handles.'''
|
||||
# resultList.append((hwnd, win32gui.GetWindowText(hwnd)))
|
||||
#
|
||||
#
|
||||
# unique_name = 'unique name for finding this window'
|
||||
# real_name = hud.main_window.get_title()
|
||||
# hud.main_window.set_title(unique_name)
|
||||
# tl_windows = []
|
||||
# win32gui.EnumWindows(windowEnumerationHandler, tl_windows)
|
||||
#
|
||||
#
|
||||
# for w in tl_windows:
|
||||
# if w[1] == unique_name:
|
||||
# hud.main_window.gdkhandle = gtk.gdk.window_foreign_new(w[0])
|
||||
|
@ -139,14 +143,13 @@ class Table(Table_Window):
|
|||
(innerx, innery) = self.gdkhandle.get_origin()
|
||||
b_width = rect.x - innerx
|
||||
tb_height = rect.y - innery
|
||||
#
|
||||
#
|
||||
# style = win32gui.GetWindowLong(self.number, win32con.GWL_EXSTYLE)
|
||||
# style |= win32con.WS_CLIPCHILDREN
|
||||
# win32gui.SetWindowLong(self.number, win32con.GWL_EXSTYLE, style)
|
||||
# break
|
||||
|
||||
|
||||
# hud.main_window.set_title(real_name)
|
||||
|
||||
def win_enum_handler(hwnd, titles):
|
||||
titles[hwnd] = win32gui.GetWindowText(hwnd)
|
||||
|
||||
|
|
135
pyfpdb/fpdb.py
135
pyfpdb/fpdb.py
|
@ -69,6 +69,7 @@ import gtk
|
|||
import interlocks
|
||||
|
||||
|
||||
import GuiPrefs
|
||||
import GuiBulkImport
|
||||
import GuiPlayerStats
|
||||
import GuiPositionalStats
|
||||
|
@ -94,37 +95,97 @@ class fpdb:
|
|||
self.add_tab(new_tab, new_tab_name)
|
||||
self.display_tab(new_tab_name)
|
||||
|
||||
def add_tab(self, new_tab, new_tab_name):
|
||||
def add_tab(self, new_page, new_tab_name):
|
||||
"""adds a tab, namely creates the button and displays it and appends all the relevant arrays"""
|
||||
for i in self.tab_names: #todo: check this is valid
|
||||
if i == new_tab_name:
|
||||
for name in self.nb_tabs: #todo: check this is valid
|
||||
if name == new_tab_name:
|
||||
return # if tab already exists, just go to it
|
||||
|
||||
self.tabs.append(new_tab)
|
||||
self.tab_names.append(new_tab_name)
|
||||
used_before = False
|
||||
for i, name in enumerate(self.tab_names): #todo: check this is valid
|
||||
if name == new_tab_name:
|
||||
used_before = True
|
||||
event_box = self.tabs[i]
|
||||
page = self.pages[i]
|
||||
break
|
||||
|
||||
new_tab_sel_button = gtk.ToggleButton(new_tab_name)
|
||||
new_tab_sel_button.connect("clicked", self.tab_clicked, new_tab_name)
|
||||
self.tab_box.add(new_tab_sel_button)
|
||||
new_tab_sel_button.show()
|
||||
self.tab_buttons.append(new_tab_sel_button)
|
||||
if not used_before:
|
||||
event_box = self.create_custom_tab(new_tab_name, self.nb)
|
||||
page = new_page
|
||||
self.pages.append(new_page)
|
||||
self.tabs.append(event_box)
|
||||
self.tab_names.append(new_tab_name)
|
||||
|
||||
#self.nb.append_page(new_page, gtk.Label(new_tab_name))
|
||||
self.nb.append_page(page, event_box)
|
||||
self.nb_tabs.append(new_tab_name)
|
||||
page.show()
|
||||
|
||||
def display_tab(self, new_tab_name):
|
||||
"""displays the indicated tab"""
|
||||
tab_no = -1
|
||||
for i, name in enumerate(self.tab_names):
|
||||
if name == new_tab_name:
|
||||
for i, name in enumerate(self.nb_tabs):
|
||||
if new_tab_name == name:
|
||||
tab_no = i
|
||||
break
|
||||
|
||||
if tab_no == -1:
|
||||
raise FpdbError("invalid tab_no")
|
||||
if tab_no < 0 or tab_no >= self.nb.get_n_pages():
|
||||
raise FpdbError("invalid tab_no " + str(tab_no))
|
||||
else:
|
||||
self.main_vbox.remove(self.current_tab)
|
||||
self.current_tab=self.tabs[tab_no]
|
||||
self.main_vbox.add(self.current_tab)
|
||||
self.tab_buttons[tab_no].set_active(True)
|
||||
self.current_tab.show()
|
||||
self.nb.set_current_page(tab_no)
|
||||
|
||||
def create_custom_tab(self, text, nb):
|
||||
#create a custom tab for notebook containing a
|
||||
#label and a button with STOCK_ICON
|
||||
eventBox = gtk.EventBox()
|
||||
tabBox = gtk.HBox(False, 2)
|
||||
tabLabel = gtk.Label(text)
|
||||
tabBox.pack_start(tabLabel, False)
|
||||
eventBox.add(tabBox)
|
||||
|
||||
if nb.get_n_pages() > 0:
|
||||
tabButton = gtk.Button()
|
||||
|
||||
tabButton.connect('clicked', self.remove_tab, (nb, text))
|
||||
#Add a picture on a button
|
||||
self.add_icon_to_button(tabButton)
|
||||
tabBox.pack_start(tabButton, False)
|
||||
|
||||
# needed, otherwise even calling show_all on the notebook won't
|
||||
# make the hbox contents appear.
|
||||
tabBox.show_all()
|
||||
return eventBox
|
||||
|
||||
def add_icon_to_button(self, button):
|
||||
iconBox = gtk.HBox(False, 0)
|
||||
image = gtk.Image()
|
||||
image.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
|
||||
gtk.Button.set_relief(button, gtk.RELIEF_NONE)
|
||||
settings = gtk.Widget.get_settings(button);
|
||||
(w,h) = gtk.icon_size_lookup_for_settings(settings, gtk.ICON_SIZE_MENU);
|
||||
gtk.Widget.set_size_request (button, w + 4, h + 4);
|
||||
image.show()
|
||||
iconBox.pack_start(image, True, False, 0)
|
||||
button.add(iconBox)
|
||||
iconBox.show()
|
||||
return
|
||||
|
||||
# Remove a page from the notebook
|
||||
def remove_tab(self, button, data):
|
||||
(nb, text) = data
|
||||
page = -1
|
||||
#print "\n remove_tab: start", text
|
||||
for i, tab in enumerate(self.nb_tabs):
|
||||
if text == tab:
|
||||
page = i
|
||||
#print " page =", page
|
||||
if page >= 0 and page < self.nb.get_n_pages():
|
||||
#print " removing page", page
|
||||
del self.nb_tabs[page]
|
||||
nb.remove_page(page)
|
||||
# Need to refresh the widget --
|
||||
# This forces the widget to redraw itself.
|
||||
#nb.queue_draw_area(0,0,-1,-1) needed or not??
|
||||
|
||||
def delete_event(self, widget, event, data=None):
|
||||
return False
|
||||
|
@ -146,6 +207,20 @@ class fpdb:
|
|||
dia.run()
|
||||
dia.destroy()
|
||||
|
||||
def dia_preferences(self, widget, data=None):
|
||||
dia = gtk.Dialog("Preferences",
|
||||
self.window,
|
||||
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
|
||||
gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT))
|
||||
dia.set_default_size(500, 500)
|
||||
prefs = GuiPrefs.GuiPrefs(self.config, self.window, dia.vbox)
|
||||
response = dia.run()
|
||||
if response == gtk.RESPONSE_ACCEPT:
|
||||
# save updated config
|
||||
self.config.save()
|
||||
dia.destroy()
|
||||
|
||||
def dia_create_del_database(self, widget, data=None):
|
||||
self.warning_box("Unimplemented: Create/Delete Database")
|
||||
self.obtain_global_lock()
|
||||
|
@ -350,6 +425,7 @@ class fpdb:
|
|||
<menuitem action="LoadProf"/>
|
||||
<menuitem action="EditProf"/>
|
||||
<menuitem action="SaveProf"/>
|
||||
<menuitem action="Preferences"/>
|
||||
<separator/>
|
||||
<menuitem action="Quit"/>
|
||||
</menu>
|
||||
|
@ -396,6 +472,7 @@ class fpdb:
|
|||
('LoadProf', None, '_Load Profile (broken)', '<control>L', 'Load your profile', self.dia_load_profile),
|
||||
('EditProf', None, '_Edit Profile (todo)', '<control>E', 'Edit your profile', self.dia_edit_profile),
|
||||
('SaveProf', None, '_Save Profile (todo)', '<control>S', 'Save your profile', self.dia_save_profile),
|
||||
('Preferences', None, '_Preferences', None, 'Edit your preferences', self.dia_preferences),
|
||||
('import', None, '_Import'),
|
||||
('sethharchive', None, '_Set HandHistory Archive Directory', None, 'Set HandHistory Archive Directory', self.select_hhArchiveBase),
|
||||
('bulkimp', None, '_Bulk Import', '<control>B', 'Bulk Import', self.tab_bulk_import),
|
||||
|
@ -456,6 +533,10 @@ class fpdb:
|
|||
except Exceptions.FpdbMySQLAccessDenied:
|
||||
self.warning_box("MySQL Server reports: Access denied. Are your permissions set correctly?")
|
||||
exit()
|
||||
except Exceptions.FpdbMySQLNoDatabase:
|
||||
msg = "MySQL client reports: 2002 error. Unable to connect - Please check that the MySQL service has been started"
|
||||
self.warning_box(msg)
|
||||
exit
|
||||
|
||||
# except FpdbMySQLFailedError:
|
||||
# self.warning_box("Unable to connect to MySQL! Is the MySQL server running?!", "FPDB ERROR")
|
||||
|
@ -611,18 +692,14 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
|||
menubar.show()
|
||||
#done menubar
|
||||
|
||||
self.nb = gtk.Notebook()
|
||||
self.nb.set_show_tabs(True)
|
||||
self.nb.show()
|
||||
self.main_vbox.pack_start(self.nb, True, True, 0)
|
||||
self.pages=[]
|
||||
self.tabs=[]
|
||||
self.tab_names=[]
|
||||
self.tab_buttons=[]
|
||||
self.tab_box = gtk.HBox(True,1)
|
||||
self.main_vbox.pack_start(self.tab_box, False, True, 0)
|
||||
self.tab_box.show()
|
||||
#done tab bar
|
||||
|
||||
self.current_tab = gtk.VBox(False,1)
|
||||
self.current_tab.set_border_width(1)
|
||||
self.main_vbox.add(self.current_tab)
|
||||
self.current_tab.show()
|
||||
self.nb_tabs=[]
|
||||
|
||||
self.tab_main_help(None, None)
|
||||
|
||||
|
|
|
@ -106,6 +106,8 @@ class fpdb_db:
|
|||
except MySQLdb.Error, ex:
|
||||
if ex.args[0] == 1045:
|
||||
raise FpdbMySQLAccessDenied(ex.args[0], ex.args[1])
|
||||
elif ex.args[0] == 2002:
|
||||
raise FpdbMySQLNoDatabase(ex.args[0], ex.args[1])
|
||||
else:
|
||||
print "*** WARNING UNKNOWN MYSQL ERROR", ex
|
||||
elif backend == fpdb_db.PGSQL:
|
||||
|
@ -149,11 +151,11 @@ class fpdb_db:
|
|||
else:
|
||||
logging.warning("SQLite won't work well without 'sqlalchemy' installed.")
|
||||
|
||||
if not os.path.isdir(Configuration.DIR_DATABASES):
|
||||
if not os.path.isdir(Configuration.DIR_DATABASES) and not database == ":memory:":
|
||||
print "Creating directory: '%s'" % (Configuration.DIR_DATABASES)
|
||||
os.mkdir(Configuration.DIR_DATABASES)
|
||||
self.db = sqlite3.connect( os.path.join(Configuration.DIR_DATABASES, database)
|
||||
, detect_types=sqlite3.PARSE_DECLTYPES )
|
||||
database = os.path.join(Configuration.DIR_DATABASE, database)
|
||||
self.db = sqlite3.connect(database, detect_types=sqlite3.PARSE_DECLTYPES )
|
||||
sqlite3.register_converter("bool", lambda x: bool(int(x)))
|
||||
sqlite3.register_adapter(bool, lambda x: "1" if x else "0")
|
||||
self.db.create_function("floor", 1, math.floor)
|
||||
|
|
|
@ -51,7 +51,7 @@ except ImportError:
|
|||
log.debug("Import database module: MySQLdb not found")
|
||||
else:
|
||||
mysqlLibFound = True
|
||||
|
||||
|
||||
try:
|
||||
import psycopg2
|
||||
except ImportError:
|
||||
|
@ -81,7 +81,7 @@ class Importer:
|
|||
self.pos_in_file = {} # dict to remember how far we have read in the file
|
||||
#Set defaults
|
||||
self.callHud = self.config.get_import_parameters().get("callFpdbHud")
|
||||
|
||||
|
||||
# CONFIGURATION OPTIONS
|
||||
self.settings.setdefault("minPrint", 30)
|
||||
self.settings.setdefault("handCount", 0)
|
||||
|
@ -243,9 +243,9 @@ class Importer:
|
|||
#self.writeq.join()
|
||||
#using empty() might be more reliable:
|
||||
while not self.writeq.empty() and len(threading.enumerate()) > 1:
|
||||
# TODO: Do we need to actually tell the progress indicator to move, or is it already moving, and we just need to process events...
|
||||
# TODO: Do we need to actually tell the progress indicator to move, or is it already moving, and we just need to process events...
|
||||
while gtk.events_pending(): # see http://faq.pygtk.org/index.py?req=index for more hints (3.7)
|
||||
gtk.main_iteration(False)
|
||||
gtk.main_iteration(False)
|
||||
sleep(0.5)
|
||||
print " ... writers finished"
|
||||
|
||||
|
@ -267,7 +267,7 @@ class Importer:
|
|||
""""Read filenames in self.filelist and pass to import_file_dict().
|
||||
Uses a separate database connection if created as a thread (caller
|
||||
passes None or no param as db)."""
|
||||
|
||||
|
||||
totstored = 0
|
||||
totdups = 0
|
||||
totpartial = 0
|
||||
|
@ -300,7 +300,7 @@ class Importer:
|
|||
except:
|
||||
pass # if this fails we're probably doomed anyway
|
||||
if self.settings['handsInDB'] < 5000: return "drop"
|
||||
if len(self.filelist) < 50: return "don't drop"
|
||||
if len(self.filelist) < 50: return "don't drop"
|
||||
if self.settings['handsInDB'] > 50000: return "don't drop"
|
||||
return "drop"
|
||||
|
||||
|
@ -313,7 +313,7 @@ class Importer:
|
|||
size_per_hand = 1300.0 # wag based on a PS 6-up FLHE file. Actual value not hugely important
|
||||
# as values of scale and increment compensate for it anyway.
|
||||
# decimal used to force float arithmetic
|
||||
|
||||
|
||||
# get number of hands in db
|
||||
if 'handsInDB' not in self.settings:
|
||||
try:
|
||||
|
@ -322,7 +322,7 @@ class Importer:
|
|||
self.settings['handsInDB'] = tmpcursor.fetchone()[0]
|
||||
except:
|
||||
pass # if this fails we're probably doomed anyway
|
||||
|
||||
|
||||
# add up size of import files
|
||||
total_size = 0.0
|
||||
for file in self.filelist:
|
||||
|
@ -344,12 +344,12 @@ class Importer:
|
|||
#Check for new files in monitored directories
|
||||
#todo: make efficient - always checks for new file, should be able to use mtime of directory
|
||||
# ^^ May not work on windows
|
||||
|
||||
|
||||
#rulog = open('runUpdated.txt', 'a')
|
||||
#rulog.writelines("runUpdated ... ")
|
||||
for site in self.dirlist:
|
||||
self.addImportDirectory(self.dirlist[site][0], False, site, self.dirlist[site][1])
|
||||
|
||||
|
||||
for file in self.filelist:
|
||||
if os.path.exists(file):
|
||||
stat_info = os.stat(file)
|
||||
|
@ -369,13 +369,13 @@ class Importer:
|
|||
self.updatedtime[file] = time()
|
||||
else:
|
||||
self.removeFromFileList[file] = True
|
||||
|
||||
|
||||
self.addToDirList = filter(lambda x: self.addImportDirectory(x, True, self.addToDirList[x][0], self.addToDirList[x][1]), self.addToDirList)
|
||||
|
||||
for file in self.removeFromFileList:
|
||||
if file in self.filelist:
|
||||
del self.filelist[file]
|
||||
|
||||
|
||||
self.addToDirList = {}
|
||||
self.removeFromFileList = {}
|
||||
self.database.rollback()
|
||||
|
@ -385,7 +385,7 @@ class Importer:
|
|||
# This is now an internal function that should not be called directly.
|
||||
def import_file_dict(self, db, file, site, filter, q=None):
|
||||
#print "import_file_dict"
|
||||
|
||||
|
||||
if os.path.isdir(file):
|
||||
self.addToDirList[file] = [site] + [filter]
|
||||
return
|
||||
|
@ -393,7 +393,7 @@ class Importer:
|
|||
conv = None
|
||||
(stored, duplicates, partial, errors, ttime) = (0, 0, 0, 0, 0)
|
||||
|
||||
file = file.decode(fpdb_simple.LOCALE_ENCODING)
|
||||
file = file.decode(fpdb_simple.LOCALE_ENCODING)
|
||||
|
||||
# Load filter, process file, pass returned filename to import_fpdb_file
|
||||
if self.settings['threads'] > 0 and self.writeq is not None:
|
||||
|
@ -473,7 +473,7 @@ class Importer:
|
|||
ttime = time() - starttime
|
||||
if q is None:
|
||||
log.info("Total stored: %(stored)d\tduplicates:%(duplicates)d\terrors:%(errors)d\ttime:%(ttime)s" % locals())
|
||||
|
||||
|
||||
if not stored:
|
||||
if duplicates:
|
||||
for line_no in xrange(len(self.lines)):
|
||||
|
@ -488,7 +488,7 @@ class Importer:
|
|||
|
||||
return (stored, duplicates, partial, errors, ttime)
|
||||
# end def import_fpdb_file
|
||||
|
||||
|
||||
|
||||
def import_fpdb_lines(self, db, lines, starttime, file, site, q = None):
|
||||
"""Import an fpdb hand history held in the list lines, could be one hand or many"""
|
||||
|
@ -496,7 +496,7 @@ class Importer:
|
|||
#db.lock_for_insert() # should be ok when using one thread, but doesn't help??
|
||||
while gtk.events_pending():
|
||||
gtk.main_iteration(False)
|
||||
|
||||
|
||||
try: # sometimes we seem to be getting an empty self.lines, in which case, we just want to return.
|
||||
firstline = lines[0]
|
||||
except:
|
||||
|
@ -524,7 +524,7 @@ class Importer:
|
|||
if len(lines[i]) < 2: #Wierd way to detect for '\r\n' or '\n'
|
||||
endpos = i
|
||||
hand = lines[startpos:endpos]
|
||||
|
||||
|
||||
if len(hand[0]) < 2:
|
||||
hand=hand[1:]
|
||||
|
||||
|
@ -548,7 +548,7 @@ class Importer:
|
|||
if self.callHud:
|
||||
#print "call to HUD here. handsId:",handsId
|
||||
#pipe the Hands.id out to the HUD
|
||||
print "fpdb_import: sending hand to hud", handsId, "pipe =", self.caller.pipe_to_hud
|
||||
# print "fpdb_import: sending hand to hud", handsId, "pipe =", self.caller.pipe_to_hud
|
||||
self.caller.pipe_to_hud.stdin.write("%s" % (handsId) + os.linesep)
|
||||
except Exceptions.DuplicateError:
|
||||
duplicates += 1
|
||||
|
@ -574,7 +574,7 @@ class Importer:
|
|||
if self.settings['minPrint']:
|
||||
if not ((stored+duplicates+errors) % self.settings['minPrint']):
|
||||
print "stored:", stored, " duplicates:", duplicates, "errors:", errors
|
||||
|
||||
|
||||
if self.settings['handCount']:
|
||||
if ((stored+duplicates+errors) >= self.settings['handCount']):
|
||||
if not self.settings['quiet']:
|
||||
|
|
|
@ -0,0 +1,971 @@
|
|||
PokerStars Game #35839001292: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:12:58 ET
|
||||
Table 'Theodora VI' 6-max Seat #5 is the button
|
||||
Seat 1: s0rrow ($4 in chips)
|
||||
Seat 2: rumble1111 ($4.58 in chips)
|
||||
Seat 3: Eisenherz73 ($7.54 in chips)
|
||||
Seat 4: cypis28 ($1.40 in chips)
|
||||
Seat 5: bakter9 ($0.78 in chips)
|
||||
Seat 6: TheLabman ($6.31 in chips)
|
||||
TheLabman: posts small blind $0.05
|
||||
s0rrow: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [8s Ts 8h 2s 3s]
|
||||
rumble1111: calls $0.10
|
||||
Eisenherz73: folds
|
||||
cypis28: raises $0.10 to $0.20
|
||||
bakter9: raises $0.10 to $0.30
|
||||
TheLabman: folds
|
||||
s0rrow: folds
|
||||
rumble1111: calls $0.20
|
||||
cypis28: raises $0.10 to $0.40
|
||||
Betting is capped
|
||||
bakter9: calls $0.10
|
||||
rumble1111: calls $0.10
|
||||
*** FIRST DRAW ***
|
||||
rumble1111: discards 2 cards
|
||||
cypis28: discards 2 cards
|
||||
bakter9: discards 1 card
|
||||
rumble1111: checks
|
||||
cypis28: bets $0.10
|
||||
bakter9: raises $0.10 to $0.20
|
||||
rumble1111: folds
|
||||
cypis28: calls $0.10
|
||||
*** SECOND DRAW ***
|
||||
cypis28: discards 1 card
|
||||
bakter9: stands pat
|
||||
cypis28: bets $0.20
|
||||
bakter9: calls $0.18 and is all-in
|
||||
Uncalled bet ($0.02) returned to cypis28
|
||||
*** THIRD DRAW ***
|
||||
cypis28: stands pat
|
||||
bakter9: stands pat
|
||||
*** SHOW DOWN ***
|
||||
cypis28: shows [7c 6d 9c 4s 2c] (Lo: 9,7,6,4,2)
|
||||
bakter9: shows [7s 5s 8d 4h 3c] (Lo: 8,7,5,4,3)
|
||||
bakter9 collected $2.01 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $2.11 | Rake $0.10
|
||||
Seat 1: s0rrow (big blind) folded before the Draw
|
||||
Seat 2: rumble1111 folded after the 1st Draw
|
||||
Seat 3: Eisenherz73 folded before the Draw (didn't bet)
|
||||
Seat 4: cypis28 showed [7c 6d 9c 4s 2c] and lost with Lo: 9,7,6,4,2
|
||||
Seat 5: bakter9 (button) showed [7s 5s 8d 4h 3c] and won ($2.01) with Lo: 8,7,5,4,3
|
||||
Seat 6: TheLabman (small blind) folded before the Draw
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839050562: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:14:02 ET
|
||||
Table 'Theodora VI' 6-max Seat #6 is the button
|
||||
Seat 1: s0rrow ($3.90 in chips)
|
||||
Seat 2: rumble1111 ($4.18 in chips)
|
||||
Seat 3: Eisenherz73 ($7.54 in chips)
|
||||
Seat 4: cypis28 ($0.62 in chips)
|
||||
Seat 5: bakter9 ($2.01 in chips)
|
||||
Seat 6: TheLabman ($6.26 in chips)
|
||||
s0rrow: posts small blind $0.05
|
||||
rumble1111: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [Kh Th 3d Tc 7c]
|
||||
Eisenherz73: folds
|
||||
cypis28: folds
|
||||
bakter9: calls $0.10
|
||||
TheLabman: folds
|
||||
s0rrow: calls $0.05
|
||||
rumble1111: checks
|
||||
*** FIRST DRAW ***
|
||||
s0rrow: discards 2 cards [Kh Th]
|
||||
Dealt to s0rrow [3d Tc 7c] [5c Qs]
|
||||
rumble1111: discards 2 cards
|
||||
bakter9: discards 2 cards
|
||||
s0rrow: checks
|
||||
rumble1111: bets $0.10
|
||||
bakter9: folds
|
||||
s0rrow: calls $0.10
|
||||
*** SECOND DRAW ***
|
||||
s0rrow: discards 2 cards [Qs Tc]
|
||||
Dealt to s0rrow [3d 7c 5c] [4c 2s]
|
||||
rumble1111: stands pat
|
||||
s0rrow: bets $0.20
|
||||
rumble1111: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
s0rrow: stands pat on [3d 7c 5c 4c 2s]
|
||||
rumble1111: discards 1 card
|
||||
s0rrow: bets $0.20
|
||||
rumble1111: calls $0.20
|
||||
*** SHOW DOWN ***
|
||||
s0rrow: shows [5c 4c 3d 2s 7c] (Lo: 7,5,4,3,2)
|
||||
rumble1111: mucks hand
|
||||
s0rrow collected $1.24 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $1.30 | Rake $0.06
|
||||
Seat 1: s0rrow (small blind) showed [5c 4c 3d 2s 7c] and won ($1.24) with Lo: 7,5,4,3,2
|
||||
Seat 2: rumble1111 (big blind) mucked [8s 7d 3c 6d 2h]
|
||||
Seat 3: Eisenherz73 folded before the Draw (didn't bet)
|
||||
Seat 4: cypis28 folded before the Draw (didn't bet)
|
||||
Seat 5: bakter9 folded after the 1st Draw
|
||||
Seat 6: TheLabman (button) folded before the Draw (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839109592: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:15:18 ET
|
||||
Table 'Theodora VI' 6-max Seat #1 is the button
|
||||
Seat 1: s0rrow ($4.54 in chips)
|
||||
Seat 2: rumble1111 ($3.58 in chips)
|
||||
Seat 3: Eisenherz73 ($7.54 in chips)
|
||||
Seat 4: cypis28 ($0.62 in chips)
|
||||
Seat 5: bakter9 ($1.91 in chips)
|
||||
Seat 6: TheLabman ($6.26 in chips)
|
||||
rumble1111: posts small blind $0.05
|
||||
Eisenherz73: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [Tc 9s Qc 8h 3d]
|
||||
cypis28: folds
|
||||
bakter9: folds
|
||||
TheLabman: folds
|
||||
s0rrow: folds
|
||||
rumble1111: folds
|
||||
Uncalled bet ($0.05) returned to Eisenherz73
|
||||
Eisenherz73 collected $0.10 from pot
|
||||
Eisenherz73: doesn't show hand
|
||||
*** SUMMARY ***
|
||||
Total pot $0.10 | Rake $0
|
||||
Seat 1: s0rrow (button) folded before the Draw (didn't bet)
|
||||
Seat 2: rumble1111 (small blind) folded before the Draw
|
||||
Seat 3: Eisenherz73 (big blind) collected ($0.10)
|
||||
Seat 4: cypis28 folded before the Draw (didn't bet)
|
||||
Seat 5: bakter9 folded before the Draw (didn't bet)
|
||||
Seat 6: TheLabman folded before the Draw (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839118248: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:15:29 ET
|
||||
Table 'Theodora VI' 6-max Seat #2 is the button
|
||||
Seat 1: s0rrow ($4.54 in chips)
|
||||
Seat 2: rumble1111 ($3.53 in chips)
|
||||
Seat 3: Eisenherz73 ($7.59 in chips)
|
||||
Seat 4: cypis28 ($0.62 in chips)
|
||||
Seat 5: bakter9 ($1.91 in chips)
|
||||
Seat 6: TheLabman ($6.26 in chips)
|
||||
Eisenherz73: posts small blind $0.05
|
||||
cypis28: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [Js 3d Qc 9s 5h]
|
||||
bakter9: raises $0.10 to $0.20
|
||||
TheLabman: folds
|
||||
s0rrow: folds
|
||||
rumble1111: folds
|
||||
Eisenherz73: folds
|
||||
cypis28: raises $0.10 to $0.30
|
||||
bakter9: raises $0.10 to $0.40
|
||||
Betting is capped
|
||||
cypis28: calls $0.10
|
||||
*** FIRST DRAW ***
|
||||
cypis28: discards 2 cards
|
||||
bakter9: discards 1 card
|
||||
cypis28: bets $0.10
|
||||
bakter9: raises $0.10 to $0.20
|
||||
cypis28: raises $0.02 to $0.22 and is all-in
|
||||
bakter9: calls $0.02
|
||||
*** SECOND DRAW ***
|
||||
cypis28: discards 1 card
|
||||
bakter9: stands pat
|
||||
*** THIRD DRAW ***
|
||||
cypis28: stands pat
|
||||
bakter9: stands pat
|
||||
*** SHOW DOWN ***
|
||||
cypis28: shows [7h 3s 2h 8h 6h] (Lo: 8,7,6,3,2)
|
||||
bakter9: shows [4d 7c 2c 5s 6d] (Lo: 7,6,5,4,2)
|
||||
bakter9 collected $1.23 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $1.29 | Rake $0.06
|
||||
Seat 1: s0rrow folded before the Draw (didn't bet)
|
||||
Seat 2: rumble1111 (button) folded before the Draw (didn't bet)
|
||||
Seat 3: Eisenherz73 (small blind) folded before the Draw
|
||||
Seat 4: cypis28 (big blind) showed [7h 3s 2h 8h 6h] and lost with Lo: 8,7,6,3,2
|
||||
Seat 5: bakter9 showed [4d 7c 2c 5s 6d] and won ($1.23) with Lo: 7,6,5,4,2
|
||||
Seat 6: TheLabman folded before the Draw (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839149377: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:16:10 ET
|
||||
Table 'Theodora VI' 6-max Seat #3 is the button
|
||||
Seat 1: s0rrow ($4.54 in chips)
|
||||
Seat 2: rumble1111 ($3.53 in chips)
|
||||
Seat 3: Eisenherz73 ($7.54 in chips)
|
||||
Seat 5: bakter9 ($2.52 in chips)
|
||||
Seat 6: TheLabman ($6.26 in chips)
|
||||
bakter9: posts small blind $0.05
|
||||
TheLabman: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [2c 3c Ts Jc Kc]
|
||||
cypis28 leaves the table
|
||||
s0rrow: folds
|
||||
rumble1111: folds
|
||||
Eisenherz73: folds
|
||||
bakter9: calls $0.05
|
||||
TheLabman: checks
|
||||
*** FIRST DRAW ***
|
||||
bakter9: discards 2 cards
|
||||
tom1206 joins the table at seat #4
|
||||
TheLabman: discards 4 cards
|
||||
bakter9: checks
|
||||
TheLabman: checks
|
||||
*** SECOND DRAW ***
|
||||
bakter9: discards 1 card
|
||||
TheLabman: discards 3 cards
|
||||
bakter9: checks
|
||||
TheLabman: checks
|
||||
*** THIRD DRAW ***
|
||||
bakter9: discards 1 card
|
||||
TheLabman: discards 1 card
|
||||
bakter9: bets $0.20
|
||||
TheLabman: calls $0.20
|
||||
*** SHOW DOWN ***
|
||||
bakter9: shows [5d 4h 8h 7d 6h] (Lo: a straight, Four to Eight)
|
||||
TheLabman: shows [3h 6d 7h 5h 8d] (Lo: 8,7,6,5,3)
|
||||
TheLabman collected $0.58 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.60 | Rake $0.02
|
||||
Seat 1: s0rrow folded before the Draw (didn't bet)
|
||||
Seat 2: rumble1111 folded before the Draw (didn't bet)
|
||||
Seat 3: Eisenherz73 (button) folded before the Draw (didn't bet)
|
||||
Seat 5: bakter9 (small blind) showed [5d 4h 8h 7d 6h] and lost with Lo: a straight, Four to Eight
|
||||
Seat 6: TheLabman (big blind) showed [3h 6d 7h 5h 8d] and won ($0.58) with Lo: 8,7,6,5,3
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839176665: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:16:46 ET
|
||||
Table 'Theodora VI' 6-max Seat #5 is the button
|
||||
Seat 1: s0rrow ($4.54 in chips)
|
||||
Seat 2: rumble1111 ($3.53 in chips)
|
||||
Seat 3: Eisenherz73 ($7.54 in chips)
|
||||
Seat 4: tom1206 ($4 in chips)
|
||||
Seat 5: bakter9 ($2.22 in chips)
|
||||
Seat 6: TheLabman ($6.54 in chips)
|
||||
TheLabman: posts small blind $0.05
|
||||
s0rrow: posts big blind $0.10
|
||||
tom1206: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [5d Js 7d Jd 4d]
|
||||
rumble1111: calls $0.10
|
||||
Eisenherz73: calls $0.10
|
||||
tom1206: checks
|
||||
bakter9: folds
|
||||
TheLabman: calls $0.05
|
||||
s0rrow: checks
|
||||
*** FIRST DRAW ***
|
||||
TheLabman: discards 3 cards
|
||||
s0rrow: discards 2 cards [Js Jd]
|
||||
Dealt to s0rrow [5d 7d 4d] [6d 2s]
|
||||
rumble1111: discards 2 cards
|
||||
Eisenherz73: discards 2 cards
|
||||
tom1206: discards 2 cards
|
||||
TheLabman: checks
|
||||
s0rrow: checks
|
||||
rumble1111: checks
|
||||
Eisenherz73: checks
|
||||
tom1206: checks
|
||||
*** SECOND DRAW ***
|
||||
TheLabman: discards 3 cards
|
||||
s0rrow: stands pat on [5d 7d 4d 6d 2s]
|
||||
rumble1111: discards 2 cards
|
||||
Eisenherz73: discards 1 card
|
||||
tom1206: discards 2 cards
|
||||
TheLabman: checks
|
||||
s0rrow: checks
|
||||
rumble1111: checks
|
||||
Eisenherz73: checks
|
||||
tom1206: checks
|
||||
*** THIRD DRAW ***
|
||||
TheLabman: discards 2 cards
|
||||
s0rrow: stands pat on [5d 7d 4d 6d 2s]
|
||||
rumble1111: discards 1 card
|
||||
The deck is reshuffled
|
||||
Eisenherz73: discards 1 card
|
||||
tom1206: discards 2 cards
|
||||
TheLabman: checks
|
||||
s0rrow: bets $0.20
|
||||
rumble1111: folds
|
||||
Eisenherz73: folds
|
||||
Eisenherz73 is sitting out
|
||||
Eisenherz73 leaves the table
|
||||
tom1206: folds
|
||||
TheLabman: folds
|
||||
Uncalled bet ($0.20) returned to s0rrow
|
||||
X USN-USMC joins the table at seat #3
|
||||
s0rrow collected $0.48 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.50 | Rake $0.02
|
||||
Seat 1: s0rrow (big blind) collected ($0.48)
|
||||
Seat 2: rumble1111 folded after the 3rd Draw
|
||||
Seat 3: Eisenherz73 folded after the 3rd Draw
|
||||
Seat 4: tom1206 folded after the 3rd Draw
|
||||
Seat 5: bakter9 (button) folded before the Draw (didn't bet)
|
||||
Seat 6: TheLabman (small blind) folded after the 3rd Draw
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839272371: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:18:50 ET
|
||||
Table 'Theodora VI' 6-max Seat #6 is the button
|
||||
Seat 1: s0rrow ($4.92 in chips)
|
||||
Seat 2: rumble1111 ($3.43 in chips)
|
||||
Seat 3: X USN-USMC ($4 in chips)
|
||||
Seat 4: tom1206 ($3.90 in chips)
|
||||
Seat 5: bakter9 ($2.22 in chips)
|
||||
Seat 6: TheLabman ($6.44 in chips)
|
||||
s0rrow: posts small blind $0.05
|
||||
rumble1111: posts big blind $0.10
|
||||
X USN-USMC: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [Th Js Kd 2h Qc]
|
||||
X USN-USMC: checks
|
||||
tom1206 has timed out
|
||||
tom1206: folds
|
||||
tom1206 is sitting out
|
||||
bakter9: folds
|
||||
TheLabman: calls $0.10
|
||||
s0rrow: folds
|
||||
tom1206 has returned
|
||||
rumble1111: checks
|
||||
*** FIRST DRAW ***
|
||||
rumble1111: discards 3 cards
|
||||
X USN-USMC: discards 1 card
|
||||
TheLabman: discards 2 cards
|
||||
rumble1111: checks
|
||||
X USN-USMC: bets $0.10
|
||||
TheLabman: calls $0.10
|
||||
rumble1111: calls $0.10
|
||||
*** SECOND DRAW ***
|
||||
rumble1111 said, "other fckers"
|
||||
rumble1111: discards 1 card
|
||||
X USN-USMC: discards 1 card
|
||||
TheLabman: discards 1 card
|
||||
rumble1111: checks
|
||||
X USN-USMC: bets $0.20
|
||||
TheLabman: calls $0.20
|
||||
rumble1111: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
rumble1111: discards 1 card
|
||||
X USN-USMC: discards 1 card
|
||||
TheLabman: discards 1 card
|
||||
rumble1111: checks
|
||||
X USN-USMC: bets $0.20
|
||||
TheLabman: folds
|
||||
rumble1111: folds
|
||||
Uncalled bet ($0.20) returned to X USN-USMC
|
||||
X USN-USMC collected $1.19 from pot
|
||||
X USN-USMC: doesn't show hand
|
||||
*** SUMMARY ***
|
||||
Total pot $1.25 | Rake $0.06
|
||||
Seat 1: s0rrow (small blind) folded before the Draw
|
||||
Seat 2: rumble1111 (big blind) folded after the 3rd Draw
|
||||
Seat 3: X USN-USMC collected ($1.19)
|
||||
Seat 4: tom1206 folded before the Draw (didn't bet)
|
||||
Seat 5: bakter9 folded before the Draw (didn't bet)
|
||||
Seat 6: TheLabman (button) folded after the 3rd Draw
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839360555: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:20:53 ET
|
||||
Table 'Theodora VI' 6-max Seat #1 is the button
|
||||
Seat 1: s0rrow ($4.87 in chips)
|
||||
Seat 2: rumble1111 ($3.03 in chips)
|
||||
Seat 3: X USN-USMC ($4.79 in chips)
|
||||
Seat 4: tom1206 ($3.90 in chips)
|
||||
Seat 5: bakter9 ($2.22 in chips)
|
||||
Seat 6: TheLabman ($6.04 in chips)
|
||||
rumble1111: posts small blind $0.05
|
||||
X USN-USMC: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [9s Kh 2d Ks 4c]
|
||||
tom1206: raises $0.10 to $0.20
|
||||
bakter9: folds
|
||||
TheLabman: folds
|
||||
s0rrow: folds
|
||||
rumble1111: calls $0.15
|
||||
X USN-USMC: calls $0.10
|
||||
*** FIRST DRAW ***
|
||||
rumble1111: discards 3 cards
|
||||
X USN-USMC: discards 2 cards
|
||||
tom1206: discards 2 cards
|
||||
rumble1111: checks
|
||||
X USN-USMC: bets $0.10
|
||||
tom1206: calls $0.10
|
||||
rumble1111: calls $0.10
|
||||
*** SECOND DRAW ***
|
||||
rumble1111: discards 3 cards
|
||||
X USN-USMC: stands pat
|
||||
tom1206: discards 1 card
|
||||
rumble1111: checks
|
||||
X USN-USMC: bets $0.20
|
||||
tom1206: raises $0.20 to $0.40
|
||||
rumble1111: calls $0.40
|
||||
X USN-USMC: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
rumble1111: discards 2 cards
|
||||
X USN-USMC: stands pat
|
||||
tom1206: stands pat
|
||||
rumble1111: bets $0.20
|
||||
X USN-USMC: folds
|
||||
tom1206: calls $0.20
|
||||
*** SHOW DOWN ***
|
||||
rumble1111: shows [7d 4s 2s 3s 6c] (Lo: 7,6,4,3,2)
|
||||
tom1206: mucks hand
|
||||
rumble1111 collected $2.38 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $2.50 | Rake $0.12
|
||||
Seat 1: s0rrow (button) folded before the Draw (didn't bet)
|
||||
Seat 2: rumble1111 (small blind) showed [7d 4s 2s 3s 6c] and won ($2.38) with Lo: 7,6,4,3,2
|
||||
Seat 3: X USN-USMC (big blind) folded after the 3rd Draw
|
||||
Seat 4: tom1206 mucked [4h 6d 8d 5c 3d]
|
||||
Seat 5: bakter9 folded before the Draw (didn't bet)
|
||||
Seat 6: TheLabman folded before the Draw (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839412131: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:21:58 ET
|
||||
Table 'Theodora VI' 6-max Seat #2 is the button
|
||||
Seat 1: s0rrow ($4.87 in chips)
|
||||
Seat 2: rumble1111 ($4.51 in chips)
|
||||
Seat 3: X USN-USMC ($4.09 in chips)
|
||||
Seat 4: tom1206 ($3 in chips)
|
||||
Seat 5: bakter9 ($2.22 in chips)
|
||||
Seat 6: TheLabman ($6.04 in chips)
|
||||
X USN-USMC: posts small blind $0.05
|
||||
tom1206: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [8c 3s Tc Ac Qd]
|
||||
bakter9: calls $0.10
|
||||
TheLabman: calls $0.10
|
||||
s0rrow: folds
|
||||
rumble1111: calls $0.10
|
||||
X USN-USMC: calls $0.05
|
||||
tom1206: checks
|
||||
*** FIRST DRAW ***
|
||||
X USN-USMC: discards 4 cards
|
||||
tom1206: discards 3 cards
|
||||
bakter9: discards 2 cards
|
||||
TheLabman: discards 3 cards
|
||||
rumble1111: discards 3 cards
|
||||
X USN-USMC: checks
|
||||
tom1206: checks
|
||||
bakter9: checks
|
||||
TheLabman: checks
|
||||
rumble1111: checks
|
||||
*** SECOND DRAW ***
|
||||
X USN-USMC: discards 2 cards
|
||||
tom1206: discards 2 cards
|
||||
bakter9: discards 1 card
|
||||
TheLabman: discards 2 cards
|
||||
The deck is reshuffled
|
||||
rumble1111: discards 1 card
|
||||
X USN-USMC: bets $0.20
|
||||
tom1206: calls $0.20
|
||||
bakter9: calls $0.20
|
||||
TheLabman: folds
|
||||
rumble1111: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
X USN-USMC: discards 1 card
|
||||
tom1206: discards 1 card
|
||||
bakter9: discards 1 card
|
||||
rumble1111: stands pat
|
||||
X USN-USMC: checks
|
||||
tom1206: bets $0.20
|
||||
bakter9: calls $0.20
|
||||
rumble1111: folds
|
||||
X USN-USMC: folds
|
||||
*** SHOW DOWN ***
|
||||
tom1206: shows [4s 3h 7d 8s 2c] (Lo: 8,7,4,3,2)
|
||||
bakter9: shows [8d 5c 7c 2d 6h] (Lo: 8,7,6,5,2)
|
||||
tom1206 collected $1.62 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $1.70 | Rake $0.08
|
||||
Seat 1: s0rrow folded before the Draw (didn't bet)
|
||||
Seat 2: rumble1111 (button) folded after the 3rd Draw
|
||||
Seat 3: X USN-USMC (small blind) folded after the 3rd Draw
|
||||
Seat 4: tom1206 (big blind) showed [4s 3h 7d 8s 2c] and won ($1.62) with Lo: 8,7,4,3,2
|
||||
Seat 5: bakter9 showed [8d 5c 7c 2d 6h] and lost with Lo: 8,7,6,5,2
|
||||
Seat 6: TheLabman folded after the 2nd Draw
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839484932: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:23:30 ET
|
||||
Table 'Theodora VI' 6-max Seat #3 is the button
|
||||
Seat 1: s0rrow ($4.87 in chips)
|
||||
Seat 2: rumble1111 ($4.21 in chips)
|
||||
Seat 3: X USN-USMC ($3.79 in chips)
|
||||
Seat 4: tom1206 ($4.12 in chips)
|
||||
Seat 5: bakter9 ($1.72 in chips)
|
||||
Seat 6: TheLabman ($5.94 in chips)
|
||||
tom1206: posts small blind $0.05
|
||||
bakter9: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [3d 7h 7c Jh 5s]
|
||||
TheLabman: folds
|
||||
s0rrow: calls $0.10
|
||||
rumble1111: folds
|
||||
rumble1111 leaves the table
|
||||
X USN-USMC: folds
|
||||
tom1206: calls $0.05
|
||||
bakter9: raises $0.10 to $0.20
|
||||
s0rrow: calls $0.10
|
||||
tom1206: calls $0.10
|
||||
*** FIRST DRAW ***
|
||||
tom1206: discards 3 cards
|
||||
bakter9: discards 2 cards
|
||||
s0rrow: discards 2 cards [7c Jh]
|
||||
Dealt to s0rrow [3d 7h 5s] [9h Ad]
|
||||
tom1206: checks
|
||||
bakter9: bets $0.10
|
||||
s0rrow: calls $0.10
|
||||
tom1206: calls $0.10
|
||||
*** SECOND DRAW ***
|
||||
tom1206: discards 2 cards
|
||||
bakter9: discards 1 card
|
||||
s0rrow: discards 1 card [9h]
|
||||
Dealt to s0rrow [3d 7h 5s Ad] [4c]
|
||||
tom1206: bets $0.20
|
||||
bakter9: raises $0.20 to $0.40
|
||||
bakter9 said, "zzzzzzzzzzzzzzzzzzz"
|
||||
s0rrow: calls $0.40
|
||||
tom1206: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
tom1206: discards 1 card
|
||||
bakter9: stands pat
|
||||
s0rrow: stands pat on [3d 7h 5s Ad 4c]
|
||||
tom1206: checks
|
||||
bakter9: bets $0.20
|
||||
s0rrow: calls $0.20
|
||||
tom1206: raises $0.20 to $0.40
|
||||
bakter9: calls $0.20
|
||||
s0rrow: calls $0.20
|
||||
*** SHOW DOWN ***
|
||||
tom1206: shows [4h 3c Qc 2c 6c] (Lo: Q,6,4,3,2)
|
||||
bakter9: shows [3h 5d 2s 8c 6s] (Lo: 8,6,5,3,2)
|
||||
s0rrow: mucks hand
|
||||
bakter9 collected $3.14 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $3.30 | Rake $0.16
|
||||
Seat 1: s0rrow mucked [3d 7h 4c Ad 5s]
|
||||
Seat 2: rumble1111 folded before the Draw (didn't bet)
|
||||
Seat 3: X USN-USMC (button) folded before the Draw (didn't bet)
|
||||
Seat 4: tom1206 (small blind) showed [4h 3c Qc 2c 6c] and lost with Lo: Q,6,4,3,2
|
||||
Seat 5: bakter9 (big blind) showed [3h 5d 2s 8c 6s] and won ($3.14) with Lo: 8,6,5,3,2
|
||||
Seat 6: TheLabman folded before the Draw (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839619404: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:26:21 ET
|
||||
Table 'Theodora VI' 6-max Seat #4 is the button
|
||||
Seat 1: s0rrow ($3.77 in chips)
|
||||
Seat 3: X USN-USMC ($3.79 in chips)
|
||||
Seat 4: tom1206 ($3.02 in chips)
|
||||
Seat 5: bakter9 ($3.76 in chips)
|
||||
Seat 6: TheLabman ($5.94 in chips)
|
||||
bakter9: posts small blind $0.05
|
||||
TheLabman: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [Ah 7s Ad 5d As]
|
||||
bakter9 said, "ty"
|
||||
s0rrow: raises $0.10 to $0.20
|
||||
X USN-USMC: folds
|
||||
tom1206: folds
|
||||
bakter9: folds
|
||||
TheLabman: calls $0.10
|
||||
*** FIRST DRAW ***
|
||||
TheLabman: discards 2 cards
|
||||
s0rrow: discards 2 cards [7s Ad]
|
||||
Dealt to s0rrow [Ah 5d As] [5h 8s]
|
||||
TheLabman: checks
|
||||
Mamega joins the table at seat #2
|
||||
s0rrow: bets $0.10
|
||||
TheLabman: calls $0.10
|
||||
*** SECOND DRAW ***
|
||||
TheLabman: discards 1 card
|
||||
s0rrow: stands pat on [Ah 5d As 5h 8s]
|
||||
TheLabman: checks
|
||||
s0rrow: bets $0.20
|
||||
TheLabman: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
TheLabman: discards 1 card
|
||||
s0rrow: stands pat on [Ah 5d As 5h 8s]
|
||||
TheLabman: checks
|
||||
s0rrow: bets $0.20
|
||||
TheLabman: folds
|
||||
Uncalled bet ($0.20) returned to s0rrow
|
||||
s0rrow collected $1 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $1.05 | Rake $0.05
|
||||
Seat 1: s0rrow collected ($1)
|
||||
Seat 3: X USN-USMC folded before the Draw (didn't bet)
|
||||
Seat 4: tom1206 (button) folded before the Draw (didn't bet)
|
||||
Seat 5: bakter9 (small blind) folded before the Draw
|
||||
Seat 6: TheLabman (big blind) folded after the 3rd Draw
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839669792: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:27:24 ET
|
||||
Table 'Theodora VI' 6-max Seat #5 is the button
|
||||
Seat 1: s0rrow ($4.27 in chips)
|
||||
Seat 3: X USN-USMC ($3.79 in chips)
|
||||
Seat 4: tom1206 ($3.02 in chips)
|
||||
Seat 5: bakter9 ($3.71 in chips)
|
||||
Seat 6: TheLabman ($5.44 in chips)
|
||||
TheLabman: posts small blind $0.05
|
||||
s0rrow: posts big blind $0.10
|
||||
Mamega: sits out
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [3h 6d 9s 5s Kc]
|
||||
X USN-USMC: calls $0.10
|
||||
tom1206: calls $0.10
|
||||
bakter9: folds
|
||||
TheLabman: calls $0.05
|
||||
s0rrow: checks
|
||||
*** FIRST DRAW ***
|
||||
TheLabman: discards 1 card
|
||||
s0rrow: discards 1 card [Kc]
|
||||
Dealt to s0rrow [3h 6d 9s 5s] [Jh]
|
||||
X USN-USMC: discards 2 cards
|
||||
tom1206: discards 2 cards
|
||||
TheLabman: checks
|
||||
s0rrow: checks
|
||||
X USN-USMC: bets $0.10
|
||||
tom1206: raises $0.10 to $0.20
|
||||
TheLabman: calls $0.20
|
||||
s0rrow: folds
|
||||
X USN-USMC: calls $0.10
|
||||
*** SECOND DRAW ***
|
||||
TheLabman: discards 1 card
|
||||
X USN-USMC: discards 1 card
|
||||
tom1206: stands pat
|
||||
TheLabman: checks
|
||||
X USN-USMC: bets $0.20
|
||||
tom1206: raises $0.20 to $0.40
|
||||
TheLabman: calls $0.40
|
||||
X USN-USMC: raises $0.20 to $0.60
|
||||
tom1206: calls $0.20
|
||||
TheLabman: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
TheLabman: stands pat
|
||||
X USN-USMC: stands pat
|
||||
tom1206: stands pat
|
||||
TheLabman: checks
|
||||
X USN-USMC: bets $0.20
|
||||
tom1206: calls $0.20
|
||||
TheLabman: calls $0.20
|
||||
bakter9 leaves the table
|
||||
*** SHOW DOWN ***
|
||||
X USN-USMC: shows [3s 4s 7s 2d 6c] (Lo: 7,6,4,3,2)
|
||||
tom1206: mucks hand
|
||||
TheLabman: mucks hand
|
||||
X USN-USMC collected $3.24 from pot
|
||||
LumBita joins the table at seat #5
|
||||
*** SUMMARY ***
|
||||
Total pot $3.40 | Rake $0.16
|
||||
Seat 1: s0rrow (big blind) folded after the 1st Draw
|
||||
Seat 3: X USN-USMC showed [3s 4s 7s 2d 6c] and won ($3.24) with Lo: 7,6,4,3,2
|
||||
Seat 4: tom1206 mucked [8d 7c 4h 5h 3d]
|
||||
Seat 5: bakter9 (button) folded before the Draw (didn't bet)
|
||||
Seat 6: TheLabman (small blind) mucked [4d 6h 7h 2s 5c]
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839735773: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:28:48 ET
|
||||
Table 'Theodora VI' 6-max Seat #6 is the button
|
||||
Seat 1: s0rrow ($4.17 in chips)
|
||||
Seat 2: Mamega ($4 in chips)
|
||||
Seat 3: X USN-USMC ($5.93 in chips)
|
||||
Seat 4: tom1206 ($1.92 in chips)
|
||||
Seat 5: LumBita ($1 in chips)
|
||||
Seat 6: TheLabman ($4.34 in chips)
|
||||
s0rrow: posts small blind $0.05
|
||||
Mamega: posts big blind $0.10
|
||||
LumBita: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [5c Kc Js Ts Jc]
|
||||
X USN-USMC: calls $0.10
|
||||
tom1206: calls $0.10
|
||||
LumBita: checks
|
||||
TheLabman: folds
|
||||
s0rrow: folds
|
||||
Mamega: checks
|
||||
*** FIRST DRAW ***
|
||||
Mamega: stands pat
|
||||
X USN-USMC: discards 2 cards
|
||||
tom1206: discards 3 cards
|
||||
LumBita: discards 1 card
|
||||
Mamega: checks
|
||||
X USN-USMC: bets $0.10
|
||||
tom1206: calls $0.10
|
||||
LumBita: calls $0.10
|
||||
Mamega: folds
|
||||
*** SECOND DRAW ***
|
||||
X USN-USMC: discards 1 card
|
||||
tom1206: discards 1 card
|
||||
LumBita: stands pat
|
||||
X USN-USMC: checks
|
||||
tom1206: checks
|
||||
LumBita: bets $0.20
|
||||
X USN-USMC: calls $0.20
|
||||
tom1206: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
X USN-USMC: discards 1 card
|
||||
tom1206: discards 1 card
|
||||
LumBita: stands pat
|
||||
X USN-USMC: checks
|
||||
tom1206: checks
|
||||
LumBita: checks
|
||||
*** SHOW DOWN ***
|
||||
X USN-USMC: shows [2h 4h 7d 5s 6c] (Lo: 7,6,5,4,2)
|
||||
tom1206: mucks hand
|
||||
LumBita: mucks hand
|
||||
X USN-USMC collected $1.29 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $1.35 | Rake $0.06
|
||||
Seat 1: s0rrow (small blind) folded before the Draw
|
||||
Seat 2: Mamega (big blind) folded after the 1st Draw
|
||||
Seat 3: X USN-USMC showed [2h 4h 7d 5s 6c] and won ($1.29) with Lo: 7,6,5,4,2
|
||||
Seat 4: tom1206 mucked [7h 8c 3s 4d 5h]
|
||||
Seat 5: LumBita mucked [4s 8s 3h 6h 2d]
|
||||
Seat 6: TheLabman (button) folded before the Draw (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839797257: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:30:09 ET
|
||||
Table 'Theodora VI' 6-max Seat #1 is the button
|
||||
Seat 1: s0rrow ($4.12 in chips)
|
||||
Seat 2: Mamega ($3.90 in chips)
|
||||
Seat 3: X USN-USMC ($6.82 in chips)
|
||||
Seat 4: tom1206 ($1.52 in chips)
|
||||
Seat 5: LumBita ($0.60 in chips)
|
||||
Seat 6: TheLabman ($4.34 in chips)
|
||||
Mamega: posts small blind $0.05
|
||||
X USN-USMC: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [2c Ah 3h 8h 5s]
|
||||
tom1206: calls $0.10
|
||||
LumBita: calls $0.10
|
||||
TheLabman: folds
|
||||
s0rrow: raises $0.10 to $0.20
|
||||
Mamega: folds
|
||||
X USN-USMC: folds
|
||||
tom1206: calls $0.10
|
||||
LumBita: calls $0.10
|
||||
*** FIRST DRAW ***
|
||||
tom1206: discards 2 cards
|
||||
LumBita: discards 2 cards
|
||||
s0rrow: discards 1 card [8h]
|
||||
Dealt to s0rrow [2c Ah 3h 5s] [8d]
|
||||
tom1206: checks
|
||||
LumBita: checks
|
||||
s0rrow: bets $0.10
|
||||
tom1206: calls $0.10
|
||||
LumBita: calls $0.10
|
||||
*** SECOND DRAW ***
|
||||
tom1206: discards 2 cards
|
||||
LumBita: stands pat
|
||||
s0rrow: discards 1 card [8d]
|
||||
Dealt to s0rrow [2c Ah 3h 5s] [2s]
|
||||
tom1206: checks
|
||||
LumBita: bets $0.20
|
||||
s0rrow: calls $0.20
|
||||
tom1206: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
tom1206: discards 1 card
|
||||
LumBita: stands pat
|
||||
s0rrow: discards 1 card [2s]
|
||||
Dealt to s0rrow [2c Ah 3h 5s] [Qd]
|
||||
tom1206: checks
|
||||
LumBita: bets $0.10 and is all-in
|
||||
s0rrow: folds
|
||||
tom1206: folds
|
||||
Uncalled bet ($0.10) returned to LumBita
|
||||
LumBita collected $1.57 from pot
|
||||
LumBita: doesn't show hand
|
||||
*** SUMMARY ***
|
||||
Total pot $1.65 | Rake $0.08
|
||||
Seat 1: s0rrow (button) folded after the 3rd Draw
|
||||
Seat 2: Mamega (small blind) folded before the Draw
|
||||
Seat 3: X USN-USMC (big blind) folded before the Draw
|
||||
Seat 4: tom1206 folded after the 3rd Draw
|
||||
Seat 5: LumBita collected ($1.57)
|
||||
Seat 6: TheLabman folded before the Draw (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839866916: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:31:36 ET
|
||||
Table 'Theodora VI' 6-max Seat #2 is the button
|
||||
Seat 1: s0rrow ($3.62 in chips)
|
||||
Seat 2: Mamega ($3.85 in chips)
|
||||
Seat 3: X USN-USMC ($6.72 in chips)
|
||||
Seat 4: tom1206 ($1.02 in chips)
|
||||
Seat 5: LumBita ($1.67 in chips)
|
||||
Seat 6: TheLabman ($4.34 in chips)
|
||||
X USN-USMC: posts small blind $0.05
|
||||
tom1206: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [Jd 5c 2s 5h Qs]
|
||||
LumBita: calls $0.10
|
||||
TheLabman: folds
|
||||
s0rrow: folds
|
||||
Mamega: folds
|
||||
X USN-USMC: calls $0.05
|
||||
tom1206: checks
|
||||
*** FIRST DRAW ***
|
||||
X USN-USMC: discards 3 cards
|
||||
tom1206: discards 4 cards
|
||||
LumBita: discards 2 cards
|
||||
X USN-USMC: checks
|
||||
tom1206: checks
|
||||
LumBita: checks
|
||||
*** SECOND DRAW ***
|
||||
X USN-USMC: discards 2 cards
|
||||
tom1206: discards 3 cards
|
||||
LumBita: discards 2 cards
|
||||
X USN-USMC: checks
|
||||
tom1206: checks
|
||||
LumBita: checks
|
||||
*** THIRD DRAW ***
|
||||
X USN-USMC: discards 2 cards
|
||||
tom1206: discards 2 cards
|
||||
LumBita: discards 1 card
|
||||
X USN-USMC: bets $0.20
|
||||
tom1206: calls $0.20
|
||||
LumBita: folds
|
||||
*** SHOW DOWN ***
|
||||
X USN-USMC: shows [4h 3h 2d 7h 6d] (Lo: 7,6,4,3,2)
|
||||
tom1206: mucks hand
|
||||
X USN-USMC collected $0.67 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.70 | Rake $0.03
|
||||
Seat 1: s0rrow folded before the Draw (didn't bet)
|
||||
Seat 2: Mamega (button) folded before the Draw (didn't bet)
|
||||
Seat 3: X USN-USMC (small blind) showed [4h 3h 2d 7h 6d] and won ($0.67) with Lo: 7,6,4,3,2
|
||||
Seat 4: tom1206 (big blind) mucked [7c 5d 9s Th 8d]
|
||||
Seat 5: LumBita folded after the 3rd Draw
|
||||
Seat 6: TheLabman folded before the Draw (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839926911: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:32:52 ET
|
||||
Table 'Theodora VI' 6-max Seat #3 is the button
|
||||
Seat 1: s0rrow ($3.62 in chips)
|
||||
Seat 2: Mamega ($3.85 in chips)
|
||||
Seat 3: X USN-USMC ($7.09 in chips)
|
||||
Seat 4: tom1206 ($0.72 in chips)
|
||||
Seat 5: LumBita ($1.57 in chips)
|
||||
Seat 6: TheLabman ($4.34 in chips)
|
||||
tom1206: posts small blind $0.05
|
||||
LumBita: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [Qd 2d 5s Ah 8d]
|
||||
TheLabman: folds
|
||||
s0rrow: calls $0.10
|
||||
Mamega: folds
|
||||
X USN-USMC: folds
|
||||
tom1206: folds
|
||||
LumBita: checks
|
||||
*** FIRST DRAW ***
|
||||
LumBita: discards 3 cards
|
||||
s0rrow: discards 2 cards [Qd 8d]
|
||||
Dealt to s0rrow [2d 5s Ah] [Jc 8h]
|
||||
LumBita: checks
|
||||
s0rrow: checks
|
||||
*** SECOND DRAW ***
|
||||
LumBita: discards 2 cards
|
||||
s0rrow: discards 1 card [Jc]
|
||||
Dealt to s0rrow [2d 5s Ah 8h] [9s]
|
||||
LumBita: bets $0.20
|
||||
s0rrow: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
LumBita: stands pat
|
||||
s0rrow: stands pat on [2d 5s Ah 8h 9s]
|
||||
LumBita: checks
|
||||
s0rrow: checks
|
||||
*** SHOW DOWN ***
|
||||
LumBita: shows [7h 2s 5c 8c 6c] (Lo: 8,7,6,5,2)
|
||||
s0rrow: mucks hand
|
||||
LumBita collected $0.62 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.65 | Rake $0.03
|
||||
Seat 1: s0rrow mucked [9s 2d 5s Ah 8h]
|
||||
Seat 2: Mamega folded before the Draw (didn't bet)
|
||||
Seat 3: X USN-USMC (button) folded before the Draw (didn't bet)
|
||||
Seat 4: tom1206 (small blind) folded before the Draw
|
||||
Seat 5: LumBita (big blind) showed [7h 2s 5c 8c 6c] and won ($0.62) with Lo: 8,7,6,5,2
|
||||
Seat 6: TheLabman folded before the Draw (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35839959625: Triple Draw 2-7 Lowball Limit ($0.10/$0.20 USD) - 2009/11/25 14:33:33 ET
|
||||
Table 'Theodora VI' 6-max Seat #4 is the button
|
||||
Seat 1: s0rrow ($3.32 in chips)
|
||||
Seat 2: Mamega ($3.85 in chips)
|
||||
Seat 3: X USN-USMC ($7.09 in chips)
|
||||
Seat 4: tom1206 ($0.67 in chips)
|
||||
Seat 5: LumBita ($1.89 in chips)
|
||||
Seat 6: TheLabman ($4.34 in chips)
|
||||
LumBita: posts small blind $0.05
|
||||
TheLabman: posts big blind $0.10
|
||||
*** DEALING HANDS ***
|
||||
Dealt to s0rrow [Jd As 8h 3s 7c]
|
||||
s0rrow: calls $0.10
|
||||
Mamega: folds
|
||||
X USN-USMC: folds
|
||||
tom1206: calls $0.10
|
||||
LumBita: calls $0.05
|
||||
TheLabman: checks
|
||||
*** FIRST DRAW ***
|
||||
LumBita: discards 2 cards
|
||||
TheLabman: discards 1 card
|
||||
s0rrow: discards 1 card [Jd]
|
||||
Dealt to s0rrow [As 8h 3s 7c] [4h]
|
||||
tom1206: discards 2 cards
|
||||
LumBita: checks
|
||||
TheLabman: bets $0.10
|
||||
s0rrow: calls $0.10
|
||||
tom1206: raises $0.10 to $0.20
|
||||
LumBita: calls $0.20
|
||||
TheLabman: calls $0.10
|
||||
s0rrow: calls $0.10
|
||||
*** SECOND DRAW ***
|
||||
LumBita: discards 1 card
|
||||
TheLabman: discards 1 card
|
||||
s0rrow: discards 1 card [8h]
|
||||
Dealt to s0rrow [As 3s 7c 4h] [8d]
|
||||
tom1206: stands pat
|
||||
LumBita: checks
|
||||
TheLabman: checks
|
||||
s0rrow: checks
|
||||
tom1206: bets $0.20
|
||||
LumBita: calls $0.20
|
||||
TheLabman: calls $0.20
|
||||
s0rrow: calls $0.20
|
||||
*** THIRD DRAW ***
|
||||
LumBita: discards 1 card
|
||||
TheLabman: discards 1 card
|
||||
s0rrow: stands pat on [As 3s 7c 4h 8d]
|
||||
tom1206: stands pat
|
||||
LumBita: checks
|
||||
TheLabman: checks
|
||||
s0rrow: checks
|
||||
tom1206: bets $0.17 and is all-in
|
||||
LumBita: calls $0.17
|
||||
TheLabman: folds
|
||||
s0rrow: calls $0.17
|
||||
*** SHOW DOWN ***
|
||||
tom1206: shows [5c 6c 4d 2h 8c] (Lo: 8,6,5,4,2)
|
||||
LumBita: mucks hand
|
||||
s0rrow: mucks hand
|
||||
tom1206 collected $2.39 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $2.51 | Rake $0.12
|
||||
Seat 1: s0rrow mucked [4h As 8d 3s 7c]
|
||||
Seat 2: Mamega folded before the Draw (didn't bet)
|
||||
Seat 3: X USN-USMC folded before the Draw (didn't bet)
|
||||
Seat 4: tom1206 (button) showed [5c 6c 4d 2h 8c] and won ($2.39) with Lo: 8,6,5,4,2
|
||||
Seat 5: LumBita (small blind) mucked [4c 3d 9c 7h 6h]
|
||||
Seat 6: TheLabman (big blind) folded after the 3rd Draw
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,835 @@
|
|||
PokerStars Game #35874004239: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:08:43 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($1.60 in chips)
|
||||
Seat 3: Nikolay Zem ($1.84 in chips)
|
||||
Seat 4: totof51 ($1.34 in chips)
|
||||
Seat 5: trs2758 ($1.76 in chips)
|
||||
Seat 8: MasterTrini1 ($2.49 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
totof51: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [3d Th As]
|
||||
Dealt to Nikolay Zem [9s]
|
||||
Dealt to totof51 [Td]
|
||||
Dealt to trs2758 [7d]
|
||||
Dealt to MasterTrini1 [2c]
|
||||
MasterTrini1: brings in for $0.02
|
||||
s0rrow: calls $0.02
|
||||
Nikolay Zem: calls $0.02
|
||||
totof51: calls $0.02
|
||||
trs2758: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to s0rrow [3d Th As] [Qc]
|
||||
Dealt to Nikolay Zem [9s] [6h]
|
||||
Dealt to totof51 [Td] [4s]
|
||||
Dealt to trs2758 [7d] [8d]
|
||||
Dealt to MasterTrini1 [2c] [8c]
|
||||
s0rrow: checks
|
||||
Nikolay Zem: checks
|
||||
totof51: checks
|
||||
trs2758: checks
|
||||
MasterTrini1: bets $0.04
|
||||
s0rrow: folds
|
||||
Nikolay Zem: calls $0.04
|
||||
totof51: folds
|
||||
trs2758: calls $0.04
|
||||
*** 5th STREET ***
|
||||
Dealt to Nikolay Zem [9s 6h] [7s]
|
||||
Dealt to trs2758 [7d 8d] [8h]
|
||||
Dealt to MasterTrini1 [2c 8c] [7h]
|
||||
RoadDevil joins the table at seat #6
|
||||
trs2758: bets $0.08
|
||||
MasterTrini1: calls $0.08
|
||||
Nikolay Zem: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to Nikolay Zem [9s 6h 7s] [Qh]
|
||||
Dealt to trs2758 [7d 8d 8h] [Ts]
|
||||
Dealt to MasterTrini1 [2c 8c 7h] [5d]
|
||||
trs2758: bets $0.08
|
||||
MasterTrini1: calls $0.08
|
||||
Nikolay Zem: folds
|
||||
*** RIVER ***
|
||||
trs2758: bets $0.08
|
||||
MasterTrini1: folds
|
||||
Uncalled bet ($0.08) returned to trs2758
|
||||
trs2758 collected $0.64 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.67 | Rake $0.03
|
||||
Seat 1: s0rrow folded on the 4th Street
|
||||
Seat 3: Nikolay Zem folded on the 6th Street
|
||||
Seat 4: totof51 folded on the 4th Street
|
||||
Seat 5: trs2758 collected ($0.64)
|
||||
Seat 8: MasterTrini1 folded on the River
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874039554: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:09:44 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($1.57 in chips)
|
||||
Seat 3: Nikolay Zem ($1.69 in chips)
|
||||
Seat 4: totof51 ($1.31 in chips)
|
||||
Seat 5: trs2758 ($2.17 in chips)
|
||||
Seat 6: RoadDevil ($1.60 in chips)
|
||||
Seat 8: MasterTrini1 ($2.26 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
totof51: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [3s Qd 9h]
|
||||
Dealt to Nikolay Zem [7d]
|
||||
Dealt to totof51 [7c]
|
||||
Dealt to trs2758 [5h]
|
||||
Dealt to RoadDevil [5d]
|
||||
Dealt to MasterTrini1 [Ts]
|
||||
RoadDevil: brings in for $0.02
|
||||
MasterTrini1: calls $0.02
|
||||
s0rrow: folds
|
||||
Nikolay Zem: calls $0.02
|
||||
totof51: calls $0.02
|
||||
trs2758: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to Nikolay Zem [7d] [Td]
|
||||
Dealt to totof51 [7c] [Th]
|
||||
Dealt to trs2758 [5h] [8s]
|
||||
Dealt to RoadDevil [5d] [Js]
|
||||
Dealt to MasterTrini1 [Ts] [5c]
|
||||
RoadDevil: checks
|
||||
MasterTrini1: checks
|
||||
Nikolay Zem: checks
|
||||
totof51: bets $0.04
|
||||
trs2758: calls $0.04
|
||||
RoadDevil: folds
|
||||
MasterTrini1: calls $0.04
|
||||
Nikolay Zem: calls $0.04
|
||||
*** 5th STREET ***
|
||||
Dealt to Nikolay Zem [7d Td] [3d]
|
||||
Dealt to totof51 [7c Th] [9s]
|
||||
Dealt to trs2758 [5h 8s] [4s]
|
||||
Dealt to MasterTrini1 [Ts 5c] [6h]
|
||||
totof51: bets $0.08
|
||||
trs2758: folds
|
||||
MasterTrini1: calls $0.08
|
||||
Nikolay Zem: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to Nikolay Zem [7d Td 3d] [Tc]
|
||||
Dealt to totof51 [7c Th 9s] [Ah]
|
||||
Dealt to MasterTrini1 [Ts 5c 6h] [Jh]
|
||||
Nikolay Zem: checks
|
||||
totof51: bets $0.08
|
||||
MasterTrini1: calls $0.08
|
||||
Nikolay Zem: calls $0.08
|
||||
*** RIVER ***
|
||||
Nikolay Zem: checks
|
||||
totof51: checks
|
||||
MasterTrini1: checks
|
||||
*** SHOW DOWN ***
|
||||
Nikolay Zem: shows [Ac 4d 7d Td 3d Tc 2h] (a pair of Tens)
|
||||
totof51: mucks hand
|
||||
totof51 is sitting out
|
||||
MasterTrini1: shows [4c 6d Ts 5c 6h Jh 9c] (a pair of Sixes)
|
||||
totof51 leaves the table
|
||||
Nikolay Zem collected $0.77 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.80 | Rake $0.03
|
||||
Seat 1: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 3: Nikolay Zem showed [Ac 4d 7d Td 3d Tc 2h] and won ($0.77) with a pair of Tens
|
||||
Seat 4: totof51 mucked [3c 7s 7c Th 9s Ah Qc]
|
||||
Seat 5: trs2758 folded on the 5th Street
|
||||
Seat 6: RoadDevil folded on the 4th Street
|
||||
Seat 8: MasterTrini1 showed [4c 6d Ts 5c 6h Jh 9c] and lost with a pair of Sixes
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874081088: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:10:56 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($1.56 in chips)
|
||||
Seat 3: Nikolay Zem ($2.23 in chips)
|
||||
Seat 5: trs2758 ($2.10 in chips)
|
||||
Seat 6: RoadDevil ($1.57 in chips)
|
||||
Seat 8: MasterTrini1 ($2.03 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [5h 5c 2s]
|
||||
Dealt to Nikolay Zem [Ad]
|
||||
Dealt to trs2758 [6h]
|
||||
Dealt to RoadDevil [4h]
|
||||
Dealt to MasterTrini1 [8h]
|
||||
s0rrow: bets $0.04
|
||||
Nikolay Zem: calls $0.04
|
||||
trs2758: folds
|
||||
RoadDevil: calls $0.04
|
||||
MasterTrini1: raises $0.04 to $0.08
|
||||
s0rrow: calls $0.04
|
||||
Nikolay Zem: calls $0.04
|
||||
RoadDevil: calls $0.04
|
||||
*** 4th STREET ***
|
||||
Dealt to s0rrow [5h 5c 2s] [As]
|
||||
Dealt to Nikolay Zem [Ad] [4s]
|
||||
Dealt to RoadDevil [4h] [Tc]
|
||||
Dealt to MasterTrini1 [8h] [6d]
|
||||
Nikolay Zem: checks
|
||||
RoadDevil: checks
|
||||
MasterTrini1: bets $0.04
|
||||
s0rrow: calls $0.04
|
||||
Nikolay Zem: folds
|
||||
RoadDevil: folds
|
||||
*** 5th STREET ***
|
||||
Dealt to s0rrow [5h 5c 2s As] [5d]
|
||||
Dealt to MasterTrini1 [8h 6d] [Ac]
|
||||
MasterTrini1: bets $0.08
|
||||
s0rrow: raises $0.08 to $0.16
|
||||
MasterTrini1: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to s0rrow [5h 5c 2s As 5d] [Ah]
|
||||
Dealt to MasterTrini1 [8h 6d Ac] [Js]
|
||||
s0rrow: bets $0.08
|
||||
MasterTrini1: calls $0.08
|
||||
*** RIVER ***
|
||||
Dealt to s0rrow [5h 5c 2s As 5d Ah] [4d]
|
||||
s0rrow: bets $0.08
|
||||
MasterTrini1: calls $0.08
|
||||
*** SHOW DOWN ***
|
||||
s0rrow: shows [5h 5c 2s As 5d Ah 4d] (a full house, Fives full of Aces)
|
||||
MasterTrini1: mucks hand
|
||||
s0rrow collected $1.04 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $1.09 | Rake $0.05
|
||||
Seat 1: s0rrow showed [5h 5c 2s As 5d Ah 4d] and won ($1.04) with a full house, Fives full of Aces
|
||||
Seat 3: Nikolay Zem folded on the 4th Street
|
||||
Seat 5: trs2758 folded on the 3rd Street (didn't bet)
|
||||
Seat 6: RoadDevil folded on the 4th Street
|
||||
Seat 8: MasterTrini1 mucked [Qs Qd 8h 6d Ac Js Jc]
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874124553: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:12:11 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($2.15 in chips)
|
||||
Seat 3: Nikolay Zem ($2.14 in chips)
|
||||
Seat 5: trs2758 ($2.09 in chips)
|
||||
Seat 6: RoadDevil ($1.48 in chips)
|
||||
Seat 8: MasterTrini1 ($1.58 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [Js Kc 3d]
|
||||
Dealt to Nikolay Zem [6c]
|
||||
Dealt to trs2758 [4d]
|
||||
Dealt to RoadDevil [6d]
|
||||
Dealt to MasterTrini1 [9h]
|
||||
s0rrow: brings in for $0.02
|
||||
Nikolay Zem: folds
|
||||
trs2758: folds
|
||||
RoadDevil: calls $0.02
|
||||
MasterTrini1: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to s0rrow [Js Kc 3d] [2h]
|
||||
Dealt to RoadDevil [6d] [Ah]
|
||||
Dealt to MasterTrini1 [9h] [8c]
|
||||
RoadDevil: checks
|
||||
MasterTrini1: bets $0.04
|
||||
rv2020 joins the table at seat #4
|
||||
s0rrow: folds
|
||||
RoadDevil: calls $0.04
|
||||
*** 5th STREET ***
|
||||
Dealt to RoadDevil [6d Ah] [Td]
|
||||
Dealt to MasterTrini1 [9h 8c] [5s]
|
||||
RoadDevil: checks
|
||||
MasterTrini1: bets $0.08
|
||||
RoadDevil: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to RoadDevil [6d Ah Td] [4c]
|
||||
Dealt to MasterTrini1 [9h 8c 5s] [5h]
|
||||
MasterTrini1: bets $0.08
|
||||
RoadDevil: calls $0.08
|
||||
*** RIVER ***
|
||||
MasterTrini1: bets $0.08
|
||||
RoadDevil: calls $0.08
|
||||
*** SHOW DOWN ***
|
||||
MasterTrini1: shows [6s 7d 9h 8c 5s 5h 9d] (a straight, Five to Nine)
|
||||
RoadDevil: mucks hand
|
||||
MasterTrini1 collected $0.64 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.67 | Rake $0.03
|
||||
Seat 1: s0rrow folded on the 4th Street
|
||||
Seat 3: Nikolay Zem folded on the 3rd Street (didn't bet)
|
||||
Seat 5: trs2758 folded on the 3rd Street (didn't bet)
|
||||
Seat 6: RoadDevil mucked [4s 8d 6d Ah Td 4c 8h]
|
||||
Seat 8: MasterTrini1 showed [6s 7d 9h 8c 5s 5h 9d] and won ($0.64) with a straight, Five to Nine
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874153086: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:13:01 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($2.12 in chips)
|
||||
Seat 3: Nikolay Zem ($2.13 in chips)
|
||||
Seat 4: rv2020 ($1 in chips)
|
||||
Seat 5: trs2758 ($2.08 in chips)
|
||||
Seat 6: RoadDevil ($1.17 in chips)
|
||||
Seat 8: MasterTrini1 ($1.91 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
rv2020: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [As 8s 6h]
|
||||
Dealt to Nikolay Zem [4c]
|
||||
Dealt to rv2020 [2s]
|
||||
Dealt to trs2758 [7s]
|
||||
Dealt to RoadDevil [7c]
|
||||
Dealt to MasterTrini1 [Qd]
|
||||
rv2020: brings in for $0.02
|
||||
trs2758: calls $0.02
|
||||
RoadDevil: calls $0.02
|
||||
MasterTrini1: calls $0.02
|
||||
s0rrow: calls $0.02
|
||||
Nikolay Zem: folds
|
||||
*** 4th STREET ***
|
||||
Dealt to s0rrow [As 8s 6h] [3s]
|
||||
Dealt to rv2020 [2s] [6d]
|
||||
Dealt to trs2758 [7s] [Ah]
|
||||
Dealt to RoadDevil [7c] [4h]
|
||||
Dealt to MasterTrini1 [Qd] [Ad]
|
||||
MasterTrini1: checks
|
||||
s0rrow: checks
|
||||
rv2020: checks
|
||||
trs2758: checks
|
||||
RoadDevil: checks
|
||||
*** 5th STREET ***
|
||||
Dealt to s0rrow [As 8s 6h 3s] [Jh]
|
||||
Dealt to rv2020 [2s 6d] [Qh]
|
||||
Dealt to trs2758 [7s Ah] [4d]
|
||||
Dealt to RoadDevil [7c 4h] [7h]
|
||||
Dealt to MasterTrini1 [Qd Ad] [5h]
|
||||
RoadDevil: checks
|
||||
MasterTrini1: checks
|
||||
s0rrow: checks
|
||||
rv2020: checks
|
||||
trs2758: checks
|
||||
*** 6th STREET ***
|
||||
Dealt to s0rrow [As 8s 6h 3s Jh] [Tc]
|
||||
Dealt to rv2020 [2s 6d Qh] [9h]
|
||||
Dealt to trs2758 [7s Ah 4d] [3d]
|
||||
Dealt to RoadDevil [7c 4h 7h] [5c]
|
||||
Dealt to MasterTrini1 [Qd Ad 5h] [Td]
|
||||
RoadDevil: checks
|
||||
MasterTrini1: checks
|
||||
s0rrow: checks
|
||||
rv2020: checks
|
||||
trs2758: checks
|
||||
*** RIVER ***
|
||||
Dealt to s0rrow [As 8s 6h 3s Jh Tc] [Qs]
|
||||
RoadDevil: checks
|
||||
MasterTrini1: checks
|
||||
s0rrow: checks
|
||||
rv2020: checks
|
||||
trs2758: checks
|
||||
*** SHOW DOWN ***
|
||||
s0rrow: shows [As 8s 6h 3s Jh Tc Qs] (high card Ace)
|
||||
rv2020: shows [8c Ac 2s 6d Qh 9h 2d] (a pair of Deuces)
|
||||
trs2758: mucks hand
|
||||
RoadDevil: shows [Jd Qc 7c 4h 7h 5c Kc] (a pair of Sevens)
|
||||
MasterTrini1: shows [Jc 2h Qd Ad 5h Td Ks] (a straight, Ten to Ace)
|
||||
MasterTrini1 collected $0.16 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.16 | Rake $0
|
||||
Seat 1: s0rrow showed [As 8s 6h 3s Jh Tc Qs] and lost with high card Ace
|
||||
Seat 3: Nikolay Zem folded on the 3rd Street (didn't bet)
|
||||
Seat 4: rv2020 showed [8c Ac 2s 6d Qh 9h 2d] and lost with a pair of Deuces
|
||||
Seat 5: trs2758 mucked [2c 9s 7s Ah 4d 3d 8d]
|
||||
Seat 6: RoadDevil showed [Jd Qc 7c 4h 7h 5c Kc] and lost with a pair of Sevens
|
||||
Seat 8: MasterTrini1 showed [Jc 2h Qd Ad 5h Td Ks] and won ($0.16) with a straight, Ten to Ace
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874195699: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:14:15 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($2.09 in chips)
|
||||
Seat 3: Nikolay Zem ($2.12 in chips)
|
||||
Seat 4: rv2020 ($0.97 in chips)
|
||||
Seat 5: trs2758 ($2.05 in chips)
|
||||
Seat 6: RoadDevil ($1.14 in chips)
|
||||
Seat 8: MasterTrini1 ($2.04 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
rv2020: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [6c 4c Th]
|
||||
Dealt to Nikolay Zem [9d]
|
||||
Dealt to rv2020 [4s]
|
||||
Dealt to trs2758 [3h]
|
||||
Dealt to RoadDevil [Ac]
|
||||
Dealt to MasterTrini1 [5d]
|
||||
trs2758: brings in for $0.02
|
||||
RoadDevil: folds
|
||||
MasterTrini1: calls $0.02
|
||||
s0rrow: folds
|
||||
Nikolay Zem: calls $0.02
|
||||
rv2020: folds
|
||||
*** 4th STREET ***
|
||||
Dealt to Nikolay Zem [9d] [3s]
|
||||
Dealt to trs2758 [3h] [Jd]
|
||||
Dealt to MasterTrini1 [5d] [2d]
|
||||
trs2758: checks
|
||||
MasterTrini1: checks
|
||||
Nikolay Zem: checks
|
||||
*** 5th STREET ***
|
||||
Dealt to Nikolay Zem [9d 3s] [9c]
|
||||
Dealt to trs2758 [3h Jd] [2h]
|
||||
Dealt to MasterTrini1 [5d 2d] [7d]
|
||||
Nikolay Zem: bets $0.08
|
||||
trs2758: folds
|
||||
MasterTrini1: raises $0.08 to $0.16
|
||||
Nikolay Zem: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to Nikolay Zem [9d 3s 9c] [Td]
|
||||
Dealt to MasterTrini1 [5d 2d 7d] [5h]
|
||||
Nikolay Zem: checks
|
||||
MasterTrini1: checks
|
||||
*** RIVER ***
|
||||
Nikolay Zem: bets $0.08
|
||||
MasterTrini1: folds
|
||||
Uncalled bet ($0.08) returned to Nikolay Zem
|
||||
Nikolay Zem collected $0.42 from pot
|
||||
Nikolay Zem: doesn't show hand
|
||||
*** SUMMARY ***
|
||||
Total pot $0.44 | Rake $0.02
|
||||
Seat 1: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 3: Nikolay Zem collected ($0.42)
|
||||
Seat 4: rv2020 folded on the 3rd Street (didn't bet)
|
||||
Seat 5: trs2758 folded on the 5th Street
|
||||
Seat 6: RoadDevil folded on the 3rd Street (didn't bet)
|
||||
Seat 8: MasterTrini1 folded on the River
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874220204: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:14:58 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($2.08 in chips)
|
||||
Seat 3: Nikolay Zem ($2.35 in chips)
|
||||
Seat 4: rv2020 ($0.96 in chips)
|
||||
Seat 5: trs2758 ($2.02 in chips)
|
||||
Seat 6: RoadDevil ($1.13 in chips)
|
||||
Seat 8: MasterTrini1 ($1.85 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
rv2020: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [Jd 9d 2h]
|
||||
Dealt to Nikolay Zem [Ad]
|
||||
Dealt to rv2020 [2c]
|
||||
Dealt to trs2758 [8c]
|
||||
Dealt to RoadDevil [3s]
|
||||
Dealt to MasterTrini1 [3h]
|
||||
rv2020: brings in for $0.02
|
||||
trs2758: calls $0.02
|
||||
RoadDevil: folds
|
||||
MasterTrini1: calls $0.02
|
||||
s0rrow: folds
|
||||
Nikolay Zem: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to Nikolay Zem [Ad] [9h]
|
||||
Dealt to rv2020 [2c] [4d]
|
||||
Dealt to trs2758 [8c] [Qd]
|
||||
Dealt to MasterTrini1 [3h] [Qs]
|
||||
Nikolay Zem: checks
|
||||
rv2020: bets $0.04
|
||||
trs2758: calls $0.04
|
||||
MasterTrini1: calls $0.04
|
||||
Nikolay Zem: folds
|
||||
*** 5th STREET ***
|
||||
Dealt to rv2020 [2c 4d] [Jh]
|
||||
Dealt to trs2758 [8c Qd] [Js]
|
||||
Dealt to MasterTrini1 [3h Qs] [4h]
|
||||
trs2758: checks
|
||||
MasterTrini1: bets $0.08
|
||||
rv2020: raises $0.08 to $0.16
|
||||
trs2758: calls $0.16
|
||||
MasterTrini1: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to rv2020 [2c 4d Jh] [7c]
|
||||
Dealt to trs2758 [8c Qd Js] [5c]
|
||||
Dealt to MasterTrini1 [3h Qs 4h] [7h]
|
||||
trs2758: checks
|
||||
MasterTrini1: checks
|
||||
rv2020: bets $0.08
|
||||
trs2758: folds
|
||||
MasterTrini1: calls $0.08
|
||||
*** RIVER ***
|
||||
MasterTrini1: checks
|
||||
rv2020: checks
|
||||
*** SHOW DOWN ***
|
||||
rv2020: shows [As Ac 2c 4d Jh 7c 3c] (a pair of Aces)
|
||||
MasterTrini1: mucks hand
|
||||
rv2020 collected $0.86 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.90 | Rake $0.04
|
||||
Seat 1: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 3: Nikolay Zem folded on the 4th Street
|
||||
Seat 4: rv2020 showed [As Ac 2c 4d Jh 7c 3c] and won ($0.86) with a pair of Aces
|
||||
Seat 5: trs2758 folded on the 6th Street
|
||||
Seat 6: RoadDevil folded on the 3rd Street (didn't bet)
|
||||
Seat 8: MasterTrini1 mucked [6s 8s 3h Qs 4h 7h 6d]
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874259784: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:16:07 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($2.07 in chips)
|
||||
Seat 3: Nikolay Zem ($2.32 in chips)
|
||||
Seat 4: rv2020 ($1.51 in chips)
|
||||
Seat 5: trs2758 ($1.79 in chips)
|
||||
Seat 6: RoadDevil ($1.12 in chips)
|
||||
Seat 8: MasterTrini1 ($1.54 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
rv2020: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [7d 6h 9s]
|
||||
Dealt to Nikolay Zem [Js]
|
||||
Dealt to rv2020 [3d]
|
||||
Dealt to trs2758 [7s]
|
||||
Dealt to RoadDevil [Qh]
|
||||
Dealt to MasterTrini1 [5d]
|
||||
rv2020: brings in for $0.02
|
||||
trs2758: folds
|
||||
RoadDevil: calls $0.02
|
||||
MasterTrini1: calls $0.02
|
||||
s0rrow: calls $0.02
|
||||
Nikolay Zem: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to s0rrow [7d 6h 9s] [Kc]
|
||||
Dealt to Nikolay Zem [Js] [6s]
|
||||
Dealt to rv2020 [3d] [Jd]
|
||||
Dealt to RoadDevil [Qh] [Th]
|
||||
Dealt to MasterTrini1 [5d] [8c]
|
||||
Katica65 was removed from the table for failing to post
|
||||
s0rrow: checks
|
||||
Nikolay Zem: checks
|
||||
danjr655 joins the table at seat #2
|
||||
rv2020: checks
|
||||
RoadDevil: checks
|
||||
MasterTrini1: checks
|
||||
*** 5th STREET ***
|
||||
Dealt to s0rrow [7d 6h 9s Kc] [Ah]
|
||||
Dealt to Nikolay Zem [Js 6s] [Ad]
|
||||
Dealt to rv2020 [3d Jd] [Tc]
|
||||
Dealt to RoadDevil [Qh Th] [Qc]
|
||||
Dealt to MasterTrini1 [5d 8c] [3h]
|
||||
RoadDevil: bets $0.08
|
||||
MasterTrini1: folds
|
||||
s0rrow: raises $0.08 to $0.16
|
||||
Nikolay Zem: calls $0.16
|
||||
rv2020: folds
|
||||
RoadDevil: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to s0rrow [7d 6h 9s Kc Ah] [4d]
|
||||
Dealt to Nikolay Zem [Js 6s Ad] [4s]
|
||||
Dealt to RoadDevil [Qh Th Qc] [7h]
|
||||
RoadDevil: checks
|
||||
s0rrow: checks
|
||||
Nikolay Zem: bets $0.08
|
||||
RoadDevil: calls $0.08
|
||||
s0rrow: folds
|
||||
*** RIVER ***
|
||||
RoadDevil: checks
|
||||
Nikolay Zem: bets $0.08
|
||||
RoadDevil: calls $0.08
|
||||
*** SHOW DOWN ***
|
||||
Nikolay Zem: shows [Qs 3s Js 6s Ad 4s 2s] (a flush, Queen high)
|
||||
RoadDevil: mucks hand
|
||||
Nikolay Zem collected $0.92 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.96 | Rake $0.04
|
||||
Seat 1: s0rrow folded on the 6th Street
|
||||
Seat 3: Nikolay Zem showed [Qs 3s Js 6s Ad 4s 2s] and won ($0.92) with a flush, Queen high
|
||||
Seat 4: rv2020 folded on the 5th Street
|
||||
Seat 5: trs2758 folded on the 3rd Street (didn't bet)
|
||||
Seat 6: RoadDevil mucked [2h Ts Qh Th Qc 7h Kd]
|
||||
Seat 8: MasterTrini1 folded on the 5th Street
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874289931: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:16:59 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($1.88 in chips)
|
||||
Seat 2: danjr655 ($0.45 in chips)
|
||||
Seat 3: Nikolay Zem ($2.89 in chips)
|
||||
Seat 4: rv2020 ($1.48 in chips)
|
||||
Seat 5: trs2758 ($1.78 in chips)
|
||||
Seat 6: RoadDevil ($0.77 in chips)
|
||||
Seat 8: MasterTrini1 ($1.51 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
danjr655: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
rv2020: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [2d Qs 8c]
|
||||
Dealt to danjr655 [5d]
|
||||
Dealt to Nikolay Zem [Jc]
|
||||
Dealt to rv2020 [8d]
|
||||
Dealt to trs2758 [Kd]
|
||||
Dealt to RoadDevil [4s]
|
||||
Dealt to MasterTrini1 [6h]
|
||||
RoadDevil: brings in for $0.02
|
||||
Trackr21 joins the table at seat #7
|
||||
MasterTrini1: calls $0.02
|
||||
s0rrow: folds
|
||||
danjr655: folds
|
||||
Nikolay Zem: calls $0.02
|
||||
rv2020: calls $0.02
|
||||
trs2758: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to Nikolay Zem [Jc] [2h]
|
||||
Dealt to rv2020 [8d] [Jd]
|
||||
Dealt to trs2758 [Kd] [Ks]
|
||||
Dealt to RoadDevil [4s] [6c]
|
||||
Dealt to MasterTrini1 [6h] [4c]
|
||||
Pair on board - a double bet is allowed
|
||||
trs2758: bets $0.04
|
||||
RoadDevil: calls $0.04
|
||||
MasterTrini1: calls $0.04
|
||||
Nikolay Zem: folds
|
||||
rv2020: folds
|
||||
*** 5th STREET ***
|
||||
Dealt to trs2758 [Kd Ks] [7c]
|
||||
Dealt to RoadDevil [4s 6c] [9d]
|
||||
Dealt to MasterTrini1 [6h 4c] [3h]
|
||||
trs2758: bets $0.08
|
||||
RoadDevil: folds
|
||||
MasterTrini1: raises $0.08 to $0.16
|
||||
trs2758: raises $0.08 to $0.24
|
||||
MasterTrini1: raises $0.08 to $0.32
|
||||
Betting is capped
|
||||
trs2758: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to trs2758 [Kd Ks 7c] [9h]
|
||||
Dealt to MasterTrini1 [6h 4c 3h] [3c]
|
||||
trs2758: checks
|
||||
MasterTrini1: bets $0.08
|
||||
trs2758: calls $0.08
|
||||
*** RIVER ***
|
||||
trs2758: checks
|
||||
MasterTrini1: checks
|
||||
*** SHOW DOWN ***
|
||||
trs2758: shows [Ac 2c Kd Ks 7c 9h 9c] (two pair, Kings and Nines)
|
||||
MasterTrini1: shows [5h 8h 6h 4c 3h 3c As] (a pair of Threes)
|
||||
trs2758 collected $1.04 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $1.09 | Rake $0.05
|
||||
Seat 1: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 2: danjr655 folded on the 3rd Street (didn't bet)
|
||||
Seat 3: Nikolay Zem folded on the 4th Street
|
||||
Seat 4: rv2020 folded on the 4th Street
|
||||
Seat 5: trs2758 showed [Ac 2c Kd Ks 7c 9h 9c] and won ($1.04) with two pair, Kings and Nines
|
||||
Seat 6: RoadDevil folded on the 5th Street
|
||||
Seat 8: MasterTrini1 showed [5h 8h 6h 4c 3h 3c As] and lost with a pair of Threes
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874334277: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:18:16 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($1.87 in chips)
|
||||
Seat 2: danjr655 ($0.44 in chips)
|
||||
Seat 3: Nikolay Zem ($2.86 in chips)
|
||||
Seat 4: rv2020 ($1.45 in chips)
|
||||
Seat 5: trs2758 ($2.35 in chips)
|
||||
Seat 6: RoadDevil ($0.70 in chips)
|
||||
Seat 7: Trackr21 ($1.60 in chips)
|
||||
Seat 8: MasterTrini1 ($1.04 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
danjr655: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
rv2020: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
Trackr21: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [7d Qs 8s]
|
||||
Dealt to danjr655 [8d]
|
||||
Dealt to Nikolay Zem [6d]
|
||||
Dealt to rv2020 [4d]
|
||||
Dealt to trs2758 [Ad]
|
||||
Dealt to RoadDevil [Td]
|
||||
Dealt to Trackr21 [Jh]
|
||||
Dealt to MasterTrini1 [5s]
|
||||
rv2020: brings in for $0.02
|
||||
trs2758: calls $0.02
|
||||
RoadDevil: folds
|
||||
Trackr21: folds
|
||||
MasterTrini1: calls $0.02
|
||||
s0rrow: calls $0.02
|
||||
danjr655: folds
|
||||
Nikolay Zem: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to s0rrow [7d Qs 8s] [2s]
|
||||
Dealt to Nikolay Zem [6d] [2h]
|
||||
Dealt to rv2020 [4d] [Kd]
|
||||
Dealt to trs2758 [Ad] [Kh]
|
||||
Dealt to MasterTrini1 [5s] [5c]
|
||||
Pair on board - a double bet is allowed
|
||||
MasterTrini1: bets $0.08
|
||||
s0rrow: calls $0.08
|
||||
Nikolay Zem: folds
|
||||
rv2020: calls $0.08
|
||||
trs2758: calls $0.08
|
||||
*** 5th STREET ***
|
||||
Dealt to s0rrow [7d Qs 8s 2s] [As]
|
||||
Dealt to rv2020 [4d Kd] [Qd]
|
||||
Dealt to trs2758 [Ad Kh] [3h]
|
||||
Dealt to MasterTrini1 [5s 5c] [Js]
|
||||
MasterTrini1: checks
|
||||
s0rrow: bets $0.08
|
||||
rv2020: folds
|
||||
trs2758: folds
|
||||
MasterTrini1: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to s0rrow [7d Qs 8s 2s As] [5d]
|
||||
Dealt to MasterTrini1 [5s 5c Js] [2c]
|
||||
MasterTrini1: checks
|
||||
s0rrow: bets $0.08
|
||||
MasterTrini1: calls $0.08
|
||||
*** RIVER ***
|
||||
Dealt to s0rrow [7d Qs 8s 2s As 5d] [7h]
|
||||
MasterTrini1: checks
|
||||
s0rrow: bets $0.08
|
||||
MasterTrini1: calls $0.08
|
||||
*** SHOW DOWN ***
|
||||
s0rrow: shows [7d Qs 8s 2s As 5d 7h] (a pair of Sevens)
|
||||
MasterTrini1: mucks hand
|
||||
s0rrow collected $0.94 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.98 | Rake $0.04
|
||||
Seat 1: s0rrow showed [7d Qs 8s 2s As 5d 7h] and won ($0.94) with a pair of Sevens
|
||||
Seat 2: danjr655 folded on the 3rd Street (didn't bet)
|
||||
Seat 3: Nikolay Zem folded on the 4th Street
|
||||
Seat 4: rv2020 folded on the 5th Street
|
||||
Seat 5: trs2758 folded on the 5th Street
|
||||
Seat 6: RoadDevil folded on the 3rd Street (didn't bet)
|
||||
Seat 7: Trackr21 folded on the 3rd Street (didn't bet)
|
||||
Seat 8: MasterTrini1 mucked [Ac 9d 5s 5c Js 2c Kc]
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874382643: 7 Card Stud Limit ($0.04/$0.08 USD) - 2009/11/26 10:19:39 ET
|
||||
Table 'Atalante II' 8-max
|
||||
Seat 1: s0rrow ($2.46 in chips)
|
||||
Seat 2: danjr655 ($0.43 in chips)
|
||||
Seat 3: Nikolay Zem ($2.83 in chips)
|
||||
Seat 4: rv2020 ($1.34 in chips)
|
||||
Seat 5: trs2758 ($2.24 in chips)
|
||||
Seat 6: RoadDevil ($0.69 in chips)
|
||||
Seat 7: Trackr21 ($1.59 in chips)
|
||||
Seat 8: MasterTrini1 ($0.69 in chips)
|
||||
s0rrow: posts the ante $0.01
|
||||
danjr655: posts the ante $0.01
|
||||
Nikolay Zem: posts the ante $0.01
|
||||
rv2020: posts the ante $0.01
|
||||
trs2758: posts the ante $0.01
|
||||
RoadDevil: posts the ante $0.01
|
||||
Trackr21: posts the ante $0.01
|
||||
MasterTrini1: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to s0rrow [8d 3d 8c]
|
||||
Dealt to danjr655 [Kd]
|
||||
Dealt to Nikolay Zem [9c]
|
||||
Dealt to rv2020 [4h]
|
||||
Dealt to trs2758 [6c]
|
||||
Dealt to RoadDevil [6d]
|
||||
Dealt to Trackr21 [5d]
|
||||
Dealt to MasterTrini1 [8h]
|
||||
rv2020: brings in for $0.02
|
||||
trs2758: folds
|
||||
RoadDevil: calls $0.02
|
||||
Trackr21: calls $0.02
|
||||
MasterTrini1: calls $0.02
|
||||
s0rrow: calls $0.02
|
||||
danjr655: calls $0.02
|
||||
Nikolay Zem: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to s0rrow [8d 3d 8c] [Qc]
|
||||
Dealt to danjr655 [Kd] [Kc]
|
||||
Dealt to Nikolay Zem [9c] [Jd]
|
||||
Dealt to rv2020 [4h] [8s]
|
||||
Dealt to RoadDevil [6d] [4s]
|
||||
Dealt to Trackr21 [5d] [4d]
|
||||
Dealt to MasterTrini1 [8h] [As]
|
||||
Pair on board - a double bet is allowed
|
||||
danjr655: bets $0.04
|
||||
Nikolay Zem: calls $0.04
|
||||
rv2020: folds
|
||||
RoadDevil: folds
|
||||
Trackr21: calls $0.04
|
||||
MasterTrini1: calls $0.04
|
||||
s0rrow: folds
|
||||
*** 5th STREET ***
|
||||
Dealt to danjr655 [Kd Kc] [2h]
|
||||
Dealt to Nikolay Zem [9c Jd] [Qs]
|
||||
Dealt to Trackr21 [5d 4d] [3h]
|
||||
Dealt to MasterTrini1 [8h As] [Th]
|
||||
danjr655: bets $0.08
|
||||
Nikolay Zem: calls $0.08
|
||||
Trackr21: calls $0.08
|
||||
s0rrow is sitting out
|
||||
MasterTrini1: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to danjr655 [Kd Kc 2h] [7s]
|
||||
Dealt to Nikolay Zem [9c Jd Qs] [9d]
|
||||
Dealt to Trackr21 [5d 4d 3h] [5s]
|
||||
Dealt to MasterTrini1 [8h As Th] [9h]
|
||||
danjr655: checks
|
||||
Nikolay Zem: checks
|
||||
Trackr21: checks
|
||||
MasterTrini1: checks
|
||||
*** RIVER ***
|
||||
danjr655: checks
|
||||
Nikolay Zem: checks
|
||||
Trackr21: bets $0.08
|
||||
MasterTrini1: folds
|
||||
danjr655: folds
|
||||
Nikolay Zem: calls $0.08
|
||||
*** SHOW DOWN ***
|
||||
Trackr21: shows [6h Ah 5d 4d 3h 5s 5c] (three of a kind, Fives)
|
||||
Nikolay Zem: mucks hand
|
||||
Trackr21 collected $0.82 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.86 | Rake $0.04
|
||||
Seat 1: s0rrow folded on the 4th Street
|
||||
Seat 2: danjr655 folded on the River
|
||||
Seat 3: Nikolay Zem mucked [7c 7d 9c Jd Qs 9d Ad]
|
||||
Seat 4: rv2020 folded on the 4th Street
|
||||
Seat 5: trs2758 folded on the 3rd Street (didn't bet)
|
||||
Seat 6: RoadDevil folded on the 4th Street
|
||||
Seat 7: Trackr21 showed [6h Ah 5d 4d 3h 5s 5c] and won ($0.82) with three of a kind, Fives
|
||||
Seat 8: MasterTrini1 folded on the River
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,611 @@
|
|||
PokerStars Game #35874487284: 7 Card Stud Hi/Lo Limit ($0.04/$0.08 USD) - 2009/11/26 10:22:32 ET
|
||||
Table 'Dawn II' 8-max
|
||||
Seat 3: gashpor ($1.46 in chips)
|
||||
Seat 4: denny501 ($0.93 in chips)
|
||||
Seat 5: s0rrow ($1.60 in chips)
|
||||
Seat 8: rdiezchang ($1.16 in chips)
|
||||
gashpor: posts the ante $0.01
|
||||
denny501: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
rdiezchang: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to gashpor [Kc]
|
||||
Dealt to denny501 [7c]
|
||||
Dealt to s0rrow [5d Ks 2h]
|
||||
Dealt to rdiezchang [3d]
|
||||
s0rrow: brings in for $0.02
|
||||
rdiezchang: calls $0.02
|
||||
gashpor: calls $0.02
|
||||
denny501: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to gashpor [Kc] [4d]
|
||||
Dealt to denny501 [7c] [Qh]
|
||||
Dealt to s0rrow [5d Ks 2h] [9h]
|
||||
Dealt to rdiezchang [3d] [7s]
|
||||
Soroka69 joins the table at seat #7
|
||||
gashpor: checks
|
||||
poconoman is connected
|
||||
denny501: checks
|
||||
s0rrow: checks
|
||||
rdiezchang: checks
|
||||
*** 5th STREET ***
|
||||
Dealt to gashpor [Kc 4d] [Qd]
|
||||
Dealt to denny501 [7c Qh] [9s]
|
||||
Dealt to s0rrow [5d Ks 2h 9h] [Js]
|
||||
Dealt to rdiezchang [3d 7s] [Jh]
|
||||
gashpor: checks
|
||||
denny501: checks
|
||||
s0rrow: checks
|
||||
rdiezchang: checks
|
||||
*** 6th STREET ***
|
||||
Dealt to gashpor [Kc 4d Qd] [5s]
|
||||
Dealt to denny501 [7c Qh 9s] [6s]
|
||||
Dealt to s0rrow [5d Ks 2h 9h Js] [4c]
|
||||
Dealt to rdiezchang [3d 7s Jh] [5c]
|
||||
123smoothie joins the table at seat #2
|
||||
gashpor: checks
|
||||
denny501: checks
|
||||
s0rrow: checks
|
||||
rdiezchang: bets $0.08
|
||||
gashpor: folds
|
||||
denny501: folds
|
||||
s0rrow: folds
|
||||
Uncalled bet ($0.08) returned to rdiezchang
|
||||
rdiezchang collected $0.12 from pot
|
||||
rdiezchang: doesn't show hand
|
||||
*** SUMMARY ***
|
||||
Total pot $0.12 | Rake $0
|
||||
Seat 3: gashpor folded on the 6th Street
|
||||
Seat 4: denny501 folded on the 6th Street
|
||||
Seat 5: s0rrow folded on the 6th Street
|
||||
Seat 8: rdiezchang collected ($0.12)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874523510: 7 Card Stud Hi/Lo Limit ($0.04/$0.08 USD) - 2009/11/26 10:23:32 ET
|
||||
Table 'Dawn II' 8-max
|
||||
Seat 2: 123smoothie ($1.60 in chips)
|
||||
Seat 3: gashpor ($1.43 in chips)
|
||||
Seat 4: denny501 ($0.90 in chips)
|
||||
Seat 5: s0rrow ($1.57 in chips)
|
||||
Seat 7: Soroka69 ($1 in chips)
|
||||
Seat 8: rdiezchang ($1.25 in chips)
|
||||
123smoothie: posts the ante $0.01
|
||||
gashpor: posts the ante $0.01
|
||||
denny501: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
Soroka69: posts the ante $0.01
|
||||
rdiezchang: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to 123smoothie [9h]
|
||||
Dealt to gashpor [4s]
|
||||
Dealt to denny501 [Qs]
|
||||
Dealt to s0rrow [Qd Js Kc]
|
||||
Dealt to Soroka69 [6s]
|
||||
Dealt to rdiezchang [8d]
|
||||
poconoman was removed from the table for failing to post
|
||||
gashpor: brings in for $0.02
|
||||
TomSludge joins the table at seat #6
|
||||
denny501: calls $0.02
|
||||
s0rrow: folds
|
||||
Soroka69: calls $0.02
|
||||
rdiezchang: calls $0.02
|
||||
u.pressure joins the table at seat #1
|
||||
123smoothie: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to 123smoothie [9h] [Ah]
|
||||
Dealt to gashpor [4s] [6h]
|
||||
Dealt to denny501 [Qs] [4d]
|
||||
Dealt to Soroka69 [6s] [3c]
|
||||
Dealt to rdiezchang [8d] [Ac]
|
||||
123smoothie: checks
|
||||
gashpor: checks
|
||||
denny501: checks
|
||||
Soroka69: checks
|
||||
rdiezchang: checks
|
||||
*** 5th STREET ***
|
||||
Dealt to 123smoothie [9h Ah] [5d]
|
||||
Dealt to gashpor [4s 6h] [8h]
|
||||
Dealt to denny501 [Qs 4d] [Tc]
|
||||
Dealt to Soroka69 [6s 3c] [6c]
|
||||
Dealt to rdiezchang [8d Ac] [8c]
|
||||
rdiezchang: bets $0.08
|
||||
123smoothie: calls $0.08
|
||||
gashpor: calls $0.08
|
||||
denny501: folds
|
||||
Soroka69: folds
|
||||
*** 6th STREET ***
|
||||
Dealt to 123smoothie [9h Ah 5d] [4c]
|
||||
Dealt to gashpor [4s 6h 8h] [Qh]
|
||||
Dealt to rdiezchang [8d Ac 8c] [Jd]
|
||||
rdiezchang: bets $0.08
|
||||
123smoothie: calls $0.08
|
||||
gashpor: calls $0.08
|
||||
*** RIVER ***
|
||||
rdiezchang: bets $0.08
|
||||
123smoothie: calls $0.08
|
||||
gashpor: folds
|
||||
*** SHOW DOWN ***
|
||||
rdiezchang: shows [Ad 5s 8d Ac 8c Jd Th] (HI: two pair, Aces and Eights)
|
||||
123smoothie: mucks hand
|
||||
rdiezchang collected $0.77 from pot
|
||||
No low hand qualified
|
||||
*** SUMMARY ***
|
||||
Total pot $0.80 | Rake $0.03
|
||||
Seat 2: 123smoothie mucked [9c Jc 9h Ah 5d 4c Qc]
|
||||
Seat 3: gashpor folded on the River
|
||||
Seat 4: denny501 folded on the 5th Street
|
||||
Seat 5: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 7: Soroka69 folded on the 5th Street
|
||||
Seat 8: rdiezchang showed [Ad 5s 8d Ac 8c Jd Th] and won ($0.77) with HI: two pair, Aces and Eights
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874576282: 7 Card Stud Hi/Lo Limit ($0.04/$0.08 USD) - 2009/11/26 10:24:59 ET
|
||||
Table 'Dawn II' 8-max
|
||||
Seat 1: u.pressure ($11 in chips)
|
||||
Seat 2: 123smoothie ($1.33 in chips)
|
||||
Seat 3: gashpor ($1.24 in chips)
|
||||
Seat 4: denny501 ($0.87 in chips)
|
||||
Seat 5: s0rrow ($1.56 in chips)
|
||||
Seat 6: TomSludge ($1.60 in chips)
|
||||
Seat 7: Soroka69 ($0.97 in chips)
|
||||
Seat 8: rdiezchang ($1.75 in chips)
|
||||
u.pressure: posts the ante $0.01
|
||||
123smoothie: posts the ante $0.01
|
||||
gashpor: posts the ante $0.01
|
||||
denny501: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
TomSludge: posts the ante $0.01
|
||||
Soroka69: posts the ante $0.01
|
||||
rdiezchang: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to u.pressure [Qs]
|
||||
Dealt to 123smoothie [4h]
|
||||
Dealt to gashpor [4c]
|
||||
Dealt to denny501 [8s]
|
||||
Dealt to s0rrow [Ah Kd 8d]
|
||||
Dealt to TomSludge [Ks]
|
||||
Dealt to Soroka69 [3h]
|
||||
Dealt to rdiezchang [5s]
|
||||
Soroka69: brings in for $0.02
|
||||
rdiezchang: calls $0.02
|
||||
u.pressure: calls $0.02
|
||||
123smoothie: calls $0.02
|
||||
gashpor: calls $0.02
|
||||
denny501: folds
|
||||
s0rrow: calls $0.02
|
||||
TomSludge: folds
|
||||
*** 4th STREET ***
|
||||
Dealt to u.pressure [Qs] [Td]
|
||||
Dealt to 123smoothie [4h] [9d]
|
||||
Dealt to gashpor [4c] [Jc]
|
||||
Dealt to s0rrow [Ah Kd 8d] [Kc]
|
||||
Dealt to Soroka69 [3h] [Ad]
|
||||
Dealt to rdiezchang [5s] [7c]
|
||||
Soroka69: checks
|
||||
rdiezchang: checks
|
||||
u.pressure: checks
|
||||
123smoothie: checks
|
||||
gashpor: checks
|
||||
s0rrow: checks
|
||||
*** 5th STREET ***
|
||||
Dealt to u.pressure [Qs Td] [Jh]
|
||||
Dealt to 123smoothie [4h 9d] [2c]
|
||||
Dealt to gashpor [4c Jc] [5h]
|
||||
Dealt to s0rrow [Ah Kd 8d Kc] [2d]
|
||||
Dealt to Soroka69 [3h Ad] [Qd]
|
||||
Dealt to rdiezchang [5s 7c] [4d]
|
||||
Soroka69: checks
|
||||
rdiezchang: checks
|
||||
u.pressure: checks
|
||||
123smoothie: checks
|
||||
gashpor: bets $0.08
|
||||
s0rrow: folds
|
||||
Soroka69: calls $0.08
|
||||
rdiezchang: calls $0.08
|
||||
u.pressure: calls $0.08
|
||||
123smoothie: folds
|
||||
*** 6th STREET ***
|
||||
Dealt to u.pressure [Qs Td Jh] [6d]
|
||||
Dealt to gashpor [4c Jc 5h] [7s]
|
||||
Dealt to Soroka69 [3h Ad Qd] [9s]
|
||||
Dealt to rdiezchang [5s 7c 4d] [Th]
|
||||
Soroka69: checks
|
||||
rdiezchang: checks
|
||||
u.pressure: checks
|
||||
gashpor: checks
|
||||
*** RIVER ***
|
||||
Soroka69: checks
|
||||
rdiezchang: checks
|
||||
u.pressure: checks
|
||||
gashpor: bets $0.08
|
||||
Soroka69: folds
|
||||
rdiezchang: calls $0.08
|
||||
u.pressure: calls $0.08
|
||||
*** SHOW DOWN ***
|
||||
gashpor: shows [7h 2h 4c Jc 5h 7s 8c] (HI: a pair of Sevens; LO: 8,7,5,4,2)
|
||||
rdiezchang: shows [As Qh 5s 7c 4d Th Ac] (HI: a pair of Aces)
|
||||
u.pressure: shows [Qc Kh Qs Td Jh 6d 6s] (HI: two pair, Queens and Sixes)
|
||||
u.pressure collected $0.37 from pot
|
||||
gashpor collected $0.36 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.76 | Rake $0.03
|
||||
Seat 1: u.pressure showed [Qc Kh Qs Td Jh 6d 6s] and won ($0.37) with HI: two pair, Queens and Sixes
|
||||
Seat 2: 123smoothie folded on the 5th Street
|
||||
Seat 3: gashpor showed [7h 2h 4c Jc 5h 7s 8c] and won ($0.36) with HI: a pair of Sevens; LO: 8,7,5,4,2
|
||||
Seat 4: denny501 folded on the 3rd Street (didn't bet)
|
||||
Seat 5: s0rrow folded on the 5th Street
|
||||
Seat 6: TomSludge folded on the 3rd Street (didn't bet)
|
||||
Seat 7: Soroka69 folded on the River
|
||||
Seat 8: rdiezchang showed [As Qh 5s 7c 4d Th Ac] and lost with HI: a pair of Aces
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874635170: 7 Card Stud Hi/Lo Limit ($0.04/$0.08 USD) - 2009/11/26 10:26:37 ET
|
||||
Table 'Dawn II' 8-max
|
||||
Seat 1: u.pressure ($11.18 in chips)
|
||||
Seat 2: 123smoothie ($1.30 in chips)
|
||||
Seat 3: gashpor ($1.41 in chips)
|
||||
Seat 4: denny501 ($0.86 in chips)
|
||||
Seat 5: s0rrow ($1.53 in chips)
|
||||
Seat 6: TomSludge ($1.59 in chips)
|
||||
Seat 7: Soroka69 ($0.86 in chips)
|
||||
Seat 8: rdiezchang ($1.56 in chips)
|
||||
u.pressure: posts the ante $0.01
|
||||
123smoothie: posts the ante $0.01
|
||||
gashpor: posts the ante $0.01
|
||||
denny501: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
TomSludge: posts the ante $0.01
|
||||
Soroka69: posts the ante $0.01
|
||||
rdiezchang: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to u.pressure [8c]
|
||||
Dealt to 123smoothie [2c]
|
||||
Dealt to gashpor [Qd]
|
||||
Dealt to denny501 [9d]
|
||||
Dealt to s0rrow [Ts 5c Js]
|
||||
Dealt to TomSludge [3h]
|
||||
Dealt to Soroka69 [7s]
|
||||
Dealt to rdiezchang [6c]
|
||||
123smoothie: brings in for $0.02
|
||||
gashpor: folds
|
||||
denny501: calls $0.02
|
||||
s0rrow: folds
|
||||
TomSludge: folds
|
||||
Soroka69: calls $0.02
|
||||
rdiezchang: calls $0.02
|
||||
u.pressure: folds
|
||||
*** 4th STREET ***
|
||||
Dealt to 123smoothie [2c] [8d]
|
||||
Dealt to denny501 [9d] [3d]
|
||||
Dealt to Soroka69 [7s] [Th]
|
||||
Dealt to rdiezchang [6c] [Ac]
|
||||
rdiezchang: bets $0.04
|
||||
123smoothie: calls $0.04
|
||||
denny501: calls $0.04
|
||||
Soroka69: folds
|
||||
*** 5th STREET ***
|
||||
Dealt to 123smoothie [2c 8d] [3c]
|
||||
Dealt to denny501 [9d 3d] [As]
|
||||
Dealt to rdiezchang [6c Ac] [6s]
|
||||
rdiezchang: bets $0.08
|
||||
123smoothie: calls $0.08
|
||||
denny501: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to 123smoothie [2c 8d 3c] [3s]
|
||||
Dealt to denny501 [9d 3d As] [Kc]
|
||||
Dealt to rdiezchang [6c Ac 6s] [Qc]
|
||||
rdiezchang: bets $0.08
|
||||
123smoothie: calls $0.08
|
||||
denny501: folds
|
||||
*** RIVER ***
|
||||
rdiezchang: bets $0.08
|
||||
123smoothie: calls $0.08
|
||||
*** SHOW DOWN ***
|
||||
rdiezchang: shows [8s 7c 6c Ac 6s Qc Qs] (HI: two pair, Queens and Sixes)
|
||||
123smoothie: mucks hand
|
||||
rdiezchang collected $0.80 from pot
|
||||
No low hand qualified
|
||||
*** SUMMARY ***
|
||||
Total pot $0.84 | Rake $0.04
|
||||
Seat 1: u.pressure folded on the 3rd Street (didn't bet)
|
||||
Seat 2: 123smoothie mucked [2d 7d 2c 8d 3c 3s Tc]
|
||||
Seat 3: gashpor folded on the 3rd Street (didn't bet)
|
||||
Seat 4: denny501 folded on the 6th Street
|
||||
Seat 5: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 6: TomSludge folded on the 3rd Street (didn't bet)
|
||||
Seat 7: Soroka69 folded on the 4th Street
|
||||
Seat 8: rdiezchang showed [8s 7c 6c Ac 6s Qc Qs] and won ($0.80) with HI: two pair, Queens and Sixes
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874676388: 7 Card Stud Hi/Lo Limit ($0.04/$0.08 USD) - 2009/11/26 10:27:46 ET
|
||||
Table 'Dawn II' 8-max
|
||||
Seat 1: u.pressure ($11.17 in chips)
|
||||
Seat 2: 123smoothie ($0.99 in chips)
|
||||
Seat 3: gashpor ($1.40 in chips)
|
||||
Seat 4: denny501 ($0.71 in chips)
|
||||
Seat 5: s0rrow ($1.52 in chips)
|
||||
Seat 6: TomSludge ($1.58 in chips)
|
||||
Seat 7: Soroka69 ($0.83 in chips)
|
||||
Seat 8: rdiezchang ($2.05 in chips)
|
||||
u.pressure: posts the ante $0.01
|
||||
123smoothie: posts the ante $0.01
|
||||
gashpor: posts the ante $0.01
|
||||
denny501: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
TomSludge: posts the ante $0.01
|
||||
Soroka69: posts the ante $0.01
|
||||
rdiezchang: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to u.pressure [Td]
|
||||
Dealt to 123smoothie [4c]
|
||||
Dealt to gashpor [5d]
|
||||
Dealt to denny501 [2c]
|
||||
Dealt to s0rrow [7c 3s 5h]
|
||||
Dealt to TomSludge [8s]
|
||||
Dealt to Soroka69 [7d]
|
||||
Dealt to rdiezchang [Ad]
|
||||
denny501: brings in for $0.02
|
||||
s0rrow: calls $0.02
|
||||
TomSludge: folds
|
||||
Soroka69: calls $0.02
|
||||
rdiezchang: calls $0.02
|
||||
u.pressure: folds
|
||||
123smoothie: calls $0.02
|
||||
gashpor: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to 123smoothie [4c] [3c]
|
||||
Dealt to gashpor [5d] [Qd]
|
||||
Dealt to denny501 [2c] [7s]
|
||||
Dealt to s0rrow [7c 3s 5h] [Qc]
|
||||
Dealt to Soroka69 [7d] [5s]
|
||||
Dealt to rdiezchang [Ad] [Js]
|
||||
rdiezchang: checks
|
||||
123smoothie: checks
|
||||
gashpor: checks
|
||||
denny501: folds
|
||||
denny501 leaves the table
|
||||
s0rrow: checks
|
||||
Soroka69: checks
|
||||
*** 5th STREET ***
|
||||
Dealt to 123smoothie [4c 3c] [9s]
|
||||
Dealt to gashpor [5d Qd] [Jd]
|
||||
Dealt to s0rrow [7c 3s 5h Qc] [Kc]
|
||||
Dealt to Soroka69 [7d 5s] [5c]
|
||||
Dealt to rdiezchang [Ad Js] [Ts]
|
||||
LainaRahat joins the table at seat #4
|
||||
Soroka69: checks
|
||||
rdiezchang: checks
|
||||
123smoothie: checks
|
||||
gashpor: bets $0.08
|
||||
s0rrow: calls $0.08
|
||||
Soroka69: calls $0.08
|
||||
rdiezchang: folds
|
||||
123smoothie: folds
|
||||
*** 6th STREET ***
|
||||
Dealt to gashpor [5d Qd Jd] [9d]
|
||||
Dealt to s0rrow [7c 3s 5h Qc Kc] [6d]
|
||||
Dealt to Soroka69 [7d 5s 5c] [2s]
|
||||
Soroka69: checks
|
||||
gashpor: bets $0.08
|
||||
s0rrow: calls $0.08
|
||||
Soroka69: calls $0.08
|
||||
*** RIVER ***
|
||||
Dealt to s0rrow [7c 3s 5h Qc Kc 6d] [4d]
|
||||
Soroka69: checks
|
||||
gashpor: bets $0.08
|
||||
s0rrow: calls $0.08
|
||||
Soroka69: folds
|
||||
*** SHOW DOWN ***
|
||||
gashpor: shows [4h 3d 5d Qd Jd 9d 6h] (HI: a flush, Queen high)
|
||||
s0rrow: shows [7c 3s 5h Qc Kc 6d 4d] (HI: a straight, Three to Seven; LO: 7,6,5,4,3)
|
||||
gashpor collected $0.40 from pot
|
||||
s0rrow collected $0.40 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.84 | Rake $0.04
|
||||
Seat 1: u.pressure folded on the 3rd Street (didn't bet)
|
||||
Seat 2: 123smoothie folded on the 5th Street
|
||||
Seat 3: gashpor showed [4h 3d 5d Qd Jd 9d 6h] and won ($0.40) with HI: a flush, Queen high
|
||||
Seat 4: denny501 folded on the 4th Street
|
||||
Seat 5: s0rrow showed [7c 3s 5h Qc Kc 6d 4d] and won ($0.40) with HI: a straight, Three to Seven; LO: 7,6,5,4,3
|
||||
Seat 6: TomSludge folded on the 3rd Street (didn't bet)
|
||||
Seat 7: Soroka69 folded on the River
|
||||
Seat 8: rdiezchang folded on the 5th Street
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874733203: 7 Card Stud Hi/Lo Limit ($0.04/$0.08 USD) - 2009/11/26 10:29:22 ET
|
||||
Table 'Dawn II' 8-max
|
||||
Seat 1: u.pressure ($11.16 in chips)
|
||||
Seat 2: 123smoothie ($0.96 in chips)
|
||||
Seat 3: gashpor ($1.53 in chips)
|
||||
Seat 4: LainaRahat ($2 in chips)
|
||||
Seat 5: s0rrow ($1.65 in chips)
|
||||
Seat 6: TomSludge ($1.57 in chips)
|
||||
Seat 7: Soroka69 ($0.64 in chips)
|
||||
Seat 8: rdiezchang ($2.02 in chips)
|
||||
u.pressure: posts the ante $0.01
|
||||
123smoothie: posts the ante $0.01
|
||||
gashpor: posts the ante $0.01
|
||||
LainaRahat: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
TomSludge: posts the ante $0.01
|
||||
Soroka69: posts the ante $0.01
|
||||
rdiezchang: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to u.pressure [Js]
|
||||
Dealt to 123smoothie [Kc]
|
||||
Dealt to gashpor [Kd]
|
||||
Dealt to LainaRahat [Ts]
|
||||
Dealt to s0rrow [Qd Ad 2s]
|
||||
Dealt to TomSludge [4h]
|
||||
Dealt to Soroka69 [3c]
|
||||
Dealt to rdiezchang [3h]
|
||||
s0rrow: brings in for $0.02
|
||||
TomSludge: folds
|
||||
Soroka69: calls $0.02
|
||||
rdiezchang: folds
|
||||
u.pressure: folds
|
||||
123smoothie: calls $0.02
|
||||
gashpor: folds
|
||||
LainaRahat: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to 123smoothie [Kc] [7d]
|
||||
Dealt to LainaRahat [Ts] [4c]
|
||||
Dealt to s0rrow [Qd Ad 2s] [As]
|
||||
Dealt to Soroka69 [3c] [Qc]
|
||||
rdiezchang leaves the table
|
||||
s0rrow: bets $0.04
|
||||
Soroka69: raises $0.04 to $0.08
|
||||
geo_441 joins the table at seat #8
|
||||
123smoothie: folds
|
||||
LainaRahat: calls $0.08
|
||||
s0rrow: calls $0.04
|
||||
*** 5th STREET ***
|
||||
Dealt to LainaRahat [Ts 4c] [Ks]
|
||||
Dealt to s0rrow [Qd Ad 2s As] [2h]
|
||||
Dealt to Soroka69 [3c Qc] [6h]
|
||||
s0rrow: checks
|
||||
Soroka69: bets $0.08
|
||||
LainaRahat: calls $0.08
|
||||
s0rrow: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to LainaRahat [Ts 4c Ks] [Tc]
|
||||
Dealt to s0rrow [Qd Ad 2s As 2h] [8d]
|
||||
Dealt to Soroka69 [3c Qc 6h] [7h]
|
||||
LainaRahat: checks
|
||||
s0rrow: checks
|
||||
Soroka69: checks
|
||||
*** RIVER ***
|
||||
Dealt to s0rrow [Qd Ad 2s As 2h 8d] [6c]
|
||||
LainaRahat: checks
|
||||
s0rrow: checks
|
||||
Soroka69: checks
|
||||
*** SHOW DOWN ***
|
||||
LainaRahat: shows [Ac 3s Ts 4c Ks Tc Kh] (HI: two pair, Kings and Tens)
|
||||
s0rrow: shows [Qd Ad 2s As 2h 8d 6c] (HI: two pair, Aces and Deuces)
|
||||
Soroka69: mucks hand
|
||||
s0rrow collected $0.61 from pot
|
||||
No low hand qualified
|
||||
*** SUMMARY ***
|
||||
Total pot $0.64 | Rake $0.03
|
||||
Seat 1: u.pressure folded on the 3rd Street (didn't bet)
|
||||
Seat 2: 123smoothie folded on the 4th Street
|
||||
Seat 3: gashpor folded on the 3rd Street (didn't bet)
|
||||
Seat 4: LainaRahat showed [Ac 3s Ts 4c Ks Tc Kh] and lost with HI: two pair, Kings and Tens
|
||||
Seat 5: s0rrow showed [Qd Ad 2s As 2h 8d 6c] and won ($0.61) with HI: two pair, Aces and Deuces
|
||||
Seat 6: TomSludge folded on the 3rd Street (didn't bet)
|
||||
Seat 7: Soroka69 mucked [2d Qh 3c Qc 6h 7h Jd]
|
||||
Seat 8: rdiezchang folded on the 3rd Street (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874789183: 7 Card Stud Hi/Lo Limit ($0.04/$0.08 USD) - 2009/11/26 10:30:56 ET
|
||||
Table 'Dawn II' 8-max
|
||||
Seat 1: u.pressure ($11.15 in chips)
|
||||
Seat 2: 123smoothie ($0.93 in chips)
|
||||
Seat 3: gashpor ($1.52 in chips)
|
||||
Seat 4: LainaRahat ($1.81 in chips)
|
||||
Seat 5: s0rrow ($2.07 in chips)
|
||||
Seat 6: TomSludge ($1.56 in chips)
|
||||
Seat 7: Soroka69 ($0.45 in chips)
|
||||
Seat 8: geo_441 ($1.60 in chips)
|
||||
u.pressure: posts the ante $0.01
|
||||
123smoothie: posts the ante $0.01
|
||||
gashpor: posts the ante $0.01
|
||||
LainaRahat: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
TomSludge: posts the ante $0.01
|
||||
Soroka69: posts the ante $0.01
|
||||
geo_441: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to u.pressure [5c]
|
||||
Dealt to 123smoothie [8c]
|
||||
Dealt to gashpor [5s]
|
||||
Dealt to LainaRahat [2c]
|
||||
Dealt to s0rrow [8d Qs Kc]
|
||||
Dealt to TomSludge [As]
|
||||
Dealt to Soroka69 [Tc]
|
||||
Dealt to geo_441 [4d]
|
||||
LainaRahat: brings in for $0.02
|
||||
s0rrow: folds
|
||||
TomSludge: calls $0.02
|
||||
Soroka69: calls $0.02
|
||||
geo_441: calls $0.02
|
||||
u.pressure: folds
|
||||
123smoothie: calls $0.02
|
||||
gashpor: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to 123smoothie [8c] [9d]
|
||||
Dealt to gashpor [5s] [5d]
|
||||
Dealt to LainaRahat [2c] [2d]
|
||||
Dealt to TomSludge [As] [8h]
|
||||
Dealt to Soroka69 [Tc] [2h]
|
||||
Dealt to geo_441 [4d] [3s]
|
||||
gashpor: checks
|
||||
LainaRahat: checks
|
||||
TomSludge: bets $0.04
|
||||
Soroka69: calls $0.04
|
||||
geo_441: calls $0.04
|
||||
123smoothie: calls $0.04
|
||||
gashpor: calls $0.04
|
||||
LainaRahat: folds
|
||||
*** 5th STREET ***
|
||||
Dealt to 123smoothie [8c 9d] [Jd]
|
||||
Dealt to gashpor [5s 5d] [Td]
|
||||
Dealt to TomSludge [As 8h] [Js]
|
||||
Dealt to Soroka69 [Tc 2h] [Qc]
|
||||
Dealt to geo_441 [4d 3s] [7c]
|
||||
gashpor: checks
|
||||
TomSludge: checks
|
||||
Soroka69: bets $0.08
|
||||
geo_441: calls $0.08
|
||||
123smoothie: calls $0.08
|
||||
gashpor: calls $0.08
|
||||
TomSludge: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to 123smoothie [8c 9d Jd] [3c]
|
||||
Dealt to gashpor [5s 5d Td] [9h]
|
||||
Dealt to TomSludge [As 8h Js] [6c]
|
||||
Dealt to Soroka69 [Tc 2h Qc] [5h]
|
||||
Dealt to geo_441 [4d 3s 7c] [Jh]
|
||||
gashpor: checks
|
||||
TomSludge: checks
|
||||
Soroka69: bets $0.08
|
||||
geo_441: calls $0.08
|
||||
123smoothie: calls $0.08
|
||||
gashpor: calls $0.08
|
||||
TomSludge: calls $0.08
|
||||
*** RIVER ***
|
||||
gashpor: checks
|
||||
TomSludge: checks
|
||||
Soroka69: checks
|
||||
geo_441: checks
|
||||
123smoothie: bets $0.08
|
||||
gashpor: calls $0.08
|
||||
TomSludge: calls $0.08
|
||||
Soroka69: calls $0.08
|
||||
geo_441: folds
|
||||
*** SHOW DOWN ***
|
||||
123smoothie: shows [Qd Ks 8c 9d Jd 3c 9c] (HI: a pair of Nines)
|
||||
gashpor: shows [4c Th 5s 5d Td 9h Ad] (HI: two pair, Tens and Fives)
|
||||
TomSludge: shows [7s Ah As 8h Js 6c Jc] (HI: two pair, Aces and Jacks)
|
||||
Soroka69: mucks hand
|
||||
TomSludge collected $1.45 from pot
|
||||
No low hand qualified
|
||||
*** SUMMARY ***
|
||||
Total pot $1.52 | Rake $0.07
|
||||
Seat 1: u.pressure folded on the 3rd Street (didn't bet)
|
||||
Seat 2: 123smoothie showed [Qd Ks 8c 9d Jd 3c 9c] and lost with HI: a pair of Nines
|
||||
Seat 3: gashpor showed [4c Th 5s 5d Td 9h Ad] and lost with HI: two pair, Tens and Fives
|
||||
Seat 4: LainaRahat folded on the 4th Street
|
||||
Seat 5: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 6: TomSludge showed [7s Ah As 8h Js 6c Jc] and won ($1.45) with HI: two pair, Aces and Jacks
|
||||
Seat 7: Soroka69 mucked [Qh Ts Tc 2h Qc 5h 6s]
|
||||
Seat 8: geo_441 folded on the River
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,574 @@
|
|||
PokerStars Game #35874566077: Razz Limit ($0.04/$0.08 USD) - 2009/11/26 10:24:42 ET
|
||||
Table 'Gotha II' 8-max
|
||||
Seat 1: kobreli ($1.33 in chips)
|
||||
Seat 3: willy32948 ($2.17 in chips)
|
||||
Seat 5: meg100 ($1.71 in chips)
|
||||
Seat 7: s0rrow ($1.60 in chips)
|
||||
Seat 8: SilkZone ($1.65 in chips)
|
||||
kobreli: posts the ante $0.01
|
||||
willy32948: posts the ante $0.01
|
||||
meg100: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
SilkZone: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to kobreli [Qc]
|
||||
Dealt to willy32948 [6h]
|
||||
Dealt to meg100 [3s]
|
||||
Dealt to s0rrow [Td 2s 9s]
|
||||
Dealt to SilkZone [3h]
|
||||
kobreli: brings in for $0.02
|
||||
willy32948: calls $0.02
|
||||
meg100: calls $0.02
|
||||
s0rrow: folds
|
||||
SilkZone: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to kobreli [Qc] [8s]
|
||||
Dealt to willy32948 [6h] [7h]
|
||||
Dealt to meg100 [3s] [Js]
|
||||
Dealt to SilkZone [3h] [3d]
|
||||
kurczakkr2 is disconnected
|
||||
willy32948: bets $0.04
|
||||
meg100: calls $0.04
|
||||
SilkZone: calls $0.04
|
||||
kobreli: folds
|
||||
*** 5th STREET ***
|
||||
Dealt to willy32948 [6h 7h] [7s]
|
||||
Dealt to meg100 [3s Js] [Kh]
|
||||
Dealt to SilkZone [3h 3d] [4h]
|
||||
meg100: checks
|
||||
SilkZone: bets $0.08
|
||||
willy32948: calls $0.08
|
||||
meg100: folds
|
||||
*** 6th STREET ***
|
||||
Dealt to willy32948 [6h 7h 7s] [Jh]
|
||||
Dealt to SilkZone [3h 3d 4h] [9c]
|
||||
SilkZone: bets $0.08
|
||||
willy32948: folds
|
||||
Uncalled bet ($0.08) returned to SilkZone
|
||||
willy32948 leaves the table
|
||||
SilkZone collected $0.39 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.41 | Rake $0.02
|
||||
Seat 1: kobreli folded on the 4th Street
|
||||
Seat 3: willy32948 folded on the 6th Street
|
||||
Seat 5: meg100 folded on the 5th Street
|
||||
Seat 7: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 8: SilkZone collected ($0.39)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874590575: Razz Limit ($0.04/$0.08 USD) - 2009/11/26 10:25:23 ET
|
||||
Table 'Gotha II' 8-max
|
||||
Seat 1: kobreli ($1.30 in chips)
|
||||
Seat 5: meg100 ($1.64 in chips)
|
||||
Seat 7: s0rrow ($1.59 in chips)
|
||||
Seat 8: SilkZone ($1.89 in chips)
|
||||
kobreli: posts the ante $0.01
|
||||
meg100: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
SilkZone: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to kobreli [3h]
|
||||
Dealt to meg100 [6s]
|
||||
Dealt to s0rrow [4c 2h 8h]
|
||||
Dealt to SilkZone [Jc]
|
||||
SilkZone: brings in for $0.02
|
||||
kobreli: calls $0.02
|
||||
meg100: calls $0.02
|
||||
s0rrow: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to kobreli [3h] [Ks]
|
||||
Dealt to meg100 [6s] [2d]
|
||||
Dealt to s0rrow [4c 2h 8h] [7c]
|
||||
Dealt to SilkZone [Jc] [3c]
|
||||
meg100: checks
|
||||
s0rrow: bets $0.04
|
||||
SilkZone: calls $0.04
|
||||
kobreli: folds
|
||||
meg100: calls $0.04
|
||||
*** 5th STREET ***
|
||||
Dealt to meg100 [6s 2d] [5d]
|
||||
Dealt to s0rrow [4c 2h 8h 7c] [Ah]
|
||||
Dealt to SilkZone [Jc 3c] [8c]
|
||||
meg100: checks
|
||||
s0rrow: bets $0.08
|
||||
SilkZone: calls $0.08
|
||||
meg100: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to meg100 [6s 2d 5d] [Qs]
|
||||
Dealt to s0rrow [4c 2h 8h 7c Ah] [2s]
|
||||
Dealt to SilkZone [Jc 3c 8c] [Kh]
|
||||
s0rrow: checks
|
||||
SilkZone: checks
|
||||
meg100: checks
|
||||
*** RIVER ***
|
||||
Dealt to s0rrow [4c 2h 8h 7c Ah 2s] [5h]
|
||||
s0rrow: bets $0.08
|
||||
HIWAII2 joins the table at seat #6
|
||||
SilkZone: folds
|
||||
meg100: folds
|
||||
Uncalled bet ($0.08) returned to s0rrow
|
||||
s0rrow collected $0.46 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.48 | Rake $0.02
|
||||
Seat 1: kobreli folded on the 4th Street
|
||||
Seat 5: meg100 folded on the River
|
||||
Seat 7: s0rrow collected ($0.46)
|
||||
Seat 8: SilkZone folded on the River
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874623967: Razz Limit ($0.04/$0.08 USD) - 2009/11/26 10:26:19 ET
|
||||
Table 'Gotha II' 8-max
|
||||
Seat 1: kobreli ($1.27 in chips)
|
||||
Seat 5: meg100 ($1.49 in chips)
|
||||
Seat 6: HIWAII2 ($1.13 in chips)
|
||||
Seat 7: s0rrow ($1.90 in chips)
|
||||
Seat 8: SilkZone ($1.74 in chips)
|
||||
kobreli: posts the ante $0.01
|
||||
meg100: posts the ante $0.01
|
||||
HIWAII2: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
SilkZone: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to kobreli [8c]
|
||||
Dealt to meg100 [7h]
|
||||
Dealt to HIWAII2 [Kh]
|
||||
Dealt to s0rrow [9h 2s 7c]
|
||||
Dealt to SilkZone [6s]
|
||||
HIWAII2: brings in for $0.02
|
||||
manga130 joins the table at seat #3
|
||||
s0rrow: calls $0.02
|
||||
SilkZone: calls $0.02
|
||||
kobreli: calls $0.02
|
||||
meg100: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to kobreli [8c] [8s]
|
||||
Dealt to meg100 [7h] [As]
|
||||
Dealt to HIWAII2 [Kh] [6h]
|
||||
Dealt to s0rrow [9h 2s 7c] [6c]
|
||||
Dealt to SilkZone [6s] [9c]
|
||||
meg100: checks
|
||||
HIWAII2: checks
|
||||
s0rrow: checks
|
||||
SilkZone: checks
|
||||
kobreli: checks
|
||||
*** 5th STREET ***
|
||||
Dealt to kobreli [8c 8s] [3c]
|
||||
Dealt to meg100 [7h As] [5d]
|
||||
Dealt to HIWAII2 [Kh 6h] [3d]
|
||||
Dealt to s0rrow [9h 2s 7c 6c] [Qh]
|
||||
Dealt to SilkZone [6s 9c] [Qs]
|
||||
meg100: checks
|
||||
HIWAII2: bets $0.08
|
||||
s0rrow: calls $0.08
|
||||
SilkZone: folds
|
||||
kobreli: folds
|
||||
meg100: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to meg100 [7h As 5d] [5c]
|
||||
Dealt to HIWAII2 [Kh 6h 3d] [6d]
|
||||
Dealt to s0rrow [9h 2s 7c 6c Qh] [Ad]
|
||||
s0rrow: checks
|
||||
meg100: checks
|
||||
HIWAII2: checks
|
||||
*** RIVER ***
|
||||
Dealt to s0rrow [9h 2s 7c 6c Qh Ad] [Ac]
|
||||
s0rrow: bets $0.08
|
||||
meg100: folds
|
||||
HIWAII2: raises $0.08 to $0.16
|
||||
s0rrow: calls $0.08
|
||||
*** SHOW DOWN ***
|
||||
HIWAII2: shows [2h 8d Kh 6h 3d 6d 4h] (Lo: 8,6,4,3,2)
|
||||
s0rrow: mucks hand
|
||||
HIWAII2 collected $0.68 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.71 | Rake $0.03
|
||||
Seat 1: kobreli folded on the 5th Street
|
||||
Seat 5: meg100 folded on the River
|
||||
Seat 6: HIWAII2 showed [2h 8d Kh 6h 3d 6d 4h] and won ($0.68) with Lo: 8,6,4,3,2
|
||||
Seat 7: s0rrow mucked [9h 2s 7c 6c Qh Ad Ac]
|
||||
Seat 8: SilkZone folded on the 5th Street
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874664176: Razz Limit ($0.04/$0.08 USD) - 2009/11/26 10:27:26 ET
|
||||
Table 'Gotha II' 8-max
|
||||
Seat 1: kobreli ($1.24 in chips)
|
||||
Seat 3: manga130 ($0.68 in chips)
|
||||
Seat 5: meg100 ($1.38 in chips)
|
||||
Seat 6: HIWAII2 ($1.54 in chips)
|
||||
Seat 7: s0rrow ($1.63 in chips)
|
||||
Seat 8: SilkZone ($1.71 in chips)
|
||||
kobreli: posts the ante $0.01
|
||||
manga130: posts the ante $0.01
|
||||
meg100: posts the ante $0.01
|
||||
HIWAII2: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
SilkZone: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to kobreli [Kd]
|
||||
Dealt to manga130 [Td]
|
||||
Dealt to meg100 [Qh]
|
||||
Dealt to HIWAII2 [5h]
|
||||
Dealt to s0rrow [9s Qd 2s]
|
||||
Dealt to SilkZone [As]
|
||||
kobreli: brings in for $0.02
|
||||
manga130: folds
|
||||
meg100: folds
|
||||
HIWAII2: calls $0.02
|
||||
s0rrow: folds
|
||||
SilkZone: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to kobreli [Kd] [4s]
|
||||
Dealt to HIWAII2 [5h] [4h]
|
||||
Dealt to SilkZone [As] [Ah]
|
||||
HIWAII2: bets $0.04
|
||||
SilkZone: folds
|
||||
kobreli: folds
|
||||
Uncalled bet ($0.04) returned to HIWAII2
|
||||
HIWAII2 collected $0.12 from pot
|
||||
HIWAII2: shows [3d 3s 5h 4h] (Lo: 3,3,5,4)
|
||||
*** SUMMARY ***
|
||||
Total pot $0.12 | Rake $0
|
||||
Seat 1: kobreli folded on the 4th Street
|
||||
Seat 3: manga130 folded on the 3rd Street (didn't bet)
|
||||
Seat 5: meg100 folded on the 3rd Street (didn't bet)
|
||||
Seat 6: HIWAII2 collected ($0.12)
|
||||
Seat 7: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 8: SilkZone folded on the 4th Street
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874682808: Razz Limit ($0.04/$0.08 USD) - 2009/11/26 10:27:57 ET
|
||||
Table 'Gotha II' 8-max
|
||||
Seat 1: kobreli ($1.21 in chips)
|
||||
Seat 3: manga130 ($0.67 in chips)
|
||||
Seat 5: meg100 ($1.37 in chips)
|
||||
Seat 6: HIWAII2 ($1.63 in chips)
|
||||
Seat 7: s0rrow ($1.62 in chips)
|
||||
Seat 8: SilkZone ($1.68 in chips)
|
||||
kobreli: posts the ante $0.01
|
||||
manga130: posts the ante $0.01
|
||||
meg100: posts the ante $0.01
|
||||
HIWAII2: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
SilkZone: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to kobreli [Tc]
|
||||
Dealt to manga130 [Qd]
|
||||
Dealt to meg100 [9h]
|
||||
Dealt to HIWAII2 [5s]
|
||||
Dealt to s0rrow [7h 9c Th]
|
||||
Dealt to SilkZone [Kh]
|
||||
SilkZone: brings in for $0.02
|
||||
kobreli: folds
|
||||
manga130: calls $0.02
|
||||
meg100: calls $0.02
|
||||
HIWAII2: calls $0.02
|
||||
s0rrow: folds
|
||||
*** 4th STREET ***
|
||||
Dealt to manga130 [Qd] [8s]
|
||||
Dealt to meg100 [9h] [Kd]
|
||||
Dealt to HIWAII2 [5s] [6s]
|
||||
Dealt to SilkZone [Kh] [2d]
|
||||
HIWAII2: bets $0.04
|
||||
SilkZone: raises $0.04 to $0.08
|
||||
manga130: calls $0.08
|
||||
meg100: folds
|
||||
HIWAII2: calls $0.04
|
||||
*** 5th STREET ***
|
||||
Dealt to manga130 [Qd 8s] [3h]
|
||||
Dealt to HIWAII2 [5s 6s] [4s]
|
||||
Dealt to SilkZone [Kh 2d] [Js]
|
||||
HIWAII2: bets $0.08
|
||||
SilkZone: calls $0.08
|
||||
manga130: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to manga130 [Qd 8s 3h] [Ks]
|
||||
Dealt to HIWAII2 [5s 6s 4s] [Qs]
|
||||
Dealt to SilkZone [Kh 2d Js] [6c]
|
||||
HIWAII2: bets $0.08
|
||||
SilkZone: calls $0.08
|
||||
manga130: calls $0.08
|
||||
*** RIVER ***
|
||||
HIWAII2: bets $0.08
|
||||
SilkZone: raises $0.08 to $0.16
|
||||
manga130: folds
|
||||
HIWAII2: folds
|
||||
Uncalled bet ($0.08) returned to SilkZone
|
||||
SilkZone collected $0.98 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $1.02 | Rake $0.04
|
||||
Seat 1: kobreli folded on the 3rd Street (didn't bet)
|
||||
Seat 3: manga130 folded on the River
|
||||
Seat 5: meg100 folded on the 4th Street
|
||||
Seat 6: HIWAII2 folded on the River
|
||||
Seat 7: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 8: SilkZone collected ($0.98)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874721245: Razz Limit ($0.04/$0.08 USD) - 2009/11/26 10:29:02 ET
|
||||
Table 'Gotha II' 8-max
|
||||
Seat 1: kobreli ($1.20 in chips)
|
||||
Seat 3: manga130 ($0.40 in chips)
|
||||
Seat 5: meg100 ($1.34 in chips)
|
||||
Seat 6: HIWAII2 ($1.28 in chips)
|
||||
Seat 7: s0rrow ($1.61 in chips)
|
||||
Seat 8: SilkZone ($2.31 in chips)
|
||||
kobreli: posts the ante $0.01
|
||||
manga130: posts the ante $0.01
|
||||
meg100: posts the ante $0.01
|
||||
HIWAII2: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
SilkZone: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to kobreli [3d]
|
||||
Dealt to manga130 [Qc]
|
||||
Dealt to meg100 [Qd]
|
||||
Dealt to HIWAII2 [Js]
|
||||
Dealt to s0rrow [Th Ah Qh]
|
||||
Dealt to SilkZone [9d]
|
||||
s0rrow: brings in for $0.02
|
||||
SilkZone: calls $0.02
|
||||
kobreli: calls $0.02
|
||||
manga130: calls $0.02
|
||||
meg100: folds
|
||||
HIWAII2: folds
|
||||
*** 4th STREET ***
|
||||
Dealt to kobreli [3d] [Ad]
|
||||
Dealt to manga130 [Qc] [6d]
|
||||
Dealt to s0rrow [Th Ah Qh] [8s]
|
||||
Dealt to SilkZone [9d] [7c]
|
||||
kobreli: bets $0.04
|
||||
manga130: folds
|
||||
s0rrow: folds
|
||||
SilkZone: raises $0.04 to $0.08
|
||||
kobreli: raises $0.04 to $0.12
|
||||
SilkZone: calls $0.04
|
||||
*** 5th STREET ***
|
||||
Dealt to kobreli [3d Ad] [Ac]
|
||||
Dealt to SilkZone [9d 7c] [Ts]
|
||||
SilkZone: checks
|
||||
kobreli: bets $0.08
|
||||
SilkZone: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to kobreli [3d Ad Ac] [Kh]
|
||||
Dealt to SilkZone [9d 7c Ts] [5s]
|
||||
SilkZone: bets $0.08
|
||||
kobreli: calls $0.08
|
||||
*** RIVER ***
|
||||
SilkZone: checks
|
||||
kobreli: checks
|
||||
*** SHOW DOWN ***
|
||||
kobreli: shows [6h 8h 3d Ad Ac Kh 8c] (Lo: K,8,6,3,A)
|
||||
SilkZone: shows [2d 4s 9d 7c Ts 5s Tc] (Lo: 9,7,5,4,2)
|
||||
SilkZone collected $0.67 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.70 | Rake $0.03
|
||||
Seat 1: kobreli showed [6h 8h 3d Ad Ac Kh 8c] and lost with Lo: K,8,6,3,A
|
||||
Seat 3: manga130 folded on the 4th Street
|
||||
Seat 5: meg100 folded on the 3rd Street (didn't bet)
|
||||
Seat 6: HIWAII2 folded on the 3rd Street (didn't bet)
|
||||
Seat 7: s0rrow folded on the 4th Street
|
||||
Seat 8: SilkZone showed [2d 4s 9d 7c Ts 5s Tc] and won ($0.67) with Lo: 9,7,5,4,2
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874756552: Razz Limit ($0.04/$0.08 USD) - 2009/11/26 10:30:02 ET
|
||||
Table 'Gotha II' 8-max
|
||||
Seat 1: kobreli ($0.89 in chips)
|
||||
Seat 3: manga130 ($0.37 in chips)
|
||||
Seat 5: meg100 ($1.33 in chips)
|
||||
Seat 6: HIWAII2 ($1.27 in chips)
|
||||
Seat 7: s0rrow ($1.58 in chips)
|
||||
Seat 8: SilkZone ($2.67 in chips)
|
||||
kobreli: posts the ante $0.01
|
||||
manga130: posts the ante $0.01
|
||||
meg100: posts the ante $0.01
|
||||
HIWAII2: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
SilkZone: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to kobreli [4s]
|
||||
Dealt to manga130 [5h]
|
||||
Dealt to meg100 [3h]
|
||||
Dealt to HIWAII2 [Qh]
|
||||
Dealt to s0rrow [Kd Ad 7d]
|
||||
Dealt to SilkZone [9d]
|
||||
kobreli said, "this.is.lucky"
|
||||
HIWAII2: brings in for $0.02
|
||||
s0rrow: folds
|
||||
SilkZone: folds
|
||||
kobreli: calls $0.02
|
||||
manga130: folds
|
||||
meg100: calls $0.02
|
||||
*** 4th STREET ***
|
||||
Dealt to kobreli [4s] [Tc]
|
||||
Dealt to meg100 [3h] [2s]
|
||||
Dealt to HIWAII2 [Qh] [7s]
|
||||
meg100: bets $0.04
|
||||
HIWAII2: folds
|
||||
kobreli: calls $0.04
|
||||
*** 5th STREET ***
|
||||
Dealt to kobreli [4s Tc] [8d]
|
||||
Dealt to meg100 [3h 2s] [Jh]
|
||||
kobreli: bets $0.08
|
||||
meg100: folds
|
||||
Uncalled bet ($0.08) returned to kobreli
|
||||
kobreli collected $0.19 from pot
|
||||
kobreli: doesn't show hand
|
||||
*** SUMMARY ***
|
||||
Total pot $0.20 | Rake $0.01
|
||||
Seat 1: kobreli collected ($0.19)
|
||||
Seat 3: manga130 folded on the 3rd Street (didn't bet)
|
||||
Seat 5: meg100 folded on the 5th Street
|
||||
Seat 6: HIWAII2 folded on the 4th Street
|
||||
Seat 7: s0rrow folded on the 3rd Street (didn't bet)
|
||||
Seat 8: SilkZone folded on the 3rd Street (didn't bet)
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874780027: Razz Limit ($0.04/$0.08 USD) - 2009/11/26 10:30:41 ET
|
||||
Table 'Gotha II' 8-max
|
||||
Seat 1: kobreli ($1.01 in chips)
|
||||
Seat 3: manga130 ($0.36 in chips)
|
||||
Seat 5: meg100 ($1.26 in chips)
|
||||
Seat 6: HIWAII2 ($1.24 in chips)
|
||||
Seat 7: s0rrow ($1.57 in chips)
|
||||
Seat 8: SilkZone ($2.66 in chips)
|
||||
kobreli: posts the ante $0.01
|
||||
manga130: posts the ante $0.01
|
||||
meg100: posts the ante $0.01
|
||||
HIWAII2: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
SilkZone: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to kobreli [6s]
|
||||
Dealt to manga130 [9d]
|
||||
Dealt to meg100 [5c]
|
||||
Dealt to HIWAII2 [Qs]
|
||||
Dealt to s0rrow [6d 9c 3d]
|
||||
Dealt to SilkZone [Qc]
|
||||
HIWAII2: brings in for $0.02
|
||||
s0rrow: raises $0.02 to $0.04
|
||||
SilkZone: calls $0.04
|
||||
kobreli: calls $0.04
|
||||
manga130: folds
|
||||
meg100: calls $0.04
|
||||
HIWAII2: folds
|
||||
*** 4th STREET ***
|
||||
Dealt to kobreli [6s] [7h]
|
||||
Dealt to meg100 [5c] [5h]
|
||||
Dealt to s0rrow [6d 9c 3d] [8s]
|
||||
Dealt to SilkZone [Qc] [2c]
|
||||
kobreli: bets $0.04
|
||||
meg100: folds
|
||||
s0rrow: raises $0.04 to $0.08
|
||||
SilkZone: raises $0.04 to $0.12
|
||||
kobreli: calls $0.08
|
||||
s0rrow: calls $0.04
|
||||
*** 5th STREET ***
|
||||
Dealt to kobreli [6s 7h] [2h]
|
||||
Dealt to s0rrow [6d 9c 3d 8s] [Jh]
|
||||
Dealt to SilkZone [Qc 2c] [7c]
|
||||
kobreli: bets $0.08
|
||||
s0rrow: folds
|
||||
SilkZone: calls $0.08
|
||||
*** 6th STREET ***
|
||||
Dealt to kobreli [6s 7h 2h] [3h]
|
||||
Dealt to SilkZone [Qc 2c 7c] [Kd]
|
||||
kobreli: bets $0.08
|
||||
SilkZone: calls $0.08
|
||||
*** RIVER ***
|
||||
kobreli: bets $0.08
|
||||
SilkZone: raises $0.08 to $0.16
|
||||
kobreli: raises $0.08 to $0.24
|
||||
SilkZone: raises $0.08 to $0.32
|
||||
Betting is capped
|
||||
kobreli: calls $0.08
|
||||
*** SHOW DOWN ***
|
||||
SilkZone: shows [3s 5d Qc 2c 7c Kd As] (Lo: 7,5,3,2,A)
|
||||
kobreli: shows [Ac Qd 6s 7h 2h 3h 4c] (Lo: 6,4,3,2,A)
|
||||
kobreli collected $1.49 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $1.56 | Rake $0.07
|
||||
Seat 1: kobreli showed [Ac Qd 6s 7h 2h 3h 4c] and won ($1.49) with Lo: 6,4,3,2,A
|
||||
Seat 3: manga130 folded on the 3rd Street (didn't bet)
|
||||
Seat 5: meg100 folded on the 4th Street
|
||||
Seat 6: HIWAII2 folded on the 3rd Street
|
||||
Seat 7: s0rrow folded on the 5th Street
|
||||
Seat 8: SilkZone showed [3s 5d Qc 2c 7c Kd As] and lost with Lo: 7,5,3,2,A
|
||||
|
||||
|
||||
|
||||
PokerStars Game #35874817957: Razz Limit ($0.04/$0.08 USD) - 2009/11/26 10:31:45 ET
|
||||
Table 'Gotha II' 8-max
|
||||
Seat 1: kobreli ($1.85 in chips)
|
||||
Seat 3: manga130 ($0.35 in chips)
|
||||
Seat 5: meg100 ($1.21 in chips)
|
||||
Seat 6: HIWAII2 ($1.21 in chips)
|
||||
Seat 7: s0rrow ($1.40 in chips)
|
||||
Seat 8: SilkZone ($2.01 in chips)
|
||||
kobreli: posts the ante $0.01
|
||||
manga130: posts the ante $0.01
|
||||
meg100: posts the ante $0.01
|
||||
HIWAII2: posts the ante $0.01
|
||||
s0rrow: posts the ante $0.01
|
||||
SilkZone: posts the ante $0.01
|
||||
*** 3rd STREET ***
|
||||
Dealt to kobreli [As]
|
||||
Dealt to manga130 [Ac]
|
||||
Dealt to meg100 [Ah]
|
||||
Dealt to HIWAII2 [Jd]
|
||||
Dealt to s0rrow [6d 4h 3h]
|
||||
Dealt to SilkZone [2c]
|
||||
HIWAII2: brings in for $0.02
|
||||
s0rrow: calls $0.02
|
||||
SilkZone: calls $0.02
|
||||
kobreli: calls $0.02
|
||||
manga130: calls $0.02
|
||||
meg100: folds
|
||||
*** 4th STREET ***
|
||||
Dealt to kobreli [As] [6s]
|
||||
Dealt to manga130 [Ac] [6h]
|
||||
Dealt to HIWAII2 [Jd] [Qc]
|
||||
Dealt to s0rrow [6d 4h 3h] [3c]
|
||||
Dealt to SilkZone [2c] [Th]
|
||||
kobreli: bets $0.04
|
||||
manga130: calls $0.04
|
||||
HIWAII2: folds
|
||||
s0rrow: calls $0.04
|
||||
SilkZone: folds
|
||||
*** 5th STREET ***
|
||||
Dealt to kobreli [As 6s] [5c]
|
||||
Dealt to manga130 [Ac 6h] [5s]
|
||||
Dealt to s0rrow [6d 4h 3h 3c] [9s]
|
||||
kobreli: bets $0.08
|
||||
manga130: calls $0.08
|
||||
s0rrow: folds
|
||||
*** 6th STREET ***
|
||||
Dealt to kobreli [As 6s 5c] [5d]
|
||||
Dealt to manga130 [Ac 6h 5s] [9h]
|
||||
manga130: bets $0.08
|
||||
kobreli: raises $0.08 to $0.16
|
||||
manga130: calls $0.08
|
||||
*** RIVER ***
|
||||
manga130: bets $0.04 and is all-in
|
||||
kobreli: calls $0.04
|
||||
*** SHOW DOWN ***
|
||||
manga130: shows [Ad 8h Ac 6h 5s 9h Kh] (Lo: 9,8,6,5,A)
|
||||
kobreli: shows [3d 2s As 6s 5c 5d 2d] (Lo: 6,5,3,2,A)
|
||||
kobreli collected $0.80 from pot
|
||||
*** SUMMARY ***
|
||||
Total pot $0.84 | Rake $0.04
|
||||
Seat 1: kobreli showed [3d 2s As 6s 5c 5d 2d] and won ($0.80) with Lo: 6,5,3,2,A
|
||||
Seat 3: manga130 showed [Ad 8h Ac 6h 5s 9h Kh] and lost with Lo: 9,8,6,5,A
|
||||
Seat 5: meg100 folded on the 3rd Street (didn't bet)
|
||||
Seat 6: HIWAII2 folded on the 4th Street
|
||||
Seat 7: s0rrow folded on the 5th Street
|
||||
Seat 8: SilkZone folded on the 4th Street
|
||||
|
||||
|
||||
|
17390
pyfpdb/regression-test-files/tour/Stars/Flop/NLHE-USD-MTT-5r-200710.txt
Normal file
17390
pyfpdb/regression-test-files/tour/Stars/Flop/NLHE-USD-MTT-5r-200710.txt
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -64,5 +64,4 @@ def testSQLiteModFunction():
|
|||
assert vars[idx]%13 == int(i[0])
|
||||
idx = idx+1
|
||||
|
||||
assert 0 == 1
|
||||
cur.execute("DROP TABLE test")
|
||||
|
|
|
@ -3,6 +3,19 @@ import PokerStarsToFpdb
|
|||
from Hand import *
|
||||
import py
|
||||
|
||||
import Configuration
|
||||
import Database
|
||||
import fpdb_import
|
||||
|
||||
config = Configuration.Config(file = "HUD_config.test.xml")
|
||||
db = Database.Database(config)
|
||||
|
||||
settings = {}
|
||||
settings.update(config.get_db_parameters())
|
||||
settings.update(config.get_tv_parameters())
|
||||
settings.update(config.get_import_parameters())
|
||||
settings.update(config.get_default_paths())
|
||||
|
||||
#regression-test-files/stars/badugi/ring-fl-badugi.txt
|
||||
# s0rrow: input: $30.00 end: $22.65 total: ($7.35)
|
||||
#regression-test-files/stars/plo/PLO-6max.txt
|
||||
|
@ -45,37 +58,53 @@ def testGameInfo():
|
|||
yield checkGameInfo, hhc, header, info
|
||||
|
||||
|
||||
def testHandInfo():
|
||||
text = u"""PokerStars Game #20461877044: Hold'em No Limit ($1/$2) - 2008/09/16 18:58:01 ET"""
|
||||
hhc = PokerStarsToFpdb.PokerStars(autostart=False)
|
||||
h = HoldemOmahaHand(None, "PokerStars", gametype, text, builtFrom = "Test")
|
||||
hhc.readHandInfo(h)
|
||||
assert h.handid == '20461877044'
|
||||
assert h.sitename == 'PokerStars'
|
||||
assert h.starttime == (2008, 9, 16, 18, 58, 1, 1, 260, -1)
|
||||
|
||||
text = u"""PokerStars Game #18707234955: Razz Limit ($0.50/$1.00) - 2008/07/09 - 21:41:43 (ET)
|
||||
Table 'Lepus II' 8-max"""
|
||||
hhc = PokerStarsToFpdb.PokerStars(autostart=False)
|
||||
h = HoldemOmahaHand(None, "PokerStars", gametype, text, builtFrom = "Test")
|
||||
hhc.readHandInfo(h)
|
||||
assert h.handid == '18707234955'
|
||||
assert h.sitename == 'PokerStars'
|
||||
assert h.maxseats == 8
|
||||
assert h.tablename == 'Lepus II'
|
||||
assert h.starttime == (2008,7 , 9, 21, 41, 43, 2, 191, -1)
|
||||
|
||||
|
||||
text = u"""PokerStars Game #22073591924: Hold'em No Limit ($0.50/$1.00) - 2008/11/16 1:22:21 CET [2008/11/15 19:22:21 ET]
|
||||
Table 'Caia II' 6-max Seat #2 is the button"""
|
||||
hhc = PokerStarsToFpdb.PokerStars(autostart=False)
|
||||
h = HoldemOmahaHand(None, "PokerStars", gametype, text, builtFrom = "Test")
|
||||
hhc.readHandInfo(h)
|
||||
assert h.handid == '22073591924'
|
||||
assert h.sitename == 'PokerStars'
|
||||
assert h.maxseats == 6
|
||||
assert h.tablename == 'Caia II'
|
||||
assert h.buttonpos == '2' # TODO: should this be an int?
|
||||
assert h.starttime == (2008,11 , 15, 19, 22, 21, 5, 320, -1)
|
||||
|
||||
|
||||
def testFlopImport():
|
||||
db.recreate_tables()
|
||||
importer = fpdb_import.Importer(False, settings, config)
|
||||
importer.setDropIndexes("don't drop")
|
||||
importer.setFailOnError(True)
|
||||
importer.setThreads(-1)
|
||||
importer.addBulkImportImportFileOrDir(
|
||||
"""regression-test-files/cash/Stars/Flop/NLHE-6max-EUR-0.05-0.10-200911.txt""", site="PokerStars")
|
||||
importer.addBulkImportImportFileOrDir(
|
||||
"""regression-test-files/cash/Stars/Flop/NLHE-6max-USD-0.05-0.10-200911.txt""", site="PokerStars")
|
||||
#importer.addBulkImportImportFileOrDir(
|
||||
# """regression-test-files/tour/Stars/Flop/NLHE-USD-MTT-5r-200710.txt""", site="PokerStars")
|
||||
importer.addBulkImportImportFileOrDir(
|
||||
"""regression-test-files/cash/Stars/Flop/PLO8-6max-USD-0.01-0.02-200911.txt""", site="PokerStars")
|
||||
importer.setCallHud(False)
|
||||
(stored, dups, partial, errs, ttime) = importer.runImport()
|
||||
importer.clearFileList()
|
||||
|
||||
# Should actually do some testing here
|
||||
assert 1 == 1
|
||||
|
||||
def testStudImport():
|
||||
db.recreate_tables()
|
||||
importer = fpdb_import.Importer(False, settings, config)
|
||||
importer.setDropIndexes("don't drop")
|
||||
importer.setFailOnError(True)
|
||||
importer.setThreads(-1)
|
||||
importer.addBulkImportImportFileOrDir(
|
||||
"""regression-test-files/cash/Stars/Stud/7-Stud-USD-0.04-0.08-200911.txt""", site="PokerStars")
|
||||
importer.addBulkImportImportFileOrDir(
|
||||
"""regression-test-files/cash/Stars/Stud/7-StudHL-USD-0.04-0.08-200911.txt""", site="PokerStars")
|
||||
importer.addBulkImportImportFileOrDir(
|
||||
"""regression-test-files/cash/Stars/Stud/Razz-USD-0.04-0.08-200911.txt""", site="PokerStars")
|
||||
importer.setCallHud(False)
|
||||
(stored, dups, partial, errs, ttime) = importer.runImport()
|
||||
importer.clearFileList()
|
||||
|
||||
def testDrawImport():
|
||||
db.recreate_tables()
|
||||
importer = fpdb_import.Importer(False, settings, config)
|
||||
importer.setDropIndexes("don't drop")
|
||||
importer.setFailOnError(True)
|
||||
importer.setThreads(-1)
|
||||
importer.addBulkImportImportFileOrDir(
|
||||
"""regression-test-files/cash/Stars/Draw/3-Draw-Limit-USD-0.10-0.20-200911.txt""", site="PokerStars")
|
||||
importer.addBulkImportImportFileOrDir(
|
||||
"""regression-test-files/cash/Stars/Draw/5-Carddraw-USD-0.10-0.20-200911.txt""", site="PokerStars")
|
||||
importer.setCallHud(False)
|
||||
(stored, dups, partial, errs, ttime) = importer.runImport()
|
||||
importer.clearFileList()
|
||||
|
|
Loading…
Reference in New Issue
Block a user