OK, eu percebi isso. A idéia geral era copiar as novas partes do banco de dados para o antigo, tendo assim um banco de dados totalmente funcional. Ao longo do tempo, refiro-me às fotos "antigas" / banco de dados como a que funcionava antes de remover o armazenamento e as "novas" fotos / banco de dados como as que funcionam após uma determinada data (que provavelmente tem um local de armazenamento diferente ou foram adicionadas depois que as fotos foram excluídas), mas onde as fotos "antigas" não funcionam corretamente. Espero que isso faça sentido. :)
Para que isso funcione, você precisa ter feito backups do banco de dados Shotwell. Então eu estou supondo que você sabe um pouco sobre onde isso é armazenado.
Preparação
Faça backups de tudo! Não estou brincando, não há garantias de que isso funcionará.
O primeiro passo é instalar o sqliteman
sudo apt-get install sqliteman
Depois disso, abra seu banco de dados Shotwell de backup usando o Sqliteman. Em seguida, insira isso na caixa de entrada:
SELECT id, filename, flags FROM phototable;
Pressione F9 para executar o comando. Você deve ver referências a todas as suas fotos na caixa de rolagem. Role até o final e verifique se a última foto tem um campo "sinalizadores" de "0". Isso indica que o arquivo está presente e funcionando na última vez que o Shotwell foi executado. Anote o último valor de ID. Vamos chamá-lo de "phototable_max".
Agora, exclua o comando anterior e execute este:
SELECT id, filepath, flags FROM backingphototable;
Isso mostra todas as edições que você fez. Novamente, anote o último valor de ID. Chame de "backingphototable_max".
Novamente delete o comando e execute isto:
SELECT id, name FROM eventtable;
Você verá a lista de eventos. Mais uma vez, observe o último valor. Este é "eventtable_max". Isso está ficando um pouco repetitivo, mas agora delete o comando e execute isto:
SELECT id, name FROM tagtable;
Anote o valor mais alto. "tagtable_max".
OK, agora temos os números de ID que funcionaram no Shotwell antes de quebrá-lo. Após este ponto, estou assumindo que o banco de dados funciona - ou seja, após o ponto em que você fez o backup, todas as fotos não foram marcadas como ausentes.
Hora do SQLite!
Agora, copie o novo banco de dados para o antigo.
Definitivamente, faça vários backups de seus backups . Há uma boa chance de você estragar tudo. Você não quer perder seu banco de dados Shotwell para sempre.
OK, feche o Sqliteman. É hora de algum trabalho do CLI. Aqui estou assumindo que o seu antigo banco de dados shotwell está localizado em "~ / .local / share / shotwell-old / data / photo.db" e o novo em "~ / .local / share / shotwell-new / data / photo .db "
sqlite3 ~/.local/share/shotwell-old/data/photo.db
Agora você terá um prompt do SQLite. Para isso, digite:
ATTACH "/home/sean/.local/share/shotwell-new/data/photo.db" AS new;
Não esqueça do; e obviamente substitua "sean" pelo seu nome de usuário. E sim, você tem que usar o caminho completo.
Agora podemos apenas fazer esses comandos e pronto! Você precisa substituir os valores _max pelos que você anotou anteriormente.
INSERT INTO phototable SELECT * FROM new.phototable WHERE new.phototable.id > phototable_max;
INSERT INTO backingphototable SELECT * FROM new.backingphototable WHERE new.backingphototable.id > backingphototable_max;
INSERT INTO eventtable SELECT * FROM new.eventtable WHERE new.eventtable.id > eventtable_max;
INSERT INTO tagtable SELECT * FROM new.tagtable WHERE new.tagtable.id > tagtable_max;
DELETE FROM videotable;
INSERT INTO videotable SELECT * FROM new.videotable;
O que estamos fazendo aqui é copiar todos os valores mais recentes para o antigo banco de dados de trabalho a partir da parte funcional do novo banco de dados. As duas últimas linhas excluem e copiam o vídeo, que se adapta bem quando restaura arquivos perdidos.
Em seguida, pressione Ctrl + D para fechar o interpretador sqlite3.
Agora você pode mover o arquivo photo.db para o local da Shotwell, em "~ / .local / share / shotwell / data / photo.db" e abrir o Shotwell e tudo deve funcionar! Certifique-se de ter seu disco rígido ou armazenamento externo conectado neste momento.
Eu descobri que Shotwell correu um pouco devagar uma vez que eu abri, mas acabou recarregando tudo e começou de novo.
Além disso, note que, por causa da maneira como copiamos a tabela de tags, as tags existentes aplicadas a novas fotos foram perdidas. No entanto, todas as tags novas devem sobreviver e, da mesma forma, todas as tags antigas em fotos antigas também sobreviveriam. Isso é por causa da maneira estranha como o Shotwell armazena informações de tags - cada registro de tag no banco de dados armazena quais fotos ele marca.