воскресенье, 18 октября 2009 г.

Объединение истории сообщений Skype

В последние полтора года я стал достаточно активно использовать Skype в качестве IM-клиента. Причем корпоративная политика отразилась и на персональных предпочтениях, ведь привычка - вторая натура. Тем более, что начиная с версии 4 Skype стал достаточно удобным в повседневном использовании (до этого я очень плохо с ним уживался).

В связи со сменой работы возник вопрос синхронизации истории сообщений между профилем, который я забрал с работы и личным профилем, который хранился дома. Ну или экспорт/импорт (в крайнем случае). Поясню: я использую одину и ту же учетную запись дома и на работе. Частенько получается, что начинаешь разговор с кем-то с работы, а заканчиваешь его дома. В результате история сообщений разорвана между двумя (а то и больше) компьютерами. Гугл мало чем смог помочь: есть плагин к Skype, который автоматом сохраняет все звонки и исообщения в гуглопочте - неплохо, конечно, но во-первых избыточно, во-вторых за деньги ($25 может и немного, но нет, спасибо). Еще на форуме Skype можно найти пару ссылок на программы, которые могут вытащить историю и выгрузить ее в txt или html. Тоже не совсем то. Пришлось разбираться самому.

На проверку все оказалось не так плохо (хотя и несколько запутано):

  • для хранения профиля (в том числе и истории звонков и сообщений) Skype использует базу данных SQLite - что хорошо (ибо эта СУБД открытая и для нее имеется .NET Provider)
  • схема не то чтобы сложная (16 таблиц), но о связях приходится догадываться (ибо внешние ключи не определены) и таблицы довольно "широкие" (до 40 полей)

За выходные в неспешном режиме написал программулину, которая делает то, что нужно (ну или почти): копирует сообщения из одного профиля в другой (если их там еще нет). Выглядит сиё чудо инженерной мысли следующим образом:

image

Скачать его можно отсюда (выложил на SkyDrive на случае если кому еще пригодится).

Что следует иметь в виду, в ходе синхронизации:

  • профили должны быть от одной версии Skype (строго, ибо даже между v.4.0 и v.4.1 схема имеет некоторые различия)
  • профиль хранится в каталоге %user dir%\AppData\Roaming\Skype\<your skype name>\main.db
  • перед внесением изменений в целевой профиль, делается его резервная копия (так что в случае чего его можно вернуть)
  • свойства чата не обновляются - так что в списке "последних разговоров" можно не увидеть действительно последние разговоры, которые были добавлены в ходе синхронизации (но в базе они будут)
  • иногда происходит дублирование сообщений (не всегда) - я так и не смог надежно определить условия, при которых это происходит
  • в некоторых случаях в истории появляется сообщение "это сообщение было удалено из чата" - тоже не смог понять из-за чего (подозреваю что где-то не хватате связанной записи ... но вот где?)

Так что не все так шоколадно, как хотелось бы. Но это в любом случае лучше, чем ничего. Тем более, что теперь я знаю, как сделать экспорт истории (не только сообщений, но и звонков, и контактов) почти в любой формат ;-)

HTH,

AlexS

28 комментариев:

  1. Решаю задачку с логами- на работе несколько человек в одном отделе пользуются одной учетной записью. Нужно знать, кто куда(на уровне учетных записей) звонил. Использую программу SkypeLogView в командной строке.
    Писать программу типа вашей-нет знаний. А так- батник опрашивает файлы в именованных папках, выдирает оттуда историю звонков, сохраняет в тхт с табуляцией, потом в базу.
    У меня есть такой вопрос- можно ли изменить место хранения Skype'ом его логов??

    ОтветитьУдалить
  2. Насколько я знаю, изменить место хранения логов нельзя. Они всегда в профиле пользователя, в подкаталоге, имя которого совпадает с именем учетной записи.
    (увы и ах)

    ОтветитьУдалить
  3. Здравствуйте! Программа выдаёт следующее:
    SkypeChatHistorySync.exe
    The NTVDM CPU has encountered an illegal instruction.
    CS:11fa IP:0212 OP:63 6f 6e 74 65 Choose 'Close' to terminate the application.
    Ваша программа очень нужна. Заранее спасибо.

    ОтветитьУдалить
  4. Здравствуйте, Вадим.
    По этому сообщению я мало что могу Вам сказать. Первое, что приходит в голову - а у Вас .NET установлен? Для нормальной работы программы нужен .NET Framework 3.5 + SQLite (точно не помню версию). Проверьте, если нет - установите. Я тем временем (на выходных скорее всего) доработаю программу так, чтобы она "отлавливала" исключения и выводила по возможности более "человеческие" сообщения об ошибках.

    ОтветитьУдалить
  5. Здравствуйте!
    .NET Framework 3.5 - утановлен вместе с SP1. А вот насчет SQLite - возникли некоторые затруднения. Не могли бы Вы поподробнее обьяснить как утановить. И версия может иметь значение для корректной работы вашей программы? Я скачал Version 3.6.21. Вот только что с ней дальше делать?
    Спасибо

    ОтветитьУдалить
  6. Этот комментарий был удален автором.

    ОтветитьУдалить
  7. Здравствуйте!
    Проблема заключалась в том что файл был скачан криво. (( Перекачал - запускается. Вот только но... Пользую Skype3.8 (больше нравится). Файл main.db есть только в одной базе! В остальных его нет! Все рабочие!
    Спасибо!

    ОтветитьУдалить
  8. Это хорошо, а то я уже собрался на выходных добавлять протоколирование где только можно :-)

    На счет Skype 3.8 - это довольно странно, если честно. Вы абсолютно уверены, что на всех машинах у Вас установлена одна и таже версия? У меня, к сожалению, нет возможности посмотреть на версию 3.8 (везде пользуюсь 4.х).

    И ... может Вы лучше напишете мне на почту (slipchenko[сами-знаете что}гуглопочта)? А то в комментариях как-то неудобно переписываться.

    ОтветитьУдалить
  9. А с версией 5.5 работает эта прога?

    ОтветитьУдалить
  10. Буду честен: не проверял. Но собираюсь (были просьбы и помимо вашей). По результатам - отпишусь.

    ОтветитьУдалить
  11. Здравствуйте!
    Поробовал объединить историю своих сообщений Skype 4.2 - прошло без ошибок. При этом добавленные сообщения не показываются в интерфейсе скайп. посмотрев полученный результат с помощью SkypeLogView обратил внимание что ID-шники добавленных сообщений больше, чем уже имевшихся. Может быть после добавления надо делать общую перенумерацию сообщений в БД?
    Михаил.

    ОтветитьУдалить
  12. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. здрасьте.
      чота ничо не вышло, прога вылетела с ошибкой
      http://s1.ipicture.ru/uploads/20120408/5q5Gp5UR.png

      скайп одной версии - 4.1

      расскажите чуть подробней про структуру таблиц\связей
      чо от чего зависит?
      пытался вот этой тулзой http://www.dbconvert.com/convert-sqlite-to-mysql-sync.php?DB=10
      но они денех хотят, прога работает, но с ограничением в 50 записей.. :(

      Удалить
  13. Прога не заработала (W7, .Net 3.5SP1, sqlite).
    Связь, насколько я понял,только одна - chat.conv_dbid <-> messages.convo_id.
    Если бы автор поправил прогу или выложил исходник - было бы здорово.

    ОтветитьУдалить
  14. Исходник в открытом доступе -- пользуйте, меняйте. https://bitbucket.org/aslipchenko/skypechathistorysync

    ОтветитьУдалить
  15. Проверил, все отлично работает.
    Если БД от программ разных версий, то я сделал так:
    скачал портейбл версия скайпа, запустил, авторизовался, вышел.
    В папке "profile" портейбл версии будет создана вложенная папка по названию вашей учетной записи, а в ней - профиль. В нее и нужно скопировать один из профилей от преобразуемых версий. Затем заново открыть портейбл версию и закрыть ее. Пересохраненный файл main.db из папки профиля скопировать в укромное место. Очистить папку профиля, скопировать туда другой конвертируемый профиль и т.д., пока все main.db-файлы не будут преобразованы в единую версию.
    Что касается сообщения "Этот разговор был удален из истории" - у меня это передаваемые файлы, по-видимому ссылки на них хранятся где-то еще.

    ОтветитьУдалить
  16. Подскажите в чем проблема На XP и на Win7 прога не работает. У меня XP Pro SP3 x86, Win7 Ultimate x64.
    А каким образом можно проинсталлировать Sqlite. Скайп на всех машинах одинаковой версии =6.1.0.129. Может в этом проблема?

    Описание:
    Stopped working

    Сигнатура проблемы:
    Имя события проблемы: CLR20r3
    Сигнатура проблемы 01: skypechathistorysync.exe
    Сигнатура проблемы 02: 1.0.0.0
    Сигнатура проблемы 03: 4adb6067
    Сигнатура проблемы 04: mscorlib
    Сигнатура проблемы 05: 2.0.0.0
    Сигнатура проблемы 06: 4ca2b851
    Сигнатура проблемы 07: 123a
    Сигнатура проблемы 08: 5f
    Сигнатура проблемы 09: System.BadImageFormatException
    Версия ОС: 6.1.7601.2.1.0.256.1
    Код языка: 1049

    ОтветитьУдалить
  17. Ребята, сорри, у меня не работает, вылетает без причин Win8 Pro 64 bit

    может opensource сделаем?

    ОтветитьУдалить
  18. Да легко -- исходник давно лежит на bitbucket (https://bitbucket.org/aslipchenko/skypechathistorysync).
    Если хотите / нужно -- могу переложить на github

    ОтветитьУдалить
  19. AlexS, примите огромную благодарность за вашу программу. Она меня очень выручила. Спасибо!

    ОтветитьУдалить
  20. Нашел такую программу http://suurjaak.github.com/Skyperious/

    Удалось совместить 2 файла main.db из разных версий Skype
    Также она умеет просматривать и экспортировать чат

    Win_x32 http://erki.lap.ee/downloads/Skyperious/skyperious_1.2_setup.exe
    Win_x64 http://erki.lap.ee/downloads/Skyperious/skyperious_1.2_x64_setup.exe

    ОтветитьУдалить
    Ответы
    1. Спасибо! Программа по ссылке сработала на отлично для последних версиях скайпа!

      Удалить
  21. Здравствуйте!

    Взялся бы кто-нибудь помочь за хорошую оплату?

    1. Нужна утилита для импорта текстового файла, полученного посредством copy & past окна чата скайпа (заданного контакта), в main.db. Предполагается, что история чата с данным контактом очищена.

    2. Нужна утилита для «принудительной синхронизации» истории чата между компьютерами двух контактов (пример: история контакта 1 стёрта или имеется только её часть, нужно восстановить задним числом, начиная с начала, предполагая, что на стороне контакта 2 история полная).

    Буду рад ответам на скайп (логин gvrgvrgvr)

    ОтветитьУдалить
  22. Здравствуйте! Вы написали как раз то, что мне нужно! Но вот ссылка на скачку - нерабочая. Перезалейте,пожалуйста.
    Спасибо.

    ОтветитьУдалить
  23. Странно (оригинальная ссылка для меня сработала "на ура"). На всякий случай перезалил на bitbucket: https://bitbucket.org/aslipchenko/skypechathistorysync/downloads/SkypeChatHistorySync.exe
    Впрочем, справедливости ради, я должен признать, что не уверен как все это будет работать с последними версиями Skype.

    ОтветитьУдалить
  24. Жаль, что проект кончился. задача-то осталась.

    ОтветитьУдалить
    Ответы
    1. Всё же программа помогла. Спасибо автору.
      Стояла задача добавить историю с W7 к W10, и на W10 программа не работала. Удалось обойти слиянием на W7 и переносом main.db на W10.

      Удалить