124 lines
4.1 KiB
PHP

<?php
/**
* FavMasToKey - Traitement des favoris
*/
// Définir la constante pour inclure les fichiers
define('FAVMASTOKEY', true);
// Inclure les fichiers requis
require_once 'includes/config.php';
require_once 'includes/functions.php';
// Vérifier que la requête est en POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['success' => false, 'message' => 'Méthode non autorisée']);
exit;
}
// Vérifier que l'utilisateur est authentifié
if (!isset($_SESSION['misskey_token']) || empty($_SESSION['misskey_token'])) {
http_response_code(401);
echo json_encode(['success' => false, 'message' => 'Non authentifié']);
exit;
}
// Récupérer l'instance Misskey
$misskey_instance = isset($_SESSION['misskey_instance']) ? $_SESSION['misskey_instance'] : '';
if (empty($misskey_instance)) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'Instance Misskey non définie']);
exit;
}
// Récupérer le token d'accès
$token = $_SESSION['misskey_token'];
// Récupérer les données envoyées
$input = json_decode(file_get_contents('php://input'), true);
if (!$input || !isset($input['batch']) || !is_array($input['batch'])) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'Données invalides']);
exit;
}
// Récupérer le lot à traiter
$batch = $input['batch'];
$currentIndex = isset($input['currentIndex']) ? (int)$input['currentIndex'] : 0;
$totalItems = isset($input['totalItems']) ? (int)$input['totalItems'] : count($batch);
// Résultats du traitement
$results = [];
// Traiter chaque URL du lot
foreach ($batch as $index => $url) {
// Extraire les informations de l'URL
$urlParts = parse_url($url);
// Vérifier que l'URL est valide
if (!$urlParts || !isset($urlParts['host']) || !isset($urlParts['path'])) {
$results[] = [
'status' => 'error',
'message' => "URL invalide: $url"
];
continue;
}
// Rechercher la note sur Misskey à partir de l'URL
$searchResult = search_federated_note($misskey_instance, $url, $token);
if ($searchResult['success'] && isset($searchResult['data']) && !empty($searchResult['data'])) {
// Note trouvée, récupérer son ID
$noteId = $searchResult['data']['id'];
// Tenter d'ajouter la note aux favoris
$favoriteResult = add_to_favorites($misskey_instance, $noteId, $token);
if ($favoriteResult['success']) {
$results[] = [
'status' => 'success',
'message' => "Ajouté aux favoris: $url"
];
} else {
// Vérifier si c'est une erreur de "déjà ajouté aux favoris"
$errorMessage = isset($favoriteResult['data']['error']['message'])
? $favoriteResult['data']['error']['message']
: $favoriteResult['message'];
if (strpos($errorMessage, 'already') !== false) {
$results[] = [
'status' => 'info',
'message' => "Déjà dans vos favoris: $url"
];
} else {
$results[] = [
'status' => 'error',
'message' => "Erreur lors de l'ajout aux favoris: $errorMessage"
];
}
}
} else {
// Note non trouvée
$errorMessage = isset($searchResult['message']) ? $searchResult['message'] : "Publication introuvable";
$results[] = [
'status' => 'error',
'message' => "Publication non trouvée sur le réseau fédéré: $url ($errorMessage)"
];
}
// Pause pour éviter le rate limiting
usleep($config['delay_between_requests'] * 1000);
}
// Renvoyer les résultats
echo json_encode([
'success' => true,
'results' => $results,
'progress' => [
'current' => $currentIndex + count($batch),
'total' => $totalItems,
'percentage' => round((($currentIndex + count($batch)) / $totalItems) * 100, 2)
]
]);