show live message preview during migration

This commit is contained in:
rambros 2026-03-03 23:56:28 +05:30
parent 5738e4dd00
commit ad2dca7f0a
3 changed files with 25 additions and 2 deletions

View file

@ -98,7 +98,13 @@ async def analyze_migration(context: MigrationContext, source_channel_id: int, a
async def migrate_messages(context: MigrationContext, source_channel_id: int, target_channel_id: str, after_message_id: int | None = None, progress_callback: Callable[[Dict[str, Any]], Awaitable[None]] | None = None) -> Dict[str, Any]: async def migrate_messages(context: MigrationContext, source_channel_id: int, target_channel_id: str, after_message_id: int | None = None, progress_callback: Callable[[Dict[str, Any]], Awaitable[None]] | None = None) -> Dict[str, Any]:
"""Migrate messages for a specific channel and returns detailed statistics.""" """Migrate messages for a specific channel and returns detailed statistics."""
stats = {"messages": 0, "threads": 0, "attachments": 0} stats = {
"messages": 0,
"threads": 0,
"attachments": 0,
"last_message_content": "",
"last_message_author": ""
}
logger.info(f"Starting message migration: Discord #{source_channel_id} -> Fluxer #{target_channel_id}") logger.info(f"Starting message migration: Discord #{source_channel_id} -> Fluxer #{target_channel_id}")
if after_message_id: if after_message_id:
@ -211,6 +217,8 @@ async def migrate_messages(context: MigrationContext, source_channel_id: int, ta
context.state.update_last_message_timestamp(target_channel_id, str(msg.created_at)) context.state.update_last_message_timestamp(target_channel_id, str(msg.created_at))
context.state.update_last_message_id(target_channel_id, str(msg.id)) context.state.update_last_message_id(target_channel_id, str(msg.id))
stats["messages"] += 1 stats["messages"] += 1
stats["last_message_content"] = content
stats["last_message_author"] = msg.author.display_name
context.state.increment_stats(target_channel_id, messages=1, files=len(files) if files else 0) context.state.increment_stats(target_channel_id, messages=1, files=len(files) if files else 0)
# Periodic log # Periodic log

View file

@ -108,7 +108,9 @@ async def migrate_messages(context: MigrationContext, source_channel_id: int, ta
"threads": 0, "threads": 0,
"attachments": 0, "attachments": 0,
"first_message_url": "", "first_message_url": "",
"last_message_url": "" "last_message_url": "",
"last_message_content": "",
"last_message_author": ""
} }
logger.info(f"Starting message migration: Discord #{source_channel_id} -> Stoat #{target_channel_id}") logger.info(f"Starting message migration: Discord #{source_channel_id} -> Stoat #{target_channel_id}")
@ -220,6 +222,8 @@ async def migrate_messages(context: MigrationContext, source_channel_id: int, ta
context.state.update_last_message_timestamp(target_channel_id, str(msg.created_at)) context.state.update_last_message_timestamp(target_channel_id, str(msg.created_at))
context.state.update_last_message_id(target_channel_id, str(msg.id)) context.state.update_last_message_id(target_channel_id, str(msg.id))
stats["messages"] += 1 stats["messages"] += 1
stats["last_message_content"] = content
stats["last_message_author"] = msg.author.display_name
context.state.increment_stats(target_channel_id, messages=1, files=len(files) if files else 0) context.state.increment_stats(target_channel_id, messages=1, files=len(files) if files else 0)
# Periodic log # Periodic log

View file

@ -790,6 +790,10 @@ class ShuttlePane(Container):
total_threads = stats_analysis["threads"] total_threads = stats_analysis["threads"]
total_attachments = stats_analysis["attachments"] total_attachments = stats_analysis["attachments"]
modal.set_status(f"Migrating: [cyan]#{source_channel.name}[/cyan] → [green]#{target_channel.get('name')}[/green]")
modal.write(f"[bold cyan]Migration Started:[/bold cyan] Discord [cyan]#{source_channel.name}[/cyan] → {platform_name} [green]#{target_channel.get('name')}[/green]")
modal.write(f"[dim]Stats: {total_messages} messages, {total_threads} threads, {total_attachments} files[/dim]\n")
logger.info(f"Execution started for #{source_channel.name} -> {platform_name} @ {target_channel.get('name')}") logger.info(f"Execution started for #{source_channel.name} -> {platform_name} @ {target_channel.get('name')}")
self.engine.is_running = True self.engine.is_running = True
@ -810,6 +814,13 @@ class ShuttlePane(Container):
# optionally show a scrolling trace if the backend provided it # optionally show a scrolling trace if the backend provided it
modal.write_live(f"Migrated message #{c_msgs}") modal.write_live(f"Migrated message #{c_msgs}")
content = current_stats.get("last_message_content", "")
author = current_stats.get("last_message_author", "Unknown")
if content:
# Clean up content for display (truncate long messages)
disp_content = (content[:100] + '...') if len(content) > 100 else content
modal.write(f"[bold]{author}:[/bold] {disp_content}")
result = await migrate_mod.migrate_messages( result = await migrate_mod.migrate_messages(
self.engine, self.engine,
source_channel_id=source_channel.id, source_channel_id=source_channel.id,