fix: exclude archived projects from oldest-percent sync selection
Archived projects should not count toward the N% fraction nor be selected for syncing.
This commit is contained in:
9
sync.py
9
sync.py
@@ -353,15 +353,18 @@ def get_oldest_unsynced_projects(db, fraction: float = 0.2) -> List[int]:
|
|||||||
try:
|
try:
|
||||||
projects_ref = db.collection("projects")
|
projects_ref = db.collection("projects")
|
||||||
all_docs = list(projects_ref.stream())
|
all_docs = list(projects_ref.stream())
|
||||||
total = len(all_docs)
|
|
||||||
|
# Exclude archived projects from the sync pool
|
||||||
|
active_docs = [doc for doc in all_docs if not doc.to_dict().get("is_archived")]
|
||||||
|
total = len(active_docs)
|
||||||
count_to_sync = max(1, int(total * fraction))
|
count_to_sync = max(1, int(total * fraction))
|
||||||
|
|
||||||
# Sort by last_synced_at ascending (empty strings first, then oldest timestamps)
|
# Sort by last_synced_at ascending (empty strings first, then oldest timestamps)
|
||||||
sorted_docs = sorted(all_docs, key=lambda doc: doc.to_dict().get("last_synced_at", ""))
|
sorted_docs = sorted(active_docs, key=lambda doc: doc.to_dict().get("last_synced_at", ""))
|
||||||
selected_docs = sorted_docs[:count_to_sync]
|
selected_docs = sorted_docs[:count_to_sync]
|
||||||
result_ids = [int(doc.id) for doc in selected_docs if doc.id and doc.id != "None"]
|
result_ids = [int(doc.id) for doc in selected_docs if doc.id and doc.id != "None"]
|
||||||
|
|
||||||
print(f"[SYNC STRATEGY] {total} projects in Firestore, will sync oldest {len(result_ids)} ({fraction*100:.0f}%)")
|
print(f"[SYNC STRATEGY] {total} active projects in Firestore, will sync oldest {len(result_ids)} ({fraction*100:.0f}%)")
|
||||||
if selected_docs:
|
if selected_docs:
|
||||||
sample = selected_docs[0].to_dict()
|
sample = selected_docs[0].to_dict()
|
||||||
print(f"[SYNC STRATEGY] Oldest: ID={result_ids[0]}, last_synced_at='{sample.get('last_synced_at', 'N/A')}'")
|
print(f"[SYNC STRATEGY] Oldest: ID={result_ids[0]}, last_synced_at='{sample.get('last_synced_at', 'N/A')}'")
|
||||||
|
|||||||
Reference in New Issue
Block a user