Ooops... Pas de version sur les dossiers.
authorProgfou <jean-christophe.andre@auf.org>
Fri, 23 Aug 2013 19:49:46 +0000 (15:49 -0400)
committerProgfou <jean-christophe.andre@auf.org>
Fri, 23 Aug 2013 19:49:46 +0000 (15:49 -0400)
68 files changed:
lucid/auf-thunderbird-hack-0.1/Makefile [deleted file]
lucid/auf-thunderbird-hack-0.1/README [deleted file]
lucid/auf-thunderbird-hack-0.1/auf-thunderbird-hack.c [deleted file]
lucid/auf-thunderbird-hack-0.1/debian/changelog [deleted file]
lucid/auf-thunderbird-hack-0.1/debian/compat [deleted file]
lucid/auf-thunderbird-hack-0.1/debian/control [deleted file]
lucid/auf-thunderbird-hack-0.1/debian/copyright [deleted file]
lucid/auf-thunderbird-hack-0.1/debian/dirs [deleted file]
lucid/auf-thunderbird-hack-0.1/debian/docs [deleted file]
lucid/auf-thunderbird-hack-0.1/debian/postrm [deleted file]
lucid/auf-thunderbird-hack-0.1/debian/preinst [deleted file]
lucid/auf-thunderbird-hack-0.1/debian/rules [deleted file]
lucid/auf-thunderbird-hack-0.1/thunderbird [deleted file]
lucid/auf-thunderbird-hack-0.1/thunderbird-test [deleted file]
lucid/auf-thunderbird-hack/Makefile [new file with mode: 0644]
lucid/auf-thunderbird-hack/README [new file with mode: 0644]
lucid/auf-thunderbird-hack/auf-thunderbird-hack.c [new file with mode: 0644]
lucid/auf-thunderbird-hack/debian/changelog [new file with mode: 0644]
lucid/auf-thunderbird-hack/debian/compat [new file with mode: 0644]
lucid/auf-thunderbird-hack/debian/control [new file with mode: 0644]
lucid/auf-thunderbird-hack/debian/copyright [new file with mode: 0644]
lucid/auf-thunderbird-hack/debian/dirs [new file with mode: 0644]
lucid/auf-thunderbird-hack/debian/docs [new file with mode: 0644]
lucid/auf-thunderbird-hack/debian/postrm [new file with mode: 0644]
lucid/auf-thunderbird-hack/debian/preinst [new file with mode: 0644]
lucid/auf-thunderbird-hack/debian/rules [new file with mode: 0755]
lucid/auf-thunderbird-hack/thunderbird [new file with mode: 0755]
lucid/auf-thunderbird-hack/thunderbird-test [new file with mode: 0644]
precise/auf-unity-lens-0.1/Makefile [deleted file]
precise/auf-unity-lens-0.1/README [deleted file]
precise/auf-unity-lens-0.1/auf-unity-lens [deleted file]
precise/auf-unity-lens-0.1/auf-unity-lens.0 [deleted file]
precise/auf-unity-lens-0.1/auf-unity-lens.1 [deleted file]
precise/auf-unity-lens-0.1/auf-unity-lens.lens [deleted file]
precise/auf-unity-lens-0.1/auf-unity-lens.service [deleted file]
precise/auf-unity-lens-0.1/debian/changelog [deleted file]
precise/auf-unity-lens-0.1/debian/compat [deleted file]
precise/auf-unity-lens-0.1/debian/control [deleted file]
precise/auf-unity-lens-0.1/debian/copyright [deleted file]
precise/auf-unity-lens-0.1/debian/dirs [deleted file]
precise/auf-unity-lens-0.1/debian/docs [deleted file]
precise/auf-unity-lens-0.1/debian/postinst [deleted file]
precise/auf-unity-lens-0.1/debian/rules [deleted file]
precise/auf-unity-lens-0.1/unity-lens-auf/ula.py [deleted symlink]
precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf [deleted file]
precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf.0 [deleted file]
precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf.1 [deleted file]
precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf.2 [deleted file]
precise/auf-unity-lens/Makefile [new file with mode: 0644]
precise/auf-unity-lens/README [new file with mode: 0644]
precise/auf-unity-lens/auf-unity-lens [new file with mode: 0755]
precise/auf-unity-lens/auf-unity-lens.0 [new file with mode: 0755]
precise/auf-unity-lens/auf-unity-lens.1 [new file with mode: 0755]
precise/auf-unity-lens/auf-unity-lens.lens [new file with mode: 0644]
precise/auf-unity-lens/auf-unity-lens.service [new file with mode: 0644]
precise/auf-unity-lens/debian/changelog [new file with mode: 0644]
precise/auf-unity-lens/debian/compat [new file with mode: 0644]
precise/auf-unity-lens/debian/control [new file with mode: 0644]
precise/auf-unity-lens/debian/copyright [new file with mode: 0644]
precise/auf-unity-lens/debian/dirs [new file with mode: 0644]
precise/auf-unity-lens/debian/docs [new file with mode: 0644]
precise/auf-unity-lens/debian/postinst [new file with mode: 0644]
precise/auf-unity-lens/debian/rules [new file with mode: 0755]
precise/auf-unity-lens/unity-lens-auf/ula.py [new symlink]
precise/auf-unity-lens/unity-lens-auf/unity-lens-auf [new file with mode: 0755]
precise/auf-unity-lens/unity-lens-auf/unity-lens-auf.0 [new file with mode: 0755]
precise/auf-unity-lens/unity-lens-auf/unity-lens-auf.1 [new file with mode: 0755]
precise/auf-unity-lens/unity-lens-auf/unity-lens-auf.2 [new file with mode: 0755]

diff --git a/lucid/auf-thunderbird-hack-0.1/Makefile b/lucid/auf-thunderbird-hack-0.1/Makefile
deleted file mode 100644 (file)
index c7d3f0b..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-PACKAGE = $(shell dpkg-parsechangelog | sed -n 's/^Source: //p')
-VERSION = $(shell dpkg-parsechangelog | sed -n 's/^Version: //p')
-DIST = $(shell dpkg-parsechangelog | sed -n 's/^Distribution: //p')
-
-BINDIR=/usr/bin
-LIBDIR=/usr/lib/thunderbird
-
-all: $(PACKAGE).so
-
-clean:
-       rm -f $(PACKAGE).so
-
-install: $(PACKAGE).so
-       install -c -m 0644 $(PACKAGE).so $(DESTDIR)$(LIBDIR)/
-       install -c -m 0755 thunderbird $(DESTDIR)$(BINDIR)/
-
-uninstall: $(DESTDIR)$(LIBDIR)/$(PACKAGE).so
-       rm -f $(DESTDIR)$(BINDIR)/thunderbird
-       rm -f $(DESTDIR)$(LIBDIR)/$(PACKAGE).so
-
-$(PACKAGE).so: $(PACKAGE).c
-       $(CC) -shared -nostartfiles $(PACKAGE).c -o $(PACKAGE).so -ldl
-
-deb:
-       debuild -I.git -I*.ex -b -us -uc && \
-       echo -e "\n\n==> Lancer \"sudo debi\" pour tester l'installation.\n"
-
-release:
-       debuild -I.git -I*.ex -tc -sa -us -uc && debrelease --dput $(DIST)-test
-
diff --git a/lucid/auf-thunderbird-hack-0.1/README b/lucid/auf-thunderbird-hack-0.1/README
deleted file mode 100644 (file)
index 66453f6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Ce logiciel sert à empêcher Thunderbird d'afficher des fenêtres d'erreur
-quand il trouve des URI de la forme 'a+b:c' dans un corps de courriel.
-
-Ce problème est dû au fait qu'il cherche alors le protocole 'a+b' dans la
-base gconf alors que cette dernière ne supporte pas le caractère '+' dans
-ses noms de clés.
-
- -- Progfou <jean-christophe.andre@auf.org>  Wed, 21 Aug 2013 18:22:13 -0400
diff --git a/lucid/auf-thunderbird-hack-0.1/auf-thunderbird-hack.c b/lucid/auf-thunderbird-hack-0.1/auf-thunderbird-hack.c
deleted file mode 100644 (file)
index 344382b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#define _GNU_SOURCE
-// #include <stdio.h>
-#include <string.h>
-#include <dlfcn.h>
-char* gconf_client_get_string(void* client, const char* key, void** err)
-{
-  static char* (*original_gconf_client_get_string)(void*, const char*, void**) = NULL;
-  char *result;
-
-  // printf("entering preloded gconf...\n");
-  // printf("key=[%s]\n", key ? key : "NULL");
-
-  if (strchr(key, '+')) return NULL;
-
-  if (!original_gconf_client_get_string) {
-    void *handle = dlopen("libgconf-2.so.4", RTLD_LAZY);
-    // printf("handle=[0x%08lx]\n", (long)handle);
-    if (!handle) return NULL;
-    original_gconf_client_get_string = dlsym(handle, "gconf_client_get_string");
-    // printf("original_gconf_client_get_string=[0x%08lx]\n", (long)original_gconf_client_get_string);
-  }
-  result = original_gconf_client_get_string(client, key, err);
-
-  // printf("result=[%s]\n", result ? result : "NULL");
-  // printf("exiting preloded gconf...\n");
-  return result;
-}
diff --git a/lucid/auf-thunderbird-hack-0.1/debian/changelog b/lucid/auf-thunderbird-hack-0.1/debian/changelog
deleted file mode 100644 (file)
index d8529c3..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-auf-thunderbird-hack (0.2) lucid; urgency=low
-
-  * Deuxième version (en espérant que ce soit la dernière).
-
- -- Progfou <jean-christophe.andre@auf.org>  Fri, 23 Aug 2013 15:17:47 -0400
-
-auf-thunderbird-hack (0.1) lucid; urgency=low
-
-  * Première version (et probablement la dernière aussi).
-
- -- Progfou <jean-christophe.andre@auf.org>  Wed, 21 Aug 2013 18:22:13 -0400
diff --git a/lucid/auf-thunderbird-hack-0.1/debian/compat b/lucid/auf-thunderbird-hack-0.1/debian/compat
deleted file mode 100644 (file)
index 7f8f011..0000000
+++ /dev/null
@@ -1 +0,0 @@
-7
diff --git a/lucid/auf-thunderbird-hack-0.1/debian/control b/lucid/auf-thunderbird-hack-0.1/debian/control
deleted file mode 100644 (file)
index ba59f76..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Source: auf-thunderbird-hack
-Priority: extra
-Maintainer: Progfou <jean-christophe.andre@auf.org>
-Build-Depends: debhelper (>= 7)
-Standards-Version: 3.8.3
-Section: libs
-Homepage: http://git.auf.org/?p=auf-poste-client.git;a=tree;f=lucid/auf-thunderbird-hack
-
-Package: auf-thunderbird-hack
-Section: libs
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, libgconf2-4, thunderbird
-Description: Bidouille pour améliorer Thunderbird
- Ce logiciel sert à empêcher Thunderbird d'afficher des fenêtres d'erreur
- quand il trouve des URI de la forme 'a+b:c' dans un corps de courriel.
- .
- Ce problème est dû au fait qu'il cherche alors le protocole 'a+b' dans la
- base gconf alors que cette dernière ne supporte pas le caractère '+' dans
- ses noms de clés.
diff --git a/lucid/auf-thunderbird-hack-0.1/debian/copyright b/lucid/auf-thunderbird-hack-0.1/debian/copyright
deleted file mode 100644 (file)
index 5d0555e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-This work was packaged for Debian by:
-
-    Progfou <jean-christophe.andre@auf.org> on Wed, 21 Aug 2013 18:22:13 -0400
-
-It was downloaded from:
-
-    http://git.auf.org/?p=auf-poste-client.git;a=tree;f=lucid/auf-thunderbird-hack
-
-Upstream Author(s):
-
-    Progfou <jean-christophe.andre@auf.org>
-
-Copyright:
-
-    Copyright (C) 2013 Agence universitaire de la Francophonie -- www.auf.org
-
-License:
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This package is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-On Debian systems, the complete text of the GNU General
-Public License version 3 can be found in `/usr/share/common-licenses/GPL-3'.
-
-The Debian packaging is:
-
-    Copyright (C) 2013 Agence universitaire de la Francophonie -- www.auf.org
-
-and is licensed under the GPL version 3, see above.
diff --git a/lucid/auf-thunderbird-hack-0.1/debian/dirs b/lucid/auf-thunderbird-hack-0.1/debian/dirs
deleted file mode 100644 (file)
index 1e4ed44..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/lib/thunderbird
-usr/bin
diff --git a/lucid/auf-thunderbird-hack-0.1/debian/docs b/lucid/auf-thunderbird-hack-0.1/debian/docs
deleted file mode 100644 (file)
index e845566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-README
diff --git a/lucid/auf-thunderbird-hack-0.1/debian/postrm b/lucid/auf-thunderbird-hack-0.1/debian/postrm
deleted file mode 100644 (file)
index 2b362ae..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/sh
-# postrm script for auf-thunderbird-hack
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-#        * <postrm> `remove'
-#        * <postrm> `purge'
-#        * <old-postrm> `upgrade' <new-version>
-#        * <new-postrm> `failed-upgrade' <old-version>
-#        * <new-postrm> `abort-install'
-#        * <new-postrm> `abort-install' <old-version>
-#        * <new-postrm> `abort-upgrade' <old-version>
-#        * <disappearer's-postrm> `disappear' <overwriter>
-#          <overwriter-version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-
-case "$1" in
-    purge|remove|abort-install|disappear)
-        dpkg-divert --package auf-thunderbird-hack --rename --remove /usr/bin/thunderbird
-    ;;
-
-    upgrade|failed-upgrade|abort-upgrade)
-    ;;
-
-    *)
-        echo "postrm called with unknown argument \`$1'" >&2
-        exit 1
-    ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
diff --git a/lucid/auf-thunderbird-hack-0.1/debian/preinst b/lucid/auf-thunderbird-hack-0.1/debian/preinst
deleted file mode 100644 (file)
index 00a0ff4..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-# preinst script for auf-thunderbird-hack
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-#        * <new-preinst> `install'
-#        * <new-preinst> `install' <old-version>
-#        * <new-preinst> `upgrade' <old-version>
-#        * <old-preinst> `abort-upgrade' <new-version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-
-case "$1" in
-    install)
-        dpkg-divert --package auf-thunderbird-hack --divert /usr/bin/thunderbird.pre-auf-thunderbird-hack --rename /usr/bin/thunderbird
-    ;;
-
-    upgrade|abort-upgrade)
-    ;;
-
-    *)
-        echo "preinst called with unknown argument \`$1'" >&2
-        exit 1
-    ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
diff --git a/lucid/auf-thunderbird-hack-0.1/debian/rules b/lucid/auf-thunderbird-hack-0.1/debian/rules
deleted file mode 100755 (executable)
index 917d9bf..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# This file was originally written by Joey Hess and Craig Small.
-# As a special exception, when this file is copied by dh-make into a
-# dh-make output file, you may use that output file without restriction.
-# This special exception was added by Craig Small in version 0.37 of dh-make.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-%:
-       dh  $@
diff --git a/lucid/auf-thunderbird-hack-0.1/thunderbird b/lucid/auf-thunderbird-hack-0.1/thunderbird
deleted file mode 100755 (executable)
index 298de50..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-PACKAGE=auf-thunderbird-hack
-export LD_PRELOAD=/usr/lib/thunderbird/${PACKAGE}.so
-exec /usr/bin/thunderbird.pre-${PACKAGE} "$@"
diff --git a/lucid/auf-thunderbird-hack-0.1/thunderbird-test b/lucid/auf-thunderbird-hack-0.1/thunderbird-test
deleted file mode 100644 (file)
index d9e8669..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-PACKAGE=auf-thunderbird-hack
-cp -a ${PACKAGE}.so /tmp/
-export LD_PRELOAD=/tmp/${PACKAGE}.so
-exec /usr/bin/thunderbird.pre-${PACKAGE} "$@"
diff --git a/lucid/auf-thunderbird-hack/Makefile b/lucid/auf-thunderbird-hack/Makefile
new file mode 100644 (file)
index 0000000..c7d3f0b
--- /dev/null
@@ -0,0 +1,30 @@
+PACKAGE = $(shell dpkg-parsechangelog | sed -n 's/^Source: //p')
+VERSION = $(shell dpkg-parsechangelog | sed -n 's/^Version: //p')
+DIST = $(shell dpkg-parsechangelog | sed -n 's/^Distribution: //p')
+
+BINDIR=/usr/bin
+LIBDIR=/usr/lib/thunderbird
+
+all: $(PACKAGE).so
+
+clean:
+       rm -f $(PACKAGE).so
+
+install: $(PACKAGE).so
+       install -c -m 0644 $(PACKAGE).so $(DESTDIR)$(LIBDIR)/
+       install -c -m 0755 thunderbird $(DESTDIR)$(BINDIR)/
+
+uninstall: $(DESTDIR)$(LIBDIR)/$(PACKAGE).so
+       rm -f $(DESTDIR)$(BINDIR)/thunderbird
+       rm -f $(DESTDIR)$(LIBDIR)/$(PACKAGE).so
+
+$(PACKAGE).so: $(PACKAGE).c
+       $(CC) -shared -nostartfiles $(PACKAGE).c -o $(PACKAGE).so -ldl
+
+deb:
+       debuild -I.git -I*.ex -b -us -uc && \
+       echo -e "\n\n==> Lancer \"sudo debi\" pour tester l'installation.\n"
+
+release:
+       debuild -I.git -I*.ex -tc -sa -us -uc && debrelease --dput $(DIST)-test
+
diff --git a/lucid/auf-thunderbird-hack/README b/lucid/auf-thunderbird-hack/README
new file mode 100644 (file)
index 0000000..66453f6
--- /dev/null
@@ -0,0 +1,8 @@
+Ce logiciel sert à empêcher Thunderbird d'afficher des fenêtres d'erreur
+quand il trouve des URI de la forme 'a+b:c' dans un corps de courriel.
+
+Ce problème est dû au fait qu'il cherche alors le protocole 'a+b' dans la
+base gconf alors que cette dernière ne supporte pas le caractère '+' dans
+ses noms de clés.
+
+ -- Progfou <jean-christophe.andre@auf.org>  Wed, 21 Aug 2013 18:22:13 -0400
diff --git a/lucid/auf-thunderbird-hack/auf-thunderbird-hack.c b/lucid/auf-thunderbird-hack/auf-thunderbird-hack.c
new file mode 100644 (file)
index 0000000..344382b
--- /dev/null
@@ -0,0 +1,28 @@
+#define _GNU_SOURCE
+// #include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+char* gconf_client_get_string(void* client, const char* key, void** err)
+{
+  static char* (*original_gconf_client_get_string)(void*, const char*, void**) = NULL;
+  char *result;
+
+  // printf("entering preloded gconf...\n");
+  // printf("key=[%s]\n", key ? key : "NULL");
+
+  if (strchr(key, '+')) return NULL;
+
+  if (!original_gconf_client_get_string) {
+    void *handle = dlopen("libgconf-2.so.4", RTLD_LAZY);
+    // printf("handle=[0x%08lx]\n", (long)handle);
+    if (!handle) return NULL;
+    original_gconf_client_get_string = dlsym(handle, "gconf_client_get_string");
+    // printf("original_gconf_client_get_string=[0x%08lx]\n", (long)original_gconf_client_get_string);
+  }
+  result = original_gconf_client_get_string(client, key, err);
+
+  // printf("result=[%s]\n", result ? result : "NULL");
+  // printf("exiting preloded gconf...\n");
+  return result;
+}
diff --git a/lucid/auf-thunderbird-hack/debian/changelog b/lucid/auf-thunderbird-hack/debian/changelog
new file mode 100644 (file)
index 0000000..d8529c3
--- /dev/null
@@ -0,0 +1,11 @@
+auf-thunderbird-hack (0.2) lucid; urgency=low
+
+  * Deuxième version (en espérant que ce soit la dernière).
+
+ -- Progfou <jean-christophe.andre@auf.org>  Fri, 23 Aug 2013 15:17:47 -0400
+
+auf-thunderbird-hack (0.1) lucid; urgency=low
+
+  * Première version (et probablement la dernière aussi).
+
+ -- Progfou <jean-christophe.andre@auf.org>  Wed, 21 Aug 2013 18:22:13 -0400
diff --git a/lucid/auf-thunderbird-hack/debian/compat b/lucid/auf-thunderbird-hack/debian/compat
new file mode 100644 (file)
index 0000000..7f8f011
--- /dev/null
@@ -0,0 +1 @@
+7
diff --git a/lucid/auf-thunderbird-hack/debian/control b/lucid/auf-thunderbird-hack/debian/control
new file mode 100644 (file)
index 0000000..ba59f76
--- /dev/null
@@ -0,0 +1,19 @@
+Source: auf-thunderbird-hack
+Priority: extra
+Maintainer: Progfou <jean-christophe.andre@auf.org>
+Build-Depends: debhelper (>= 7)
+Standards-Version: 3.8.3
+Section: libs
+Homepage: http://git.auf.org/?p=auf-poste-client.git;a=tree;f=lucid/auf-thunderbird-hack
+
+Package: auf-thunderbird-hack
+Section: libs
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, libgconf2-4, thunderbird
+Description: Bidouille pour améliorer Thunderbird
+ Ce logiciel sert à empêcher Thunderbird d'afficher des fenêtres d'erreur
+ quand il trouve des URI de la forme 'a+b:c' dans un corps de courriel.
+ .
+ Ce problème est dû au fait qu'il cherche alors le protocole 'a+b' dans la
+ base gconf alors que cette dernière ne supporte pas le caractère '+' dans
+ ses noms de clés.
diff --git a/lucid/auf-thunderbird-hack/debian/copyright b/lucid/auf-thunderbird-hack/debian/copyright
new file mode 100644 (file)
index 0000000..5d0555e
--- /dev/null
@@ -0,0 +1,39 @@
+This work was packaged for Debian by:
+
+    Progfou <jean-christophe.andre@auf.org> on Wed, 21 Aug 2013 18:22:13 -0400
+
+It was downloaded from:
+
+    http://git.auf.org/?p=auf-poste-client.git;a=tree;f=lucid/auf-thunderbird-hack
+
+Upstream Author(s):
+
+    Progfou <jean-christophe.andre@auf.org>
+
+Copyright:
+
+    Copyright (C) 2013 Agence universitaire de la Francophonie -- www.auf.org
+
+License:
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This package is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+On Debian systems, the complete text of the GNU General
+Public License version 3 can be found in `/usr/share/common-licenses/GPL-3'.
+
+The Debian packaging is:
+
+    Copyright (C) 2013 Agence universitaire de la Francophonie -- www.auf.org
+
+and is licensed under the GPL version 3, see above.
diff --git a/lucid/auf-thunderbird-hack/debian/dirs b/lucid/auf-thunderbird-hack/debian/dirs
new file mode 100644 (file)
index 0000000..1e4ed44
--- /dev/null
@@ -0,0 +1,2 @@
+usr/lib/thunderbird
+usr/bin
diff --git a/lucid/auf-thunderbird-hack/debian/docs b/lucid/auf-thunderbird-hack/debian/docs
new file mode 100644 (file)
index 0000000..e845566
--- /dev/null
@@ -0,0 +1 @@
+README
diff --git a/lucid/auf-thunderbird-hack/debian/postrm b/lucid/auf-thunderbird-hack/debian/postrm
new file mode 100644 (file)
index 0000000..2b362ae
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+# postrm script for auf-thunderbird-hack
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postrm> `remove'
+#        * <postrm> `purge'
+#        * <old-postrm> `upgrade' <new-version>
+#        * <new-postrm> `failed-upgrade' <old-version>
+#        * <new-postrm> `abort-install'
+#        * <new-postrm> `abort-install' <old-version>
+#        * <new-postrm> `abort-upgrade' <old-version>
+#        * <disappearer's-postrm> `disappear' <overwriter>
+#          <overwriter-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    purge|remove|abort-install|disappear)
+        dpkg-divert --package auf-thunderbird-hack --rename --remove /usr/bin/thunderbird
+    ;;
+
+    upgrade|failed-upgrade|abort-upgrade)
+    ;;
+
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/lucid/auf-thunderbird-hack/debian/preinst b/lucid/auf-thunderbird-hack/debian/preinst
new file mode 100644 (file)
index 0000000..00a0ff4
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+# preinst script for auf-thunderbird-hack
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <new-preinst> `install'
+#        * <new-preinst> `install' <old-version>
+#        * <new-preinst> `upgrade' <old-version>
+#        * <old-preinst> `abort-upgrade' <new-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    install)
+        dpkg-divert --package auf-thunderbird-hack --divert /usr/bin/thunderbird.pre-auf-thunderbird-hack --rename /usr/bin/thunderbird
+    ;;
+
+    upgrade|abort-upgrade)
+    ;;
+
+    *)
+        echo "preinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/lucid/auf-thunderbird-hack/debian/rules b/lucid/auf-thunderbird-hack/debian/rules
new file mode 100755 (executable)
index 0000000..917d9bf
--- /dev/null
@@ -0,0 +1,13 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+       dh  $@
diff --git a/lucid/auf-thunderbird-hack/thunderbird b/lucid/auf-thunderbird-hack/thunderbird
new file mode 100755 (executable)
index 0000000..298de50
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+PACKAGE=auf-thunderbird-hack
+export LD_PRELOAD=/usr/lib/thunderbird/${PACKAGE}.so
+exec /usr/bin/thunderbird.pre-${PACKAGE} "$@"
diff --git a/lucid/auf-thunderbird-hack/thunderbird-test b/lucid/auf-thunderbird-hack/thunderbird-test
new file mode 100644 (file)
index 0000000..d9e8669
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+PACKAGE=auf-thunderbird-hack
+cp -a ${PACKAGE}.so /tmp/
+export LD_PRELOAD=/tmp/${PACKAGE}.so
+exec /usr/bin/thunderbird.pre-${PACKAGE} "$@"
diff --git a/precise/auf-unity-lens-0.1/Makefile b/precise/auf-unity-lens-0.1/Makefile
deleted file mode 100644 (file)
index f52542f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-PACKAGE = $(shell dpkg-parsechangelog | sed -n 's/^Source: //p')
-VERSION = $(shell dpkg-parsechangelog | sed -n 's/^Version: //p')
-DIST = $(shell dpkg-parsechangelog | sed -n 's/^Distribution: //p')
-
-all:
-
-clean:
-
-install:
-       install -c -m 0755 $(PACKAGE) $(DESTDIR)/usr/lib/$(APPNAME)/
-       install -c -m 0644 $(PACKAGE).service $(DESTDIR)/usr/share/dbus-1/services/
-       install -c -m 0644 $(PACKAGE).lens $(DESTDIR)/usr/share/unity/lenses/$(APPNAME)/
-
-deb:
-       debuild -I.git -I*.ex -b -us -uc && \
-       echo -e "\n\n==> Lancer \"sudo debi\" pour tester l'installation.\n"
-
-release:
-       debuild -I.git -I*.ex -tc -sa -us -uc && debrelease --dput $(DIST)-test
-
diff --git a/precise/auf-unity-lens-0.1/README b/precise/auf-unity-lens-0.1/README
deleted file mode 100644 (file)
index 994afe9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Ce logiciel est une lentille pour effectuer des recherches dans les bases
-de données de l'AUF.
-
-Les recherches peuvent se faire selon le nom de l'employé, sa fonction,
-le code ISO-3166-2 d'un pays, le nom d'un pays, le nom d'une région ou
-encore le numéro de téléphone IP.
-
-Le raccourci déclencheur est Logo+Z.
-
-Attention :
-
- L'utilisation de cette lentille nécessite d'avoir été connecté au réseau
- interne de l'AUF (RPV), soit au moment de l'installation du paquet Debian,
- soit au moins une fois au moment des mises à jour des données auf-refer
- (à 7h ou à 13h).
-
- -- Progfou <jean-christophe.andre@auf.org>  Mon, 19 Aug 2013 15:00:13 -0400
diff --git a/precise/auf-unity-lens-0.1/auf-unity-lens b/precise/auf-unity-lens-0.1/auf-unity-lens
deleted file mode 100755 (executable)
index 9cc9a4a..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
-from singlet.utils import run_lens
-#import subprocess
-import aufrefer
-
-PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
-
-class AUFLens(SingleScopeLens):
-    class Meta:
-        name = 'auf'
-        title = 'AUF Search'
-        description = 'AUF Search'
-        search_hint = 'Search the AUF'
-        icon = 'auf-menu-logo.png'
-        search_on_blank = False
-
-    icon = '/usr/share/icons/auf-menu-logo.png'
-    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
-    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
-
-    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
-    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
-
-    url_bureau = {
-        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
-        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
-        'BA':   'http://www.auf.org/bureau-ameriques/',
-        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
-        'BC':   'http://www.auf.org/bureau-caraibe/',
-        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
-        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
-        'BM':   'http://www.auf.org/bureau-maghreb/',
-        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
-        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
-    }
-
-    def _enhance_info(self, info):
-        info['x-adel'] = info['courriel'] and info['courriel'] or ''
-        info['x-user'] = info['x-adel'].partition('@')[0]
-        if info['x-user'].count('.') > 1: # nom vietnamien
-            info['x-nom'] = u'%s %s' % (info['nom'], info['prenom'])
-        else:
-            info['x-nom'] = u'%s %s' % (info['prenom'], info['nom'])
-        info['x-tel_ip'] = info['telephone_ip']
-        if info['telephone_ip_nomade']:
-            info['x-tel_ip'] = u'%s / %s' % (info['x-tel_ip'], info['telephone_ip_nomade'])
-        info['x-photo'] = PHOTO_URL % info['id']
-
-        code_implant = info['implantation_physique']
-        if code_implant in self.implantation:
-            info['x-implant'] = self.implantation[code_implant]
-            info['x-code_pays'] = info['x-implant']['adresse_physique_pays'].upper()
-            info['x-lieu'] = u'%s / %s' % (info['x-implant']['nom_court'], info['x-code_pays'])
-        else:
-            info['x-implant'] = dict()
-            info['x-code_pays'] = '??'
-            info['x-lieu'] = u'(implantation inconnue)'
-        return info
-
-    def search(self, search, results):
-        search = search.lstrip()
-
-        # strict minimum 2 caractères
-        if len(search) < 2:
-            return
-
-        # recherche par code de pays ISO-3166
-        if len(search) == 2:
-            search = search.upper()
-            if search not in self.iso_3166_fr and search != '??':
-                return
-            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
-            for info in aufrefer.get('datamaster-employe.json'):
-                info = self._enhance_info(info)
-                if info['x-code_pays'] != search:
-                    continue
-                desc = u'%s\n%s\n%s' % (info['x-tel_ip'], info['fonction'], info['x-lieu'])
-                results.append('mailto:%s <%s>' % (info['x-nom'], info['x-adel']),
-                    info['x-photo'], self.cat_employes,
-                    "text/html", info['x-nom'], desc, 'C:'+search)
-            return
-
-        # recherche générale
-        if type(search) == str:
-            search = unicode(search, 'utf-8')
-        search = search.lower()
-        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
-            if search in desc.lower():
-                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
-                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
-        for info in aufrefer.get('datamaster-employe.json'):
-            info = self._enhance_info(info)
-            if (search in info['x-user']) or (search in info['x-nom'].lower()) or (search in info['fonction'].lower()) or \
-               (search in info['x-lieu'].lower()) or (search in info['x-implant'].get('adresse_physique_ville', '').lower()) or \
-               (search in info['x-implant'].get('nom', '').lower()) or \
-               (search in info['x-implant'].get('nom_court', '').lower()) or (search in info['x-implant'].get('nom_long', '').lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in info['x-tel_ip'].replace(' ', '')):
-                desc = u'%s\n%s\n%s' % (info['x-tel_ip'], info['fonction'], info['x-lieu'])
-                results.append('mailto:%s <%s>' % (info['x-nom'], info['x-adel']),
-                    info['x-photo'], self.cat_employes,
-                    "text/html", info['x-nom'], desc, 'C:'+search)
-
-    #def handle_uri(self, scope, uri):
-    #    subprocess.call(['sensible-browser', uri])
-    #    return SingleScopeLens.hide_dash_response(self, uri='')
-
-if __name__ == "__main__":
-    import sys
-    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens-0.1/auf-unity-lens.0 b/precise/auf-unity-lens-0.1/auf-unity-lens.0
deleted file mode 100755 (executable)
index 9607213..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
-from singlet.utils import run_lens
-#import subprocess
-import os
-import os.path
-import urllib
-import aufrefer
-
-PHOTOS_DIR = '/var/lib/auf-refer-photos'
-
-PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
-PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
-
-class AUFLens(SingleScopeLens):
-    class Meta:
-        name = 'auf'
-        title = 'AUF Search'
-        description = 'AUF Search'
-        search_hint = 'Search the AUF'
-        icon = 'auf-menu-logo.png'
-        search_on_blank = False
-
-    icon = '/usr/share/icons/auf-menu-logo.png'
-    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
-    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
-    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
-
-    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
-    pays_implant = aufrefer.get('pays-implant.json')
-    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
-
-    url_bureau = {
-        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
-        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
-        'BA':   'http://www.auf.org/bureau-ameriques/',
-        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
-        'BC':   'http://www.auf.org/bureau-caraibe/',
-        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
-        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
-        'BM':   'http://www.auf.org/bureau-maghreb/',
-        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
-        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
-    }
-
-    def search(self, search, results):
-        search = search.lstrip()
-
-        # strict minimum 2 caractères
-        if len(search) < 2:
-            return
-
-        # recherche par code de pays ISO-3166
-        if len(search) == 2:
-            search = search.upper()
-            if search not in self.iso_3166_fr and search != '??':
-                return
-            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
-            for info in aufrefer.get('datamaster-employe.json'):
-                code_implant = info['implantation_physique']
-                if code_implant in self.implantation:
-                    implant = self.implantation[code_implant]
-                    code_pays = implant['adresse_physique_pays'].upper()
-                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-                else:
-                    implant = dict()
-                    code_pays = '??'
-                    lieu = u'(implantation inconnue)'
-                if code_pays != search:
-                    continue
-                adel = info['courriel'] and info['courriel'] or ''
-                user = adel.partition('@')[0]
-                if user.count('.') > 1: # nom vietnamien
-                    nom = u'%s %s' % (info['nom'], info['prenom'])
-                else:
-                    nom = u'%s %s' % (info['prenom'], info['nom'])
-                tel_ip = info['telephone_ip']
-                if info['telephone_ip_nomade']:
-                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-                photo = PHOTO_CACHE % info['id']
-                if not os.path.exists(photo) and not os.path.exists(photo + '_disabled'):
-                    try:
-                        f, h = urllib.urlretrieve(PHOTO_URL % info['id'], photo)
-                        if not h.type.startswith('image/'):
-                            os.unlink(photo)
-                            open(photo + '_disabled', 'w').close()
-                    except:
-                        pass
-                if not os.path.exists(photo):
-                    photo = 'avatar-default'
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), PHOTO_URL % info['id'], self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-            return
-
-        # recherche générale
-        if type(search) == str:
-            search = unicode(search, 'utf-8')
-        search = search.lower()
-        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
-            if search in desc.lower():
-                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
-                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
-        for info in aufrefer.get('annuaire.json'):
-            user = info['adel'].split('@')[0]
-            if 'test' in user:
-                continue
-            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
-            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
-            if (search in user) or (search in nom.lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
-                if not os.path.exists(photo):
-                    photo = 'avatar-default'
-                implant = info['implant'].upper()
-                pays = self.pays_implant.get(implant, implant)
-                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
-                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
-                    "text/html", nom, desc, 'C:'+search)
-        for info in aufrefer.get('datamaster-employe.json'):
-            adel = info['courriel'] and info['courriel'] or ''
-            user = adel.partition('@')[0]
-            if user.count('.') > 1: # nom vietnamien
-                nom = u'%s %s' % (info['nom'], info['prenom'])
-            else:
-                nom = u'%s %s' % (info['prenom'], info['nom'])
-            tel_ip = info['telephone_ip']
-            if info['telephone_ip_nomade']:
-                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = PHOTO_CACHE % info['id']
-                if not os.path.exists(photo) and not os.path.exists(photo + '_disabled'):
-                    try:
-                        f, h = urllib.urlretrieve(PHOTO_URL % info['id'], photo)
-                        if not h.type.startswith('image/'):
-                            os.unlink(photo)
-                            open(photo + '_disabled', 'w').close()
-                    except:
-                        pass
-                if not os.path.exists(photo):
-                    photo = 'avatar-default'
-                code_implant = info['implantation_physique']
-                if code_implant in self.implantation:
-                    implant = self.implantation[code_implant]
-                    code_pays = implant['adresse_physique_pays'].upper()
-                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-                else:
-                    implant = dict()
-                    code_pays = '??'
-                    lieu = u'(implantation inconnue)'
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-
-    #def handle_uri(self, scope, uri):
-    #    subprocess.call(['sensible-browser', uri])
-    #    return SingleScopeLens.hide_dash_response(self, uri='')
-
-if __name__ == "__main__":
-    import sys
-    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens-0.1/auf-unity-lens.1 b/precise/auf-unity-lens-0.1/auf-unity-lens.1
deleted file mode 100755 (executable)
index e111103..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
-from singlet.utils import run_lens
-#import subprocess
-import os
-import os.path
-import urllib
-import aufrefer
-
-PHOTOS_DIR = '/var/lib/auf-refer-photos'
-
-PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
-PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
-
-class AUFLens(SingleScopeLens):
-    class Meta:
-        name = 'auf'
-        title = 'AUF Search'
-        description = 'AUF Search'
-        search_hint = 'Search the AUF'
-        icon = 'auf-menu-logo.png'
-        search_on_blank = False
-
-    icon = '/usr/share/icons/auf-menu-logo.png'
-    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
-    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
-    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
-
-    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
-    pays_implant = aufrefer.get('pays-implant.json')
-    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
-
-    url_bureau = {
-        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
-        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
-        'BA':   'http://www.auf.org/bureau-ameriques/',
-        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
-        'BC':   'http://www.auf.org/bureau-caraibe/',
-        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
-        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
-        'BM':   'http://www.auf.org/bureau-maghreb/',
-        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
-        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
-    }
-
-    def search(self, search, results):
-        search = search.lstrip()
-
-        # strict minimum 2 caractères
-        if len(search) < 2:
-            return
-
-        # recherche par code de pays ISO-3166
-        if len(search) == 2:
-            search = search.upper()
-            if search not in self.iso_3166_fr and search != '??':
-                return
-            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
-            for info in aufrefer.get('datamaster-employe.json'):
-                code_implant = info['implantation_physique']
-                if code_implant in self.implantation:
-                    implant = self.implantation[code_implant]
-                    code_pays = implant['adresse_physique_pays'].upper()
-                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-                else:
-                    implant = dict()
-                    code_pays = '??'
-                    lieu = u'(implantation inconnue)'
-                if code_pays != search:
-                    continue
-                adel = info['courriel'] and info['courriel'] or ''
-                user = adel.partition('@')[0]
-                if user.count('.') > 1: # nom vietnamien
-                    nom = u'%s %s' % (info['nom'], info['prenom'])
-                else:
-                    nom = u'%s %s' % (info['prenom'], info['nom'])
-                tel_ip = info['telephone_ip']
-                if info['telephone_ip_nomade']:
-                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-                photo = PHOTO_URL % info['id']
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-            return
-
-        # recherche générale
-        if type(search) == str:
-            search = unicode(search, 'utf-8')
-        search = search.lower()
-        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
-            if search in desc.lower():
-                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
-                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
-        for info in aufrefer.get('annuaire.json'):
-            user = info['adel'].split('@')[0]
-            if 'test' in user:
-                continue
-            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
-            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
-            if (search in user) or (search in nom.lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
-                if not os.path.exists(photo):
-                    photo = 'avatar-default'
-                implant = info['implant'].upper()
-                pays = self.pays_implant.get(implant, implant)
-                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
-                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
-                    "text/html", nom, desc, 'C:'+search)
-        for info in aufrefer.get('datamaster-employe.json'):
-            adel = info['courriel'] and info['courriel'] or ''
-            user = adel.partition('@')[0]
-            if user.count('.') > 1: # nom vietnamien
-                nom = u'%s %s' % (info['nom'], info['prenom'])
-            else:
-                nom = u'%s %s' % (info['prenom'], info['nom'])
-            tel_ip = info['telephone_ip']
-            if info['telephone_ip_nomade']:
-                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-            code_implant = info['implantation_physique']
-            if code_implant in self.implantation:
-                implant = self.implantation[code_implant]
-                code_pays = implant['adresse_physique_pays'].upper()
-                lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-            else:
-                implant = dict()
-                code_pays = '??'
-                lieu = u'(implantation inconnue)'
-            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
-               (search in lieu.lower()) or (search in implant.get('adresse_physique_ville', '').lower()) or \
-               (search in implant.get('nom', '').lower()) or \
-               (search in implant.get('nom_court', '').lower()) or (search in implant.get('nom_long', '').lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = PHOTO_URL % info['id']
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-
-    #def handle_uri(self, scope, uri):
-    #    subprocess.call(['sensible-browser', uri])
-    #    return SingleScopeLens.hide_dash_response(self, uri='')
-
-if __name__ == "__main__":
-    import sys
-    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens-0.1/auf-unity-lens.lens b/precise/auf-unity-lens-0.1/auf-unity-lens.lens
deleted file mode 100644 (file)
index 9196b05..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-[Lens]
-DBusName=unity.singlet.lens.auf
-DBusPath=/unity/singlet/lens/auf
-Icon=/usr/share/icons/auf-menu-logo.png
-Name=AUF
-Description=AUF Search
-Description[fr]=Recherche AUF
-SearchHint=Enter name or content you would like to search for at AUF
-SearchHint[fr]=Entrez le nom ou le contenu que vous recherchez à l'AUF
-Shortcut=z
-
-#[Desktop Entry]
-#X-Ubuntu-Gettext-Domain=auf-unity-lens
diff --git a/precise/auf-unity-lens-0.1/auf-unity-lens.service b/precise/auf-unity-lens-0.1/auf-unity-lens.service
deleted file mode 100644 (file)
index 2bbb252..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-[D-BUS Service]
-Name=unity.singlet.lens.auf
-Exec=/usr/lib/auf-unity-lens/auf-unity-lens
diff --git a/precise/auf-unity-lens-0.1/debian/changelog b/precise/auf-unity-lens-0.1/debian/changelog
deleted file mode 100644 (file)
index ecbbe3c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-auf-unity-lens (0.1) precise; urgency=low
-
-  * Première version empaquetée (suite aux expérimentations en avril 2013).
-
- -- Progfou <jean-christophe.andre@auf.org>  Mon, 19 Aug 2013 15:00:13 -0400
diff --git a/precise/auf-unity-lens-0.1/debian/compat b/precise/auf-unity-lens-0.1/debian/compat
deleted file mode 100644 (file)
index 45a4fb7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/precise/auf-unity-lens-0.1/debian/control b/precise/auf-unity-lens-0.1/debian/control
deleted file mode 100644 (file)
index d1724f3..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Source: auf-unity-lens
-Section: python
-Priority: extra
-Build-Depends: debhelper (>= 8)
-Maintainer: Progfou <jean-christophe.andre@auf.org>
-Standards-Version: 3.9.3
-Homepage: http://git.auf.org/?p=auf-poste-client.git;a=tree;f=precise/auf-unity-lens
-Vcs-Git: git://git.auf.org/auf-poste-client.git
-Vcs-Browser: http://git.auf.org/?p=auf-poste-client.git;a=summary
-X-Python-Version: >= 2.6
-
-Package: auf-unity-lens
-Architecture: all
-Depends: ${misc:Depends}, ${python:Depends}, python-unity-singlet (>= 0.3), auf-refer
-Description: Lentille de recherche AUF
- Lentille pour effectuer des recherches parmi les employés de l'AUF.
- .
- Les recherches peuvent se faire selon le nom de l'employé, sa fonction,
- le code ISO-3166-2 d'un pays, le nom d'un pays, le nom d'une région ou
- encore le numéro de téléphone IP.
- .
- Le raccourci déclencheur est Logo+Z.
diff --git a/precise/auf-unity-lens-0.1/debian/copyright b/precise/auf-unity-lens-0.1/debian/copyright
deleted file mode 100644 (file)
index 7986654..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-Format: http://dep.debian.net/deps/dep5
-Upstream-Name: auf-unity-lens
-Upstream-Contact: Progfou <jean-christophe.andre@auf.org>
-Source: http://git.auf.org/?p=auf-poste-client.git;a=tree;f=precise/auf-unity-lens
-
-Files: *
-Copyright: 2013 Agence universitaire de la Francophonie -- www.auf.org
-License: GPL-3.0+
-
-License: GPL-3.0+
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- .
- On Debian systems, the complete text of the GNU General
- Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
diff --git a/precise/auf-unity-lens-0.1/debian/dirs b/precise/auf-unity-lens-0.1/debian/dirs
deleted file mode 100644 (file)
index b70c9ca..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-usr/lib/auf-unity-lens
-usr/share/dbus-1/services
-usr/share/unity/lenses/auf-unity-lens
diff --git a/precise/auf-unity-lens-0.1/debian/docs b/precise/auf-unity-lens-0.1/debian/docs
deleted file mode 100644 (file)
index e845566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-README
diff --git a/precise/auf-unity-lens-0.1/debian/postinst b/precise/auf-unity-lens-0.1/debian/postinst
deleted file mode 100644 (file)
index 59676c8..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-# postinst script for auf-unity-lens
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-#        * <postinst> `configure' <most-recently-configured-version>
-#        * <old-postinst> `abort-upgrade' <new version>
-#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
-#          <new-version>
-#        * <postinst> `abort-remove'
-#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
-#          <failed-install-package> <version> `removing'
-#          <conflicting-package> <version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-REFS="datamaster-employe datamaster-implantation bureaux iso-3166-fr"
-
-case "$1" in
-    configure)
-        for ref in $REFS
-        do
-            auf-refer -a "${ref}.json"
-        done
-    ;;
-
-    abort-upgrade|abort-remove|abort-deconfigure)
-    ;;
-
-    *)
-        echo "postinst called with unknown argument \`$1'" >&2
-        exit 1
-    ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
diff --git a/precise/auf-unity-lens-0.1/debian/rules b/precise/auf-unity-lens-0.1/debian/rules
deleted file mode 100755 (executable)
index b760bee..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# This file was originally written by Joey Hess and Craig Small.
-# As a special exception, when this file is copied by dh-make into a
-# dh-make output file, you may use that output file without restriction.
-# This special exception was added by Craig Small in version 0.37 of dh-make.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-%:
-       dh $@ 
diff --git a/precise/auf-unity-lens-0.1/unity-lens-auf/ula.py b/precise/auf-unity-lens-0.1/unity-lens-auf/ula.py
deleted file mode 120000 (symlink)
index 3f6fa7a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unity-lens-auf.2
\ No newline at end of file
diff --git a/precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf b/precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf
deleted file mode 100755 (executable)
index e111103..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
-from singlet.utils import run_lens
-#import subprocess
-import os
-import os.path
-import urllib
-import aufrefer
-
-PHOTOS_DIR = '/var/lib/auf-refer-photos'
-
-PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
-PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
-
-class AUFLens(SingleScopeLens):
-    class Meta:
-        name = 'auf'
-        title = 'AUF Search'
-        description = 'AUF Search'
-        search_hint = 'Search the AUF'
-        icon = 'auf-menu-logo.png'
-        search_on_blank = False
-
-    icon = '/usr/share/icons/auf-menu-logo.png'
-    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
-    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
-    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
-
-    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
-    pays_implant = aufrefer.get('pays-implant.json')
-    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
-
-    url_bureau = {
-        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
-        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
-        'BA':   'http://www.auf.org/bureau-ameriques/',
-        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
-        'BC':   'http://www.auf.org/bureau-caraibe/',
-        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
-        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
-        'BM':   'http://www.auf.org/bureau-maghreb/',
-        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
-        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
-    }
-
-    def search(self, search, results):
-        search = search.lstrip()
-
-        # strict minimum 2 caractères
-        if len(search) < 2:
-            return
-
-        # recherche par code de pays ISO-3166
-        if len(search) == 2:
-            search = search.upper()
-            if search not in self.iso_3166_fr and search != '??':
-                return
-            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
-            for info in aufrefer.get('datamaster-employe.json'):
-                code_implant = info['implantation_physique']
-                if code_implant in self.implantation:
-                    implant = self.implantation[code_implant]
-                    code_pays = implant['adresse_physique_pays'].upper()
-                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-                else:
-                    implant = dict()
-                    code_pays = '??'
-                    lieu = u'(implantation inconnue)'
-                if code_pays != search:
-                    continue
-                adel = info['courriel'] and info['courriel'] or ''
-                user = adel.partition('@')[0]
-                if user.count('.') > 1: # nom vietnamien
-                    nom = u'%s %s' % (info['nom'], info['prenom'])
-                else:
-                    nom = u'%s %s' % (info['prenom'], info['nom'])
-                tel_ip = info['telephone_ip']
-                if info['telephone_ip_nomade']:
-                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-                photo = PHOTO_URL % info['id']
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-            return
-
-        # recherche générale
-        if type(search) == str:
-            search = unicode(search, 'utf-8')
-        search = search.lower()
-        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
-            if search in desc.lower():
-                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
-                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
-        for info in aufrefer.get('annuaire.json'):
-            user = info['adel'].split('@')[0]
-            if 'test' in user:
-                continue
-            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
-            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
-            if (search in user) or (search in nom.lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
-                if not os.path.exists(photo):
-                    photo = 'avatar-default'
-                implant = info['implant'].upper()
-                pays = self.pays_implant.get(implant, implant)
-                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
-                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
-                    "text/html", nom, desc, 'C:'+search)
-        for info in aufrefer.get('datamaster-employe.json'):
-            adel = info['courriel'] and info['courriel'] or ''
-            user = adel.partition('@')[0]
-            if user.count('.') > 1: # nom vietnamien
-                nom = u'%s %s' % (info['nom'], info['prenom'])
-            else:
-                nom = u'%s %s' % (info['prenom'], info['nom'])
-            tel_ip = info['telephone_ip']
-            if info['telephone_ip_nomade']:
-                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-            code_implant = info['implantation_physique']
-            if code_implant in self.implantation:
-                implant = self.implantation[code_implant]
-                code_pays = implant['adresse_physique_pays'].upper()
-                lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-            else:
-                implant = dict()
-                code_pays = '??'
-                lieu = u'(implantation inconnue)'
-            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
-               (search in lieu.lower()) or (search in implant.get('adresse_physique_ville', '').lower()) or \
-               (search in implant.get('nom', '').lower()) or \
-               (search in implant.get('nom_court', '').lower()) or (search in implant.get('nom_long', '').lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = PHOTO_URL % info['id']
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-
-    #def handle_uri(self, scope, uri):
-    #    subprocess.call(['sensible-browser', uri])
-    #    return SingleScopeLens.hide_dash_response(self, uri='')
-
-if __name__ == "__main__":
-    import sys
-    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf.0 b/precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf.0
deleted file mode 100755 (executable)
index 9607213..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
-from singlet.utils import run_lens
-#import subprocess
-import os
-import os.path
-import urllib
-import aufrefer
-
-PHOTOS_DIR = '/var/lib/auf-refer-photos'
-
-PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
-PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
-
-class AUFLens(SingleScopeLens):
-    class Meta:
-        name = 'auf'
-        title = 'AUF Search'
-        description = 'AUF Search'
-        search_hint = 'Search the AUF'
-        icon = 'auf-menu-logo.png'
-        search_on_blank = False
-
-    icon = '/usr/share/icons/auf-menu-logo.png'
-    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
-    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
-    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
-
-    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
-    pays_implant = aufrefer.get('pays-implant.json')
-    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
-
-    url_bureau = {
-        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
-        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
-        'BA':   'http://www.auf.org/bureau-ameriques/',
-        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
-        'BC':   'http://www.auf.org/bureau-caraibe/',
-        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
-        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
-        'BM':   'http://www.auf.org/bureau-maghreb/',
-        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
-        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
-    }
-
-    def search(self, search, results):
-        search = search.lstrip()
-
-        # strict minimum 2 caractères
-        if len(search) < 2:
-            return
-
-        # recherche par code de pays ISO-3166
-        if len(search) == 2:
-            search = search.upper()
-            if search not in self.iso_3166_fr and search != '??':
-                return
-            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
-            for info in aufrefer.get('datamaster-employe.json'):
-                code_implant = info['implantation_physique']
-                if code_implant in self.implantation:
-                    implant = self.implantation[code_implant]
-                    code_pays = implant['adresse_physique_pays'].upper()
-                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-                else:
-                    implant = dict()
-                    code_pays = '??'
-                    lieu = u'(implantation inconnue)'
-                if code_pays != search:
-                    continue
-                adel = info['courriel'] and info['courriel'] or ''
-                user = adel.partition('@')[0]
-                if user.count('.') > 1: # nom vietnamien
-                    nom = u'%s %s' % (info['nom'], info['prenom'])
-                else:
-                    nom = u'%s %s' % (info['prenom'], info['nom'])
-                tel_ip = info['telephone_ip']
-                if info['telephone_ip_nomade']:
-                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-                photo = PHOTO_CACHE % info['id']
-                if not os.path.exists(photo) and not os.path.exists(photo + '_disabled'):
-                    try:
-                        f, h = urllib.urlretrieve(PHOTO_URL % info['id'], photo)
-                        if not h.type.startswith('image/'):
-                            os.unlink(photo)
-                            open(photo + '_disabled', 'w').close()
-                    except:
-                        pass
-                if not os.path.exists(photo):
-                    photo = 'avatar-default'
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), PHOTO_URL % info['id'], self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-            return
-
-        # recherche générale
-        if type(search) == str:
-            search = unicode(search, 'utf-8')
-        search = search.lower()
-        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
-            if search in desc.lower():
-                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
-                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
-        for info in aufrefer.get('annuaire.json'):
-            user = info['adel'].split('@')[0]
-            if 'test' in user:
-                continue
-            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
-            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
-            if (search in user) or (search in nom.lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
-                if not os.path.exists(photo):
-                    photo = 'avatar-default'
-                implant = info['implant'].upper()
-                pays = self.pays_implant.get(implant, implant)
-                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
-                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
-                    "text/html", nom, desc, 'C:'+search)
-        for info in aufrefer.get('datamaster-employe.json'):
-            adel = info['courriel'] and info['courriel'] or ''
-            user = adel.partition('@')[0]
-            if user.count('.') > 1: # nom vietnamien
-                nom = u'%s %s' % (info['nom'], info['prenom'])
-            else:
-                nom = u'%s %s' % (info['prenom'], info['nom'])
-            tel_ip = info['telephone_ip']
-            if info['telephone_ip_nomade']:
-                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = PHOTO_CACHE % info['id']
-                if not os.path.exists(photo) and not os.path.exists(photo + '_disabled'):
-                    try:
-                        f, h = urllib.urlretrieve(PHOTO_URL % info['id'], photo)
-                        if not h.type.startswith('image/'):
-                            os.unlink(photo)
-                            open(photo + '_disabled', 'w').close()
-                    except:
-                        pass
-                if not os.path.exists(photo):
-                    photo = 'avatar-default'
-                code_implant = info['implantation_physique']
-                if code_implant in self.implantation:
-                    implant = self.implantation[code_implant]
-                    code_pays = implant['adresse_physique_pays'].upper()
-                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-                else:
-                    implant = dict()
-                    code_pays = '??'
-                    lieu = u'(implantation inconnue)'
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-
-    #def handle_uri(self, scope, uri):
-    #    subprocess.call(['sensible-browser', uri])
-    #    return SingleScopeLens.hide_dash_response(self, uri='')
-
-if __name__ == "__main__":
-    import sys
-    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf.1 b/precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf.1
deleted file mode 100755 (executable)
index e111103..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
-from singlet.utils import run_lens
-#import subprocess
-import os
-import os.path
-import urllib
-import aufrefer
-
-PHOTOS_DIR = '/var/lib/auf-refer-photos'
-
-PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
-PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
-
-class AUFLens(SingleScopeLens):
-    class Meta:
-        name = 'auf'
-        title = 'AUF Search'
-        description = 'AUF Search'
-        search_hint = 'Search the AUF'
-        icon = 'auf-menu-logo.png'
-        search_on_blank = False
-
-    icon = '/usr/share/icons/auf-menu-logo.png'
-    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
-    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
-    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
-
-    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
-    pays_implant = aufrefer.get('pays-implant.json')
-    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
-
-    url_bureau = {
-        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
-        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
-        'BA':   'http://www.auf.org/bureau-ameriques/',
-        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
-        'BC':   'http://www.auf.org/bureau-caraibe/',
-        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
-        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
-        'BM':   'http://www.auf.org/bureau-maghreb/',
-        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
-        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
-    }
-
-    def search(self, search, results):
-        search = search.lstrip()
-
-        # strict minimum 2 caractères
-        if len(search) < 2:
-            return
-
-        # recherche par code de pays ISO-3166
-        if len(search) == 2:
-            search = search.upper()
-            if search not in self.iso_3166_fr and search != '??':
-                return
-            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
-            for info in aufrefer.get('datamaster-employe.json'):
-                code_implant = info['implantation_physique']
-                if code_implant in self.implantation:
-                    implant = self.implantation[code_implant]
-                    code_pays = implant['adresse_physique_pays'].upper()
-                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-                else:
-                    implant = dict()
-                    code_pays = '??'
-                    lieu = u'(implantation inconnue)'
-                if code_pays != search:
-                    continue
-                adel = info['courriel'] and info['courriel'] or ''
-                user = adel.partition('@')[0]
-                if user.count('.') > 1: # nom vietnamien
-                    nom = u'%s %s' % (info['nom'], info['prenom'])
-                else:
-                    nom = u'%s %s' % (info['prenom'], info['nom'])
-                tel_ip = info['telephone_ip']
-                if info['telephone_ip_nomade']:
-                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-                photo = PHOTO_URL % info['id']
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-            return
-
-        # recherche générale
-        if type(search) == str:
-            search = unicode(search, 'utf-8')
-        search = search.lower()
-        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
-            if search in desc.lower():
-                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
-                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
-        for info in aufrefer.get('annuaire.json'):
-            user = info['adel'].split('@')[0]
-            if 'test' in user:
-                continue
-            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
-            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
-            if (search in user) or (search in nom.lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
-                if not os.path.exists(photo):
-                    photo = 'avatar-default'
-                implant = info['implant'].upper()
-                pays = self.pays_implant.get(implant, implant)
-                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
-                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
-                    "text/html", nom, desc, 'C:'+search)
-        for info in aufrefer.get('datamaster-employe.json'):
-            adel = info['courriel'] and info['courriel'] or ''
-            user = adel.partition('@')[0]
-            if user.count('.') > 1: # nom vietnamien
-                nom = u'%s %s' % (info['nom'], info['prenom'])
-            else:
-                nom = u'%s %s' % (info['prenom'], info['nom'])
-            tel_ip = info['telephone_ip']
-            if info['telephone_ip_nomade']:
-                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
-            code_implant = info['implantation_physique']
-            if code_implant in self.implantation:
-                implant = self.implantation[code_implant]
-                code_pays = implant['adresse_physique_pays'].upper()
-                lieu = u'%s / %s' % (implant['nom_court'], code_pays)
-            else:
-                implant = dict()
-                code_pays = '??'
-                lieu = u'(implantation inconnue)'
-            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
-               (search in lieu.lower()) or (search in implant.get('adresse_physique_ville', '').lower()) or \
-               (search in implant.get('nom', '').lower()) or \
-               (search in implant.get('nom_court', '').lower()) or (search in implant.get('nom_long', '').lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
-                photo = PHOTO_URL % info['id']
-                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
-                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
-                    "text/html", nom, desc, 'C:'+search)
-
-    #def handle_uri(self, scope, uri):
-    #    subprocess.call(['sensible-browser', uri])
-    #    return SingleScopeLens.hide_dash_response(self, uri='')
-
-if __name__ == "__main__":
-    import sys
-    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf.2 b/precise/auf-unity-lens-0.1/unity-lens-auf/unity-lens-auf.2
deleted file mode 100755 (executable)
index 9cc9a4a..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
-from singlet.utils import run_lens
-#import subprocess
-import aufrefer
-
-PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
-
-class AUFLens(SingleScopeLens):
-    class Meta:
-        name = 'auf'
-        title = 'AUF Search'
-        description = 'AUF Search'
-        search_hint = 'Search the AUF'
-        icon = 'auf-menu-logo.png'
-        search_on_blank = False
-
-    icon = '/usr/share/icons/auf-menu-logo.png'
-    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
-    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
-
-    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
-    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
-
-    url_bureau = {
-        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
-        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
-        'BA':   'http://www.auf.org/bureau-ameriques/',
-        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
-        'BC':   'http://www.auf.org/bureau-caraibe/',
-        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
-        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
-        'BM':   'http://www.auf.org/bureau-maghreb/',
-        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
-        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
-    }
-
-    def _enhance_info(self, info):
-        info['x-adel'] = info['courriel'] and info['courriel'] or ''
-        info['x-user'] = info['x-adel'].partition('@')[0]
-        if info['x-user'].count('.') > 1: # nom vietnamien
-            info['x-nom'] = u'%s %s' % (info['nom'], info['prenom'])
-        else:
-            info['x-nom'] = u'%s %s' % (info['prenom'], info['nom'])
-        info['x-tel_ip'] = info['telephone_ip']
-        if info['telephone_ip_nomade']:
-            info['x-tel_ip'] = u'%s / %s' % (info['x-tel_ip'], info['telephone_ip_nomade'])
-        info['x-photo'] = PHOTO_URL % info['id']
-
-        code_implant = info['implantation_physique']
-        if code_implant in self.implantation:
-            info['x-implant'] = self.implantation[code_implant]
-            info['x-code_pays'] = info['x-implant']['adresse_physique_pays'].upper()
-            info['x-lieu'] = u'%s / %s' % (info['x-implant']['nom_court'], info['x-code_pays'])
-        else:
-            info['x-implant'] = dict()
-            info['x-code_pays'] = '??'
-            info['x-lieu'] = u'(implantation inconnue)'
-        return info
-
-    def search(self, search, results):
-        search = search.lstrip()
-
-        # strict minimum 2 caractères
-        if len(search) < 2:
-            return
-
-        # recherche par code de pays ISO-3166
-        if len(search) == 2:
-            search = search.upper()
-            if search not in self.iso_3166_fr and search != '??':
-                return
-            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
-            for info in aufrefer.get('datamaster-employe.json'):
-                info = self._enhance_info(info)
-                if info['x-code_pays'] != search:
-                    continue
-                desc = u'%s\n%s\n%s' % (info['x-tel_ip'], info['fonction'], info['x-lieu'])
-                results.append('mailto:%s <%s>' % (info['x-nom'], info['x-adel']),
-                    info['x-photo'], self.cat_employes,
-                    "text/html", info['x-nom'], desc, 'C:'+search)
-            return
-
-        # recherche générale
-        if type(search) == str:
-            search = unicode(search, 'utf-8')
-        search = search.lower()
-        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
-            if search in desc.lower():
-                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
-                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
-        for info in aufrefer.get('datamaster-employe.json'):
-            info = self._enhance_info(info)
-            if (search in info['x-user']) or (search in info['x-nom'].lower()) or (search in info['fonction'].lower()) or \
-               (search in info['x-lieu'].lower()) or (search in info['x-implant'].get('adresse_physique_ville', '').lower()) or \
-               (search in info['x-implant'].get('nom', '').lower()) or \
-               (search in info['x-implant'].get('nom_court', '').lower()) or (search in info['x-implant'].get('nom_long', '').lower()) or \
-               (search.replace(' ', '').isdigit() and search.replace(' ', '') in info['x-tel_ip'].replace(' ', '')):
-                desc = u'%s\n%s\n%s' % (info['x-tel_ip'], info['fonction'], info['x-lieu'])
-                results.append('mailto:%s <%s>' % (info['x-nom'], info['x-adel']),
-                    info['x-photo'], self.cat_employes,
-                    "text/html", info['x-nom'], desc, 'C:'+search)
-
-    #def handle_uri(self, scope, uri):
-    #    subprocess.call(['sensible-browser', uri])
-    #    return SingleScopeLens.hide_dash_response(self, uri='')
-
-if __name__ == "__main__":
-    import sys
-    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens/Makefile b/precise/auf-unity-lens/Makefile
new file mode 100644 (file)
index 0000000..f52542f
--- /dev/null
@@ -0,0 +1,20 @@
+PACKAGE = $(shell dpkg-parsechangelog | sed -n 's/^Source: //p')
+VERSION = $(shell dpkg-parsechangelog | sed -n 's/^Version: //p')
+DIST = $(shell dpkg-parsechangelog | sed -n 's/^Distribution: //p')
+
+all:
+
+clean:
+
+install:
+       install -c -m 0755 $(PACKAGE) $(DESTDIR)/usr/lib/$(APPNAME)/
+       install -c -m 0644 $(PACKAGE).service $(DESTDIR)/usr/share/dbus-1/services/
+       install -c -m 0644 $(PACKAGE).lens $(DESTDIR)/usr/share/unity/lenses/$(APPNAME)/
+
+deb:
+       debuild -I.git -I*.ex -b -us -uc && \
+       echo -e "\n\n==> Lancer \"sudo debi\" pour tester l'installation.\n"
+
+release:
+       debuild -I.git -I*.ex -tc -sa -us -uc && debrelease --dput $(DIST)-test
+
diff --git a/precise/auf-unity-lens/README b/precise/auf-unity-lens/README
new file mode 100644 (file)
index 0000000..994afe9
--- /dev/null
@@ -0,0 +1,17 @@
+Ce logiciel est une lentille pour effectuer des recherches dans les bases
+de données de l'AUF.
+
+Les recherches peuvent se faire selon le nom de l'employé, sa fonction,
+le code ISO-3166-2 d'un pays, le nom d'un pays, le nom d'une région ou
+encore le numéro de téléphone IP.
+
+Le raccourci déclencheur est Logo+Z.
+
+Attention :
+
+ L'utilisation de cette lentille nécessite d'avoir été connecté au réseau
+ interne de l'AUF (RPV), soit au moment de l'installation du paquet Debian,
+ soit au moins une fois au moment des mises à jour des données auf-refer
+ (à 7h ou à 13h).
+
+ -- Progfou <jean-christophe.andre@auf.org>  Mon, 19 Aug 2013 15:00:13 -0400
diff --git a/precise/auf-unity-lens/auf-unity-lens b/precise/auf-unity-lens/auf-unity-lens
new file mode 100755 (executable)
index 0000000..9cc9a4a
--- /dev/null
@@ -0,0 +1,111 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
+from singlet.utils import run_lens
+#import subprocess
+import aufrefer
+
+PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
+
+class AUFLens(SingleScopeLens):
+    class Meta:
+        name = 'auf'
+        title = 'AUF Search'
+        description = 'AUF Search'
+        search_hint = 'Search the AUF'
+        icon = 'auf-menu-logo.png'
+        search_on_blank = False
+
+    icon = '/usr/share/icons/auf-menu-logo.png'
+    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
+    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
+
+    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
+    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
+
+    url_bureau = {
+        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
+        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
+        'BA':   'http://www.auf.org/bureau-ameriques/',
+        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
+        'BC':   'http://www.auf.org/bureau-caraibe/',
+        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
+        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
+        'BM':   'http://www.auf.org/bureau-maghreb/',
+        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
+        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
+    }
+
+    def _enhance_info(self, info):
+        info['x-adel'] = info['courriel'] and info['courriel'] or ''
+        info['x-user'] = info['x-adel'].partition('@')[0]
+        if info['x-user'].count('.') > 1: # nom vietnamien
+            info['x-nom'] = u'%s %s' % (info['nom'], info['prenom'])
+        else:
+            info['x-nom'] = u'%s %s' % (info['prenom'], info['nom'])
+        info['x-tel_ip'] = info['telephone_ip']
+        if info['telephone_ip_nomade']:
+            info['x-tel_ip'] = u'%s / %s' % (info['x-tel_ip'], info['telephone_ip_nomade'])
+        info['x-photo'] = PHOTO_URL % info['id']
+
+        code_implant = info['implantation_physique']
+        if code_implant in self.implantation:
+            info['x-implant'] = self.implantation[code_implant]
+            info['x-code_pays'] = info['x-implant']['adresse_physique_pays'].upper()
+            info['x-lieu'] = u'%s / %s' % (info['x-implant']['nom_court'], info['x-code_pays'])
+        else:
+            info['x-implant'] = dict()
+            info['x-code_pays'] = '??'
+            info['x-lieu'] = u'(implantation inconnue)'
+        return info
+
+    def search(self, search, results):
+        search = search.lstrip()
+
+        # strict minimum 2 caractères
+        if len(search) < 2:
+            return
+
+        # recherche par code de pays ISO-3166
+        if len(search) == 2:
+            search = search.upper()
+            if search not in self.iso_3166_fr and search != '??':
+                return
+            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
+            for info in aufrefer.get('datamaster-employe.json'):
+                info = self._enhance_info(info)
+                if info['x-code_pays'] != search:
+                    continue
+                desc = u'%s\n%s\n%s' % (info['x-tel_ip'], info['fonction'], info['x-lieu'])
+                results.append('mailto:%s <%s>' % (info['x-nom'], info['x-adel']),
+                    info['x-photo'], self.cat_employes,
+                    "text/html", info['x-nom'], desc, 'C:'+search)
+            return
+
+        # recherche générale
+        if type(search) == str:
+            search = unicode(search, 'utf-8')
+        search = search.lower()
+        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
+            if search in desc.lower():
+                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
+                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
+        for info in aufrefer.get('datamaster-employe.json'):
+            info = self._enhance_info(info)
+            if (search in info['x-user']) or (search in info['x-nom'].lower()) or (search in info['fonction'].lower()) or \
+               (search in info['x-lieu'].lower()) or (search in info['x-implant'].get('adresse_physique_ville', '').lower()) or \
+               (search in info['x-implant'].get('nom', '').lower()) or \
+               (search in info['x-implant'].get('nom_court', '').lower()) or (search in info['x-implant'].get('nom_long', '').lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in info['x-tel_ip'].replace(' ', '')):
+                desc = u'%s\n%s\n%s' % (info['x-tel_ip'], info['fonction'], info['x-lieu'])
+                results.append('mailto:%s <%s>' % (info['x-nom'], info['x-adel']),
+                    info['x-photo'], self.cat_employes,
+                    "text/html", info['x-nom'], desc, 'C:'+search)
+
+    #def handle_uri(self, scope, uri):
+    #    subprocess.call(['sensible-browser', uri])
+    #    return SingleScopeLens.hide_dash_response(self, uri='')
+
+if __name__ == "__main__":
+    import sys
+    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens/auf-unity-lens.0 b/precise/auf-unity-lens/auf-unity-lens.0
new file mode 100755 (executable)
index 0000000..9607213
--- /dev/null
@@ -0,0 +1,163 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
+from singlet.utils import run_lens
+#import subprocess
+import os
+import os.path
+import urllib
+import aufrefer
+
+PHOTOS_DIR = '/var/lib/auf-refer-photos'
+
+PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
+PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
+
+class AUFLens(SingleScopeLens):
+    class Meta:
+        name = 'auf'
+        title = 'AUF Search'
+        description = 'AUF Search'
+        search_hint = 'Search the AUF'
+        icon = 'auf-menu-logo.png'
+        search_on_blank = False
+
+    icon = '/usr/share/icons/auf-menu-logo.png'
+    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
+    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
+    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
+
+    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
+    pays_implant = aufrefer.get('pays-implant.json')
+    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
+
+    url_bureau = {
+        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
+        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
+        'BA':   'http://www.auf.org/bureau-ameriques/',
+        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
+        'BC':   'http://www.auf.org/bureau-caraibe/',
+        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
+        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
+        'BM':   'http://www.auf.org/bureau-maghreb/',
+        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
+        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
+    }
+
+    def search(self, search, results):
+        search = search.lstrip()
+
+        # strict minimum 2 caractères
+        if len(search) < 2:
+            return
+
+        # recherche par code de pays ISO-3166
+        if len(search) == 2:
+            search = search.upper()
+            if search not in self.iso_3166_fr and search != '??':
+                return
+            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
+            for info in aufrefer.get('datamaster-employe.json'):
+                code_implant = info['implantation_physique']
+                if code_implant in self.implantation:
+                    implant = self.implantation[code_implant]
+                    code_pays = implant['adresse_physique_pays'].upper()
+                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+                else:
+                    implant = dict()
+                    code_pays = '??'
+                    lieu = u'(implantation inconnue)'
+                if code_pays != search:
+                    continue
+                adel = info['courriel'] and info['courriel'] or ''
+                user = adel.partition('@')[0]
+                if user.count('.') > 1: # nom vietnamien
+                    nom = u'%s %s' % (info['nom'], info['prenom'])
+                else:
+                    nom = u'%s %s' % (info['prenom'], info['nom'])
+                tel_ip = info['telephone_ip']
+                if info['telephone_ip_nomade']:
+                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+                photo = PHOTO_CACHE % info['id']
+                if not os.path.exists(photo) and not os.path.exists(photo + '_disabled'):
+                    try:
+                        f, h = urllib.urlretrieve(PHOTO_URL % info['id'], photo)
+                        if not h.type.startswith('image/'):
+                            os.unlink(photo)
+                            open(photo + '_disabled', 'w').close()
+                    except:
+                        pass
+                if not os.path.exists(photo):
+                    photo = 'avatar-default'
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), PHOTO_URL % info['id'], self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+            return
+
+        # recherche générale
+        if type(search) == str:
+            search = unicode(search, 'utf-8')
+        search = search.lower()
+        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
+            if search in desc.lower():
+                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
+                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
+        for info in aufrefer.get('annuaire.json'):
+            user = info['adel'].split('@')[0]
+            if 'test' in user:
+                continue
+            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
+            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
+            if (search in user) or (search in nom.lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
+                if not os.path.exists(photo):
+                    photo = 'avatar-default'
+                implant = info['implant'].upper()
+                pays = self.pays_implant.get(implant, implant)
+                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
+                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
+                    "text/html", nom, desc, 'C:'+search)
+        for info in aufrefer.get('datamaster-employe.json'):
+            adel = info['courriel'] and info['courriel'] or ''
+            user = adel.partition('@')[0]
+            if user.count('.') > 1: # nom vietnamien
+                nom = u'%s %s' % (info['nom'], info['prenom'])
+            else:
+                nom = u'%s %s' % (info['prenom'], info['nom'])
+            tel_ip = info['telephone_ip']
+            if info['telephone_ip_nomade']:
+                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = PHOTO_CACHE % info['id']
+                if not os.path.exists(photo) and not os.path.exists(photo + '_disabled'):
+                    try:
+                        f, h = urllib.urlretrieve(PHOTO_URL % info['id'], photo)
+                        if not h.type.startswith('image/'):
+                            os.unlink(photo)
+                            open(photo + '_disabled', 'w').close()
+                    except:
+                        pass
+                if not os.path.exists(photo):
+                    photo = 'avatar-default'
+                code_implant = info['implantation_physique']
+                if code_implant in self.implantation:
+                    implant = self.implantation[code_implant]
+                    code_pays = implant['adresse_physique_pays'].upper()
+                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+                else:
+                    implant = dict()
+                    code_pays = '??'
+                    lieu = u'(implantation inconnue)'
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+
+    #def handle_uri(self, scope, uri):
+    #    subprocess.call(['sensible-browser', uri])
+    #    return SingleScopeLens.hide_dash_response(self, uri='')
+
+if __name__ == "__main__":
+    import sys
+    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens/auf-unity-lens.1 b/precise/auf-unity-lens/auf-unity-lens.1
new file mode 100755 (executable)
index 0000000..e111103
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
+from singlet.utils import run_lens
+#import subprocess
+import os
+import os.path
+import urllib
+import aufrefer
+
+PHOTOS_DIR = '/var/lib/auf-refer-photos'
+
+PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
+PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
+
+class AUFLens(SingleScopeLens):
+    class Meta:
+        name = 'auf'
+        title = 'AUF Search'
+        description = 'AUF Search'
+        search_hint = 'Search the AUF'
+        icon = 'auf-menu-logo.png'
+        search_on_blank = False
+
+    icon = '/usr/share/icons/auf-menu-logo.png'
+    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
+    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
+    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
+
+    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
+    pays_implant = aufrefer.get('pays-implant.json')
+    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
+
+    url_bureau = {
+        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
+        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
+        'BA':   'http://www.auf.org/bureau-ameriques/',
+        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
+        'BC':   'http://www.auf.org/bureau-caraibe/',
+        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
+        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
+        'BM':   'http://www.auf.org/bureau-maghreb/',
+        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
+        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
+    }
+
+    def search(self, search, results):
+        search = search.lstrip()
+
+        # strict minimum 2 caractères
+        if len(search) < 2:
+            return
+
+        # recherche par code de pays ISO-3166
+        if len(search) == 2:
+            search = search.upper()
+            if search not in self.iso_3166_fr and search != '??':
+                return
+            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
+            for info in aufrefer.get('datamaster-employe.json'):
+                code_implant = info['implantation_physique']
+                if code_implant in self.implantation:
+                    implant = self.implantation[code_implant]
+                    code_pays = implant['adresse_physique_pays'].upper()
+                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+                else:
+                    implant = dict()
+                    code_pays = '??'
+                    lieu = u'(implantation inconnue)'
+                if code_pays != search:
+                    continue
+                adel = info['courriel'] and info['courriel'] or ''
+                user = adel.partition('@')[0]
+                if user.count('.') > 1: # nom vietnamien
+                    nom = u'%s %s' % (info['nom'], info['prenom'])
+                else:
+                    nom = u'%s %s' % (info['prenom'], info['nom'])
+                tel_ip = info['telephone_ip']
+                if info['telephone_ip_nomade']:
+                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+                photo = PHOTO_URL % info['id']
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+            return
+
+        # recherche générale
+        if type(search) == str:
+            search = unicode(search, 'utf-8')
+        search = search.lower()
+        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
+            if search in desc.lower():
+                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
+                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
+        for info in aufrefer.get('annuaire.json'):
+            user = info['adel'].split('@')[0]
+            if 'test' in user:
+                continue
+            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
+            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
+            if (search in user) or (search in nom.lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
+                if not os.path.exists(photo):
+                    photo = 'avatar-default'
+                implant = info['implant'].upper()
+                pays = self.pays_implant.get(implant, implant)
+                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
+                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
+                    "text/html", nom, desc, 'C:'+search)
+        for info in aufrefer.get('datamaster-employe.json'):
+            adel = info['courriel'] and info['courriel'] or ''
+            user = adel.partition('@')[0]
+            if user.count('.') > 1: # nom vietnamien
+                nom = u'%s %s' % (info['nom'], info['prenom'])
+            else:
+                nom = u'%s %s' % (info['prenom'], info['nom'])
+            tel_ip = info['telephone_ip']
+            if info['telephone_ip_nomade']:
+                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+            code_implant = info['implantation_physique']
+            if code_implant in self.implantation:
+                implant = self.implantation[code_implant]
+                code_pays = implant['adresse_physique_pays'].upper()
+                lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+            else:
+                implant = dict()
+                code_pays = '??'
+                lieu = u'(implantation inconnue)'
+            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
+               (search in lieu.lower()) or (search in implant.get('adresse_physique_ville', '').lower()) or \
+               (search in implant.get('nom', '').lower()) or \
+               (search in implant.get('nom_court', '').lower()) or (search in implant.get('nom_long', '').lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = PHOTO_URL % info['id']
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+
+    #def handle_uri(self, scope, uri):
+    #    subprocess.call(['sensible-browser', uri])
+    #    return SingleScopeLens.hide_dash_response(self, uri='')
+
+if __name__ == "__main__":
+    import sys
+    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens/auf-unity-lens.lens b/precise/auf-unity-lens/auf-unity-lens.lens
new file mode 100644 (file)
index 0000000..9196b05
--- /dev/null
@@ -0,0 +1,13 @@
+[Lens]
+DBusName=unity.singlet.lens.auf
+DBusPath=/unity/singlet/lens/auf
+Icon=/usr/share/icons/auf-menu-logo.png
+Name=AUF
+Description=AUF Search
+Description[fr]=Recherche AUF
+SearchHint=Enter name or content you would like to search for at AUF
+SearchHint[fr]=Entrez le nom ou le contenu que vous recherchez à l'AUF
+Shortcut=z
+
+#[Desktop Entry]
+#X-Ubuntu-Gettext-Domain=auf-unity-lens
diff --git a/precise/auf-unity-lens/auf-unity-lens.service b/precise/auf-unity-lens/auf-unity-lens.service
new file mode 100644 (file)
index 0000000..2bbb252
--- /dev/null
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=unity.singlet.lens.auf
+Exec=/usr/lib/auf-unity-lens/auf-unity-lens
diff --git a/precise/auf-unity-lens/debian/changelog b/precise/auf-unity-lens/debian/changelog
new file mode 100644 (file)
index 0000000..ecbbe3c
--- /dev/null
@@ -0,0 +1,5 @@
+auf-unity-lens (0.1) precise; urgency=low
+
+  * Première version empaquetée (suite aux expérimentations en avril 2013).
+
+ -- Progfou <jean-christophe.andre@auf.org>  Mon, 19 Aug 2013 15:00:13 -0400
diff --git a/precise/auf-unity-lens/debian/compat b/precise/auf-unity-lens/debian/compat
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/precise/auf-unity-lens/debian/control b/precise/auf-unity-lens/debian/control
new file mode 100644 (file)
index 0000000..d1724f3
--- /dev/null
@@ -0,0 +1,22 @@
+Source: auf-unity-lens
+Section: python
+Priority: extra
+Build-Depends: debhelper (>= 8)
+Maintainer: Progfou <jean-christophe.andre@auf.org>
+Standards-Version: 3.9.3
+Homepage: http://git.auf.org/?p=auf-poste-client.git;a=tree;f=precise/auf-unity-lens
+Vcs-Git: git://git.auf.org/auf-poste-client.git
+Vcs-Browser: http://git.auf.org/?p=auf-poste-client.git;a=summary
+X-Python-Version: >= 2.6
+
+Package: auf-unity-lens
+Architecture: all
+Depends: ${misc:Depends}, ${python:Depends}, python-unity-singlet (>= 0.3), auf-refer
+Description: Lentille de recherche AUF
+ Lentille pour effectuer des recherches parmi les employés de l'AUF.
+ .
+ Les recherches peuvent se faire selon le nom de l'employé, sa fonction,
+ le code ISO-3166-2 d'un pays, le nom d'un pays, le nom d'une région ou
+ encore le numéro de téléphone IP.
+ .
+ Le raccourci déclencheur est Logo+Z.
diff --git a/precise/auf-unity-lens/debian/copyright b/precise/auf-unity-lens/debian/copyright
new file mode 100644 (file)
index 0000000..7986654
--- /dev/null
@@ -0,0 +1,25 @@
+Format: http://dep.debian.net/deps/dep5
+Upstream-Name: auf-unity-lens
+Upstream-Contact: Progfou <jean-christophe.andre@auf.org>
+Source: http://git.auf.org/?p=auf-poste-client.git;a=tree;f=precise/auf-unity-lens
+
+Files: *
+Copyright: 2013 Agence universitaire de la Francophonie -- www.auf.org
+License: GPL-3.0+
+
+License: GPL-3.0+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
diff --git a/precise/auf-unity-lens/debian/dirs b/precise/auf-unity-lens/debian/dirs
new file mode 100644 (file)
index 0000000..b70c9ca
--- /dev/null
@@ -0,0 +1,3 @@
+usr/lib/auf-unity-lens
+usr/share/dbus-1/services
+usr/share/unity/lenses/auf-unity-lens
diff --git a/precise/auf-unity-lens/debian/docs b/precise/auf-unity-lens/debian/docs
new file mode 100644 (file)
index 0000000..e845566
--- /dev/null
@@ -0,0 +1 @@
+README
diff --git a/precise/auf-unity-lens/debian/postinst b/precise/auf-unity-lens/debian/postinst
new file mode 100644 (file)
index 0000000..59676c8
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/sh
+# postinst script for auf-unity-lens
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postinst> `configure' <most-recently-configured-version>
+#        * <old-postinst> `abort-upgrade' <new version>
+#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+#          <new-version>
+#        * <postinst> `abort-remove'
+#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+#          <failed-install-package> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+REFS="datamaster-employe datamaster-implantation bureaux iso-3166-fr"
+
+case "$1" in
+    configure)
+        for ref in $REFS
+        do
+            auf-refer -a "${ref}.json"
+        done
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/precise/auf-unity-lens/debian/rules b/precise/auf-unity-lens/debian/rules
new file mode 100755 (executable)
index 0000000..b760bee
--- /dev/null
@@ -0,0 +1,13 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+       dh $@ 
diff --git a/precise/auf-unity-lens/unity-lens-auf/ula.py b/precise/auf-unity-lens/unity-lens-auf/ula.py
new file mode 120000 (symlink)
index 0000000..3f6fa7a
--- /dev/null
@@ -0,0 +1 @@
+unity-lens-auf.2
\ No newline at end of file
diff --git a/precise/auf-unity-lens/unity-lens-auf/unity-lens-auf b/precise/auf-unity-lens/unity-lens-auf/unity-lens-auf
new file mode 100755 (executable)
index 0000000..e111103
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
+from singlet.utils import run_lens
+#import subprocess
+import os
+import os.path
+import urllib
+import aufrefer
+
+PHOTOS_DIR = '/var/lib/auf-refer-photos'
+
+PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
+PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
+
+class AUFLens(SingleScopeLens):
+    class Meta:
+        name = 'auf'
+        title = 'AUF Search'
+        description = 'AUF Search'
+        search_hint = 'Search the AUF'
+        icon = 'auf-menu-logo.png'
+        search_on_blank = False
+
+    icon = '/usr/share/icons/auf-menu-logo.png'
+    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
+    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
+    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
+
+    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
+    pays_implant = aufrefer.get('pays-implant.json')
+    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
+
+    url_bureau = {
+        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
+        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
+        'BA':   'http://www.auf.org/bureau-ameriques/',
+        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
+        'BC':   'http://www.auf.org/bureau-caraibe/',
+        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
+        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
+        'BM':   'http://www.auf.org/bureau-maghreb/',
+        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
+        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
+    }
+
+    def search(self, search, results):
+        search = search.lstrip()
+
+        # strict minimum 2 caractères
+        if len(search) < 2:
+            return
+
+        # recherche par code de pays ISO-3166
+        if len(search) == 2:
+            search = search.upper()
+            if search not in self.iso_3166_fr and search != '??':
+                return
+            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
+            for info in aufrefer.get('datamaster-employe.json'):
+                code_implant = info['implantation_physique']
+                if code_implant in self.implantation:
+                    implant = self.implantation[code_implant]
+                    code_pays = implant['adresse_physique_pays'].upper()
+                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+                else:
+                    implant = dict()
+                    code_pays = '??'
+                    lieu = u'(implantation inconnue)'
+                if code_pays != search:
+                    continue
+                adel = info['courriel'] and info['courriel'] or ''
+                user = adel.partition('@')[0]
+                if user.count('.') > 1: # nom vietnamien
+                    nom = u'%s %s' % (info['nom'], info['prenom'])
+                else:
+                    nom = u'%s %s' % (info['prenom'], info['nom'])
+                tel_ip = info['telephone_ip']
+                if info['telephone_ip_nomade']:
+                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+                photo = PHOTO_URL % info['id']
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+            return
+
+        # recherche générale
+        if type(search) == str:
+            search = unicode(search, 'utf-8')
+        search = search.lower()
+        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
+            if search in desc.lower():
+                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
+                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
+        for info in aufrefer.get('annuaire.json'):
+            user = info['adel'].split('@')[0]
+            if 'test' in user:
+                continue
+            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
+            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
+            if (search in user) or (search in nom.lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
+                if not os.path.exists(photo):
+                    photo = 'avatar-default'
+                implant = info['implant'].upper()
+                pays = self.pays_implant.get(implant, implant)
+                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
+                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
+                    "text/html", nom, desc, 'C:'+search)
+        for info in aufrefer.get('datamaster-employe.json'):
+            adel = info['courriel'] and info['courriel'] or ''
+            user = adel.partition('@')[0]
+            if user.count('.') > 1: # nom vietnamien
+                nom = u'%s %s' % (info['nom'], info['prenom'])
+            else:
+                nom = u'%s %s' % (info['prenom'], info['nom'])
+            tel_ip = info['telephone_ip']
+            if info['telephone_ip_nomade']:
+                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+            code_implant = info['implantation_physique']
+            if code_implant in self.implantation:
+                implant = self.implantation[code_implant]
+                code_pays = implant['adresse_physique_pays'].upper()
+                lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+            else:
+                implant = dict()
+                code_pays = '??'
+                lieu = u'(implantation inconnue)'
+            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
+               (search in lieu.lower()) or (search in implant.get('adresse_physique_ville', '').lower()) or \
+               (search in implant.get('nom', '').lower()) or \
+               (search in implant.get('nom_court', '').lower()) or (search in implant.get('nom_long', '').lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = PHOTO_URL % info['id']
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+
+    #def handle_uri(self, scope, uri):
+    #    subprocess.call(['sensible-browser', uri])
+    #    return SingleScopeLens.hide_dash_response(self, uri='')
+
+if __name__ == "__main__":
+    import sys
+    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens/unity-lens-auf/unity-lens-auf.0 b/precise/auf-unity-lens/unity-lens-auf/unity-lens-auf.0
new file mode 100755 (executable)
index 0000000..9607213
--- /dev/null
@@ -0,0 +1,163 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
+from singlet.utils import run_lens
+#import subprocess
+import os
+import os.path
+import urllib
+import aufrefer
+
+PHOTOS_DIR = '/var/lib/auf-refer-photos'
+
+PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
+PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
+
+class AUFLens(SingleScopeLens):
+    class Meta:
+        name = 'auf'
+        title = 'AUF Search'
+        description = 'AUF Search'
+        search_hint = 'Search the AUF'
+        icon = 'auf-menu-logo.png'
+        search_on_blank = False
+
+    icon = '/usr/share/icons/auf-menu-logo.png'
+    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
+    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
+    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
+
+    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
+    pays_implant = aufrefer.get('pays-implant.json')
+    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
+
+    url_bureau = {
+        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
+        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
+        'BA':   'http://www.auf.org/bureau-ameriques/',
+        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
+        'BC':   'http://www.auf.org/bureau-caraibe/',
+        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
+        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
+        'BM':   'http://www.auf.org/bureau-maghreb/',
+        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
+        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
+    }
+
+    def search(self, search, results):
+        search = search.lstrip()
+
+        # strict minimum 2 caractères
+        if len(search) < 2:
+            return
+
+        # recherche par code de pays ISO-3166
+        if len(search) == 2:
+            search = search.upper()
+            if search not in self.iso_3166_fr and search != '??':
+                return
+            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
+            for info in aufrefer.get('datamaster-employe.json'):
+                code_implant = info['implantation_physique']
+                if code_implant in self.implantation:
+                    implant = self.implantation[code_implant]
+                    code_pays = implant['adresse_physique_pays'].upper()
+                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+                else:
+                    implant = dict()
+                    code_pays = '??'
+                    lieu = u'(implantation inconnue)'
+                if code_pays != search:
+                    continue
+                adel = info['courriel'] and info['courriel'] or ''
+                user = adel.partition('@')[0]
+                if user.count('.') > 1: # nom vietnamien
+                    nom = u'%s %s' % (info['nom'], info['prenom'])
+                else:
+                    nom = u'%s %s' % (info['prenom'], info['nom'])
+                tel_ip = info['telephone_ip']
+                if info['telephone_ip_nomade']:
+                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+                photo = PHOTO_CACHE % info['id']
+                if not os.path.exists(photo) and not os.path.exists(photo + '_disabled'):
+                    try:
+                        f, h = urllib.urlretrieve(PHOTO_URL % info['id'], photo)
+                        if not h.type.startswith('image/'):
+                            os.unlink(photo)
+                            open(photo + '_disabled', 'w').close()
+                    except:
+                        pass
+                if not os.path.exists(photo):
+                    photo = 'avatar-default'
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), PHOTO_URL % info['id'], self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+            return
+
+        # recherche générale
+        if type(search) == str:
+            search = unicode(search, 'utf-8')
+        search = search.lower()
+        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
+            if search in desc.lower():
+                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
+                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
+        for info in aufrefer.get('annuaire.json'):
+            user = info['adel'].split('@')[0]
+            if 'test' in user:
+                continue
+            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
+            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
+            if (search in user) or (search in nom.lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
+                if not os.path.exists(photo):
+                    photo = 'avatar-default'
+                implant = info['implant'].upper()
+                pays = self.pays_implant.get(implant, implant)
+                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
+                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
+                    "text/html", nom, desc, 'C:'+search)
+        for info in aufrefer.get('datamaster-employe.json'):
+            adel = info['courriel'] and info['courriel'] or ''
+            user = adel.partition('@')[0]
+            if user.count('.') > 1: # nom vietnamien
+                nom = u'%s %s' % (info['nom'], info['prenom'])
+            else:
+                nom = u'%s %s' % (info['prenom'], info['nom'])
+            tel_ip = info['telephone_ip']
+            if info['telephone_ip_nomade']:
+                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = PHOTO_CACHE % info['id']
+                if not os.path.exists(photo) and not os.path.exists(photo + '_disabled'):
+                    try:
+                        f, h = urllib.urlretrieve(PHOTO_URL % info['id'], photo)
+                        if not h.type.startswith('image/'):
+                            os.unlink(photo)
+                            open(photo + '_disabled', 'w').close()
+                    except:
+                        pass
+                if not os.path.exists(photo):
+                    photo = 'avatar-default'
+                code_implant = info['implantation_physique']
+                if code_implant in self.implantation:
+                    implant = self.implantation[code_implant]
+                    code_pays = implant['adresse_physique_pays'].upper()
+                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+                else:
+                    implant = dict()
+                    code_pays = '??'
+                    lieu = u'(implantation inconnue)'
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+
+    #def handle_uri(self, scope, uri):
+    #    subprocess.call(['sensible-browser', uri])
+    #    return SingleScopeLens.hide_dash_response(self, uri='')
+
+if __name__ == "__main__":
+    import sys
+    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens/unity-lens-auf/unity-lens-auf.1 b/precise/auf-unity-lens/unity-lens-auf/unity-lens-auf.1
new file mode 100755 (executable)
index 0000000..e111103
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
+from singlet.utils import run_lens
+#import subprocess
+import os
+import os.path
+import urllib
+import aufrefer
+
+PHOTOS_DIR = '/var/lib/auf-refer-photos'
+
+PHOTO_CACHE = '/var/tmp/auf-photo-%s.jpg'
+PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
+
+class AUFLens(SingleScopeLens):
+    class Meta:
+        name = 'auf'
+        title = 'AUF Search'
+        description = 'AUF Search'
+        search_hint = 'Search the AUF'
+        icon = 'auf-menu-logo.png'
+        search_on_blank = False
+
+    icon = '/usr/share/icons/auf-menu-logo.png'
+    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
+    cat_personnels = ListViewCategory(u"Personnels de l'AUF", icon)
+    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
+
+    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
+    pays_implant = aufrefer.get('pays-implant.json')
+    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
+
+    url_bureau = {
+        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
+        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
+        'BA':   'http://www.auf.org/bureau-ameriques/',
+        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
+        'BC':   'http://www.auf.org/bureau-caraibe/',
+        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
+        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
+        'BM':   'http://www.auf.org/bureau-maghreb/',
+        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
+        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
+    }
+
+    def search(self, search, results):
+        search = search.lstrip()
+
+        # strict minimum 2 caractères
+        if len(search) < 2:
+            return
+
+        # recherche par code de pays ISO-3166
+        if len(search) == 2:
+            search = search.upper()
+            if search not in self.iso_3166_fr and search != '??':
+                return
+            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
+            for info in aufrefer.get('datamaster-employe.json'):
+                code_implant = info['implantation_physique']
+                if code_implant in self.implantation:
+                    implant = self.implantation[code_implant]
+                    code_pays = implant['adresse_physique_pays'].upper()
+                    lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+                else:
+                    implant = dict()
+                    code_pays = '??'
+                    lieu = u'(implantation inconnue)'
+                if code_pays != search:
+                    continue
+                adel = info['courriel'] and info['courriel'] or ''
+                user = adel.partition('@')[0]
+                if user.count('.') > 1: # nom vietnamien
+                    nom = u'%s %s' % (info['nom'], info['prenom'])
+                else:
+                    nom = u'%s %s' % (info['prenom'], info['nom'])
+                tel_ip = info['telephone_ip']
+                if info['telephone_ip_nomade']:
+                    tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+                photo = PHOTO_URL % info['id']
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+            return
+
+        # recherche générale
+        if type(search) == str:
+            search = unicode(search, 'utf-8')
+        search = search.lower()
+        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
+            if search in desc.lower():
+                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
+                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
+        for info in aufrefer.get('annuaire.json'):
+            user = info['adel'].split('@')[0]
+            if 'test' in user:
+                continue
+            nom = info['nom'] and info['nom'] or user.replace('.', ' ').title()
+            tel_ip = info['tel_ip'] and info['tel_ip'] or ''
+            if (search in user) or (search in nom.lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = os.path.join(PHOTOS_DIR, info['adel'] + '.jpg')
+                if not os.path.exists(photo):
+                    photo = 'avatar-default'
+                implant = info['implant'].upper()
+                pays = self.pays_implant.get(implant, implant)
+                desc = u'%s\n%s\n%s' % (info['adel'], info['tel_ip'], self.iso_3166_fr[pays])
+                results.append('mailto:%s <%s>' % (nom, info['adel']), photo, self.cat_personnels,
+                    "text/html", nom, desc, 'C:'+search)
+        for info in aufrefer.get('datamaster-employe.json'):
+            adel = info['courriel'] and info['courriel'] or ''
+            user = adel.partition('@')[0]
+            if user.count('.') > 1: # nom vietnamien
+                nom = u'%s %s' % (info['nom'], info['prenom'])
+            else:
+                nom = u'%s %s' % (info['prenom'], info['nom'])
+            tel_ip = info['telephone_ip']
+            if info['telephone_ip_nomade']:
+                tel_ip = u'%s / %s' % (tel_ip, info['telephone_ip_nomade'])
+            code_implant = info['implantation_physique']
+            if code_implant in self.implantation:
+                implant = self.implantation[code_implant]
+                code_pays = implant['adresse_physique_pays'].upper()
+                lieu = u'%s / %s' % (implant['nom_court'], code_pays)
+            else:
+                implant = dict()
+                code_pays = '??'
+                lieu = u'(implantation inconnue)'
+            if (search in user) or (search in nom.lower()) or (search in info['fonction'].lower()) or \
+               (search in lieu.lower()) or (search in implant.get('adresse_physique_ville', '').lower()) or \
+               (search in implant.get('nom', '').lower()) or \
+               (search in implant.get('nom_court', '').lower()) or (search in implant.get('nom_long', '').lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in tel_ip.replace(' ', '')):
+                photo = PHOTO_URL % info['id']
+                desc = u'%s\n%s\n%s' % (tel_ip, info['fonction'], lieu)
+                results.append('mailto:%s <%s>' % (nom, adel), photo, self.cat_employes,
+                    "text/html", nom, desc, 'C:'+search)
+
+    #def handle_uri(self, scope, uri):
+    #    subprocess.call(['sensible-browser', uri])
+    #    return SingleScopeLens.hide_dash_response(self, uri='')
+
+if __name__ == "__main__":
+    import sys
+    run_lens(AUFLens, sys.argv)
diff --git a/precise/auf-unity-lens/unity-lens-auf/unity-lens-auf.2 b/precise/auf-unity-lens/unity-lens-auf/unity-lens-auf.2
new file mode 100755 (executable)
index 0000000..9cc9a4a
--- /dev/null
@@ -0,0 +1,111 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from singlet.lens import SingleScopeLens, IconViewCategory, ListViewCategory
+from singlet.utils import run_lens
+#import subprocess
+import aufrefer
+
+PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
+
+class AUFLens(SingleScopeLens):
+    class Meta:
+        name = 'auf'
+        title = 'AUF Search'
+        description = 'AUF Search'
+        search_hint = 'Search the AUF'
+        icon = 'auf-menu-logo.png'
+        search_on_blank = False
+
+    icon = '/usr/share/icons/auf-menu-logo.png'
+    cat_bureaux = IconViewCategory(u"Bureaux régionaux de l'AUF", icon)
+    cat_employes = ListViewCategory(u"Employés de l'AUF", icon)
+
+    iso_3166_fr = aufrefer.get('iso-3166-fr.json')
+    implantation = dict([(x['id'], x) for x in aufrefer.get('datamaster-implantation.json')])
+
+    url_bureau = {
+        'BAC':  'http://www.auf.org/bureau-afrique-centrale-et-des-grands-lacs/',
+        'BAO':  'http://www.auf.org/bureau-afrique-de-l-ouest/',
+        'BA':   'http://www.auf.org/bureau-ameriques/',
+        'BAP':  'http://www.auf.org/bureau-asie-pacifique/',
+        'BC':   'http://www.auf.org/bureau-caraibe/',
+        'BECO': 'http://www.auf.org/bureau-europe-centrale-et-orientale/',
+        'BEO':  'http://www.auf.org/bureau-europe-de-l-ouest/',
+        'BM':   'http://www.auf.org/bureau-maghreb/',
+        'BMO':  'http://www.auf.org/bureau-moyen-orient/',
+        'BOI':  'http://www.auf.org/bureau-ocean-indien/',
+    }
+
+    def _enhance_info(self, info):
+        info['x-adel'] = info['courriel'] and info['courriel'] or ''
+        info['x-user'] = info['x-adel'].partition('@')[0]
+        if info['x-user'].count('.') > 1: # nom vietnamien
+            info['x-nom'] = u'%s %s' % (info['nom'], info['prenom'])
+        else:
+            info['x-nom'] = u'%s %s' % (info['prenom'], info['nom'])
+        info['x-tel_ip'] = info['telephone_ip']
+        if info['telephone_ip_nomade']:
+            info['x-tel_ip'] = u'%s / %s' % (info['x-tel_ip'], info['telephone_ip_nomade'])
+        info['x-photo'] = PHOTO_URL % info['id']
+
+        code_implant = info['implantation_physique']
+        if code_implant in self.implantation:
+            info['x-implant'] = self.implantation[code_implant]
+            info['x-code_pays'] = info['x-implant']['adresse_physique_pays'].upper()
+            info['x-lieu'] = u'%s / %s' % (info['x-implant']['nom_court'], info['x-code_pays'])
+        else:
+            info['x-implant'] = dict()
+            info['x-code_pays'] = '??'
+            info['x-lieu'] = u'(implantation inconnue)'
+        return info
+
+    def search(self, search, results):
+        search = search.lstrip()
+
+        # strict minimum 2 caractères
+        if len(search) < 2:
+            return
+
+        # recherche par code de pays ISO-3166
+        if len(search) == 2:
+            search = search.upper()
+            if search not in self.iso_3166_fr and search != '??':
+                return
+            #cat_employes = ListViewCategory(u"Personnels de l'AUF @ %s" % self.iso_3166_fr[search], self.icon)
+            for info in aufrefer.get('datamaster-employe.json'):
+                info = self._enhance_info(info)
+                if info['x-code_pays'] != search:
+                    continue
+                desc = u'%s\n%s\n%s' % (info['x-tel_ip'], info['fonction'], info['x-lieu'])
+                results.append('mailto:%s <%s>' % (info['x-nom'], info['x-adel']),
+                    info['x-photo'], self.cat_employes,
+                    "text/html", info['x-nom'], desc, 'C:'+search)
+            return
+
+        # recherche générale
+        if type(search) == str:
+            search = unicode(search, 'utf-8')
+        search = search.lower()
+        for bureau, (desc, pays) in aufrefer.get('bureaux.json').items():
+            if search in desc.lower():
+                results.append(self.url_bureau[bureau], self.icon, self.cat_bureaux,
+                    "text/html", bureau, 'B:'+'AUF', 'C:'+search)
+        for info in aufrefer.get('datamaster-employe.json'):
+            info = self._enhance_info(info)
+            if (search in info['x-user']) or (search in info['x-nom'].lower()) or (search in info['fonction'].lower()) or \
+               (search in info['x-lieu'].lower()) or (search in info['x-implant'].get('adresse_physique_ville', '').lower()) or \
+               (search in info['x-implant'].get('nom', '').lower()) or \
+               (search in info['x-implant'].get('nom_court', '').lower()) or (search in info['x-implant'].get('nom_long', '').lower()) or \
+               (search.replace(' ', '').isdigit() and search.replace(' ', '') in info['x-tel_ip'].replace(' ', '')):
+                desc = u'%s\n%s\n%s' % (info['x-tel_ip'], info['fonction'], info['x-lieu'])
+                results.append('mailto:%s <%s>' % (info['x-nom'], info['x-adel']),
+                    info['x-photo'], self.cat_employes,
+                    "text/html", info['x-nom'], desc, 'C:'+search)
+
+    #def handle_uri(self, scope, uri):
+    #    subprocess.call(['sensible-browser', uri])
+    #    return SingleScopeLens.hide_dash_response(self, uri='')
+
+if __name__ == "__main__":
+    import sys
+    run_lens(AUFLens, sys.argv)