add user index
This commit is contained in:
+55
-4
@@ -7,6 +7,8 @@ import re
|
||||
import sqlite3
|
||||
from typing import Any, Dict, Iterable, List, Optional
|
||||
|
||||
import mm_users
|
||||
|
||||
|
||||
def iter_result_files(root: str) -> Iterable[str]:
|
||||
for dirpath, _dirnames, filenames in os.walk(root):
|
||||
@@ -102,7 +104,7 @@ def search_index(
|
||||
JOIN posts_fts fts ON fts.post_id = p.post_id
|
||||
WHERE fts.message MATCH ?
|
||||
{where_filters}
|
||||
ORDER BY p.created ASC
|
||||
ORDER BY p.created DESC
|
||||
"""
|
||||
params = [fts_q] + params
|
||||
else:
|
||||
@@ -115,7 +117,7 @@ def search_index(
|
||||
FROM posts p
|
||||
WHERE {cmp_col} LIKE ?
|
||||
{where_filters}
|
||||
ORDER BY p.created ASC
|
||||
ORDER BY p.created DESC
|
||||
"""
|
||||
params = [f"%{needle}%"] + params
|
||||
|
||||
@@ -218,7 +220,7 @@ def search_attachments_index(
|
||||
JOIN posts p ON p.post_id = a.post_id
|
||||
WHERE aft.{fts_column} MATCH ?
|
||||
{where_filters}
|
||||
ORDER BY p.created ASC
|
||||
ORDER BY p.created DESC
|
||||
"""
|
||||
|
||||
params = [fts_q] + params
|
||||
@@ -359,7 +361,7 @@ def main(argv: Optional[List[str]] = None) -> int:
|
||||
ap = argparse.ArgumentParser(
|
||||
description="Search through Mattermost export JSON files produced by mattermost-dl.py.",
|
||||
)
|
||||
ap.add_argument("query", help="Search string or regex (see --regex).")
|
||||
ap.add_argument("query", nargs="?", help="Search string or regex (see --regex).")
|
||||
ap.add_argument(
|
||||
"-r",
|
||||
"--root",
|
||||
@@ -407,9 +409,58 @@ def main(argv: Optional[List[str]] = None) -> int:
|
||||
action="store_true",
|
||||
help="Include source filename and per-file index in human output.",
|
||||
)
|
||||
user_group = ap.add_mutually_exclusive_group()
|
||||
user_group.add_argument(
|
||||
"--resolve-user",
|
||||
metavar="REF",
|
||||
help="Resolve display name / FIO / nickname to username (uses sqlite user directory).",
|
||||
)
|
||||
user_group.add_argument(
|
||||
"--search-users",
|
||||
metavar="QUERY",
|
||||
help="Search users by name or username substring.",
|
||||
)
|
||||
ap.add_argument(
|
||||
"--refresh-users",
|
||||
action="store_true",
|
||||
help="Refresh user directory from users.json, optional API, and post usernames.",
|
||||
)
|
||||
ap.add_argument(
|
||||
"--from-api",
|
||||
action="store_true",
|
||||
help="With --refresh-users, also fetch profiles from Mattermost API (config.json).",
|
||||
)
|
||||
ap.add_argument(
|
||||
"--config",
|
||||
default=os.environ.get("MM_CONFIG_PATH", "config.json"),
|
||||
help="Mattermost config path for --from-api (default: MM_CONFIG_PATH or config.json).",
|
||||
)
|
||||
|
||||
args = ap.parse_args(argv)
|
||||
|
||||
if args.refresh_users:
|
||||
result = mm_users.refresh_user_directory(
|
||||
args.db,
|
||||
args.root,
|
||||
config_path=args.config,
|
||||
from_api=args.from_api,
|
||||
)
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
return 0
|
||||
|
||||
if args.resolve_user:
|
||||
result = mm_users.resolve_user(args.db, args.resolve_user)
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
return 0
|
||||
|
||||
if args.search_users:
|
||||
matches = mm_users.search_users(args.db, args.search_users, limit=args.limit or 10)
|
||||
print(json.dumps(matches, ensure_ascii=False, indent=2))
|
||||
return 0
|
||||
|
||||
if not args.query:
|
||||
ap.error("query is required unless using --resolve-user, --search-users, or --refresh-users")
|
||||
|
||||
# Default ignore-case for non-regex search unless explicitly disabled
|
||||
ignore_case = args.ignore_case or not args.regex
|
||||
matcher = make_matcher(args.query, args.regex, ignore_case)
|
||||
|
||||
Reference in New Issue
Block a user