185 'minutes': int(parts[1]), |
185 'minutes': int(parts[1]), |
186 'seconds': int(parts[2]) if len(parts)>2 else 0 |
186 'seconds': int(parts[2]) if len(parts)>2 else 0 |
187 } |
187 } |
188 return int(round(datetime.timedelta(**time_params).total_seconds()*1000)) |
188 return int(round(datetime.timedelta(**time_params).total_seconds()*1000)) |
189 |
189 |
190 CHAT_REGEXP = re.compile(r"^(?P<created_at>\d{2}:\d{2}:\d{2})\t\sFrom\s{2}(?P<user>.+?)\s:\s(?P<text>.*)$", re.DOTALL) |
190 # CHAT_REGEXP = re.compile(r"^(?P<created_at>\d{2}:\d{2}:\d{2})\t\sFrom\s{2}(?P<user>.+?)\s:\s(?P<text>.*)$", re.DOTALL) |
191 CHAT_LINE_REGEXP = re.compile(r"^\d{2}:\d{2}:\d{2}\t\sFrom\s{2}.+?\s:") |
191 CHAT_REGEXP = re.compile(r"^(?P<created_at>\d{2}:\d{2}:\d{2})\t(?:(?:\sFrom\s{2}(?P<user_from>.+?)\s)|(?P<user>[^:]+)):\s(?P<text>.*)$", re.DOTALL) |
|
192 CHAT_LINE_REGEXP = re.compile(r"^\d{2}:\d{2}:\d{2}\t(?:(?:\sFrom\s{2}.+?\s)|(?:[^:]+)):") |
192 CHAT_DM_REGEXP = re.compile(r"\(Direct Message\)", re.IGNORECASE) |
193 CHAT_DM_REGEXP = re.compile(r"\(Direct Message\)", re.IGNORECASE) |
193 |
194 |
194 def parse_chat_line(chat_id, chat_line): |
195 def parse_chat_line(chat_id, chat_line): |
195 if (m := CHAT_REGEXP.match(chat_line)) is not None: |
196 if (m := CHAT_REGEXP.match(chat_line)) is not None: |
196 res = {k: v.replace('\r','\n') if k == 'text' else v for k,v in m.groupdict().items()} |
197 res = {k: v.replace('\r','\n') if k == 'text' else v for k,v in m.groupdict().items()} |
197 res['id'] = chat_id |
198 res['id'] = chat_id |
|
199 if user_str := res.get('user_from'): |
|
200 res['user'] = user_str |
198 res['tags'] = re.findall('#(\w+)',res['text']) |
201 res['tags'] = re.findall('#(\w+)',res['text']) |
199 return res |
202 return res |
200 else: |
203 else: |
201 return {} |
204 return {} |
202 |
205 |
462 |
465 |
463 chat_content_lines = read_chat_file(options.database.strip()) |
466 chat_content_lines = read_chat_file(options.database.strip()) |
464 for i,chat_line in enumerate(chat_content_lines): |
467 for i,chat_line in enumerate(chat_content_lines): |
465 |
468 |
466 cht = parse_chat_line("%04d" % (i+1) ,chat_line.strip()) |
469 cht = parse_chat_line("%04d" % (i+1) ,chat_line.strip()) |
467 |
|
468 #TODO parse chat line |
470 #TODO parse chat line |
469 cht_ts_dt = cht['created_at'] |
471 cht_ts_dt = cht['created_at'] |
470 default_date = start_date or datetime.now() |
472 default_date = start_date or datetime.now() |
471 cht_ts = parse_date(cht_ts_dt, item_tz, default_date.replace(tzinfo=item_tz)) |
473 cht_ts = parse_date(cht_ts_dt, item_tz, default_date.replace(tzinfo=item_tz)) |
472 if start_date is None: |
474 if start_date is None: |