O ile przeglądarka Firefox od jakiegoś czasu – po zmianach w zarządzaniu plikami sesyjnymi – całkiem dobrze radzi sobie z obsługą sesji (otwartych okien i kart), o tyle Thunderbird w tym temacie totalnie kuleje. Czy to nieplanowany restart komputera (np. brak zasilania), czy… aktualizacja – nie ma większego znaczenia, zazwyczaj wszystkie otwarte karty (foldery, wiadomości) przepadają. W niedzielę, po kolejnej utracie wszystkich otwartych kart postanowiłem w końcu coś z tym zrobić…

Thunderbird Session BackUp Script

Oczywiście najpierw postanowiłem poszukać, czy nie ma jakichś wtyczek, które by usprawniły zarządzanie sesjami, tak jak to kiedyś stosowałem w przypadku Firefoxa. Nic z tego – a przynajmniej ja nie znalazłem nic sensownego. W takim razie postanowiłem pójść po najmniejszej linii oporu, i przygotować rozwiązanie, które będzie działało podobnie do tego, które jest zaimplementowane w przeglądarce Firefox – w zdefiniowanych odstępach czasu skrypt będzie wykonywał kolejną kopię pliku, tak by w razie potrzeby można było skorzystać z wcześniejszej jego wersji.

Z Thunderbirdem jest jak z demokracją – pełno wad i problemów, ale nic lepszego jak dotąd nie wymyślono…

Domyślnie Thunderbird m.in. informacje o otwartych kartach (i ich stanie) przechowuje w pliku:

C:\Użytkownicy\[nazwa profilu w Windowsie]\AppData\Roaming\Thunderbird\[nazwa-profilu]\session.json

U mnie ta ścieżka wygląda trochę inaczej, załóżmy, że:

D:\Poczta\Thunderbird\Profiles\Webinsider\session.json

I to jej będę używał w dalszych pracach – Wy musicie ją dopasować do własnych ustawień/potrzeb.

Postanowiłem na szybko napisać prosty skrypt (zwykły BAT/CMD), który będzie uruchamiany za pomocą systemowego harmonogramu zadań w zdefiniowanych odstępach czasu (u mnie co 15 minut):

@echo off
IF EXIST "D:\Poczta\Thunderbird\Profiles\Webinsider\session01.json" (
 fc /LB1 D:\Poczta\Thunderbird\Profiles\Webinsider\session.json D:\Poczta\Thunderbird\Profiles\Webinsider\session01.json
 echo "Sprawdzam czy identyczne: 0 - identyczne, koniec pracy; 1 - inne, zaczynam działać"
 if ERRORLEVEL 1 GOTO INNE
 if ERRORLEVEL 0 GOTO EXIT
) ELSE ( 
 echo F | xcopy D:\Poczta\Thunderbird\Profiles\Webinsider\session.json D:\Poczta\Thunderbird\Profiles\Webinsider\session01.json
 echo "Brak pliku pierwszej kopii - tworze go i kończę pracę"
 GOTO EXIT
)

:INNE
echo "Plik źródłowy różni się od pliku pierwszej kopii, zaczynam działać"

del D:\Poczta\Thunderbird\Profiles\Webinsider\session05.json
echo F | xcopy D:\Poczta\Thunderbird\Profiles\Webinsider\session04.json D:\Poczta\Thunderbird\Profiles\Webinsider\session05.json

del D:\Poczta\Thunderbird\Profiles\Webinsider\session04.json
echo F | xcopy D:\Poczta\Thunderbird\Profiles\Webinsider\session03.json D:\Poczta\Thunderbird\Profiles\Webinsider\session04.json

del D:\Poczta\Thunderbird\Profiles\Webinsider\session03.json
echoa F | xcopy D:\Poczta\Thunderbird\Profiles\Webinsider\session02.json D:\Poczta\Thunderbird\Profiles\Webinsider\session03.json

del D:\Poczta\Thunderbird\Profiles\Webinsider\session02.json
echo F | xcopy D:\Poczta\Thunderbird\Profiles\Webinsider\session01.json D:\Poczta\Thunderbird\Profiles\Webinsider\session02.json

del D:\Poczta\Thunderbird\Profiles\Webinsider\session01.json
echo F | xcopy D:\Poczta\Thunderbird\Profiles\Webinsider\session.json D:\Poczta\Thunderbird\Profiles\Webinsider\session01.json

GOTO EXIT

:EXIT
echo "Koniec pracy"
exit

Najpierw skrypt sprawdza czy istniej pierwszy plik zapasowy – jeśli istnieje, to sprawdza czy zawartość jest identyczna jak pliku podstawowego, i jeśli tak, nie ma potrzeby wykonywania kopii zapasowej, więc skrypt kończy działanie. Jeśli jednak plik nie istnieje, lub jego zawartość jest inna niż w przypadku pliku bazowego – skrypt przechodzi do działania.

Tu już nie bawiłem się sprawdzanie czy kolejne kopie istnieją, po prostu skrypt leci kolejno, zastępując najstarsze pliki nowszymi wersjami. Wyjątkiem jest brak pliku pierwszej kopii – wtedy tworzony jest tylko ten jeden dodatkowy plik. Fragment „echo F |” służy by do polecenia xcopy przesłać informacje, że pracujemy z plikiem a nie katalogiem.

Jeśli zdecydujecie się na automatyczne uruchamianie skryptu przez systemowy harmonogram zadań, to warto rozważyć skorzystanie z takiej akcji/komendy, dzięki której skrypt uruchomi się w zminimalizowanym oknie:

%comspec% /c start "" /min "C:\Skrypty\TB-Session-BackUp.bat"

Oczywiście skrypt można by pewnie jeszcze rozwinąć, wprowadzić jakieś pętle, itp., ale raz, że pisałem go w niedzielę, gdy staram się odpoczywać od pracy, a dwa, że… działa, i w 100% spełnia swoje zadanie (u mnie wykonuje łącznie 20 kopii w odstępach co 15 minut).

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk