2010-04-02 4 views
3

Prescript: L'étonnant etherpad a été récemment ouvert. Obtenez-le ici: http://code.google.com/p/etherpad. C'est la première question que je connais sur StackOverflow à propos du code etherpad. Si vous faites partie de la communauté open-source etherpad, vous voudrez peut-être vous abonner à the RSS feed for questions tagged 'etherpad' juste au cas où cela accrocherait!Affichage des etherpads récemment modifiés (notez le nouveau marqueur 'etherpad' pour le code etherpad open source!)

Ma question réelle, ce qui suppose que vous avez EtherPad installé sur votre propre serveur:

D'abord, voici une requête pour afficher pads récemment modifiés:

SELECT id,lastWriteTime,creationTime,headRev 
    FROM PAD_SQLMETA ORDER BY lastWriteTime, headRev; 

Ou, si vous voulez l'exécuter à partir d'une invite unix:

mysql -u root -pPASSWD etherpad -e "select id,lastWriteTime,creationTime,headRev 
    from PAD_SQLMETA order by lastWriteTime, headRev" 

C'est à portée de main, mais lastWriteTime obtient effectivement mis à jour chaque fois que quelqu'un tant que des vues d'un tampon dans la navigateur. Je préfèrerais trier les pads quand ils ont été modifiés pour la dernière fois. Il y a probablement une requête SQL sophistiquée impliquant une jointure avec une autre table qui montrerait la dernière heure d'édition réelle. Est-ce que quelqu'un sait ce que c'est? Alternativement, vous pourriez avoir un script qui remarque quand headRev change mais cela ne semble pas être le moyen le plus propre de le faire.

Répondre

1

Je n'ai pas tout à fait compris la réponse à ma question initiale mais j'ai écrit un script qui permet d'obtenir quelque chose de similaire. Son but principal est d'exporter des versions en texte brut de tous mes pads et de les stocker sur mon ordinateur portable. Comme un effet secondaire, il me montre quels pads ont changé et me laisse voir un diff depuis la dernière version exportée. Il montre également ceux qui ont été nouvellement créés.

d'abord, créez le script suivant, padlist.pl, sur le serveur qui héberge votre instance EtherPad:

#!/usr/bin/env perl 

$list = `mysql -u root -pPASSWD etherpad -e 
     "select id from PAD_SQLMETA order by lastWriteTime DESC, headRev DESC"`; 

$list =~ s/^id\s*\n//s; # get rid of the column header mysql adds. 
print $list; 

Exécutez ensuite le script suivant, fetchall.pl, sur votre machine locale. Il va aspirer les instantanés de tous vos pads et vous dire ceux qui ont changé et ceux qui sont nouvellement apparus.

#!/usr/bin/env perl 

use LWP::Simple qw(get); 
$| = 1; # autoflush. 
$server = "server.com"; # the server that hosts your etherpad instance. 

$pads = `ssh $server etherpad/padlist.pl`; 
@padlist = split(/\s+/, $pads); 

$neednewline = 0; # printing "." for each pad where nothing to be done. 
for(@padlist) { 
    $ep = $_; 
    $localfile = "$ep.txt"; 
    if(-e $localfile) { 
    $localexists = 1; 
    $localcontent = do {local (@ARGV,$/) = $localfile; <>}; 
    } else { $localexists = 0; } 
    $livecontent = get("http://$server/ep/pad/export/$ep/latest?format=txt"); 
    if($livecontent ne $localcontent) { 
    if($neednewline) { print "\n"; $neednewline = 0; } 
    if($localexists) { 
     print "CHANGED: $ep\n"; 
     open(F, ">prev/$localfile") or die "Probably need to create 'prev' dir."; 
     print F $localcontent; 
     close(F); 
    } else { print "NEW:  $ep\n"; } 
    open(F, ">$localfile") or die; 
    print F $livecontent; 
    close(F); 
    } else { 
    print "."; 
    $neednewline = 1; 
} } 

Pour voir une diff de pad foo depuis la dernière fois que j'allai le chercher:

diff prev/foo.txt foo.txt 
Questions connexes