Skip to content
Permalink
Browse files

Removes genre detection.

Without this feature, the api-jvc.php service can be disabled.
  • Loading branch information...
dorian-marchal committed Mar 25, 2016
1 parent 824725d commit d3ad4879b152ee296f271ce13c65a4ec0aee1805
Showing with 13 additions and 624 deletions.
  1. +3 −174 Author.js
  2. +1 −41 Util.js
  3. +0 −101 documentation/Author.md
  4. +0 −18 documentation/Util.md
  5. +0 −4 modules/AutoUpdate.js
  6. +9 −83 modules/InfosPseudo.js
  7. +0 −203 server/api-jvc.php
177 Author.js
@@ -3,8 +3,7 @@
/* jshint newcap: false */

/* Représente un auteur de JVC */
SK.Author = function(pseudo) {
this.version = SK.Author.VERSION;
SK.Author = function(pseudo, avatarUrlSm) {
this.pseudoWithCase = pseudo;
this.pseudo = pseudo.toLowerCase().trim();

@@ -15,187 +14,17 @@ SK.Author = function(pseudo) {
else {
this.profileUnavailable = false;
}

// https://regex101.com/r/kP6hL0/2
this.fullSizeAvatar = avatarUrlSm.replace(/\/(avatars?)-(sm|md)\//, "/$1/");
this.key = "authors." + pseudo;
this.avatar = "";
this.fullSizeAvatar = "";
this.gender = "";
this.profileLink = "";
//"ban tempo", "ban def", "error" ou "removed"
this.errorType = "";
this.hasLocalData = false;
this.messages = [];
};

/** Version du modèle. Permet de déprecier le cache si la structure change */
SK.Author.VERSION = "3";

/** Durée de validité du localStorage en jours */
SK.Author.DATA_TTL = 4;


/**
* Set les données de l'auteur à partir d'un objet data
*/
SK.Author.prototype.initFromData = function(data) {
this.version = data.version || "";
this.avatar = data.avatar || "";
this.fullSizeAvatar = data.fullSizeAvatar || "";
this.gender = data.gender || "";
this.profileLink = data.profileLink || "";
this.profileUnavailable = data.profileUnavailable || false;
this.errorType = data.errorType || "";
this.hasLocalData = data.hasLocalData || false;
};

/* Charge les données de l'auteur à partir d"un élément $cdv (issu de l'API JVC) */
SK.Author.prototype.initFromCdv = function($cdv) {

this.profileLink = location.protocol + "//www.jeuxvideo.com/profil/" + this.pseudo + ".html";

if($cdv.find("image").length > 0 &&
$cdv.find("gender").length > 0
) {
var avatar = location.protocol + $cdv.find("image").text();
// https://regex101.com/r/kP6hL0/2
this.avatar = avatar.replace(/\/(avatars?)-(sm|md)\//, "/$1-sm/");
this.fullSizeAvatar = avatar.replace(/\/(avatars?)-(sm|md)\//, "/$1/");

if(this.fullSizeAvatar === location.protocol + "//image.jeuxvideo.com/avatars/default.jpg") {
this.fullSizeAvatar = this.avatar;
}

this.gender = $cdv.find("gender").text();
}
else {
this.profileUnavailable = true;

var error = $cdv.find("texte_erreur").text();

if(error === "Le pseudo est banni temporairement") {
this.errorType = "ban tempo";
}
else if(error === "Le pseudo est banni") {
this.errorType = "ban def";
}
else {
this.errorType = "error";
}
}
};



/* Ajoute un message à l'auteur */
SK.Author.prototype.addMessage = function(message) {
this.messages.push(message);
};

/**
* Enregistre les données de l'auteur dans le localStorage
*/
SK.Author.prototype.saveLocalData = function() {

var data = {
version: this.version,
avatar: this.avatar,
fullSizeAvatar: this.fullSizeAvatar,
gender: this.gender,
profileLink: this.profileLink,
profileUnavailable: this.profileUnavailable,
errorType: this.errorType,
hasLocalData: true,
date: new Date()
};

SK.Util.setValue(this.key, data);
};

/*
* Récupère les données de l'auteur dans le localStorage.
* Retourne vrai si on a trouvé des données exploitables en local pour cet auteur
*/
SK.Author.prototype.loadLocalData = function() {

var data = SK.Util.getValue(this.key);
var dataLoaded = false;

if(SK.Author.isDataValid(data)) {
this.initFromData(data);
dataLoaded = true;
}

return dataLoaded;
};

/**
* Retourne faux si les données passées en paramètre sont obsolètes.
*/
SK.Author.isDataValid = function(data) {

var valid = true;

if(data === null) {
return false;
}

//On ne charge les données que si elles sont encore valables
var dataDate = new Date(data.date);
var now = new Date();
var timeDiff = Math.abs(now.getTime() - dataDate.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));

if(data.version !== SK.Author.VERSION || diffDays >= SK.Author.DATA_TTL) {
valid = false;
}

return valid;

};

/**
* Supprime les auteurs dont les données sont expirées.
*/
SK.Author.clearObsoleteData = function() {

//On parcourt les données locales
Object
.keys(localStorage)
.forEach(function(key) {

//Si les données concernent un auteur
if (/^SK.authors./.test(key)) {

var skKey = key.substr(3);
var data = SK.Util.getValue(skKey);

// Et qu'elles sont périmées
if (!SK.Author.isDataValid(data)) {
//On les supprime
SK.Util.deleteValue(skKey);
}
}
})
;
};

/**
* Supprime toutes les données des auteurs du localStorage
*/
SK.Author.clearData = function() {
//On parcourt les données locales
Object
.keys(localStorage)
.forEach(function(key) {

//Si les données concernent un auteur
if (/^SK.authors./.test(key)) {

var skKey = key.substr(3);

//On les supprime
SK.Util.deleteValue(skKey);
}
})
;
};
42 Util.js
@@ -34,39 +34,6 @@ SK.Util = {
});
},

/**
* Wrapper de l'API JVC permettant de faire des requêtes simplifiées via un
* serveur distant.
*
* @param {string} requestAction - Type de requête à exécuter : "pseudos"
* @param {mix} data - données de la requête
* pseudos : [ "pseudo1", "pseudo2", "pseudo3"]
* @param {function} callback - fonction appelée avec un objet jQuery contenant
* les infos récupérées
* @param {boolean} logApiCall - true (défaut) ou false, si vrai : enregistre
* l'appel dans la BDD
* @param {boolean} forceCacheReload - true ou false (défaut) : si vrai, ne prend
* pas en compte le cache et force son rechargement pour l'appel courant
*/
api: function(requestAction, data, callback, logApiCall, forceCacheReload) {

callback = callback || function() {};
logApiCall = (logApiCall === false ? "0" : "1");
forceCacheReload = (forceCacheReload === false ? "0" : "1");

var url = SK.config.SERVER_URL + "api-jvc.php?action=" + requestAction +
"&data=" + encodeURIComponent(JSON.stringify(data)) + "&log=" + logApiCall + "&forceCacheReload=" + forceCacheReload;

GM_xmlhttpRequest({
url: url,
method: "GET",
onload: function(response) {
var $xml = $($.parseXML(SK.Util.sanitizeXML(response.responseText)));
callback($xml);
}
});
},

apiHelper: {

/**
@@ -344,8 +311,6 @@ SK.Util = {

/**
* Ajoute une valeur dans le localStorage ou sessionStorage.
* Fait le ménage dans les auteurs si ce dernier est plein.
*
* @param {boolean} temporary Vrai si la valeur doit être stockée en sessionStorage
*/
setValue: function(key, value, temporary) {
@@ -362,12 +327,7 @@ SK.Util = {
localStorage.setItem(key, JSON.stringify(value));
}
}
catch(e) {
if(e.name === "QUOTA_EXCEEDED_ERR") {
// On supprime les données obsolètes des auteurs
SK.Author.clearObsoleteData();
}
}
catch(e) {}
},

/**

This file was deleted.

@@ -16,24 +16,6 @@ SK.Util.m("02.flux_news", function(news) {

----


* **SK.Util.api** : Wrapper de l'API JVC permettant de faire des requêtes simplifiées via un serveur distant
* `requestAction` (string) : Type de requête à exécuter : "pseudos"
* `data` (array<string>): Si `requestAction`== "pseudos", alors `data` est un array de pseudos
* `callback` (function) : fonction appelée avec un objet jQuery contenant les infos récupérées
* `logApiCall` (boolean, default = true) : Si vrai, enregistre l'appel dans la BDD
* `forceCacheReload` (boolean, default = false) : Si vrai, alors ne prend pas en compte le cache, et force son rechargement

```javascript
// Requête vers http://dl.spixel.fr/greasemonkey/jvc-spawnkill/server/api-jvc.php?action=topic&data=%221000021-2267708%22&log=true&forceCacheReload=false
SK.Util.api("pseudos", ["Alexandre", "edwado"], function($authors) {
// On affiche les infos des pseudos retournés par le serveur distant
console.log($authors);
}, false, true);
```

----

* **SK.Util.timestamp** : Retourne le timestamp Unix courant (int)


0 comments on commit d3ad487

Please sign in to comment.
You can’t perform that action at this time.