425
431
if (pMount != NULL) // ce volume est monte.
427
pNewIcon = g_new0 (Icon, 1);
428
pNewIcon->cName = g_mount_get_name (pMount);
430
433
pRootDir = g_mount_get_root (pMount);
431
pNewIcon->cCommand = g_file_get_uri (pRootDir);
432
//g_object_unref (pRootDir);
434
434
pIcon = g_mount_get_icon (pMount);
435
pNewIcon->cFileName = _cd_get_icon_path (pIcon);
436
//g_object_unref (pIcon);
435
pNewIcon = cairo_dock_create_dummy_launcher (g_mount_get_name (pMount),
436
_cd_get_icon_path (pIcon),
437
g_file_get_uri (pRootDir),
440
pNewIcon->iTrueType = CAIRO_DOCK_ICON_TYPE_FILE;
438
//g_object_unref (pMount);
442
g_object_unref (pRootDir);
443
g_object_unref (pIcon);
444
g_object_unref (pMount);
440
446
else // ce volume est demonte, on le montre quand meme (l'automount peut etre off).
442
pNewIcon = g_new0 (Icon, 1);
443
pNewIcon->cName = g_volume_get_name (pVolume);
445
448
pIcon = g_volume_get_icon (pVolume);
446
pNewIcon->cFileName = _cd_get_icon_path (pIcon);
447
//g_object_unref (pIcon);
449
pNewIcon->cCommand = g_strdup (pNewIcon->cName);
449
pNewIcon = cairo_dock_create_dummy_launcher (g_volume_get_name (pVolume),
450
_cd_get_icon_path (pIcon),
451
g_strdup (pNewIcon->cName),
454
pNewIcon->iTrueType = CAIRO_DOCK_ICON_TYPE_FILE;
456
g_object_unref (pIcon);
451
458
pNewIcon->iVolumeID = 1;
452
459
pNewIcon->cBaseURI = g_strdup (pNewIcon->cCommand);
516
523
cd_message (" + volume '%s'\n", g_volume_get_name (pVolume));
517
if (pNewIcon != NULL)
518
pNewIcon = _cd_get_icon_for_volume (pVolume, NULL);
524
pNewIcon = _cd_get_icon_for_volume (pVolume, NULL);
519
525
pIconsList = g_list_prepend (pIconsList, pNewIcon);
521
527
//g_object_unref (pVolume);
541
547
cd_message ("+ volume '%s'", g_volume_get_name (pVolume));
542
if (pNewIcon != NULL)
543
pNewIcon = _cd_get_icon_for_volume (NULL, pMount);
548
pNewIcon = _cd_get_icon_for_volume (NULL, pMount);
544
549
pIconsList = g_list_prepend (pIconsList, pNewIcon);
546
551
//g_object_unref (pMount);
550
555
return pIconsList;
553
GList *vfs_backend_list_directory (const gchar *cBaseURI, CairoDockFMSortType iSortType, int iNewIconsType, gboolean bListHiddenFiles, gchar **cFullURI)
558
GList *vfs_backend_list_directory (const gchar *cBaseURI, CairoDockFMSortType iSortType, int iNewIconsType, gboolean bListHiddenFiles, int iNbMaxFiles, gchar **cFullURI)
555
560
g_return_val_if_fail (cBaseURI != NULL, NULL);
556
561
cd_message ("%s (%s)", __func__, cBaseURI);
626
631
const gchar *cMimeType = g_file_info_get_content_type (pFileInfo);
627
632
gchar *cName = NULL;
629
icon = g_new0 (Icon, 1);
634
icon = cairo_dock_create_dummy_launcher (NULL, NULL, NULL, NULL, 0);
635
icon->iTrueType = CAIRO_DOCK_ICON_TYPE_FILE;
630
636
icon->iType = iNewIconsType;
631
637
icon->cBaseURI = g_strconcat (*cFullURI, "/", cFileName, NULL);
632
638
cd_message ("+ %s (mime:%s)", icon->cBaseURI, cMimeType);
740
750
//g_list_prepend (pIconList, icon);
743
} while (TRUE); // 'g_file_enumerator_close' est appelee lors du dernier 'g_file_enumerator_next_file'.
753
} while (iOrder < iNbMaxFiles); // 'g_file_enumerator_close' est appelee lors du dernier 'g_file_enumerator_next_file'.
754
if (iOrder == iNbMaxFiles)
755
g_file_enumerator_close (pFileEnum, NULL, NULL); // g_file_enumerator_close() est appelee lors du dernier 'g_file_enumerator_next_file'.
745
758
if (bAddHome && pIconList != NULL)
747
icon = g_new0 (Icon, 1);
760
Icon *pRootIcon = cairo_dock_get_icon_with_name (pIconList, "/");
761
if (pRootIcon == NULL)
763
pRootIcon = cairo_dock_get_first_icon (pIconList);
764
cd_debug ("domage ! (%s:%s)\n", pRootIcon->cCommand, pRootIcon->cName);
766
icon = cairo_dock_create_dummy_launcher (g_strdup ("home"),
767
g_strdup (pRootIcon->cFileName),
771
icon->iTrueType = CAIRO_DOCK_ICON_TYPE_FILE;
748
772
icon->iType = iNewIconsType;
749
773
icon->cBaseURI = g_strdup_printf ("file://%s", "/home");
750
icon->cCommand = g_strdup ("/home");
751
//icon->cCommand = g_strdup (icon->cBaseURI);
752
774
icon->iVolumeID = 0;
753
icon->cName = g_strdup ("home");
754
Icon *pRootIcon = cairo_dock_get_icon_with_name (pIconList, "/");
755
if (pRootIcon == NULL)
757
pRootIcon = cairo_dock_get_first_icon (pIconList);
758
g_print ("domage ! (%s:%s)\n", pRootIcon->cCommand, pRootIcon->cName);
760
icon->cFileName = g_strdup (pRootIcon->cFileName);
761
icon->fOrder = iOrder++;
762
775
pIconList = g_list_insert_sorted (pIconList,
764
777
(GCompareFunc) cairo_dock_compare_icons_order);
799
812
g_return_if_fail (cURI != NULL);
801
g_print ("%s (%s)", __func__, cURI);
802
gchar *cCommand = g_strdup_printf ("kfmclient exec \"%s\"", cURI);
814
cd_debug ("%s (%s)", __func__, cURI);
815
gchar *cCommand = g_strdup_printf ("kioclient exec \"%s\"", cURI);
803
816
cairo_dock_launch_command (cCommand);
804
817
g_free (cCommand);
905
919
static void _vfs_backend_mount_callback (gpointer pObject, GAsyncResult *res, gpointer *data)
906
//static void _vfs_backend_mount_callback (gboolean succeeded, char *error, char *detailed_error, gpointer *data)
920
//static void _gio_vfs_mount_callback (gboolean succeeded, char *error, char *detailed_error, gpointer *data)
908
922
cd_message ("%s (%d)", __func__, GPOINTER_TO_INT (data[1]));
924
938
g_error_free (erreur);
927
cd_message ("(un)mount fini -> %d", bSuccess);
928
pCallback (GPOINTER_TO_INT (data[1]) == 1, bSuccess, data[2], data[3], data[4]);
930
//g_object_unref (pObject);
941
cd_message ("(un)mounted -> %d", bSuccess);
942
if (pCallback != NULL)
943
pCallback (GPOINTER_TO_INT (data[1]) == 1, bSuccess, data[2], data[3], data[4]);
934
void vfs_backend_mount (const gchar *cURI, int iVolumeID, CairoDockFMMountCallback pCallback, Icon *icon, CairoContainer *pContainer)
949
void vfs_backend_mount (const gchar *cURI, int iVolumeID, CairoDockFMMountCallback pCallback, gpointer user_data)
936
g_return_if_fail (iVolumeID > 0);
951
g_return_if_fail (cURI != NULL);
937
952
cd_message ("%s (%s)", __func__, cURI);
939
/*gchar *cTargetURI = NULL;
940
GMount *pMount = _cd_find_mount_from_uri (cURI, &cTargetURI);
941
cd_message (" %x / %s\n", pMount, cTargetURI);
942
GVolume *pVolume = g_mount_get_volume (pMount);
943
gpointer *data2 = g_new (gpointer, 5);
944
data2[0] = pCallback;
945
data2[1] = GINT_TO_POINTER (1);
946
data2[2] = g_path_get_basename (cURI);
949
g_volume_mount (pVolume,
953
(GAsyncReadyCallback) _vfs_backend_mount_callback,
955
954
gchar *cTargetURI = _cd_find_target_uri (cURI);
956
955
GFile *pFile = g_file_new_for_uri (cURI);
958
gpointer *data2 = g_new (gpointer, 5);
959
data2[0] = pCallback;
960
data2[1] = GINT_TO_POINTER (1);
961
data2[2] = g_path_get_basename (cTargetURI);
963
data2[4] = pContainer;
957
gpointer *data = g_new (gpointer, 5); // libere dans la callback.
959
data[1] = GINT_TO_POINTER (1); // mount
960
data[2] = (cTargetURI ? g_path_get_basename (cTargetURI) : g_strdup (cURI));
961
data[3] = g_strdup (cURI);
964
963
g_file_mount_mountable (pFile,
965
964
G_MOUNT_MOUNT_NONE,
968
967
(GAsyncReadyCallback) _vfs_backend_mount_callback,
970
969
g_free (cTargetURI);
973
void vfs_backend_unmount (const gchar *cURI, int iVolumeID, CairoDockFMMountCallback pCallback, Icon *icon, CairoContainer *pContainer)
972
void vfs_backend_unmount (const gchar *cURI, int iVolumeID, CairoDockFMMountCallback pCallback, gpointer user_data)
975
974
g_return_if_fail (cURI != NULL);
976
975
cd_message ("%s (%s)", __func__, cURI);
989
988
gboolean bCanUnmount = g_mount_can_unmount (pMount);
990
989
cd_message ("eject:%d / unmount:%d\n", bCanEject, bCanUnmount);
991
990
if (! bCanEject && ! bCanUnmount)
992
cd_warning ("can't unmount this volume (%s)", cURI);
994
gpointer *data2 = g_new (gpointer, 5);
995
data2[0] = pCallback;
996
data2[1] = GINT_TO_POINTER (bCanEject ? 2 : 0);
997
data2[2] = g_mount_get_name (pMount);
999
data2[4] = pContainer;
996
gpointer *data = g_new (gpointer, 5);
998
data[1] = GINT_TO_POINTER (bCanEject ? 2 : 0);
999
data[2] = g_mount_get_name (pMount);
1000
data[3] = g_strdup (cURI);
1001
data[4] = user_data;
1001
1003
g_mount_eject (pMount,
1002
1004
G_MOUNT_UNMOUNT_NONE,
1004
1006
(GAsyncReadyCallback) _vfs_backend_mount_callback,
1007
1009
g_mount_unmount (pMount,
1008
1010
G_MOUNT_UNMOUNT_NONE ,
1010
1012
(GAsyncReadyCallback) _vfs_backend_mount_callback,
1116
gboolean vfs_backend_delete_file (const gchar *cURI)
1118
gboolean vfs_backend_delete_file (const gchar *cURI, gboolean bNoTrash)
1118
1120
g_return_val_if_fail (cURI != NULL, FALSE);
1119
GFile *pFile = (*cURI == '/' ? g_file_new_for_path (cURI) : g_file_new_for_uri (cURI));
1121
GError *erreur = NULL;
1122
gboolean bSuccess = g_file_trash (pFile, NULL, &erreur);
1125
cd_warning ("gnome-integration : %s", erreur->message);
1126
g_error_free (erreur);
1128
g_object_unref (pFile);
1124
GError *erreur = NULL;
1125
gchar *cFilePath = g_filename_from_uri (cURI, NULL, &erreur);
1128
cd_warning ("%s", erreur->message);
1129
g_error_free (erreur);
1132
gchar *cCommand = g_strdup_printf ("rm -rf \"%s\"", cFilePath);
1133
cairo_dock_launch_command (cCommand);
1139
gchar *cCommand = g_strdup_printf ("kioclient move \"%s\" trash:/", cURI);
1140
cairo_dock_launch_command (cCommand);
1132
1146
gboolean vfs_backend_rename_file (const gchar *cOldURI, const gchar *cNewName)
1134
1148
g_return_val_if_fail (cOldURI != NULL, FALSE);
1135
GFile *pOldFile = (*cOldURI == '/' ? g_file_new_for_path (cOldURI) : g_file_new_for_uri (cOldURI));
1136
GError *erreur = NULL;
1137
GFile *pNewFile = g_file_set_display_name (pOldFile, cNewName, NULL, &erreur);
1150
gboolean bSuccess = FALSE;
1151
gchar *cPath = g_path_get_dirname (cOldURI);
1140
cd_warning ("gnome-integration : %s", erreur->message);
1141
g_error_free (erreur);
1154
gchar *cNewURI = g_strdup_printf ("%s/%s", cPath, cNewName);
1155
gchar *cCommand = g_strdup_printf ("kioclient move \"%s\" \"%s\"", cOldURI, cNewURI);
1156
cairo_dock_launch_command (cCommand);
1143
gboolean bSuccess = (pNewFile != NULL);
1144
if (pNewFile != NULL)
1145
g_object_unref (pNewFile);
1146
g_object_unref (pOldFile);
1147
1162
return bSuccess;
1152
1167
g_return_val_if_fail (cURI != NULL, FALSE);
1153
1168
cd_message (" %s -> %s", cURI, cDirectoryURI);
1154
GFile *pFile = (*cURI == '/' ? g_file_new_for_path (cURI) : g_file_new_for_uri (cURI));
1156
gchar *cFileName = g_file_get_basename (pFile);
1157
gchar *cNewFileURI = g_strconcat (cDirectoryURI, "/", cFileName, NULL); // un peu moyen mais bon...
1158
GFile *pDestinationFile = (*cNewFileURI == '/' ? g_file_new_for_path (cNewFileURI) : g_file_new_for_uri (cNewFileURI));
1170
gchar *cFileName = g_path_get_basename (cURI);
1171
gchar *cNewFileURI = g_strconcat (cDirectoryURI, "/", cFileName, NULL);
1172
gchar *cCommand = g_strdup_printf ("kioclient move \"%s\" \"%s\"", cURI, cNewFileURI);
1173
cairo_dock_launch_command (cCommand);
1159
1175
g_free (cNewFileURI);
1160
1176
g_free (cFileName);
1162
GError *erreur = NULL;
1163
gboolean bSuccess = g_file_move (pFile,
1165
G_FILE_COPY_NOFOLLOW_SYMLINKS,
1167
NULL, // GFileProgressCallback
1172
cd_warning ("gnome-integration : %s", erreur->message);
1173
g_error_free (erreur);
1175
g_object_unref (pFile);
1176
g_object_unref (pDestinationFile);
1180
gboolean vfs_backend_create_file (const gchar *cURI, gboolean bDirectory)
1182
g_return_val_if_fail (cURI != NULL, FALSE);
1183
gchar *cPath = g_filename_from_uri (cURI, NULL, NULL);
1186
gboolean bSuccess = TRUE;
1188
cCommand = g_strdup_printf ("mkdir -p \"%s\"", cPath);
1190
cCommand = g_strdup_printf ("touch \"%s\"", cPath);
1191
cairo_dock_launch_command (cCommand);
1177
1195
return bSuccess;
1247
1270
cPath = g_strdup_printf ("%s/Desktop", g_getenv ("HOME"));
1275
gsize vfs_backend_measure_directory (const gchar *cBaseURI, gint iCountType, gboolean bRecursive, gint *pCancel)
1277
g_return_val_if_fail (cBaseURI != NULL, 0);
1278
g_print ("%s (%s)\n", __func__, cBaseURI);
1280
GError *erreur = NULL;
1281
gchar *cDirectory = (*cBaseURI == '/' ? (gchar*)cBaseURI : g_filename_from_uri (cBaseURI, NULL, &erreur));
1284
cd_warning ("kde-integration : %s", erreur->message);
1285
g_error_free (erreur);
1289
GDir *dir = g_dir_open (cDirectory, 0, &erreur);
1292
cd_warning ("kde-integration : %s", erreur->message);
1293
g_error_free (erreur);
1299
const gchar *cFileName;
1300
GString *sFilePath = g_string_new ("");
1301
while ((cFileName = g_dir_read_name (dir)) != NULL && ! g_atomic_int_get (pCancel))
1303
g_string_printf (sFilePath, "%s/%s", cDirectory, cFileName);
1305
if (lstat (sFilePath->str, &buf) != -1)
1307
if (S_ISDIR (buf.st_mode) && bRecursive) // repertoire.
1309
iMeasure += MAX (1, vfs_backend_measure_directory (sFilePath->str, iCountType, bRecursive, pCancel)); // un repertoire vide comptera pour 1.
1311
else // fichier simple.
1313
if (iCountType == 1) // measure size.
1315
iMeasure += buf.st_size;
1317
else // measure nb files.
1326
g_string_free (sFilePath, TRUE);
1327
if (cDirectory != cBaseURI)
1328
g_free (cDirectory);