Task
To refresh Shotwell thumbnails cache.
Description
Shotwell create thumbnail for every picture it display so when you scroll through gallery it will rebuild it. Problem is when storage is slow (SMB over WiFi) it takes some time.
Idea
Force Shotwell to scroll all gallery
Solution
Find id of Shotwell window:
jaqb@linux:~$ xdotool search --onlyvisible --name shotwell 2098671 2099432
As you can see sometimes there are two of them (I don't know why)
Switch to that window an send Page_Down / Next key check.
jaqb@linux:~$ xdotool windowactivate 2099432 --sync key Next
Repeat many many (1000) times but give some time (22s) to refresh all visible pictures. I've prepared bash script:
jaqb@linux:~$ cat ./shotwell-cache-refresh.bash #!/bin/bash xdotool windowactivate --sync $1 for x in `seq 1000`; do sleep 22 xdotool key Next done EOF
After confirmation which identifier is good (2099432) you can run:
jaqb@ubuntu-16:~$ ./shotwell-cache-refresh.bash 209943
and do something more interesting than just typing Page_Down key for more than 6h.
Sometimes you need to cut characters from string. If you need substring starting from characters 4 it is simple:
[you@host ~]$ test="abcdefgh" [you@host ~]$ echo $test | cut -c 4- defgh
If you want to remove last 3 characters you can do this using:
[you@host ~]$ echo ${test:0:${#test}-3} abcde
or
[you@host ~]$ echo $test | rev | cut -c 4- | rev abcde
I prefer the second method.
Przetestowałem zabezpieczenie przed przypadkowy zrobieniem commit'a do repozytorium bez podania numeru zgłoszenia (ticket). Zrobiłem to za pomocą hook'a pre-commit. Wszystkie polecenia podaję względem katalogu repozytorium, u mnie jest to /var/lib/svn/test. Skopiowałem szablon skryptu (parametr -p jest ważny, bo inaczej można popsuć uprawnienia)
cp -p hooks/pre-commit.tpl hooks/pre-commit chmod u+x hooks/pre-commit
i wykomentowałem linię:
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
na koniec po innych testach, tuż przed linią
exit 0
dopisałem taki kawałek kodu
blad=0 $SVNLOOK log -t "$TXN" "$REPOS" \ | grep "#[1-9][0-9]*" > /dev/null || blad=1 if [ $blad -eq 1 ] ; then echo -e "Dodaj numer ticket'a,\nnp.: Zgloszenie #123" 1>&2 exit 2 fi
który sprawdza czy w treści komentarza zawiera #N (gdzie N to dowolna liczba naturalna większa od 0) i zwraca komunikat błędu - użytkownik zobaczy to co wysyłane jest na wyjście błędu. Właściwy test to:
grep "#[1-9][0-9]*"
Dla Trac'a to wystarczy. Można go rozbudować, np. o sprawdzenie czy zawiera refs #N (N to znowu ciąg cyfr) - tak, żeby w Redmine ładnie pokazywał. Wtedy warunek będzie wyglądał tak (ja używam tylko refs):
grep "refs #[1-9][0-9]*"
Oczywiście można jeszcze dodać sprawdzanie pozostałych Referencing keywords oraz Fixing keywords.
Wypadało by też zmienić wyświetlany komunikat na np. Podaj numer zgłoszenia poprzedzony słowem refs, np:\nrefs #123, ale by wstawić tam znak końca wiersza (\n) trzeba dodać parametr -e do polecenia echo. Razem wygląda tak:
echo -e "Podaj numer zgłoszenia poprzedzony słowem refs, \ np:\nrefs #123" 1>&2
Mechanizm uchwytów (hook) do zdarzeń można wykorzystać dowolnie, także do bardziej zaawansowanych testów: np. by zabezpieczyć przed commit'em kodu który się nie da skompilować (chociaż ja bym tego nie robił) lub automatycznego budowania po commit'cie za pomocą post-commit (tego też bym nie robił).
Add comment