Использование AppleScript для очистки адресной книги ведет себя странно, когда дело доходит до социальных профилей - PullRequest
1 голос
/ 20 марта 2012

Я успешно пишу и обновляю AppleScript для удаления дубликатов адресов электронной почты, а также дубликатов URL из контактов адресной книги.

Со всеми социальными сетями и программным обеспечением / службами для синхронизации контакты заполняются URL-адресами социальных сетей, а в последнее время Apple добавила профили социальных сетей в свой словарь сценариев адресной книги

Хотя мне удалось справиться с дублирующимися электронными письмами, URL-адресами и даже с сопоставлением URL-адресов социальных сетей с социальными профилями (и удалить их), на последнем шаге я заблокирован: определить дубликаты социальных профилей и удалить их

Несмотря на то, что я могу успешно идентифицировать дубликат социального профиля, я не нашел синтаксиса для его удаления из контакта, как, например, то, что можно легко сделать с дублирующимися адресами электронной почты

    repeat with email_id in duplicate_emails
        delete (emails of this_person whose id is email_id)
    end repeat

вот сообщение об ошибке, которое я получаю при выполнении

        delete (every social profile where id is socialProfile_id) in this_person

или

        delete (social profiles of this_person whose id is socialProfile_id)

или

        delete (every social profile whose id is socialProfile_id) in this_person

ошибка "Адресная книга Erreur dans: Le gestionnaire AppleEvent a échoué." номер -10000

Есть какие-нибудь подсказки? Исходный код доступен по запросу

- P

1 Ответ

1 голос
/ 21 марта 2012

Я думаю, что это может сработать ... проблема в том, что социальный профиль не связан с контактной информацией, такой как электронные письма, номера телефонов ... возможно, он будет работать после обновления ОС, возможно, он уже работает на OSX 10.8;)

--© hubionmac.com 21.03.2012
-- example code that REMOVES ALL SOCIAL PROFILES
-- from every selected person in your Address Book
-- de-facebook, de-twitter,… you contacts ;-)

set mySelectedPersons to selection

repeat with aSelectedPerson in mySelectedPersons
  set social_ids to id of (every social profile of aSelectedPerson)
  repeat with social_id in social_ids
    my delete_social_profile(aSelectedPerson, social_id)
    save
  end repeat
end repeat

on delete_social_profile(thePerson, theID)
  --handler for removing social profiles from Address Book
  --only way since social profile is not contained by contact info or something else and so delete social profile xy does not work
  -- input a single reference to a person in the address book and
  -- a the uniq ID of a social profile as text
  tell application "Address Book"
    set social_index to 0
    repeat with i from 1 to (count of every social profile of thePerson)
      if (id of social profile i of thePerson) as text = theID as text then
        set social_index to i
        exit repeat
      end if
    end repeat
    if social_index = 0 then error "error on delete_social_profile, given ID was not found in this person"
    --you cannot delete/kill a social profile, but when you remove/take away
    --all stored information (username and URL) from it, it commits suicide
    --and is removed from the address book, philosophic programming, isn't it?
    set user name of social profile social_index of thePerson to ""
    set url of social profile social_index of thePerson to ""
  end tell
end delete_social_profile
...