int main(int ac, char* av[]) { mega_session* s; gc_error_free GError *local_err = NULL; GSList *l = NULL, *i; gint j; tool_init(&ac, &av, "- list files stored at mega.nz", entries); s = tool_start_session(); if (!s) return 1; // gather nodes if (ac == 1) { l = mega_session_ls_all(s); opt_names = FALSE; } else { if (ac > 2 || opt_recursive) opt_names = FALSE; for (j = 1; j < ac; j++) { gc_free gchar* path = tool_convert_filename(av[j], FALSE); mega_node* n = mega_session_stat(s, path); if (n && (n->type == MEGA_NODE_FILE || !opt_names)) l = g_slist_append(l, n); l = g_slist_concat(l, mega_session_ls(s, path, opt_recursive)); } } l = g_slist_sort(l, (GCompareFunc)compare_node); // export if requested if (opt_export && !mega_session_addlinks(s, l, &local_err)) { g_printerr("ERROR: Can't read links info from mega.nz: %s\n", local_err->message); g_slist_free(l); tool_fini(s); return 1; } if (l && opt_long && opt_header && !opt_export) { g_print("===================================================================================\n"); g_print("%-11s %-11s %-1s %13s %-19s %s\n", "Handle", "Owner", "T", "Size", "Mod. Date", opt_names ? "Filename" : "Path"); g_print("===================================================================================\n"); } for (i = l; i; i = i->next) { mega_node* n = i->data; gc_free gchar* node_path = mega_node_get_path_dup(n); if (opt_export) g_print("%73s ", n->link ? mega_node_get_link(n, TRUE) : ""); if (opt_long) { GDateTime* dt = g_date_time_new_from_unix_local(n->timestamp); gc_free gchar* time_str = g_date_time_format(dt, "%Y-%m-%d %H:%M:%S"); g_date_time_unref(dt); gc_free gchar* size_str = NULL; if (opt_human) size_str = n->size > 0 ? g_format_size_full(n->size, G_FORMAT_SIZE_IEC_UNITS) : g_strdup("-"); else size_str = n->size > 0 ? g_strdup_printf("%" G_GUINT64_FORMAT, n->size) : g_strdup("-"); g_print("%-11s %-11s %d %13s %19s %s\n", n->handle, n->user_handle ? n->user_handle : "", n->type, size_str, n->timestamp > 0 ? time_str : "", opt_names ? n->name : node_path ); } else g_print("%s\n", opt_names ? n->name : node_path); } g_slist_free(l); tool_fini(s); return 0; }
int main(int ac, char* av[]) { gc_error_free GError *local_err = NULL; mega_session* s; tool_init(&ac, &av, "- move files on the remote filesystem at mega.nz", entries); if (ac < 3) { g_printerr("ERROR: You must specify both source path(s) and destination path"); return 1; } s = tool_start_session(); if (!s) return 1; gboolean rename = FALSE; gc_free gchar* dest = tool_convert_filename(av[ac - 1], FALSE); // check destination path mega_node* destination = mega_session_stat(s, dest); if (destination) { if (destination->type == MEGA_NODE_FILE) { gc_free gchar* path = mega_node_get_path_dup(destination); g_printerr("Destination file already exists: %s", path); goto err; } if (!mega_node_is_writable(s, destination) || destination->type == MEGA_NODE_NETWORK || destination->type == MEGA_NODE_CONTACT) { gc_free gchar* path = mega_node_get_path_dup(destination); g_printerr("You can't move files into: %s", path); goto err; } } else { rename = TRUE; gc_free gchar* parent_path = g_path_get_dirname(dest); destination = mega_session_stat(s, parent_path); if (!destination) { g_printerr("Destination directory doesn't exist: %s", parent_path); goto err; } if (destination->type == MEGA_NODE_FILE) { gc_free gchar* path = mega_node_get_path_dup(destination); g_printerr("Destination is not directory: %s", path); goto err; } if (!mega_node_is_writable(s, destination) || destination->type == MEGA_NODE_NETWORK || destination->type == MEGA_NODE_CONTACT) { gc_free gchar* path = mega_node_get_path_dup(destination); g_printerr("You can't move files into: %s", path); goto err; } } if (rename && ac > 3) { g_printerr("You can't use multiple source paths when renaming file or directory"); goto err; } // enumerate source paths gint i; for (i = 1; i < ac - 1; i++) { gc_free gchar* path = tool_convert_filename(av[i], FALSE); mega_node* n = mega_session_stat(s, path); if (!n) { g_printerr("Source file doesn't exists: %s", path); goto err; } if (n->type != MEGA_NODE_FILE && n->type != MEGA_NODE_FOLDER) { g_printerr("Source is not movable: %s", path); goto err; } // check destination gc_free gchar* n_path = mega_node_get_path_dup(n); gc_free gchar* destination_path = mega_node_get_path_dup(destination); gc_free gchar* basename = g_path_get_basename(n_path); gc_free gchar* tmp = g_strconcat(destination_path, "/", basename, NULL); // check destination path mega_node* dn = mega_session_stat(s, tmp); if (dn) { gc_free gchar* dn_path = mega_node_get_path_dup(dn); g_printerr("Destination file already exists: %s", dn_path); goto err; } // perform move //if (!mega_session_mkdir(s, path, &local_err)) //{ //g_printerr("ERROR: Can't create directory %s: %s\n", path, local_err->message); //g_clear_error(&local_err); //} g_print("mv %s %s/%s\n", n_path, destination_path, tmp); } mega_session_save(s, NULL); tool_fini(s); return 0; err: tool_fini(s); return 1; }