try indexer fix
This commit is contained in:
parent
93adfa6d27
commit
6e4893f59d
|
|
@ -61,48 +61,79 @@ async def indexer_loop(memory, platform_found: bool, seqno: int) -> [bool, int]:
|
||||||
)
|
)
|
||||||
))).scalars().all()
|
))).scalars().all()
|
||||||
for new_license in new_licenses:
|
for new_license in new_licenses:
|
||||||
licensed_content = (await session.execute(select(StoredContent).where(
|
try:
|
||||||
StoredContent.id == new_license.content_id
|
licensed_content = (await session.execute(select(StoredContent).where(
|
||||||
))).scalars().first()
|
StoredContent.id == new_license.content_id
|
||||||
if not licensed_content:
|
))).scalars().first()
|
||||||
make_log("Indexer", f"Licensed content not found: {new_license.content_id}", level="error")
|
if not licensed_content:
|
||||||
|
make_log("Indexer", f"Licensed content not found: {new_license.content_id}", level="error")
|
||||||
|
new_license.meta = {**(new_license.meta or {}), 'notification_sent': True, 'notification_error': 'content_not_found'}
|
||||||
|
await session.commit()
|
||||||
|
continue
|
||||||
|
|
||||||
content_metadata = await licensed_content.metadata_json_async(session)
|
|
||||||
assert content_metadata, "No content metadata found"
|
|
||||||
|
|
||||||
if not (licensed_content.owner_address == new_license.owner_address):
|
|
||||||
try:
|
try:
|
||||||
user = await session.get(User, new_license.user_id)
|
content_metadata = await licensed_content.metadata_json_async(session)
|
||||||
if user.telegram_id and licensed_content:
|
|
||||||
await (Wrapped_CBotChat(memory._client_telegram_bot, chat_id=user.telegram_id, user=user, db_session=session)).send_content(
|
|
||||||
session, licensed_content
|
|
||||||
)
|
|
||||||
|
|
||||||
wallet_owner_connection = (await session.execute(
|
|
||||||
select(WalletConnection).where(
|
|
||||||
WalletConnection.wallet_address == licensed_content.owner_address,
|
|
||||||
WalletConnection.invalidated == False
|
|
||||||
).order_by(desc(WalletConnection.id))
|
|
||||||
)).scalars().first()
|
|
||||||
wallet_owner_user = await session.get(User, wallet_owner_connection.user_id) if wallet_owner_connection else None
|
|
||||||
if wallet_owner_user.telegram_id:
|
|
||||||
wallet_owner_bot = Wrapped_CBotChat(memory._telegram_bot, chat_id=wallet_owner_user.telegram_id, user=wallet_owner_user, db_session=session)
|
|
||||||
meta_title = content_metadata.get('title') or content_metadata.get('name') or 'Unknown'
|
|
||||||
meta_artist = content_metadata.get('artist')
|
|
||||||
formatted_title = f"{meta_artist} – {meta_title}" if meta_artist else meta_title
|
|
||||||
await wallet_owner_bot.send_message(
|
|
||||||
user.translated('p_licenseWasBought').format(
|
|
||||||
username=user.front_format(),
|
|
||||||
nft_address=f'"https://tonviewer.com/{new_license.onchain_address}"',
|
|
||||||
content_title=formatted_title,
|
|
||||||
),
|
|
||||||
message_type='notification',
|
|
||||||
)
|
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
make_log("IndexerSendNewLicense", f"Error: {e}" + '\n' + traceback.format_exc(), level="error")
|
make_log("Indexer", f"Metadata fetch failed for content_id={licensed_content.id}: {e}", level="warning")
|
||||||
|
content_metadata = None
|
||||||
|
|
||||||
new_license.meta = {**new_license.meta, 'notification_sent': True}
|
# Metadata is best-effort here: it should never block indexer loop progress.
|
||||||
await session.commit()
|
if not content_metadata:
|
||||||
|
content_metadata = {
|
||||||
|
'name': licensed_content.meta.get('title') or licensed_content.filename or 'Unknown',
|
||||||
|
'artist': licensed_content.meta.get('artist'),
|
||||||
|
'title': licensed_content.meta.get('title'),
|
||||||
|
}
|
||||||
|
|
||||||
|
if not (licensed_content.owner_address == new_license.owner_address):
|
||||||
|
try:
|
||||||
|
user = await session.get(User, new_license.user_id)
|
||||||
|
if user and user.telegram_id:
|
||||||
|
await (
|
||||||
|
Wrapped_CBotChat(
|
||||||
|
memory._client_telegram_bot,
|
||||||
|
chat_id=user.telegram_id,
|
||||||
|
user=user,
|
||||||
|
db_session=session,
|
||||||
|
)
|
||||||
|
).send_content(session, licensed_content)
|
||||||
|
|
||||||
|
wallet_owner_connection = (await session.execute(
|
||||||
|
select(WalletConnection).where(
|
||||||
|
WalletConnection.wallet_address == licensed_content.owner_address,
|
||||||
|
WalletConnection.invalidated == False
|
||||||
|
).order_by(desc(WalletConnection.id))
|
||||||
|
)).scalars().first()
|
||||||
|
wallet_owner_user = await session.get(User, wallet_owner_connection.user_id) if wallet_owner_connection else None
|
||||||
|
if wallet_owner_user and wallet_owner_user.telegram_id:
|
||||||
|
wallet_owner_bot = Wrapped_CBotChat(
|
||||||
|
memory._telegram_bot,
|
||||||
|
chat_id=wallet_owner_user.telegram_id,
|
||||||
|
user=wallet_owner_user,
|
||||||
|
db_session=session,
|
||||||
|
)
|
||||||
|
meta_title = content_metadata.get('title') or content_metadata.get('name') or 'Unknown'
|
||||||
|
meta_artist = content_metadata.get('artist')
|
||||||
|
formatted_title = f"{meta_artist} – {meta_title}" if meta_artist else meta_title
|
||||||
|
await wallet_owner_bot.send_message(
|
||||||
|
user.translated('p_licenseWasBought').format(
|
||||||
|
username=user.front_format(),
|
||||||
|
nft_address=f'"https://tonviewer.com/{new_license.onchain_address}"',
|
||||||
|
content_title=formatted_title,
|
||||||
|
),
|
||||||
|
message_type='notification',
|
||||||
|
)
|
||||||
|
except BaseException as e:
|
||||||
|
make_log("IndexerSendNewLicense", f"Error: {e}" + '\n' + traceback.format_exc(), level="error")
|
||||||
|
|
||||||
|
# Preserve current behavior: do not retry notifications indefinitely.
|
||||||
|
new_license.meta = {**(new_license.meta or {}), 'notification_sent': True}
|
||||||
|
await session.commit()
|
||||||
|
except BaseException as e:
|
||||||
|
# Never allow a single broken license/metadata record to block the whole indexer loop.
|
||||||
|
make_log("Indexer", f"Error processing new license {getattr(new_license, 'id', None)}: {e}" + '\n' + traceback.format_exc(), level="error")
|
||||||
|
new_license.meta = {**(new_license.meta or {}), 'notification_sent': True, 'notification_error': str(e)[:256]}
|
||||||
|
await session.commit()
|
||||||
|
|
||||||
content_without_cid = (await session.execute(select(StoredContent).where(StoredContent.content_id == None))).scalars().all()
|
content_without_cid = (await session.execute(select(StoredContent).where(StoredContent.content_id == None))).scalars().all()
|
||||||
for target_content in content_without_cid:
|
for target_content in content_without_cid:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue