Vários eventos de montagem no iPod de montagem
Pergunta
Estou trabalhando em um aplicativo que deve detectar se um volume de armazenamento é montado ou desmontado. estou usando GIO
por isso. Eu ouvindo para o mount-added
e mount-removed
sinais. Tudo funciona bem quando eu monto/desmontando uma unidade de caneta. No entanto, estou vendo um problema ao montar um iPod. Estou recebendo dois retornos de chamada cada um no Monte e na desmontagem. Eu assumi um dos GMount
objetos seriam sombreado mas g_mount_is_shadowed está retornando falso para ambos. Como decido qual processar e quais ignorar? Eu não posso processar ambos. Eu tenho que detectar a montagem/desmontar correspondente ao dispositivo de armazenamento e processar apenas isso.
int main()
{
g_type_init();
GVolumeMonitor* volume_monitor = g_volume_monitor_get();
g_signal_connect(G_OBJECT(volume_monitor), "mount-added", G_CALLBACK(mount_added), NULL);
g_signal_connect(G_OBJECT(volume_monitor), "mount-removed", G_CALLBACK(mount_removed), NULL);
GMainLoop* main_loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(main_loop);
...
}
Solução
Eu descobri. GIO
emite a mount-added
sinal para cada sistema de arquivos que é adicionado. O iPod possui dois sistemas de arquivos - um para o sistema operacional e outro para armazenar músicas. Daí o retorno de chamada repetido. O mesmo acontece na desmontagem. Isso não tem nada a ver com montagens sombrias. Infelizmente, ainda não sei como distinguir entre as duas montagens. A única diferença GIO
shows é que um dos GMount
Objetos não têm um GVolume
objeto associado a ele. Eu não sei como interpretar isso.