0 votos

Cobook eliminó todas las líneas en blanco en las notas de contactos

Cobook, un reemplazo relativamente nuevo de la libreta de direcciones de Mac & iPhone, recientemente eliminó por completo mi libreta de direcciones. Específicamente, la aplicación de iPhone eliminó cada línea en blanco de cada nota de cada contacto. El problema fue mencionado de pasada como arreglado en la versión 1.1.1, pero eso no reparó mi libreta de direcciones. Es muy difícil leer notas sin separación de párrafos.

¿Cómo puedo recuperar las líneas en blanco? No me di cuenta del problema de inmediato, por lo que, aunque podría restaurar desde una copia de seguridad, perdería algunos datos recientes.

1voto

printemps Puntos 243

Escribí un script de Apple para re-crear las líneas en blanco que fueron eliminadas. Es solo aproximado: tiene que hacer ciertas suposiciones imperfectas sobre cuándo insertar una línea, pero es mejor que nada.

-- Reformateo de nuevas líneas de contactos
-- Reintroduce la separación de párrafos en las notas de contactos
-- después de un fallo en Cobook que eliminó todas las líneas en blanco.
-- (Corregido en Cobook v. 1.1.1: http://blog.cobook.co/post/43633583273/cobook-with-google-maps)

-- Basado en el trabajo de Nigel Garvey en MacScripter
-- http://macscripter.net/viewtopic.php?pid=153540#p153540

-- Obtener todos los IDs de personas y notas de una sola vez, para eficiencia.
tell application "Contacts" to set {theIDs, theFirstNames, theLastNames, theCompanies, theOrgs, theNotes} to {id, first name, last name, company, organization, note} of people

-- Almacenar el o los delimitadores de texto actuales y configurar el delimitador en salto de línea.
set astid to AppleScript's text item delimiters
set AppleScript's text item delimiters to linefeed -- esto puede ser innecesario ahora

try
    -- Recorrer las listas paralelas de IDs y notas obtenidas anteriormente.
    repeat with i from 1 to (count theIDs)
        -- Obtener el siguiente valor de la lista de notas.
        set thisNote to item i of theNotes
        -- Si no es 'missing value', hay una nota para esta persona.

        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
            -- Dividir el texto de la nota en párrafos.
            set theParagraphs to thisNote's paragraphs
            set newParagraphs to {}

            -- Máquina de estado de bloque PGP:
            -- 0 no está en el bloque PGP
            -- 1 Primera línea del bloque PGP (siempre "-----BEGIN PGP MESSAGE-----")
            -- 2 En encabezado de bloque PGP, no es la primera línea
            -- 3 En cuerpo de bloque PGP, primera línea
            -- 4 En cuerpo de bloque PGP, no es la primera línea
            -- 5 Última línea del bloque PGP (siempre "-----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

                -- Modificar la salida según pgpBlockState
                if (pgpBlockState is not 0) then set appendEmptyParagraph to false
                if (pgpBlockState is 3) then set end of newParagraphs to "" -- esto es un truco, no está limpio

                -- Condiciones en las que no queremos un salto de línea
                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 -- eliminar cualquier separación manual de párrafos
                if (appendEmptyParagraph) then set end of newParagraphs to "" -- recuerda, newParagraphs es una lista, no una cadena
            end repeat

            if (count of newParagraphs) > 0 then
                -- Obtener el número del último "no vacío".
                repeat with j from (count newParagraphs) to 1 by -1
                    if ((count item j of newParagraphs) > 0) then exit repeat
                end repeat

                -- Forzar los párrafos (hasta el último no vacío) a un solo texto, usando el delimitador de salto de línea.
                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 "Entrada actualizada para: " & theName
            else
                log "Saltando / sin nota para: " & theName -- maneja notas basadas en Exchange, que no son igual a "missing value" incluso cuando está en blanco
            end if

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

-- Restaurar el valor de delimitador antiguo.
set AppleScript's text item delimiters to astid

-- Guardar los cambios en Contactos.
tell application "Contacts" to save
--> Retorna 'missing value'. No se conoce significado conocido.

Hay una extensa sección en el medio que maneja bloques PGP que podrían aparecer en tu libreta de direcciones. Puede parecer excesivo, pero esos bloques son muy sensibles a tener una colocación correcta de saltos de línea. Si te faltan los saltos de línea adecuados, GPGTools (en su estado actual) simplemente fallará cuando intentes desencriptarlos y no mostrará ningún error útil que indique el problema.

Para ejecutar esto, simplemente pégalo en AppleScript Editor y haz clic en Ejecutar. Advertencia básica: haz una copia de seguridad de tus contactos antes.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X