Advertisement
x128

reload_contacts.py

Jun 28th, 2012
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.29 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from settings import *
  5. from skypelog import *
  6. import sys, glob, os
  7.  
  8. # Поля в DBB-файле не только пронумерованы, но и имеют "человеческие" названия.
  9. # Автор skypelog.py положил эти названия в статический массив класса SkypeContact.
  10. # Берём оттуда ID-шники:
  11.  
  12. class SkypeContactExt(SkypeContact):
  13.     @classmethod
  14.     def get_field_id(contacts, field_name):
  15.         field_names = contacts.FIELD_NAMES.items()
  16.         return [key for key, val in field_names if val == field_name][0]
  17.  
  18. record_id = SkypeContactExt.get_field_id("recid")
  19. skype_name = SkypeContactExt.get_field_id("skypename")
  20. full_name = SkypeContactExt.get_field_id("fullname")
  21. display_name = SkypeContactExt.get_field_id("given_displayname")
  22.  
  23. # В папке скайпа обычно много DBB-файлов с контактами. Кстати, вот они:
  24. files = glob.glob(os.path.expanduser(SKYPE_FOLDER + "/user*.dbb"));
  25.  
  26. # или нет...
  27. if len(files) == 0:
  28.     print "Cannot find Skype contacts data in " + SKYPE_FOLDER
  29.     sys.exit()
  30.  
  31. # Здесь будут имена наших друзей:
  32. skype_names = []
  33.  
  34. # Достаём контакты из всех файлов
  35. for f in files:
  36.     # Читаем файл в объект SkypeDBB:
  37.     data = SkypeDBB(f)
  38.  
  39.     # и берём из него имена:
  40.     for r in data.records():
  41.         if record_id in r:
  42.             id = r[record_id]
  43.             # Признак того, что это контакт (т.к. среди записей могут быть "пустышки")
  44.             if (id > 0) and (skype_name in r):
  45.                 # Здесь skype_name - это обязательный Skype-идентификатор контакта.
  46.                 # Поля для получения отображаемого имени подобраны опытным путём.
  47.                 # Насколько я понимаю, в скайп-клиенте схема такая:
  48.                 if display_name in r: disp_name = r[display_name]
  49.                 elif full_name in r:  disp_name = r[full_name]
  50.                 else:                 disp_name = r[skype_name]
  51.                 # Полученные имена добавляем в наш массив контактов:
  52.                 skype_names.append({
  53.                     "id":id,
  54.                     "skype_name":r[skype_name],
  55.                     "display_name":disp_name,
  56.                     "comment":DEFAULT_COMMENT
  57.                 })
  58.  
  59. # Сортируем по display_name (чтобы в конфиге были по алфавиту)
  60. skype_names = sorted(skype_names, key=lambda skype_names: skype_names["display_name"])
  61.  
  62. # Читаем настройки контактов из существующего конфига, если он есть.
  63. if os.path.isfile(os.path.expanduser(CONTACTS_NOTIFY_LIST)):
  64.     FILE = open(os.path.expanduser(CONTACTS_NOTIFY_LIST), "r")
  65.     for line in FILE:
  66.         contacts = regex.findall(line)
  67.         for contact in contacts:
  68.             comment = contact[0]
  69.             display_name = contact[1].strip()
  70.             skype_name = contact[2].strip()
  71.             # Для каждой строчки конфига находим соответствующий контакт из skype_names,
  72.             # и устанавливаем ему свойство comment
  73.             for contact in skype_names:
  74.                 if (contact["skype_name"] == skype_name) or (contact["display_name"] == display_name):
  75.                     contact["comment"] = comment            
  76.     FILE.close()
  77.  
  78. # Сохраняем конфиг
  79. FILE = open(os.path.expanduser(CONTACTS_NOTIFY_LIST), "w")
  80.  
  81. FILE.write("\n\tПожалуйста, не меняйте структуру этого файла!\n"
  82. "\n"
  83. "\tВы можете только раскомментировать нужные контакты\n"
  84. "\tили закомментировать ненужные с помощью символа #\n\n")
  85.  
  86. for contact in skype_names:
  87.     FILE.write(contact["comment"] + "\t" + contact["display_name"] + " " + DELIMITER + " " + contact["skype_name"] + "\n")
  88. FILE.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement