Aktraiser commited on
Commit
c233761
·
1 Parent(s): 9f18da6

fonction lecture figam + participant

Browse files
Files changed (1) hide show
  1. app.py +141 -0
app.py CHANGED
@@ -251,6 +251,127 @@ def get_figma_comments(file_id: str = "") -> str:
251
 
252
  return f"📝 **Commentaires récents :**\n" + "\n\n".join(comment_list)
253
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  def get_figma_user_info() -> str:
255
  """Récupère les informations de l'utilisateur connecté"""
256
  result = make_figma_request("me")
@@ -306,6 +427,12 @@ def setup_demo():
306
  def test_user():
307
  return get_figma_user_info()
308
 
 
 
 
 
 
 
309
  with gr.Blocks(
310
  title="🎨 Figma MCP Server",
311
  theme=gr.themes.Soft(),
@@ -360,9 +487,11 @@ def setup_demo():
360
 
361
  # Actions de test
362
  with gr.Row():
 
363
  test_info_btn = gr.Button("📄 Info Fichier")
364
  test_comments_btn = gr.Button("📝 Commentaires")
365
  test_user_btn = gr.Button("👤 Info Utilisateur")
 
366
 
367
  # Connexions des événements
368
  token_btn.click(
@@ -377,6 +506,11 @@ def setup_demo():
377
  outputs=[status_output]
378
  )
379
 
 
 
 
 
 
380
  test_info_btn.click(
381
  test_file_info,
382
  outputs=[status_output]
@@ -391,18 +525,25 @@ def setup_demo():
391
  test_user,
392
  outputs=[status_output]
393
  )
 
 
 
 
 
394
 
395
  gr.Markdown("""
396
  ---
397
  ### 🛠️ **Outils MCP disponibles :**
398
  - `configure_figma_token(token)` - Configure le token d'accès
399
  - `configure_figma_file_id(file_id)` - Configure l'ID du fichier
 
400
  - `get_figma_file_info()` - Récupère les infos du fichier
401
  - `create_figma_rectangle(x, y, width, height, name, color)` - Crée un rectangle
402
  - `create_figma_frame(x, y, width, height, name)` - Crée un frame
403
  - `create_figma_text(x, y, text, name, font_size)` - Crée un texte
404
  - `get_figma_comments()` - Récupère les commentaires
405
  - `get_figma_user_info()` - Info utilisateur connecté
 
406
  """)
407
 
408
  return demo
 
251
 
252
  return f"📝 **Commentaires récents :**\n" + "\n\n".join(comment_list)
253
 
254
+ def get_figma_collaborators(file_id: str = "") -> str:
255
+ """Liste qui travaille sur un fichier Figma (collaborateurs actifs)"""
256
+ file_id = file_id or figma_config["file_id"]
257
+
258
+ if not file_id:
259
+ return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord."
260
+
261
+ collaborators = {}
262
+
263
+ # 1. Récupérer les commentateurs récents
264
+ comments_result = make_figma_request(f"files/{file_id}/comments")
265
+ if "error" not in comments_result:
266
+ comments = comments_result.get("comments", [])
267
+ for comment in comments[-20:]: # 20 commentaires les plus récents
268
+ user_data = comment.get("user", {})
269
+ if user_data:
270
+ user_id = user_data.get("id")
271
+ if user_id:
272
+ collaborators[user_id] = {
273
+ "nom": user_data.get("handle", "Anonyme"),
274
+ "avatar": user_data.get("img_url", ""),
275
+ "derniere_activite": comment.get("created_at", ""),
276
+ "type_activite": "💬 Commentaire",
277
+ "dernier_commentaire": comment.get("message", "")[:100] + "..." if len(comment.get("message", "")) > 100 else comment.get("message", "")
278
+ }
279
+
280
+ # 2. Récupérer les versions récentes pour voir les contributeurs
281
+ versions_result = make_figma_request(f"files/{file_id}/versions")
282
+ if "error" not in versions_result:
283
+ versions = versions_result.get("versions", [])
284
+ for version in versions[-10:]: # 10 versions les plus récentes
285
+ user_data = version.get("user", {})
286
+ if user_data:
287
+ user_id = user_data.get("id")
288
+ if user_id:
289
+ if user_id not in collaborators:
290
+ collaborators[user_id] = {
291
+ "nom": user_data.get("handle", "Anonyme"),
292
+ "avatar": user_data.get("img_url", ""),
293
+ "derniere_activite": version.get("created_at", ""),
294
+ "type_activite": "🎨 Modification",
295
+ "description": version.get("description", "Modification du design")
296
+ }
297
+ else:
298
+ # Mettre à jour avec l'activité la plus récente
299
+ version_date = version.get("created_at", "")
300
+ current_date = collaborators[user_id]["derniere_activite"]
301
+ if version_date > current_date:
302
+ collaborators[user_id]["derniere_activite"] = version_date
303
+ collaborators[user_id]["type_activite"] = "🎨 Modification"
304
+ collaborators[user_id]["description"] = version.get("description", "Modification du design")
305
+
306
+ if not collaborators:
307
+ return "👥 Aucune activité récente trouvée sur ce fichier"
308
+
309
+ # Trier par dernière activité
310
+ sorted_collaborators = sorted(
311
+ collaborators.items(),
312
+ key=lambda x: x[1]["derniere_activite"],
313
+ reverse=True
314
+ )
315
+
316
+ collaborator_list = []
317
+ for user_id, data in sorted_collaborators:
318
+ # Formater la date
319
+ date_str = data["derniere_activite"]
320
+ if date_str:
321
+ try:
322
+ from datetime import datetime
323
+ dt = datetime.fromisoformat(date_str.replace('Z', '+00:00'))
324
+ date_formatted = dt.strftime("%d/%m/%Y %H:%M")
325
+ except:
326
+ date_formatted = date_str
327
+ else:
328
+ date_formatted = "Date inconnue"
329
+
330
+ collaborator_info = f"👤 **{data['nom']}**\n {data['type_activite']} - {date_formatted}"
331
+
332
+ # Ajouter des détails selon le type d'activité
333
+ if "dernier_commentaire" in data:
334
+ collaborator_info += f"\n 💬 \"{data['dernier_commentaire']}\""
335
+ elif "description" in data:
336
+ collaborator_info += f"\n 📝 {data['description']}"
337
+
338
+ collaborator_list.append(collaborator_info)
339
+
340
+ return f"👥 **Collaborateurs actifs sur ce fichier :**\n\n" + "\n\n".join(collaborator_list)
341
+
342
+ def list_figma_recent_files() -> str:
343
+ """Liste tous les fichiers Figma récents de l'utilisateur connecté"""
344
+ result = make_figma_request("files/recent")
345
+
346
+ if "error" in result:
347
+ return f"❌ Erreur : {result['error']}"
348
+
349
+ files = result.get("files", [])
350
+
351
+ if not files:
352
+ return "📁 Aucun fichier récent trouvé"
353
+
354
+ file_list = []
355
+ for file_data in files[:20]: # Limiter à 20 fichiers récents
356
+ name = file_data.get("name", "Sans nom")
357
+ file_key = file_data.get("key", "")
358
+ last_modified = file_data.get("last_modified", "")
359
+
360
+ # Extraire juste la date de la timestamp
361
+ if last_modified:
362
+ try:
363
+ from datetime import datetime
364
+ dt = datetime.fromisoformat(last_modified.replace('Z', '+00:00'))
365
+ date_str = dt.strftime("%d/%m/%Y %H:%M")
366
+ except:
367
+ date_str = last_modified
368
+ else:
369
+ date_str = "Date inconnue"
370
+
371
+ file_list.append(f"📄 **{name}**\n ID: `{file_key}`\n Modifié: {date_str}")
372
+
373
+ return f"📁 **Vos fichiers Figma récents :**\n\n" + "\n\n".join(file_list)
374
+
375
  def get_figma_user_info() -> str:
376
  """Récupère les informations de l'utilisateur connecté"""
377
  result = make_figma_request("me")
 
427
  def test_user():
428
  return get_figma_user_info()
429
 
430
+ def test_recent_files():
431
+ return list_figma_recent_files()
432
+
433
+ def test_collaborators():
434
+ return get_figma_collaborators()
435
+
436
  with gr.Blocks(
437
  title="🎨 Figma MCP Server",
438
  theme=gr.themes.Soft(),
 
487
 
488
  # Actions de test
489
  with gr.Row():
490
+ test_files_btn = gr.Button("📁 Fichiers Récents")
491
  test_info_btn = gr.Button("📄 Info Fichier")
492
  test_comments_btn = gr.Button("📝 Commentaires")
493
  test_user_btn = gr.Button("👤 Info Utilisateur")
494
+ test_collaborators_btn = gr.Button("👥 Collaborateurs")
495
 
496
  # Connexions des événements
497
  token_btn.click(
 
506
  outputs=[status_output]
507
  )
508
 
509
+ test_files_btn.click(
510
+ test_recent_files,
511
+ outputs=[status_output]
512
+ )
513
+
514
  test_info_btn.click(
515
  test_file_info,
516
  outputs=[status_output]
 
525
  test_user,
526
  outputs=[status_output]
527
  )
528
+
529
+ test_collaborators_btn.click(
530
+ test_collaborators,
531
+ outputs=[status_output]
532
+ )
533
 
534
  gr.Markdown("""
535
  ---
536
  ### 🛠️ **Outils MCP disponibles :**
537
  - `configure_figma_token(token)` - Configure le token d'accès
538
  - `configure_figma_file_id(file_id)` - Configure l'ID du fichier
539
+ - `list_figma_recent_files()` - Liste tous vos fichiers récents avec leurs IDs
540
  - `get_figma_file_info()` - Récupère les infos du fichier
541
  - `create_figma_rectangle(x, y, width, height, name, color)` - Crée un rectangle
542
  - `create_figma_frame(x, y, width, height, name)` - Crée un frame
543
  - `create_figma_text(x, y, text, name, font_size)` - Crée un texte
544
  - `get_figma_comments()` - Récupère les commentaires
545
  - `get_figma_user_info()` - Info utilisateur connecté
546
+ - `get_figma_collaborators()` - Récupère les collaborateurs actifs
547
  """)
548
 
549
  return demo