0 votes

Cobook a supprimé toutes les lignes vides dans les notes des contacts.

Cobook L'application iPhone, un remplacement relativement récent des contacts et du carnet d'adresses sur Mac et iPhone, a récemment détruit mon carnet d'adresses. Plus précisément, l'application iPhone a supprimé chaque ligne vierge dans chaque note de chaque contact. Le problème a été mentionné en passant comme corrigé dans la version 1.1.1 mais ça n'a pas réparé mon carnet d'adresses. Il est très difficile de lire des notes sans séparation des paragraphes.

Comment puis-je récupérer les lignes vierges ? Je n'ai pas remarqué le problème tout de suite, donc si je peux restaurer à partir d'une sauvegarde, je perdrai des données récentes.

1voto

duozmo Points 2039

J'ai écrit un AppleScript pour recréer les lignes vierges qui ont été supprimées. Ce n'est qu'approximatif - il doit faire certaines suppositions imparfaites sur le moment d'insérer une ligne, mais c'est mieux que rien.

-- Contacts newline reflow
-- Reintroduces paragraph separation into contacts' notes
-- after a bug in Cobook deleted all blank lines.
-- (Fixed in Cobook v. 1.1.1: http://blog.cobook.co/post/43633583273/cobook-with-google-maps)

-- Based on Nigel Garvey's work at MacScripter
-- http://macscripter.net/viewtopic.php?pid=153540#p153540

-- Get all the people IDs and notes in one go, for efficiency.
tell application "Contacts" to set {theIDs, theFirstNames, theLastNames, theCompanies, theOrgs, theNotes} to {id, first name, last name, company, organization, note} of people

-- Store the current text item delimiter(s) and set the delimiter to linefeed.
set astid to AppleScript's text item delimiters
set AppleScript's text item delimiters to linefeed -- this may now be unnecessary

try
    -- Work through the parallel lists of IDs and notes obtained above.
    repeat with i from 1 to (count theIDs)
        -- Get the next value from the note list.
        set thisNote to item i of theNotes
        -- If it's not 'missing value', there IS a note for this person.

        if (item i of theCompanies is false) then
            set theName to (item i of theFirstNames) & " " & (item i of theLastNames)
        else
            set theName to (item i of theOrgs)
        end if

        if (thisNote is not missing value) then
            -- Split the note text into paragraphs.
            set theParagraphs to thisNote's paragraphs
            set newParagraphs to {}

            -- PGP block state machine:
            -- 0 not in PGP block
            -- 1 First line of PGP block (always "-----BEGIN PGP MESSAGE-----")
            -- 2 In PGP block header, not first line
            -- 3 In PGP block body, first line
            -- 4 In PGP block body, not first line
            -- 5 Last line of PGP block (always "-----END PGP MESSAGE-----")

            set pgpBlockState to 0

            repeat with k from 1 to (count theParagraphs)
                set thisParagraph to (item k of theParagraphs)
                set appendEmptyParagraph to true

                if pgpBlockState is 0 then
                    if (thisParagraph contains "BEGIN PGP MESSAGE") then
                        set pgpBlockState to 1
                    end if
                else if pgpBlockState is 1 then
                    if thisParagraph contains ":" then
                        set pgpBlockState to 2
                    else
                        set pgpBlockState to 3
                    end if
                else if pgpBlockState is 2 then
                    if thisParagraph does not contain ":" then
                        set pgpBlockState to 3
                    end if
                else if pgpBlockState is 3 then
                    set pgpBlockState to 4
                else if pgpBlockState is 4 then
                    if (thisParagraph contains "END PGP MESSAGE") then set pgpBlockState to 5
                else if pgpBlockState is 5 then
                    set pgpBlockState to 0
                end if

                -- Alter output according to pgpBlockState
                if (pgpBlockState is not 0) then set appendEmptyParagraph to false
                if (pgpBlockState is 3) then set end of newParagraphs to "" -- this is a hack, not clean

                -- Conditions under which we don't want a newline
                if (length of thisParagraph < 30) then set appendEmptyParagraph to false
                if (length of thisParagraph > 1 and first character of thisParagraph = "-") then set appendEmptyParagraph to false
                if (length of thisParagraph > 1 and first character of thisParagraph = "•") then set appendEmptyParagraph to false

                if (thisParagraph is not equal to "") then set end of newParagraphs to thisParagraph -- delete any manual paragraph separation
                if (appendEmptyParagraph) then set end of newParagraphs to "" -- remember, newParagraphs is a list, not a string
            end repeat

            if (count of newParagraphs) > 0 then
                -- Get the number of the last "non-empty" one.
                repeat with j from (count newParagraphs) to 1 by -1
                    if ((count item j of newParagraphs) > 0) then exit repeat
                end repeat

                -- Coerce the paragraphs (up to the last non-empty one) to a single text, using the linefeed delimiter.
                set editedNote to (items 1 thru j of newParagraphs) as text

                tell application "Contacts" to set note of person id (item i of theIDs) to editedNote
                log "Updated entry for: " & theName
            else
                log "Skipping / no note for: " & theName -- handles Exchange-based notes, which don't equal "missing value" even when blank
            end if

        end if
    end repeat
on error msg
    display dialog msg buttons {"OK"} default button 1
end try

-- Restore the old delimiter value.
set AppleScript's text item delimiters to astid

-- Save the Contacts changes.
tell application "Contacts" to save
--> Returns 'missing value'. No known significance.

Il y a une longue section au milieu qui gère les blocs PGP qui pourraient apparaître dans votre carnet d'adresses. Cela peut sembler superflu, mais ces blocs sont très sensibles au placement correct des sauts de ligne. Si vous n'avez pas les bonnes lignes, GPGTools (dans son état actuel) échouera simplement lorsque vous essayerez de les décrypter et ne donnera aucune erreur utile indiquant le problème.

Pour l'exécuter, il suffit de le coller dans l'éditeur AppleScript et de cliquer sur Exécuter. Avertissement pro forma : Sauvegardez vos contacts au préalable.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X