uget-2.2.3/0000775000175000017500000000000013602733774007501 500000000000000uget-2.2.3/ui-gtk/0000775000175000017500000000000013602733774010701 500000000000000uget-2.2.3/ui-gtk/UgtkApp-main.c0000664000175000017500000002041213602733704013252 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ // ---------------------------------------------------------------------------- // Windows #if defined _WIN32 || defined _WIN64 // This is for ATTACH_PARENT_PROCESS #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x501 // WinXP #endif #include #include #if defined _WINDOWS static void atexit_callback (void) { FreeConsole (); } static void win32_console_init (void) { typedef BOOL (CALLBACK* LPFNATTACHCONSOLE) (DWORD); LPFNATTACHCONSOLE AttachConsole; HMODULE hmod; // If stdout hasn't been redirected to a file, alloc a console // (_istty() doesn't work for stuff using the GUI subsystem) if (_fileno(stdout) == -1 || _fileno(stdout) == -2) { AttachConsole = NULL; #ifdef UNICODE if ((hmod = GetModuleHandle(L"kernel32.dll"))) #else if ((hmod = GetModuleHandle("kernel32.dll"))) #endif { AttachConsole = (LPFNATTACHCONSOLE) GetProcAddress(hmod, "AttachConsole"); } if ( (AttachConsole && AttachConsole (ATTACH_PARENT_PROCESS)) || AllocConsole() ) { freopen("CONOUT$", "w", stdout); freopen("CONOUT$", "w", stderr); atexit (atexit_callback); } } } int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { int main (int argc, char** argv); // below main() return main (__argc, __argv); } #endif // _WINDOWS #else #include // sync() #endif // _WIN32 || _WIN64 // ---------------------------------------------------------------------------- #include // exit(), EXIT_SUCCESS, EXIT_FAILURE #include // signal(), SIGTERM #include #include #include // OpenSSL #ifdef USE_OPENSSL #include #include static UgMutex* lockarray; static void lock_callback (int mode, int type, char *file, int line) { (void)file; (void)line; if (mode & CRYPTO_LOCK) { ug_mutex_lock (&(lockarray[type])); } else { ug_mutex_unlock (&(lockarray[type])); } } static unsigned long thread_id (void) { unsigned long ret; ret = (unsigned long) ug_thread_self(); return(ret); } static void init_locks (void) { int i; lockarray = (UgMutex*) OPENSSL_malloc (CRYPTO_num_locks() * sizeof(UgMutex)); for (i=0; i #include GCRY_THREAD_OPTION_PTHREAD_IMPL; static void init_locks (void) { gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); } #define kill_locks() #endif // USE_GNUTLS // libnotify #ifdef HAVE_LIBNOTIFY #include #endif // GStreamer #ifdef HAVE_GSTREAMER #include gboolean gst_inited = FALSE; #endif #include // ---------------------------------------------------------------------------- // SIGTERM UgtkApp* ugtk_app; gboolean ugtk_quitting = FALSE; static void sys_signal_handler (int sig) { // void ug_socket_server_close (UgSocketServer* server); switch (sig) { case SIGINT: // Ctrl-C case SIGTERM: // termination request case SIGABRT: // Abnormal termination (abort) // case SIGQUIT: // avoid crash when program re-enter signal handler. if (ugtk_quitting == FALSE) { ugtk_quitting = TRUE; // This will quit gtk_main() to main() ugtk_app_quit (ugtk_app); #if !(defined _WIN32 || defined _WIN64) sync(); #endif } break; // case SIGSEGV: // signal (SIGSEGV, NULL); // ug_socket_server_close (ugtk_app->rpc->server); // break; default: break; } } /* static void sys_set_sigaction () { struct sigaction action, old_action; action.sa_handler = sys_signal_handler; sigemptyset(&action.sa_mask); action.sa_flags = 0; //action.sa_flags |= SA_RESTART; sigaction(SIGINT, NULL, &old_action); if (old_action.sa_handler != SIG_IGN) { sigaction(SIGINT, &action, NULL); } } */ // ---------------------------------------------------------------------------- // main () int main (int argc, char** argv) { UgetRpc* rpc; // I18N bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); // Command line if (ug_args_find_version (argc-1, argv+1)) { #if (defined _WIN32 || defined _WIN64) && defined _WINDOWS win32_console_init (); #endif g_print ("uGet " PACKAGE_VERSION " for GTK+" "\n"); return EXIT_SUCCESS; } if (ug_args_find_help (argc-1, argv+1)) { #if (defined _WIN32 || defined _WIN64) && defined _WINDOWS win32_console_init (); #endif ug_option_entry_print_help (uget_option_entry, argv[0], "[URL]", NULL); return EXIT_SUCCESS; } // JSON-RPC server rpc = uget_rpc_new (NULL); #ifdef USE_UNIX_DOMAIN_SOCKET rpc->backup_dir = ug_build_filename (ugtk_get_config_dir (), UGTK_APP_DIR, "RPC-socket", NULL); uget_rpc_use_unix_socket (rpc, rpc->backup_dir, -1); ug_free (rpc->backup_dir); #endif rpc->backup_dir = g_build_filename (ugtk_get_config_dir (), UGTK_APP_DIR, "attachment", NULL); ug_create_dir_all (rpc->backup_dir, -1); if (uget_rpc_start_server (rpc, TRUE)) uget_rpc_send_command (rpc, argc-1, argv+1); else { uget_rpc_send_command (rpc, argc-1, argv+1); uget_rpc_free (rpc); return EXIT_SUCCESS; } // GTK+ gtk_init (&argc, &argv); // SSL #if defined USE_GNUTLS || defined USE_OPENSSL init_locks (); #endif // libnotify #ifdef HAVE_LIBNOTIFY notify_init ("uGet"); #endif // GStreamer #ifdef HAVE_GSTREAMER gst_inited = gst_init_check (&argc, &argv, NULL); #endif ugtk_app = g_malloc0 (sizeof (UgtkApp)); ugtk_app_init (ugtk_app, rpc); // signal handler signal (SIGINT, sys_signal_handler); signal (SIGTERM, sys_signal_handler); signal (SIGABRT, sys_signal_handler); // signal (SIGSEGV, sys_signal_handler); // signal (SIGQUIT, sys_signal_handler); gtk_main (); // avoid crash when program re-enter signal handler. ugtk_quitting = TRUE; // clear/free other resource uget_app_clear_attachment ((UgetApp*) ugtk_app); ugtk_app_final (ugtk_app); g_free (ugtk_app); // sleep 2 second to wait thread and shutdown RPC g_usleep (1000000); uget_rpc_free (rpc); g_usleep (1000000); // libnotify #ifdef HAVE_LIBNOTIFY if (notify_is_initted ()) notify_uninit (); #endif // SSL #if defined USE_GNUTLS || defined USE_OPENSSL kill_locks (); #endif return EXIT_SUCCESS; } uget-2.2.3/ui-gtk/UgtkNodeTree.c0000664000175000017500000005020713602733704013322 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ /* * This file base on GTK+ 2.0 Tree View Tutorial - custom-list.c */ #include #define NODE_TREE_N_COLUMNS 1 /* boring declarations of local functions */ static void init (UgtkNodeTree* ugtree); static void class_init (UgtkNodeTreeClass *klass); static void tree_model_init (GtkTreeModelIface *iface); static void finalize (GObject* object); static GtkTreeModelFlags get_flags (GtkTreeModel* tree_model); static gint get_n_columns (GtkTreeModel* tree_model); static GType get_column_type (GtkTreeModel* tree_model, gint index); static gboolean get_iter (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreePath* path); static GtkTreePath* get_path (GtkTreeModel* tree_model, GtkTreeIter* iter); static void get_value (GtkTreeModel* tree_model, GtkTreeIter* iter, gint column, GValue* value); static gboolean iter_next (GtkTreeModel* tree_model, GtkTreeIter* iter); static gboolean iter_children (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* parent); static gboolean iter_has_child (GtkTreeModel* tree_model, GtkTreeIter* iter); static gint iter_n_children (GtkTreeModel* tree_model, GtkTreeIter* iter); static gboolean iter_nth_child (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* parent, gint n); static gboolean iter_parent (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* child); static GObjectClass* parent_class = NULL; /* GObject stuff - nothing to worry about */ /***************************************************************************** * * class_init: more boilerplate GObject/GType stuff. * Init callback for the type system, * called once when our new class is created. * *****************************************************************************/ static void class_init (UgtkNodeTreeClass* klass) { GObjectClass *object_class; parent_class = (GObjectClass*) g_type_class_peek_parent (klass); object_class = (GObjectClass*) klass; object_class->finalize = finalize; } /***************************************************************************** * * tree_model_init: init callback for the interface registration * in ugtk_node_tree_get_type. Here we override * the GtkTreeModel interface functions that * we implement. * *****************************************************************************/ static void tree_model_init (GtkTreeModelIface* iface) { iface->get_flags = get_flags; iface->get_n_columns = get_n_columns; iface->get_column_type = get_column_type; iface->get_iter = get_iter; iface->get_path = get_path; iface->get_value = get_value; iface->iter_next = iter_next; iface->iter_children = iter_children; iface->iter_has_child = iter_has_child; iface->iter_n_children = iter_n_children; iface->iter_nth_child = iter_nth_child; iface->iter_parent = iter_parent; } /***************************************************************************** * * init: this is called everytime a new object object * instance is created (we do that in g_object_new). * Initialise the list structure's fields here. * *****************************************************************************/ static void init (UgtkNodeTree* utree) { utree->stamp = g_random_int(); /* Random int to check whether an iter belongs to our model */ } /***************************************************************************** * * finalize: this is called just before a object is * destroyed. Free dynamically allocated memory here. * *****************************************************************************/ static void finalize (GObject* object) { // UgtkNodeTree *utree = UGTK_NODE_TREE(object); // must chain up - finalize parent (*parent_class->finalize) (object); } /***************************************************************************** * * get_flags: tells the rest of the world whether our tree model * has any special characteristics. In our case, * we have a list model (instead of a tree), and each * tree iter is valid as long as the row in question * exists, as it only contains a pointer to our struct. * *****************************************************************************/ static GtkTreeModelFlags get_flags (GtkTreeModel* tree_model) { g_return_val_if_fail (UGTK_IS_NODE_TREE(tree_model), (GtkTreeModelFlags)0); if (UGTK_NODE_TREE (tree_model)->list_only) return (GTK_TREE_MODEL_LIST_ONLY | GTK_TREE_MODEL_ITERS_PERSIST); else return (GTK_TREE_MODEL_ITERS_PERSIST); } /***************************************************************************** * * get_n_columns: tells the rest of the world how many data * columns we export via the tree model interface * *****************************************************************************/ static gint get_n_columns (GtkTreeModel* tree_model) { g_return_val_if_fail (UGTK_IS_NODE_TREE(tree_model), 0); return NODE_TREE_N_COLUMNS; } /***************************************************************************** * * get_column_type: tells the rest of the world which type of * data an exported model column contains * *****************************************************************************/ static GType get_column_type (GtkTreeModel* tree_model, gint index) { g_return_val_if_fail (UGTK_IS_NODE_TREE(tree_model), G_TYPE_INVALID); g_return_val_if_fail (index < NODE_TREE_N_COLUMNS && index >= 0, G_TYPE_INVALID); return G_TYPE_POINTER; } /***************************************************************************** * * get_iter: converts a tree path (physical position) into a * tree iter structure (the content of the iter * fields will only be used internally by our model). * We simply store a pointer to our CustomRecord * structure that represents that row in the tree iter. * *****************************************************************************/ static gboolean get_iter (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreePath* path) { UgtkNodeTree* utree; UgetNode* node; gint* indices; gint n, depth; g_assert (UGTK_IS_NODE_TREE(tree_model)); g_assert (path != NULL); utree = UGTK_NODE_TREE(tree_model); indices = gtk_tree_path_get_indices(path); depth = gtk_tree_path_get_depth(path); // prefix.root if (utree->prefix.root) { n = utree->prefix.len; if (n > utree->prefix.root->n_children || n == 0) n = utree->prefix.root->n_children; if (indices[0] < n) node = uget_node_nth_child (utree->prefix.root, indices[0]); else if (utree->root) node = uget_node_nth_child (utree->root, indices[0] - n); else return FALSE; for (n = 1; n < depth; n++) { if (node == NULL) return FALSE; node = uget_node_nth_child (node, indices[n]); } } else { for (node = utree->root, n = 0; n < depth; n++) { if (node == NULL) return FALSE; node = uget_node_nth_child (node, indices[n]); } } if (node == NULL) return FALSE; else { // We store a pointer to UgetNode in the iter iter->stamp = utree->stamp; iter->user_data = node; iter->user_data2 = NULL; /* unused */ iter->user_data3 = NULL; /* unused */ return TRUE; } } /***************************************************************************** * * get_path: converts a tree iter into a tree path (ie. the * physical position of that row in the list). * *****************************************************************************/ static GtkTreePath* get_path (GtkTreeModel* tree_model, GtkTreeIter* iter) { GtkTreePath* path; UgtkNodeTree* utree; UgetNode* node; gint n; g_return_val_if_fail (UGTK_IS_NODE_TREE(tree_model), NULL); g_return_val_if_fail (iter != NULL, NULL); g_return_val_if_fail (iter->user_data != NULL, NULL); node = iter->user_data; path = gtk_tree_path_new(); utree = UGTK_NODE_TREE (tree_model); // prefix.root if (utree->prefix.root) { n = utree->prefix.len; if (n > utree->prefix.root->n_children || n == 0) n = utree->prefix.root->n_children; while (node->parent) { if (node->parent == utree->prefix.root) { gtk_tree_path_prepend_index (path, uget_node_child_position (node->parent, node)); return path; } else if (node->parent == utree->root) { gtk_tree_path_prepend_index (path, uget_node_child_position (node->parent, node) + n); return path; } gtk_tree_path_prepend_index (path, uget_node_child_position (node->parent, node)); node = node->parent; } } else { while (node->parent && node != utree->root) { gtk_tree_path_prepend_index (path, uget_node_child_position (node->parent, node)); node = node->parent; } } return path; } /***************************************************************************** * * get_value: Returns a row's exported data columns * (_get_value is what gtk_tree_model_get uses) * *****************************************************************************/ static void get_value (GtkTreeModel* tree_model, GtkTreeIter* iter, gint column, GValue* value) { // UgtkNodeTree* utree; g_return_if_fail (UGTK_IS_NODE_TREE (tree_model)); g_return_if_fail (iter != NULL); g_return_if_fail (column < NODE_TREE_N_COLUMNS); g_value_init (value, G_TYPE_POINTER); // utree = UGTK_NODE_TREE (tree_model); g_value_set_pointer (value, iter->user_data); } /***************************************************************************** * * iter_next: Takes an iter structure and sets it to point * to the next row. * *****************************************************************************/ static gboolean iter_next (GtkTreeModel* tree_model, GtkTreeIter* iter) { UgtkNodeTree* utree; UgetNode* node; gint n; g_return_val_if_fail (UGTK_IS_NODE_TREE (tree_model), FALSE); utree = UGTK_NODE_TREE (tree_model); node = iter->user_data; if (node == NULL) return FALSE; // prefix.root if (utree->prefix.root && utree->prefix.root == node->parent) { n = utree->prefix.len; if (n > utree->prefix.root->n_children || n == 0) n = utree->prefix.root->n_children; if (uget_node_child_position (node->parent, node) == n - 1) { if (utree->root == NULL || utree->root->children == NULL) return FALSE; iter->stamp = utree->stamp; iter->user_data = utree->root->children; return TRUE; } } if (node->next == NULL) return FALSE; else { iter->stamp = utree->stamp; iter->user_data = node->next; return TRUE; } } /***************************************************************************** * * iter_children: Returns TRUE or FALSE depending on whether * the row specified by 'parent' has any children. * If it has children, then 'iter' is set to * point to the first child. Special case: if * 'parent' is NULL, then the first top-level * row should be returned if it exists. * *****************************************************************************/ static gboolean iter_children (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* parent) { UgtkNodeTree* utree; UgetNode* node; g_return_val_if_fail (UGTK_IS_NODE_TREE (tree_model), FALSE); utree = UGTK_NODE_TREE (tree_model); // parent == NULL is a special case; we need to return the first top-level row if (parent) node = parent->user_data; else { // prefix.root if (utree->prefix.root && utree->prefix.root->children) { iter->stamp = utree->stamp; iter->user_data = utree->prefix.root->children; return TRUE; } node = utree->root; } // Set iter to first child item. if (node == NULL || node->children == NULL) return FALSE; else { iter->stamp = utree->stamp; iter->user_data = node->children; return TRUE; } } /***************************************************************************** * * iter_has_child: Returns TRUE or FALSE depending on whether * the row specified by 'iter' has any children. * We only have a list and thus no children. * *****************************************************************************/ static gboolean iter_has_child (GtkTreeModel* tree_model, GtkTreeIter* iter) { UgetNode* node; node = iter->user_data; if (node->children == NULL) return FALSE; else return TRUE; } /***************************************************************************** * * iter_n_children: Returns the number of children the row * specified by 'iter' has. This is usually 0, * as we only have a list and thus do not have * any children to any rows. A special case is * when 'iter' is NULL, in which case we need * to return the number of top-level nodes, * ie. the number of rows in our list. * *****************************************************************************/ static gint iter_n_children (GtkTreeModel* tree_model, GtkTreeIter* iter) { UgtkNodeTree* utree; UgetNode* node; gint n = 0; g_return_val_if_fail (UGTK_IS_NODE_TREE (tree_model), -1); if (iter == NULL) { utree = UGTK_NODE_TREE (tree_model); // prefix.root if (utree->prefix.root) { n = utree->prefix.len; if (n > utree->prefix.root->n_children || n == 0) n = utree->prefix.root->n_children; } if (utree->root) n += utree->root->n_children; return n; } node = iter->user_data; return node->n_children; } /***************************************************************************** * * iter_nth_child: If the row specified by 'parent' has any * children, set 'iter' to the n-th child and * return TRUE if it exists, otherwise FALSE. * A special case is when 'parent' is NULL, in * which case we need to set 'iter' to the n-th * row if it exists. * *****************************************************************************/ static gboolean iter_nth_child (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* parent, gint n) { UgtkNodeTree* utree; UgetNode* node; gint n_prefix; g_return_val_if_fail (UGTK_IS_NODE_TREE (tree_model), FALSE); utree = UGTK_NODE_TREE (tree_model); // special case: if parent == NULL, set iter to n-th top-level row if (parent) node = parent->user_data; else { // prefix.root if (utree->prefix.root) { n_prefix = utree->prefix.len; if (n_prefix > utree->prefix.root->n_children) n_prefix = utree->prefix.root->n_children; if (n >= n_prefix) n -= n_prefix; else { iter->stamp = utree->stamp; iter->user_data = uget_node_nth_child (utree->prefix.root, n); return TRUE; } } node = utree->root; } if (node == NULL || n >= node->n_children) return FALSE; else { iter->stamp = utree->stamp; iter->user_data = uget_node_nth_child (node, n); return TRUE; } } /***************************************************************************** * * iter_parent: Point 'iter' to the parent node of 'child'. As * we have a list and thus no children and no * parents of children, we can just return FALSE. * *****************************************************************************/ static gboolean iter_parent (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* child) { UgtkNodeTree* utree; UgetNode* node; if (child == NULL || child->user_data == NULL) return FALSE; utree = UGTK_NODE_TREE (tree_model); node = child->user_data; // prefix.root if (node->parent == utree->prefix.root) return FALSE; if (node->parent == utree->root) return FALSE; else { iter->stamp = utree->stamp; iter->user_data = node->parent; return TRUE; } } /***************************************************************************** * * ugtk_node_tree_get_type: here we register our new type and its interfaces * with the type system. If you want to implement * additional interfaces like GtkTreeSortable, you * will need to do it here. * *****************************************************************************/ GType ugtk_node_tree_get_type (void) { static GType ugtk_node_tree_type = 0; /* Some boilerplate type registration stuff */ if (ugtk_node_tree_type == 0) { static const GTypeInfo ugtk_node_tree_info = { sizeof (UgtkNodeTreeClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) class_init, NULL, /* class finalize */ NULL, /* class_data */ sizeof (UgtkNodeTree), 0, /* n_preallocs */ (GInstanceInitFunc) init }; static const GInterfaceInfo tree_model_info = { (GInterfaceInitFunc) tree_model_init, NULL, NULL }; /* First register the new derived type with the GObject type system */ ugtk_node_tree_type = g_type_register_static (G_TYPE_OBJECT, "UgtkNodeTree", &ugtk_node_tree_info, (GTypeFlags)0); /* Now register our GtkTreeModel interface with the type system */ g_type_add_interface_static (ugtk_node_tree_type, GTK_TYPE_TREE_MODEL, &tree_model_info); } return ugtk_node_tree_type; } /***************************************************************************** * * ugtk_node_tree_new: This is what you use in your own code to create a * new uget tree model for you to use. * *****************************************************************************/ UgtkNodeTree* ugtk_node_tree_new (UgetNode* root, gboolean list_only) { UgtkNodeTree* utree; utree = (UgtkNodeTree*) g_object_new (UGTK_TYPE_NODE_TREE, NULL); utree->root = root; utree->list_only = list_only; g_assert( utree != NULL ); return utree; } void ugtk_node_tree_set_prefix (UgtkNodeTree* utree, UgetNode* prefix_root, gint prefix_len) { utree->prefix.root = prefix_root; utree->prefix.len = prefix_len; } uget-2.2.3/ui-gtk/UgtkConfig.h0000664000175000017500000000537713602733704013037 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_CONFIG_H #define UGTK_CONFIG_H #ifdef HAVE_CONFIG_H # include #elif defined _WIN32 || defined _WIN64 //# define HAVE_GLIB 1 #endif #ifdef __cplusplus extern "C" { #endif #ifndef GETTEXT_PACKAGE #define GETTEXT_PACKAGE "uget" #endif #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "2.2.3" #endif // ---------------------------------------------------------------------------- // path const char* ugtk_get_data_dir (void); const char* ugtk_get_config_dir (void); const char* ugtk_get_locale_dir (void); #if defined _WIN32 || defined _WIN64 const char* ugtk_get_install_dir (void); gboolean ugtk_is_portable (void); // Please undef UG_DATADIR and LOCALEDIR if you doesn't want to use fixed path // to load data and you use autoconf and automake to build uGet in MSYS2. #undef UG_DATADIR #undef LOCALEDIR #ifndef UG_DATADIR #define UG_DATADIR ugtk_get_data_dir() #endif #ifndef LOCALEDIR #define LOCALEDIR ugtk_get_locale_dir() #endif #else #ifndef UG_DATADIR #define UG_DATADIR "/usr/share" #endif #ifndef LOCALEDIR #define LOCALEDIR UG_DATADIR "/locale" #endif #endif // _WIN32 || _WIN64 #ifdef __cplusplus } #endif #endif // UGTK_CONFIG_H uget-2.2.3/ui-gtk/UgtkSummary.c0000664000175000017500000002262413602733704013254 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include // static functions static GtkTreeView* ugtk_summary_view_new (); static void ugtk_summary_store_realloc_next (GtkListStore* store, GtkTreeIter* iter); static void ugtk_summary_menu_init (UgtkSummary* summary, GtkAccelGroup* accel_group); void ugtk_summary_init (UgtkSummary* summary, GtkAccelGroup* accel_group) { GtkScrolledWindow* scroll; summary->store = gtk_list_store_new (UGTK_SUMMARY_N_COLUMN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); summary->view = ugtk_summary_view_new (); gtk_tree_view_set_model (summary->view, GTK_TREE_MODEL (summary->store)); summary->self = gtk_scrolled_window_new (NULL, NULL); scroll = GTK_SCROLLED_WINDOW (summary->self); gtk_scrolled_window_set_shadow_type (scroll, GTK_SHADOW_IN); gtk_scrolled_window_set_policy (scroll, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (summary->view)); gtk_widget_set_size_request (summary->self, 200, 90); gtk_widget_show_all (summary->self); // menu ugtk_summary_menu_init (summary, accel_group); // visible summary->visible.name = 1; summary->visible.folder = 1; summary->visible.category = 0; summary->visible.uri = 0; summary->visible.message = 1; } void ugtk_summary_show (UgtkSummary* summary, UgetNode* node) { GtkTreeIter iter; gchar* name; gchar* value; gchar* stock; union { UgetLog* log; UgetEvent* event; UgetCommon* common; } temp; if (node == NULL) { gtk_list_store_clear (summary->store); return; } iter.stamp = 0; // used by ugtk_summary_store_realloc_next() temp.common = ug_info_get (node->info, UgetCommonInfo); // Summary Name if (summary->visible.name) { if (temp.common && temp.common->name) { name = g_strconcat (_("Name"), ":", NULL); value = temp.common->name; } else { name = g_strconcat (_("File"), ":", NULL); value = (temp.common) ? temp.common->file : NULL; if (value == NULL) value = _("unnamed"); } ugtk_summary_store_realloc_next (summary->store, &iter); gtk_list_store_set (summary->store, &iter, UGTK_SUMMARY_COLUMN_ICON , GTK_STOCK_FILE, UGTK_SUMMARY_COLUMN_NAME , name, UGTK_SUMMARY_COLUMN_VALUE, value, -1); g_free (name); } // Summary Folder if (summary->visible.folder) { name = g_strconcat (_("Folder"), ":", NULL); value = (temp.common) ? temp.common->folder : NULL; ugtk_summary_store_realloc_next (summary->store, &iter); gtk_list_store_set (summary->store, &iter, UGTK_SUMMARY_COLUMN_ICON , GTK_STOCK_DIRECTORY, UGTK_SUMMARY_COLUMN_NAME , name, UGTK_SUMMARY_COLUMN_VALUE, value, -1); g_free (name); } // Summary Category if (summary->visible.category) { name = g_strconcat (_("Category"), ":", NULL); if (node->parent) { temp.common = ug_info_get (node->parent->info, UgetCommonInfo); value = (temp.common) ? temp.common->name : NULL; temp.common = ug_info_get (node->info, UgetCommonInfo); } else value = NULL; ugtk_summary_store_realloc_next (summary->store, &iter); gtk_list_store_set (summary->store, &iter, UGTK_SUMMARY_COLUMN_ICON , GTK_STOCK_DND_MULTIPLE, UGTK_SUMMARY_COLUMN_NAME , name, UGTK_SUMMARY_COLUMN_VALUE, value, -1); g_free (name); } // Summary URL if (summary->visible.uri) { name = g_strconcat (_("URI"), ":", NULL); value = (temp.common) ? temp.common->uri : NULL; ugtk_summary_store_realloc_next (summary->store, &iter); gtk_list_store_set (summary->store, &iter, UGTK_SUMMARY_COLUMN_ICON , GTK_STOCK_NETWORK, UGTK_SUMMARY_COLUMN_NAME , name, UGTK_SUMMARY_COLUMN_VALUE, value, -1); g_free (name); } // Summary Message temp.log = ug_info_get (node->info, UgetLogInfo); if (temp.log) temp.event = (UgetEvent*) temp.log->messages.head; if (summary->visible.message) { if (temp.event == NULL) { stock = GTK_STOCK_INFO; value = NULL; } else { value = temp.event->string; switch (temp.event->type) { case UGET_EVENT_ERROR: stock = GTK_STOCK_DIALOG_ERROR; break; case UGET_EVENT_WARNING: stock = GTK_STOCK_DIALOG_WARNING; break; default: stock = GTK_STOCK_INFO; break; } } name = g_strconcat (_("Message"), ":", NULL); ugtk_summary_store_realloc_next (summary->store, &iter); gtk_list_store_set (summary->store, &iter, UGTK_SUMMARY_COLUMN_ICON , stock, UGTK_SUMMARY_COLUMN_NAME , name, UGTK_SUMMARY_COLUMN_VALUE, value, -1); } // clear remaining rows if (gtk_tree_model_iter_next (GTK_TREE_MODEL (summary->store), &iter)) { while (gtk_list_store_remove (summary->store, &iter)) continue; } } gchar* ugtk_summary_get_text_selected (UgtkSummary* summary) { GtkTreeModel* model; GtkTreePath* path; GtkTreeIter iter; gchar* name; gchar* value; gtk_tree_view_get_cursor (summary->view, &path, NULL); if (path == NULL) return NULL; model = GTK_TREE_MODEL (summary->store); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); gtk_tree_model_get (model, &iter, UGTK_SUMMARY_COLUMN_NAME , &name, UGTK_SUMMARY_COLUMN_VALUE, &value, -1); return g_strconcat (name, " ", value, NULL); } gchar* ugtk_summary_get_text_all (UgtkSummary* summary) { GtkTreeModel* model; GtkTreeIter iter; gchar* name; gchar* value; gboolean valid; GString* gstr; gstr = g_string_sized_new (60); model = GTK_TREE_MODEL (summary->store); valid = gtk_tree_model_get_iter_first (model, &iter); while (valid) { gtk_tree_model_get (model, &iter, UGTK_SUMMARY_COLUMN_NAME , &name, UGTK_SUMMARY_COLUMN_VALUE, &value, -1); valid = gtk_tree_model_iter_next (model, &iter); // string g_string_append (gstr, name); if (value) { g_string_append_c (gstr, ' '); g_string_append (gstr, value); } g_string_append_c (gstr, '\n'); } return g_string_free (gstr, FALSE); } // ---------------------------------------------------------------------------- // UgtkSummary static functions // static GtkTreeView* ugtk_summary_view_new () { GtkTreeView* view; GtkCellRenderer* renderer; view = (GtkTreeView*) gtk_tree_view_new (); gtk_tree_view_set_headers_visible (view, FALSE); // columns renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_insert_column_with_attributes ( view, UGTK_SUMMARY_COLUMN_ICON, NULL, renderer, "stock-id", UGTK_SUMMARY_COLUMN_ICON, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes ( view, UGTK_SUMMARY_COLUMN_NAME, _("Item"), renderer, "text", UGTK_SUMMARY_COLUMN_NAME, NULL); gtk_tree_view_insert_column_with_attributes ( view, UGTK_SUMMARY_COLUMN_VALUE, _("Value"), renderer, "text", UGTK_SUMMARY_COLUMN_VALUE, NULL); return view; } static void ugtk_summary_store_realloc_next (GtkListStore* store, GtkTreeIter* iter) { GtkTreeModel* model; model = GTK_TREE_MODEL (store); if (iter->stamp == 0) { if (gtk_tree_model_get_iter_first (model, iter) == FALSE) gtk_list_store_append (store, iter); } else if (gtk_tree_model_iter_next (model, iter) == FALSE) gtk_list_store_append (store, iter); } static void ugtk_summary_menu_init (UgtkSummary* summary, GtkAccelGroup* accel_group) { GtkWidget* image; GtkWidget* menu; GtkWidget* menu_item; // UgtkSummary.menu menu = gtk_menu_new (); // Copy menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, accel_group); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); summary->menu.copy = menu_item; // Copy All menu_item = gtk_image_menu_item_new_with_mnemonic (_("Copy _All")); image = gtk_image_new_from_stock (GTK_STOCK_SELECT_ALL, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); summary->menu.copy_all = menu_item; gtk_widget_show_all (menu); summary->menu.self = GTK_MENU (menu); } uget-2.2.3/ui-gtk/UgtkCategoryForm.c0000664000175000017500000002433313602733704014217 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include #include #include #include static gchar* string_from_ug_array (UgArrayStr* uarray); static void string_to_ug_array (const gchar* string, UgArrayStr* uarray); void ugtk_category_form_init (UgtkCategoryForm* cform) { GtkWidget* label; GtkWidget* entry; GtkGrid* top_grid; GtkGrid* grid; GtkWidget* widget; cform->self = gtk_grid_new (); top_grid = (GtkGrid*) cform->self; gtk_container_set_border_width (GTK_CONTAINER (top_grid), 2); label = gtk_label_new_with_mnemonic (_("Category _name:")); entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); g_object_set (label, "margin", 2, NULL); g_object_set (entry, "margin", 2, "hexpand", TRUE, NULL); gtk_grid_attach (top_grid, label, 0, 0, 1, 1); gtk_grid_attach (top_grid, entry, 1, 0, 1, 1); cform->name_entry = entry; cform->name_label = label; // ------------------------------------------------------------------------ // Capacity grid = (GtkGrid*) gtk_grid_new (); g_object_set (grid, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (top_grid, GTK_WIDGET (grid), 0, 1, 2, 1); cform->spin_active = gtk_spin_button_new_with_range (1.0, 20.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (cform->spin_active), TRUE); // gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); label = gtk_label_new_with_mnemonic (_("Active _downloads:")); gtk_label_set_mnemonic_widget (GTK_LABEL(label), cform->spin_active); g_object_set (label, "margin", 2, NULL); g_object_set (cform->spin_active, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (grid, label, 0, 0, 1, 1); gtk_grid_attach (grid, cform->spin_active, 1, 0, 1, 1); cform->spin_finished = gtk_spin_button_new_with_range (0.0, 99999.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (cform->spin_finished), TRUE); // gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); label = gtk_label_new_with_mnemonic (_("Capacity of Finished:")); gtk_label_set_mnemonic_widget (GTK_LABEL(label), cform->spin_finished); g_object_set (label, "margin", 2, NULL); g_object_set (cform->spin_finished, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (grid, label, 0, 1, 1, 1); gtk_grid_attach (grid, cform->spin_finished, 1, 1, 1, 1); cform->spin_recycled = gtk_spin_button_new_with_range (0.0, 99999.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (cform->spin_recycled), TRUE); // gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); label = gtk_label_new_with_mnemonic (_("Capacity of Recycled:")); gtk_label_set_mnemonic_widget (GTK_LABEL(label), cform->spin_recycled); g_object_set (label, "margin", 2, NULL); g_object_set (cform->spin_recycled, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (grid, label, 0, 2, 1, 1); gtk_grid_attach (grid, cform->spin_recycled, 1, 2, 1, 1); // ------------------------------------------------------------------------ // URI Matching conditions widget = gtk_frame_new (_("URI Matching conditions")); g_object_set (grid, "margin-top", 4, "margin-bottom", 4, NULL); gtk_grid_attach (top_grid, widget, 0, 2, 2, 1); grid = (GtkGrid*) gtk_grid_new (); g_object_set (grid, "margin-top", 2, "margin-bottom", 2, NULL); gtk_container_add (GTK_CONTAINER (widget), (GtkWidget*) grid); label = gtk_label_new_with_mnemonic (_("Matched _Hosts:")); entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); g_object_set (label, "margin", 2, NULL); g_object_set (entry, "margin", 2, "hexpand", TRUE, NULL); gtk_grid_attach (grid, label, 0, 0, 1, 1); gtk_grid_attach (grid, entry, 1, 0, 1, 1); cform->hosts_entry = entry; cform->hosts_label = label; label = gtk_label_new_with_mnemonic (_("Matched _Schemes:")); entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); g_object_set (label, "margin", 2, NULL); g_object_set (entry, "margin", 2, "hexpand", TRUE, NULL); gtk_grid_attach (grid, label, 0, 1, 1, 1); gtk_grid_attach (grid, entry, 1, 1, 1, 1); cform->schemes_entry = entry; cform->schemes_label = label; label = gtk_label_new_with_mnemonic (_("Matched _Types:")); entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); g_object_set (label, "margin", 2, NULL); g_object_set (entry, "margin", 2, "hexpand", TRUE, NULL); gtk_grid_attach (grid, label, 0, 2, 1, 1); gtk_grid_attach (grid, entry, 1, 2, 1, 1); cform->types_entry = entry; cform->types_label = label; gtk_widget_show_all (GTK_WIDGET (top_grid)); } void ugtk_category_form_get (UgtkCategoryForm* cform, UgInfo* cnode_info) { UgetCategory* category; UgetCommon* common; const gchar* text; category = ug_info_realloc(cnode_info, UgetCategoryInfo); common = ug_info_realloc(cnode_info, UgetCommonInfo); if (gtk_widget_is_sensitive (cform->name_entry) == TRUE) { text = gtk_entry_get_text ((GtkEntry*) cform->name_entry); ug_free(common->name); common->name = (*text) ? ug_strdup(text) : NULL; } category->active_limit = gtk_spin_button_get_value_as_int ( (GtkSpinButton*) cform->spin_active); // Finished category->finished_limit = gtk_spin_button_get_value_as_int ( (GtkSpinButton*) cform->spin_finished); // Recycled category->recycled_limit = gtk_spin_button_get_value_as_int ( (GtkSpinButton*) cform->spin_recycled); // matching - clear ug_array_foreach_str (&category->hosts, (UgForeachFunc) ug_free, NULL); ug_array_foreach_str (&category->schemes, (UgForeachFunc) ug_free, NULL); ug_array_foreach_str (&category->file_exts, (UgForeachFunc) ug_free, NULL); category->hosts.length = 0; category->schemes.length = 0; category->file_exts.length = 0; // matching - set string_to_ug_array (gtk_entry_get_text ((GtkEntry*) cform->hosts_entry), &category->hosts); string_to_ug_array (gtk_entry_get_text ((GtkEntry*) cform->schemes_entry), &category->schemes); string_to_ug_array (gtk_entry_get_text ((GtkEntry*) cform->types_entry), &category->file_exts); } void ugtk_category_form_set (UgtkCategoryForm* cform, UgInfo* cnode_info) { UgetCommon* common; UgetCategory* category; gchar* str; category = ug_info_realloc(cnode_info, UgetCategoryInfo); common = ug_info_get(cnode_info, UgetCommonInfo); if (gtk_widget_is_sensitive (cform->name_entry) == TRUE) { gtk_entry_set_text ((GtkEntry*) cform->name_entry, (common->name) ? common->name : ""); } gtk_spin_button_set_value ((GtkSpinButton*) cform->spin_active, (gdouble) category->active_limit); // Finished gtk_spin_button_set_value ((GtkSpinButton*) cform->spin_finished, (gdouble) category->finished_limit); // Recycled gtk_spin_button_set_value ((GtkSpinButton*) cform->spin_recycled, (gdouble) category->recycled_limit); // matching str = string_from_ug_array (&category->hosts); gtk_entry_set_text ((GtkEntry*) cform->hosts_entry, str); g_free (str); str = string_from_ug_array (&category->schemes); gtk_entry_set_text ((GtkEntry*) cform->schemes_entry, str); g_free (str); str = string_from_ug_array (&category->file_exts); gtk_entry_set_text ((GtkEntry*) cform->types_entry, str); g_free (str); } void ugtk_category_form_set_multiple (UgtkCategoryForm* cform, gboolean multiple_mode) { if (multiple_mode) { gtk_widget_hide (cform->name_entry); gtk_widget_hide (cform->name_label); gtk_widget_set_sensitive (cform->name_entry, FALSE); gtk_widget_set_sensitive (cform->name_label, FALSE); } else { gtk_widget_show (cform->name_entry); gtk_widget_show (cform->name_label); gtk_widget_set_sensitive (cform->name_entry, TRUE); gtk_widget_set_sensitive (cform->name_label, TRUE); } } // ---------------------------------------------------------------------------- // static function static gchar* string_from_ug_array (UgArrayStr* uarray) { int index, length; char* buffer; for (length = 0, index = 0; index < uarray->length; index++) length += strlen(uarray->at[index]) + 1; // + ';' buffer = g_malloc (length + 1); buffer[0] = 0; for (index = 0; index < uarray->length; index++) { strcat (buffer, uarray->at[index]); strcat (buffer, ";"); } return buffer; } static void string_to_ug_array (const gchar* string, UgArrayStr* uarray) { const gchar* cur; const gchar* prev; for (prev = string, cur = string; ; cur++) { if ((cur[0] == ';' || cur[0] == 0) && cur != prev) { *(char**)ug_array_alloc (uarray, 1) = ug_strndup (prev, cur - prev); prev = cur + 1; } if (cur[0] == 0) break; } } uget-2.2.3/ui-gtk/UgtkCategoryForm.h0000664000175000017500000000472313602733704014225 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_CATEGORY_FORM_H #define UGTK_CATEGORY_FORM_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkCategoryForm UgtkCategoryForm; struct UgtkCategoryForm { GtkWidget* self; GtkWidget* name_label; GtkWidget* name_entry; GtkWidget* spin_active; GtkWidget* spin_finished; GtkWidget* spin_recycled; GtkWidget* hosts_label; GtkWidget* hosts_entry; GtkWidget* schemes_label; GtkWidget* schemes_entry; GtkWidget* types_label; GtkWidget* types_entry; }; void ugtk_category_form_init (UgtkCategoryForm* cform); void ugtk_category_form_get (UgtkCategoryForm* cform, UgInfo* cnode_info); void ugtk_category_form_set (UgtkCategoryForm* cform, UgInfo* cnode_info); void ugtk_category_form_set_multiple (UgtkCategoryForm* cform, gboolean multiple_mode); #ifdef __cplusplus } #endif #endif // End of UGTK_CATEGORY_FROM_H uget-2.2.3/ui-gtk/UgtkMenubar.h0000664000175000017500000001301513602733704013207 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_MENUBAR_H #define UGTK_MENUBAR_H #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkMenubar UgtkMenubar; typedef struct UgtkApp UgtkApp; struct UgtkMenubar { GtkWidget* self; // GtkMenuBar // GtkWidget* self; // GtkMenu* // GtkWidget* shell; // GtkMenuShell* // GtkWidget* other; // GtkMenuItem* struct UgtkFileMenu { // file.create GtkWidget* create_download; GtkWidget* create_category; GtkWidget* create_torrent; GtkWidget* create_metalink; // file.batch struct UgtkFileBatchMenu { GtkWidget* clipboard; // Clipboard batch GtkWidget* sequence; // URL Sequence batch GtkWidget* text_import; // Text file import (.txt) GtkWidget* html_import; // HTML file import (.html) GtkWidget* text_export; // Export to Text file (.txt) } batch; GtkWidget* open_category; GtkWidget* save_category; GtkWidget* save; GtkWidget* offline_mode; GtkWidget* quit; } file; struct UgtkEditMenu { GtkWidget* clipboard_monitor; GtkWidget* clipboard_quiet; GtkWidget* commandline_quiet; GtkWidget* skip_existing; GtkWidget* apply_recent; GtkWidget* settings; // Completion Auto-Actions struct { GtkWidget* disable; GtkWidget* hibernate; GtkWidget* suspend; GtkWidget* shutdown; GtkWidget* reboot; GtkWidget* custom; // separator GtkWidget* remember; GtkWidget* help; } completion; } edit; struct UgtkViewMenu { GtkWidget* toolbar; GtkWidget* statusbar; GtkWidget* category; GtkWidget* summary; struct UgtkViewItemMenu { GtkWidget* name; GtkWidget* folder; GtkWidget* category; // GtkWidget* elapsed; GtkWidget* uri; GtkWidget* message; } summary_items; struct UgtkViewColMenu // download columns { GtkWidget* self; // GtkMenu GtkWidget* complete; GtkWidget* total; GtkWidget* percent; GtkWidget* elapsed; // consuming time GtkWidget* left; // remaining time GtkWidget* speed; GtkWidget* upload_speed; // torrent GtkWidget* uploaded; // torrent GtkWidget* ratio; // torrent GtkWidget* retry; GtkWidget* category; GtkWidget* uri; GtkWidget* added_on; GtkWidget* completed_on; } columns; } view; struct UgtkCategoryMenu { GtkWidget* self; // GtkMenu GtkWidget* create; GtkWidget* delete; GtkWidget* properties; GtkWidget* move_up; GtkWidget* move_down; } category; struct UgtkDownloadMenu { GtkWidget* self; // GtkMenu GtkWidget* create; GtkWidget* delete; GtkWidget* delete_file; // delete file and data. GtkWidget* open; GtkWidget* open_folder; // open containing folder GtkWidget* force_start; GtkWidget* runnable; GtkWidget* pause; struct UgtkDownloadMoveToMenu { GtkWidget* self; // GtkMenu GtkWidget* item; // GtkMenuItem // This array used for mapping menu item and it's category // index 0, 2, 4, 6... GtkMenuItem* // index 1, 3, 5, 7... UgetNode* GPtrArray* array; } move_to; GtkWidget* move_up; GtkWidget* move_down; GtkWidget* move_top; GtkWidget* move_bottom; struct UgtkDownloadPrioriyMenu { GtkWidget* self; // GtkMenu GtkWidget* item; // GtkMenuItem // GtkRadioMenuItem GtkWidget* high; GtkWidget* normal; GtkWidget* low; } prioriy; GtkWidget* properties; } download; struct UgtkHelpMenu { GtkWidget* help_online; GtkWidget* documentation; GtkWidget* support_forum; GtkWidget* submit_feedback; GtkWidget* report_bug; GtkWidget* keyboard_shortcuts; GtkWidget* check_updates; GtkWidget* about_uget; } help; }; void ugtk_menubar_init_ui (UgtkMenubar* menubar, GtkAccelGroup* accel_group); void ugtk_menubar_init_callback (UgtkMenubar* menubar, UgtkApp* app); void ugtk_menubar_sync_category (UgtkMenubar* menubar, UgtkApp* app, gboolean reset); #ifdef __cplusplus } #endif #endif // UGTK_MENUBAR_H uget-2.2.3/ui-gtk/UgtkTraveler.c0000664000175000017500000006156413602733704013411 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include // signal handler static void on_state_cursor_changed (GtkTreeView* view, UgtkTraveler* traveler); static void on_category_cursor_changed (GtkTreeView* view, UgtkTraveler* traveler); static void on_download_cursor_changed (GtkTreeView* view, UgtkTraveler* traveler); static void on_category_row_deleted (GtkTreeModel* model, GtkTreePath* path, UgtkTraveler* traveler); static void on_download_row_deleted (GtkTreeModel* model, GtkTreePath* path, UgtkTraveler* traveler); // static data const static void* sort_callbacks[UGTK_NODE_N_COLUMNS]; const static UgCompareFunc compare_funcs[UGTK_NODE_N_COLUMNS]; void ugtk_traveler_init (UgtkTraveler* traveler, UgtkApp* app) { GtkScrolledWindow* scroll; GtkTreePath* path; GtkTreeViewColumn* column; gint nth; traveler->app = app; // status traveler->state.self = ugtk_node_view_new_for_state (); traveler->state.view = GTK_TREE_VIEW (traveler->state.self); traveler->state.model = ugtk_node_list_new (NULL, 4, TRUE); gtk_tree_view_set_model (traveler->state.view, GTK_TREE_MODEL (traveler->state.model)); // category traveler->category.self = gtk_scrolled_window_new (NULL, NULL); traveler->category.view = (GtkTreeView*) ugtk_node_view_new_for_category (); traveler->category.model = ugtk_node_tree_new (&app->sorted, TRUE); ugtk_node_tree_set_prefix (traveler->category.model, &app->mix, 1); gtk_tree_view_set_model (traveler->category.view, GTK_TREE_MODEL (traveler->category.model)); gtk_widget_set_size_request (traveler->category.self, 165, 100); scroll = GTK_SCROLLED_WINDOW (traveler->category.self); gtk_scrolled_window_set_shadow_type (scroll, GTK_SHADOW_IN); gtk_scrolled_window_set_policy (scroll, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (traveler->category.view)); // download traveler->download.self = gtk_scrolled_window_new (NULL, NULL); traveler->download.view = (GtkTreeView*) ugtk_node_view_new_for_download (); traveler->download.model = ugtk_node_tree_new (NULL, TRUE); gtk_tree_view_set_model (traveler->download.view, GTK_TREE_MODEL (traveler->download.model)); scroll = GTK_SCROLLED_WINDOW (traveler->download.self); gtk_scrolled_window_set_shadow_type (scroll, GTK_SHADOW_IN); gtk_scrolled_window_set_policy (scroll, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (traveler->download.view)); path = gtk_tree_path_new_first (); gtk_tree_view_set_cursor (traveler->state.view, path, NULL, FALSE); gtk_tree_view_set_cursor (traveler->category.view, path, NULL, FALSE); gtk_tree_path_free (path); // cursor position traveler->state.cursor.pos = -1; traveler->category.cursor.pos = -1; traveler->download.cursor.pos = -1; // signal g_signal_connect (traveler->state.view, "cursor-changed", G_CALLBACK (on_state_cursor_changed), traveler); g_signal_connect (traveler->category.view, "cursor-changed", G_CALLBACK (on_category_cursor_changed), traveler); g_signal_connect (traveler->download.view, "cursor-changed", G_CALLBACK (on_download_cursor_changed), traveler); g_signal_connect (traveler->category.model, "row-deleted", G_CALLBACK (on_category_row_deleted), traveler); g_signal_connect (traveler->download.model, "row-deleted", G_CALLBACK (on_download_row_deleted), traveler); for (nth = UGTK_NODE_COLUMN_STATE; nth < UGTK_NODE_N_COLUMNS; nth++) { column = gtk_tree_view_get_column (traveler->download.view, nth); g_signal_connect (column, "clicked", G_CALLBACK (sort_callbacks[nth]), traveler); } } void ugtk_traveler_select_category (UgtkTraveler* traveler, int nth_category, int nth_state) { GtkTreePath* path; if (nth_category != -1) { path = gtk_tree_path_new (); gtk_tree_path_append_index (path, nth_category); gtk_tree_view_set_cursor (traveler->category.view, path, NULL, FALSE); gtk_tree_path_free (path); } if (nth_state != -1) { path = gtk_tree_path_new (); gtk_tree_path_append_index (path, nth_state); gtk_tree_view_set_cursor (traveler->state.view, path, NULL, FALSE); gtk_tree_path_free (path); } } void ugtk_traveler_set_cursor (UgtkTraveler* traveler, UgetNode* node) { GtkTreePath* path; GtkTreeIter iter; if (node && ugtk_traveler_get_iter (traveler, &iter, node)) { path = gtk_tree_model_get_path ( GTK_TREE_MODEL (traveler->download.model), &iter); if (path) { // traveler->download.cursor.node = iter.user_data; // traveler->download.cursor.pos = *gtk_tree_path_get_indices (path); gtk_tree_view_set_cursor (traveler->download.view, path, NULL, FALSE); gtk_tree_path_free (path); } } } UgetNode* ugtk_traveler_get_cursor (UgtkTraveler* traveler) { GtkTreePath* path; int nth; gtk_tree_view_get_cursor (traveler->download.view, &path, NULL); if (path == NULL) return NULL; nth = *gtk_tree_path_get_indices (path); gtk_tree_path_free (path); return uget_node_nth_child (traveler->download.model->root, nth); } gboolean ugtk_traveler_get_iter (UgtkTraveler* traveler, GtkTreeIter* iter, UgetNode* node) { if (node->parent == (UgetNode*) traveler->download.model->root) { iter->stamp = traveler->download.model->stamp; iter->user_data = node; return TRUE; } for (node = node->fake; node; node = node->peer) { if (ugtk_traveler_get_iter (traveler, iter, node)) return TRUE; } return FALSE; } GList* ugtk_traveler_get_selected (UgtkTraveler* traveler) { GtkTreeSelection* selection; GtkTreeModel* model; GtkTreeIter iter; GList* list; GList* nodes; GList* cur; selection = gtk_tree_view_get_selection (traveler->download.view); list = gtk_tree_selection_get_selected_rows (selection, &model); nodes = NULL; for (cur = list; cur; cur = cur->next) { gtk_tree_model_get_iter (model, &iter, cur->data); nodes = g_list_prepend (nodes, iter.user_data); } g_list_free_full (list, (GDestroyNotify) gtk_tree_path_free); return nodes; } void ugtk_traveler_set_selected (UgtkTraveler* traveler, GList* nodes) { GtkTreeSelection* selection; GtkTreeIter iter; selection = gtk_tree_view_get_selection (traveler->download.view); gtk_tree_selection_unselect_all (selection); for (; nodes; nodes = nodes->next) { if (nodes->data == NULL) continue; if (ugtk_traveler_get_iter (traveler, &iter, nodes->data)) gtk_tree_selection_select_iter (selection, &iter); } } GList* ugtk_traveler_reserve_selection (UgtkTraveler* traveler) { GList* list; GList* link; list = ugtk_traveler_get_selected (traveler); for (link = list; link; link = link->next) link->data = ((UgetNode*)link->data)->base; traveler->reserved.list = list; traveler->reserved.node = traveler->download.cursor.node; if (traveler->reserved.node) traveler->reserved.node = traveler->reserved.node->base; return list; } void ugtk_traveler_restore_selection (UgtkTraveler* traveler) { GList* list; UgetNode* node; list = traveler->reserved.list; node = traveler->reserved.node; ugtk_traveler_set_cursor (traveler, node); ugtk_traveler_set_selected (traveler, list); traveler->reserved.list = NULL; traveler->reserved.node = NULL; } gint ugtk_traveler_move_selected_up (UgtkTraveler* traveler) { GtkTreePath* path; UgetNode* node; UgetNode* prev; UgetNode* top; GList* list; GList* link; int counts = 0; list = ugtk_traveler_get_selected (traveler); list = g_list_reverse (list); for (top = NULL, link = list; link; link = link->next) { node = link->data; prev = node->prev; if (top == prev) { top = node; continue; } top = node; for (;;) { if (node->real == NULL || prev->real == NULL) break; if (node->real->parent != prev->real->parent) break; node = node->real; prev = prev->real; } uget_node_move (node->parent, prev, node); counts++; } if (counts > 0) { // scroll to first selected download and move cursor node = list->data; path = gtk_tree_path_new_from_indices ( uget_node_child_position (node->parent, node), -1); gtk_tree_view_scroll_to_cell (traveler->download.view, path, NULL, FALSE, 0, 0); gtk_tree_view_set_cursor (traveler->download.view, path, NULL, FALSE); gtk_tree_path_free (path); // redraw gtk_widget_queue_draw ((GtkWidget*) traveler->download.view); // change selected indices ugtk_traveler_set_selected (traveler, list); } g_list_free (list); return counts; } gint ugtk_traveler_move_selected_down (UgtkTraveler* traveler) { GtkTreePath* path; UgetNode* node; UgetNode* next; UgetNode* bottom; GList* list; GList* link; int counts = 0; list = ugtk_traveler_get_selected (traveler); for (bottom = NULL, link = list; link; link = link->next) { node = link->data; next = node->next; if (bottom == next) { bottom = node; continue; } bottom = node; for (;;) { if (node->real == NULL || next->real == NULL) break; if (node->real->parent != next->real->parent) break; node = node->real; next = next->real; } uget_node_move (node->parent, next->next, node); counts++; } if (counts > 0) { // scroll to last selected download and move cursor node = list->data; path = gtk_tree_path_new_from_indices ( uget_node_child_position (node->parent, node), -1); gtk_tree_view_scroll_to_cell (traveler->download.view, path, NULL, FALSE, 0, 0); gtk_tree_view_set_cursor (traveler->download.view, path, NULL, FALSE); gtk_tree_path_free (path); // redraw gtk_widget_queue_draw ((GtkWidget*) traveler->download.view); // change selected indices ugtk_traveler_set_selected (traveler, list); } g_list_free (list); return counts; } gint ugtk_traveler_move_selected_top (UgtkTraveler* traveler) { GtkTreePath* path; UgetNode* node; UgetNode* sibling; UgetNode* top; GList* list; GList* link; int counts = 0; list = ugtk_traveler_get_selected (traveler); list = g_list_reverse (list); node = list->data; top = node->parent->children; for (link = list; link; link = link->next) { node = link->data; if (top == node) { top = top->next; continue; } sibling = top; for (;;) { if (node->real == NULL || sibling->real == NULL) break; if (node->real->parent != sibling->real->parent) break; node = node->real; sibling = sibling->real; } uget_node_move (node->parent, sibling, node); counts++; } if (counts > 0) { // scroll to top and move cursor gtk_tree_view_scroll_to_point (traveler->download.view, -1, 0); path = gtk_tree_path_new_first (); gtk_tree_view_set_cursor (traveler->download.view, path, NULL, FALSE); gtk_tree_path_free (path); // redraw gtk_widget_queue_draw ((GtkWidget*) traveler->download.view); // change selected indices ugtk_traveler_set_selected (traveler, list); } g_list_free (list); return counts; } gint ugtk_traveler_move_selected_bottom (UgtkTraveler* traveler) { GtkTreePath* path; UgetNode* node; UgetNode* sibling; UgetNode* bottom; GList* list; GList* link; int counts = 0; list = ugtk_traveler_get_selected (traveler); node = list->data; bottom = node->parent->last; for (link = list; link; link = link->next) { node = link->data; if (bottom == node) { bottom = bottom->prev; continue; } sibling = bottom; for (;;) { if (node->real == NULL || sibling->real == NULL) break; if (node->real->parent != sibling->real->parent) break; node = node->real; sibling = sibling->real; } // check this for move to bottom only if (sibling->next == node) continue; // node will be inserted after sibling uget_node_move (node->parent, sibling->next, node); counts++; } if (counts > 0) { // scroll to bottom and move cursor node = list->data; path = gtk_tree_path_new_from_indices ( node->parent->n_children -1, -1); gtk_tree_view_scroll_to_cell (traveler->download.view, path, NULL, FALSE, 0, 0); gtk_tree_view_set_cursor (traveler->download.view, path, NULL, FALSE); gtk_tree_path_free (path); // redraw gtk_widget_queue_draw ((GtkWidget*) traveler->download.view); // change selected indices ugtk_traveler_set_selected (traveler, list); } g_list_free (list); return counts; } void ugtk_traveler_set_sorting (UgtkTraveler* traveler, gboolean sortable, UgtkNodeColumn nth_col, GtkSortType type) { GtkTreeViewColumn* column; UgtkNodeColumn pos; GList* selected; for (pos = 0; pos < UGTK_NODE_N_COLUMNS; pos++) { column = gtk_tree_view_get_column (traveler->download.view, pos); gtk_tree_view_column_set_clickable (column, sortable); // clear column sort status gtk_tree_view_column_set_sort_order (column, GTK_SORT_ASCENDING); gtk_tree_view_column_set_sort_indicator (column, FALSE); } if (nth_col >= UGTK_NODE_N_COLUMNS) return; selected = ugtk_traveler_get_selected (traveler); if (nth_col <= 0) uget_app_set_sorting ((UgetApp*) traveler->app, NULL, FALSE); else { column = gtk_tree_view_get_column (traveler->download.view, nth_col); gtk_tree_view_column_set_sort_order (column, type); gtk_tree_view_column_set_sort_indicator (column, TRUE); uget_app_set_sorting ((UgetApp*) traveler->app, compare_funcs[nth_col], (type == GTK_SORT_DESCENDING) ? TRUE : FALSE); } ugtk_traveler_set_selected (traveler, selected); g_list_free (selected); // redraw gtk_widget_queue_draw ((GtkWidget*) traveler->download.view); } // ---------------------------------------------------------------------------- // signal handler static void on_state_cursor_changed (GtkTreeView* view, UgtkTraveler* traveler) { GtkTreeModel* model; GtkTreePath* path; GtkTreeIter iter; // clear download cursor traveler->download.cursor.node = NULL; traveler->state.cursor.pos_last = traveler->state.cursor.pos; gtk_tree_view_get_cursor (view, &path, NULL); if (path == NULL) { traveler->state.cursor.pos = -1; traveler->state.cursor.node = NULL; return; } if (traveler->state.cursor.pos == gtk_tree_path_get_indices (path)[0]) return; traveler->state.cursor.pos = gtk_tree_path_get_indices (path)[0]; model = gtk_tree_view_get_model (view); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); traveler->state.cursor.node = iter.user_data; // change download.model and refresh it's view gtk_tree_view_set_model (traveler->download.view, NULL); if (iter.user_data) { traveler->download.model->root = iter.user_data; gtk_tree_view_set_model (traveler->download.view, GTK_TREE_MODEL (traveler->download.model)); } } static void on_category_cursor_changed (GtkTreeView* view, UgtkTraveler* traveler) { GtkTreeModel* model; GtkTreePath* path; GtkTreeIter iter; // clear download cursor traveler->download.cursor.node = NULL; traveler->category.cursor.pos_last = traveler->category.cursor.pos; gtk_tree_view_get_cursor (view, &path, NULL); if (path == NULL) { traveler->category.cursor.pos = -1; traveler->category.cursor.node = NULL; return; } if (traveler->category.cursor.pos == gtk_tree_path_get_indices (path)[0]) return; traveler->category.cursor.pos = gtk_tree_path_get_indices (path)[0]; model = gtk_tree_view_get_model (view); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); traveler->category.cursor.node = iter.user_data; // change state.model and refresh it's view model = GTK_TREE_MODEL (traveler->state.model); path = gtk_tree_path_new_from_indices (traveler->state.cursor.pos, -1); gtk_tree_view_set_model (traveler->state.view, NULL); traveler->state.model->root = iter.user_data; gtk_tree_view_set_model (traveler->state.view, model); gtk_tree_view_set_cursor (traveler->state.view, path, NULL, FALSE); gtk_tree_path_free (path); // traveler->state.view will emit signal "cursor_changed" and // call on_state_cursor_changed() } static void on_download_cursor_changed (GtkTreeView* view, UgtkTraveler* traveler) { GtkTreeModel* model; GtkTreePath* path; GtkTreeIter iter; traveler->download.cursor.pos_last = traveler->download.cursor.pos; gtk_tree_view_get_cursor (view, &path, NULL); if (path == NULL) { traveler->download.cursor.pos = -1; traveler->download.cursor.node = NULL; return; } traveler->download.cursor.pos = gtk_tree_path_get_indices (path)[0]; model = gtk_tree_view_get_model (view); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); traveler->download.cursor.node = iter.user_data; } static void on_category_row_deleted (GtkTreeModel* model, GtkTreePath* p, UgtkTraveler* traveler) { GtkTreePath* path; GtkTreeIter iter; // update cursor position when row deleted gtk_tree_view_get_cursor (traveler->category.view, &path, NULL); if (path == NULL) { traveler->category.cursor.pos = 0; traveler->category.cursor.node = NULL; return; } gtk_tree_model_get_iter (model, &iter, path); traveler->category.cursor.node = iter.user_data; traveler->category.cursor.pos = gtk_tree_path_get_indices (path)[0]; gtk_tree_path_free (path); } static void on_download_row_deleted (GtkTreeModel* model, GtkTreePath* p, UgtkTraveler* traveler) { GtkTreePath* path; GtkTreeIter iter; // update cursor position when row deleted gtk_tree_view_get_cursor (traveler->download.view, &path, NULL); if (path == NULL) { traveler->download.cursor.node = NULL; traveler->download.cursor.pos = 0; return; } gtk_tree_model_get_iter (model, &iter, path); traveler->download.cursor.node = iter.user_data; traveler->download.cursor.pos = gtk_tree_path_get_indices (path)[0]; gtk_tree_path_free (path); } // ---------------------------------------------------------------------------- // signal handler for GtkTreeViewColumn static void ugtk_tree_view_column_clicked (GtkTreeViewColumn* column, UgtkNodeColumn nth_column, UgtkTraveler* traveler) { GtkSortType sorttype; UgtkApp* app; gint pos; // get column sort status column = gtk_tree_view_get_column (traveler->download.view, nth_column); sorttype = gtk_tree_view_column_get_sort_order (column); if (gtk_tree_view_column_get_sort_indicator (column)) { if (sorttype == GTK_SORT_ASCENDING) sorttype = GTK_SORT_DESCENDING; else sorttype = GTK_SORT_ASCENDING; } // clear column sort status for (pos = UGTK_NODE_COLUMN_NAME; pos < UGTK_NODE_N_COLUMNS; pos++) { GtkTreeViewColumn* tmp_column; tmp_column = gtk_tree_view_get_column (traveler->download.view, pos); gtk_tree_view_column_set_sort_order (tmp_column, GTK_SORT_ASCENDING); gtk_tree_view_column_set_sort_indicator (tmp_column, FALSE); } app = traveler->app; app->setting.download_column.sort.nth = nth_column; app->setting.download_column.sort.type = sorttype; if (nth_column > UGTK_NODE_COLUMN_STATE) { gtk_tree_view_column_set_sort_order (column, sorttype); gtk_tree_view_column_set_sort_indicator (column, TRUE); } uget_app_set_sorting ((UgetApp*) app, compare_funcs[nth_column], (sorttype == GTK_SORT_DESCENDING) ? TRUE : FALSE); // Any Category/Status can't move download position if they were sorted. ugtk_app_decide_download_sensitive (app); gtk_widget_queue_draw ((GtkWidget*) traveler->download.view); } static void on_state_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_STATE, traveler); } static void on_name_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_NAME, traveler); } static void on_complete_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_COMPLETE, traveler); } static void on_size_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_TOTAL, traveler); } static void on_percent_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_PERCENT, traveler); } static void on_elapsed_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_ELAPSED, traveler); } static void on_left_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_LEFT, traveler); } static void on_speed_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_SPEED, traveler); } static void on_upload_speed_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_UPLOAD_SPEED, traveler); } static void on_uploaded_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_UPLOADED, traveler); } static void on_ratio_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_RATIO, traveler); } static void on_retry_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_RETRY, traveler); } static void on_category_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_CATEGORY, traveler); } static void on_url_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_URI, traveler); } static void on_added_on_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_ADDED_ON, traveler); } static void on_completed_on_column_clicked (GtkTreeViewColumn *column, UgtkTraveler* traveler) { ugtk_tree_view_column_clicked (column, UGTK_NODE_COLUMN_COMPLETED_ON, traveler); } // ---------------------------------------------------------------------------- // static data const static void* sort_callbacks[UGTK_NODE_N_COLUMNS] = { on_state_column_clicked, on_name_column_clicked, on_complete_column_clicked, on_size_column_clicked, on_percent_column_clicked, on_elapsed_column_clicked, on_left_column_clicked, on_speed_column_clicked, on_upload_speed_column_clicked, on_uploaded_column_clicked, on_ratio_column_clicked, on_retry_column_clicked, on_category_column_clicked, on_url_column_clicked, on_added_on_column_clicked, on_completed_on_column_clicked, }; const static UgCompareFunc compare_funcs[UGTK_NODE_N_COLUMNS] = { (UgCompareFunc) NULL, (UgCompareFunc) uget_node_compare_name, (UgCompareFunc) uget_node_compare_complete, (UgCompareFunc) uget_node_compare_size, (UgCompareFunc) uget_node_compare_percent, (UgCompareFunc) uget_node_compare_elapsed, (UgCompareFunc) uget_node_compare_left, (UgCompareFunc) uget_node_compare_speed, (UgCompareFunc) uget_node_compare_upload_speed, (UgCompareFunc) uget_node_compare_uploaded, (UgCompareFunc) uget_node_compare_ratio, (UgCompareFunc) uget_node_compare_retry, (UgCompareFunc) uget_node_compare_parent_name, (UgCompareFunc) uget_node_compare_uri, (UgCompareFunc) uget_node_compare_added_time, (UgCompareFunc) uget_node_compare_completed_time, }; uget-2.2.3/ui-gtk/UgtkSequence.c0000664000175000017500000003757113602733704013376 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include // ---------------------------------------------------------------------------- // UgtkSeqRange static void on_type_changed (GtkComboBox* widget, UgtkSeqRange* range); static void on_show (GtkWidget *widget, UgtkSeqRange* range); void ugtk_seq_range_init (UgtkSeqRange* range, UgtkSequence* seq, GtkSizeGroup* size_group) { GtkBox* box; GtkAdjustment* adjustment; range->self = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); box = (GtkBox*) range->self; g_signal_connect (range->self, "show", G_CALLBACK (on_show), range); // Type range->type = gtk_combo_box_text_new (); gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (range->type), UGTK_SEQ_TYPE_NONE, _("None")); gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (range->type), UGTK_SEQ_TYPE_NUMBER, _("Num")); gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (range->type), UGTK_SEQ_TYPE_CHARACTER, _("Char")); gtk_box_pack_start (box, range->type, FALSE, FALSE, 2); g_signal_connect (range->type, "changed", G_CALLBACK (on_type_changed), range); g_signal_connect_swapped (range->type, "changed", G_CALLBACK (ugtk_sequence_show_preview), seq); // SpinButton - From adjustment = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 99999.0, 1.0, 5.0, 0.0); range->spin_from = gtk_spin_button_new (adjustment, 1.0, 0); gtk_size_group_add_widget (size_group, range->spin_from); gtk_box_pack_start (box, range->spin_from, FALSE, FALSE, 2); g_signal_connect_swapped (range->spin_from, "value-changed", G_CALLBACK (ugtk_sequence_show_preview), seq); // Entry - From range->entry_from = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (range->entry_from), "a"); gtk_entry_set_max_length (GTK_ENTRY (range->entry_from), 1); // gtk_entry_set_width_chars (GTK_ENTRY (range->entry_from), 2); gtk_size_group_add_widget (size_group, range->entry_from); gtk_box_pack_start (box, range->entry_from, FALSE, FALSE, 2); g_signal_connect_swapped (GTK_EDITABLE (range->entry_from), "changed", G_CALLBACK (ugtk_sequence_show_preview), seq); // Label - To range->label_to = gtk_label_new (_("To:")); // range->label_to = gtk_label_new_with_mnemonic (_("To:")); gtk_box_pack_start (box, range->label_to, FALSE, FALSE, 2); // gtk_label_set_mnemonic_widget (GTK_LABEL (widget), range->spin_to); // SpinButton - To adjustment = (GtkAdjustment *) gtk_adjustment_new (10.0, 1.0, 99999.0, 1.0, 5.0, 0.0); range->spin_to = gtk_spin_button_new (adjustment, 1.0, 0); gtk_box_pack_start (box, range->spin_to, FALSE, FALSE, 2); gtk_size_group_add_widget (size_group, range->spin_to); g_signal_connect_swapped (range->spin_to, "value-changed", G_CALLBACK (ugtk_sequence_show_preview), seq); // label - digits range->label_digits = gtk_label_new (_("digits:")); // range->label_digits = gtk_label_new_with_mnemonic (_("digits:")); gtk_box_pack_start (box, range->label_digits, FALSE, FALSE, 2); // gtk_label_set_mnemonic_widget (GTK_LABEL (range->label_digits), range->spin_digits); // SpinButton - digits adjustment = (GtkAdjustment *) gtk_adjustment_new (2.0, 1.0, 20.0, 1.0, 5.0, 0.0); range->spin_digits = gtk_spin_button_new (adjustment, 1.0, 0); gtk_box_pack_start (box, range->spin_digits, FALSE, FALSE, 2); g_signal_connect_swapped (range->spin_digits, "value-changed", G_CALLBACK (ugtk_sequence_show_preview), seq); // Entry - To range->entry_to = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (range->entry_to), "z"); gtk_entry_set_max_length (GTK_ENTRY (range->entry_to), 1); // gtk_entry_set_width_chars (GTK_ENTRY (range->entry_to), 2); gtk_size_group_add_widget (size_group, range->entry_to); gtk_box_pack_start (box, range->entry_to, FALSE, FALSE, 2); g_signal_connect_swapped (GTK_EDITABLE (range->entry_to), "changed", G_CALLBACK(ugtk_sequence_show_preview), seq); // label - case-sensitive range->label_case = gtk_label_new (_("case-sensitive")); gtk_box_pack_start (box, range->label_case, FALSE, FALSE, 2); // gtk_widget_show_all (range->self); } void ugtk_seq_range_set_type (UgtkSeqRange* range, enum UgtkSeqType type) { gtk_combo_box_set_active ((GtkComboBox*) range->type, type); } enum UgtkSeqType ugtk_seq_range_get_type (UgtkSeqRange* range) { return gtk_combo_box_get_active ((GtkComboBox*) range->type); } // signal handler static void on_show (GtkWidget *widget, UgtkSeqRange* range) { ugtk_seq_range_set_type (range, UGTK_SEQ_TYPE_NONE); } // signal handler static void on_type_changed (GtkComboBox* widget, UgtkSeqRange* range) { gint type; type = gtk_combo_box_get_active (widget); switch (type) { case UGTK_SEQ_TYPE_NONE: gtk_widget_set_sensitive (range->label_to, FALSE); gtk_widget_set_sensitive (range->spin_from, FALSE); gtk_widget_set_sensitive (range->spin_to, FALSE); gtk_widget_set_sensitive (range->spin_digits, FALSE); gtk_widget_set_sensitive (range->label_digits, FALSE); gtk_widget_set_sensitive (range->entry_from, FALSE); gtk_widget_set_sensitive (range->entry_to, FALSE); gtk_widget_set_sensitive (range->label_case, FALSE); if (gtk_widget_get_visible (range->spin_from) == TRUE) { gtk_widget_set_visible (range->entry_from, FALSE); gtk_widget_set_visible (range->entry_to, FALSE); gtk_widget_set_visible (range->label_case, FALSE); } break; case UGTK_SEQ_TYPE_NUMBER: gtk_widget_set_sensitive (range->spin_from, TRUE); gtk_widget_set_sensitive (range->label_to, TRUE); gtk_widget_set_sensitive (range->spin_to, TRUE); gtk_widget_set_sensitive (range->spin_digits, TRUE); gtk_widget_set_sensitive (range->label_digits, TRUE); gtk_widget_set_visible (range->spin_from, TRUE); gtk_widget_set_visible (range->spin_to, TRUE); gtk_widget_set_visible (range->spin_digits, TRUE); gtk_widget_set_visible (range->label_digits, TRUE); gtk_widget_set_visible (range->entry_from, FALSE); gtk_widget_set_visible (range->entry_to, FALSE); gtk_widget_set_visible (range->label_case, FALSE); break; case UGTK_SEQ_TYPE_CHARACTER: gtk_widget_set_sensitive (range->entry_from, TRUE); gtk_widget_set_sensitive (range->label_to, TRUE); gtk_widget_set_sensitive (range->entry_to, TRUE); gtk_widget_set_sensitive (range->label_case, TRUE); gtk_widget_set_visible (range->spin_from, FALSE); gtk_widget_set_visible (range->spin_to, FALSE); gtk_widget_set_visible (range->spin_digits, FALSE); gtk_widget_set_visible (range->label_digits, FALSE); gtk_widget_set_visible (range->entry_from, TRUE); gtk_widget_set_visible (range->entry_to, TRUE); gtk_widget_set_visible (range->label_case, TRUE); break; } } // --------------------------------------------------------------------------- // UgtkSequence // static functions static void ugtk_sequence_add_range (UgtkSequence* seq, UgtkSeqRange* range); static void ugtk_sequence_preview_init (struct UgtkSequencePreview* preview); static void ugtk_sequence_preview_show (struct UgtkSequencePreview* preview, const gchar* message); // signal handlers static void on_realize (GtkWidget *widget, UgtkSequence* seq); static void on_destroy (GtkWidget *widget, UgtkSequence* seq); void ugtk_sequence_init (UgtkSequence* seq) { GtkGrid* grid; GtkWidget* label; GtkWidget* entry; GtkWidget* widget; GtkSizeGroup* size_group; // UgetSequence: call uget_sequence_final() in on_destroy() uget_sequence_init (&seq->sequence); // top widget seq->self = gtk_grid_new (); grid = (GtkGrid*) seq->self; gtk_grid_set_row_homogeneous (grid, FALSE); g_signal_connect (seq->self, "realize", G_CALLBACK (on_realize), seq); g_signal_connect (seq->self, "destroy", G_CALLBACK (on_destroy), seq); // URI entry entry = gtk_entry_new (); label = gtk_label_new_with_mnemonic (_("_URI:")); seq->entry = GTK_ENTRY (entry); gtk_label_set_mnemonic_widget(GTK_LABEL (label), entry); gtk_entry_set_activates_default (seq->entry, TRUE); g_object_set (label, "margin", 3, NULL); g_object_set (entry, "margin", 3, "hexpand", TRUE, NULL); gtk_grid_attach (grid, label, 0, 0, 1, 1); gtk_grid_attach (grid, entry, 1, 0, 1, 1); g_signal_connect_swapped (GTK_EDITABLE (entry), "changed", G_CALLBACK (ugtk_sequence_show_preview), seq); // e.g. label = gtk_label_new (_("e.g.")); g_object_set (label, "margin", 3, NULL); gtk_grid_attach (grid, label, 0, 1, 1, 1); label = gtk_label_new ("http://for.example/path/pre*.jpg"); g_object_set (label, "margin", 3, NULL); gtk_grid_attach (grid, label, 1, 1, 1, 1); // separator widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); gtk_grid_attach (grid, widget, 0, 2, 2, 1); // ------------------------------------------------ // UgtkSeqRange size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); ugtk_seq_range_init (&seq->range[0], seq, size_group); ugtk_seq_range_init (&seq->range[1], seq, size_group); ugtk_seq_range_init (&seq->range[2], seq, size_group); g_object_set (seq->range[0].self, "margin", 3, NULL); g_object_set (seq->range[1].self, "margin", 3, NULL); g_object_set (seq->range[2].self, "margin", 3, NULL); gtk_grid_attach (grid, seq->range[0].self, 0, 3, 2, 1); gtk_grid_attach (grid, seq->range[1].self, 0, 4, 2, 1); gtk_grid_attach (grid, seq->range[2].self, 0, 5, 2, 1); g_object_unref (size_group); // ------------------------------------------------ // preview ugtk_sequence_preview_init (&seq->preview); g_object_set (seq->preview.self, "margin", 3, "expand", TRUE, NULL); gtk_grid_attach (grid, seq->preview.self, 0, 6, 2, 1); ugtk_sequence_show_preview (seq); gtk_widget_show_all (seq->self); } void ugtk_sequence_show_preview (UgtkSequence* seq) { GtkTreeIter iter; UgList result; UgLink* link; const char* string; uget_sequence_clear (&seq->sequence); ugtk_sequence_add_range (seq, &seq->range[0]); ugtk_sequence_add_range (seq, &seq->range[1]); ugtk_sequence_add_range (seq, &seq->range[2]); string = gtk_entry_get_text (seq->entry); if (ug_uri_init (NULL, string) == 0) { ugtk_sequence_preview_show (&seq->preview, _("URI is not valid.")); // notify if (seq->notify.func) seq->notify.func (seq->notify.data, FALSE); return; } if (strpbrk (string, "*") == NULL) { ugtk_sequence_preview_show (&seq->preview, _("No wildcard(*) character in URI entry.")); // notify if (seq->notify.func) seq->notify.func (seq->notify.data, FALSE); return; } if (uget_sequence_count (&seq->sequence, string) == 0) { ugtk_sequence_preview_show (&seq->preview, _("No character in 'From' or 'To' entry.")); // notify if (seq->notify.func) seq->notify.func (seq->notify.data, FALSE); return; } ug_list_init (&result); uget_sequence_get_preview (&seq->sequence, string, &result); gtk_list_store_clear (seq->preview.store); for (link = result.head; link; link = link->next) { gtk_list_store_append (seq->preview.store, &iter); gtk_list_store_set (seq->preview.store, &iter, 0, link->data, -1); } uget_sequence_clear_result(&result); // notify if (seq->notify.func) seq->notify.func (seq->notify.data, TRUE); return; } int ugtk_sequence_get_list (UgtkSequence* seq, UgList* result) { const char* string; string = gtk_entry_get_text (seq->entry); return uget_sequence_get_list (&seq->sequence, string, result); } // ---------------------------------------------------------------------------- // static functions // static void ugtk_sequence_add_range (UgtkSequence* seq, UgtkSeqRange* range) { uint32_t first, last; int type, digits; type = ugtk_seq_range_get_type (range); switch (type) { case UGTK_SEQ_TYPE_NUMBER: first = gtk_spin_button_get_value_as_int ((GtkSpinButton*) range->spin_from); last = gtk_spin_button_get_value_as_int ((GtkSpinButton*) range->spin_to); digits = gtk_spin_button_get_value_as_int ((GtkSpinButton*) range->spin_digits); break; case UGTK_SEQ_TYPE_CHARACTER: first = *gtk_entry_get_text (GTK_ENTRY (range->entry_from)); last = *gtk_entry_get_text (GTK_ENTRY (range->entry_to)); digits = 0; break; default: return; } uget_sequence_add (&seq->sequence, first, last, digits); } static void ugtk_sequence_preview_init (struct UgtkSequencePreview* preview) { GtkScrolledWindow* scrolled; GtkCellRenderer* renderer; GtkTreeViewColumn* column; GtkTreeSelection* selection; PangoContext* context; PangoLayout* layout; int height; preview->view = (GtkTreeView*) gtk_tree_view_new (); preview->store = gtk_list_store_new (1, G_TYPE_STRING); gtk_tree_view_set_model (preview->view, (GtkTreeModel*) preview->store); // gtk_tree_view_set_fixed_height_mode (preview->view, TRUE); gtk_widget_set_size_request ((GtkWidget*) preview->view, 140, 140); selection = gtk_tree_view_get_selection (preview->view); gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE); // It will free UgtkSequence.preview_store when UgtkSequence.preview_view destroy. g_object_unref (preview->store); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ( _("Preview"), renderer, "text", 0, NULL); // gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_append_column (preview->view, column); // calc text height context = gtk_widget_get_pango_context ((GtkWidget*)preview->view); layout = pango_layout_new (context); pango_layout_set_text (layout, "Xy", -1); pango_layout_get_pixel_size (layout, NULL, &height); g_object_unref (layout); height *= 10; if (height < 140) height = 140; preview->self = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request (preview->self, 140, height); scrolled = GTK_SCROLLED_WINDOW (preview->self); gtk_scrolled_window_set_shadow_type (scrolled, GTK_SHADOW_IN); gtk_scrolled_window_set_policy (scrolled, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scrolled), GTK_WIDGET (preview->view)); } static void ugtk_sequence_preview_show (struct UgtkSequencePreview* preview, const gchar* message) { GtkTreeIter iter; gtk_list_store_clear (preview->store); // skip first row gtk_list_store_append (preview->store, &iter); // show message in second row gtk_list_store_append (preview->store, &iter); gtk_list_store_set (preview->store, &iter, 0, message, -1); } // ---------------------------------------------------------------------------- // signal handler static void on_realize (GtkWidget *widget, UgtkSequence* seq) { ugtk_seq_range_set_type (&seq->range[0], UGTK_SEQ_TYPE_NUMBER); } static void on_destroy (GtkWidget *widget, UgtkSequence* seq) { uget_sequence_final (&seq->sequence); } uget-2.2.3/ui-gtk/UgtkProxyForm.h0000664000175000017500000000600113602733704013560 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_PROXY_FORM_H #define UGTK_PROXY_FORM_H #include #include #ifdef HAVE_CONFIG_H #include #endif #ifdef __cplusplus extern "C" { #endif typedef struct UgtkProxyForm UgtkProxyForm; struct UgtkProxyForm { GtkWidget* self; // top level widget GtkWidget* type; // GtkComboBox // classic // struct UgtkProxyFormStd { GtkWidget* std; // proxy server GtkWidget* host; // GtkEntry GtkWidget* port; // GtkEntry // authentication GtkWidget* user; // GtkEntry GtkWidget* password; // GtkEntry // } std; // User changed entry struct UgtkProxyFormChanged { gboolean enable:1; // UgProxyFormStd gboolean type:1; gboolean host:1; gboolean port:1; gboolean user:1; gboolean password:1; } changed; //#ifdef HAVE_LIBPWMD struct UgtkProxyFormPwmd { GtkWidget* self; GtkWidget* socket; GtkWidget* socket_args; GtkWidget* file; GtkWidget* element; // User changed entry struct UgtkProxyFormPwmdChanged { gboolean socket:1; gboolean socket_args:1; gboolean file:1; gboolean element:1; } changed; } pwmd; //#endif // HAVE_LIBPWMD }; void ugtk_proxy_form_init (UgtkProxyForm* pform); void ugtk_proxy_form_get (UgtkProxyForm* pform, UgInfo* info); void ugtk_proxy_form_set (UgtkProxyForm* pform, UgInfo* info, gboolean keep_changed); #ifdef __cplusplus } #endif #endif // End of UGTK_PROXY_FORM_H uget-2.2.3/ui-gtk/UgtkSummary.h0000664000175000017500000000525213602733704013257 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_SUMMARY_H #define UGTK_SUMMARY_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkSummary UgtkSummary; enum UGTK_SUMMARY_COLUMN { UGTK_SUMMARY_COLUMN_ICON, UGTK_SUMMARY_COLUMN_NAME, UGTK_SUMMARY_COLUMN_VALUE, UGTK_SUMMARY_N_COLUMN }; struct UgtkSummary { GtkWidget* self; // (GtkScrolledWindow) container for view GtkTreeView* view; GtkListStore* store; struct { GtkMenu* self; // (GtkMenu) pop-up menu GtkWidget* copy; // GtkMenuItem GtkWidget* copy_all; // GtkMenuItem } menu; struct { gboolean name:1; gboolean folder:1; gboolean category:1; gboolean uri:1; gboolean message:1; } visible; }; void ugtk_summary_init (UgtkSummary* summary, GtkAccelGroup* accel_group); void ugtk_summary_show (UgtkSummary* summary, UgetNode* node); // call g_free() to free returned string. gchar* ugtk_summary_get_text_selected (UgtkSummary* summary); gchar* ugtk_summary_get_text_all (UgtkSummary* summary); #ifdef __cplusplus } #endif #endif // End of UGTK_SUMMARY_H uget-2.2.3/ui-gtk/UgtkSettingForm.h0000664000175000017500000001513713602733704014066 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_SETTING_FORM_H #define UGTK_SETTING_FORM_H #include #include #ifdef __cplusplus extern "C" { #endif // ---------------------------------------------------------------------------- // UgtkClipboardForm struct UgtkClipboardForm { GtkWidget* self; GtkWidget* pattern; // GtkTextView GtkTextBuffer* buffer; GtkToggleButton* monitor; GtkToggleButton* quiet; // add download to Nth category GtkWidget* nth_label; GtkSpinButton* nth_spin; // Monitor media website address GtkToggleButton* website; }; void ugtk_clipboard_form_init (struct UgtkClipboardForm* cbform); void ugtk_clipboard_form_set (struct UgtkClipboardForm* cbform, UgtkSetting* setting); void ugtk_clipboard_form_get (struct UgtkClipboardForm* cbform, UgtkSetting* setting); // ---------------------------------------------------------------------------- // UgtkUserInterfaceForm struct UgtkUserInterfaceForm { GtkWidget* self; GtkToggleButton* confirm_exit; GtkToggleButton* confirm_delete; GtkToggleButton* show_trayicon; GtkToggleButton* start_in_tray; GtkToggleButton* close_to_tray; GtkToggleButton* start_in_offline_mode; GtkToggleButton* start_notification; GtkToggleButton* sound_notification; GtkToggleButton* apply_recent; GtkToggleButton* skip_existing; GtkToggleButton* large_icon; #ifdef HAVE_APP_INDICATOR GtkToggleButton* app_indicator; #endif }; void ugtk_user_interface_form_init (struct UgtkUserInterfaceForm* uiform); void ugtk_user_interface_form_set (struct UgtkUserInterfaceForm* uiform, UgtkSetting* setting); void ugtk_user_interface_form_get (struct UgtkUserInterfaceForm* uiform, UgtkSetting* setting); // ---------------------------------------------------------------------------- // UgtkBandwidthForm struct UgtkBandwidthForm { GtkWidget* self; GtkSpinButton* upload; GtkSpinButton* download; }; void ugtk_bandwidth_form_init (struct UgtkBandwidthForm* bwform); void ugtk_bandwidth_form_set (struct UgtkBandwidthForm* bwform, UgtkSetting* setting); void ugtk_bandwidth_form_get (struct UgtkBandwidthForm* bwform, UgtkSetting* setting); // ---------------------------------------------------------------------------- // UgtkCompletionForm struct UgtkCompletionForm { GtkWidget* self; GtkEntry* command; GtkEntry* on_error; }; void ugtk_completion_form_init (struct UgtkCompletionForm* csform); void ugtk_completion_form_set (struct UgtkCompletionForm* csform, UgtkSetting* setting); void ugtk_completion_form_get (struct UgtkCompletionForm* csform, UgtkSetting* setting); // ---------------------------------------------------------------------------- // UgtkAutoSaveForm struct UgtkAutoSaveForm { GtkWidget* self; // auto save and interval GtkToggleButton* enable; GtkWidget* interval_label; GtkSpinButton* interval_spin; GtkWidget* minutes_label; // minutes }; void ugtk_auto_save_form_init (struct UgtkAutoSaveForm* asform); void ugtk_auto_save_form_set (struct UgtkAutoSaveForm* asform, UgtkSetting* setting); void ugtk_auto_save_form_get (struct UgtkAutoSaveForm* asform, UgtkSetting* setting); // ---------------------------------------------------------------------------- // UgtkCommandlineForm struct UgtkCommandlineForm { GtkWidget* self; // --quiet GtkToggleButton* quiet; // --category-index GtkWidget* index_label; GtkSpinButton* index_spin; }; void ugtk_commandline_form_init (struct UgtkCommandlineForm* clform); void ugtk_commandline_form_set (struct UgtkCommandlineForm* clform, UgtkSetting* setting); void ugtk_commandline_form_get (struct UgtkCommandlineForm* clform, UgtkSetting* setting); // ---------------------------------------------------------------------------- // UgtkPluginForm struct UgtkPluginForm { GtkWidget* self; GtkComboBoxText* order; // Aria2 options GtkWidget* aria2_opts; GtkToggleButton* launch; GtkToggleButton* shutdown; GtkEntry* uri; GtkEntry* token; GtkWidget* local; // GtkFrame GtkEntry* path; GtkWidget* args; // GtkTextView GtkTextBuffer* args_buffer; // Speed Limits for Aria2 GtkSpinButton* upload; // KiB/s GtkSpinButton* download; // KiB/s }; void ugtk_plugin_form_init (struct UgtkPluginForm* psform); void ugtk_plugin_form_set (struct UgtkPluginForm* psform, UgtkSetting* setting); void ugtk_plugin_form_get (struct UgtkPluginForm* psform, UgtkSetting* setting); // ---------------------------------------------------------------------------- // UgtkMediaWebsiteForm struct UgtkMediaWebsiteForm { GtkWidget* self; GtkComboBoxText* match_mode; GtkComboBoxText* quality; GtkComboBoxText* type; }; void ugtk_media_website_form_init (struct UgtkMediaWebsiteForm* mwform); void ugtk_media_website_form_set (struct UgtkMediaWebsiteForm* mwform, UgtkSetting* setting); void ugtk_media_website_form_get (struct UgtkMediaWebsiteForm* mwform, UgtkSetting* setting); #ifdef __cplusplus } #endif #endif // End of UGTK_SETTING_FORM_H uget-2.2.3/ui-gtk/Makefile.in0000664000175000017500000024050513602733761012670 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = uget-gtk$(EXEEXT) subdir = ui-gtk ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_uget_gtk_OBJECTS = uget_gtk-UgtkUtil.$(OBJEXT) \ uget_gtk-UgtkConfig.$(OBJEXT) uget_gtk-UgtkSetting.$(OBJEXT) \ uget_gtk-UgtkNodeList.$(OBJEXT) \ uget_gtk-UgtkNodeTree.$(OBJEXT) \ uget_gtk-UgtkNodeView.$(OBJEXT) \ uget_gtk-UgtkTraveler.$(OBJEXT) uget_gtk-UgtkSummary.$(OBJEXT) \ uget_gtk-UgtkTrayIcon.$(OBJEXT) uget_gtk-UgtkBanner.$(OBJEXT) \ uget_gtk-UgtkSequence.$(OBJEXT) \ uget_gtk-UgtkSelector.$(OBJEXT) \ uget_gtk-UgtkProxyForm.$(OBJEXT) \ uget_gtk-UgtkDownloadForm.$(OBJEXT) \ uget_gtk-UgtkCategoryForm.$(OBJEXT) \ uget_gtk-UgtkNodeDialog.$(OBJEXT) \ uget_gtk-UgtkBatchDialog.$(OBJEXT) \ uget_gtk-UgtkScheduleForm.$(OBJEXT) \ uget_gtk-UgtkSettingForm.$(OBJEXT) \ uget_gtk-UgtkSettingDialog.$(OBJEXT) \ uget_gtk-UgtkConfirmDialog.$(OBJEXT) \ uget_gtk-UgtkAboutDialog.$(OBJEXT) \ uget_gtk-UgtkMenubar.$(OBJEXT) \ uget_gtk-UgtkMenubar-ui.$(OBJEXT) uget_gtk-UgtkApp.$(OBJEXT) \ uget_gtk-UgtkApp-ui.$(OBJEXT) \ uget_gtk-UgtkApp-callback.$(OBJEXT) \ uget_gtk-UgtkApp-timeout.$(OBJEXT) \ uget_gtk-UgtkApp-main.$(OBJEXT) uget_gtk_OBJECTS = $(am_uget_gtk_OBJECTS) uget_gtk_DEPENDENCIES = $(top_builddir)/uget/libuget.a \ $(top_builddir)/uglib/libuglib.a uget_gtk_LINK = $(CCLD) $(uget_gtk_CFLAGS) $(CFLAGS) \ $(uget_gtk_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(uget_gtk_SOURCES) DIST_SOURCES = $(uget_gtk_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_INDICATOR_CFLAGS = @APP_INDICATOR_CFLAGS@ APP_INDICATOR_LIBS = @APP_INDICATOR_LIBS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_CONFIG = @CURL_CONFIG@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETCONF = @GETCONF@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LFS_CFLAGS = @LFS_CFLAGS@ LFS_LDFLAGS = @LFS_LDFLAGS@ LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@ LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBPWMD_CFLAGS = @LIBPWMD_CFLAGS@ LIBPWMD_LIBS = @LIBPWMD_LIBS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uget_gtk_CPPFLAGS = \ -DUG_DATADIR='"$(datadir)"' \ -I$(top_srcdir)/ui-gtk \ -I$(top_srcdir)/uget \ -I$(top_srcdir)/uglib uget_gtk_CFLAGS = \ @PTHREAD_CFLAGS@ \ @LFS_CFLAGS@ \ @CURL_CFLAGS@ \ @LIBGCRYPT_CFLAGS@ \ @LIBCRYPTO_CFLAGS@ \ @GTK_CFLAGS@ \ @LIBNOTIFY_CFLAGS@ \ @APP_INDICATOR_CFLAGS@ \ @GSTREAMER_CFLAGS@ \ @LIBPWMD_CFLAGS@ uget_gtk_LDFLAGS = @LFS_LDFLAGS@ uget_gtk_LDADD = \ $(top_builddir)/uget/libuget.a \ $(top_builddir)/uglib/libuglib.a \ @PTHREAD_LIBS@ \ @CURL_LIBS@ \ @LIBGCRYPT_LIBS@ \ @LIBCRYPTO_LIBS@ \ @GTK_LIBS@ \ @LIBNOTIFY_LIBS@ \ @APP_INDICATOR_LIBS@ \ @GSTREAMER_LIBS@ \ @LIBPWMD_LIBS@ uget_gtk_SOURCES = \ UgtkUtil.c UgtkConfig.c UgtkSetting.c \ UgtkNodeList.c UgtkNodeTree.c UgtkNodeView.c \ UgtkTraveler.c UgtkSummary.c \ UgtkTrayIcon.c UgtkBanner.c \ UgtkSequence.c UgtkSelector.c \ UgtkProxyForm.c UgtkDownloadForm.c UgtkCategoryForm.c \ UgtkNodeDialog.c UgtkBatchDialog.c \ UgtkScheduleForm.c UgtkSettingForm.c UgtkSettingDialog.c \ UgtkConfirmDialog.c UgtkAboutDialog.c \ UgtkMenubar.c UgtkMenubar-ui.c \ UgtkApp.c UgtkApp-ui.c UgtkApp-callback.c \ UgtkApp-timeout.c UgtkApp-main.c noinst_HEADERS = \ UgtkUtil.h UgtkConfig.h UgtkSetting.h \ UgtkNodeList.h UgtkNodeTree.h UgtkNodeView.h \ UgtkTraveler.h UgtkSummary.h \ UgtkTrayIcon.h UgtkBanner.h \ UgtkSequence.h UgtkSelector.h \ UgtkProxyForm.h UgtkDownloadForm.h UgtkCategoryForm.h \ UgtkNodeDialog.h UgtkBatchDialog.h \ UgtkScheduleForm.h UgtkSettingForm.h UgtkSettingDialog.h \ UgtkConfirmDialog.h UgtkAboutDialog.h \ UgtkMenubar.h \ UgtkApp.h all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ui-gtk/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ui-gtk/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) uget-gtk$(EXEEXT): $(uget_gtk_OBJECTS) $(uget_gtk_DEPENDENCIES) $(EXTRA_uget_gtk_DEPENDENCIES) @rm -f uget-gtk$(EXEEXT) $(AM_V_CCLD)$(uget_gtk_LINK) $(uget_gtk_OBJECTS) $(uget_gtk_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkAboutDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkApp-callback.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkApp-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkApp-timeout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkApp-ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkApp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkBanner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkBatchDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkCategoryForm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkConfig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkConfirmDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkDownloadForm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkMenubar-ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkMenubar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkNodeDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkNodeList.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkNodeTree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkNodeView.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkProxyForm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkScheduleForm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkSelector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkSequence.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkSetting.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkSettingDialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkSettingForm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkSummary.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkTraveler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkTrayIcon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uget_gtk-UgtkUtil.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` uget_gtk-UgtkUtil.o: UgtkUtil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkUtil.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkUtil.Tpo -c -o uget_gtk-UgtkUtil.o `test -f 'UgtkUtil.c' || echo '$(srcdir)/'`UgtkUtil.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkUtil.Tpo $(DEPDIR)/uget_gtk-UgtkUtil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkUtil.c' object='uget_gtk-UgtkUtil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkUtil.o `test -f 'UgtkUtil.c' || echo '$(srcdir)/'`UgtkUtil.c uget_gtk-UgtkUtil.obj: UgtkUtil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkUtil.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkUtil.Tpo -c -o uget_gtk-UgtkUtil.obj `if test -f 'UgtkUtil.c'; then $(CYGPATH_W) 'UgtkUtil.c'; else $(CYGPATH_W) '$(srcdir)/UgtkUtil.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkUtil.Tpo $(DEPDIR)/uget_gtk-UgtkUtil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkUtil.c' object='uget_gtk-UgtkUtil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkUtil.obj `if test -f 'UgtkUtil.c'; then $(CYGPATH_W) 'UgtkUtil.c'; else $(CYGPATH_W) '$(srcdir)/UgtkUtil.c'; fi` uget_gtk-UgtkConfig.o: UgtkConfig.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkConfig.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkConfig.Tpo -c -o uget_gtk-UgtkConfig.o `test -f 'UgtkConfig.c' || echo '$(srcdir)/'`UgtkConfig.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkConfig.Tpo $(DEPDIR)/uget_gtk-UgtkConfig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkConfig.c' object='uget_gtk-UgtkConfig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkConfig.o `test -f 'UgtkConfig.c' || echo '$(srcdir)/'`UgtkConfig.c uget_gtk-UgtkConfig.obj: UgtkConfig.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkConfig.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkConfig.Tpo -c -o uget_gtk-UgtkConfig.obj `if test -f 'UgtkConfig.c'; then $(CYGPATH_W) 'UgtkConfig.c'; else $(CYGPATH_W) '$(srcdir)/UgtkConfig.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkConfig.Tpo $(DEPDIR)/uget_gtk-UgtkConfig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkConfig.c' object='uget_gtk-UgtkConfig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkConfig.obj `if test -f 'UgtkConfig.c'; then $(CYGPATH_W) 'UgtkConfig.c'; else $(CYGPATH_W) '$(srcdir)/UgtkConfig.c'; fi` uget_gtk-UgtkSetting.o: UgtkSetting.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSetting.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSetting.Tpo -c -o uget_gtk-UgtkSetting.o `test -f 'UgtkSetting.c' || echo '$(srcdir)/'`UgtkSetting.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSetting.Tpo $(DEPDIR)/uget_gtk-UgtkSetting.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSetting.c' object='uget_gtk-UgtkSetting.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSetting.o `test -f 'UgtkSetting.c' || echo '$(srcdir)/'`UgtkSetting.c uget_gtk-UgtkSetting.obj: UgtkSetting.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSetting.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSetting.Tpo -c -o uget_gtk-UgtkSetting.obj `if test -f 'UgtkSetting.c'; then $(CYGPATH_W) 'UgtkSetting.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSetting.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSetting.Tpo $(DEPDIR)/uget_gtk-UgtkSetting.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSetting.c' object='uget_gtk-UgtkSetting.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSetting.obj `if test -f 'UgtkSetting.c'; then $(CYGPATH_W) 'UgtkSetting.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSetting.c'; fi` uget_gtk-UgtkNodeList.o: UgtkNodeList.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkNodeList.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkNodeList.Tpo -c -o uget_gtk-UgtkNodeList.o `test -f 'UgtkNodeList.c' || echo '$(srcdir)/'`UgtkNodeList.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkNodeList.Tpo $(DEPDIR)/uget_gtk-UgtkNodeList.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkNodeList.c' object='uget_gtk-UgtkNodeList.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkNodeList.o `test -f 'UgtkNodeList.c' || echo '$(srcdir)/'`UgtkNodeList.c uget_gtk-UgtkNodeList.obj: UgtkNodeList.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkNodeList.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkNodeList.Tpo -c -o uget_gtk-UgtkNodeList.obj `if test -f 'UgtkNodeList.c'; then $(CYGPATH_W) 'UgtkNodeList.c'; else $(CYGPATH_W) '$(srcdir)/UgtkNodeList.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkNodeList.Tpo $(DEPDIR)/uget_gtk-UgtkNodeList.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkNodeList.c' object='uget_gtk-UgtkNodeList.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkNodeList.obj `if test -f 'UgtkNodeList.c'; then $(CYGPATH_W) 'UgtkNodeList.c'; else $(CYGPATH_W) '$(srcdir)/UgtkNodeList.c'; fi` uget_gtk-UgtkNodeTree.o: UgtkNodeTree.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkNodeTree.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkNodeTree.Tpo -c -o uget_gtk-UgtkNodeTree.o `test -f 'UgtkNodeTree.c' || echo '$(srcdir)/'`UgtkNodeTree.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkNodeTree.Tpo $(DEPDIR)/uget_gtk-UgtkNodeTree.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkNodeTree.c' object='uget_gtk-UgtkNodeTree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkNodeTree.o `test -f 'UgtkNodeTree.c' || echo '$(srcdir)/'`UgtkNodeTree.c uget_gtk-UgtkNodeTree.obj: UgtkNodeTree.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkNodeTree.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkNodeTree.Tpo -c -o uget_gtk-UgtkNodeTree.obj `if test -f 'UgtkNodeTree.c'; then $(CYGPATH_W) 'UgtkNodeTree.c'; else $(CYGPATH_W) '$(srcdir)/UgtkNodeTree.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkNodeTree.Tpo $(DEPDIR)/uget_gtk-UgtkNodeTree.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkNodeTree.c' object='uget_gtk-UgtkNodeTree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkNodeTree.obj `if test -f 'UgtkNodeTree.c'; then $(CYGPATH_W) 'UgtkNodeTree.c'; else $(CYGPATH_W) '$(srcdir)/UgtkNodeTree.c'; fi` uget_gtk-UgtkNodeView.o: UgtkNodeView.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkNodeView.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkNodeView.Tpo -c -o uget_gtk-UgtkNodeView.o `test -f 'UgtkNodeView.c' || echo '$(srcdir)/'`UgtkNodeView.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkNodeView.Tpo $(DEPDIR)/uget_gtk-UgtkNodeView.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkNodeView.c' object='uget_gtk-UgtkNodeView.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkNodeView.o `test -f 'UgtkNodeView.c' || echo '$(srcdir)/'`UgtkNodeView.c uget_gtk-UgtkNodeView.obj: UgtkNodeView.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkNodeView.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkNodeView.Tpo -c -o uget_gtk-UgtkNodeView.obj `if test -f 'UgtkNodeView.c'; then $(CYGPATH_W) 'UgtkNodeView.c'; else $(CYGPATH_W) '$(srcdir)/UgtkNodeView.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkNodeView.Tpo $(DEPDIR)/uget_gtk-UgtkNodeView.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkNodeView.c' object='uget_gtk-UgtkNodeView.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkNodeView.obj `if test -f 'UgtkNodeView.c'; then $(CYGPATH_W) 'UgtkNodeView.c'; else $(CYGPATH_W) '$(srcdir)/UgtkNodeView.c'; fi` uget_gtk-UgtkTraveler.o: UgtkTraveler.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkTraveler.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkTraveler.Tpo -c -o uget_gtk-UgtkTraveler.o `test -f 'UgtkTraveler.c' || echo '$(srcdir)/'`UgtkTraveler.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkTraveler.Tpo $(DEPDIR)/uget_gtk-UgtkTraveler.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkTraveler.c' object='uget_gtk-UgtkTraveler.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkTraveler.o `test -f 'UgtkTraveler.c' || echo '$(srcdir)/'`UgtkTraveler.c uget_gtk-UgtkTraveler.obj: UgtkTraveler.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkTraveler.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkTraveler.Tpo -c -o uget_gtk-UgtkTraveler.obj `if test -f 'UgtkTraveler.c'; then $(CYGPATH_W) 'UgtkTraveler.c'; else $(CYGPATH_W) '$(srcdir)/UgtkTraveler.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkTraveler.Tpo $(DEPDIR)/uget_gtk-UgtkTraveler.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkTraveler.c' object='uget_gtk-UgtkTraveler.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkTraveler.obj `if test -f 'UgtkTraveler.c'; then $(CYGPATH_W) 'UgtkTraveler.c'; else $(CYGPATH_W) '$(srcdir)/UgtkTraveler.c'; fi` uget_gtk-UgtkSummary.o: UgtkSummary.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSummary.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSummary.Tpo -c -o uget_gtk-UgtkSummary.o `test -f 'UgtkSummary.c' || echo '$(srcdir)/'`UgtkSummary.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSummary.Tpo $(DEPDIR)/uget_gtk-UgtkSummary.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSummary.c' object='uget_gtk-UgtkSummary.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSummary.o `test -f 'UgtkSummary.c' || echo '$(srcdir)/'`UgtkSummary.c uget_gtk-UgtkSummary.obj: UgtkSummary.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSummary.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSummary.Tpo -c -o uget_gtk-UgtkSummary.obj `if test -f 'UgtkSummary.c'; then $(CYGPATH_W) 'UgtkSummary.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSummary.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSummary.Tpo $(DEPDIR)/uget_gtk-UgtkSummary.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSummary.c' object='uget_gtk-UgtkSummary.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSummary.obj `if test -f 'UgtkSummary.c'; then $(CYGPATH_W) 'UgtkSummary.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSummary.c'; fi` uget_gtk-UgtkTrayIcon.o: UgtkTrayIcon.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkTrayIcon.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkTrayIcon.Tpo -c -o uget_gtk-UgtkTrayIcon.o `test -f 'UgtkTrayIcon.c' || echo '$(srcdir)/'`UgtkTrayIcon.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkTrayIcon.Tpo $(DEPDIR)/uget_gtk-UgtkTrayIcon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkTrayIcon.c' object='uget_gtk-UgtkTrayIcon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkTrayIcon.o `test -f 'UgtkTrayIcon.c' || echo '$(srcdir)/'`UgtkTrayIcon.c uget_gtk-UgtkTrayIcon.obj: UgtkTrayIcon.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkTrayIcon.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkTrayIcon.Tpo -c -o uget_gtk-UgtkTrayIcon.obj `if test -f 'UgtkTrayIcon.c'; then $(CYGPATH_W) 'UgtkTrayIcon.c'; else $(CYGPATH_W) '$(srcdir)/UgtkTrayIcon.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkTrayIcon.Tpo $(DEPDIR)/uget_gtk-UgtkTrayIcon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkTrayIcon.c' object='uget_gtk-UgtkTrayIcon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkTrayIcon.obj `if test -f 'UgtkTrayIcon.c'; then $(CYGPATH_W) 'UgtkTrayIcon.c'; else $(CYGPATH_W) '$(srcdir)/UgtkTrayIcon.c'; fi` uget_gtk-UgtkBanner.o: UgtkBanner.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkBanner.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkBanner.Tpo -c -o uget_gtk-UgtkBanner.o `test -f 'UgtkBanner.c' || echo '$(srcdir)/'`UgtkBanner.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkBanner.Tpo $(DEPDIR)/uget_gtk-UgtkBanner.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkBanner.c' object='uget_gtk-UgtkBanner.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkBanner.o `test -f 'UgtkBanner.c' || echo '$(srcdir)/'`UgtkBanner.c uget_gtk-UgtkBanner.obj: UgtkBanner.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkBanner.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkBanner.Tpo -c -o uget_gtk-UgtkBanner.obj `if test -f 'UgtkBanner.c'; then $(CYGPATH_W) 'UgtkBanner.c'; else $(CYGPATH_W) '$(srcdir)/UgtkBanner.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkBanner.Tpo $(DEPDIR)/uget_gtk-UgtkBanner.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkBanner.c' object='uget_gtk-UgtkBanner.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkBanner.obj `if test -f 'UgtkBanner.c'; then $(CYGPATH_W) 'UgtkBanner.c'; else $(CYGPATH_W) '$(srcdir)/UgtkBanner.c'; fi` uget_gtk-UgtkSequence.o: UgtkSequence.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSequence.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSequence.Tpo -c -o uget_gtk-UgtkSequence.o `test -f 'UgtkSequence.c' || echo '$(srcdir)/'`UgtkSequence.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSequence.Tpo $(DEPDIR)/uget_gtk-UgtkSequence.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSequence.c' object='uget_gtk-UgtkSequence.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSequence.o `test -f 'UgtkSequence.c' || echo '$(srcdir)/'`UgtkSequence.c uget_gtk-UgtkSequence.obj: UgtkSequence.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSequence.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSequence.Tpo -c -o uget_gtk-UgtkSequence.obj `if test -f 'UgtkSequence.c'; then $(CYGPATH_W) 'UgtkSequence.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSequence.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSequence.Tpo $(DEPDIR)/uget_gtk-UgtkSequence.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSequence.c' object='uget_gtk-UgtkSequence.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSequence.obj `if test -f 'UgtkSequence.c'; then $(CYGPATH_W) 'UgtkSequence.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSequence.c'; fi` uget_gtk-UgtkSelector.o: UgtkSelector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSelector.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSelector.Tpo -c -o uget_gtk-UgtkSelector.o `test -f 'UgtkSelector.c' || echo '$(srcdir)/'`UgtkSelector.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSelector.Tpo $(DEPDIR)/uget_gtk-UgtkSelector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSelector.c' object='uget_gtk-UgtkSelector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSelector.o `test -f 'UgtkSelector.c' || echo '$(srcdir)/'`UgtkSelector.c uget_gtk-UgtkSelector.obj: UgtkSelector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSelector.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSelector.Tpo -c -o uget_gtk-UgtkSelector.obj `if test -f 'UgtkSelector.c'; then $(CYGPATH_W) 'UgtkSelector.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSelector.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSelector.Tpo $(DEPDIR)/uget_gtk-UgtkSelector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSelector.c' object='uget_gtk-UgtkSelector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSelector.obj `if test -f 'UgtkSelector.c'; then $(CYGPATH_W) 'UgtkSelector.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSelector.c'; fi` uget_gtk-UgtkProxyForm.o: UgtkProxyForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkProxyForm.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkProxyForm.Tpo -c -o uget_gtk-UgtkProxyForm.o `test -f 'UgtkProxyForm.c' || echo '$(srcdir)/'`UgtkProxyForm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkProxyForm.Tpo $(DEPDIR)/uget_gtk-UgtkProxyForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkProxyForm.c' object='uget_gtk-UgtkProxyForm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkProxyForm.o `test -f 'UgtkProxyForm.c' || echo '$(srcdir)/'`UgtkProxyForm.c uget_gtk-UgtkProxyForm.obj: UgtkProxyForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkProxyForm.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkProxyForm.Tpo -c -o uget_gtk-UgtkProxyForm.obj `if test -f 'UgtkProxyForm.c'; then $(CYGPATH_W) 'UgtkProxyForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkProxyForm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkProxyForm.Tpo $(DEPDIR)/uget_gtk-UgtkProxyForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkProxyForm.c' object='uget_gtk-UgtkProxyForm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkProxyForm.obj `if test -f 'UgtkProxyForm.c'; then $(CYGPATH_W) 'UgtkProxyForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkProxyForm.c'; fi` uget_gtk-UgtkDownloadForm.o: UgtkDownloadForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkDownloadForm.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkDownloadForm.Tpo -c -o uget_gtk-UgtkDownloadForm.o `test -f 'UgtkDownloadForm.c' || echo '$(srcdir)/'`UgtkDownloadForm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkDownloadForm.Tpo $(DEPDIR)/uget_gtk-UgtkDownloadForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkDownloadForm.c' object='uget_gtk-UgtkDownloadForm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkDownloadForm.o `test -f 'UgtkDownloadForm.c' || echo '$(srcdir)/'`UgtkDownloadForm.c uget_gtk-UgtkDownloadForm.obj: UgtkDownloadForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkDownloadForm.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkDownloadForm.Tpo -c -o uget_gtk-UgtkDownloadForm.obj `if test -f 'UgtkDownloadForm.c'; then $(CYGPATH_W) 'UgtkDownloadForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkDownloadForm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkDownloadForm.Tpo $(DEPDIR)/uget_gtk-UgtkDownloadForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkDownloadForm.c' object='uget_gtk-UgtkDownloadForm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkDownloadForm.obj `if test -f 'UgtkDownloadForm.c'; then $(CYGPATH_W) 'UgtkDownloadForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkDownloadForm.c'; fi` uget_gtk-UgtkCategoryForm.o: UgtkCategoryForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkCategoryForm.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkCategoryForm.Tpo -c -o uget_gtk-UgtkCategoryForm.o `test -f 'UgtkCategoryForm.c' || echo '$(srcdir)/'`UgtkCategoryForm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkCategoryForm.Tpo $(DEPDIR)/uget_gtk-UgtkCategoryForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkCategoryForm.c' object='uget_gtk-UgtkCategoryForm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkCategoryForm.o `test -f 'UgtkCategoryForm.c' || echo '$(srcdir)/'`UgtkCategoryForm.c uget_gtk-UgtkCategoryForm.obj: UgtkCategoryForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkCategoryForm.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkCategoryForm.Tpo -c -o uget_gtk-UgtkCategoryForm.obj `if test -f 'UgtkCategoryForm.c'; then $(CYGPATH_W) 'UgtkCategoryForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkCategoryForm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkCategoryForm.Tpo $(DEPDIR)/uget_gtk-UgtkCategoryForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkCategoryForm.c' object='uget_gtk-UgtkCategoryForm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkCategoryForm.obj `if test -f 'UgtkCategoryForm.c'; then $(CYGPATH_W) 'UgtkCategoryForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkCategoryForm.c'; fi` uget_gtk-UgtkNodeDialog.o: UgtkNodeDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkNodeDialog.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkNodeDialog.Tpo -c -o uget_gtk-UgtkNodeDialog.o `test -f 'UgtkNodeDialog.c' || echo '$(srcdir)/'`UgtkNodeDialog.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkNodeDialog.Tpo $(DEPDIR)/uget_gtk-UgtkNodeDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkNodeDialog.c' object='uget_gtk-UgtkNodeDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkNodeDialog.o `test -f 'UgtkNodeDialog.c' || echo '$(srcdir)/'`UgtkNodeDialog.c uget_gtk-UgtkNodeDialog.obj: UgtkNodeDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkNodeDialog.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkNodeDialog.Tpo -c -o uget_gtk-UgtkNodeDialog.obj `if test -f 'UgtkNodeDialog.c'; then $(CYGPATH_W) 'UgtkNodeDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkNodeDialog.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkNodeDialog.Tpo $(DEPDIR)/uget_gtk-UgtkNodeDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkNodeDialog.c' object='uget_gtk-UgtkNodeDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkNodeDialog.obj `if test -f 'UgtkNodeDialog.c'; then $(CYGPATH_W) 'UgtkNodeDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkNodeDialog.c'; fi` uget_gtk-UgtkBatchDialog.o: UgtkBatchDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkBatchDialog.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkBatchDialog.Tpo -c -o uget_gtk-UgtkBatchDialog.o `test -f 'UgtkBatchDialog.c' || echo '$(srcdir)/'`UgtkBatchDialog.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkBatchDialog.Tpo $(DEPDIR)/uget_gtk-UgtkBatchDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkBatchDialog.c' object='uget_gtk-UgtkBatchDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkBatchDialog.o `test -f 'UgtkBatchDialog.c' || echo '$(srcdir)/'`UgtkBatchDialog.c uget_gtk-UgtkBatchDialog.obj: UgtkBatchDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkBatchDialog.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkBatchDialog.Tpo -c -o uget_gtk-UgtkBatchDialog.obj `if test -f 'UgtkBatchDialog.c'; then $(CYGPATH_W) 'UgtkBatchDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkBatchDialog.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkBatchDialog.Tpo $(DEPDIR)/uget_gtk-UgtkBatchDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkBatchDialog.c' object='uget_gtk-UgtkBatchDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkBatchDialog.obj `if test -f 'UgtkBatchDialog.c'; then $(CYGPATH_W) 'UgtkBatchDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkBatchDialog.c'; fi` uget_gtk-UgtkScheduleForm.o: UgtkScheduleForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkScheduleForm.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkScheduleForm.Tpo -c -o uget_gtk-UgtkScheduleForm.o `test -f 'UgtkScheduleForm.c' || echo '$(srcdir)/'`UgtkScheduleForm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkScheduleForm.Tpo $(DEPDIR)/uget_gtk-UgtkScheduleForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkScheduleForm.c' object='uget_gtk-UgtkScheduleForm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkScheduleForm.o `test -f 'UgtkScheduleForm.c' || echo '$(srcdir)/'`UgtkScheduleForm.c uget_gtk-UgtkScheduleForm.obj: UgtkScheduleForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkScheduleForm.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkScheduleForm.Tpo -c -o uget_gtk-UgtkScheduleForm.obj `if test -f 'UgtkScheduleForm.c'; then $(CYGPATH_W) 'UgtkScheduleForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkScheduleForm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkScheduleForm.Tpo $(DEPDIR)/uget_gtk-UgtkScheduleForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkScheduleForm.c' object='uget_gtk-UgtkScheduleForm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkScheduleForm.obj `if test -f 'UgtkScheduleForm.c'; then $(CYGPATH_W) 'UgtkScheduleForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkScheduleForm.c'; fi` uget_gtk-UgtkSettingForm.o: UgtkSettingForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSettingForm.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSettingForm.Tpo -c -o uget_gtk-UgtkSettingForm.o `test -f 'UgtkSettingForm.c' || echo '$(srcdir)/'`UgtkSettingForm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSettingForm.Tpo $(DEPDIR)/uget_gtk-UgtkSettingForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSettingForm.c' object='uget_gtk-UgtkSettingForm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSettingForm.o `test -f 'UgtkSettingForm.c' || echo '$(srcdir)/'`UgtkSettingForm.c uget_gtk-UgtkSettingForm.obj: UgtkSettingForm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSettingForm.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSettingForm.Tpo -c -o uget_gtk-UgtkSettingForm.obj `if test -f 'UgtkSettingForm.c'; then $(CYGPATH_W) 'UgtkSettingForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSettingForm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSettingForm.Tpo $(DEPDIR)/uget_gtk-UgtkSettingForm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSettingForm.c' object='uget_gtk-UgtkSettingForm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSettingForm.obj `if test -f 'UgtkSettingForm.c'; then $(CYGPATH_W) 'UgtkSettingForm.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSettingForm.c'; fi` uget_gtk-UgtkSettingDialog.o: UgtkSettingDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSettingDialog.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSettingDialog.Tpo -c -o uget_gtk-UgtkSettingDialog.o `test -f 'UgtkSettingDialog.c' || echo '$(srcdir)/'`UgtkSettingDialog.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSettingDialog.Tpo $(DEPDIR)/uget_gtk-UgtkSettingDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSettingDialog.c' object='uget_gtk-UgtkSettingDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSettingDialog.o `test -f 'UgtkSettingDialog.c' || echo '$(srcdir)/'`UgtkSettingDialog.c uget_gtk-UgtkSettingDialog.obj: UgtkSettingDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkSettingDialog.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkSettingDialog.Tpo -c -o uget_gtk-UgtkSettingDialog.obj `if test -f 'UgtkSettingDialog.c'; then $(CYGPATH_W) 'UgtkSettingDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSettingDialog.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkSettingDialog.Tpo $(DEPDIR)/uget_gtk-UgtkSettingDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkSettingDialog.c' object='uget_gtk-UgtkSettingDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkSettingDialog.obj `if test -f 'UgtkSettingDialog.c'; then $(CYGPATH_W) 'UgtkSettingDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkSettingDialog.c'; fi` uget_gtk-UgtkConfirmDialog.o: UgtkConfirmDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkConfirmDialog.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkConfirmDialog.Tpo -c -o uget_gtk-UgtkConfirmDialog.o `test -f 'UgtkConfirmDialog.c' || echo '$(srcdir)/'`UgtkConfirmDialog.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkConfirmDialog.Tpo $(DEPDIR)/uget_gtk-UgtkConfirmDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkConfirmDialog.c' object='uget_gtk-UgtkConfirmDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkConfirmDialog.o `test -f 'UgtkConfirmDialog.c' || echo '$(srcdir)/'`UgtkConfirmDialog.c uget_gtk-UgtkConfirmDialog.obj: UgtkConfirmDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkConfirmDialog.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkConfirmDialog.Tpo -c -o uget_gtk-UgtkConfirmDialog.obj `if test -f 'UgtkConfirmDialog.c'; then $(CYGPATH_W) 'UgtkConfirmDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkConfirmDialog.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkConfirmDialog.Tpo $(DEPDIR)/uget_gtk-UgtkConfirmDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkConfirmDialog.c' object='uget_gtk-UgtkConfirmDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkConfirmDialog.obj `if test -f 'UgtkConfirmDialog.c'; then $(CYGPATH_W) 'UgtkConfirmDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkConfirmDialog.c'; fi` uget_gtk-UgtkAboutDialog.o: UgtkAboutDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkAboutDialog.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkAboutDialog.Tpo -c -o uget_gtk-UgtkAboutDialog.o `test -f 'UgtkAboutDialog.c' || echo '$(srcdir)/'`UgtkAboutDialog.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkAboutDialog.Tpo $(DEPDIR)/uget_gtk-UgtkAboutDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkAboutDialog.c' object='uget_gtk-UgtkAboutDialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkAboutDialog.o `test -f 'UgtkAboutDialog.c' || echo '$(srcdir)/'`UgtkAboutDialog.c uget_gtk-UgtkAboutDialog.obj: UgtkAboutDialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkAboutDialog.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkAboutDialog.Tpo -c -o uget_gtk-UgtkAboutDialog.obj `if test -f 'UgtkAboutDialog.c'; then $(CYGPATH_W) 'UgtkAboutDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkAboutDialog.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkAboutDialog.Tpo $(DEPDIR)/uget_gtk-UgtkAboutDialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkAboutDialog.c' object='uget_gtk-UgtkAboutDialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkAboutDialog.obj `if test -f 'UgtkAboutDialog.c'; then $(CYGPATH_W) 'UgtkAboutDialog.c'; else $(CYGPATH_W) '$(srcdir)/UgtkAboutDialog.c'; fi` uget_gtk-UgtkMenubar.o: UgtkMenubar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkMenubar.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkMenubar.Tpo -c -o uget_gtk-UgtkMenubar.o `test -f 'UgtkMenubar.c' || echo '$(srcdir)/'`UgtkMenubar.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkMenubar.Tpo $(DEPDIR)/uget_gtk-UgtkMenubar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkMenubar.c' object='uget_gtk-UgtkMenubar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkMenubar.o `test -f 'UgtkMenubar.c' || echo '$(srcdir)/'`UgtkMenubar.c uget_gtk-UgtkMenubar.obj: UgtkMenubar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkMenubar.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkMenubar.Tpo -c -o uget_gtk-UgtkMenubar.obj `if test -f 'UgtkMenubar.c'; then $(CYGPATH_W) 'UgtkMenubar.c'; else $(CYGPATH_W) '$(srcdir)/UgtkMenubar.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkMenubar.Tpo $(DEPDIR)/uget_gtk-UgtkMenubar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkMenubar.c' object='uget_gtk-UgtkMenubar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkMenubar.obj `if test -f 'UgtkMenubar.c'; then $(CYGPATH_W) 'UgtkMenubar.c'; else $(CYGPATH_W) '$(srcdir)/UgtkMenubar.c'; fi` uget_gtk-UgtkMenubar-ui.o: UgtkMenubar-ui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkMenubar-ui.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkMenubar-ui.Tpo -c -o uget_gtk-UgtkMenubar-ui.o `test -f 'UgtkMenubar-ui.c' || echo '$(srcdir)/'`UgtkMenubar-ui.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkMenubar-ui.Tpo $(DEPDIR)/uget_gtk-UgtkMenubar-ui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkMenubar-ui.c' object='uget_gtk-UgtkMenubar-ui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkMenubar-ui.o `test -f 'UgtkMenubar-ui.c' || echo '$(srcdir)/'`UgtkMenubar-ui.c uget_gtk-UgtkMenubar-ui.obj: UgtkMenubar-ui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkMenubar-ui.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkMenubar-ui.Tpo -c -o uget_gtk-UgtkMenubar-ui.obj `if test -f 'UgtkMenubar-ui.c'; then $(CYGPATH_W) 'UgtkMenubar-ui.c'; else $(CYGPATH_W) '$(srcdir)/UgtkMenubar-ui.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkMenubar-ui.Tpo $(DEPDIR)/uget_gtk-UgtkMenubar-ui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkMenubar-ui.c' object='uget_gtk-UgtkMenubar-ui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkMenubar-ui.obj `if test -f 'UgtkMenubar-ui.c'; then $(CYGPATH_W) 'UgtkMenubar-ui.c'; else $(CYGPATH_W) '$(srcdir)/UgtkMenubar-ui.c'; fi` uget_gtk-UgtkApp.o: UgtkApp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp.Tpo -c -o uget_gtk-UgtkApp.o `test -f 'UgtkApp.c' || echo '$(srcdir)/'`UgtkApp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp.Tpo $(DEPDIR)/uget_gtk-UgtkApp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp.c' object='uget_gtk-UgtkApp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp.o `test -f 'UgtkApp.c' || echo '$(srcdir)/'`UgtkApp.c uget_gtk-UgtkApp.obj: UgtkApp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp.Tpo -c -o uget_gtk-UgtkApp.obj `if test -f 'UgtkApp.c'; then $(CYGPATH_W) 'UgtkApp.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp.Tpo $(DEPDIR)/uget_gtk-UgtkApp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp.c' object='uget_gtk-UgtkApp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp.obj `if test -f 'UgtkApp.c'; then $(CYGPATH_W) 'UgtkApp.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp.c'; fi` uget_gtk-UgtkApp-ui.o: UgtkApp-ui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp-ui.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp-ui.Tpo -c -o uget_gtk-UgtkApp-ui.o `test -f 'UgtkApp-ui.c' || echo '$(srcdir)/'`UgtkApp-ui.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp-ui.Tpo $(DEPDIR)/uget_gtk-UgtkApp-ui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp-ui.c' object='uget_gtk-UgtkApp-ui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp-ui.o `test -f 'UgtkApp-ui.c' || echo '$(srcdir)/'`UgtkApp-ui.c uget_gtk-UgtkApp-ui.obj: UgtkApp-ui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp-ui.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp-ui.Tpo -c -o uget_gtk-UgtkApp-ui.obj `if test -f 'UgtkApp-ui.c'; then $(CYGPATH_W) 'UgtkApp-ui.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp-ui.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp-ui.Tpo $(DEPDIR)/uget_gtk-UgtkApp-ui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp-ui.c' object='uget_gtk-UgtkApp-ui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp-ui.obj `if test -f 'UgtkApp-ui.c'; then $(CYGPATH_W) 'UgtkApp-ui.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp-ui.c'; fi` uget_gtk-UgtkApp-callback.o: UgtkApp-callback.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp-callback.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp-callback.Tpo -c -o uget_gtk-UgtkApp-callback.o `test -f 'UgtkApp-callback.c' || echo '$(srcdir)/'`UgtkApp-callback.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp-callback.Tpo $(DEPDIR)/uget_gtk-UgtkApp-callback.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp-callback.c' object='uget_gtk-UgtkApp-callback.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp-callback.o `test -f 'UgtkApp-callback.c' || echo '$(srcdir)/'`UgtkApp-callback.c uget_gtk-UgtkApp-callback.obj: UgtkApp-callback.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp-callback.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp-callback.Tpo -c -o uget_gtk-UgtkApp-callback.obj `if test -f 'UgtkApp-callback.c'; then $(CYGPATH_W) 'UgtkApp-callback.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp-callback.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp-callback.Tpo $(DEPDIR)/uget_gtk-UgtkApp-callback.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp-callback.c' object='uget_gtk-UgtkApp-callback.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp-callback.obj `if test -f 'UgtkApp-callback.c'; then $(CYGPATH_W) 'UgtkApp-callback.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp-callback.c'; fi` uget_gtk-UgtkApp-timeout.o: UgtkApp-timeout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp-timeout.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp-timeout.Tpo -c -o uget_gtk-UgtkApp-timeout.o `test -f 'UgtkApp-timeout.c' || echo '$(srcdir)/'`UgtkApp-timeout.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp-timeout.Tpo $(DEPDIR)/uget_gtk-UgtkApp-timeout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp-timeout.c' object='uget_gtk-UgtkApp-timeout.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp-timeout.o `test -f 'UgtkApp-timeout.c' || echo '$(srcdir)/'`UgtkApp-timeout.c uget_gtk-UgtkApp-timeout.obj: UgtkApp-timeout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp-timeout.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp-timeout.Tpo -c -o uget_gtk-UgtkApp-timeout.obj `if test -f 'UgtkApp-timeout.c'; then $(CYGPATH_W) 'UgtkApp-timeout.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp-timeout.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp-timeout.Tpo $(DEPDIR)/uget_gtk-UgtkApp-timeout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp-timeout.c' object='uget_gtk-UgtkApp-timeout.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp-timeout.obj `if test -f 'UgtkApp-timeout.c'; then $(CYGPATH_W) 'UgtkApp-timeout.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp-timeout.c'; fi` uget_gtk-UgtkApp-main.o: UgtkApp-main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp-main.o -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp-main.Tpo -c -o uget_gtk-UgtkApp-main.o `test -f 'UgtkApp-main.c' || echo '$(srcdir)/'`UgtkApp-main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp-main.Tpo $(DEPDIR)/uget_gtk-UgtkApp-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp-main.c' object='uget_gtk-UgtkApp-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp-main.o `test -f 'UgtkApp-main.c' || echo '$(srcdir)/'`UgtkApp-main.c uget_gtk-UgtkApp-main.obj: UgtkApp-main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -MT uget_gtk-UgtkApp-main.obj -MD -MP -MF $(DEPDIR)/uget_gtk-UgtkApp-main.Tpo -c -o uget_gtk-UgtkApp-main.obj `if test -f 'UgtkApp-main.c'; then $(CYGPATH_W) 'UgtkApp-main.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp-main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/uget_gtk-UgtkApp-main.Tpo $(DEPDIR)/uget_gtk-UgtkApp-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgtkApp-main.c' object='uget_gtk-UgtkApp-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_CFLAGS) $(CFLAGS) -c -o uget_gtk-UgtkApp-main.obj `if test -f 'UgtkApp-main.c'; then $(CYGPATH_W) 'UgtkApp-main.c'; else $(CYGPATH_W) '$(srcdir)/UgtkApp-main.c'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/ui-gtk/UgtkNodeDialog.h0000664000175000017500000001057613602733704013634 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_NODE_DIALOG_H #define UGTK_NODE_DIALOG_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkNodeDialog UgtkNodeDialog; typedef enum { UGTK_NODE_DIALOG_NEW_DOWNLOAD, UGTK_NODE_DIALOG_NEW_CATEGORY, UGTK_NODE_DIALOG_EDIT_DOWNLOAD, UGTK_NODE_DIALOG_EDIT_CATEGORY, } UgtkNodeDialogMode; #define UGTK_NODE_DIALOG_MEMBERS \ GtkDialog* self; \ GtkBox* hbox; \ GtkWidget* notebook; \ GtkTreeView* node_view; \ UgtkNodeTree* node_tree; \ gulong handler_id[3]; \ UgtkApp* app; \ UgetNode* node; \ UgInfo* node_info; \ UgtkProxyForm proxy; \ UgtkDownloadForm download; \ UgtkCategoryForm category struct UgtkNodeDialog { UGTK_NODE_DIALOG_MEMBERS; /* // ------ UgtkNodeDialog members ------ GtkDialog* self; GtkBox* hbox; GtkWidget* notebook; GtkTreeView* node_view; UgtkNodeTree* node_tree; gulong handler_id[3]; UgtkApp* app; UgetNode* note; UgInfo* node_info; UgtkProxyForm proxy; UgtkDownloadForm download; UgtkCategoryForm category; */ // handler_id[0] : "row-changed" // handler_id[1] : "row-deleted" // handler_id[2] : "row-inserted" }; UgtkNodeDialog* ugtk_node_dialog_new (const char* title, UgtkApp* app, gboolean has_category_form); void ugtk_node_dialog_free (UgtkNodeDialog* ndialog); // enable/disable category node list view in left side // return index of selected category int ugtk_node_dialog_get_category (UgtkNodeDialog* ndialog, UgetNode** cnode); void ugtk_node_dialog_set_category (UgtkNodeDialog* ndialog, UgetNode* cnode); // set/get node's info to/from UgtkNodeDialog void ugtk_node_dialog_get (UgtkNodeDialog* ndialog, UgInfo* node_info); void ugtk_node_dialog_set (UgtkNodeDialog* ndialog, UgInfo* node_info); void ugtk_node_dialog_run (UgtkNodeDialog* ndialog, UgtkNodeDialogMode mode, UgetNode* node4edit); void ugtk_node_dialog_store_recent (UgtkNodeDialog* ndialog, UgtkApp* app); void ugtk_node_dialog_apply_recent (UgtkNodeDialog* ndialog, UgtkApp* app); void ugtk_node_dialog_monitor_uri (UgtkNodeDialog* ndialog); gboolean ugtk_node_dialog_confirm_existing (UgtkNodeDialog* ndialog, const char* uri); // initialize notebook and it's form void ugtk_node_dialog_init (UgtkNodeDialog* ndialog, const char* title, UgtkApp* app, gboolean has_category_form); #ifdef __cplusplus } #endif #endif // End of UGTK_NODE_DIALOG_H uget-2.2.3/ui-gtk/UgtkBanner.h0000664000175000017500000000472113602733704013027 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_BANNER_H #define UGTK_BANNER_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkBanner UgtkBanner; // -------------------------------- // Banner struct UgtkBanner { GtkWidget* self; GtkTextView* text_view; GtkTextBuffer* buffer; GtkTextTag* tag_link; int show_builtin; uint8_t hovering_over_link; char* link; struct { UgetRss* self; UgetRssFeed* feed; UgetRssItem* item; } rss; } banner; void ugtk_banner_init (UgtkBanner* banner); void ugtk_banner_show (UgtkBanner* banner, const char* title, const char* url); int ugtk_banner_show_rss (UgtkBanner* banner, UgetRss* urss); void ugtk_banner_show_donation (UgtkBanner* banner); void ugtk_banner_show_survey (UgtkBanner* banner); #ifdef __cplusplus } #endif #endif // UGTK_BANNER_H uget-2.2.3/ui-gtk/UgtkSetting.h0000664000175000017500000001367513602733704013247 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_SETTING_H #define UGTK_SETTING_H #ifdef HAVE_CONFIG_H #include #endif #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkSetting UgtkSetting; typedef enum { UGTK_SCHEDULE_TURN_OFF, UGTK_SCHEDULE_UPLOAD_ONLY, // reserve UGTK_SCHEDULE_LIMITED_SPEED, UGTK_SCHEDULE_NORMAL, UGTK_SCHEDULE_N_STATE, } UgtkScheduleState; typedef enum { UGTK_PLUGIN_ORDER_CURL, UGTK_PLUGIN_ORDER_ARIA2, UGTK_PLUGIN_ORDER_CURL_ARIA2, UGTK_PLUGIN_ORDER_ARIA2_CURL, UGTK_PLUGIN_N_ORDER, } UgtkPluginOrder; struct UgtkSetting { // "WindowSetting" struct UgtkWindowSetting { // visible: boolean int toolbar; int statusbar; int category; int summary; int banner; // window position: int int x; int y; int width; int height; // window ststus: boolean int maximized; // user action int nth_category; int nth_state; int paned_position_h; int paned_position_v; } window; // "SummarySetting" struct UgtkSummarySetting { // visible: boolean int name; int folder; int category; int uri; int message; } summary; // "DownloadColumn" struct UgtkDownloadColumnSetting { // visible: boolean int complete; int total; int percent; int elapsed; // consuming time int left; // remaining time int speed; int upload_speed; int uploaded; int ratio; int retry; int category; int uri; int added_on; int completed_on; // width: integer struct UgtkDownloadColumnWidth { int state; // state icon int name; int complete; int total; int percent; int elapsed; // consuming time int left; // remaining time int speed; int upload_speed; int uploaded; int ratio; int retry; int category; int uri; int added_on; int completed_on; } width; struct { int type; // GtkSortType int nth; // UgtkNodeColumn } sort; } download_column; // "UserInterface" struct UgtkUserInterfaceSetting { // boolean int exit_confirmation; int delete_confirmation; int show_trayicon; int start_in_tray; int close_to_tray; int start_in_offline_mode; int start_notification; int sound_notification; int apply_recent; int skip_existing; int large_icon; #ifdef HAVE_APP_INDICATOR int app_indicator; #endif } ui; // "ClipboardSetting" struct UgtkClipboardSetting { char* pattern; int monitor; int quiet; int nth_category; int website; } clipboard; // "BandwidthSetting" - global speed limits struct UgtkBandwidthSetting { struct { int upload; // KiB / second int download; // KiB / second } normal, scheduler; } bandwidth; // "SchedulerSetting" struct UgtkSchedulerSetting { int enable; UgArrayInt state; // [7][24] 1 week, 7 days, 24 hours } scheduler; // "CommandlineSetting" struct UgtkCommandlineSetting { int quiet; // --quiet int nth_category; // --category-index } commandline; // "PluginOrder" int plugin_order; // UgtkPluginOrder: matching order // UgetPluginAria2 option struct UgtkPluginAria2Setting { // aria2 speed limit struct { int download; // KiB / second int upload; // KiB / second } limit; // aria2 options int launch; int shutdown; char* token; char* path; char* args; char* uri; } aria2; // UgetPluginMedia option struct UgtkPluginMediaSetting { int match_mode; int quality; int type; } media; // Completion Auto-Actions struct UgtkCompletionSetting { int remember; int action; char* command; char* on_error; } completion; struct UgtkAutoSaveSetting { int enable; int interval; } auto_save; // "FolderHistory" UgList folder_history; int offline_mode; }; void ugtk_setting_init (UgtkSetting* setting); int ugtk_setting_save (UgtkSetting* setting, const char* file); int ugtk_setting_load (UgtkSetting* setting, const char* file); void ugtk_setting_reset (UgtkSetting* setting); void ugtk_setting_add_folder (UgtkSetting* setting, const char* folder); void ugtk_setting_fix_data (UgtkSetting* setting); #ifdef __cplusplus } #endif #endif // UGTK_SETTING_H uget-2.2.3/ui-gtk/UgtkSettingDialog.c0000664000175000017500000002376513602733704014363 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include // Callback static void on_cursor_changed (GtkTreeView* view, UgtkSettingDialog* sdialog); static void on_response (GtkDialog *dialog, gint response_id, UgtkSettingDialog* sdialog); UgtkSettingDialog* ugtk_setting_dialog_new (const gchar* title, GtkWindow* parent) { PangoContext* context; PangoLayout* layout; int text_width; UgtkSettingDialog* dialog; GtkCellRenderer* renderer; GtkWidget* widget; GtkBox* vbox; GtkBox* hbox; dialog = g_malloc0 (sizeof (UgtkSettingDialog)); dialog->self = (GtkDialog*) gtk_dialog_new_with_buttons (title, parent, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); #if GTK_MAJOR_VERSION <= 3 && GTK_MINOR_VERSION < 14 gtk_window_set_has_resize_grip ((GtkWindow*) dialog->self, FALSE); #endif gtk_dialog_set_default_response (dialog->self, GTK_RESPONSE_OK); vbox = (GtkBox*) gtk_dialog_get_content_area (dialog->self); hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, GTK_WIDGET (hbox), FALSE, FALSE, 2); // Notebook widget = gtk_notebook_new (); gtk_widget_set_size_request (widget, 430, 320); gtk_box_pack_end (hbox, widget, TRUE, TRUE, 3); dialog->notebook = (GtkNotebook*) widget; gtk_notebook_set_show_tabs (dialog->notebook, FALSE); gtk_notebook_set_show_border (dialog->notebook, FALSE); // get text width context = gtk_widget_get_pango_context (widget); layout = pango_layout_new (context); pango_layout_set_text (layout, "User Interface", -1); pango_layout_get_pixel_size (layout, &text_width, NULL); g_object_unref (layout); text_width = text_width * 5 / 3; if (text_width < 130) text_width = 130; // TreeView dialog->list_store = gtk_list_store_new (1, G_TYPE_STRING); widget = gtk_tree_view_new_with_model ( GTK_TREE_MODEL (dialog->list_store)); gtk_widget_set_size_request (widget, text_width, 120); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); dialog->tree_view = (GtkTreeView*) widget; gtk_tree_view_set_headers_visible (dialog->tree_view, FALSE); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes ( dialog->tree_view, 0, _("Name"), renderer, "text", 0, NULL); g_signal_connect (dialog->tree_view, "cursor-changed", G_CALLBACK (on_cursor_changed), dialog); // ------------------------------------------------------------------------ // UI settings page vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); ugtk_user_interface_form_init (&dialog->ui); gtk_box_pack_start (vbox, dialog->ui.self, FALSE, FALSE, 2); ugtk_setting_dialog_add (dialog, _("User Interface"), (GtkWidget*) vbox); // ------------------------------------------------------------------------ // Clipboard settings page ugtk_clipboard_form_init (&dialog->clipboard); gtk_container_set_border_width (GTK_CONTAINER (dialog->clipboard.self), 2); ugtk_setting_dialog_add (dialog, _("Clipboard"), dialog->clipboard.self); // ------------------------------------------------------------------------ // Bandwidth settings page ugtk_bandwidth_form_init (&dialog->bandwidth); gtk_container_set_border_width (GTK_CONTAINER (dialog->bandwidth.self), 2); ugtk_setting_dialog_add (dialog, _("Bandwidth"), dialog->bandwidth.self); // ------------------------------------------------------------------------ // Scheduler settings page ugtk_schedule_form_init (&dialog->scheduler); gtk_container_set_border_width (GTK_CONTAINER (dialog->scheduler.self), 2); ugtk_setting_dialog_add (dialog, _("Scheduler"), dialog->scheduler.self); // ------------------------------------------------------------------------ // Plugin settings page ugtk_plugin_form_init (&dialog->plugin); gtk_container_set_border_width (GTK_CONTAINER (dialog->plugin.self), 2); ugtk_setting_dialog_add (dialog, _("Plug-in"), dialog->plugin.self); // ------------------------------------------------------------------------ // Plugin Media & Media Website settings page ugtk_media_website_form_init (&dialog->media_website); gtk_container_set_border_width (GTK_CONTAINER (dialog->media_website.self), 2); ugtk_setting_dialog_add (dialog, _("Media website"), dialog->media_website.self); // ------------------------------------------------------------------------ // Others settings page vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); ugtk_setting_dialog_add (dialog, _("Others"), (GtkWidget*) vbox); ugtk_commandline_form_init (&dialog->commandline); gtk_box_pack_start (vbox, dialog->commandline.self, FALSE, FALSE, 4); gtk_box_pack_start (vbox, gtk_label_new (""), FALSE, FALSE, 0); ugtk_auto_save_form_init (&dialog->auto_save); gtk_box_pack_start (vbox, dialog->auto_save.self, FALSE, FALSE, 2); gtk_box_pack_start (vbox, gtk_label_new (""), FALSE, FALSE, 0); ugtk_completion_form_init (&dialog->completion); gtk_box_pack_start (vbox, dialog->completion.self, FALSE, FALSE, 2); gtk_widget_show_all ((GtkWidget*) hbox); // gtk_container_set_focus_child (GTK_CONTAINER (dialog->self), dialog->pattern_entry); // g_signal_connect (dialog->pattern_entry, "key-press-event", G_CALLBACK (on_key_press_event), dialog); return dialog; } void ugtk_setting_dialog_free (UgtkSettingDialog* dialog) { gtk_widget_destroy ((GtkWidget*) dialog->self); g_free (dialog); } void ugtk_setting_dialog_run (UgtkSettingDialog* dialog, UgtkApp* app) { dialog->app = app; g_signal_connect (dialog->self, "response", G_CALLBACK (on_response), dialog); gtk_widget_show ((GtkWidget*) dialog->self); } void ugtk_setting_dialog_set (UgtkSettingDialog* dialog, UgtkSetting* setting) { ugtk_schedule_form_set (&dialog->scheduler, setting); ugtk_clipboard_form_set (&dialog->clipboard, setting); ugtk_bandwidth_form_set (&dialog->bandwidth, setting); ugtk_user_interface_form_set (&dialog->ui, setting); ugtk_completion_form_set (&dialog->completion, setting); ugtk_auto_save_form_set (&dialog->auto_save, setting); ugtk_commandline_form_set (&dialog->commandline, setting); ugtk_plugin_form_set (&dialog->plugin, setting); ugtk_media_website_form_set (&dialog->media_website, setting); } void ugtk_setting_dialog_get (UgtkSettingDialog* dialog, UgtkSetting* setting) { ugtk_schedule_form_get (&dialog->scheduler, setting); ugtk_clipboard_form_get (&dialog->clipboard, setting); ugtk_bandwidth_form_get (&dialog->bandwidth, setting); ugtk_user_interface_form_get (&dialog->ui, setting); ugtk_completion_form_get (&dialog->completion, setting); ugtk_auto_save_form_get (&dialog->auto_save, setting); ugtk_commandline_form_get (&dialog->commandline, setting); ugtk_plugin_form_get (&dialog->plugin, setting); ugtk_media_website_form_get (&dialog->media_website, setting); } void ugtk_setting_dialog_add (UgtkSettingDialog* sdialog, const gchar* title, GtkWidget* page) { GtkTreeIter iter; gtk_list_store_append (sdialog->list_store, &iter); gtk_list_store_set (sdialog->list_store, &iter, 0, title, -1); gtk_notebook_append_page (sdialog->notebook, page, gtk_label_new (title)); } void ugtk_setting_dialog_set_page (UgtkSettingDialog* sdialog, int nth) { GtkTreePath* path; path = gtk_tree_path_new_from_indices (nth, -1); gtk_tree_view_set_cursor (sdialog->tree_view, path, NULL, FALSE); gtk_tree_path_free (path); gtk_notebook_set_current_page (sdialog->notebook, nth); } // ---------------------------------------------------------------------------- // Callback static void on_cursor_changed (GtkTreeView* view, UgtkSettingDialog* sdialog) { GtkTreePath* path; int nth; gtk_tree_view_get_cursor (view, &path, NULL); if (path == NULL) return; nth = *gtk_tree_path_get_indices (path); gtk_tree_path_free (path); gtk_notebook_set_current_page (sdialog->notebook, nth); } static void on_response (GtkDialog *dialog, gint response_id, UgtkSettingDialog* sdialog) { UgtkApp* app; app = sdialog->app; if (app) app->dialogs.setting = NULL; if (response_id == GTK_RESPONSE_OK) { ugtk_setting_dialog_get (sdialog, &app->setting); ugtk_app_set_ui_setting (app, &app->setting); ugtk_app_set_menu_setting (app, &app->setting); ugtk_app_set_other_setting (app, &app->setting); ugtk_app_set_plugin_setting (app, &app->setting); } ugtk_setting_dialog_free (sdialog); } uget-2.2.3/ui-gtk/UgtkSequence.h0000664000175000017500000000666113602733704013377 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_SEQUENCE_H #define UGTK_SEQUENCE_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkSequence UgtkSequence; typedef struct UgtkSeqRange UgtkSeqRange; typedef void (*UgtkSequenceNotify) (gpointer user_data, gboolean completed); enum UgtkSeqType { UGTK_SEQ_TYPE_NONE, UGTK_SEQ_TYPE_NUMBER, UGTK_SEQ_TYPE_CHARACTER }; // ----------------------------------------------------------------------------- // UgtkSeqRange struct UgtkSeqRange { GtkWidget* self; GtkWidget* type; // GtkComboBox - None, Number, and Character GtkWidget* label_to; // digit mode GtkWidget* spin_from; GtkWidget* spin_to; GtkWidget* spin_digits; GtkWidget* label_digits; // character mode GtkWidget* entry_from; GtkWidget* entry_to; GtkWidget* label_case; }; void ugtk_seq_range_init (UgtkSeqRange* range, UgtkSequence* seq, GtkSizeGroup* size_group); void ugtk_seq_range_set_type (UgtkSeqRange* range, enum UgtkSeqType type); enum UgtkSeqType ugtk_seq_range_get_type (UgtkSeqRange* range); // ----------------------------------------------------------------------------- // UgtkSequence struct UgtkSequence { GtkWidget* self; // GtkGrid GtkEntry* entry; // URI + wildcard character (*) UgtkSeqRange range[3]; // range x 3 UgetSequence sequence; // preview struct UgtkSequencePreview { GtkWidget* self; // GtkScrolledWindow GtkTreeView* view; GtkListStore* store; guint status; } preview; // callback struct { // UgtkNotify func1; UgtkSequenceNotify func; gpointer data; } notify; }; void ugtk_sequence_init (UgtkSequence* seq); void ugtk_sequence_show_preview (UgtkSequence* seq); int ugtk_sequence_get_list (UgtkSequence* seq, UgList* result); #ifdef __cplusplus } #endif #endif // End of UGTK_SEQUENCE_H uget-2.2.3/ui-gtk/UgtkMenubar-ui.c0000664000175000017500000010616313602733704013624 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include // UgtkFileMenu static void ugtk_menubar_file_init (UgtkMenubar* menubar, GtkAccelGroup* accel_group) { GtkWidget* image; GtkWidget* menu; GtkWidget* submenu; GtkWidget* menu_item; menu = gtk_menu_new (); menu_item = gtk_menu_item_new_with_mnemonic (_("_File")); gtk_menu_item_set_submenu ((GtkMenuItem*)menu_item, menu); gtk_menu_shell_append ((GtkMenuShell*)menubar->self, menu_item); gtk_menu_set_accel_group ((GtkMenu*)menu, accel_group); // gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); // New Download menu_item = gtk_image_menu_item_new_with_mnemonic (_("New _Download...")); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_NEW); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-new", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->file.create_download = menu_item; // New Category menu_item = gtk_image_menu_item_new_with_mnemonic (_("New _Category...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("gtk-dnd-multiple", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_DND_MULTIPLE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->file.create_category = menu_item; // separator // gtk_menu_shell_append ((GtkMenuShell*)submenu, gtk_separator_menu_item_new() ); // New Torrent menu_item = gtk_image_menu_item_new_with_mnemonic (_("New Torrent...")); // image = gtk_image_new_from_stock (GTK_STOCK_FILE, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->file.create_torrent = menu_item; // New Metalink menu_item = gtk_image_menu_item_new_with_mnemonic (_("New Metalink...")); // image = gtk_image_new_from_stock (GTK_STOCK_FILE, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->file.create_metalink = menu_item; // Batch Downloads --- start --- menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Batch Downloads")); submenu = gtk_menu_new (); gtk_menu_set_accel_group ((GtkMenu*)submenu, accel_group); gtk_menu_item_set_submenu ((GtkMenuItem*)menu_item, submenu); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); // Batch downloads - Clipboard batch menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Clipboard batch...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("edit-paste", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->file.batch.clipboard = menu_item; // Batch downloads - URL Sequence batch menu_item = gtk_image_menu_item_new_with_mnemonic (_("_URL Sequence batch...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("view-sort-ascending", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->file.batch.sequence = menu_item; // Batch downloads - Text file import (.txt) menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Text file import (.txt)...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("go-next", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->file.batch.text_import = menu_item; // Batch downloads - HTML file import (.html) menu_item = gtk_image_menu_item_new_with_mnemonic (_("_HTML file import (.html)...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("gtk-convert", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_CONVERT, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->file.batch.html_import = menu_item; // Batch downloads - separator gtk_menu_shell_append ((GtkMenuShell*)submenu, gtk_separator_menu_item_new() ); // Batch downloads - Export to Text file (.txt) menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Export to Text file (.txt)...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("go-previous", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->file.batch.text_export = menu_item; // Batch downloads --- end --- gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // Open Category menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Open category...")); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_LOAD); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-open", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->file.open_category = menu_item; // Save Category menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Save category as...")); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_SAVE); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-save", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->file.save_category = menu_item; // Save All menu_item = gtk_image_menu_item_new_with_mnemonic (_("Save _all settings")); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_SAVE_ALL); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-save", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->file.save = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // Offline mode menu_item = gtk_check_menu_item_new_with_mnemonic (_("Offline Mode")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->file.offline_mode = menu_item; menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, accel_group); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->file.quit = menu_item; } // UgtkEditMenu static void ugtk_menubar_edit_init (UgtkMenubar* menubar) { GtkWidget* image; GtkWidget* menu; GtkWidget* submenu; GtkWidget* menu_item; menu = gtk_menu_new (); menu_item = gtk_menu_item_new_with_mnemonic (_("_Edit")); gtk_menu_item_set_submenu ((GtkMenuItem*)menu_item, menu); gtk_menu_shell_append ((GtkMenuShell*)menubar->self, menu_item); // menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); menu_item = gtk_check_menu_item_new_with_mnemonic (_("Clipboard _Monitor")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->edit.clipboard_monitor = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Clipboard works quietly")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->edit.clipboard_quiet = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Command-line works quietly")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->edit.commandline_quiet = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Skip existing URI")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->edit.skip_existing = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Apply recent download settings")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->edit.apply_recent = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new()); // --- Completion Auto-Actions --- start --- menu_item = gtk_image_menu_item_new_with_mnemonic (_("Completion _Auto-Actions")); submenu = gtk_menu_new (); // gtk_menu_set_accel_group ((GtkMenu*)submenu, accel_group); gtk_menu_item_set_submenu ((GtkMenuItem*)menu_item, submenu); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); // Completion Auto-Actions - Disable menu_item = gtk_radio_menu_item_new_with_mnemonic (NULL, _("_Disable")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->edit.completion.disable = menu_item; // Completion Auto-Actions - Hibernate menu_item = gtk_radio_menu_item_new_with_mnemonic_from_widget ( (GtkRadioMenuItem*) menu_item, _("Hibernate")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->edit.completion.hibernate = menu_item; // Completion Auto-Actions - Suspend menu_item = gtk_radio_menu_item_new_with_mnemonic_from_widget ( (GtkRadioMenuItem*) menu_item, _("Suspend")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->edit.completion.suspend = menu_item; // Completion Auto-Actions - Shutdown menu_item = gtk_radio_menu_item_new_with_mnemonic_from_widget ( (GtkRadioMenuItem*) menu_item, _("Shutdown")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->edit.completion.shutdown = menu_item; // Completion Auto-Actions - Reboot menu_item = gtk_radio_menu_item_new_with_mnemonic_from_widget ( (GtkRadioMenuItem*) menu_item, _("Reboot")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->edit.completion.reboot = menu_item; // Completion Auto-Actions - Custom menu_item = gtk_radio_menu_item_new_with_mnemonic_from_widget ( (GtkRadioMenuItem*) menu_item, _("Custom")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->edit.completion.custom = menu_item; // separator gtk_menu_shell_append ((GtkMenuShell*)submenu, gtk_separator_menu_item_new()); // Completion Auto-Actions - Remember menu_item = gtk_check_menu_item_new_with_mnemonic (_("Remember setting")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->edit.completion.remember = menu_item; // Completion Auto-Actions - Help menu_item = gtk_menu_item_new_with_mnemonic (_("_Help")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->edit.completion.help = menu_item; // --- Completion Auto-Actions --- end --- // menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Settings...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-properties", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->edit.settings = menu_item; } // UgtkViewMenu static void ugtk_menubar_view_init (UgtkMenubar* menubar) { GtkWidget* menu; GtkWidget* submenu; GtkWidget* menu_item; menu = gtk_menu_new (); menu_item = gtk_menu_item_new_with_mnemonic (_("_View")); gtk_menu_item_set_submenu ((GtkMenuItem*) menu_item, menu); gtk_menu_shell_append ((GtkMenuShell*) menubar->self, menu_item); menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Toolbar")); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->view.toolbar = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Statusbar")); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->view.statusbar = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Category")); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->view.category = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Summary")); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->view.summary = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // Summary Items --- start --- menu_item = gtk_menu_item_new_with_mnemonic (_("Summary _Items")); submenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem*) menu_item, submenu); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); // Summary Items - Name menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Name")); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); menubar->view.summary_items.name = menu_item; // Summary Items - Folder menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Folder")); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); menubar->view.summary_items.folder = menu_item; // Summary Items - Category menu_item = gtk_check_menu_item_new_with_mnemonic (_("Category")); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); menubar->view.summary_items.category = menu_item; // Summary Items - Elapsed // menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); // gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); // gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); // menubar->view.summary_items.elapsed = menu_item; // Summary Items - URL menu_item = gtk_check_menu_item_new_with_mnemonic (_("_URL")); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); menubar->view.summary_items.uri = menu_item; // Summary Items - Message menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Message")); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); menubar->view.summary_items.message = menu_item; // Summary Items --- end --- // gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // menu_item = gtk_check_menu_item_new_with_mnemonic (_("Download _Rules Hint")); // gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); // gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); // menubar->view.rules_hint = menu_item; // Download Columns --- start --- submenu = gtk_menu_new (); menu_item = gtk_menu_item_new_with_mnemonic (_("Download _Columns")); gtk_menu_item_set_submenu ((GtkMenuItem*) menu_item, submenu); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->view.columns.self = submenu; // Download Columns - Complete menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Complete")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.complete = menu_item; // Download Columns - Total menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Size")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.total = menu_item; // Download Columns - Percent (%) menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Percent '%'")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.percent = menu_item; // Download Columns - Elapsed menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.elapsed = menu_item; // Download Columns - Left menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Left")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.left = menu_item; // Download Columns - Speed menu_item = gtk_check_menu_item_new_with_mnemonic (_("Speed")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.speed = menu_item; // Download Columns - Up Speed menu_item = gtk_check_menu_item_new_with_mnemonic (_("Up Speed")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.upload_speed = menu_item; // Download Columns - Uploaded menu_item = gtk_check_menu_item_new_with_mnemonic (_("Uploaded")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.uploaded = menu_item; // Download Columns - Ratio menu_item = gtk_check_menu_item_new_with_mnemonic (_("Ratio")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.ratio = menu_item; // Download Columns - Retry menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Retry")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.retry = menu_item; // Download Columns - Category menu_item = gtk_check_menu_item_new_with_mnemonic (_("Category")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.category = menu_item; // Download Columns - URL menu_item = gtk_check_menu_item_new_with_mnemonic (_("_URL")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.uri = menu_item; // Download Columns - Added On menu_item = gtk_check_menu_item_new_with_mnemonic (_("Added On")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.added_on = menu_item; // Download Columns - Completed On menu_item = gtk_check_menu_item_new_with_mnemonic (_("Completed On")); gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); menubar->view.columns.completed_on = menu_item; // Download Columns --- end --- } // UgtkCategoryMenu static void ugtk_menubar_category_init (UgtkMenubar* menubar) { GtkWidget* image; GtkWidget* menu; GtkWidget* menu_item; menu = gtk_menu_new (); menu_item = gtk_menu_item_new_with_mnemonic (_("_Category")); gtk_menu_item_set_submenu ((GtkMenuItem*)menu_item, menu); gtk_menu_shell_append ((GtkMenuShell*)menubar->self, menu_item); menubar->category.self = menu; // New Category menu_item = gtk_image_menu_item_new_with_mnemonic(_("_New Category...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("gtk-dnd-multiple", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_DND_MULTIPLE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->category.create = menu_item; // Delete Category menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Delete Category")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("window-close", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->category.delete = menu_item; // Properties menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_PROPERTIES, NULL); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->category.properties = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // Move Up menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_GO_UP, NULL); // menu_item = gtk_image_menu_item_new_with_mnemonic(_("Move _Up")); // image = gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->category.move_up = menu_item; // Move Down menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_GO_DOWN, NULL); // menu_item = gtk_image_menu_item_new_with_mnemonic(_("Move _Down")); // image = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->category.move_down = menu_item; } // UgtkDownloadMenu static void ugtk_menubar_download_init (UgtkMenubar* menubar, GtkAccelGroup* accel_group) { GtkWidget* image; GtkWidget* menu; GtkWidget* submenu; GtkWidget* menu_item; menu = gtk_menu_new (); gtk_menu_set_accel_group ((GtkMenu*)menu, accel_group); menu_item = gtk_menu_item_new_with_mnemonic (_("_Download")); gtk_menu_item_set_submenu ((GtkMenuItem*)menu_item, menu); gtk_menu_shell_append ((GtkMenuShell*)menubar->self, menu_item); menubar->download.self = menu; // gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, accel_group); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.create = menu_item; // menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, accel_group); menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Delete Entry")); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_DELETE); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("edit-delete", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.delete = menu_item; menu_item = gtk_image_menu_item_new_with_mnemonic (_("Delete Entry and _File")); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_DELETE_F); // image = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.delete_file = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_OPEN, NULL); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_OPEN); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.open = menu_item; gtk_widget_hide (menu_item); menu_item = gtk_image_menu_item_new_with_mnemonic(_("Open _Containing folder")); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_OPEN_F); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("folder", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_DIRECTORY, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.open_folder = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); menu_item = gtk_image_menu_item_new_with_mnemonic(_("Force Start")); // image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.force_start = menu_item; menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Runnable")); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_SWITCH); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("media-playback-start", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.runnable = menu_item; menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_PAUSE, NULL); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_SWITCH); // menu_item = gtk_image_menu_item_new_with_mnemonic(_("P_ause")); // image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PAUSE, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.pause = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // Move to --- start --- menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Move To")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("gtk-dnd-multiple", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_DND_MULTIPLE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.move_to.item = menu_item; // Move to - submenu submenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem*)menu_item, submenu); menubar->download.move_to.self = submenu; menubar->download.move_to.array = g_ptr_array_sized_new (16*2); // Move to --- end --- gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_GO_UP, NULL); // menu_item = gtk_image_menu_item_new_with_mnemonic(_("Move _Up")); // image = gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.move_up = menu_item; menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_GO_DOWN, NULL); // menu_item = gtk_image_menu_item_new_with_mnemonic(_("Move _Down")); // image = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.move_down = menu_item; menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_GOTO_TOP, NULL); // menu_item = gtk_image_menu_item_new_with_mnemonic(_("Move _Top")); // image = gtk_image_new_from_stock (GTK_STOCK_GOTO_TOP, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.move_top = menu_item; menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_GOTO_BOTTOM, NULL); // menu_item = gtk_image_menu_item_new_with_mnemonic(_("Move _Bottom")); // image = gtk_image_new_from_stock (GTK_STOCK_GOTO_BOTTOM, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.move_bottom = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // Priority --- start --- menu_item = gtk_image_menu_item_new_with_mnemonic(_("Priority")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.prioriy.item = menu_item; // Priority - submenu submenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem*)menu_item, submenu); menubar->download.prioriy.self = submenu; // Priority - High menu_item = gtk_radio_menu_item_new_with_mnemonic ( NULL, _("_High")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->download.prioriy.high = menu_item; // Priority - Normal menu_item = gtk_radio_menu_item_new_with_mnemonic_from_widget ( (GtkRadioMenuItem*) menu_item, _("_Normal")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->download.prioriy.normal = menu_item; // Priority - Low menu_item = gtk_radio_menu_item_new_with_mnemonic_from_widget ( (GtkRadioMenuItem*) menu_item, _("_Low")); gtk_menu_shell_append ((GtkMenuShell*)submenu, menu_item); menubar->download.prioriy.low = menu_item; // Priority --- end --- menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_PROPERTIES, NULL); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->download.properties = menu_item; } // UgtkHelpMenu static void ugtk_menubar_help_init (UgtkMenubar* menubar) { GtkWidget* image; GtkWidget* menu; GtkWidget* menu_item; menu = gtk_menu_new (); menu_item = gtk_menu_item_new_with_mnemonic(_("_Help")); gtk_menu_item_set_submenu ((GtkMenuItem*)menu_item, menu); gtk_menu_shell_append ((GtkMenuShell*)menubar->self, menu_item); // Get Help Online menu_item = gtk_image_menu_item_new_with_mnemonic(_("Get Help Online")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("help-browser", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_HELP, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->help.help_online = menu_item; // Documentation menu_item = gtk_image_menu_item_new_with_mnemonic(_("Documentation")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("text-x-generic", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_FILE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->help.documentation = menu_item; // Support Forum menu_item = gtk_image_menu_item_new_with_mnemonic(_("Support Forum")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("dialog-question", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->help.support_forum = menu_item; // Submit Feedback menu_item = gtk_image_menu_item_new_with_mnemonic(_("Submit Feedback")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("list-add", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->help.submit_feedback = menu_item; // Report a Bug menu_item = gtk_image_menu_item_new_with_mnemonic(_("Report a Bug")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("dialog-warning-symbolic", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_CAPS_LOCK_WARNING, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->help.report_bug = menu_item; // Keyboard Shortcuts menu_item = gtk_image_menu_item_new_with_mnemonic(_("Keyboard Shortcuts")); // image = gtk_image_new_from_stock (GTK_STOCK_DND_MULTIPLE, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->help.keyboard_shortcuts = menu_item; // Check for Updates menu_item = gtk_image_menu_item_new_with_mnemonic(_("Check for Updates")); // image = gtk_image_new_from_stock (GTK_STOCK_DND_MULTIPLE, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->help.check_updates = menu_item; // About Uget menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_ABOUT, NULL); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); menubar->help.about_uget = menu_item; } void ugtk_menubar_init_ui (UgtkMenubar* menubar, GtkAccelGroup* accel_group) { menubar->self = gtk_menu_bar_new (); ugtk_menubar_file_init (menubar, accel_group); ugtk_menubar_edit_init (menubar); ugtk_menubar_view_init (menubar); ugtk_menubar_category_init (menubar); ugtk_menubar_download_init (menubar, accel_group); ugtk_menubar_help_init (menubar); } uget-2.2.3/ui-gtk/UgtkUtil.c0000664000175000017500000001722613602733704012536 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #if defined _WIN32 || defined _WIN64 #include #include // ShellExecuteW() #endif #if defined _WIN32 || defined _WIN64 gboolean ugtk_launch_uri (const gchar* uri) { int result; result = (int) ShellExecuteA(NULL, "open", uri, NULL, NULL, SW_SHOWNORMAL); if (result > 32) return TRUE; return FALSE; } gboolean ugtk_launch_default_app (const gchar* folder, const gchar* file) { gchar* path; gunichar2* path_wcs; if (folder == NULL) path = g_build_filename (file, NULL); else path = g_build_filename (folder, file, NULL); if (g_file_test (path, G_FILE_TEST_EXISTS) == FALSE) { g_free (path); return FALSE; } // UNICODE path_wcs = g_utf8_to_utf16 (path, -1, NULL, NULL, NULL); g_free (path); ShellExecuteW (NULL, L"open", path_wcs, NULL, NULL, SW_SHOW); g_free (path_wcs); return TRUE; } #else gboolean ugtk_launch_uri (const gchar* uri) { GError* error = NULL; g_app_info_launch_default_for_uri (uri, NULL, &error); if (error) { g_error_free (error); return FALSE; } return TRUE; } gboolean ugtk_launch_default_app (const gchar* folder, const gchar* file) { GError* error = NULL; GFile* gfile; gchar* uri; gchar* path; gchar* path_wcs; path = g_build_filename (folder, file, NULL); path_wcs = g_filename_from_utf8 (path, -1, NULL, NULL, NULL); g_free (path); if (g_file_test (path_wcs, G_FILE_TEST_EXISTS) == FALSE) { g_free (path_wcs); return FALSE; } gfile = g_file_new_for_path (path_wcs); g_free (path_wcs); uri = g_file_get_uri (gfile); g_object_unref (gfile); g_app_info_launch_default_for_uri (uri, NULL, &error); g_free (uri); if (error) { #ifndef NDEBUG g_print ("%s", error->message); #endif g_error_free (error); } return TRUE; } #endif // _WIN32 || _WIN64 // ---------------------------------------------------------------------------- // URI list functions // get URIs from text file GList* ugtk_text_file_get_uris (const gchar* file_utf8, GError** error) { GIOChannel* channel; GList* list; gchar* string; gchar* escaped; gsize line_len; string = g_filename_from_utf8 (file_utf8, -1, NULL, NULL, NULL); channel = g_io_channel_new_file (string, "r", error); g_free (string); if (channel == NULL) return NULL; ugtk_io_channel_decide_encoding (channel); list = NULL; while (g_io_channel_read_line (channel, &string, NULL, &line_len, NULL) == G_IO_STATUS_NORMAL) { if (string == NULL) continue; string[line_len] = 0; // clear '\n' in tail // check URI scheme escaped = g_uri_parse_scheme (string); if (escaped == NULL) { g_free (escaped); g_free (string); } else { g_free (escaped); // if URI is not valid UTF-8 string, escape it. if (g_utf8_validate (string, -1, NULL) == FALSE) { escaped = g_uri_escape_string (string, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, FALSE); g_free (string); string = escaped; } list = g_list_prepend (list, string); } } g_io_channel_unref (channel); return g_list_reverse (list); } // get URIs from text GList* ugtk_text_get_uris (const gchar* text) { GList* list; gchar* escaped; gchar* line; gint line_len; gint text_len; gint offset; text_len = strlen (text); list = NULL; for (offset = 0; offset < text_len; offset += line_len +1) { line_len = strcspn (text + offset, "\r\n"); line = g_strndup (text + offset, line_len); // check URI scheme escaped = g_uri_parse_scheme (line); if (escaped == NULL) { g_free (escaped); g_free (line); } else { g_free (escaped); // if URI is not valid UTF-8 string, escape it. if (g_utf8_validate (line, -1, NULL) == FALSE) { escaped = g_uri_escape_string (line, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, FALSE); g_free (line); line = escaped; } list = g_list_prepend (list, line); } } return g_list_reverse (list); } GList* ugtk_uri_list_remove_scheme (GList* list, const gchar* scheme) { GList* link; gchar* text; for (link = list; link; link = link->next) { text = g_uri_parse_scheme (link->data); if (text == NULL || strcmp (text, scheme) == 0) { g_free (link->data); link->data = NULL; } g_free (text); } return g_list_remove_all (list, NULL); } // ---------------------------------------------------------------------------- // Used by ug_io_channel_decide_encoding() // BOM = Byte Order Mark #define UG_BOM_UTF32BE "\x00\x00\xFE\xFF" #define UG_BOM_UTF32BE_LEN 4 #define UG_BOM_UTF32LE "\xFF\xFE\x00\x00" #define UG_BOM_UTF32LE_LEN 4 #define UG_BOM_UTF8 "\xEF\xBB\xBF" #define UG_BOM_UTF8_LEN 3 #define UG_BOM_UTF16BE "\xFE\xFF" #define UG_BOM_UTF16BE_LEN 2 #define UG_BOM_UTF16LE "\xFF\xFE" #define UG_BOM_UTF16LE_LEN 2 const char* ugtk_io_channel_decide_encoding (GIOChannel* channel) { gchar* encoding; gchar bom[4]; guint bom_len; // The internal encoding is always UTF-8. // set encoding NULL is safe to use with binary data. g_io_channel_set_encoding (channel, NULL, NULL); // read 4 bytes BOM (Byte Order Mark) if (g_io_channel_read_chars (channel, bom, 4, NULL, NULL) != G_IO_STATUS_NORMAL) return NULL; if (memcmp (bom, UG_BOM_UTF32BE, UG_BOM_UTF32BE_LEN) == 0) { bom_len = UG_BOM_UTF32BE_LEN; encoding = "UTF-32BE"; } else if (memcmp (bom, UG_BOM_UTF32LE, UG_BOM_UTF32LE_LEN) == 0) { bom_len = UG_BOM_UTF32LE_LEN; encoding = "UTF-32LE"; } else if (memcmp (bom, UG_BOM_UTF8, UG_BOM_UTF8_LEN) == 0) { bom_len = UG_BOM_UTF8_LEN; encoding = "UTF-8"; } else if (memcmp (bom, UG_BOM_UTF16BE, UG_BOM_UTF16BE_LEN) == 0) { bom_len = UG_BOM_UTF16BE_LEN; encoding = "UTF-16BE"; } else if (memcmp (bom, UG_BOM_UTF16LE, UG_BOM_UTF16LE_LEN) == 0) { bom_len = UG_BOM_UTF16LE_LEN; encoding = "UTF-16LE"; } else { bom_len = 0; encoding = NULL; // encoding = "UTF-8"; } // repositioned before set encoding. This flushes all the internal buffers. g_io_channel_seek_position (channel, bom_len, G_SEEK_SET, NULL); // The encoding can be set now. g_io_channel_set_encoding (channel, encoding, NULL); return encoding; } uget-2.2.3/ui-gtk/UgtkSelector.c0000664000175000017500000006342113602733704013377 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include // UGTK_APP_NAME #include // ---------------------------------------------------------------------------- // UgtkSelectorItem // typedef struct UgtkSelectorItem UgtkSelectorItem; struct UgtkSelectorItem { gboolean mark; gchar* uri; void* data; }; // GtkListStore for UgtkSelectorItem static GList* ugtk_selector_store_get_marked (GtkListStore* store, GList* list); static void ugtk_selector_store_set_mark_all (GtkListStore* store, gboolean mark); static void ugtk_selector_store_clear (GtkListStore* store); // GtkTreeView for UgtkSelectorItem static GtkTreeView* ugtk_selector_view_new (const gchar* title, gboolean active_toggled); static GtkCellRenderer* ugtk_selector_view_get_renderer_toggle (GtkTreeView* view); // ---------------------------------------------------------------------------- // UgtkSelector // static void ugtk_selector_init_ui (UgtkSelector* selector); static void ugtk_selector_filter_init (struct UgtkSelectorFilter* filter, UgtkSelector* selector); static void ugtk_selector_filter_show (struct UgtkSelectorFilter* filter, UgtkSelectorPage* page); // signal handlers static void on_selector_item_toggled (GtkCellRendererToggle* cell, gchar* path_str, UgtkSelector* selector); static void on_selector_mark_all (GtkWidget* button, UgtkSelector* selector); static void on_selector_mark_none (GtkWidget* button, UgtkSelector* selector); static void on_selector_mark_filter (GtkWidget* button, UgtkSelector* selector); static void on_filter_dialog_response (GtkDialog* dialog, gint response_id, UgtkSelector* selector); static void on_filter_button_all (GtkWidget* widget, GtkTreeView* treeview); static void on_filter_button_none (GtkWidget* widget, GtkTreeView* treeview); void ugtk_selector_init (UgtkSelector* selector, GtkWindow* parent) { selector->parent = parent; ugtk_selector_init_ui (selector); // UgtkSelectorPage initialize selector->pages = g_array_new (FALSE, FALSE, sizeof (UgtkSelectorPage)); // UgtkSelectorFilter initialize ugtk_selector_filter_init (&selector->filter, selector); g_signal_connect (selector->select_all, "clicked", G_CALLBACK (on_selector_mark_all), selector); g_signal_connect (selector->select_none, "clicked", G_CALLBACK (on_selector_mark_none), selector); g_signal_connect (selector->select_filter, "clicked", G_CALLBACK (on_selector_mark_filter), selector); } void ugtk_selector_finalize (UgtkSelector* selector) { UgtkSelectorPage* page; GArray* array; guint index; // UgtkSelectorPage finalize array = selector->pages; for (index=0; index < array->len; index++) { page = &g_array_index (array, UgtkSelectorPage, index); ugtk_selector_page_finalize (page); } g_array_free (selector->pages, TRUE); // UgtkSelectorFilter finalize gtk_widget_destroy (GTK_WIDGET (selector->filter.dialog)); } void ugtk_selector_hide_href (UgtkSelector* selector) { gtk_widget_hide ((GtkWidget*) selector->href_label); gtk_widget_hide ((GtkWidget*) selector->href_entry); gtk_widget_hide ((GtkWidget*) selector->href_separator); } static GList* ugtk_selector_get_marked (UgtkSelector* selector) { UgtkSelectorPage* page; GList* list; guint index; list = NULL; for (index = 0; index < selector->pages->len; index++) { page = &g_array_index (selector->pages, UgtkSelectorPage, index); list = ugtk_selector_store_get_marked (page->store, list); } return g_list_reverse (list); } GList* ugtk_selector_get_marked_uris (UgtkSelector* selector) { UgtkSelectorItem* item; GString* gstr; GList* list; GList* link; const gchar* base_href; list = ugtk_selector_get_marked (selector); base_href = gtk_entry_get_text (selector->href_entry); if (base_href[0] == 0) base_href = NULL; for (link = list; link; link = link->next) { item = link->data; // URI list if (ug_uri_init (NULL, item->uri) == 0 && base_href) { gstr = g_string_new (base_href); if (gstr->str[gstr->len -1] == '/') { if (item->uri[0] == '/') g_string_truncate (gstr, gstr->len -1); } else if (item->uri[0] != '/') g_string_append_c (gstr, '/'); g_string_append (gstr, item->uri); } else gstr = g_string_new (item->uri); link->data = g_string_free (gstr, FALSE); } return list; } gint ugtk_selector_count_marked (UgtkSelector* selector) { gint count; guint index; count = 0; for (index = 0; index < selector->pages->len; index++) { count += g_array_index (selector->pages, UgtkSelectorPage, index).n_marked; // count += page->n_marked; } if (selector->notify.func) selector->notify.func (selector->notify.data, (count) ? TRUE: FALSE); return count; } gint ugtk_selector_n_items (UgtkSelector* selector) { gint count; guint index; UgtkSelectorPage* page; count = 0; for (index = 0; index < selector->pages->len; index++) { page = &g_array_index (selector->pages, UgtkSelectorPage, index); count += gtk_tree_model_iter_n_children (GTK_TREE_MODEL (page->store), NULL); } return count; } UgtkSelectorPage* ugtk_selector_add_page (UgtkSelector* selector, const gchar* title) { GtkCellRenderer* renderer; UgtkSelectorPage* page; GArray* array; array = selector->pages; g_array_set_size (array, array->len + 1); page = &g_array_index (array, UgtkSelectorPage, array->len - 1); ugtk_selector_page_init (page); renderer = ugtk_selector_view_get_renderer_toggle (page->view); g_signal_connect (renderer, "toggled", G_CALLBACK (on_selector_item_toggled), selector); gtk_notebook_append_page (selector->notebook, page->self, gtk_label_new (title)); return page; } UgtkSelectorPage* ugtk_selector_get_page (UgtkSelector* selector, gint nth_page) { UgtkSelectorPage* page; if (nth_page < 0) nth_page = gtk_notebook_get_current_page (selector->notebook); if (nth_page == -1 || nth_page >= (gint)selector->pages->len) return NULL; page = &g_array_index (selector->pages, UgtkSelectorPage, nth_page); return page; } // ---------------------------------------------------------------------------- // UgtkSelectorFilter use UgtkSelectorFilterData in UgtkSelectorPage // static GtkWidget* ugtk_selector_filter_view_init (GtkTreeView* item_view) { GtkSizeGroup* sizegroup; GtkWidget* widget; GtkBox* vbox; GtkBox* hbox; vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); // filter view and it's scrolled window gtk_widget_set_size_request ((GtkWidget*) item_view, 120, 120); widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (widget), GTK_WIDGET (item_view)); gtk_box_pack_start (vbox, widget, TRUE, TRUE, 2); // button sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_button_new_with_label (_("All")); gtk_size_group_add_widget (sizegroup, widget); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 1); g_signal_connect (widget, "clicked", G_CALLBACK (on_filter_button_all), item_view); widget = gtk_button_new_with_label (_("None")); gtk_size_group_add_widget (sizegroup, widget); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 1); g_signal_connect (widget, "clicked", G_CALLBACK (on_filter_button_none), item_view); return (GtkWidget*) vbox; } static void ugtk_selector_filter_init (struct UgtkSelectorFilter* filter, UgtkSelector* selector) { GtkDialog* dialog; GtkWidget* widget; GtkBox* vbox; GtkBox* hbox; gchar* title; title = g_strconcat (UGTK_APP_NAME " - ", _("Mark by filter"), NULL); dialog = (GtkDialog*) gtk_dialog_new_with_buttons (title, selector->parent, 0, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_free (title); gtk_window_set_modal ((GtkWindow*) dialog, FALSE); // gtk_window_set_resizable ((GtkWindow*) dialog, FALSE); gtk_window_set_destroy_with_parent ((GtkWindow*) dialog, TRUE); gtk_window_set_transient_for ((GtkWindow*) dialog, selector->parent); gtk_window_resize ((GtkWindow*) dialog, 480, 330); g_signal_connect (dialog, "response", G_CALLBACK (on_filter_dialog_response), selector); filter->dialog = dialog; vbox = (GtkBox*) gtk_dialog_get_content_area (dialog); gtk_box_pack_start (vbox, gtk_label_new (_("Mark URLs by host AND filename extension.")), FALSE, FALSE, 3); gtk_box_pack_start (vbox, gtk_label_new (_("This will reset all marks of URLs.")), FALSE, FALSE, 3); hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, TRUE, TRUE, 1); // filter view ----------------------- // left side filter->host_view = ugtk_selector_view_new (_("Host"), TRUE); widget = ugtk_selector_filter_view_init (filter->host_view); gtk_box_pack_start (hbox, widget, TRUE, TRUE, 2); // right side (filename extension) filter->ext_view = ugtk_selector_view_new (_("File Ext."), TRUE); widget = ugtk_selector_filter_view_init (filter->ext_view); gtk_box_pack_start (hbox, widget, FALSE, TRUE, 2); gtk_widget_show_all (GTK_WIDGET (vbox)); } static void ugtk_selector_filter_show (struct UgtkSelectorFilter* filter, UgtkSelectorPage* page) { GtkWindow* parent; gtk_tree_view_set_model (filter->host_view, GTK_TREE_MODEL (page->filter.host)); gtk_tree_view_set_model (filter->ext_view, GTK_TREE_MODEL (page->filter.ext)); // disable sensitive of parent window // enable sensitive in function on_filter_dialog_response() parent = gtk_window_get_transient_for ((GtkWindow*) filter->dialog); if (parent) gtk_widget_set_sensitive ((GtkWidget*) parent, FALSE); // create filter dialog if (gtk_window_get_modal (parent)) gtk_dialog_run (filter->dialog); else gtk_widget_show ((GtkWidget*) filter->dialog); } // signal handler ------------------------------ static void on_selector_item_toggled (GtkCellRendererToggle* cell, gchar* path_str, UgtkSelector* selector) { UgtkSelectorPage* page; UgtkSelectorItem* item; GtkTreeIter iter; GtkTreePath* path; GtkTreeModel* model; page = ugtk_selector_get_page (selector, -1); model = GTK_TREE_MODEL (page->store); path = gtk_tree_path_new_from_string (path_str); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); gtk_tree_model_get (model, &iter, 0, &item, -1); // UgtkSelectorItem.mark item->mark ^= 1; if (item->mark) page->n_marked++; else page->n_marked--; // count and notify ugtk_selector_count_marked (selector); } static void on_selector_mark_all (GtkWidget* button, UgtkSelector* selector) { UgtkSelectorPage* page; page = ugtk_selector_get_page (selector, -1); if (page == NULL) return; ugtk_selector_store_set_mark_all (page->store, TRUE); gtk_widget_queue_draw (GTK_WIDGET (page->view)); // count and notify page->n_marked = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (page->store), NULL); ugtk_selector_count_marked (selector); } static void on_selector_mark_none (GtkWidget* button, UgtkSelector* selector) { UgtkSelectorPage* page; page = ugtk_selector_get_page (selector, -1); if (page == NULL) return; ugtk_selector_store_set_mark_all (page->store, FALSE); gtk_widget_queue_draw (GTK_WIDGET (page->view)); // count and notify page->n_marked = 0; ugtk_selector_count_marked (selector); } static void on_selector_mark_filter (GtkWidget* button, UgtkSelector* selector) { UgtkSelectorPage* page; page = ugtk_selector_get_page (selector, -1); if (page == NULL) return; ugtk_selector_page_make_filter (page); ugtk_selector_filter_show (&selector->filter, page); } static void on_filter_dialog_response (GtkDialog* dialog, gint response_id, UgtkSelector* selector) { UgtkSelectorPage* page; GtkWindow* parent; if (response_id == GTK_RESPONSE_OK) { // update selection of page page = ugtk_selector_get_page (selector, -1); if (page) ugtk_selector_page_mark_by_filter_all (page); } // enable parent window parent = gtk_window_get_transient_for ((GtkWindow*) dialog); if (parent) gtk_widget_set_sensitive ((GtkWidget*) parent, TRUE); // hide filter dialog gtk_widget_hide ((GtkWidget*) dialog); // count and notify ugtk_selector_count_marked (selector); } static void on_filter_button_all (GtkWidget* widget, GtkTreeView* treeview) { GtkListStore* store; store = (GtkListStore*) gtk_tree_view_get_model (treeview); ugtk_selector_store_set_mark_all (store, TRUE); gtk_widget_queue_draw ((GtkWidget*) treeview); } static void on_filter_button_none (GtkWidget* widget, GtkTreeView* treeview) { GtkListStore* store; store = (GtkListStore*) gtk_tree_view_get_model (treeview); ugtk_selector_store_set_mark_all (store, FALSE); gtk_widget_queue_draw ((GtkWidget*) treeview); } // ---------------------------------------------------------------------------- // UgtkSelectorPage // void ugtk_selector_page_init (UgtkSelectorPage* page) { GtkScrolledWindow* scrolled; page->store = gtk_list_store_new (1, G_TYPE_POINTER); page->view = ugtk_selector_view_new (_("URL"), FALSE); gtk_tree_view_set_model (page->view, GTK_TREE_MODEL (page->store)); // scrolled page->self = gtk_scrolled_window_new (NULL, NULL); scrolled = GTK_SCROLLED_WINDOW (page->self); gtk_scrolled_window_set_shadow_type (scrolled, GTK_SHADOW_IN); gtk_scrolled_window_set_policy (scrolled, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scrolled), GTK_WIDGET (page->view)); gtk_widget_show (page->self); // total marked count page->n_marked = 0; // UgtkSelectorFilterData initialize page->filter.hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_list_free); page->filter.host = gtk_list_store_new (1, G_TYPE_POINTER); page->filter.ext = gtk_list_store_new (1, G_TYPE_POINTER); } void ugtk_selector_page_finalize (UgtkSelectorPage* page) { ugtk_selector_store_clear (page->store); g_object_unref (page->store); // UgtkSelectorFilterData finalize g_hash_table_destroy (page->filter.hash); ugtk_selector_store_clear (page->filter.host); g_object_unref (page->filter.host); ugtk_selector_store_clear (page->filter.ext); g_object_unref (page->filter.ext); } int ugtk_selector_page_add_uris (UgtkSelectorPage* page, GList* uris) { GtkTreeIter iter; UgtkSelectorItem* item; int counts; for (counts = 0; uris; uris = uris->next) { if (uris->data == NULL) continue; counts++; item = g_slice_alloc (sizeof (UgtkSelectorItem)); item->mark = TRUE; item->uri = uris->data; item->data = NULL; uris->data = NULL; // item->uri gtk_list_store_append (page->store, &iter); gtk_list_store_set (page->store, &iter, 0, item, -1); page->n_marked++; } return counts; } static void ugtk_selector_page_add_filter (UgtkSelectorPage* page, GtkListStore* filter_store, gchar* key, UgtkSelectorItem* value) { UgtkSelectorItem* filter_item; GtkTreeIter iter; GList* filter_list; gchar* orig_key; if (g_hash_table_lookup_extended (page->filter.hash, key, (gpointer*) &orig_key, (gpointer*) &filter_list) == FALSE) { filter_item = g_slice_alloc (sizeof (UgtkSelectorItem)); filter_item->uri = key; filter_item->mark = TRUE; filter_item->data = NULL; gtk_list_store_append (filter_store, &iter); gtk_list_store_set (filter_store, &iter, 0, filter_item, -1); filter_list = NULL; } else { g_hash_table_steal (page->filter.hash, key); g_free (key); key = orig_key; } filter_list = g_list_prepend (filter_list, value); g_hash_table_insert (page->filter.hash, key, filter_list); } void ugtk_selector_page_make_filter (UgtkSelectorPage* page) { UgtkSelectorItem* item; GtkTreeModel* model; GtkTreeIter iter; UgUri* upart; int value; gchar* key; if (g_hash_table_size (page->filter.hash)) return; upart = g_slice_alloc (sizeof (UgUri)); model = GTK_TREE_MODEL (page->store); value = gtk_tree_model_get_iter_first (model, &iter); while (value) { gtk_tree_model_get (model, &iter, 0, &item, -1); // create filter by host ---------------- ug_uri_init (upart, item->uri); if (upart->authority) key = g_strndup (item->uri, upart->path); else key = g_strdup ("(none)"); ugtk_selector_page_add_filter (page, page->filter.host, key, item); // create filter by filename extension -- value = ug_uri_part_file_ext (upart, (const char**) &key); if (value) key = g_strdup_printf (".%.*s", value, key); else key = g_strdup (".(none)"); ugtk_selector_page_add_filter (page, page->filter.ext, key, item); // next value = gtk_tree_model_iter_next (model, &iter); } g_slice_free1 (sizeof (UgUri), upart); } static void ugtk_selector_page_mark_by_filter (UgtkSelectorPage* page, GtkListStore* filter_store) { UgtkSelectorItem* item; GList* related; GList* marked; GList* link; marked = ugtk_selector_store_get_marked (filter_store, NULL); for (link = marked; link; link = link->next) { item = link->data; related = g_hash_table_lookup (page->filter.hash, item->uri); for (; related; related = related->next) { item = related->data; item->mark++; // increase mark count } } g_list_free (marked); } void ugtk_selector_page_mark_by_filter_all (UgtkSelectorPage* page) { UgtkSelectorItem* item; GtkTreeModel* model; GtkTreeIter iter; gboolean valid; // clear all mark ugtk_selector_store_set_mark_all (page->store, FALSE); page->n_marked = 0; // If filter (host and filename extension) was selected, increase mark count. ugtk_selector_page_mark_by_filter (page, page->filter.host); ugtk_selector_page_mark_by_filter (page, page->filter.ext); // remark model = GTK_TREE_MODEL (page->store); valid = gtk_tree_model_get_iter_first (model, &iter); while (valid) { gtk_tree_model_get (model, &iter, 0, &item, -1); valid = gtk_tree_model_iter_next (model, &iter); // decrease mark count. If mark count is 2, it still marked. if (item->mark > 0) { item->mark--; if (item->mark) page->n_marked++; } } } // ---------------------------------------------------------------------------- // GtkListStore for UgtkSelectorItem // (UgItem*) list->data. To free the returned value, call g_list_free() static GList* ugtk_selector_store_get_marked (GtkListStore* store, GList* list) { UgtkSelectorItem* item; GtkTreeModel* model; GtkTreeIter iter; gboolean valid; model = GTK_TREE_MODEL (store); valid = gtk_tree_model_get_iter_first (model, &iter); while (valid) { gtk_tree_model_get (model, &iter, 0, &item, -1); valid = gtk_tree_model_iter_next (model, &iter); if (item->mark) list = g_list_prepend (list, item); } return list; } static void ugtk_selector_store_set_mark_all (GtkListStore* store, gboolean mark) { UgtkSelectorItem* item; GtkTreeModel* model; GtkTreeIter iter; gboolean valid; model = (GtkTreeModel*) store; valid = gtk_tree_model_get_iter_first (model, &iter); while (valid) { gtk_tree_model_get (model, &iter, 0, &item, -1); valid = gtk_tree_model_iter_next (model, &iter); item->mark = mark; } } static void ugtk_selector_store_clear (GtkListStore* store) { UgtkSelectorItem* item; GtkTreeModel* model; GtkTreeIter iter; model = GTK_TREE_MODEL (store); while (gtk_tree_model_get_iter_first (model, &iter)) { gtk_tree_model_get (model, &iter, 0, &item, -1); gtk_list_store_remove (store, &iter); g_free (item->uri); g_slice_free1 (sizeof (UgtkSelectorItem), item); } } // ---------------------------------------------------------------------------- // GtkTreeView for UgtkSelectorItem // static void col_set_toggle (GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgtkSelectorItem* item; gtk_tree_model_get (model, iter, 0, &item, -1); g_object_set (cell, "active", item->mark, NULL); } static void col_set_uri (GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgtkSelectorItem* item; gtk_tree_model_get (model, iter, 0, &item, -1); g_object_set (cell, "text", item->uri, NULL); } // toggled callback static void on_cell_toggled (GtkCellRendererToggle* cell, gchar* path_str, GtkTreeView* view) { GtkTreeIter iter; GtkTreePath* path; GtkTreeModel* model; UgtkSelectorItem* item; path = gtk_tree_path_new_from_string (path_str); model = gtk_tree_view_get_model (view); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); gtk_tree_model_get (model, &iter, 0, &item, -1); item->mark ^= 1; } static GtkTreeView* ugtk_selector_view_new (const gchar* title, gboolean active_toggled) { GtkTreeView* view; GtkCellRenderer* renderer; GtkTreeViewColumn* column; view = (GtkTreeView*) gtk_tree_view_new (); // gtk_tree_view_set_fixed_height_mode (view, TRUE); // UgtkSelectorItem.mark renderer = gtk_cell_renderer_toggle_new (); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, "M"); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_toggle, NULL, NULL); gtk_tree_view_column_set_resizable (column, FALSE); gtk_tree_view_column_set_alignment (column, 0.5); gtk_tree_view_column_set_min_width (column, 15); // gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_append_column (view, column); if (active_toggled) { g_signal_connect (renderer, "toggled", G_CALLBACK (on_cell_toggled), view); } // UgtkSelectorItem.uri renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, title); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_uri, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); // gtk_tree_view_column_set_expand (column, TRUE); // gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_append_column (view, column); gtk_widget_show (GTK_WIDGET (view)); return view; } static GtkCellRenderer* ugtk_selector_view_get_renderer_toggle (GtkTreeView* view) { GtkCellRenderer* renderer; GtkTreeViewColumn* column; GList* list; column = gtk_tree_view_get_column (view, 0); list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column)); renderer = list->data; g_list_free (list); return renderer; } // UI static void ugtk_selector_init_ui (UgtkSelector* selector) { GtkBox* vbox; GtkBox* hbox; GtkWidget* widget; gchar* string; selector->self = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); vbox = (GtkBox*) selector->self; hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 1); string = g_strconcat (_("Base hypertext reference"), " :", NULL); selector->href_label = gtk_label_new (string); g_free (string); gtk_box_pack_start (hbox, selector->href_label, FALSE, TRUE, 1); selector->href_entry = (GtkEntry*) gtk_entry_new (); gtk_box_pack_start (vbox, (GtkWidget*) selector->href_entry, FALSE, FALSE, 1); selector->href_separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start (vbox, selector->href_separator, FALSE, FALSE, 1); selector->notebook = (GtkNotebook*) gtk_notebook_new (); gtk_box_pack_start (vbox, (GtkWidget*) selector->notebook, TRUE, TRUE, 1); hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 1); // select all widget = gtk_button_new_with_mnemonic (_("Mark _All")); gtk_box_pack_start (hbox, widget, TRUE, TRUE, 1); selector->select_all = widget; // select none widget = gtk_button_new_with_mnemonic (_("Mark _None")); gtk_box_pack_start (hbox, widget, TRUE, TRUE, 1); selector->select_none = widget; // select by filter widget = gtk_button_new_with_mnemonic (_("_Mark by filter...")); gtk_box_pack_start (hbox, widget, TRUE, TRUE, 1); selector->select_filter = widget; gtk_widget_show_all ((GtkWidget*) vbox); } uget-2.2.3/ui-gtk/UgtkTrayIcon.h0000664000175000017500000000635013602733704013352 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_TRAY_ICON_H #define UGTK_TRAY_ICON_H #include #include #ifdef HAVE_APP_INDICATOR #include #endif #ifdef __cplusplus extern "C" { #endif typedef struct UgtkTrayIcon UgtkTrayIcon; typedef struct UgtkApp UgtkApp; // -------------------------------- // Tray Icon enum UgtkTrayIconState { UGTK_TRAY_ICON_STATE_NORMAL, UGTK_TRAY_ICON_STATE_RUNNING, UGTK_TRAY_ICON_STATE_ERROR, }; struct UgtkTrayIcon { #ifdef HAVE_APP_INDICATOR AppIndicator* indicator; AppIndicator* indicator_temp; #endif GtkStatusIcon* self; gboolean visible; gboolean error_occurred; guint state; // UgtkTrayIconState struct UgtkTrayIconMenu { GtkWidget* self; // (GtkMenu) pop-up menu GtkWidget* create_download; GtkWidget* create_clipboard; GtkWidget* create_torrent; GtkWidget* create_metalink; gboolean emission; GtkWidget* clipboard_monitor; GtkWidget* clipboard_quiet; GtkWidget* commandline_quiet; GtkWidget* skip_existing; GtkWidget* apply_recent; GtkWidget* settings; GtkWidget* about; GtkWidget* show_window; GtkWidget* offline_mode; GtkWidget* quit; } menu; }; void ugtk_tray_icon_init (UgtkTrayIcon* trayicon); void ugtk_tray_icon_set_info (UgtkTrayIcon* trayicon, guint n_active, gint64 down_speed, gint64 up_speed); void ugtk_tray_icon_set_visible (UgtkTrayIcon* trayicon, gboolean visible); #ifdef HAVE_APP_INDICATOR void ugtk_tray_icon_use_indicator (UgtkTrayIcon* trayicon, gboolean enable); #endif void ugtk_trayicon_init_callback (UgtkTrayIcon* trayicon, UgtkApp* app); #ifdef __cplusplus } #endif #endif // UGTK_TRAY_H uget-2.2.3/ui-gtk/UgtkApp-callback.c0000664000175000017500000004721113602733704014070 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include // static functions static void ugtk_window_init_callback (struct UgtkWindow* window, UgtkApp* app); static void ugtk_toolbar_init_callback (struct UgtkToolbar* toolbar, UgtkApp* app); // functions for UgetNode.notification static void node_inserted (UgetNode* node, UgetNode* sibling, UgetNode* child); static void node_removed (UgetNode* node, UgetNode* sibling, UgetNode* child); static void node_updated (UgetNode* child); void ugtk_app_init_callback (UgtkApp* app) { // gtk_accel_group_connect (app->accel_group, GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, // g_cclosure_new_swap (G_CALLBACK (ugtk_app_quit), app, NULL)); // gtk_accel_group_connect (app->accel_group, GDK_KEY_s, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, // g_cclosure_new_swap (G_CALLBACK (ugtk_app_save), app, NULL)); // gtk_accel_group_connect (app->accel_group, GDK_KEY_c, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, // g_cclosure_new_swap (G_CALLBACK (on_summary_copy_selected), app, NULL)); ugtk_window_init_callback (&app->window, app); ugtk_menubar_init_callback (&app->menubar, app); ugtk_toolbar_init_callback (&app->toolbar, app); ugtk_trayicon_init_callback (&app->trayicon, app); // node notification uget_app_set_notification ((UgetApp*) app, app, node_inserted, node_removed, (UgNotifyFunc) node_updated); } // ---------------------------------------------------------------------------- // Toolbar static void on_create_download (GtkWidget* widget, UgtkApp* app) { ugtk_app_create_download (app, NULL, NULL); } static void on_set_download_runnable (GtkWidget* widget, UgtkApp* app) { ugtk_app_queue_download (app, TRUE); } // ---------------------------------------------------------------------------- // UgtkWindow // UgtkTraveler.download.view selection "changed" static void on_download_selection_changed (GtkTreeSelection* selection, UgtkApp* app) { gint n_selected; n_selected = gtk_tree_selection_count_selected_rows (selection); ugtk_statusbar_set_info (&app->statusbar, n_selected); ugtk_app_decide_download_sensitive (app); } // UgtkTraveler.download.view "cursor-changed" static void on_download_cursor_changed (GtkTreeView* view, UgtkApp* app) { GtkWidget* item; UgetNode* node; UgetRelation* relation; UgetPriority priority; node = app->traveler.download.cursor.node; if (node) node = node->base; ugtk_summary_show (&app->summary, node); // UgtkMenubar.download.priority if (node == NULL) priority = UGET_PRIORITY_NORMAL; else { relation = ug_info_get (node->info, UgetRelationInfo); if (relation) priority = relation->priority; else priority = UGET_PRIORITY_NORMAL; } // set item switch (priority) { case UGET_PRIORITY_HIGH: item = app->menubar.download.prioriy.high; break; case UGET_PRIORITY_LOW: item = app->menubar.download.prioriy.low; break; case UGET_PRIORITY_NORMAL: default: item = app->menubar.download.prioriy.normal; break; } gtk_check_menu_item_set_active ((GtkCheckMenuItem*) item, TRUE); } // UgtkTraveler.category.view "cursor-changed" // UgtkTraveler.state.view "cursor-changed" static void on_category_cursor_changed (GtkTreeView* view, UgtkApp* app) { UgtkTraveler* traveler; traveler = &app->traveler; if (traveler->state.cursor.pos != traveler->state.cursor.pos_last || traveler->category.cursor.pos != traveler->category.cursor.pos_last) { // set sorting column ugtk_traveler_set_sorting (traveler, TRUE, app->setting.download_column.sort.nth, app->setting.download_column.sort.type); } // show/hide download column and setup items in UgtkViewMenu if (traveler->state.cursor.pos != traveler->state.cursor.pos_last) { struct UgtkDownloadColumnSetting* setting; GtkTreeView* view; GtkTreeViewColumn* column; gboolean sensitive; view = traveler->download.view; setting = &app->setting.download_column; // Finished if (traveler->state.cursor.pos == 3) sensitive = FALSE; else sensitive = TRUE; gtk_widget_set_sensitive (app->menubar.view.columns.complete, sensitive); gtk_widget_set_sensitive (app->menubar.view.columns.percent, sensitive); column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_COMPLETE); gtk_tree_view_column_set_visible (column, sensitive && setting->complete); column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_PERCENT); gtk_tree_view_column_set_visible (column, sensitive && setting->percent); // Recycled if (traveler->state.cursor.pos == 4) sensitive = FALSE; else sensitive = TRUE; gtk_widget_set_sensitive (app->menubar.view.columns.elapsed, sensitive); column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_ELAPSED); gtk_tree_view_column_set_visible (column, sensitive && setting->elapsed); // Finished & Recycled if (traveler->state.cursor.pos == 3 || traveler->state.cursor.pos == 4) sensitive = FALSE; else sensitive = TRUE; gtk_widget_set_sensitive (app->menubar.view.columns.left, sensitive); gtk_widget_set_sensitive (app->menubar.view.columns.speed, sensitive); gtk_widget_set_sensitive (app->menubar.view.columns.upload_speed, sensitive); gtk_widget_set_sensitive (app->menubar.view.columns.uploaded, sensitive); gtk_widget_set_sensitive (app->menubar.view.columns.ratio, sensitive); column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_LEFT); gtk_tree_view_column_set_visible (column, sensitive && setting->left); column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_SPEED); gtk_tree_view_column_set_visible (column, sensitive && setting->speed); column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_UPLOAD_SPEED); gtk_tree_view_column_set_visible (column, sensitive && setting->upload_speed); column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_UPLOADED); gtk_tree_view_column_set_visible (column, sensitive && setting->uploaded); column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_RATIO); gtk_tree_view_column_set_visible (column, sensitive && setting->ratio); } if (view == app->traveler.category.view) { ugtk_app_decide_category_sensitive (app); // sync UgtkMenubar.download.move_to ugtk_menubar_sync_category (&app->menubar, app, FALSE); } } // button-press-event static gboolean on_button_press_event (GtkTreeView* view, GdkEventButton* event, UgtkApp* app) { GtkTreeSelection* selection; GtkTreePath* path; GtkMenu* menu; gboolean is_selected; // right button press // if (event->type != GDK_BUTTON_PRESS) // return FALSE; if (event->button != 3) // right mouse button return FALSE; // popup a menu if (view == app->traveler.category.view) menu = (GtkMenu*) app->menubar.category.self; else if (view == app->traveler.download.view) menu = (GtkMenu*) app->menubar.download.self; else if (view == app->summary.view) menu = app->summary.menu.self; else return FALSE; gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event->button, gtk_get_current_event_time()); if (gtk_tree_view_get_path_at_pos (view, (gint)event->x, (gint)event->y, &path, NULL, NULL, NULL)) { selection = gtk_tree_view_get_selection (view); is_selected = gtk_tree_selection_path_is_selected (selection, path); gtk_tree_path_free (path); if (is_selected) return TRUE; } return FALSE; } // UgtkSummary.menu.copy signal handler static void on_summary_copy_selected (GtkWidget* widget, UgtkApp* app) { gchar* text; text = ugtk_summary_get_text_selected (&app->summary); ugtk_clipboard_set_text (&app->clipboard, text); } // UgtkSummary.menu.copy_all signal handler static void on_summary_copy_all (GtkWidget* widget, UgtkApp* app) { gchar* text; text = ugtk_summary_get_text_all (&app->summary); ugtk_clipboard_set_text (&app->clipboard, text); } // This function is used by on_window_key_press_event() static void menu_position_func (GtkMenu* menu, gint* x, gint* y, gboolean* push_in, gpointer user_data) { GtkRequisition menu_requisition; GtkAllocation allocation; GtkWidget* widget; gint max_x, max_y; widget = user_data; gdk_window_get_origin (gtk_widget_get_window (widget), x, y); gtk_widget_get_preferred_size (GTK_WIDGET (menu), &menu_requisition, NULL); gtk_widget_get_allocation (widget, &allocation); if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) *x += allocation.width - allocation.width / 3; else *x += allocation.width / 3; *y += allocation.height / 3; // if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) // *x += allocation.width - menu_requisition.width; // else // *x += allocation.x; // *y += allocation.y + allocation.height; // Make sure we are on the screen. max_x = MAX (0, gdk_screen_width () - menu_requisition.width); max_y = MAX (0, gdk_screen_height () - menu_requisition.height); *x = CLAMP (*x, 0, max_x); *y = CLAMP (*y, 0, max_y); } // key-press-event static gboolean on_window_key_press_event (GtkWidget* widget, GdkEventKey* event, UgtkApp* app) { GtkTreeView* focus; GtkMenu* menu; // g_print ("key-press : 0x%x\n", event->keyval); if (event->keyval != GDK_KEY_Menu) return FALSE; focus = (GtkTreeView*) gtk_window_get_focus (app->window.self); if (focus == app->traveler.category.view) { widget = (GtkWidget*) app->traveler.category.view; menu = (GtkMenu*) app->menubar.category.self; } else if (focus == app->traveler.download.view) { widget = (GtkWidget*) app->traveler.download.view; menu = (GtkMenu*) app->menubar.download.self; } else if (focus == app->summary.view) { widget = (GtkWidget*) app->summary.view; menu = (GtkMenu*) app->summary.menu.self; } else return FALSE; gtk_menu_popup (menu, NULL, NULL, menu_position_func, widget, 0, gtk_get_current_event_time()); return TRUE; } // UgtkWindow.self "delete-event" static gboolean on_window_delete_event (GtkWidget* widget, GdkEvent* event, UgtkApp* app) { if (app->setting.ui.close_to_tray == FALSE) ugtk_app_decide_to_quit (app); else { ugtk_tray_icon_set_visible (&app->trayicon, TRUE); gtk_widget_hide ((GtkWidget*) app->window.self); } return TRUE; } // UgtkTraveler.download.view "key-press-event" static gboolean on_traveler_key_press_event (GtkWidget* widget, GdkEventKey* event, UgtkApp* app) { /* // check shift key status GdkWindow* gdk_win; GdkDevice* dev_pointer; GdkModifierType mask; // check shift key status gdk_win = gtk_widget_get_parent_window ((GtkWidget*) app->cwidget.current.widget->view); dev_pointer = gdk_device_manager_get_client_pointer ( gdk_display_get_device_manager (gdk_window_get_display (gdk_win))); gdk_window_get_device_position (gdk_win, dev_pointer, NULL, NULL, &mask); if (app->cwidget.current.category) { switch (event->keyval) { case GDK_KEY_Delete: case GDK_KEY_KP_Delete: if (mask & GDK_SHIFT_MASK) ugtk_app_delete_download (app, TRUE); else ugtk_app_delete_download (app, FALSE); return TRUE; case GDK_KEY_Return: case GDK_KEY_KP_Enter: if (mask & GDK_SHIFT_MASK) on_open_download_folder (widget, app); else on_open_download_file (widget, app); return TRUE; } } */ switch (event->keyval) { case GDK_KEY_Delete: ugtk_app_delete_download (app, FALSE); return TRUE; case GDK_KEY_space: ugtk_app_switch_download_state (app); return TRUE; default: break; } return FALSE; } static void ugtk_window_init_callback (struct UgtkWindow* window, UgtkApp* app) { GtkTreeSelection* selection; // UgtkTraveler selection = gtk_tree_view_get_selection (app->traveler.download.view); g_signal_connect (selection, "changed", G_CALLBACK (on_download_selection_changed), app); g_signal_connect (app->traveler.download.view, "cursor-changed", G_CALLBACK (on_download_cursor_changed), app); g_signal_connect_after (app->traveler.category.view, "cursor-changed", G_CALLBACK (on_category_cursor_changed), app); g_signal_connect_after (app->traveler.state.view, "cursor-changed", G_CALLBACK (on_category_cursor_changed), app); // pop-up menu by mouse button g_signal_connect (app->traveler.category.view, "button-press-event", G_CALLBACK (on_button_press_event), app); g_signal_connect (app->traveler.download.view, "button-press-event", G_CALLBACK (on_button_press_event), app); g_signal_connect (app->summary.view, "button-press-event", G_CALLBACK (on_button_press_event), app); // UgtkSummary.menu signal handlers g_signal_connect (app->summary.menu.copy, "activate", G_CALLBACK (on_summary_copy_selected), app); g_signal_connect (app->summary.menu.copy_all, "activate", G_CALLBACK (on_summary_copy_all), app); // UgtkWindow.self signal handlers g_signal_connect (window->self, "key-press-event", G_CALLBACK (on_window_key_press_event), app); g_signal_connect (window->self, "delete-event", G_CALLBACK (on_window_delete_event), app); g_signal_connect_swapped (window->self, "destroy", G_CALLBACK (ugtk_app_quit), app); // UgtkTraveler signal handlers g_signal_connect (app->traveler.download.view, "key-press-event", G_CALLBACK (on_traveler_key_press_event), app); } // ---------------------------------------------------------------------------- // UgtkToolbar static void ugtk_toolbar_init_callback (struct UgtkToolbar* toolbar, UgtkApp* app) { // create new g_signal_connect (toolbar->create, "clicked", G_CALLBACK (on_create_download), app); g_signal_connect (toolbar->create_download, "activate", G_CALLBACK (on_create_download), app); g_signal_connect_swapped (toolbar->create_category, "activate", G_CALLBACK (ugtk_app_create_category), app); g_signal_connect_swapped (toolbar->create_sequence, "activate", G_CALLBACK (ugtk_app_sequence_batch), app); g_signal_connect_swapped (toolbar->create_clipboard, "activate", G_CALLBACK (ugtk_app_clipboard_batch), app); g_signal_connect_swapped (toolbar->create_torrent, "activate", G_CALLBACK (ugtk_app_create_torrent), app); g_signal_connect_swapped (toolbar->create_metalink, "activate", G_CALLBACK (ugtk_app_create_metalink), app); // save g_signal_connect_swapped (toolbar->save, "clicked", G_CALLBACK (ugtk_app_save), app); // change status g_signal_connect (toolbar->runnable, "clicked", G_CALLBACK (on_set_download_runnable), app); g_signal_connect_swapped (toolbar->pause, "clicked", G_CALLBACK (ugtk_app_pause_download), app); // change data g_signal_connect_swapped (toolbar->properties, "clicked", G_CALLBACK (ugtk_app_edit_download), app); // move g_signal_connect_swapped (toolbar->move_up, "clicked", G_CALLBACK (ugtk_app_move_download_up), app); g_signal_connect_swapped (toolbar->move_down, "clicked", G_CALLBACK (ugtk_app_move_download_down), app); g_signal_connect_swapped (toolbar->move_top, "clicked", G_CALLBACK (ugtk_app_move_download_top), app); g_signal_connect_swapped (toolbar->move_bottom, "clicked", G_CALLBACK (ugtk_app_move_download_bottom), app); } // ---------------------------------------------------------------------------- // functions for UgetNode.notification static void node_inserted (UgetNode* node, UgetNode* sibling, UgetNode* child) { GtkTreePath* path; GtkTreeIter iter; UgtkApp* app; app = node->control->notifier->data; if (node == (UgetNode*) app->traveler.category.model->root) { // category inserted path = gtk_tree_path_new_from_indices ( uget_node_child_position (node, child) +1, -1); iter.stamp = app->traveler.category.model->stamp; iter.user_data = child; gtk_tree_model_row_inserted ( GTK_TREE_MODEL (app->traveler.category.model), path, &iter); gtk_tree_path_free (path); // sync UgtkMenubar.download.move_to ugtk_menubar_sync_category (&app->menubar, app, TRUE); } else if (node == (UgetNode*) app->traveler.download.model->root) { // download inserted path = gtk_tree_path_new_from_indices ( uget_node_child_position (node, child), -1); iter.stamp = app->traveler.download.model->stamp; iter.user_data = child; gtk_tree_model_row_inserted ( GTK_TREE_MODEL (app->traveler.download.model), path, &iter); gtk_tree_path_free (path); } } static void node_removed (UgetNode* node, UgetNode* sibling, UgetNode* child) { GtkTreePath* path; UgtkApp* app; int pos; app = node->control->notifier->data; if (node == (UgetNode*) app->traveler.category.model->root) { // category removed if (sibling) pos = uget_node_child_position (node, sibling); else pos = app->traveler.category.model->root->n_children; // pos + "All Category" path = gtk_tree_path_new_from_indices (pos + 1, -1); gtk_tree_model_row_deleted ( GTK_TREE_MODEL (app->traveler.category.model), path); gtk_tree_path_free (path); // sync UgtkMenubar.download.move_to ugtk_menubar_sync_category (&app->menubar, app, TRUE); } else if (node == (UgetNode*) app->traveler.download.model->root) { // download removed if (sibling) pos = uget_node_child_position (node, sibling); else pos = app->traveler.download.model->root->n_children; path = gtk_tree_path_new_from_indices (pos, -1); gtk_tree_model_row_deleted ( GTK_TREE_MODEL (app->traveler.download.model), path); gtk_tree_path_free (path); } } static void node_updated (UgetNode* child) { GtkTreePath* path; GtkTreeIter iter; UgetNode* node; UgtkApp* app; node = child->parent; app = node->control->notifier->data; if (node == (UgetNode*) app->traveler.category.model->root) { // category changed path = gtk_tree_path_new_from_indices ( uget_node_child_position (node, child) +1, -1); iter.stamp = app->traveler.category.model->stamp; iter.user_data = child; gtk_tree_model_row_changed ( GTK_TREE_MODEL (app->traveler.category.model), path, &iter); gtk_tree_path_free (path); // sync UgtkMenubar.download.move_to ugtk_menubar_sync_category (&app->menubar, app, TRUE); } else if (node == (UgetNode*) app->traveler.download.model->root) { // download changed path = gtk_tree_path_new_from_indices ( uget_node_child_position (node, child), -1); iter.stamp = app->traveler.download.model->stamp; iter.user_data = child; gtk_tree_model_row_changed ( GTK_TREE_MODEL (app->traveler.download.model), path, &iter); gtk_tree_path_free (path); } } uget-2.2.3/ui-gtk/UgtkNodeView.c0000664000175000017500000010655713602733704013347 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include // ------------------------------------ // column data & functions for Common #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 static const UgPair state_icon_pair[] = { {(void*)(intptr_t) UGET_GROUP_FINISHED, "go-last"}, {(void*)(intptr_t) UGET_GROUP_RECYCLED, "list-remove"}, {(void*)(intptr_t) UGET_GROUP_PAUSED, "media-playback-pause"}, {(void*)(intptr_t) UGET_GROUP_ERROR, "dialog-error"}, {(void*)(intptr_t) UGET_GROUP_UPLOADING, "go-up"}, {(void*)(intptr_t) UGET_GROUP_COMPLETED, "gtk-yes"}, {(void*)(intptr_t) UGET_GROUP_QUEUING, "text-x-generic"}, {(void*)(intptr_t) UGET_GROUP_ACTIVE, "media-playback-start"}, }; #else static const UgPair state_icon_pair[] = { {(void*)(intptr_t) UGET_GROUP_FINISHED, GTK_STOCK_GOTO_LAST}, {(void*)(intptr_t) UGET_GROUP_RECYCLED, GTK_STOCK_DELETE}, {(void*)(intptr_t) UGET_GROUP_PAUSED, GTK_STOCK_MEDIA_PAUSE}, {(void*)(intptr_t) UGET_GROUP_ERROR, GTK_STOCK_DIALOG_ERROR}, {(void*)(intptr_t) UGET_GROUP_UPLOADING, GTK_STOCK_GO_UP}, {(void*)(intptr_t) UGET_GROUP_COMPLETED, GTK_STOCK_YES}, {(void*)(intptr_t) UGET_GROUP_QUEUING, GTK_STOCK_FILE}, {(void*)(intptr_t) UGET_GROUP_ACTIVE, GTK_STOCK_MEDIA_PLAY}, }; #endif static const int state_icon_pair_len = sizeof (state_icon_pair) / sizeof (UgPair); static void col_set_icon (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetRelation* relation; const gchar* icon_name; int key, index; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 icon_name = "text-x-generic"; #else icon_name = GTK_STOCK_FILE; #endif // select icon_name for (index = 0; index < state_icon_pair_len; index++) { key = (intptr_t)state_icon_pair[index].key; relation = ug_info_realloc(node->info, UgetRelationInfo); if ((key & relation->group) == key) { icon_name = state_icon_pair[index].data; break; } } #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 g_object_set (cell, "icon-name", icon_name, NULL); #else g_object_set (cell, "stock-id", icon_name, NULL); #endif } // ------------------------------------ // column functions for Download static void col_set_name (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { // UgtkNodeTree* utree; UgetCommon* common; UgetNode* node; char* name; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; // if (UGTK_IS_NODE_TREE (model)) { // // prefix.root // utree = UGTK_NODE_TREE (model); // if (utree->prefix.root && utree->prefix.root->children == node) { // g_object_set (cell, "text", utree->prefix.name, NULL); // return; // } // } node = node->base; name = _("unnamed"); common = ug_info_get(node->info, UgetCommonInfo); if (common && common->name) name = common->name; else { common = ug_info_get (node->info, UgetCommonInfo); if (common) { if (common->file) name = common->file; else if (common->uri) name = common->uri; } } g_object_set (cell, "text", name, NULL); } static void col_set_complete (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetProgress* progress; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; progress = ug_info_get (node->info, UgetProgressInfo); if (progress && progress->total) string = ug_str_from_int_unit (progress->complete, NULL); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } static void col_set_total (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetProgress* progress; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; progress = ug_info_get (node->info, UgetProgressInfo); if (progress && progress->total) string = ug_str_from_int_unit (progress->total, NULL); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } static void col_set_percent (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetProgress* progress; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; progress = ug_info_get (node->info, UgetProgressInfo); if (progress && progress->total) { string = ug_strdup_printf ("%d%c", progress->percent, '%'); g_object_set (cell, "visible", TRUE, NULL); g_object_set (cell, "value", progress->percent, NULL); g_object_set (cell, "text", string, NULL); ug_free (string); } else { g_object_set (cell, "visible", FALSE, NULL); g_object_set (cell, "value", 0, NULL); g_object_set (cell, "text", "", NULL); } } // consume time static void col_set_elapsed (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetProgress* progress; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; progress = ug_info_get (node->info, UgetProgressInfo); if (progress) string = ug_str_from_seconds ((int) progress->elapsed, TRUE); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } // remain time static void col_set_left (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetProgress* progress; UgetRelation* relation; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; progress = ug_info_get (node->info, UgetProgressInfo); relation = ug_info_get (node->info, UgetRelationInfo); if (progress && relation && relation->task) string = ug_str_from_seconds ((int) progress->left, TRUE); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } static void col_set_speed (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetProgress* progress; UgetRelation* relation; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; progress = ug_info_get (node->info, UgetProgressInfo); relation = ug_info_get (node->info, UgetRelationInfo); if (progress && relation && relation->task) string = ug_str_from_int_unit (progress->download_speed, "/s"); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } static void col_set_upload_speed (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetProgress* progress; UgetRelation* relation; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; progress = ug_info_get (node->info, UgetProgressInfo); relation = ug_info_get (node->info, UgetRelationInfo); if (progress && relation && relation->task && progress->upload_speed) string = ug_str_from_int_unit (progress->upload_speed, "/s"); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } static void col_set_uploaded (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetProgress* progress; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; progress = ug_info_get (node->info, UgetProgressInfo); if (progress && progress->uploaded) string = ug_str_from_int_unit (progress->uploaded, NULL); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } static void col_set_ratio (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetProgress* progress; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; progress = ug_info_get (node->info, UgetProgressInfo); if (progress && progress->ratio) string = ug_strdup_printf ("%.2f", progress->ratio); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } static void col_set_retry (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetCommon* common; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; common = ug_info_get (node->info, UgetCommonInfo); if (common == NULL || common->retry_count == 0) string = NULL; else if (common->retry_count < 100) string = ug_strdup_printf ("%d", common->retry_count); else { g_object_set (cell, "text", "> 99", NULL); return; } g_object_set (cell, "text", string, NULL); ug_free (string); } static void col_set_category (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetCommon* common; UgetNode* node; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; if (node->parent) { common = ug_info_get(node->parent->info, UgetCommonInfo); if (common) string = common->name; else string = NULL; } else string = NULL; g_object_set (cell, "text", string, NULL); } static void col_set_uri (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetCommon* common; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; common = ug_info_get (node->info, UgetCommonInfo); if (common) string = common->uri; else string = NULL; g_object_set (cell, "text", string, NULL); } static void col_set_added_on (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetLog* ulog; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; ulog = ug_info_get (node->info, UgetLogInfo); if (ulog && ulog->added_time) string = ug_str_from_time (ulog->added_time, FALSE); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } static void col_set_completed_on (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; UgetLog* ulog; char* string; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; node = node->base; ulog = ug_info_get (node->info, UgetLogInfo); if (ulog && ulog->completed_time) string = ug_str_from_time (ulog->completed_time, FALSE); else string = NULL; g_object_set (cell, "text", string, NULL); ug_free (string); } // ------------------------------------ // column functions for Category, Status static void col_set_quantity (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; gchar* quantity; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; quantity = ug_strdup_printf ("%u", node->n_children); g_object_set (cell, "text", quantity, NULL); ug_free (quantity); } // ------------------------------------ // column functions for Category static void col_set_name_c (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetCommon* common; UgetNode* node; char* name; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; // if (UGTK_IS_NODE_TREE (model)) { // UgtkNodeTree* utree; // // prefix.root // utree = UGTK_NODE_TREE (model); // if (utree->prefix.root && utree->prefix.root->children == node) { // g_object_set (cell, "text", _("All Category"), NULL); // return; // } // } node = node->base; common = ug_info_get(node->info, UgetCommonInfo); if (common && common->name) name = common->name; else name = _("unnamed"); g_object_set (cell, "text", name, NULL); } static void col_set_icon_c (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; node = iter->user_data; #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 if (uget_node_get_group(node) & UGET_GROUP_PAUSED) g_object_set (cell, "icon-name", "media-playback-pause", NULL); else g_object_set (cell, "icon-name", "gtk-dnd-multiple", NULL); #else if (uget_node_get_group(node) & UGET_GROUP_PAUSED) g_object_set (cell, "stock-id", GTK_STOCK_MEDIA_PAUSE, NULL); else g_object_set (cell, "stock-id", GTK_STOCK_DND_MULTIPLE, NULL); #endif } // ------------------------------------ // column functions for Status static const UgPair state_name_pair[] = { {(void*)(intptr_t) UGET_GROUP_ERROR, N_("Error")}, {(void*)(intptr_t) UGET_GROUP_PAUSED, N_("Paused")}, {(void*)(intptr_t) UGET_GROUP_UPLOADING, N_("Uploading")}, {(void*)(intptr_t) UGET_GROUP_COMPLETED, N_("Completed")}, {(void*)(intptr_t) UGET_GROUP_FINISHED, N_("Finished")}, {(void*)(intptr_t) UGET_GROUP_RECYCLED, N_("Recycled")}, {(void*)(intptr_t) UGET_GROUP_QUEUING, N_("Queuing")}, {(void*)(intptr_t) UGET_GROUP_ACTIVE, N_("Active")}, }; static const int state_name_pair_len = sizeof (state_name_pair) / sizeof (UgPair); static void col_set_name_s (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; char* name; int key; int index; int group; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; name = _("All Status"); if (node->real) { group = uget_node_get_group(node); for (index = 0; index < state_name_pair_len; index++) { key = (intptr_t)state_name_pair[index].key; if ((key & group) == key) { name = gettext (state_name_pair[index].data); break; } } } g_object_set (cell, "text", name, NULL); } static void col_set_icon_s (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { UgetNode* node; const gchar* icon_name; int key, index; int group; // gtk_tree_model_get (model, iter, 0, &node, -1); node = iter->user_data; // avoid crash in GTK3 if (node == NULL) return; // select icon_name #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 icon_name = "gtk-dnd-multiple"; #else icon_name = GTK_STOCK_DND_MULTIPLE; #endif if (node->real) { group = uget_node_get_group(node); for (index = 0; index < state_icon_pair_len; index++) { key = (intptr_t)state_icon_pair[index].key; if ((key & group) == key) { icon_name = state_icon_pair[index].data; break; } } } #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 g_object_set (cell, "icon-name", icon_name, NULL); #else g_object_set (cell, "stock-id", icon_name, NULL); #endif } // ---------------------------------------------------------------------------- // UgtkNodeView static GtkWidget* ugtk_node_view_new (GtkTreeCellDataFunc icon_func, GtkTreeCellDataFunc name_func, const gchar* name_title) { GtkTreeView* view; GtkCellRenderer* renderer; GtkTreeViewColumn* column; view = (GtkTreeView*)gtk_tree_view_new (); // UGTK_NODE_COLUMN_STATE // GtkCellRendererPixbuf "stock-size" = 1, 16x16 column = gtk_tree_view_column_new (); // gtk_tree_view_column_set_title (column, ""); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_cell_data_func (column, renderer, icon_func, NULL, NULL); // gtk_tree_view_column_set_resizable (column, FALSE); gtk_tree_view_column_set_min_width (column, 18); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_NAME column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, name_title); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, name_func, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_expand (column, TRUE); gtk_tree_view_append_column (view, column); gtk_widget_show (GTK_WIDGET (view)); return (GtkWidget*) view; } GtkWidget* ugtk_node_view_new_for_download (void) { GtkTreeView* view; GtkTreeSelection* selection; GtkCellRenderer* renderer; GtkCellRenderer* renderer_progress; GtkTreeViewColumn* column; view = (GtkTreeView*) ugtk_node_view_new (col_set_icon, col_set_name, _("Name")); selection = gtk_tree_view_get_selection (view); gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE); // UGTK_NODE_COLUMN_STATE column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_STATE); gtk_tree_view_column_set_resizable (column, TRUE); // UGTK_NODE_COLUMN_NAME column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_NAME); gtk_tree_view_column_set_min_width (column, 180); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); // UGTK_NODE_COLUMN_COMPLETE column = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_text_new (); g_object_set (renderer, "xalign", 1.0, NULL); gtk_tree_view_column_set_title (column, _("Complete")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_complete, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 70); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_TOTAL column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Size")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_total, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 70); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_PERCENT column = gtk_tree_view_column_new (); renderer_progress = gtk_cell_renderer_progress_new (); gtk_tree_view_column_set_title (column, _("%")); gtk_tree_view_column_pack_start (column, renderer_progress, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer_progress, col_set_percent, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 60); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_ELAPSED for consuming time column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Elapsed")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_elapsed, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 65); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_LEFT for remaining time column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Left")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_left, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 65); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_SPEED column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Speed")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_speed, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 80); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_UPLOAD_SPEED column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Up Speed")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_upload_speed, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 80); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_UPLOADED column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Uploaded")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_uploaded, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 70); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_RATIO column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Ratio")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_ratio, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 45); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_RETRY column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Retry")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_retry, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 45); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_alignment (column, 1.0); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_CATEGORY renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Category")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_category, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 100); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_URI // renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("URI")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_uri, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 300); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_ADDED_ON // renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Added On")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_added_on, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 140); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_append_column (view, column); // UGTK_NODE_COLUMN_COMPLETED_ON // renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Completed On")); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_completed_on, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_min_width (column, 140); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_append_column (view, column); gtk_tree_view_set_fixed_height_mode (view, TRUE); gtk_widget_show (GTK_WIDGET (view)); return (GtkWidget*) view; } static void add_column_quantity (GtkTreeView* view) { GtkCellRenderer* renderer; GtkTreeViewColumn* column; // UGTK_NODE_COLUMN_QUANTITY : number of tasks column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Quantity")); // gtk_tree_view_column_set_title (column, _("N")); renderer = gtk_cell_renderer_text_new (); g_object_set (renderer, "xalign", 1.0, NULL); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, col_set_quantity, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_expand (column, TRUE); gtk_tree_view_column_set_alignment (column, 1.0); // gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_append_column (view, column); } GtkWidget* ugtk_node_view_new_for_category (void) { GtkTreeView* view; // GtkCellRenderer* renderer; // GtkTreeViewColumn* column; view = (GtkTreeView*) ugtk_node_view_new (col_set_icon_c, col_set_name_c, _("Category")); gtk_tree_view_set_headers_visible (view, FALSE); // UGTK_NODE_COLUMN_NAME // column = gtk_tree_view_get_column (view, 0); // gtk_tree_view_column_set_min_width (column, -1); // gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); // column Quantity = number of tasks add_column_quantity (view); return (GtkWidget*) view; } GtkWidget* ugtk_node_view_new_for_state (void) { GtkTreeView* view; // GtkTreeViewColumn* column; view = (GtkTreeView*) ugtk_node_view_new (col_set_icon_s, col_set_name_s, _("Status")); gtk_tree_view_set_headers_visible (view, FALSE); // column = gtk_tree_view_get_column (view, 0); // gtk_tree_view_column_set_title (column, _("Status")); // column Quantity = number of tasks add_column_quantity (view); return (GtkWidget*) view; } void ugtk_node_view_use_large_icon (GtkTreeView* view, gboolean is_large, int fixed_width) { GtkTreeViewColumn* column; GtkIconSize icon_size; int icon_width; GList* list; if (is_large) { icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR; icon_width = 24 + 2; // icon size + 2 pixel } else { icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR; icon_width = 16 + 2; // icon size + 2 pixel } column = gtk_tree_view_get_column (view, UGTK_NODE_COLUMN_STATE); gtk_tree_view_column_set_min_width (column, icon_width); gtk_tree_view_column_set_fixed_width (column, fixed_width); list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT(column)); g_object_set (list->data, "stock-size", icon_size, NULL); g_list_free (list); } uget-2.2.3/ui-gtk/UgtkSettingForm.c0000664000175000017500000010736713602733704014070 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include // ---------------------------------------------------------------------------- // UgtkClipboardForm // // void ugtk_clipboard_form_init (struct UgtkClipboardForm* cbform) { PangoContext* context; PangoLayout* layout; int text_height; GtkTextView* textview; GtkWidget* widget; GtkBox* vbox; GtkBox* hbox; GtkScrolledWindow* scroll; cbform->self = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); vbox = (GtkBox*) cbform->self; // Monitor button widget = gtk_check_button_new_with_mnemonic (_("_Enable clipboard monitor")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); cbform->monitor = (GtkToggleButton*) widget; // quiet mode widget = gtk_check_button_new_with_mnemonic (_("_Quiet mode")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 0); cbform->quiet = (GtkToggleButton*) widget; // Nth category hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_label_new (_("Default category index")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); cbform->nth_label = widget; widget = gtk_spin_button_new_with_range (0.0, 1000.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); cbform->nth_spin = (GtkSpinButton*) widget; // hint hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_label_new (" - "); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); widget = gtk_label_new (_("Adding to Nth category if no matched category.")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); gtk_box_pack_start (vbox, gtk_label_new (""), FALSE, FALSE, 2); // media or storage website widget = gtk_check_button_new_with_mnemonic (_("_Monitor URL of website")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); cbform->website = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, gtk_label_new (""), FALSE, FALSE, 2); // get text height --- begin --- context = gtk_widget_get_pango_context (widget); layout = pango_layout_new (context); pango_layout_set_text (layout, "joIN", -1); pango_layout_get_pixel_size (layout, NULL, &text_height); g_object_unref (layout); // get text height --- end --- hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_label_new (_("Monitor clipboard for specified file types:")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 1); // Scrolled Window scroll = (GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (scroll, GTK_SHADOW_IN); gtk_widget_set_size_request (GTK_WIDGET (scroll), 100, text_height * 6); gtk_box_pack_start (vbox, GTK_WIDGET (scroll), FALSE, FALSE, 2); // file type pattern : TextView cbform->buffer = gtk_text_buffer_new (NULL); cbform->pattern = gtk_text_view_new_with_buffer (cbform->buffer); g_object_unref (cbform->buffer); textview = (GtkTextView*) cbform->pattern; gtk_text_view_set_wrap_mode (textview, GTK_WRAP_WORD_CHAR); gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (cbform->pattern)); // tips hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 1); gtk_box_pack_end (hbox, gtk_label_new (_("Separate the types with character '|'.")), FALSE, FALSE, 2); hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 1); gtk_box_pack_end (hbox, gtk_label_new (_("You can use regular expressions here.")), FALSE, FALSE, 2); } void ugtk_clipboard_form_set (struct UgtkClipboardForm* cbform, UgtkSetting* setting) { if (setting->clipboard.pattern) gtk_text_buffer_set_text (cbform->buffer, setting->clipboard.pattern, -1); gtk_toggle_button_set_active (cbform->monitor, setting->clipboard.monitor); gtk_toggle_button_set_active (cbform->quiet, setting->clipboard.quiet); gtk_toggle_button_set_active (cbform->website, setting->clipboard.website); gtk_spin_button_set_value (cbform->nth_spin, setting->clipboard.nth_category); gtk_toggle_button_toggled (cbform->monitor); gtk_toggle_button_toggled (cbform->quiet); // on_clipboard_quiet_mode_toggled ((GtkWidget*) cbform->quiet, cbform); } void ugtk_clipboard_form_get (struct UgtkClipboardForm* cbform, UgtkSetting* setting) { GtkTextIter iter1; GtkTextIter iter2; gtk_text_buffer_get_start_iter (cbform->buffer, &iter1); gtk_text_buffer_get_end_iter (cbform->buffer, &iter2); ug_free (setting->clipboard.pattern); setting->clipboard.pattern = gtk_text_buffer_get_text (cbform->buffer, &iter1, &iter2, FALSE); setting->clipboard.monitor = gtk_toggle_button_get_active (cbform->monitor); setting->clipboard.quiet = gtk_toggle_button_get_active (cbform->quiet); setting->clipboard.website = gtk_toggle_button_get_active (cbform->website); setting->clipboard.nth_category = gtk_spin_button_get_value_as_int (cbform->nth_spin); // remove line break ug_str_remove_crlf (setting->clipboard.pattern, setting->clipboard.pattern); } // ---------------------------------------------------------------------------- // UgtkUserInterfaceForm // void ugtk_user_interface_form_init (struct UgtkUserInterfaceForm* uiform) { GtkWidget* widget; GtkBox* vbox; uiform->self = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); // Confirmation vbox = (GtkBox*) uiform->self; widget = gtk_frame_new (_("Confirmation")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (widget), (GtkWidget*) vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); // Confirmation check buttons widget = gtk_check_button_new_with_label (_("Show confirmation dialog on exit")); uiform->confirm_exit = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); widget = gtk_check_button_new_with_label (_("Confirm when deleting files")); uiform->confirm_delete = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); // System Tray vbox = (GtkBox*) uiform->self; widget = gtk_frame_new (_("System Tray")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (widget), (GtkWidget*) vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); // System Tray check buttons widget = gtk_check_button_new_with_label (_("Always show tray icon")); uiform->show_trayicon = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); widget = gtk_check_button_new_with_label (_("Minimize to tray on startup")); uiform->start_in_tray = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); widget = gtk_check_button_new_with_label (_("Close to tray on window close")); uiform->close_to_tray = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #ifdef HAVE_APP_INDICATOR widget = gtk_check_button_new_with_label (_("Use Ubuntu's App Indicator")); uiform->app_indicator = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #endif // Others vbox = (GtkBox*) uiform->self; widget = gtk_check_button_new_with_label (_("Enable offline mode on startup")); uiform->start_in_offline_mode = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); widget = gtk_check_button_new_with_label (_("Download starting notification")); uiform->start_notification = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); widget = gtk_check_button_new_with_label (_("Sound when download is finished")); uiform->sound_notification = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); widget = gtk_check_button_new_with_label (_("Apply recent download settings")); uiform->apply_recent = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); // widget = gtk_check_button_new_with_label (_("Skip existing URI from clipboard and command-line")); // uiform->skip_existing = (GtkToggleButton*) widget; // gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); widget = gtk_check_button_new_with_label (_("Display large icon")); uiform->large_icon = (GtkToggleButton*) widget; gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); } void ugtk_user_interface_form_set (struct UgtkUserInterfaceForm* uiform, UgtkSetting* setting) { gtk_toggle_button_set_active (uiform->close_to_tray, setting->ui.close_to_tray); gtk_toggle_button_set_active (uiform->confirm_exit, setting->ui.exit_confirmation); gtk_toggle_button_set_active (uiform->confirm_delete, setting->ui.delete_confirmation); gtk_toggle_button_set_active (uiform->show_trayicon, setting->ui.show_trayicon); gtk_toggle_button_set_active (uiform->start_in_tray, setting->ui.start_in_tray); gtk_toggle_button_set_active (uiform->start_in_offline_mode, setting->ui.start_in_offline_mode); gtk_toggle_button_set_active (uiform->start_notification, setting->ui.start_notification); gtk_toggle_button_set_active (uiform->sound_notification, setting->ui.sound_notification); gtk_toggle_button_set_active (uiform->apply_recent, setting->ui.apply_recent); // gtk_toggle_button_set_active (uiform->skip_existing, // setting->ui.skip_existing); gtk_toggle_button_set_active (uiform->large_icon, setting->ui.large_icon); #ifdef HAVE_APP_INDICATOR gtk_toggle_button_set_active (uiform->app_indicator, setting->ui.app_indicator); #endif } void ugtk_user_interface_form_get (struct UgtkUserInterfaceForm* uiform, UgtkSetting* setting) { setting->ui.close_to_tray = gtk_toggle_button_get_active (uiform->close_to_tray); setting->ui.exit_confirmation = gtk_toggle_button_get_active (uiform->confirm_exit); setting->ui.delete_confirmation = gtk_toggle_button_get_active (uiform->confirm_delete); setting->ui.show_trayicon = gtk_toggle_button_get_active (uiform->show_trayicon); setting->ui.start_in_tray = gtk_toggle_button_get_active (uiform->start_in_tray); setting->ui.start_in_offline_mode = gtk_toggle_button_get_active (uiform->start_in_offline_mode); setting->ui.start_notification = gtk_toggle_button_get_active (uiform->start_notification); setting->ui.sound_notification = gtk_toggle_button_get_active (uiform->sound_notification); setting->ui.apply_recent = gtk_toggle_button_get_active (uiform->apply_recent); // setting->ui.skip_existing = gtk_toggle_button_get_active (uiform->skip_existing); setting->ui.large_icon = gtk_toggle_button_get_active (uiform->large_icon); #ifdef HAVE_APP_INDICATOR setting->ui.app_indicator = gtk_toggle_button_get_active (uiform->app_indicator); #endif } // ---------------------------------------------------------------------------- // UgtkBandwidthForm // void ugtk_bandwidth_form_init (struct UgtkBandwidthForm* bwform) { GtkWidget* widget; GtkBox* box; GtkBox* vbox; GtkBox* hbox; box = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); bwform->self = (GtkWidget*) box; widget = gtk_label_new (_("These will affect all plug-ins.")); gtk_box_pack_start (box, widget, FALSE, FALSE, 2); widget = gtk_label_new (""); gtk_box_pack_start (box, widget, FALSE, FALSE, 2); // Global speed limit widget = gtk_frame_new (_("Global speed limit")); vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (widget), (GtkWidget*) vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); gtk_box_pack_start (box, widget, FALSE, FALSE, 2); // Max upload speed hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_label_new (_("Max upload speed")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); widget = gtk_label_new (_("KiB/s")); gtk_box_pack_end (hbox, widget, FALSE, FALSE, 2); widget = gtk_spin_button_new_with_range (0.0, 4000000000.0, 5.0); gtk_entry_set_width_chars (GTK_ENTRY (widget), 15); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_end (hbox, widget, FALSE, FALSE, 2); bwform->upload = (GtkSpinButton*) widget; // Max download speed hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_label_new (_("Max download speed")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); widget = gtk_label_new (_("KiB/s")); gtk_box_pack_end (hbox, widget, FALSE, FALSE, 2); widget = gtk_spin_button_new_with_range (0.0, 4000000000.0, 5.0); gtk_entry_set_width_chars (GTK_ENTRY (widget), 15); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_end (hbox, widget, FALSE, FALSE, 2); bwform->download = (GtkSpinButton*) widget; } void ugtk_bandwidth_form_set (struct UgtkBandwidthForm* bwform, UgtkSetting* setting) { gtk_spin_button_set_value (bwform->upload, setting->bandwidth.normal.upload); gtk_spin_button_set_value (bwform->download, setting->bandwidth.normal.download); } void ugtk_bandwidth_form_get (struct UgtkBandwidthForm* bwform, UgtkSetting* setting) { setting->bandwidth.normal.upload = (guint) gtk_spin_button_get_value (bwform->upload); setting->bandwidth.normal.download = (guint) gtk_spin_button_get_value (bwform->download); } // ---------------------------------------------------------------------------- // UgtkCompletionForm // void ugtk_completion_form_init (struct UgtkCompletionForm* csform) { GtkWidget* widget; GtkWidget* entry; GtkBox* vbox; GtkBox* hbox; widget = gtk_frame_new (_("Completion Auto-Actions")); vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (widget), (GtkWidget*) vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); csform->self = widget; hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 1); widget = gtk_label_new (_("Custom command:")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); gtk_box_pack_start (vbox, entry, TRUE, TRUE, 2); csform->command = (GtkEntry*) entry; gtk_box_pack_start (vbox, gtk_label_new (""), FALSE, FALSE, 2); hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 1); widget = gtk_label_new (_("Custom command if error occurred:")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); gtk_box_pack_start (vbox, entry, TRUE, TRUE, 2); csform->on_error = (GtkEntry*) entry; } void ugtk_completion_form_set (struct UgtkCompletionForm* csform, UgtkSetting* setting) { if (setting->completion.command) gtk_entry_set_text (csform->command, setting->completion.command); if (setting->completion.on_error) gtk_entry_set_text (csform->command, setting->completion.on_error); } void ugtk_completion_form_get (struct UgtkCompletionForm* csform, UgtkSetting* setting) { const char* string; ug_free (setting->completion.command); string = gtk_entry_get_text (csform->command); setting->completion.command = (string[0]) ? ug_strdup (string) : NULL; ug_free (setting->completion.on_error); string = gtk_entry_get_text (csform->on_error); setting->completion.on_error = (string[0]) ? ug_strdup (string) : NULL; } // ---------------------------------------------------------------------------- // UgtkAutoSaveForm // static void on_auto_save_toggled (GtkWidget* widget, struct UgtkAutoSaveForm* asform) { gboolean sensitive; sensitive = gtk_toggle_button_get_active (asform->enable); gtk_widget_set_sensitive (asform->interval_label, sensitive); gtk_widget_set_sensitive ((GtkWidget*) asform->interval_spin, sensitive); gtk_widget_set_sensitive (asform->minutes_label, sensitive); } void ugtk_auto_save_form_init (struct UgtkAutoSaveForm* asform) { GtkBox* hbox; GtkWidget* widget; asform->self = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); hbox = (GtkBox*) asform->self; widget = gtk_check_button_new_with_mnemonic (_("_Autosave")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); g_signal_connect (widget, "toggled", G_CALLBACK (on_auto_save_toggled), asform); asform->enable = (GtkToggleButton*) widget; // space widget = gtk_label_new (""); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 30); // auto save interval label widget = gtk_label_new_with_mnemonic (_("_Interval:")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); asform->interval_label = widget; gtk_label_set_mnemonic_widget (GTK_LABEL (asform->interval_label), (GtkWidget*) asform->interval_spin); // auto save interval spin widget = gtk_spin_button_new_with_range (1.0, 120.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); asform->interval_spin = (GtkSpinButton*) widget; // auto save interval unit label widget = gtk_label_new_with_mnemonic (_("minutes")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); asform->minutes_label = widget; } void ugtk_auto_save_form_set (struct UgtkAutoSaveForm* asform, UgtkSetting* setting) { gtk_toggle_button_set_active (asform->enable, setting->auto_save.enable); gtk_spin_button_set_value (asform->interval_spin, (gdouble) setting->auto_save.interval); gtk_toggle_button_toggled (asform->enable); // on_auto_save_toggled ((GtkWidget*) asform->enable, asform); } void ugtk_auto_save_form_get (struct UgtkAutoSaveForm* asform, UgtkSetting* setting) { setting->auto_save.enable = gtk_toggle_button_get_active (asform->enable); setting->auto_save.interval = gtk_spin_button_get_value_as_int (asform->interval_spin); } // ---------------------------------------------------------------------------- // UgtkCommandlineForm // void ugtk_commandline_form_init (struct UgtkCommandlineForm* clform) { GtkWidget* widget; GtkBox* vbox; GtkBox* hbox; // Commandline Settings widget = gtk_frame_new (_("Commandline Settings")); clform->self = widget; vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (widget), (GtkWidget*) vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); // --quiet widget = gtk_check_button_new_with_mnemonic (_("Use '--quiet' by default")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); clform->quiet = (GtkToggleButton*) widget; // --category-index hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_label_new (_("Default category index")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); clform->index_label = widget; widget = gtk_spin_button_new_with_range (0.0, 1000.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); clform->index_spin = (GtkSpinButton*) widget; // hint hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_label_new (" - "); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); widget = gtk_label_new (_("Adding to Nth category if no matched category.")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); } void ugtk_commandline_form_set (struct UgtkCommandlineForm* clform, UgtkSetting* setting) { gtk_toggle_button_set_active (clform->quiet, setting->commandline.quiet); gtk_spin_button_set_value (clform->index_spin, setting->commandline.nth_category); } void ugtk_commandline_form_get (struct UgtkCommandlineForm* clform, UgtkSetting* setting) { setting->commandline.quiet = gtk_toggle_button_get_active (clform->quiet); setting->commandline.nth_category = gtk_spin_button_get_value_as_int (clform->index_spin); } // ---------------------------------------------------------------------------- // UgtkPluginForm // static void on_plugin_launch_toggled (GtkWidget* widget, struct UgtkPluginForm* psform) { gboolean sensitive; sensitive = gtk_toggle_button_get_active (psform->launch); gtk_widget_set_sensitive ((GtkWidget*) psform->local, sensitive); } static void on_order_changed (GtkComboBox* widget, struct UgtkPluginForm* psform) { int index; index = gtk_combo_box_get_active (widget); if (index >= UGTK_PLUGIN_ORDER_ARIA2) gtk_widget_set_sensitive (psform->aria2_opts, TRUE); else gtk_widget_set_sensitive (psform->aria2_opts, FALSE); } void ugtk_plugin_form_init (struct UgtkPluginForm* psform) { PangoContext* context; PangoLayout* layout; int text_height; GtkBox* vbox; GtkBox* hbox; GtkBox* box; GtkWidget* widget; GtkScrolledWindow* scroll; psform->self = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); vbox = (GtkBox*) psform->self; hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, TRUE, 2); widget = gtk_label_new (_("Plug-in matching order:")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); widget = gtk_combo_box_text_new (); psform->order = (GtkComboBoxText*) widget; gtk_combo_box_text_insert_text (psform->order, UGTK_PLUGIN_ORDER_CURL, "curl"); gtk_combo_box_text_insert_text (psform->order, UGTK_PLUGIN_ORDER_ARIA2, "aria2"); gtk_combo_box_text_insert_text (psform->order, UGTK_PLUGIN_ORDER_CURL_ARIA2, "curl + aria2"); gtk_combo_box_text_insert_text (psform->order, UGTK_PLUGIN_ORDER_ARIA2_CURL, "aria2 + curl"); g_signal_connect (psform->order, "changed", G_CALLBACK (on_order_changed), psform); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 4); widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (vbox, widget, TRUE, TRUE, 2); psform->aria2_opts = widget; vbox = (GtkBox*) widget; hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, TRUE, 4); widget = gtk_label_new (_("Aria2 plug-in options")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); gtk_box_pack_start (hbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), TRUE, TRUE, 4); // URI entry hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, TRUE, 2); widget = gtk_label_new (_("URI")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); widget = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_start (hbox, widget, TRUE, TRUE, 4); psform->uri = (GtkEntry*) widget; // Token entry hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, TRUE, 2); widget = gtk_label_new (_("RPC authorization secret token")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); widget = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_start (hbox, widget, TRUE, TRUE, 4); psform->token = (GtkEntry*) widget; // ------------------------------------------------------------------------ // Speed Limits widget = gtk_frame_new (_("Global speed limit for aria2 only")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 4); box = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (widget), (GtkWidget*) box); gtk_container_set_border_width (GTK_CONTAINER (box), 2); // Max upload speed hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (box, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_label_new (_("Max upload speed")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); widget = gtk_label_new (_("KiB/s")); gtk_box_pack_end (hbox, widget, FALSE, FALSE, 2); widget = gtk_spin_button_new_with_range (0.0, 4000000000.0, 5.0); gtk_entry_set_width_chars (GTK_ENTRY (widget), 15); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_end (hbox, widget, FALSE, FALSE, 2); psform->upload = (GtkSpinButton*) widget; // Max download speed hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (box, (GtkWidget*) hbox, FALSE, FALSE, 2); widget = gtk_label_new (_("Max download speed")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); widget = gtk_label_new (_("KiB/s")); gtk_box_pack_end (hbox, widget, FALSE, FALSE, 2); widget = gtk_spin_button_new_with_range (0.0, 4000000000.0, 5.0); gtk_entry_set_width_chars (GTK_ENTRY (widget), 15); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_end (hbox, widget, FALSE, FALSE, 2); psform->download = (GtkSpinButton*) widget; // ------------------------------------------------------------------------ // aria2 works on local device // launch widget = gtk_check_button_new_with_mnemonic (_("_Launch aria2 on startup")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 2); g_signal_connect (widget, "toggled", G_CALLBACK (on_plugin_launch_toggled), psform); psform->launch = (GtkToggleButton*) widget; // shutdown widget = gtk_check_button_new_with_mnemonic (_("_Shutdown aria2 on exit")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 2); psform->shutdown = (GtkToggleButton*) widget; // ------------------------------------------------------------------------ // Local options widget = gtk_frame_new (_("Launch aria2 on local device")); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 4); psform->local = widget; box = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (widget), (GtkWidget*) box); gtk_container_set_border_width (GTK_CONTAINER (box), 2); // Path hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (box, (GtkWidget*) hbox, FALSE, TRUE, 4); widget = gtk_label_new (_("Path")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); widget = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_box_pack_start (hbox, widget, TRUE, TRUE, 2); psform->path = (GtkEntry*) widget; // gtk_box_pack_start (box, gtk_label_new (""), FALSE, FALSE, 0); // Arguments // get text height --- begin --- context = gtk_widget_get_pango_context (widget); layout = pango_layout_new (context); pango_layout_set_text (layout, "joIN", -1); pango_layout_get_pixel_size (layout, NULL, &text_height); g_object_unref (layout); // get text height --- end --- hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (box, (GtkWidget*) hbox, FALSE, TRUE, 2); widget = gtk_label_new (_("Arguments")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); widget = gtk_label_new (" - "); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); // Arguments - hint widget = gtk_label_new (_("You must restart uGet after modifying it.")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); // Arguments - Scrolled Window scroll = (GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (scroll, GTK_SHADOW_IN); gtk_widget_set_size_request (GTK_WIDGET (scroll), 100, text_height * 3); gtk_box_pack_start (box, GTK_WIDGET (scroll), FALSE, TRUE, 2); // Arguments - text view psform->args_buffer = gtk_text_buffer_new (NULL); psform->args = gtk_text_view_new_with_buffer (psform->args_buffer); g_object_unref (psform->args_buffer); gtk_text_view_set_wrap_mode ((GtkTextView*) psform->args, GTK_WRAP_CHAR); gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (psform->args)); // ------------------------------------------------------------------------ on_plugin_launch_toggled ((GtkWidget*) psform->launch, psform); gtk_widget_show (psform->self); } void ugtk_plugin_form_set (struct UgtkPluginForm* psform, UgtkSetting* setting) { gtk_combo_box_set_active ((GtkComboBox*) psform->order, setting->plugin_order); gtk_toggle_button_set_active (psform->launch, setting->aria2.launch); gtk_toggle_button_set_active (psform->shutdown, setting->aria2.shutdown); if (setting->aria2.uri) gtk_entry_set_text (psform->uri, setting->aria2.uri); if (setting->aria2.token) gtk_entry_set_text (psform->token, setting->aria2.token); if (setting->aria2.path) gtk_entry_set_text (psform->path, setting->aria2.path); // if (setting->aria2.args) // gtk_entry_set_text (psform->args, setting->aria2.args); if (setting->aria2.args) gtk_text_buffer_set_text (psform->args_buffer, setting->aria2.args, -1); gtk_spin_button_set_value (psform->upload, setting->aria2.limit.upload); gtk_spin_button_set_value (psform->download, setting->aria2.limit.download); } void ugtk_plugin_form_get (struct UgtkPluginForm* psform, UgtkSetting* setting) { GtkTextIter iter1; GtkTextIter iter2; const char* token; setting->plugin_order = gtk_combo_box_get_active ((GtkComboBox*) psform->order); setting->aria2.launch = gtk_toggle_button_get_active (psform->launch); setting->aria2.shutdown = gtk_toggle_button_get_active (psform->shutdown); ug_free (setting->aria2.uri); ug_free (setting->aria2.token); ug_free (setting->aria2.path); ug_free (setting->aria2.args); setting->aria2.uri = ug_strdup (gtk_entry_get_text (psform->uri)); token = gtk_entry_get_text (psform->token); if (token[0] == 0) setting->aria2.token = NULL; else setting->aria2.token = ug_strdup (token); setting->aria2.path = ug_strdup (gtk_entry_get_text (psform->path)); // setting->aria2.args = ug_strdup (gtk_entry_get_text (psform->args)); gtk_text_buffer_get_start_iter (psform->args_buffer, &iter1); gtk_text_buffer_get_end_iter (psform->args_buffer, &iter2); setting->aria2.args = gtk_text_buffer_get_text (psform->args_buffer, &iter1, &iter2, FALSE); ug_str_remove_crlf (setting->aria2.args, setting->aria2.args); setting->aria2.limit.upload = (guint) gtk_spin_button_get_value (psform->upload); setting->aria2.limit.download = (guint) gtk_spin_button_get_value (psform->download); } // ---------------------------------------------------------------------------- // UgtkMediaWebsiteForm // static void on_match_mode_changed (GtkComboBox* widget, struct UgtkMediaWebsiteForm* mwform) { gboolean sensitive; int index; index = gtk_combo_box_get_active (widget); if (index == UGET_MEDIA_MATCH_0) sensitive = FALSE; else sensitive = TRUE; gtk_widget_set_sensitive ((GtkWidget*) mwform->quality, sensitive); gtk_widget_set_sensitive ((GtkWidget*) mwform->type, sensitive); } void ugtk_media_website_form_init (struct UgtkMediaWebsiteForm* mwform) { GtkBox* vbox; GtkBox* hbox; GtkWidget* widget; GtkGrid* grid; mwform->self = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); vbox = (GtkBox*) mwform->self; hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, TRUE, 2); widget = gtk_label_new (_("Media matching mode:")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); widget = gtk_combo_box_text_new (); mwform->match_mode = (GtkComboBoxText*) widget; gtk_combo_box_text_insert_text (mwform->match_mode, UGET_MEDIA_MATCH_0, _("Don't match")); gtk_combo_box_text_insert_text (mwform->match_mode, UGET_MEDIA_MATCH_1, _("Match 1 condition")); gtk_combo_box_text_insert_text (mwform->match_mode, UGET_MEDIA_MATCH_2, _("Match 2 condition")); gtk_combo_box_text_insert_text (mwform->match_mode, UGET_MEDIA_MATCH_NEAR, _("Near quality")); g_signal_connect (mwform->match_mode, "changed", G_CALLBACK (on_match_mode_changed), mwform); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 4); hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, TRUE, 4); widget = gtk_label_new (_("Match conditions")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 0); gtk_box_pack_start (hbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), TRUE, TRUE, 4); // conditions grid = (GtkGrid*) gtk_grid_new (); gtk_box_pack_start (vbox, (GtkWidget*) grid, FALSE, FALSE, 0); // Quality widget = gtk_label_new (_("Quality:")); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (grid, widget, 0, 0, 1, 1); widget = gtk_combo_box_text_new (); mwform->quality = (GtkComboBoxText*) widget; gtk_combo_box_text_insert_text (mwform->quality, UGET_MEDIA_QUALITY_240P, "240p"); gtk_combo_box_text_insert_text (mwform->quality, UGET_MEDIA_QUALITY_360P, "360p"); gtk_combo_box_text_insert_text (mwform->quality, UGET_MEDIA_QUALITY_480P, "480p"); gtk_combo_box_text_insert_text (mwform->quality, UGET_MEDIA_QUALITY_720P, "720p"); gtk_combo_box_text_insert_text (mwform->quality, UGET_MEDIA_QUALITY_1080P, "1080p"); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (grid, widget, 1, 0, 1, 1); // Type widget = gtk_label_new (_("Type:")); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (grid, widget, 0, 1, 1, 1); widget = gtk_combo_box_text_new (); mwform->type = (GtkComboBoxText*) widget; gtk_combo_box_text_insert_text (mwform->type, UGET_MEDIA_TYPE_MP4, "mp4"); gtk_combo_box_text_insert_text (mwform->type, UGET_MEDIA_TYPE_WEBM, "webm"); gtk_combo_box_text_insert_text (mwform->type, UGET_MEDIA_TYPE_3GPP, "3gpp"); gtk_combo_box_text_insert_text (mwform->type, UGET_MEDIA_TYPE_FLV, "flv"); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (grid, widget, 1, 1, 1, 1); gtk_widget_show (mwform->self); } void ugtk_media_website_form_set (struct UgtkMediaWebsiteForm* mwform, UgtkSetting* setting) { int nth_quality, nth_type; nth_quality = setting->media.quality - UGET_MEDIA_QUALITY_240P; nth_type = setting->media.type - UGET_MEDIA_TYPE_MP4; gtk_combo_box_set_active ((GtkComboBox*) mwform->match_mode, setting->media.match_mode); gtk_combo_box_set_active ((GtkComboBox*) mwform->quality, nth_quality); gtk_combo_box_set_active ((GtkComboBox*) mwform->type, nth_type); } void ugtk_media_website_form_get (struct UgtkMediaWebsiteForm* mwform, UgtkSetting* setting) { setting->media.match_mode = gtk_combo_box_get_active ((GtkComboBox*) mwform->match_mode); setting->media.quality = gtk_combo_box_get_active ((GtkComboBox*) mwform->quality); setting->media.type = gtk_combo_box_get_active ((GtkComboBox*) mwform->type); setting->media.quality += UGET_MEDIA_QUALITY_240P; setting->media.type += UGET_MEDIA_TYPE_MP4; } uget-2.2.3/ui-gtk/UgtkAboutDialog.h0000664000175000017500000000434313602733704014014 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_ABOUT_DIALOG_H #define UGTK_ABOUT_DIALOG_H #include #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif typedef struct UgtkAboutDialog UgtkAboutDialog; struct UgtkAboutDialog { GtkDialog* self; // UgtkApp* app; GdkPixbuf* pixbuf; GtkWidget* scrolled; GtkTextView* textview; GtkTextBuffer* textbuf; }; UgtkAboutDialog* ugtk_about_dialog_new (GtkWindow* parent); void ugtk_about_dialog_free (UgtkAboutDialog* adialog); void ugtk_about_dialog_set_info (UgtkAboutDialog* adialog, const gchar* text); void ugtk_about_dialog_run (UgtkAboutDialog* adialog); #endif // UGTK_ABOUT_DIALOG_H uget-2.2.3/ui-gtk/UgtkScheduleForm.c0000664000175000017500000003603513602733704014200 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #define COLOR_DISABLE_R 0.5 #define COLOR_DISABLE_G 0.5 #define COLOR_DISABLE_B 0.5 static const gdouble colors[UGTK_SCHEDULE_N_STATE][3] = { {1.0, 1.0, 1.0}, // UGTK_SCHEDULE_TURN_OFF {1.0, 0.752, 0.752}, // UGTK_SCHEDULE_UPLOAD_ONLY - reserve {0.552, 0.807, 0.552}, // UGTK_SCHEDULE_LIMITED_SPEED // {0.0, 0.658, 0.0}, // UGTK_SCHEDULE_NORMAL {0.0, 0.758, 0.0}, // UGTK_SCHEDULE_NORMAL }; static const gchar* week_days[7] = { N_("Mon"), N_("Tue"), N_("Wed"), N_("Thu"), N_("Fri"), N_("Sat"), N_("Sun"), }; // UgtkGrid static struct { int width; int height; int width_and_line; int height_and_line; int width_all; int height_all; } UgtkGrid; static void ugtk_grid_global_init (int width, int height); static GtkWidget* ugtk_grid_new (const gdouble* rgb_array); static gboolean ugtk_grid_draw (GtkWidget* widget, cairo_t* cr, const gdouble* rgb_array); // signal handler static void on_enable_toggled (GtkToggleButton* togglebutton, struct UgtkScheduleForm* sform); static gboolean on_draw_callback (GtkWidget* widget, cairo_t* cr, struct UgtkScheduleForm* sform); static gboolean on_button_press_event (GtkWidget* widget, GdkEventMotion* event, struct UgtkScheduleForm* sform); static gboolean on_motion_notify_event (GtkWidget* widget, GdkEventMotion* event, struct UgtkScheduleForm* sform); static gboolean on_leave_notify_event (GtkWidget* menu, GdkEventCrossing* event, struct UgtkScheduleForm* sform); void ugtk_schedule_form_init (struct UgtkScheduleForm* sform) { PangoContext* context; PangoLayout* layout; GtkWidget* widget; GtkGrid* caption; GtkBox* hbox; GtkBox* vbox; int text_width, text_height; sform->self = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); vbox = (GtkBox*) sform->self; // Enable Scheduler hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (vbox, (GtkWidget*)hbox, FALSE, FALSE, 2); widget = gtk_check_button_new_with_mnemonic (_("_Enable Scheduler")); gtk_box_pack_start (hbox, widget, FALSE, FALSE, 2); gtk_box_pack_start (hbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), TRUE, TRUE, 2); g_signal_connect (widget, "toggled", G_CALLBACK (on_enable_toggled), sform); sform->enable = widget; // initialize UgtkGrid context = gtk_widget_get_pango_context (widget); layout = pango_layout_new (context); pango_layout_set_text (layout, gettext (week_days[0]), -1); pango_layout_get_pixel_size (layout, &text_width, &text_height); g_object_unref (layout); ugtk_grid_global_init (text_height, text_height + 2); // drawing area widget = gtk_drawing_area_new (); gtk_box_pack_start (vbox, widget, FALSE, FALSE, 2); // gtk_widget_set_has_window (widget, FALSE); gtk_widget_set_size_request (widget, UgtkGrid.width_all + text_width + 32, UgtkGrid.height_all); gtk_widget_add_events (widget, GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); g_signal_connect (widget, "draw", G_CALLBACK (on_draw_callback), sform); g_signal_connect (widget, "button-press-event", G_CALLBACK (on_button_press_event), sform); g_signal_connect (widget, "motion-notify-event", G_CALLBACK (on_motion_notify_event), sform); g_signal_connect (widget, "leave-notify-event", G_CALLBACK (on_leave_notify_event), sform); sform->drawing = widget; // grid for tips, SpinButton sform->caption = gtk_grid_new (); gtk_box_pack_start (vbox, sform->caption, FALSE, FALSE, 2); // gtk_container_set_border_width (GTK_CONTAINER (sform->caption), 10); caption = (GtkGrid*) sform->caption; // time tips widget = gtk_label_new (""); gtk_misc_set_alignment (GTK_MISC (widget), (gfloat)0.4, (gfloat)0.5); // left, center g_object_set (widget, "margin", 2, NULL); gtk_grid_attach (caption, widget, 0, 0, 5, 1); sform->time_tips = GTK_LABEL (widget); // Turn off widget = ugtk_grid_new (colors[UGTK_SCHEDULE_TURN_OFF]); g_object_set (widget, "margin", 3, NULL); gtk_grid_attach (caption, widget, 0, 1, 1, 1); // Turn off - label widget = gtk_label_new (_("Turn off")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin", 2, NULL); gtk_grid_attach (caption, widget, 1, 1, 1, 1); // Turn off - help label widget = gtk_label_new (_("- stop all task")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin", 2, NULL); gtk_grid_attach (caption, widget, 2, 1, 2, 1); // Normal widget = ugtk_grid_new (colors[UGTK_SCHEDULE_NORMAL]); g_object_set (widget, "margin", 3, NULL); gtk_grid_attach (caption, widget, 0, 2, 1, 1); // Normal - label widget = gtk_label_new (_("Normal")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin", 2, NULL); gtk_grid_attach (caption, widget, 1, 2, 1, 1); // Normal - help label widget = gtk_label_new (_("- run task normally")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin", 2, NULL); gtk_grid_attach (caption, widget, 2, 2, 2, 1); /* // Speed limit widget = ugtk_grid_new (colors[UGTK_SCHEDULE_LIMITED_SPEED]); g_object_set (widget, "margin", 3, NULL); gtk_grid_attach (caption, widget, 0, 3, 1, 1); // Speed limit - label widget = gtk_label_new (_("Limited speed")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin", 2, NULL); gtk_grid_attach (caption, widget, 1, 3, 1, 1); // Speed limit - SpinButton widget = gtk_spin_button_new_with_range (5, 99999999, 1); g_object_set (widget, "margin", 2, NULL); gtk_grid_attach (caption, widget, 2, 3, 1, 1); sform->spin_speed = (GtkSpinButton*) widget; // Speed limit - KiB/s label widget = gtk_label_new (_("KiB/s")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin", 2, NULL); gtk_grid_attach (caption, widget, 3, 3, 1, 1); */ // change sensitive state gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sform->enable), FALSE); gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (sform->enable)); gtk_widget_show_all (sform->self); } void ugtk_schedule_form_get (struct UgtkScheduleForm* sform, UgtkSetting* setting) { // gint value; memcpy (setting->scheduler.state.at, sform->state, sizeof (sform->state)); setting->scheduler.enable = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (sform->enable)); // value = gtk_spin_button_get_value_as_int (sform->spin_speed); // setting->scheduler.speed_limit = value * 1024; } void ugtk_schedule_form_set (struct UgtkScheduleForm* sform, UgtkSetting* setting) { // gint value; memcpy (sform->state, setting->scheduler.state.at, sizeof (sform->state)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sform->enable), setting->scheduler.enable); gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (sform->enable)); // value = setting->scheduler.speed_limit / 1024; // gtk_spin_button_set_value (sform->spin_speed, value); } // ---------------------------------------------------------------------------- // signal handler // static void on_enable_toggled (GtkToggleButton* togglebutton, struct UgtkScheduleForm* sform) { gboolean active; active = gtk_toggle_button_get_active (togglebutton); gtk_widget_set_sensitive (sform->drawing, active); gtk_widget_set_sensitive (sform->caption, active); } static gboolean on_draw_callback (GtkWidget* widget, cairo_t* cr, struct UgtkScheduleForm* sform) { gboolean sensitive; gint y, x; gdouble cy, cx, ox; PangoContext* context; PangoLayout* layout; PangoFontDescription* desc; cairo_set_line_width (cr, 1); sensitive = gtk_widget_get_sensitive (widget); // setup Pango context = gtk_widget_get_pango_context (widget); desc = pango_context_get_font_description (context); layout = pango_cairo_create_layout (cr); pango_layout_set_font_description (layout, desc); // week days // ox = x offset for (ox = 0, cy = 0.5, y = 0; y < 7; y++, cy+=UgtkGrid.height_and_line) { cairo_move_to (cr, 1, cy); pango_layout_set_text (layout, gettext (week_days[y]), -1); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); // pango_layout_get_size (layout, &x, NULL); // x /= PANGO_SCALE; pango_layout_get_pixel_size (layout, &x, NULL); if (x + 4 > ox) ox = x + 4; } g_object_unref (layout); if (sform->drawing_offset == 0) sform->drawing_offset = ox; // draw grid columns for (cx = 0.5; cx <= UgtkGrid.width_all; cx += UgtkGrid.width_and_line) { cairo_move_to (cr, ox + cx, 0 + 0.5); cairo_line_to (cr, ox + cx, UgtkGrid.height_all - 1.0 + 0.5); } // draw grid rows for (cy = 0.5; cy <= UgtkGrid.height_all; cy += UgtkGrid.height_and_line) { cairo_move_to (cr, ox + 0.5, cy); cairo_line_to (cr, ox + UgtkGrid.width_all - 1.0 + 0.5, cy); } cairo_stroke (cr); // fill grid if (sensitive == FALSE) { cairo_set_source_rgb (cr, COLOR_DISABLE_R, COLOR_DISABLE_G, COLOR_DISABLE_B); } for (cy = 1.5, y = 0; y < 7; y++, cy+=UgtkGrid.height_and_line) { for (cx = 1.5+ox, x = 0; x < 24; x++, cx+=UgtkGrid.width_and_line) { if (sensitive) { cairo_set_source_rgb (cr, colors [sform->state[y][x]][0], colors [sform->state[y][x]][1], colors [sform->state[y][x]][2]); } cairo_rectangle (cr, cx, cy, UgtkGrid.width - 0.5, UgtkGrid.height - 0.5); cairo_fill (cr); } } return FALSE; } static gboolean on_button_press_event (GtkWidget *widget, GdkEventMotion *event, struct UgtkScheduleForm* sform) { gint x, y; cairo_t* cr; UgtkScheduleState state; x = (event->x - sform->drawing_offset) / UgtkGrid.width_and_line; y = event->y / UgtkGrid.height_and_line; if (x < 0 || y < 0 || x >= 24 || y >= 7) return FALSE; state = (sform->state[y][x] == UGTK_SCHEDULE_TURN_OFF) ? UGTK_SCHEDULE_NORMAL : UGTK_SCHEDULE_TURN_OFF; // state = sform->state[y][x] + 1; // if (state == UGTK_SCHEDULE_UPLOAD_ONLY) // state++; // if (state > UGTK_SCHEDULE_NORMAL) // state = UGTK_SCHEDULE_TURN_OFF; sform->state[y][x] = state; sform->last_state = state; // cairo cr = gdk_cairo_create (gtk_widget_get_window (widget)); cairo_set_source_rgb (cr, colors [state][0], colors [state][1], colors [state][2]); cairo_rectangle (cr, (gdouble)x * UgtkGrid.width_and_line + 1.0 + 0.5 + sform->drawing_offset, (gdouble)y * UgtkGrid.height_and_line + 1.0 + 0.5, UgtkGrid.width - 0.5, UgtkGrid.height - 0.5); cairo_fill (cr); cairo_destroy (cr); return TRUE; } static gboolean on_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, struct UgtkScheduleForm* sform) { gint x, y; gchar* string; cairo_t* cr; GdkWindow* gdkwin; GdkModifierType mod; UgtkScheduleState state; gdkwin = gtk_widget_get_window (widget); gdk_window_get_device_position (gdkwin, event->device, &x, &y, &mod); x -= sform->drawing_offset; x /= UgtkGrid.width_and_line; y /= UgtkGrid.height_and_line; if (x < 0 || y < 0 || x >= 24 || y >= 7) { // clear time_tips gtk_label_set_text (sform->time_tips, ""); return FALSE; } // update time_tips string = g_strdup_printf ("%s, %.2d:00 - %.2d:59", gettext (week_days[y]), x, x); gtk_label_set_text (sform->time_tips, string); g_free (string); // if no button press if ((mod & GDK_BUTTON1_MASK) == 0) return FALSE; state = sform->last_state; sform->state[y][x] = state; // cairo cr = gdk_cairo_create (gdkwin); cairo_rectangle (cr, sform->drawing_offset, 0, UgtkGrid.width_all, UgtkGrid.height_all); cairo_clip (cr); cairo_set_source_rgb (cr, colors [state][0], colors [state][1], colors [state][2]); cairo_rectangle (cr, (gdouble)x * UgtkGrid.width_and_line + 1.0 + 0.5 + sform->drawing_offset, (gdouble)y * UgtkGrid.height_and_line + 1.0 + 0.5, UgtkGrid.width - 0.5, UgtkGrid.height - 0.5); cairo_fill (cr); cairo_destroy (cr); return TRUE; } static gboolean on_leave_notify_event (GtkWidget* menu, GdkEventCrossing* event, struct UgtkScheduleForm* sform) { gtk_label_set_text (sform->time_tips, ""); return TRUE; } // ---------------------------------------------------------------------------- // UgtkGrid // static void ugtk_grid_global_init (int width, int height) { UgtkGrid.width = width; UgtkGrid.height = height; UgtkGrid.width_and_line = UgtkGrid.width + 1; UgtkGrid.height_and_line = UgtkGrid.height + 1; UgtkGrid.width_all = UgtkGrid.width_and_line * 24 + 1; UgtkGrid.height_all = UgtkGrid.height_and_line * 7 + 1; } static GtkWidget* ugtk_grid_new (const gdouble* rgb_array) { GtkWidget* widget; widget = gtk_drawing_area_new (); gtk_widget_set_size_request (widget, UgtkGrid.width + 2, UgtkGrid.height + 2); gtk_widget_add_events (widget, GDK_POINTER_MOTION_MASK); g_signal_connect (widget, "draw", G_CALLBACK (ugtk_grid_draw), (gpointer) rgb_array); return widget; } static gboolean ugtk_grid_draw (GtkWidget* widget, cairo_t* cr, const gdouble* rgb_array) { GtkAllocation allocation; gdouble x, y, width, height; gtk_widget_get_allocation (widget, &allocation); x = 0.5; y = 0.5; width = (gdouble) (allocation.width - 1); height = (gdouble) (allocation.height - 1); cairo_set_line_width (cr, 1); cairo_rectangle (cr, x, y, width, height); cairo_stroke (cr); if (gtk_widget_get_sensitive (widget)) { cairo_set_source_rgb (cr, rgb_array [0], rgb_array [1], rgb_array [2]); } else { cairo_set_source_rgb (cr, COLOR_DISABLE_R, COLOR_DISABLE_G, COLOR_DISABLE_B); } cairo_rectangle (cr, x + 1.0, y + 1.0, width - 2.0, height - 2.0); cairo_fill (cr); return FALSE; } uget-2.2.3/ui-gtk/UgtkScheduleForm.h0000664000175000017500000000450613602733704014203 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_SCHEDULE_FORM_H #define UGTK_SCHEDULE_FORM_H #include #include #ifdef __cplusplus extern "C" { #endif struct UgtkScheduleForm { GtkWidget* self; GtkWidget* enable; GtkWidget* drawing; guint drawing_offset; GtkWidget* caption; GtkLabel* time_tips; GtkSpinButton* spin_speed; int state[7][24]; // 1 week, 7 days, 24 hours UgtkScheduleState last_state; }; void ugtk_schedule_form_init (struct UgtkScheduleForm* sform); void ugtk_schedule_form_get (struct UgtkScheduleForm* sform, UgtkSetting* setting); void ugtk_schedule_form_set (struct UgtkScheduleForm* sform, UgtkSetting* setting); #ifdef __cplusplus } #endif #endif // End of UG_SCHEDULE_FORM_H uget-2.2.3/ui-gtk/UgtkProxyForm.c0000664000175000017500000004054113602733704013562 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include static void ugtk_proxy_form_std_init (UgtkProxyForm* pform); // signal handler static void on_type_changed (GtkComboBox* widget, UgtkProxyForm* pform); static void on_entry_std_changed (GtkEditable* editable, UgtkProxyForm* pform); #ifdef HAVE_LIBPWMD static void ugtk_proxy_form_pwmd_init (struct UgtkProxyFormPwmd* pfp, UgtkProxyForm* pform); static void on_entry_pwmd_changed (GtkEditable* editable, UgtkProxyForm* pform); #endif void ugtk_proxy_form_init (UgtkProxyForm* pform) { GtkWidget* vbox; GtkWidget* hbox; GtkWidget* widget; pform->changed.enable = TRUE; pform->changed.type = FALSE; // proxy type label & combo box widget = gtk_label_new (_("Proxy:")); pform->type = gtk_combo_box_text_new (); gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (pform->type), UGET_PROXY_NONE, _("Don't use")); gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (pform->type), UGET_PROXY_DEFAULT, _("Default")); gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (pform->type), UGET_PROXY_HTTP, "HTTP"); gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (pform->type), UGET_PROXY_SOCKS4, "SOCKS v4"); gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (pform->type), UGET_PROXY_SOCKS5, "SOCKS v5"); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 1); gtk_box_pack_start (GTK_BOX (hbox), pform->type, FALSE, FALSE, 2); // gtk_box_pack_start (GTK_BOX (hbox), // gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), TRUE, TRUE, 2); g_signal_connect (pform->type, "changed", G_CALLBACK (on_type_changed), pform); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); ugtk_proxy_form_std_init (pform); gtk_box_pack_end (GTK_BOX (vbox), pform->std, TRUE, TRUE, 0); #ifdef HAVE_LIBPWMD gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (pform->type), UGET_PROXY_PWMD, "PWMD"); ugtk_proxy_form_pwmd_init (&pform->pwmd, pform); gtk_box_pack_end (GTK_BOX (vbox), pform->pwmd.self, TRUE, TRUE, 0); #endif // HAVE_LIBPWMD // gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); widget = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME (widget), hbox); gtk_container_add (GTK_CONTAINER (widget), (GtkWidget*) vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); pform->self = widget; gtk_widget_show_all (pform->self); } static void ugtk_proxy_form_std_init (UgtkProxyForm* pform) { GtkGrid* grid; GtkWidget* widget; GtkWidget* hbox; pform->changed.host = FALSE; pform->changed.port = FALSE; pform->changed.user = FALSE; pform->changed.password = FALSE; pform->std = gtk_grid_new (); grid = (GtkGrid*) pform->std; // host label & entry widget = gtk_label_new_with_mnemonic (_("Host:")); pform->host = gtk_entry_new (); gtk_entry_set_width_chars (GTK_ENTRY (pform->host), 8); gtk_entry_set_activates_default (GTK_ENTRY (pform->host), TRUE); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), pform->host); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); g_object_set (pform->host, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 0, 0, 1, 1); gtk_grid_attach (grid, pform->host, 1, 0, 1, 1); // port label & entry widget = gtk_label_new_with_mnemonic (_("Port:")); pform->port = gtk_spin_button_new_with_range (0.0, 65535.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (pform->port), TRUE); // gtk_entry_set_width_chars (GTK_ENTRY (pform->port), 5); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), pform->port); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (hbox), pform->port, FALSE, FALSE, 0); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); g_object_set (hbox, "margin", 1, NULL); gtk_grid_attach (grid, widget, 0, 1, 1, 1); gtk_grid_attach (grid, hbox, 1, 1, 1, 1); // center separator widget = gtk_separator_new (GTK_ORIENTATION_VERTICAL); g_object_set (widget, "margin", 1, NULL); gtk_grid_attach (grid, widget, 2, 0, 1, 2); // user label & entry widget = gtk_label_new_with_mnemonic (_("User:")); pform->user = gtk_entry_new (); gtk_entry_set_width_chars (GTK_ENTRY (pform->user), 7); gtk_entry_set_activates_default (GTK_ENTRY (pform->user), TRUE); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), pform->user); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); g_object_set (pform->user, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 3, 0, 1, 1); gtk_grid_attach (grid, pform->user, 4, 0, 1, 1); // password label & entry widget = gtk_label_new_with_mnemonic (_("Password:")); pform->password = gtk_entry_new (); gtk_entry_set_visibility (GTK_ENTRY (pform->password), FALSE); gtk_entry_set_width_chars (GTK_ENTRY (pform->password), 7); gtk_entry_set_activates_default (GTK_ENTRY (pform->password), TRUE); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), pform->password); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); g_object_set (pform->password, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 3, 1, 1, 1); gtk_grid_attach (grid, pform->password, 4, 1, 1, 1); g_signal_connect (GTK_EDITABLE (pform->user), "changed", G_CALLBACK (on_entry_std_changed), pform); g_signal_connect (GTK_EDITABLE (pform->password), "changed", G_CALLBACK (on_entry_std_changed), pform); g_signal_connect (GTK_EDITABLE (pform->host), "changed", G_CALLBACK (on_entry_std_changed), pform); g_signal_connect (GTK_EDITABLE (pform->port), "changed", G_CALLBACK (on_entry_std_changed), pform); gtk_widget_show_all (pform->std); } void ugtk_proxy_form_get (UgtkProxyForm* pform, UgInfo* node_info) { UgetProxy* proxy; gint index; const gchar* text; index = gtk_combo_box_get_active ((GtkComboBox*) pform->type); proxy = ug_info_realloc (node_info, UgetProxyInfo); proxy->type = index; // user text = gtk_entry_get_text ((GtkEntry*)pform->user); ug_free (proxy->user); proxy->user = (*text) ? ug_strdup (text) : NULL; // password text = gtk_entry_get_text ((GtkEntry*)pform->password); ug_free (proxy->password); proxy->password = (*text) ? ug_strdup (text) : NULL; // host text = gtk_entry_get_text ((GtkEntry*)pform->host); ug_free (proxy->host); proxy->host = (*text) ? ug_strdup (text) : NULL; proxy->port = gtk_spin_button_get_value_as_int ((GtkSpinButton*) pform->port); #ifdef HAVE_LIBPWMD ug_free (proxy->pwmd.socket); text = gtk_entry_get_text ((GtkEntry*)pform->pwmd.socket); proxy->pwmd.socket = (*text) ? ug_strdup (text) : NULL; ug_free (proxy->pwmd.socket_args); text = gtk_entry_get_text ((GtkEntry*)pform->pwmd.socket_args); proxy->pwmd.socket_args = (*text) ? ug_strdup (text) : NULL; ug_free (proxy->pwmd.file); text = gtk_entry_get_text ((GtkEntry*)pform->pwmd.file); proxy->pwmd.file = (*text) ? ug_strdup (text) : NULL; ug_free (proxy->pwmd.element); text = gtk_entry_get_text ((GtkEntry*)pform->pwmd.element); proxy->pwmd.element = (*text) ? ug_strdup (text) : NULL; #endif // HAVE_LIBPWMD } void ugtk_proxy_form_set (UgtkProxyForm* pform, UgInfo* node_info, gboolean keep_changed) { UgetProxy* proxy; proxy = ug_info_get (node_info, UgetProxyInfo); // if no proxy data if (proxy == NULL) { pform->changed.enable = FALSE; // disable changed flags if (keep_changed == FALSE || pform->changed.type == FALSE) gtk_spin_button_set_value ((GtkSpinButton*) pform->port, 80); if (keep_changed == FALSE || pform->changed.port == FALSE) gtk_combo_box_set_active ((GtkComboBox*) pform->type, UGET_PROXY_NONE); pform->changed.enable = TRUE; // enable changed flags return; } // disable changed flags pform->changed.enable = FALSE; // set changed flags if (keep_changed == FALSE) { pform->changed.type = proxy->keeping.type; pform->changed.host = proxy->keeping.host; pform->changed.port = proxy->keeping.port; pform->changed.user = proxy->keeping.user; pform->changed.password = proxy->keeping.password; } // Type if (keep_changed == FALSE || pform->changed.type == FALSE) gtk_combo_box_set_active ((GtkComboBox*) pform->type, proxy->type); // User if (keep_changed == FALSE || pform->changed.user == FALSE) { gtk_entry_set_text ((GtkEntry*) pform->user, (proxy->user) ? proxy->user : ""); } // Password if (keep_changed == FALSE || pform->changed.password == FALSE) { gtk_entry_set_text ((GtkEntry*) pform->password, (proxy->password) ? proxy->password : ""); } // Host if (keep_changed == FALSE || pform->changed.host == FALSE) { gtk_entry_set_text ((GtkEntry*) pform->host, (proxy->host) ? proxy->host : ""); } // Port if (keep_changed == FALSE || pform->changed.port == FALSE) gtk_spin_button_set_value ((GtkSpinButton*) pform->port, proxy->port); #ifdef HAVE_LIBPWMD if (keep_changed == FALSE) { pform->pwmd.changed.socket = proxy->pwmd.keeping.socket; pform->pwmd.changed.socket_args = proxy->pwmd.keeping.socket_args; pform->pwmd.changed.file = proxy->pwmd.keeping.file; pform->pwmd.changed.element = proxy->pwmd.keeping.element; } if (keep_changed == FALSE || pform->pwmd.changed.socket == FALSE) { gtk_entry_set_text ((GtkEntry*) pform->pwmd.socket, (proxy->pwmd.socket) ? proxy->pwmd.socket: ""); } if (keep_changed == FALSE || pform->pwmd.changed.socket_args == FALSE) { gtk_entry_set_text ((GtkEntry*) pform->pwmd.socket_args, (proxy->pwmd.socket_args) ? proxy->pwmd.socket_args: ""); } if (keep_changed == FALSE || pform->pwmd.changed.file == FALSE) { gtk_entry_set_text ((GtkEntry*) pform->pwmd.file, (proxy->pwmd.file) ? proxy->pwmd.file: ""); } if (keep_changed == FALSE || pform->pwmd.changed.element == FALSE) { gtk_entry_set_text ((GtkEntry*) pform->pwmd.element, (proxy->pwmd.element) ? proxy->pwmd.element: ""); } #endif // HAVE_LIBPWMD // enable changed flags pform->changed.enable = TRUE; } //------------------------------------------------------------------- // signal static void on_type_changed (GtkComboBox* widget, UgtkProxyForm* pform) { gint index; gboolean sensitive; if (pform->changed.enable) pform->changed.type = TRUE; index = gtk_combo_box_get_active (widget); if (index == UGET_PROXY_NONE) sensitive = FALSE; else sensitive = TRUE; gtk_widget_set_sensitive (pform->std, sensitive); #ifdef HAVE_LIBPWMD gtk_widget_set_sensitive (pform->pwmd.self, sensitive); if (index == UGET_PROXY_PWMD) { gtk_widget_set_visible (pform->std, FALSE); gtk_widget_set_visible (pform->pwmd.self, TRUE); } else { gtk_widget_set_visible (pform->pwmd.self, FALSE); gtk_widget_set_visible (pform->std, TRUE); } #endif // HAVE_LIBPWMD } static void on_entry_std_changed (GtkEditable* editable, UgtkProxyForm* pform) { if (pform->changed.enable) { if (editable == GTK_EDITABLE (pform->host)) pform->changed.host = TRUE; else if (editable == GTK_EDITABLE (pform->port)) pform->changed.port = TRUE; else if (editable == GTK_EDITABLE (pform->user)) pform->changed.user = TRUE; else if (editable == GTK_EDITABLE (pform->password)) pform->changed.password = TRUE; } } // ---------------------------------------------------------------------------- // PWMD // #ifdef HAVE_LIBPWMD static void ugtk_proxy_form_pwmd_init (struct UgtkProxyFormPwmd* pfp, UgtkProxyForm* pform) { GtkGrid* grid; GtkWidget* widget; pfp->self = gtk_grid_new (); grid = (GtkGrid*) pfp->self; widget = gtk_label_new_with_mnemonic (_("Socket:")); pfp->socket = gtk_entry_new (); gtk_entry_set_width_chars (GTK_ENTRY (pfp->socket), 16); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), pfp->socket); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); g_object_set (pfp->socket, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 0, 0, 1, 1); gtk_grid_attach (grid, pfp->socket, 1, 0, 4, 1); widget = gtk_label_new_with_mnemonic (_("Socket args:")); pfp->socket_args = gtk_entry_new (); gtk_entry_set_width_chars (GTK_ENTRY (pfp->socket_args), 16); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), pfp->socket_args); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); g_object_set (pfp->socket_args, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 0, 1, 1, 1); gtk_grid_attach (grid, pfp->socket_args, 1, 1, 4, 1); widget = gtk_label_new_with_mnemonic (_("Element:")); pfp->element = gtk_entry_new (); gtk_entry_set_width_chars (GTK_ENTRY (pfp->element), 16); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), pfp->element); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); g_object_set (pfp->element, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 3, 2, 1, 1); gtk_grid_attach (grid, pfp->element, 4, 2, 1, 1); widget = gtk_separator_new (GTK_ORIENTATION_VERTICAL); g_object_set (widget, "margin", 1, NULL); gtk_grid_attach (grid, widget, 2, 2, 1, 2); widget = gtk_label_new_with_mnemonic (_("File:")); pfp->file = gtk_entry_new (); gtk_entry_set_width_chars (GTK_ENTRY (pfp->file), 16); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), pfp->file); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); g_object_set (pfp->file, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 0, 2, 1, 1); gtk_grid_attach (grid, pfp->file, 1, 2, 1, 1); g_signal_connect (GTK_EDITABLE (pform->pwmd.socket), "changed", G_CALLBACK (on_entry_pwmd_changed), pform); g_signal_connect (GTK_EDITABLE (pform->pwmd.socket_args), "changed", G_CALLBACK (on_entry_pwmd_changed), pform); g_signal_connect (GTK_EDITABLE (pform->pwmd.file), "changed", G_CALLBACK (on_entry_pwmd_changed), pform); g_signal_connect (GTK_EDITABLE (pform->pwmd.element), "changed", G_CALLBACK (on_entry_pwmd_changed), pform); gtk_widget_show_all ((GtkWidget*) grid); gtk_widget_hide ((GtkWidget*) grid); } static void on_entry_pwmd_changed (GtkEditable* editable, UgtkProxyForm* pform) { if (pform->changed.enable) { if (editable == GTK_EDITABLE (pform->pwmd.socket)) pform->pwmd.changed.socket = TRUE; else if (editable == GTK_EDITABLE (pform->pwmd.socket_args)) pform->pwmd.changed.socket_args = TRUE; else if (editable == GTK_EDITABLE (pform->pwmd.file)) pform->pwmd.changed.file = TRUE; else if (editable == GTK_EDITABLE (pform->pwmd.element)) pform->pwmd.changed.element = TRUE; } } #endif // HAVE_LIBPWMD uget-2.2.3/ui-gtk/UgtkUtil.h0000664000175000017500000000506013602733704012534 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_UTIL_H #define UGTK_UTIL_H #include //#include #ifdef __cplusplus extern "C" { #endif // ------------------------------------------------------------------ // URI list functions // To get URIs from text file, error is G_FILE_ERROR. GList* ugtk_text_file_get_uris (const gchar* file_utf8, GError** error); // get URIs from text GList* ugtk_text_get_uris (const gchar* text); // remove URIs from list by scheme GList* ugtk_uri_list_remove_scheme (GList* uris, const gchar* scheme); // ------------------------------------------------------------------ // check BOM in file header and set it's encoding. // return encoding string. const char* ugtk_io_channel_decide_encoding (GIOChannel* channel); // ------------------------------------------------------------------ // others // gboolean ugtk_launch_uri (const gchar* uri); gboolean ugtk_launch_default_app (const gchar* folder, const gchar* file); #ifdef __cplusplus } #endif #endif // UGTK_UTIL_H uget-2.2.3/ui-gtk/UgtkTraveler.h0000664000175000017500000001035713602733704013410 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_TRAVELER_H #define UGTK_TRAVELER_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif // Uget GTK node Traveler typedef struct UgtkTraveler UgtkTraveler; typedef struct UgtkApp UgtkApp; struct UgtkTraveler { UgtkApp* app; struct { GtkWidget* self; GtkTreeView* view; UgtkNodeList* model; struct { // pos_last used by "cursor-changed" signal handler // if selection changed by user, pos != pos_last. int pos; int pos_last; UgetNode* node; } cursor; } state; struct { GtkWidget* self; GtkTreeView* view; UgtkNodeTree* model; struct { // pos_last used by "cursor-changed" signal handler // if selection changed by user, pos != pos_last. int pos; int pos_last; UgetNode* node; } cursor; } category; struct { GtkWidget* self; GtkTreeView* view; UgtkNodeTree* model; struct { // pos_last used by "cursor-changed" signal handler // if selection changed by user, pos != pos_last. int pos; int pos_last; UgetNode* node; } cursor; } download; // ugtk_traveler_reserve_selection() // ugtk_traveler_restore_selection() struct { GList* list; UgetNode* node; } reserved; }; void ugtk_traveler_init (UgtkTraveler* traveler, UgtkApp* app); void ugtk_traveler_select_category (UgtkTraveler* traveler, int nth_category, int nth_state); // get download iter void ugtk_traveler_set_cursor (UgtkTraveler* traveler, UgetNode* dnode); UgetNode* ugtk_traveler_get_cursor (UgtkTraveler* traveler); gboolean ugtk_traveler_get_iter (UgtkTraveler* traveler, GtkTreeIter* iter, UgetNode* dnode); // return all selected download node (reverse order) GList* ugtk_traveler_get_selected (UgtkTraveler* traveler); void ugtk_traveler_set_selected (UgtkTraveler* traveler, GList* nodes); GList* ugtk_traveler_reserve_selection (UgtkTraveler* traveler); void ugtk_traveler_restore_selection (UgtkTraveler* traveler); gint ugtk_traveler_move_selected_up (UgtkTraveler* traveler); gint ugtk_traveler_move_selected_down (UgtkTraveler* traveler); gint ugtk_traveler_move_selected_top (UgtkTraveler* traveler); gint ugtk_traveler_move_selected_bottom (UgtkTraveler* traveler); void ugtk_traveler_set_sorting (UgtkTraveler* traveler, gboolean user_sortable, UgtkNodeColumn nth_column, GtkSortType type); #ifdef __cplusplus } #endif #endif // UGTK_TRAVELER_H uget-2.2.3/ui-gtk/UgtkBatchDialog.c0000664000175000017500000002502313602733704013754 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include // Callback static void ugtk_batch_dialog_set_completed (UgtkBatchDialog* bdialog, gboolean completed); static void on_response (GtkDialog *dialog, gint response_id, UgtkBatchDialog* bdialog); // ---------------------------------------------------------------------------- // UgtkBatchDialog UgtkBatchDialog* ugtk_batch_dialog_new (const char* title, UgtkApp* app) { UgtkBatchDialog* bdialog; bdialog = g_malloc0 (sizeof (UgtkBatchDialog)); ugtk_node_dialog_init ((UgtkNodeDialog*) bdialog, title, app, FALSE); ugtk_download_form_set_multiple (&bdialog->download, TRUE); #if GTK_MAJOR_VERSION <= 3 && GTK_MINOR_VERSION < 14 gtk_window_set_has_resize_grip ((GtkWindow*)bdialog->self, FALSE); #endif gtk_window_resize ((GtkWindow*)bdialog->self, 500, 350); // back button gtk_dialog_add_button (bdialog->self, GTK_STOCK_GO_BACK, GTK_RESPONSE_REJECT); // forward button gtk_dialog_add_button (bdialog->self, GTK_STOCK_GO_FORWARD, GTK_RESPONSE_ACCEPT); // OK & cancel buttons gtk_dialog_add_button (bdialog->self, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_dialog_add_button (bdialog->self, GTK_STOCK_OK, GTK_RESPONSE_OK); gtk_dialog_set_default_response (bdialog->self, GTK_RESPONSE_OK); // set button sensitive gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_OK, FALSE); gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_ACCEPT, FALSE); // response handler g_signal_connect (bdialog->self, "response", G_CALLBACK (on_response), bdialog); return bdialog; } void ugtk_batch_dialog_free (UgtkBatchDialog* bdialog) { // selector if (bdialog->selector.self) ugtk_selector_finalize (&bdialog->selector); // dialog ugtk_node_dialog_free ((UgtkNodeDialog*) bdialog); } void ugtk_batch_dialog_use_selector (UgtkBatchDialog* bdialog) { GtkRequisition requisition; gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_REJECT, FALSE); // add Page 1 ugtk_selector_init (&bdialog->selector, (GtkWindow*) bdialog->self); gtk_widget_get_preferred_size (bdialog->notebook, &requisition, NULL); gtk_widget_set_size_request (bdialog->selector.self, requisition.width, requisition.height); gtk_box_pack_end (bdialog->hbox, bdialog->selector.self, TRUE, TRUE, 0); // hide Page 2 gtk_widget_hide (bdialog->notebook); // set focus gtk_window_set_focus (GTK_WINDOW (bdialog->self), GTK_WIDGET (bdialog->selector.notebook)); // set notify function & data bdialog->selector.notify.func = (void*) ugtk_batch_dialog_set_completed; bdialog->selector.notify.data = bdialog; } void ugtk_batch_dialog_use_sequencer (UgtkBatchDialog* bdialog) { GtkRequisition requisition; gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_REJECT, FALSE); // add Page 1 ugtk_sequence_init (&bdialog->sequencer); gtk_widget_get_preferred_size (bdialog->notebook, &requisition, NULL); gtk_widget_set_size_request (bdialog->sequencer.self, requisition.width, requisition.height); gtk_box_pack_end (bdialog->hbox, bdialog->sequencer.self, TRUE, TRUE, 0); // hide Page 2 gtk_widget_hide (bdialog->notebook); // set focus gtk_window_set_focus (GTK_WINDOW (bdialog->self), GTK_WIDGET (bdialog->sequencer.entry)); // set notify function & data bdialog->sequencer.notify.func = (void*) ugtk_batch_dialog_set_completed; bdialog->sequencer.notify.data = bdialog; } void ugtk_batch_dialog_disable_batch (UgtkBatchDialog* bdialog) { GtkWidget* widget; ugtk_download_form_set_multiple (&bdialog->download, FALSE); ugtk_node_dialog_monitor_uri ((UgtkNodeDialog*) bdialog); // forward to next page. gtk_dialog_response (bdialog->self, GTK_RESPONSE_ACCEPT); // disable forward and back button gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_REJECT, FALSE); gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_ACCEPT, FALSE); // hide forward and back button widget = gtk_dialog_get_widget_for_response (bdialog->self, GTK_RESPONSE_REJECT); gtk_widget_set_visible (widget, FALSE); widget = gtk_dialog_get_widget_for_response (bdialog->self, GTK_RESPONSE_ACCEPT); gtk_widget_set_visible (widget, FALSE); } void ugtk_batch_dialog_run (UgtkBatchDialog* bdialog) { ugtk_node_dialog_apply_recent ((UgtkNodeDialog*) bdialog, bdialog->app); // emit notify and call ugtk_batch_dialog_set_completed() if (bdialog->selector.self) ugtk_selector_count_marked (&bdialog->selector); // gtk_dialog_run (ndialog->self); gtk_widget_show ((GtkWidget*) bdialog->self); } // ---------------------------------------------------------------------------- // Callback static void ugtk_batch_dialog_set_completed (UgtkBatchDialog* bdialog, gboolean completed) { gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_OK, completed); gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_ACCEPT, completed); } static void on_no_batch_response (UgtkBatchDialog* bdialog) { UgtkApp* app; UgetNode* dnode; UgetNode* cnode; const char* uri; app = bdialog->app; ugtk_batch_dialog_get_category (bdialog, &cnode); ugtk_download_form_get_folders (&bdialog->download, &app->setting); uri = gtk_entry_get_text ((GtkEntry*)bdialog->download.uri_entry); if (ugtk_node_dialog_confirm_existing((UgtkNodeDialog*) bdialog, uri)) { dnode = uget_node_new (NULL); ugtk_node_dialog_get ((UgtkNodeDialog*) bdialog, dnode->info); uget_app_add_download ((UgetApp*) app, dnode, cnode, FALSE); } } static void on_sequencer_response (UgtkBatchDialog* bdialog) { UgtkApp* app; UgetNode* dnode; UgetNode* cnode; UgetCommon* common; UgList result; UgLink* link; app = bdialog->app; ugtk_batch_dialog_get_category (bdialog, &cnode); ugtk_download_form_get_folders (&bdialog->download, &app->setting); // sequencer batch ug_list_init (&result); ugtk_sequence_get_list (&bdialog->sequencer, &result); for (link = result.head; link; link = link->next) { dnode = uget_node_new (NULL); common = ug_info_realloc (dnode->info, UgetCommonInfo); ugtk_node_dialog_get ((UgtkNodeDialog*) bdialog, dnode->info); common->uri = ug_strdup (link->data); uget_app_add_download ((UgetApp*) app, dnode, cnode, FALSE); } uget_sequence_clear_result(&result); } static void on_selector_response (UgtkBatchDialog* bdialog) { UgtkApp* app; UgetNode* dnode; UgetNode* cnode; UgetCommon* common; GList* uri_list; GList* link; app = bdialog->app; ugtk_batch_dialog_get_category (bdialog, &cnode); ugtk_download_form_get_folders (&bdialog->download, &app->setting); // selector batch uri_list = ugtk_selector_get_marked_uris (&bdialog->selector); for (link = uri_list; link; link = link->next) { dnode = uget_node_new (NULL); common = ug_info_realloc (dnode->info, UgetCommonInfo); ugtk_node_dialog_get ((UgtkNodeDialog*) bdialog, dnode->info); #if 0 common->uri = link->data; link->data = NULL; #else common->uri = ug_strdup (link->data); g_free (link->data); #endif uget_app_add_download ((UgetApp*) app, dnode, cnode, FALSE); } g_list_free (uri_list); } static void on_response (GtkDialog *dialog, gint response_id, UgtkBatchDialog* bdialog) { switch (response_id) { case GTK_RESPONSE_REJECT: // back button gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_REJECT, FALSE); gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_ACCEPT, TRUE); // switch page gtk_widget_hide (bdialog->notebook); if (bdialog->selector.self) gtk_widget_show (bdialog->selector.self); else if (bdialog->sequencer.self) gtk_widget_show (bdialog->sequencer.self); break; case GTK_RESPONSE_ACCEPT: // forward button gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_REJECT, TRUE); gtk_dialog_set_response_sensitive (bdialog->self, GTK_RESPONSE_ACCEPT, FALSE); // switch page gtk_widget_show (bdialog->notebook); if (bdialog->selector.self) gtk_widget_hide (bdialog->selector.self); else if (bdialog->sequencer.self) gtk_widget_hide (bdialog->sequencer.self); break; case GTK_RESPONSE_CANCEL: default: ugtk_batch_dialog_free (bdialog); break; case GTK_RESPONSE_OK: ugtk_node_dialog_store_recent ((UgtkNodeDialog*) bdialog, bdialog->app); if (gtk_widget_get_sensitive (bdialog->download.uri_entry)) on_no_batch_response (bdialog); if (bdialog->sequencer.self) on_sequencer_response (bdialog); else if (bdialog->selector.self) on_selector_response (bdialog); ugtk_batch_dialog_free (bdialog); break; } } uget-2.2.3/ui-gtk/UgtkAboutDialog.c0000664000175000017500000001332613602733704014010 00000000000000static const char uget_license[] = { " Copyright (C) 2005-2020 by C.H. Huang" "\n" " plushuang.tw@gmail.com" "\n" "\n" "This library is free software; you can redistribute it and/or" "\n" "modify it under the terms of the GNU Lesser General Public" "\n" "License as published by the Free Software Foundation; either" "\n" "version 2.1 of the License, or (at your option) any later version." "\n" "\n" "This library is distributed in the hope that it will be useful," "\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of" "\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU" "\n" "Lesser General Public License for more details." "\n" "\n" "You should have received a copy of the GNU Lesser General Public" "\n" "License along with this library; if not, write to the Free Software" "\n" "Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" "\n" "\n" "---------" "\n" "\n" "In addition, as a special exception, the copyright holders give" "\n" "permission to link the code of portions of this program with the" "\n" "OpenSSL library under certain conditions as described in each" "\n" "individual source file, and distribute linked combinations" "\n" "including the two." "\n" "You must obey the GNU Lesser General Public License in all respects" "\n" "for all of the code used other than OpenSSL. If you modify" "\n" "file(s) with this exception, you may extend this exception to your" "\n" "version of the file(s), but you are not obligated to do so. If you" "\n" "do not wish to do so, delete this exception statement from your" "\n" "version. If you delete this exception statement from all source" "\n" "files in the program, then also delete it here." "\n" "\0" }; #include #include #include #define UGET_URL_WEBSITE "http://ugetdm.com/" // static data static const gchar* uget_authors[] = { "C.H. Huang (\xE9\xBB\x83\xE6\xAD\xA3\xE9\x9B\x84)", NULL }; static const gchar* uget_artists[] = { "Michael Tunnell (visuex.com)", NULL}; static const gchar* uget_comments = N_("Download Manager"); static const gchar* uget_copyright = "Copyright (C) 2005-2020 C.H. Huang"; static const gchar* translator_credits = N_("translator-credits"); static void ugtk_about_dialog_on_response (GtkWidget* widget, gint response_id, UgtkAboutDialog* adialog) { // GTK_RESPONSE_CANCEL ugtk_about_dialog_free (adialog); } UgtkAboutDialog* ugtk_about_dialog_new (GtkWindow* parent) { UgtkAboutDialog* adialog; GtkScrolledWindow* scrolled; GtkTextBuffer* textbuf; GtkWidget* textview; GtkBox* box; char* path; char* comments; adialog = g_malloc (sizeof (UgtkAboutDialog)); adialog->self = (GtkDialog*) gtk_about_dialog_new (); gtk_window_set_transient_for ((GtkWindow*) adialog->self, parent); gtk_dialog_set_default_response (adialog->self, GTK_RESPONSE_CANCEL); path = g_build_filename ( ugtk_get_data_dir (), "pixmaps", "uget", "logo.png", NULL); adialog->pixbuf = gdk_pixbuf_new_from_file (path, NULL); g_free (path); comments = g_strconcat ( gettext (uget_comments), "\n", _("uGet Founder: "), uget_authors[0], "\n", _("uGet Project Manager: "), uget_artists[0], "\n", NULL); g_object_set (adialog->self, // "logo-icon-name", UGTK_APP_ICON_NAME, "logo", adialog->pixbuf, "program-name", UGTK_APP_NAME, "version", PACKAGE_VERSION, "comments", comments, "copyright", uget_copyright, #if defined _WIN32 || defined _WIN64 "website-label", UGET_URL_WEBSITE, #else "website", UGET_URL_WEBSITE, #endif "license", uget_license, "authors", uget_authors, "artists", uget_artists, "translator-credits", gettext (translator_credits), NULL); g_free (comments); textview = gtk_text_view_new (); textbuf = gtk_text_view_get_buffer ((GtkTextView*) textview); adialog->textbuf = textbuf; adialog->scrolled = gtk_scrolled_window_new (NULL, NULL); scrolled = (GtkScrolledWindow*) adialog->scrolled; gtk_widget_set_size_request ((GtkWidget*) scrolled, 200, 120); gtk_scrolled_window_set_shadow_type (scrolled, GTK_SHADOW_IN); gtk_scrolled_window_set_policy (scrolled, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scrolled), textview); gtk_widget_hide ((GtkWidget*) scrolled); box = (GtkBox*) gtk_dialog_get_content_area (adialog->self); gtk_box_pack_end (box, (GtkWidget*) scrolled, TRUE, TRUE, 2); g_signal_connect (adialog->self, "response", G_CALLBACK (ugtk_about_dialog_on_response), adialog); return adialog; } void ugtk_about_dialog_free (UgtkAboutDialog* adialog) { gtk_widget_destroy ((GtkWidget*) adialog->self); if (adialog->pixbuf) g_object_unref (adialog->pixbuf); g_free (adialog); } void ugtk_about_dialog_set_info (UgtkAboutDialog* adialog, const gchar* info_text) { gtk_text_buffer_set_text (adialog->textbuf, info_text, -1); gtk_widget_show_all ((GtkWidget*) adialog->scrolled); } void ugtk_about_dialog_run (UgtkAboutDialog* adialog) { gtk_dialog_run (adialog->self); } uget-2.2.3/ui-gtk/UgtkConfirmDialog.h0000664000175000017500000000433113602733704014334 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_CONFIRM_DIALOG_H #define UGTK_CONFIRM_DIALOG_H #include #include #ifdef __cplusplus extern "C" { #endif typedef enum { UGTK_CONFIRM_DIALOG_EXIT, UGTK_CONFIRM_DIALOG_DELETE, UGTK_CONFIRM_DIALOG_DELETE_CATEGORY, } UgtkConfirmDialogMode; typedef struct UgtkConfirmDialog UgtkConfirmDialog; struct UgtkConfirmDialog { GtkDialog* self; UgtkApp* app; GtkToggleButton* confirmation; }; UgtkConfirmDialog* ugtk_confirm_dialog_new (UgtkConfirmDialogMode mode, UgtkApp* app); void ugtk_confirm_dialog_run (UgtkConfirmDialog* cdialog); #ifdef __cplusplus } #endif #endif // UGTK_CONFIRM_DIALOG_H uget-2.2.3/ui-gtk/UgtkApp-timeout.c0000664000175000017500000005635013602733704014026 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef HAVE_CONFIG_H #include # if HAVE_LIBNOTIFY # include # endif # if HAVE_GSTREAMER # include # endif #endif #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif // _MSC_VER #if defined _WIN32 || defined _WIN64 #ifndef _WIN32_IE #define _WIN32_IE 0x0600 #endif // _WIN32_IE #include #include #endif // _WIN32 || _WIN64 #include #include #include #include #include static void ugtk_app_notify_error (UgtkApp* app); static void ugtk_app_notify_starting (UgtkApp* app); static void ugtk_app_notify_completed (UgtkApp* app); // GSourceFunc #ifdef HAVE_RSS_NOTIFY static gboolean ugtk_app_timeout_rss (UgtkApp* app); #endif static gboolean ugtk_app_timeout_rpc (UgtkApp* app); static gboolean ugtk_app_timeout_queuing (UgtkApp* app); static gboolean ugtk_app_timeout_clipboard (UgtkApp* app); static gboolean ugtk_app_timeout_autosave (UgtkApp* app); void ugtk_app_init_timeout (UgtkApp* app) { // 0.5 seconds g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, 500, (GSourceFunc) ugtk_app_timeout_rpc, app, NULL); // 0.5 seconds g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, 500, (GSourceFunc) ugtk_app_timeout_queuing, app, NULL); // 2 seconds g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, 2, (GSourceFunc) ugtk_app_timeout_clipboard, app, NULL); #ifdef HAVE_RSS_NOTIFY // 3 seconds g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, 3, (GSourceFunc) ugtk_app_timeout_rss, app, NULL); #endif // HAVE_RSS_NOTIFY // 1 minutes g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, 60, (GSourceFunc) ugtk_app_timeout_autosave, app, NULL); } static gboolean ugtk_app_timeout_autosave (UgtkApp* app) { static int counts = 0; counts++; // "app->setting.auto_save.interval" may changed by user if (counts >= app->setting.auto_save.interval) { counts = 0; if (app->setting.auto_save.enable) ugtk_app_save (app); } // return FALSE if the source should be removed. return TRUE; } // ---------------------------------------------------------------------------- // Queuing // scheduler static gboolean ugtk_app_decide_schedule_state (UgtkApp* app) { struct tm* timem; time_t timet; guint weekdays, dayhours; gboolean changed; UgetNode* cnode; UgtkScheduleState state; if (app->setting.scheduler.enable == FALSE) { app->schedule_state = UGTK_SCHEDULE_NORMAL; return FALSE; } // get current time timet = time (NULL); timem = localtime (&timet); dayhours = timem->tm_hour; if (timem->tm_wday == 0) weekdays = 6; else weekdays = timem->tm_wday - 1; // get current schedule state state = app->setting.scheduler.state.at[weekdays*24 + dayhours]; if (app->schedule_state == state) changed = FALSE; else { app->schedule_state = state; changed = TRUE; // switch mode switch (state) { case UGTK_SCHEDULE_TURN_OFF: for (cnode = app->real.children; cnode; cnode = cnode->next) uget_app_stop_category ((UgetApp*)app, cnode); // Don't notify anything app->user_action = TRUE; break; case UGTK_SCHEDULE_LIMITED_SPEED: // ug_running_set_speed (&app->running, // app->setting.speed_limit.scheduler.download, 0); break; default: // no speed limit uget_task_set_speed (&app->task, 0, 0); break; } } if (changed) { // refresh other data & status gtk_widget_queue_draw ((GtkWidget*) app->traveler.download.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); } return changed; } static gboolean ugtk_app_timeout_queuing (UgtkApp* app) { static int n_counts = 0; static int n_active_last = 0; int n_active; int no_queuing = FALSE; gchar* string; ugtk_app_decide_schedule_state (app); if (app->setting.offline_mode || app->schedule_state == UGTK_SCHEDULE_TURN_OFF) { no_queuing = TRUE; } // if current status is "All" or "Active" if (app->traveler.state.cursor.pos == 0 || app->traveler.state.cursor.pos == 1) { ugtk_traveler_reserve_selection (&app->traveler); } n_active = uget_app_grow ((UgetApp*) app, no_queuing); if (n_active != n_active_last) { // start downloading if (n_active > 0 && n_active_last == 0) { // starting notification if (app->setting.ui.start_notification) ugtk_app_notify_starting (app); } // stop downloading else if (n_active == 0 && n_active_last > 0) { if (app->n_error > 0) { // error notification ugtk_app_notify_error (app); // This will show error icon at tray. app->trayicon.error_occurred = TRUE; } else if (app->user_action == FALSE) { // completed notification ugtk_app_notify_completed (app); // This will show normal icon at tray. app->trayicon.error_occurred = FALSE; } else { // This will show normal icon at tray. app->trayicon.error_occurred = FALSE; } // Completion Auto-Actions if (app->setting.completion.action > 0 && app->user_action == FALSE) { ugtk_app_save (app); switch (app->setting.completion.action) { case 1: // hibernate ug_hibernate (); break; case 2: // suspend ug_suspend (); break; case 3: // shutdown ug_shutdown (); break; case 4: // reboot ug_reboot (); break; case 5: // custom if (app->n_error > 0) { if (app->setting.completion.on_error) system (app->setting.completion.on_error); } else { if (app->setting.completion.command) system (app->setting.completion.command); } break; } } // reset counter app->n_error = 0; app->n_completed = 0; } // change window title if (n_active == 0) gtk_window_set_title (app->window.self, UGTK_APP_NAME); else { string = g_strdup_printf (UGTK_APP_NAME " - %u %s", n_active, _("tasks")); gtk_window_set_title (app->window.self, string); g_free (string); } } if (n_active > 0 || n_active != n_active_last || app->n_moved > 0) { // adjust speed limit every 1 seconds if (n_counts & 1) uget_task_adjust_speed (&app->task); // summary ugtk_summary_show (&app->summary, ugtk_traveler_get_cursor (&app->traveler)); // status bar ugtk_statusbar_set_speed (&app->statusbar, app->task.speed.download, app->task.speed.upload); // tray icon ugtk_tray_icon_set_info (&app->trayicon, n_active, app->task.speed.download, app->task.speed.upload); } // if current status is "All" or "Active" if (app->traveler.state.cursor.pos == 0 || app->traveler.state.cursor.pos == 1) { if (app->n_moved > 0) ugtk_traveler_restore_selection (&app->traveler); } uget_app_trim((UgetApp*) app, NULL); if (app->n_moved > 0) { // refresh other data & status gtk_widget_queue_draw ((GtkWidget*) app->traveler.download.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); } app->user_action = FALSE; app->n_moved = 0; // reset counter n_active_last = n_active; n_counts++; return TRUE; } // ---------------------------------------------------------------------------- // Clipboard // static void on_keep_above_window_show (GtkWindow *window, gpointer user_data) { gtk_window_present (window); gtk_window_set_keep_above (window, FALSE); } static void ugtk_app_add_uris_quietly (UgtkApp* app, GList* list, UgInfo* node_info, int nth_category) { GList* link; UgUri uuri; UgetNode* cnode; UgetNode* dnode; UgetCommon* common; // filter existing if (app->setting.ui.skip_existing) { if (ugtk_app_filter_existing (app, list) == 0) return; } for (link = list; link; link = link->next) { // check existing if (link->data == NULL) continue; // select category cnode = NULL; if (nth_category != -1) cnode = uget_node_nth_child (&app->real, nth_category); if (cnode == NULL) { // match category by URI ug_uri_init (&uuri, link->data); cnode = uget_app_match_category ((UgetApp*) app, &uuri, NULL); } if (cnode == NULL && node_info) { // match category by filename common = ug_info_realloc(node_info, UgetCommonInfo); if (common && common->file) { ug_uri_init (&uuri, common->file); cnode = uget_app_match_category ((UgetApp*) app, &uuri, NULL); } } if (cnode == NULL) { if (node_info == NULL) { cnode = uget_node_nth_child (&app->real, app->setting.clipboard.nth_category); } else { cnode = uget_node_nth_child (&app->real, app->setting.commandline.nth_category); } } if (cnode == NULL) cnode = uget_node_nth_child (&app->real, 0); // add download if (node_info == NULL) { // add and free URI uget_app_add_download_uri ((UgetApp*) app, link->data, cnode, TRUE); g_free (link->data); } else { dnode = uget_node_new (NULL); ug_info_assign(dnode->info, node_info, NULL); common = ug_info_realloc(dnode->info, UgetCommonInfo); common->uri = link->data; uget_app_add_download ((UgetApp*) app, dnode, cnode, TRUE); } link->data = NULL; } } static void ugtk_app_add_uris_selected (UgtkApp* app, GList* list, UgInfo* node_info, int nth_category) { UgtkBatchDialog* bdialog; UgtkSelectorPage* page; UgetCommon* common; UgetNode* cnode; UgUri uuri; gchar* title; // filter existing if (app->setting.ui.skip_existing) { if (ugtk_app_filter_existing (app, list) == 0) return; } // choose title for clipboard or command-line if (node_info == NULL) title = g_strconcat (UGTK_APP_NAME " - ", _("New from Clipboard"), NULL); else title = g_strconcat (UGTK_APP_NAME " - ", _("New Download"), NULL); bdialog = ugtk_batch_dialog_new (title, app); g_free (title); // disable batch if only one uri in list. if (list->next == NULL) ugtk_batch_dialog_disable_batch (bdialog); // apply other setting if (node_info) { ugtk_download_form_set(&bdialog->download, node_info, FALSE); ugtk_proxy_form_set(&bdialog->proxy, node_info, FALSE); } // add URIs if (list->next == NULL) { gtk_entry_set_text (GTK_ENTRY (bdialog->download.uri_entry), list->data); bdialog->download.changed.uri = TRUE; } else { // After calling ugtk_selector_page_add_uris(), // all uris in list will be freed. ugtk_batch_dialog_use_selector (bdialog); ugtk_selector_hide_href (&bdialog->selector); if (node_info == NULL) page = ugtk_selector_add_page (&bdialog->selector, _("Clipboard")); else page = ugtk_selector_add_page (&bdialog->selector, _("Command line")); ugtk_selector_page_add_uris (page, list); } // set folder history and info ugtk_download_form_set_folders (&bdialog->download, &app->setting); // select category cnode = NULL; if (nth_category != -1) cnode = uget_node_nth_child (&app->real, nth_category); if (cnode == NULL && list->data) { // match category by URI ug_uri_init (&uuri, list->data); if (node_info == NULL) cnode = uget_app_match_category ((UgetApp*) app, &uuri, NULL); else { common = ug_info_realloc(node_info, UgetCommonInfo); cnode = uget_app_match_category ((UgetApp*) app, &uuri, common->file); } } if (cnode == NULL) { if (node_info == NULL) { cnode = uget_node_nth_child (&app->real, app->setting.clipboard.nth_category); } else { cnode = uget_node_nth_child (&app->real, app->setting.commandline.nth_category); } } if (cnode == NULL) cnode = uget_node_nth_child (&app->real, 0); ugtk_batch_dialog_set_category (bdialog, cnode); // connect signal and set data in download dialog g_signal_connect_after (bdialog->self, "show", G_CALLBACK (on_keep_above_window_show), NULL); // Make sure dilaog will show on top first time. // uget_on_keep_above_window_show () will set keep_above = FALSE gtk_window_set_keep_above ((GtkWindow*) bdialog->self, TRUE); ugtk_batch_dialog_run (bdialog); } static void on_clipboard_text_received (GtkClipboard* clipboard, const gchar* text, gpointer user_data) { UgtkApp* app; GList* list; app = (UgtkApp*) user_data; list = ugtk_clipboard_get_matched (&app->clipboard, text); if (list) { if (app->setting.clipboard.quiet) ugtk_app_add_uris_quietly (app, list, NULL, -1); else ugtk_app_add_uris_selected (app, list, NULL, -1); g_list_free (list); // refresh gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); } app->clipboard.processing = FALSE; } static gboolean ugtk_app_timeout_clipboard (UgtkApp* app) { if (app->setting.clipboard.monitor && app->clipboard.processing == FALSE) { // set FALSE in on_clipboard_text_received() app->clipboard.processing = TRUE; gtk_clipboard_request_text (app->clipboard.self, on_clipboard_text_received, app); } // return FALSE if the source should be removed. return TRUE; } // ---------------------------------------------------------------------------- // RPC static gboolean ugtk_app_timeout_rpc (UgtkApp* app) { UgetRpcReq* req; UgetRpcCmd* cmd; UgInfo* node_info; for (;;) { if (uget_rpc_has_request(app->rpc) == FALSE) return TRUE; req = uget_rpc_get_request (app->rpc); switch (req->method_id) { case UGET_RPC_PRESENT: // if (gtk_widget_get_visible ((GtkWidget*) app->window.self) == FALSE) // gtk_window_deiconify (app->window.self); gtk_window_present (app->window.self); // set position and size gtk_window_move (app->window.self, app->setting.window.x, app->setting.window.y); gtk_window_resize (app->window.self, app->setting.window.width, app->setting.window.height); break; case UGET_RPC_SEND_COMMAND: cmd = (UgetRpcCmd*) req; // control online/offline switch (cmd->value.ctrl.offline) { case 0: app->setting.offline_mode = FALSE; gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.file.offline_mode, FALSE); break; case 1: app->setting.offline_mode = TRUE; gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.file.offline_mode, TRUE); break; default: break; } // if user want to add downloads quietly. if (app->setting.commandline.quiet) cmd->value.quiet = TRUE; // URIs if (cmd->uris.size == 0) break; // add downloads node_info = ug_info_new(8, 0); uget_option_value_to_info(&cmd->value, node_info); if (cmd->value.quiet) { ugtk_app_add_uris_quietly (app, (GList*) cmd->uris.head, node_info, cmd->value.category_index); } else { ugtk_app_add_uris_selected (app, (GList*) cmd->uris.head, node_info, cmd->value.category_index); } ug_info_unref(node_info); break; default: break; } req->free (req); } return TRUE; } // ---------------------------------------------------------------------------- // RSS #ifdef HAVE_RSS_NOTIFY static gboolean ugtk_app_timeout_rss_update (UgtkApp* app) { uget_rss_update (app->rss_builtin, FALSE); // check RSS ready every 3 seconds g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, 3, (GSourceFunc) ugtk_app_timeout_rss, app, NULL); // return FALSE if the source should be removed. return FALSE; } static gboolean ugtk_app_timeout_rss (UgtkApp* app) { if (app->rss_builtin->updating == FALSE) { if (app->rss_builtin->n_updated > 0) { ugtk_banner_show_rss (&app->banner, app->rss_builtin); app->rss_builtin->n_updated = 0; } // update RSS every 30 minutes g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, 60 * 30, (GSourceFunc) ugtk_app_timeout_rss_update, app, NULL); // return FALSE if the source should be removed. return FALSE; } return TRUE; } #endif // HAVE_RSS_NOTIFY // ---------------------------------------------------------------------------- // sound // static void uget_play_sound (const gchar* sound_file); // GStreamer #ifdef HAVE_GSTREAMER static gboolean ugst_bus_func (GstBus* bus, GstMessage* msg, gpointer data) { GstElement* playbin = data; GError* error = NULL; switch (GST_MESSAGE_TYPE (msg)) { case GST_MESSAGE_WARNING: gst_message_parse_warning (msg, &error, NULL); // g_print ("uget-gtk: gstreamer: %s\n", error->message); g_error_free (error); break; case GST_MESSAGE_ERROR: gst_message_parse_error (msg, &error, NULL); // g_print ("uget-gtk: gstreamer: %s\n", error->message); g_error_free (error); // clean up case GST_MESSAGE_EOS: gst_element_set_state (playbin, GST_STATE_NULL); gst_object_unref (GST_OBJECT (playbin)); break; default: break; } return TRUE; } static void ugtk_play_sound (const gchar* sound_file) { GstElement* playbin = NULL; GstBus* bus = NULL; char* uri; gchar* file_os; extern gboolean gst_inited; // ui-gtk/UgtkApp-main.c if (gst_inited == FALSE) return; file_os = g_filename_from_utf8 (sound_file, -1, NULL, NULL, NULL); if (g_file_test (file_os, G_FILE_TEST_EXISTS) == FALSE) { g_free (file_os); return; } playbin = gst_element_factory_make ("playbin", "play"); if (playbin == NULL) { g_free (file_os); return; } uri = g_filename_to_uri (file_os, NULL, NULL); g_free (file_os); g_object_set (G_OBJECT (playbin), "uri", uri, NULL); bus = gst_pipeline_get_bus (GST_PIPELINE (playbin)); gst_bus_add_watch (bus, ugst_bus_func, playbin); gst_element_set_state (playbin, GST_STATE_PLAYING); gst_object_unref (bus); g_free (uri); } #elif defined (_WIN32) static void ugtk_play_sound (const gchar* sound_file) { gunichar2* file_wcs; if (g_file_test (sound_file, G_FILE_TEST_EXISTS) == FALSE) return; file_wcs = g_utf8_to_utf16 (sound_file, -1, NULL, NULL, NULL); PlaySoundW (file_wcs, NULL, SND_ASYNC | SND_FILENAME); g_free (file_wcs); } #else // --disable-gstreamer static void ugtk_play_sound (const gchar* sound_file) { } #endif // HAVE_GSTREAMER // ---------------------------------------------------------------------------- // notification // #if defined HAVE_LIBNOTIFY static void ugtk_app_notify (UgtkApp* app, const gchar* title, const gchar* body) { static NotifyNotification* notification = NULL; gchar* string; if (notify_is_initted () == FALSE) return; // set title and body string = g_strconcat (UGTK_APP_NAME " - ", title, NULL); if (notification == NULL) { #if defined (NOTIFY_VERSION_MINOR) && NOTIFY_VERSION_MAJOR >= 0 && NOTIFY_VERSION_MINOR >= 7 notification = notify_notification_new (string, body, UGTK_APP_ICON_NAME); #else notification = notify_notification_new (string, body, UGTK_APP_ICON_NAME, NULL); #endif notify_notification_set_timeout (notification, 7000); // milliseconds } else { notify_notification_update (notification, string, body, UGTK_APP_ICON_NAME); } g_free (string); notify_notification_show (notification, NULL); } #elif defined _WIN32 || defined _WIN64 static void ugtk_app_notify (UgtkApp* app, const gchar* title, const gchar* body) { static NOTIFYICONDATAW* pNotifyData = NULL; gchar* string; gunichar2* string_wcs; if (pNotifyData == NULL) { pNotifyData = g_malloc0 (sizeof (NOTIFYICONDATAW)); pNotifyData->cbSize = sizeof (NOTIFYICONDATAW); pNotifyData->uFlags = NIF_INFO; // Use a balloon ToolTip instead of a standard ToolTip. pNotifyData->uTimeout = 7000; // milliseconds, This member is deprecated as of Windows Vista. pNotifyData->dwInfoFlags = NIIF_INFO | NIIF_NOSOUND; // Add an information icon to balloon ToolTip. // gtkstatusicon.c // (create_tray_observer): WNDCLASS.lpszClassName = "gtkstatusicon-observer" pNotifyData->hWnd = FindWindowA ("gtkstatusicon-observer", NULL); } if (pNotifyData->hWnd == NULL) return; // gtkstatusicon.c // (gtk_status_icon_init): priv->nid.uID = GPOINTER_TO_UINT (status_icon); pNotifyData->uID = GPOINTER_TO_UINT (app->trayicon.self); // title string = g_strconcat (UGTK_APP_NAME " - ", title, NULL); string_wcs = g_utf8_to_utf16 (string, -1, NULL, NULL, NULL); wcsncpy (pNotifyData->szInfoTitle, string_wcs, 64 -1); // null-terminated g_free (string); g_free (string_wcs); // body string_wcs = g_utf8_to_utf16 (body, -1, NULL, NULL, NULL); wcsncpy (pNotifyData->szInfo, string_wcs, 256 -1); // null-terminated g_free (string_wcs); Shell_NotifyIconW (NIM_MODIFY, pNotifyData); } #else static void ugtk_app_notify (UgtkApp* app, const gchar* title, const gchar* info) { // do nothing } #endif // HAVE_LIBNOTIFY #define NOTIFICATION_ERROR_TITLE _("Error Occurred") #define NOTIFICATION_ERROR_STRING _("Error Occurred during downloading.") #define NOTIFICATION_STARTING_TITLE _("Download Starting") #define NOTIFICATION_STARTING_STRING _("Starting download queue.") #define NOTIFICATION_COMPLETED_TITLE _("Download Completed") #define NOTIFICATION_COMPLETED_STRING _("All queuing downloads have been completed.") static void ugtk_app_notify_error (UgtkApp* app) { gchar* path; ugtk_app_notify (app, NOTIFICATION_ERROR_TITLE, NOTIFICATION_ERROR_STRING); if (app->setting.ui.sound_notification) { path = g_build_filename (ugtk_get_data_dir (), "sounds", "uget", "notification.wav", NULL); ugtk_play_sound (path); g_free (path); } } static void ugtk_app_notify_completed (UgtkApp* app) { gchar* path; ugtk_app_notify (app, NOTIFICATION_COMPLETED_TITLE, NOTIFICATION_COMPLETED_STRING); if (app->setting.ui.sound_notification) { path = g_build_filename (ugtk_get_data_dir (), "sounds", "uget", "notification.wav", NULL); ugtk_play_sound (path); g_free (path); } } static void ugtk_app_notify_starting (UgtkApp* app) { // gchar* path; ugtk_app_notify (app, NOTIFICATION_STARTING_TITLE, NOTIFICATION_STARTING_STRING); // if (app->setting.ui.sound_notification) { // path = g_build_filename (ugtk_get_data_dir (), // "sounds", "uget", "notification.wav", NULL); // ugtk_play_sound (path); // g_free (path); // } } uget-2.2.3/ui-gtk/UgtkConfirmDialog.c0000664000175000017500000001603013602733704014326 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include // response static void on_confirm_to_exit_response (GtkWidget* dialog, gint response, UgtkConfirmDialog* cdialog); static void on_confirm_to_delete_response (GtkWidget* dialog, gint response, UgtkConfirmDialog* cdialog); static void on_confirm_to_delete_category_response (GtkWidget* dialog, gint response, UgtkConfirmDialog* cdialog); UgtkConfirmDialog* ugtk_confirm_dialog_new (UgtkConfirmDialogMode mode, UgtkApp* app) { UgtkConfirmDialog* cdialog; GtkWidget* button; GtkBox* hbox; GtkBox* vbox; gchar* temp; const char* title; const char* label; cdialog = g_malloc (sizeof (UgtkConfirmDialog)); cdialog->app = app; // create confirmation dialog switch (mode) { case UGTK_CONFIRM_DIALOG_EXIT: title = _("Really Quit?"); label = _("Are you sure you want to quit?"); break; case UGTK_CONFIRM_DIALOG_DELETE: title = _("Really delete files?"); label = _("Are you sure you want to delete files?"); break; case UGTK_CONFIRM_DIALOG_DELETE_CATEGORY: title = _("Really delete category?"); label = _("Are you sure you want to delete category?"); break; default: title = NULL; label = NULL; break; } temp = g_strconcat (UGTK_APP_NAME " - ", title, NULL); cdialog->self = (GtkDialog*) gtk_dialog_new_with_buttons (temp, app->window.self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_NO, GTK_RESPONSE_NO, GTK_STOCK_YES, GTK_RESPONSE_YES, NULL); g_free (temp); #if GTK_MAJOR_VERSION <= 3 && GTK_MINOR_VERSION < 14 gtk_window_set_has_resize_grip ((GtkWindow*) cdialog->self, FALSE); #endif gtk_container_set_border_width (GTK_CONTAINER (cdialog->self), 4); vbox = (GtkBox*) gtk_dialog_get_content_area (cdialog->self); // image and label hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (hbox, gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG), FALSE, FALSE, 8); gtk_box_pack_start (hbox, gtk_label_new (label), FALSE, FALSE, 4); gtk_box_pack_start (vbox, (GtkWidget*) hbox, FALSE, FALSE, 6); // check button hbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); button = gtk_check_button_new_with_label (_("Don't ask me again")); gtk_box_pack_end (hbox, button, TRUE, TRUE, 20); gtk_box_pack_end (vbox, (GtkWidget*) hbox, FALSE, FALSE, 10); cdialog->confirmation = (GtkToggleButton*) button; // gtk_widget_show_all ((GtkWidget*) vbox); switch (mode) { case UGTK_CONFIRM_DIALOG_EXIT: app->dialogs.exit_confirmation = (GtkWidget*) cdialog->self; g_signal_connect (cdialog->self, "response", G_CALLBACK (on_confirm_to_exit_response), cdialog); break; case UGTK_CONFIRM_DIALOG_DELETE: app->dialogs.delete_confirmation = (GtkWidget*) cdialog->self; g_signal_connect (cdialog->self, "response", G_CALLBACK (on_confirm_to_delete_response), cdialog); break; case UGTK_CONFIRM_DIALOG_DELETE_CATEGORY: app->dialogs.delete_category_confirmation = (GtkWidget*) cdialog->self; gtk_widget_hide ((GtkWidget*) cdialog->confirmation); g_signal_connect (cdialog->self, "response", G_CALLBACK (on_confirm_to_delete_category_response), cdialog); break; default: g_signal_connect (cdialog->self, "response", G_CALLBACK (gtk_widget_destroy), NULL); break; } return cdialog; } void ugtk_confirm_dialog_free (UgtkConfirmDialog* cdialog) { gtk_widget_destroy ((GtkWidget*) cdialog->self); g_free (cdialog); } void ugtk_confirm_dialog_run (UgtkConfirmDialog* cdialog) { UgtkApp* app; app = cdialog->app; gtk_widget_set_sensitive ((GtkWidget*) app->window.self, FALSE); gtk_widget_show ((GtkWidget*) cdialog->self); } static void on_confirm_to_exit_response (GtkWidget* dialog, gint response, UgtkConfirmDialog* cdialog) { UgtkApp* app; app = cdialog->app; app->dialogs.exit_confirmation = NULL; if (response == GTK_RESPONSE_YES) { if (gtk_toggle_button_get_active (cdialog->confirmation) == FALSE) app->setting.ui.exit_confirmation = TRUE; else app->setting.ui.exit_confirmation = FALSE; ugtk_app_quit (app); } gtk_widget_set_sensitive ((GtkWidget*) app->window.self, TRUE); ugtk_confirm_dialog_free (cdialog); } static void on_confirm_to_delete_response (GtkWidget* dialog, gint response, UgtkConfirmDialog* cdialog) { UgtkApp* app; app = cdialog->app; app->dialogs.delete_confirmation = NULL; if (response == GTK_RESPONSE_YES) { if (gtk_toggle_button_get_active (cdialog->confirmation) == FALSE) app->setting.ui.delete_confirmation = TRUE; else app->setting.ui.delete_confirmation = FALSE; ugtk_app_delete_download (app, TRUE); } gtk_widget_set_sensitive ((GtkWidget*) app->window.self, TRUE); ugtk_confirm_dialog_free (cdialog); } static void on_confirm_to_delete_category_response (GtkWidget* dialog, gint response, UgtkConfirmDialog* cdialog) { UgtkApp* app; app = cdialog->app; app->dialogs.delete_category_confirmation = NULL; if (response == GTK_RESPONSE_YES) { // if (gtk_toggle_button_get_active (cdialog->confirmation) == FALSE) // app->setting.ui.delete_category_confirmation = TRUE; // else // app->setting.ui.delete_category_confirmation = FALSE; ugtk_app_delete_category (app); } gtk_widget_set_sensitive ((GtkWidget*) app->window.self, TRUE); ugtk_confirm_dialog_free (cdialog); } uget-2.2.3/ui-gtk/UgtkApp.c0000664000175000017500000017631513602733704012346 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ugtk_app_init (UgtkApp* app, UgetRpc* rpc) { char* dir; app->rpc = rpc; uget_app_init ((UgetApp*) app); // set application config directory for each user dir = g_build_filename (ugtk_get_config_dir (), UGTK_APP_DIR, NULL); uget_app_set_config_dir ((UgetApp*) app, dir); g_free (dir); app->rss_builtin = uget_rss_new (); ugtk_app_load (app); ugtk_app_init_ui (app); ugtk_app_init_callback (app); if (app->real.n_children == 0) ugtk_app_add_default_category (app); // clipboard ugtk_clipboard_init (&app->clipboard, app->setting.clipboard.pattern); // plug-in initialize uget_plugin_global_set(UgetPluginCurlInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); uget_plugin_global_set(UgetPluginMediaInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); uget_plugin_global_set(UgetPluginMegaInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); // apply UgtkSetting ugtk_app_set_plugin_setting (app, &app->setting); ugtk_app_set_window_setting (app, &app->setting); ugtk_app_set_column_setting (app, &app->setting); ugtk_app_set_other_setting (app, &app->setting); ugtk_app_set_ui_setting (app, &app->setting); ugtk_tray_icon_set_info (&app->trayicon, 0, 0, 0); ugtk_statusbar_set_speed (&app->statusbar, 0, 0); ugtk_menubar_sync_category (&app->menubar, app, TRUE); app->recent.category_index = 0; app->recent.info = ug_info_new(8, 0); // RSS uget_rss_add_builtin (app->rss_builtin, UGET_RSS_STABLE); uget_rss_add_builtin (app->rss_builtin, UGET_RSS_NEWS); uget_rss_add_builtin (app->rss_builtin, UGET_RSS_TUTORIALS); uget_rss_update (app->rss_builtin, FALSE); gtk_widget_hide (app->banner.self); uget_app_use_uri_hash ((UgetApp*) app); ugtk_app_init_timeout (app); if (app->setting.ui.start_in_tray) ugtk_tray_icon_set_visible (&app->trayicon, TRUE); else gtk_widget_show ((GtkWidget*) app->window.self); // offline if (app->setting.ui.start_in_offline_mode) g_signal_emit_by_name (app->menubar.file.offline_mode, "activate"); } void ugtk_app_final (UgtkApp* app) { int shutdown_now; uget_app_set_notification ((UgetApp*) app, NULL, NULL, NULL, NULL); if (app->setting.plugin_order >= UGTK_PLUGIN_ORDER_ARIA2) shutdown_now = app->setting.aria2.shutdown; else shutdown_now = FALSE; ug_info_unref(app->recent.info); uget_rss_unref (app->rss_builtin); uget_app_final ((UgetApp*) app); // plug-in finalize uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_ARIA2_GLOBAL_SHUTDOWN_NOW, (void*)(intptr_t) shutdown_now); uget_plugin_global_set(UgetPluginCurlInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); uget_plugin_global_set(UgetPluginMediaInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); uget_plugin_global_set(UgetPluginMegaInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); } void ugtk_app_save (UgtkApp* app) { gchar* file; if (app->config_dir == NULL) return; ug_create_dir_all (app->config_dir, -1); file = g_build_filename (app->config_dir, "Setting.json", NULL); ugtk_setting_save (&app->setting, file); g_free (file); // RSS file = g_build_filename (app->config_dir, "RSS-built-in.json", NULL); uget_rss_save_feeds (app->rss_builtin, file); g_free (file); // uget_app_save_categories ((UgetApp*) app, ugtk_get_config_dir ()); uget_app_save_categories ((UgetApp*) app, NULL); } void ugtk_app_load (UgtkApp* app) { int counts; gchar* file; // load setting ugtk_setting_init (&app->setting); file = g_build_filename (app->config_dir, "Setting.json", NULL); counts = ugtk_setting_load (&app->setting, file); g_free (file); if (counts == FALSE) ugtk_setting_reset (&app->setting); else if (app->setting.scheduler.state.length < 7*24) { ug_array_alloc (&app->setting.scheduler.state, 7*24 - app->setting.scheduler.state.length); } // RSS file = g_build_filename (app->config_dir, "RSS-built-in.json", NULL); uget_rss_load_feeds (app->rss_builtin, file); g_free (file); // uget_app_load_categories ((UgetApp*) app, ugtk_get_config_dir ()); counts = uget_app_load_categories ((UgetApp*) app, NULL); if (counts == 0) ugtk_app_add_default_category (app); } void ugtk_app_quit (UgtkApp* app) { // stop all tasks uget_task_remove_all (&app->task); // sync setting and save data ugtk_app_get_window_setting (app, &app->setting); ugtk_app_get_column_setting (app, &app->setting); ugtk_app_save (app); // clear plug-in uget_app_clear_plugins ((UgetApp*) app); // hide icon in system tray before quit ugtk_tray_icon_set_visible (&app->trayicon, FALSE); // hide window gtk_widget_hide (GTK_WIDGET (app->window.self)); gtk_main_quit (); } void ugtk_app_get_window_setting (UgtkApp* app, UgtkSetting* setting) { GdkWindowState gdk_wstate; GdkWindow* gdk_window; gint x, y; // get window position, size, and maximized state if (gtk_widget_get_visible (GTK_WIDGET (app->window.self)) == TRUE) { gdk_window = gtk_widget_get_window (GTK_WIDGET (app->window.self)); gdk_wstate = gdk_window_get_state (gdk_window); if (gdk_wstate & GDK_WINDOW_STATE_MAXIMIZED) setting->window.maximized = TRUE; else setting->window.maximized = FALSE; // get geometry if (setting->window.maximized == FALSE) { gtk_window_get_position (app->window.self, &x, &y); gtk_window_get_size (app->window.self, &setting->window.width, &setting->window.height); // gtk_window_get_position() may return: x == -32000, y == -32000 if (x + app->setting.window.width > 0) setting->window.x = x; if (y + app->setting.window.height > 0) setting->window.y = y; } } // GtkPaned position if (app->setting.window.category) setting->window.paned_position_h = gtk_paned_get_position (app->window.hpaned); if (app->setting.window.summary) setting->window.paned_position_v = gtk_paned_get_position (app->window.vpaned); // banner setting->window.banner = gtk_widget_get_visible (app->banner.self); // traveler setting->window.nth_category = app->traveler.category.cursor.pos; setting->window.nth_state = app->traveler.state.cursor.pos; } void ugtk_app_set_window_setting (UgtkApp* app, UgtkSetting* setting) { // set window position, size, and maximized state if (setting->window.width > 0 && setting->window.height > 0 && setting->window.x < gdk_screen_width () && setting->window.y < gdk_screen_height () && setting->window.x + setting->window.width > 0 && setting->window.y + setting->window.height > 0) { gtk_window_move (app->window.self, setting->window.x, setting->window.y); gtk_window_resize (app->window.self, setting->window.width, setting->window.height); } if (setting->window.maximized) gtk_window_maximize (app->window.self); // GtkPaned position if (setting->window.paned_position_h > 0) { gtk_paned_set_position (app->window.hpaned, setting->window.paned_position_h); } if (setting->window.paned_position_v > 0) { if (setting->window.paned_position_v > 100) // for uGet < 2.0.4 gtk_paned_set_position (app->window.vpaned, setting->window.paned_position_v); } // set visible widgets gtk_widget_set_visible (app->toolbar.self, setting->window.toolbar); gtk_widget_set_visible ((GtkWidget*) app->statusbar.self, setting->window.statusbar); gtk_widget_set_visible (gtk_paned_get_child1 (app->window.hpaned), setting->window.category); gtk_widget_set_visible (app->summary.self, setting->window.summary); gtk_widget_set_visible (app->banner.self, setting->window.banner); // Summary app->summary.visible.name = setting->summary.name; app->summary.visible.folder = setting->summary.folder; app->summary.visible.category = setting->summary.category; app->summary.visible.uri = setting->summary.uri; app->summary.visible.message = setting->summary.message; // traveler if (setting->window.nth_category >= app->real.n_children) setting->window.nth_category = 0; if (setting->window.nth_state >= app->split.n_children) setting->window.nth_state = 0; ugtk_traveler_select_category (&app->traveler, setting->window.nth_category, setting->window.nth_state); // menu ugtk_app_set_menu_setting (app, setting); } void ugtk_app_get_column_setting (UgtkApp* app, UgtkSetting* setting) { GtkTreeViewColumn* column; int width; // state column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_STATE); width = gtk_tree_view_column_get_width (column); setting->download_column.width.state = width; // name column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_NAME); width = gtk_tree_view_column_get_width (column); setting->download_column.width.name = width; // complete column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_COMPLETE); width = gtk_tree_view_column_get_width (column); setting->download_column.width.complete = width; // total column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_TOTAL); width = gtk_tree_view_column_get_width (column); setting->download_column.width.total = width; // percent column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_PERCENT); width = gtk_tree_view_column_get_width (column); setting->download_column.width.percent = width; // elapsed column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_ELAPSED); width = gtk_tree_view_column_get_width (column); setting->download_column.width.elapsed = width; // left column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_LEFT); width = gtk_tree_view_column_get_width (column); setting->download_column.width.left = width; // speed column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_SPEED); width = gtk_tree_view_column_get_width (column); setting->download_column.width.speed = width; // upload_speed column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_UPLOAD_SPEED); width = gtk_tree_view_column_get_width (column); setting->download_column.width.upload_speed = width; // uploaded column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_UPLOADED); width = gtk_tree_view_column_get_width (column); setting->download_column.width.uploaded = width; // ratio column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_RATIO); width = gtk_tree_view_column_get_width (column); setting->download_column.width.ratio = width; // retry column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_RETRY); width = gtk_tree_view_column_get_width (column); setting->download_column.width.retry = width; // category column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_CATEGORY); width = gtk_tree_view_column_get_width (column); setting->download_column.width.category = width; // uri column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_URI); width = gtk_tree_view_column_get_width (column); setting->download_column.width.uri = width; // added_on column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_ADDED_ON); width = gtk_tree_view_column_get_width (column); setting->download_column.width.added_on = width; // completed_on column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_COMPLETED_ON); width = gtk_tree_view_column_get_width (column); setting->download_column.width.completed_on = width; } void ugtk_app_set_column_setting (UgtkApp* app, UgtkSetting* setting) { GtkTreeViewColumn* column; int width; // state column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_STATE); width = setting->download_column.width.state; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // name column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_NAME); width = setting->download_column.width.name; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // complete column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_COMPLETE); width = setting->download_column.width.complete; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // total column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_TOTAL); width = setting->download_column.width.total; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // percent column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_PERCENT); width = setting->download_column.width.percent; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // elapsed column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_ELAPSED); width = setting->download_column.width.elapsed; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // left column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_LEFT); width = setting->download_column.width.left; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // speed column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_SPEED); width = setting->download_column.width.speed; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // upload_speed column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_UPLOAD_SPEED); width = setting->download_column.width.upload_speed; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // uploaded column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_UPLOADED); width = setting->download_column.width.uploaded; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // ratio column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_RATIO); width = setting->download_column.width.ratio; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // retry column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_RETRY); width = setting->download_column.width.retry; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // category column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_CATEGORY); width = setting->download_column.width.category; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // uri column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_URI); width = setting->download_column.width.uri; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // added_on column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_ADDED_ON); width = setting->download_column.width.added_on; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); // completed_on column = gtk_tree_view_get_column (app->traveler.download.view, UGTK_NODE_COLUMN_COMPLETED_ON); width = setting->download_column.width.completed_on; if (width > 0) gtk_tree_view_column_set_fixed_width (column, width); } void ugtk_app_set_plugin_setting (UgtkApp* app, UgtkSetting* setting) { const UgetPluginInfo* default_plugin; int limit[2]; int sensitive = FALSE; switch (setting->plugin_order) { default: case UGTK_PLUGIN_ORDER_CURL: uget_app_remove_plugin ((UgetApp*) app, UgetPluginAria2Info); default_plugin = UgetPluginCurlInfo; sensitive = FALSE; break; case UGTK_PLUGIN_ORDER_ARIA2: uget_app_remove_plugin ((UgetApp*) app, UgetPluginCurlInfo); default_plugin = UgetPluginAria2Info; sensitive = TRUE; break; case UGTK_PLUGIN_ORDER_CURL_ARIA2: uget_app_add_plugin ((UgetApp*) app, UgetPluginAria2Info); default_plugin = UgetPluginCurlInfo; sensitive = TRUE; break; case UGTK_PLUGIN_ORDER_ARIA2_CURL: uget_app_add_plugin ((UgetApp*) app, UgetPluginCurlInfo); default_plugin = UgetPluginAria2Info; sensitive = TRUE; break; } // set default plug-in uget_app_set_default_plugin ((UgetApp*) app, default_plugin); // set agent plug-in (used by media and MEGA plug-in) uget_plugin_agent_global_set(UGET_PLUGIN_AGENT_GLOBAL_PLUGIN, (void*) default_plugin); // set media plug-in uget_app_add_plugin ((UgetApp*) app, UgetPluginMediaInfo); uget_plugin_global_set(UgetPluginMediaInfo, UGET_PLUGIN_MEDIA_GLOBAL_MATCH_MODE, (void*)(intptr_t) setting->media.match_mode); uget_plugin_global_set(UgetPluginMediaInfo, UGET_PLUGIN_MEDIA_GLOBAL_QUALITY, (void*)(intptr_t) setting->media.quality); uget_plugin_global_set(UgetPluginMediaInfo, UGET_PLUGIN_MEDIA_GLOBAL_TYPE, (void*)(intptr_t) setting->media.type); // set MEGA plug-in uget_app_add_plugin ((UgetApp*) app, UgetPluginMegaInfo); // set aria2 plug-in if (setting->plugin_order >= UGTK_PLUGIN_ORDER_ARIA2) { uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_ARIA2_GLOBAL_URI, setting->aria2.uri); uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_ARIA2_GLOBAL_PATH, setting->aria2.path); uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_ARIA2_GLOBAL_ARGUMENT, setting->aria2.args); uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_ARIA2_GLOBAL_TOKEN, setting->aria2.token); uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_ARIA2_GLOBAL_LAUNCH, (void*)(intptr_t) setting->aria2.launch); uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_ARIA2_GLOBAL_SHUTDOWN, (void*)(intptr_t) setting->aria2.shutdown); limit[0] = setting->aria2.limit.download * 1024; limit[1] = setting->aria2.limit.upload * 1024; uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_GLOBAL_SPEED_LIMIT, limit); } // app->aria2.remote_updated = FALSE; gtk_widget_set_sensitive ((GtkWidget*) app->trayicon.menu.create_torrent, sensitive); gtk_widget_set_sensitive ((GtkWidget*) app->trayicon.menu.create_metalink, sensitive); gtk_widget_set_sensitive ((GtkWidget*) app->menubar.file.create_torrent, sensitive); gtk_widget_set_sensitive ((GtkWidget*) app->menubar.file.create_metalink, sensitive); gtk_widget_set_sensitive ((GtkWidget*) app->toolbar.create_torrent, sensitive); gtk_widget_set_sensitive ((GtkWidget*) app->toolbar.create_metalink, sensitive); } void ugtk_app_set_other_setting (UgtkApp* app, UgtkSetting* setting) { // clipboard & commandline ugtk_clipboard_set_pattern (&app->clipboard, setting->clipboard.pattern); app->clipboard.website = app->setting.clipboard.website; // global speed limit uget_task_set_speed (&app->task, setting->bandwidth.normal.download * 1024, setting->bandwidth.normal.upload * 1024); } void ugtk_app_set_menu_setting (UgtkApp* app, UgtkSetting* setting) { // ---------------------------------------------------- // UgtkEditMenu gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.edit.clipboard_monitor, setting->clipboard.monitor); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.edit.clipboard_quiet, setting->clipboard.quiet); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.edit.commandline_quiet, setting->commandline.quiet); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.edit.skip_existing, setting->ui.skip_existing); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.edit.apply_recent, setting->ui.apply_recent); switch (app->setting.completion.action) { default: case 0: gtk_check_menu_item_set_active ( (GtkCheckMenuItem*)app->menubar.edit.completion.disable, TRUE); break; case 1: gtk_check_menu_item_set_active ( (GtkCheckMenuItem*)app->menubar.edit.completion.hibernate, TRUE); break; case 2: gtk_check_menu_item_set_active ( (GtkCheckMenuItem*)app->menubar.edit.completion.suspend, TRUE); break; case 3: gtk_check_menu_item_set_active ( (GtkCheckMenuItem*)app->menubar.edit.completion.shutdown, TRUE); break; case 4: gtk_check_menu_item_set_active ( (GtkCheckMenuItem*)app->menubar.edit.completion.reboot, TRUE); break; case 5: gtk_check_menu_item_set_active ( (GtkCheckMenuItem*)app->menubar.edit.completion.custom, TRUE); break; } gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.edit.completion.remember, setting->completion.remember); // ---------------------------------------------------- // UgtkViewMenu gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.toolbar, setting->window.toolbar); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.statusbar, setting->window.statusbar); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.category, setting->window.category); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.summary, setting->window.summary); // summary items gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.summary_items.name, setting->summary.name); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.summary_items.folder, setting->summary.folder); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.summary_items.category, setting->summary.category); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.summary_items.uri, setting->summary.uri); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.summary_items.message, setting->summary.message); // download column gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.complete, setting->download_column.complete); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.total, setting->download_column.total); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.percent, setting->download_column.percent); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.elapsed, setting->download_column.elapsed); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.left, setting->download_column.left); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.speed, setting->download_column.speed); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.upload_speed, setting->download_column.upload_speed); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.uploaded, setting->download_column.uploaded); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.ratio, setting->download_column.ratio); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.retry, setting->download_column.retry); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.category, setting->download_column.category); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.uri, setting->download_column.uri); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.added_on, setting->download_column.added_on); gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.view.columns.completed_on, setting->download_column.completed_on); } void ugtk_app_set_ui_setting (UgtkApp* app, UgtkSetting* setting) { GtkIconSize icon_size; #ifdef HAVE_APP_INDICATOR // AppIndicator ugtk_tray_icon_use_indicator (&app->trayicon, setting->ui.app_indicator); #endif ugtk_tray_icon_set_visible (&app->trayicon, setting->ui.show_trayicon); // ---------------------------------------------------- // large icon if (setting->ui.large_icon) icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR; else icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR; // toolbar gtk_toolbar_set_icon_size ((GtkToolbar*) app->toolbar.self, icon_size); // state list ugtk_node_view_use_large_icon (app->traveler.state.view, setting->ui.large_icon, setting->download_column.width.state); // category list ugtk_node_view_use_large_icon (app->traveler.category.view, setting->ui.large_icon, setting->download_column.width.state); // download list ugtk_node_view_use_large_icon (app->traveler.download.view, setting->ui.large_icon, setting->download_column.width.state); // summary ugtk_node_view_use_large_icon (app->summary.view, setting->ui.large_icon, setting->download_column.width.state); } // decide sensitive for menu, toolbar void ugtk_app_decide_download_sensitive (UgtkApp* app) { GtkTreeSelection* selection; gboolean sensitive; static gboolean sensitive_last = TRUE; gint n_selected; selection = gtk_tree_view_get_selection (app->traveler.download.view); n_selected = gtk_tree_selection_count_selected_rows (selection); if (n_selected > 0) sensitive = TRUE; else sensitive = FALSE; // change sensitive after select/unselect if (sensitive_last != sensitive) { sensitive_last = sensitive; gtk_widget_set_sensitive (app->toolbar.runnable, sensitive); gtk_widget_set_sensitive (app->toolbar.pause, sensitive); gtk_widget_set_sensitive (app->toolbar.properties, sensitive); gtk_widget_set_sensitive (app->menubar.download.open, sensitive); gtk_widget_set_sensitive (app->menubar.download.open_folder, sensitive); gtk_widget_set_sensitive (app->menubar.download.delete, sensitive); gtk_widget_set_sensitive (app->menubar.download.delete_file, sensitive); gtk_widget_set_sensitive (app->menubar.download.force_start, sensitive); gtk_widget_set_sensitive (app->menubar.download.runnable, sensitive); gtk_widget_set_sensitive (app->menubar.download.pause, sensitive); gtk_widget_set_sensitive (app->menubar.download.move_to.item, sensitive); gtk_widget_set_sensitive (app->menubar.download.prioriy.item, sensitive); } // properties if (n_selected > 1) { gtk_widget_set_sensitive (app->toolbar.properties, FALSE); gtk_widget_set_sensitive (app->menubar.download.properties, FALSE); } else { gtk_widget_set_sensitive (app->toolbar.properties, sensitive); gtk_widget_set_sensitive (app->menubar.download.properties, sensitive); } // Move Up/Down/Top/Bottom functions need reset sensitive when selection changed. // These need by on_move_download_xxx() series. if (n_selected > 0) { // Any Category/Status can't move download position if they were sorted. if (app->setting.download_column.sort.nth == UGTK_NODE_COLUMN_STATE) sensitive = TRUE; else sensitive = FALSE; } // move up/down/top/bottom gtk_widget_set_sensitive (app->toolbar.move_up, sensitive); gtk_widget_set_sensitive (app->toolbar.move_down, sensitive); gtk_widget_set_sensitive (app->toolbar.move_top, sensitive); gtk_widget_set_sensitive (app->toolbar.move_bottom, sensitive); gtk_widget_set_sensitive (app->menubar.download.move_up, sensitive); gtk_widget_set_sensitive (app->menubar.download.move_down, sensitive); gtk_widget_set_sensitive (app->menubar.download.move_top, sensitive); gtk_widget_set_sensitive (app->menubar.download.move_bottom, sensitive); } // decide sensitive for menu, toolbar void ugtk_app_decide_category_sensitive (UgtkApp* app) { static gboolean sensitive_last = TRUE; gboolean sensitive; if (app->traveler.category.cursor.node) sensitive = TRUE; else sensitive = FALSE; if (sensitive_last != sensitive) { sensitive_last = sensitive; gtk_widget_set_sensitive (app->menubar.category.properties, sensitive); gtk_widget_set_sensitive (app->menubar.view.columns.self, sensitive); } // cursor at "All Category" if (app->traveler.category.cursor.pos == 0) { gtk_widget_set_sensitive (app->menubar.file.save_category, FALSE); gtk_widget_set_sensitive (app->menubar.category.delete, FALSE); } else { gtk_widget_set_sensitive (app->menubar.file.save_category, sensitive); gtk_widget_set_sensitive (app->menubar.category.delete, sensitive); } // Move Up if (app->traveler.category.cursor.pos <= 1) gtk_widget_set_sensitive (app->menubar.category.move_up, FALSE); else gtk_widget_set_sensitive (app->menubar.category.move_up, TRUE); // Move Down if (app->traveler.category.cursor.pos == 0 || app->traveler.category.cursor.node->next == NULL) { gtk_widget_set_sensitive (app->menubar.category.move_down, FALSE); } else gtk_widget_set_sensitive (app->menubar.category.move_down, TRUE); ugtk_app_decide_download_sensitive (app); } void ugtk_app_decide_trayicon_visible (UgtkApp* app) { gboolean visible; if (app->setting.ui.show_trayicon) visible = TRUE; else { if (gtk_widget_get_visible ((GtkWidget*) app->window.self)) visible = FALSE; else visible = TRUE; } ugtk_tray_icon_set_visible (&app->trayicon, visible); } void ugtk_app_decide_to_quit (UgtkApp* app) { UgtkConfirmDialog* cdialog; if (app->setting.ui.exit_confirmation == FALSE) ugtk_app_quit (app); else if (app->dialogs.exit_confirmation) gtk_widget_show (app->dialogs.exit_confirmation); else { cdialog = ugtk_confirm_dialog_new (UGTK_CONFIRM_DIALOG_EXIT, app); ugtk_confirm_dialog_run (cdialog); } } // ------------------------------------ // create node by UI void ugtk_app_create_category (UgtkApp* app) { UgtkNodeDialog* ndialog; UgetCommon* common_src; UgetCommon* common; UgetNode* cnode_src; UgetNode* cnode; gchar* title; title = g_strconcat (UGTK_APP_NAME, " - ", _("New Category"), NULL); ndialog = ugtk_node_dialog_new (title, app, TRUE); g_free (title); ugtk_download_form_set_folders (&ndialog->download, &app->setting); // category list cnode_src = app->traveler.category.cursor.node->base; if (cnode_src->parent != &app->real) cnode_src = app->real.children; common_src = ug_info_get(cnode_src->info, UgetCommonInfo); cnode = uget_node_new (NULL); common = ug_info_realloc(cnode->info, UgetCommonInfo); ug_info_assign (cnode->info, cnode_src->info, NULL); ug_free(common->name); common->name = ug_strdup_printf("%s%s", _("Copy - "), (common_src->name) ? common_src->name : NULL); ugtk_node_dialog_set (ndialog, cnode->info); ugtk_node_dialog_run (ndialog, UGTK_NODE_DIALOG_NEW_CATEGORY, cnode); } void ugtk_app_create_download (UgtkApp* app, const char* sub_title, const char* uri) { UgtkNodeDialog* ndialog; UgUri uuri; UgetNode* cnode; GList* list; union { gchar* title; UgetNode* cnode; } temp; if (sub_title) temp.title = g_strconcat (UGTK_APP_NAME, " - ", sub_title, NULL); else temp.title = g_strconcat (UGTK_APP_NAME, " - ", _("New Download"), NULL); ndialog = ugtk_node_dialog_new (temp.title, app, FALSE); g_free (temp.title); ugtk_download_form_set_folders (&ndialog->download, &app->setting); // category list cnode = app->traveler.category.cursor.node->base; if (cnode->parent != &app->real) cnode = app->real.children; if (uri != NULL) { // set URI entry gtk_entry_set_text ((GtkEntry*) ndialog->download.uri_entry, uri); ndialog->download.changed.uri = TRUE; // match category by URI ug_uri_init (&uuri, uri); temp.cnode = uget_app_match_category ((UgetApp*) app, &uuri, NULL); if (temp.cnode) cnode = temp.cnode; } else if ( (list = ugtk_clipboard_get_uris (&app->clipboard)) != NULL ) { // use first URI from clipboard to set URI entry gtk_entry_set_text ((GtkEntry*) ndialog->download.uri_entry, list->data); ndialog->download.changed.uri = TRUE; // match category by URI from clipboard ug_uri_init (&uuri, list->data); temp.cnode = uget_app_match_category ((UgetApp*) app, &uuri, NULL); if (temp.cnode) cnode = temp.cnode; // g_list_free_full (list, g_free); ugtk_download_form_complete_entry (&ndialog->download); } if (cnode) cnode = cnode->base; ugtk_node_dialog_set_category (ndialog, cnode); ugtk_node_dialog_run (ndialog, UGTK_NODE_DIALOG_NEW_DOWNLOAD, NULL); } // ------------------------------------ // delete selected node void ugtk_app_delete_category (UgtkApp* app) { UgetNode* cnode; int pos; cnode = app->traveler.category.cursor.node->base; pos = app->traveler.category.cursor.pos; // move cursor if (pos <= 0) return; if (cnode->next) ugtk_traveler_select_category (&app->traveler, pos + 1, -1); else { if (app->real.n_children > 1) ugtk_traveler_select_category (&app->traveler, pos - 1, -1); else { // The last category will be deleted. ugtk_app_add_default_category (app); ugtk_traveler_select_category (&app->traveler, pos + 1, -1); } } // remove category uget_app_delete_category ((UgetApp*) app, cnode); // sync UgtkMenubar.download.move_to ugtk_menubar_sync_category (&app->menubar, app, TRUE); } void ugtk_app_delete_download (UgtkApp* app, gboolean delete_files) { UgetNode* cursor; UgetNode* node; GList* link; GList* list = NULL; // check shift key status GdkWindow* gdk_win; GdkDevice* dev_pointer; GdkModifierType mask; // check shift key status gdk_win = gtk_widget_get_parent_window ((GtkWidget*) app->traveler.download.view); dev_pointer = gdk_device_manager_get_client_pointer ( gdk_display_get_device_manager (gdk_window_get_display (gdk_win))); gdk_window_get_device_position (gdk_win, dev_pointer, NULL, NULL, &mask); cursor = app->traveler.download.cursor.node; if (cursor) cursor = cursor->base; list = ugtk_traveler_get_selected (&app->traveler); for (link = list; link; link = link->next) { node = link->data; node = node->base; link->data = node; if (delete_files || mask & GDK_SHIFT_MASK) uget_app_delete_download ((UgetApp*) app, node, delete_files); else { if (uget_app_recycle_download ((UgetApp*) app, node)) continue; } // if current node has been deleted if (cursor == node) cursor = NULL; link->data = NULL; } if (delete_files == FALSE && (mask & GDK_SHIFT_MASK) == 0) { ugtk_traveler_set_cursor (&app->traveler, cursor); ugtk_traveler_set_selected (&app->traveler, list); } g_list_free (list); // refresh gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); app->user_action = TRUE; } // ------------------------------------ // edit selected node void ugtk_app_edit_category (UgtkApp* app) { UgtkNodeDialog* ndialog; UgetNode* node; gchar* title; if (app->traveler.category.cursor.pos == 0) node = app->real.children; else node = app->traveler.category.cursor.node; if (node == NULL) return; title = g_strconcat (UGTK_APP_NAME " - ", _("Category Properties"), NULL); ndialog = ugtk_node_dialog_new (title, app, TRUE); g_free (title); ugtk_download_form_set_folders (&ndialog->download, &app->setting); ugtk_node_dialog_set (ndialog, node->base->info); ugtk_node_dialog_run (ndialog, UGTK_NODE_DIALOG_EDIT_CATEGORY, node->base); } void ugtk_app_edit_download (UgtkApp* app) { UgtkNodeDialog* ndialog; UgetNode* node; gchar* title; title = g_strconcat (UGTK_APP_NAME " - ", _("Download Properties"), NULL); ndialog = ugtk_node_dialog_new (title, app, FALSE); g_free (title); ugtk_download_form_set_folders (&ndialog->download, &app->setting); node = app->traveler.download.cursor.node; ugtk_node_dialog_set (ndialog, node->base->info); ugtk_node_dialog_run (ndialog, UGTK_NODE_DIALOG_EDIT_DOWNLOAD, node->base); } // ------------------------------------ // queue/pause void ugtk_app_queue_download (UgtkApp* app, gboolean keep_active) { UgetRelation* relation; UgetNode* node; UgetNode* cursor; GList* list; GList* link; cursor = app->traveler.download.cursor.node; if (cursor) cursor = cursor->base; list = ugtk_traveler_get_selected (&app->traveler); for (link = list; link; link = link->next) { node = link->data; node = node->base; link->data = node; relation = ug_info_realloc(node->info, UgetRelationInfo); if (keep_active && relation->group & UGET_GROUP_ACTIVE) continue; uget_app_queue_download ((UgetApp*) app, node); } if (app->traveler.state.cursor.pos == 0) { ugtk_traveler_set_cursor (&app->traveler, cursor); ugtk_traveler_set_selected (&app->traveler, list); } g_list_free (list); // refresh other data & status gtk_widget_queue_draw ((GtkWidget*) app->traveler.download.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); // ugtk_summary_show (&app->summary, app->traveler.download.cursor.node); } void ugtk_app_pause_download (UgtkApp* app) { UgetNode* node; UgetNode* cursor; GList* list; GList* link; cursor = app->traveler.download.cursor.node; if (cursor) cursor = cursor->base; list = ugtk_traveler_get_selected (&app->traveler); for (link = list; link; link = link->next) { node = link->data; node = node->base; link->data = node; uget_app_pause_download ((UgetApp*) app, node); } if (app->traveler.state.cursor.pos == 0) { ugtk_traveler_set_cursor (&app->traveler, cursor); ugtk_traveler_set_selected (&app->traveler, list); } g_list_free (list); // refresh other data & status gtk_widget_queue_draw ((GtkWidget*) app->traveler.download.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); // ugtk_summary_show (&app->summary, app->traveler.download.cursor.node); app->user_action = TRUE; } void ugtk_app_switch_download_state (UgtkApp* app) { UgetRelation* relation; UgetNode* node; UgetNode* cursor; GList* list; GList* link; cursor = app->traveler.download.cursor.node; if (cursor) cursor = cursor->base; list = ugtk_traveler_get_selected (&app->traveler); for (link = list; link; link = link->next) { node = link->data; node = node->base; link->data = node; relation = ug_info_realloc(node->info, UgetRelationInfo); if (relation->group & UGET_GROUP_PAUSED) uget_app_queue_download ((UgetApp*) app, node); else if (relation->group & UGET_GROUP_ACTIVE) uget_app_pause_download ((UgetApp*) app, node); } if (app->traveler.state.cursor.pos == 0) { ugtk_traveler_set_cursor (&app->traveler, cursor); ugtk_traveler_set_selected (&app->traveler, list); } g_list_free (list); // refresh other data & status gtk_widget_queue_draw ((GtkWidget*) app->traveler.download.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); // ugtk_summary_show (&app->summary, app->traveler.download.cursor.node); app->user_action = TRUE; } // ------------------------------------ // move selected node void ugtk_app_move_download_up (UgtkApp* app) { if (ugtk_traveler_move_selected_up (&app->traveler) > 0) { gtk_widget_set_sensitive (app->toolbar.move_down, TRUE); gtk_widget_set_sensitive (app->toolbar.move_bottom, TRUE); gtk_widget_set_sensitive (app->menubar.download.move_down, TRUE); gtk_widget_set_sensitive (app->menubar.download.move_bottom, TRUE); } else { gtk_widget_set_sensitive (app->toolbar.move_up, FALSE); gtk_widget_set_sensitive (app->toolbar.move_top, FALSE); gtk_widget_set_sensitive (app->menubar.download.move_up, FALSE); gtk_widget_set_sensitive (app->menubar.download.move_top, FALSE); } } void ugtk_app_move_download_down (UgtkApp* app) { if (ugtk_traveler_move_selected_down (&app->traveler) > 0) { gtk_widget_set_sensitive (app->toolbar.move_up, TRUE); gtk_widget_set_sensitive (app->toolbar.move_top, TRUE); gtk_widget_set_sensitive (app->menubar.download.move_up, TRUE); gtk_widget_set_sensitive (app->menubar.download.move_top, TRUE); } else { gtk_widget_set_sensitive (app->toolbar.move_down, FALSE); gtk_widget_set_sensitive (app->toolbar.move_bottom, FALSE); gtk_widget_set_sensitive (app->menubar.download.move_down, FALSE); gtk_widget_set_sensitive (app->menubar.download.move_bottom, FALSE); } } void ugtk_app_move_download_top (UgtkApp* app) { if (ugtk_traveler_move_selected_top (&app->traveler) > 0) { gtk_widget_set_sensitive (app->toolbar.move_down, TRUE); gtk_widget_set_sensitive (app->toolbar.move_bottom, TRUE); gtk_widget_set_sensitive (app->menubar.download.move_down, TRUE); gtk_widget_set_sensitive (app->menubar.download.move_bottom, TRUE); } gtk_widget_set_sensitive (app->toolbar.move_up, FALSE); gtk_widget_set_sensitive (app->toolbar.move_top, FALSE); gtk_widget_set_sensitive (app->menubar.download.move_up, FALSE); gtk_widget_set_sensitive (app->menubar.download.move_top, FALSE); } void ugtk_app_move_download_bottom (UgtkApp* app) { if (ugtk_traveler_move_selected_bottom (&app->traveler) > 0) { gtk_widget_set_sensitive (app->toolbar.move_up, TRUE); gtk_widget_set_sensitive (app->toolbar.move_top, TRUE); gtk_widget_set_sensitive (app->menubar.download.move_up, TRUE); gtk_widget_set_sensitive (app->menubar.download.move_top, TRUE); } gtk_widget_set_sensitive (app->toolbar.move_down, FALSE); gtk_widget_set_sensitive (app->toolbar.move_bottom, FALSE); gtk_widget_set_sensitive (app->menubar.download.move_down, FALSE); gtk_widget_set_sensitive (app->menubar.download.move_bottom, FALSE); } void ugtk_app_move_download_to (UgtkApp* app, UgetNode* cnode) { UgetNode* node; GList* link; GList* list = NULL; if (cnode == app->traveler.category.cursor.node->base) return; list = ugtk_traveler_get_selected (&app->traveler); for (link = list; link; link = link->next) { node = link->data; node = node->base; if (node->parent == cnode) continue; uget_node_remove (node->parent, node); uget_node_clear_fake (node); uget_node_append (cnode, node); } g_list_free (list); // refresh gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); } // ------------------------------------ // torrent & metalink static GtkWidget* create_file_chooser (GtkWindow* parent, GtkFileChooserAction action, const gchar* title, const gchar* filter_name, const gchar* mine_type) { GtkWidget* dialog; GtkFileFilter* filter; dialog = gtk_file_chooser_dialog_new (title, parent, action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_window_set_destroy_with_parent ((GtkWindow*) dialog, TRUE); if (filter_name) { filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, filter_name); gtk_file_filter_add_mime_type (filter, mine_type); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); } return dialog; } static void on_create_torrent_response (GtkWidget* dialog, gint response, UgtkApp* app) { gchar* file; if (response != GTK_RESPONSE_OK ) { gtk_widget_destroy (dialog); return; } // get filename file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); // file = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy (dialog); ugtk_app_create_download (app, _("New Torrent"), file); g_free (file); } static void on_create_metalink_response (GtkWidget* dialog, gint response, UgtkApp* app) { gchar* file; if (response != GTK_RESPONSE_OK) { gtk_widget_destroy (dialog); return; } // get filename file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); // file = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy (dialog); ugtk_app_create_download (app, _("New Metalink"), file); g_free (file); } void ugtk_app_create_torrent (UgtkApp* app) { GtkWidget* dialog; gchar* title; title = g_strconcat (UGTK_APP_NAME " - ", _("Open Torrent file"), NULL); dialog = create_file_chooser (app->window.self, GTK_FILE_CHOOSER_ACTION_OPEN, title, _("Torrent file (*.torrent)"), "application/x-bittorrent"); g_free (title); g_signal_connect (dialog, "response", G_CALLBACK (on_create_torrent_response), app); gtk_widget_show (dialog); } void ugtk_app_create_metalink (UgtkApp* app) { GtkFileFilter* filter; GtkWidget* dialog; gchar* title; title = g_strconcat (UGTK_APP_NAME " - ", _("Open Metalink file"), NULL); dialog = create_file_chooser (app->window.self, GTK_FILE_CHOOSER_ACTION_OPEN, title, NULL, NULL); g_free (title); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, "Metalink file (*.metalink, *.meta4)"); gtk_file_filter_add_pattern (filter, "*.metalink"); gtk_file_filter_add_pattern (filter, "*.meta4"); // gtk_file_filter_add_mime_type (filter, "application/metalink+xml"); // gtk_file_filter_add_mime_type (filter, "application/metalink4+xml"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); g_signal_connect (dialog, "response", G_CALLBACK (on_create_metalink_response), app); gtk_widget_show (dialog); } // ------------------------------------ // import/export static void on_save_category_response (GtkWidget* dialog, gint response, UgtkApp* app) { UgetNode* cnode; gchar* file; gtk_widget_set_sensitive ((GtkWidget*) app->window.self, TRUE); if (response != GTK_RESPONSE_OK) { gtk_widget_destroy (dialog); return; } if (app->traveler.category.cursor.pos == 0) return; // get filename file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); // file = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy (dialog); cnode = app->traveler.category.cursor.node; if (uget_app_save_category ((UgetApp*) app, cnode->base, file, NULL) == FALSE) ugtk_app_show_message (app, GTK_MESSAGE_ERROR, _("Failed to save category file.")); g_free (file); } static void on_load_category_response (GtkWidget* dialog, gint response, UgtkApp* app) { gchar* file; gtk_widget_set_sensitive ((GtkWidget*) app->window.self, TRUE); if (response != GTK_RESPONSE_OK) { gtk_widget_destroy (dialog); return; } // get filename file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); // file = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy (dialog); if (uget_app_load_category ((UgetApp*) app, file, NULL)) ugtk_menubar_sync_category (&app->menubar, app, TRUE); else ugtk_app_show_message (app, GTK_MESSAGE_ERROR, _("Failed to load category file.")); g_free (file); } void ugtk_app_save_category (UgtkApp* app) { GtkWidget* dialog; gchar* title; gtk_widget_set_sensitive ((GtkWidget*) app->window.self, FALSE); title = g_strconcat (UGTK_APP_NAME " - ", _("Save Category file"), NULL); dialog = create_file_chooser (app->window.self, GTK_FILE_CHOOSER_ACTION_SAVE, title, NULL, NULL); g_free (title); g_signal_connect (dialog, "response", G_CALLBACK (on_save_category_response), app); gtk_widget_show (dialog); } void ugtk_app_load_category (UgtkApp* app) { GtkWidget* dialog; gchar* title; gtk_widget_set_sensitive ((GtkWidget*) app->window.self, FALSE); title = g_strconcat (UGTK_APP_NAME " - ", _("Open Category file"), NULL); dialog = create_file_chooser (app->window.self, GTK_FILE_CHOOSER_ACTION_OPEN, title, _("JSON file (*.json)"), "application/json"); g_free (title); g_signal_connect (dialog, "response", G_CALLBACK (on_load_category_response), app); gtk_widget_show (dialog); } static void on_import_html_file_response (GtkWidget* dialog, gint response, UgtkApp* app) { UgHtmlFilter* filter; UgHtmlFilterTag* tag_a; UgHtmlFilterTag* tag_img; UgtkBatchDialog* bdialog; UgtkSelectorPage* page; UgetNode* cnode; gchar* string; gchar* file; if (response != GTK_RESPONSE_OK ) { gtk_widget_destroy (dialog); return; } // read URLs from html file string = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy (dialog); file = g_filename_to_utf8 (string, -1, NULL, NULL, NULL); g_free (string); string = NULL; // parse html filter = ug_html_filter_new (); tag_a = ug_html_filter_tag_new ("A", "HREF"); // ug_html_filter_add_tag (filter, tag_a); tag_img = ug_html_filter_tag_new ("IMG", "SRC"); // ug_html_filter_add_tag (filter, tag_img); ug_html_filter_parse_file (filter, file); g_free (file); if (filter->base_href) string = g_strdup (filter->base_href); ug_html_filter_free (filter); // UgtkBatchDialog bdialog = ugtk_batch_dialog_new ( gtk_window_get_title ((GtkWindow*) dialog), app); ugtk_download_form_set_folders (&bdialog->download, &app->setting); ugtk_batch_dialog_use_selector (bdialog); // category cnode = app->traveler.category.cursor.node->base; if (cnode->parent != &app->real) cnode = app->real.children; ugtk_batch_dialog_set_category (bdialog, cnode); // set if (string) { gtk_entry_set_text (bdialog->selector.href_entry, string); g_free (string); } // add link page = ugtk_selector_add_page (&bdialog->selector, _("Link ")); ugtk_selector_page_add_uris (page, (GList*)tag_a->attr_values.head); ug_list_clear (&tag_a->attr_values, TRUE); ug_html_filter_tag_unref (tag_a); // add image page = ugtk_selector_add_page (&bdialog->selector, _("Image ")); ugtk_selector_page_add_uris (page, (GList*)tag_img->attr_values.head); ug_list_clear (&tag_img->attr_values, TRUE); ug_html_filter_tag_unref (tag_img); ugtk_batch_dialog_run (bdialog); } static void on_import_text_file_response (GtkWidget* dialog, gint response, UgtkApp* app) { UgtkBatchDialog* bdialog; UgtkSelectorPage* page; UgetNode* cnode; gchar* string; gchar* file; GList* list; GError* error = NULL; if (response != GTK_RESPONSE_OK ) { gtk_widget_destroy (dialog); return; } // read URLs from text file string = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy (dialog); file = g_filename_to_utf8 (string, -1, NULL, NULL, NULL); g_free (string); list = ugtk_text_file_get_uris (file, &error); g_free (file); if (error) { ugtk_app_show_message (app, GTK_MESSAGE_ERROR, error->message); g_error_free (error); return; } // UgtkBatchDialog bdialog = ugtk_batch_dialog_new ( gtk_window_get_title ((GtkWindow*) dialog), app); ugtk_batch_dialog_use_selector (bdialog); ugtk_download_form_set_folders (&bdialog->download, &app->setting); // category cnode = app->traveler.category.cursor.node->base; if (cnode->parent != &app->real) cnode = app->real.children; ugtk_batch_dialog_set_category (bdialog, cnode); page = ugtk_selector_add_page (&bdialog->selector, _("Text File")); ugtk_selector_hide_href (&bdialog->selector); ugtk_selector_page_add_uris (page, list); g_list_free (list); ugtk_batch_dialog_run (bdialog); } static void on_export_text_file_response (GtkWidget* dialog, gint response, UgtkApp* app) { GIOChannel* channel; UgetCommon* common; UgetNode* node; gchar* fname; if (response != GTK_RESPONSE_OK ) { gtk_widget_destroy (dialog); return; } // write all URLs to text file fname = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy (dialog); channel = g_io_channel_new_file (fname, "w", NULL); g_free (fname); node = app->traveler.category.cursor.node->base; for (node = node->children; node; node = node->next) { common = ug_info_get (node->info, UgetCommonInfo); if (common == NULL) continue; if (common->uri) { g_io_channel_write_chars (channel, common->uri, -1, NULL, NULL); #ifdef _WIN32 g_io_channel_write_chars (channel, "\r\n", 2, NULL, NULL); #else g_io_channel_write_chars (channel, "\n", 1, NULL, NULL); #endif } } g_io_channel_unref (channel); } void ugtk_app_import_html_file (UgtkApp* app) { GtkWidget* dialog; gchar* title; title = g_strconcat (UGTK_APP_NAME " - ", _("Import URLs from HTML file"), NULL); dialog = create_file_chooser (app->window.self, GTK_FILE_CHOOSER_ACTION_OPEN, title, _("HTML file (*.htm, *.html)"), "text/html"); g_free (title); g_signal_connect (dialog, "response", G_CALLBACK (on_import_html_file_response), app); gtk_widget_show (dialog); } void ugtk_app_import_text_file (UgtkApp* app) { GtkWidget* dialog; gchar* title; title = g_strconcat (UGTK_APP_NAME " - ", _("Import URLs from text file"), NULL); dialog = create_file_chooser (app->window.self, GTK_FILE_CHOOSER_ACTION_OPEN, title, _("Plain text file"), "text/plain"); g_free (title); g_signal_connect (dialog, "response", G_CALLBACK (on_import_text_file_response), app); gtk_widget_show (dialog); } void ugtk_app_export_text_file (UgtkApp* app) { GtkWidget* dialog; gchar* title; title = g_strconcat (UGTK_APP_NAME " - ", _("Export URLs to text file"), NULL); dialog = create_file_chooser (app->window.self, GTK_FILE_CHOOSER_ACTION_SAVE, title, NULL, NULL); g_free (title); g_signal_connect (dialog, "response", G_CALLBACK (on_export_text_file_response), app); gtk_widget_show (dialog); } // ------------------------------------ // batch void ugtk_app_sequence_batch (UgtkApp* app) { UgtkBatchDialog* bdialog; UgetNode* cnode; gchar* title; title = g_strconcat (UGTK_APP_NAME " - ", _("URL Sequence batch"), NULL); bdialog = ugtk_batch_dialog_new (title, app); g_free (title); ugtk_batch_dialog_use_sequencer (bdialog); ugtk_download_form_set_folders (&bdialog->download, &app->setting); // category list cnode = app->traveler.category.cursor.node->base; if (cnode->parent != &app->real) cnode = app->real.children; ugtk_batch_dialog_set_category (bdialog, cnode); ugtk_batch_dialog_run (bdialog); } void ugtk_app_clipboard_batch (UgtkApp* app) { UgtkBatchDialog* bdialog; UgtkSelectorPage* page; UgetNode* cnode; GList* list; gchar* title; list = ugtk_clipboard_get_uris (&app->clipboard); if (list == NULL) { ugtk_app_show_message (app, GTK_MESSAGE_ERROR, _("No URLs found in clipboard.")); return; } // filter existing if (app->setting.ui.skip_existing) { if (ugtk_app_filter_existing (app, list) == 0) { // g_list_foreach (list, (GFunc) g_free, NULL); g_list_free (list); ugtk_app_show_message (app, GTK_MESSAGE_INFO, _("All URLs had existed.")); return; } } title = g_strconcat (UGTK_APP_NAME " - ", _("Clipboard batch"), NULL); bdialog = ugtk_batch_dialog_new (title, app); g_free (title); ugtk_download_form_set_folders (&bdialog->download, &app->setting); ugtk_batch_dialog_use_selector (bdialog); // selector ugtk_selector_hide_href (&bdialog->selector); page = ugtk_selector_add_page (&bdialog->selector, _("Clipboard")); ugtk_selector_page_add_uris (page, list); g_list_free (list); // category list cnode = app->traveler.category.cursor.node->base; if (cnode->parent != &app->real) cnode = app->real.children; ugtk_batch_dialog_set_category (bdialog, cnode); ugtk_batch_dialog_run (bdialog); } int ugtk_app_filter_existing (UgtkApp* app, GList* uris) { int counts; for (counts = 0; uris; uris = uris->next) { if (uris->data == NULL) continue; if (uget_uri_hash_find (app->uri_hash, (char*) uris->data) == FALSE) counts++; else { g_free (uris->data); uris->data = NULL; } } return counts; } // ------------------------------------ // emit signal "row-changed" for UgtkNodeTree and UgtkNodeList void ugtk_app_download_changed (UgtkApp* app, UgetNode* dnode) { GtkTreeModel* model; GtkTreePath* path; GtkTreeIter iter; if (ugtk_traveler_get_iter (&app->traveler, &iter, dnode)) { model = GTK_TREE_MODEL (app->traveler.download.model); path = gtk_tree_model_get_path (model, &iter); if (path) { gtk_tree_model_row_changed (model, path, &iter); gtk_tree_path_free (path); } } } void ugtk_app_category_changed (UgtkApp* app, UgetNode* cnode) { GtkTreeIter iter; GtkTreePath* path; GtkTreeModel* model; model = GTK_TREE_MODEL (app->traveler.category.model); if (app->traveler.category.cursor.pos > 0) { iter.stamp = app->traveler.category.model->stamp; iter.user_data = cnode; // update category path = gtk_tree_model_get_path (model, &iter); gtk_tree_model_row_changed (model, path, &iter); gtk_tree_path_free (path); } // update "All Category" path = gtk_tree_path_new_first (); gtk_tree_model_get_iter_first (model, &iter); gtk_tree_model_row_changed (model, path, &iter); gtk_tree_path_free (path); // refresh status list gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); } void ugtk_app_add_default_category (UgtkApp* app) { UgetNode* cnode; UgetCommon* common; UgetCategory* category; static int counts = 0; cnode = uget_node_new (NULL); common = ug_info_realloc (cnode->info, UgetCommonInfo); common->name = ug_strdup_printf ("%s %d", _("New"), counts++); common->folder = ug_strdup (g_get_home_dir ()); category = ug_info_realloc (cnode->info, UgetCategoryInfo); *(char**)ug_array_alloc (&category->schemes, 1) = ug_strdup ("ftps"); *(char**)ug_array_alloc (&category->schemes, 1) = ug_strdup ("magnet"); *(char**)ug_array_alloc (&category->hosts, 1) = ug_strdup (".edu"); *(char**)ug_array_alloc (&category->hosts, 1) = ug_strdup (".idv"); *(char**)ug_array_alloc (&category->file_exts, 1) = ug_strdup ("torrent"); *(char**)ug_array_alloc (&category->file_exts, 1) = ug_strdup ("metalink"); uget_app_add_category ((UgetApp*) app, cnode, TRUE); } // ------------------------------------ // others static void on_message_response (GtkWidget* dialog, gint response, GtkWidget** value) { gtk_widget_destroy (dialog); *value = NULL; } void ugtk_app_show_message (UgtkApp* app, GtkMessageType type, const gchar* message) { GtkWidget* dialog; GtkWidget** value; gchar* title; dialog = gtk_message_dialog_new (app->window.self, GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_OK, "%s", message); // set title switch (type) { case GTK_MESSAGE_ERROR: if (app->dialogs.error) gtk_widget_destroy (app->dialogs.error); app->dialogs.error = dialog; value = &app->dialogs.error; title = g_strconcat (UGTK_APP_NAME " - ", _("Error"), NULL); break; default: if (app->dialogs.message) gtk_widget_destroy (app->dialogs.message); app->dialogs.message = dialog; value = &app->dialogs.message; title = g_strconcat (UGTK_APP_NAME " - ", _("Message"), NULL); break; } gtk_window_set_title ((GtkWindow*) dialog, title); g_free (title); // signal handler g_signal_connect (dialog, "response", G_CALLBACK (on_message_response), value); gtk_widget_show (dialog); } // ------------------------------------------------------- // UgtkClipboard void ugtk_clipboard_init (struct UgtkClipboard* clipboard, const gchar* pattern) { clipboard->self = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); clipboard->text = NULL; clipboard->regex = g_regex_new (pattern, G_REGEX_CASELESS, 0, NULL); clipboard->website = TRUE; } void ugtk_clipboard_set_pattern (struct UgtkClipboard* clipboard, const gchar* pattern) { if (clipboard->regex) g_regex_unref (clipboard->regex); if (pattern) clipboard->regex = g_regex_new (pattern, G_REGEX_CASELESS, 0, NULL); else clipboard->regex = g_regex_new ("", G_REGEX_CASELESS, 0, NULL); } void ugtk_clipboard_set_text (struct UgtkClipboard* clipboard, gchar* text) { g_free (clipboard->text); clipboard->text = text; gtk_clipboard_set_text (clipboard->self, text, -1); } GList* ugtk_clipboard_get_uris (struct UgtkClipboard* clipboard) { GList* list; gchar* text; if (gtk_clipboard_wait_is_text_available (clipboard->self) == FALSE) return NULL; text = gtk_clipboard_wait_for_text (clipboard->self); if (text == NULL) return NULL; // get URIs that scheme is not "file" from text list = ugtk_text_get_uris (text); list = ugtk_uri_list_remove_scheme (list, "file"); g_free (text); return list; } GList* ugtk_clipboard_get_matched (struct UgtkClipboard* clipboard, const gchar* text) { GList* link; GList* list; gchar* temp; if (text == NULL) { g_free (clipboard->text); clipboard->text = NULL; return NULL; } // compare temp = (clipboard->text) ? clipboard->text : ""; if (g_ascii_strcasecmp (text, temp) == 0) return NULL; // replace text g_free (clipboard->text); clipboard->text = g_strdup (text); // get and filter list list = ugtk_text_get_uris (text); list = ugtk_uri_list_remove_scheme (list, "file"); // filter by filename extension for (link = list; link; link = link->next) { temp = ug_filename_from_uri (link->data); // get filename extension if (temp) text = strrchr (temp, '.'); else text = NULL; // free URIs if not matched if (text == NULL || g_regex_match (clipboard->regex, text+1, 0, NULL) == FALSE) { // storage or media website if (clipboard->website == FALSE || uget_site_get_id (link->data) == UGET_SITE_UNKNOWN) { g_free (link->data); link->data = NULL; } } ug_free (temp); } list = g_list_remove_all (list, NULL); return list; } // ------------------------------------------------------- // UgtkStatusbar void ugtk_statusbar_set_info (struct UgtkStatusbar* statusbar, gint n_selected) { static guint context_id = 0; gchar* string; if (context_id == 0) context_id = gtk_statusbar_get_context_id (statusbar->self, "selected"); gtk_statusbar_pop (statusbar->self, context_id); if (n_selected > 0) { string = g_strdup_printf (_("Selected %d items"), n_selected); gtk_statusbar_push (statusbar->self, context_id, string); g_free (string); } } void ugtk_statusbar_set_speed (struct UgtkStatusbar* statusbar, gint64 down_speed, gint64 up_speed) { char* string; string = ug_str_from_int_unit (down_speed, "/s"); gtk_label_set_text (statusbar->down_speed, string); ug_free (string); string = ug_str_from_int_unit (up_speed, "/s"); gtk_label_set_text (statusbar->up_speed, string); ug_free (string); } uget-2.2.3/ui-gtk/UgtkNodeDialog.c0000664000175000017500000005032713602733704013625 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include // UI static void ugtk_node_dialog_init_ui (UgtkNodeDialog* ndialog, gboolean has_category_form); static void ugtk_node_dialog_init_list_ui (UgtkNodeDialog* ndialog, UgetNode* root); // Callback static void on_cursor_changed (GtkTreeView* view, UgtkNodeDialog* ndialog); static void after_uri_entry_changed (GtkEditable *editable, UgtkNodeDialog* ndialog); static void on_response_new_category (GtkDialog *dialog, gint response_id, UgtkNodeDialog* ndialog); static void on_response_new_download (GtkDialog *dialog, gint response_id, UgtkNodeDialog* ndialog); static void on_response_edit_category (GtkDialog *dialog, gint response_id, UgtkNodeDialog* ndialog); static void on_response_edit_download (GtkDialog *dialog, gint response_id, UgtkNodeDialog* ndialog); // Callback for Main Window operate static void on_category_row_changed (GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, UgtkNodeDialog* ndialog); static void on_category_row_deleted (GtkTreeModel* model, GtkTreePath* path, UgtkNodeDialog* ndialog); static void on_category_row_inserted (GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, UgtkNodeDialog* ndialog); // ---------------------------------------------------------------------------- // UgtkNodeDialog void ugtk_node_dialog_init (UgtkNodeDialog* ndialog, const char* title, UgtkApp* app, gboolean has_category_form) { GtkWindow* window; int sensitive; int width, height, temp; ugtk_node_dialog_init_ui (ndialog, has_category_form); ndialog->app = app; // decide width if (app->setting.window.category) { gtk_widget_get_size_request (ndialog->notebook, &width, &height); temp = gtk_paned_get_position (ndialog->app->window.hpaned); temp = temp * 5 / 3; // (temp * 1.666) if (width < temp) gtk_widget_set_size_request (ndialog->notebook, temp, height); } window = (GtkWindow*) ndialog->self; gtk_window_set_transient_for (window, app->window.self); gtk_window_set_destroy_with_parent (window, TRUE); if (title) gtk_window_set_title (window, title); #if GTK_MAJOR_VERSION <= 3 && GTK_MINOR_VERSION < 14 gtk_window_set_has_resize_grip (window, FALSE); #endif // decide sensitive by plug-in matching order switch (app->setting.plugin_order) { default: case UGTK_PLUGIN_ORDER_ARIA2: case UGTK_PLUGIN_ORDER_ARIA2_CURL: sensitive = FALSE; break; case UGTK_PLUGIN_ORDER_CURL: case UGTK_PLUGIN_ORDER_CURL_ARIA2: sensitive = TRUE; break; } gtk_widget_set_sensitive ((GtkWidget*) ndialog->download.cookie_label, sensitive); gtk_widget_set_sensitive ((GtkWidget*) ndialog->download.cookie_entry, sensitive); gtk_widget_set_sensitive ((GtkWidget*) ndialog->download.post_label, sensitive); gtk_widget_set_sensitive ((GtkWidget*) ndialog->download.post_entry, sensitive); } UgtkNodeDialog* ugtk_node_dialog_new (const char* title, UgtkApp* app, gboolean has_category_form) { UgtkNodeDialog* ndialog; ndialog = g_malloc0 (sizeof (UgtkNodeDialog)); ugtk_node_dialog_init (ndialog, title, app, has_category_form); // OK & cancel buttons gtk_dialog_add_button (ndialog->self, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_dialog_add_button (ndialog->self, GTK_STOCK_OK, GTK_RESPONSE_OK); gtk_dialog_set_default_response (ndialog->self, GTK_RESPONSE_OK); return ndialog; } void ugtk_node_dialog_free (UgtkNodeDialog* ndialog) { ugtk_node_dialog_set_category (ndialog, NULL); gtk_widget_destroy (GTK_WIDGET (ndialog->self)); g_free (ndialog); } void ugtk_node_dialog_run (UgtkNodeDialog* ndialog, UgtkNodeDialogMode mode, UgetNode* node) { if (node) { ndialog->node = node; ndialog->node_info = node->info; ug_info_ref(node->info); } switch (mode) { case UGTK_NODE_DIALOG_NEW_DOWNLOAD: ugtk_node_dialog_apply_recent (ndialog, ndialog->app); g_signal_connect (ndialog->self, "response", G_CALLBACK (on_response_new_download), ndialog); break; case UGTK_NODE_DIALOG_NEW_CATEGORY: gtk_window_resize ((GtkWindow*) ndialog->self, 300, 380); g_signal_connect (ndialog->self, "response", G_CALLBACK (on_response_new_category), ndialog); break; case UGTK_NODE_DIALOG_EDIT_DOWNLOAD: g_signal_connect (ndialog->self, "response", G_CALLBACK (on_response_edit_download), ndialog); break; case UGTK_NODE_DIALOG_EDIT_CATEGORY: gtk_window_resize ((GtkWindow*) ndialog->self, 300, 380); g_signal_connect (ndialog->self, "response", G_CALLBACK (on_response_edit_category), ndialog); break; } ugtk_node_dialog_monitor_uri (ndialog); // gtk_dialog_run (ndialog->self); gtk_widget_show ((GtkWidget*) ndialog->self); // g_signal_connect (ndialog->button_back, "clicked", // G_CALLBACK (on_button_back), ndialog); // g_signal_connect (ndialog->button_forward, "clicked", // G_CALLBACK (on_button_forward), ndialog); } void ugtk_node_dialog_monitor_uri (UgtkNodeDialog* ndialog) { GtkEditable* editable; if (gtk_widget_get_sensitive (ndialog->download.uri_entry)) { gtk_dialog_set_response_sensitive (ndialog->self, GTK_RESPONSE_OK, ndialog->download.completed); editable = GTK_EDITABLE (ndialog->download.uri_entry); g_signal_connect_after (editable, "changed", G_CALLBACK (after_uri_entry_changed), ndialog); } } gboolean ugtk_node_dialog_confirm_existing (UgtkNodeDialog* ndialog, const char* uri) { GtkWidget* dialog; gboolean existing; int response; char* title; existing = uget_uri_hash_find (ndialog->app->uri_hash, uri); if (existing) { dialog = gtk_message_dialog_new ((GtkWindow*) ndialog->self, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("URI had existed")); gtk_message_dialog_format_secondary_text ((GtkMessageDialog*) dialog, "%s", _("This URI had existed, are you sure to continue?")); // title title = g_strconcat ("uGet - ", _("URI had existed"), NULL); gtk_window_set_title ((GtkWindow*) dialog, title); g_free (title); // run and get response response = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); if (response == GTK_RESPONSE_NO) return FALSE; } return TRUE; } void ugtk_node_dialog_store_recent (UgtkNodeDialog* ndialog, UgtkApp* app) { GtkTreePath* path; int nth; app->recent.saved = TRUE; gtk_tree_view_get_cursor (ndialog->node_view, &path, NULL); if (path != NULL) { nth = *gtk_tree_path_get_indices (path); app->recent.category_index = nth; gtk_tree_path_free (path); } ugtk_download_form_get(&ndialog->download, app->recent.info); } void ugtk_node_dialog_apply_recent (UgtkNodeDialog* ndialog, UgtkApp* app) { GtkTreePath* path; if (app->recent.saved && app->setting.ui.apply_recent) { path = gtk_tree_path_new_from_indices (app->recent.category_index, -1); gtk_tree_view_set_cursor (ndialog->node_view, path, NULL, FALSE); gtk_tree_path_free (path); ndialog->download.changed.uri = TRUE; ugtk_download_form_set(&ndialog->download, app->recent.info, TRUE); } } void ugtk_node_dialog_set_category (UgtkNodeDialog* ndialog, UgetNode* cnode) { GtkTreeModel* model; GtkTreePath* path; int nth; if (cnode == NULL) { if (ndialog->node_tree == NULL) return; model = GTK_TREE_MODEL (ndialog->app->traveler.category.model); for (nth = 0; nth < 3; nth++) g_signal_handler_disconnect (model, ndialog->handler_id[nth]); return; } nth = uget_node_child_position (cnode->parent, cnode); ugtk_node_dialog_init_list_ui (ndialog, cnode->parent); g_signal_connect (ndialog->node_view, "cursor-changed", G_CALLBACK (on_cursor_changed), ndialog); path = gtk_tree_path_new_from_indices (nth, -1); gtk_tree_view_set_cursor (ndialog->node_view, path, NULL, FALSE); gtk_tree_path_free (path); // signal model = GTK_TREE_MODEL (ndialog->app->traveler.category.model); ndialog->handler_id[0] = g_signal_connect (model, "row-changed", G_CALLBACK (on_category_row_changed), ndialog); ndialog->handler_id[1] = g_signal_connect (model, "row-deleted", G_CALLBACK (on_category_row_deleted), ndialog); ndialog->handler_id[2] = g_signal_connect (model, "row-inserted", G_CALLBACK (on_category_row_inserted), ndialog); } int ugtk_node_dialog_get_category (UgtkNodeDialog* ndialog, UgetNode** cnode) { GtkTreePath* path; int nth; if (ndialog->node_tree == NULL) { *cnode = NULL; return -1; } gtk_tree_view_get_cursor (ndialog->node_view, &path, NULL); nth = *gtk_tree_path_get_indices (path); gtk_tree_path_free (path); *cnode = uget_node_nth_child (ndialog->node_tree->root, nth); return nth; } void ugtk_node_dialog_set (UgtkNodeDialog* ndialog, UgInfo* node_info) { ugtk_proxy_form_set(&ndialog->proxy, node_info, FALSE); ugtk_download_form_set(&ndialog->download, node_info, FALSE); if (ndialog->category.self) ugtk_category_form_set(&ndialog->category, node_info); } void ugtk_node_dialog_get (UgtkNodeDialog* ndialog, UgInfo* node_info) { ugtk_proxy_form_get(&ndialog->proxy, node_info); ugtk_download_form_get(&ndialog->download, node_info); if (ndialog->category.self) ugtk_category_form_get(&ndialog->category, node_info); } // ---------------------------------------------------------------------------- // UI static void ugtk_node_dialog_init_ui (UgtkNodeDialog* ndialog, gboolean has_category_form) { GtkNotebook* notebook; GtkWidget* widget; GtkBox* box; ndialog->self = (GtkDialog*) gtk_dialog_new (); // content box = (GtkBox*) gtk_dialog_get_content_area (ndialog->self); widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (box, widget, TRUE, TRUE, 0); ndialog->hbox = (GtkBox*) widget; widget = gtk_notebook_new (); gtk_box_pack_end (ndialog->hbox, widget, TRUE, TRUE, 1); ndialog->notebook = widget; notebook = (GtkNotebook*) widget; gtk_widget_show_all (GTK_WIDGET (box)); // Download form (Page 1, 2) ugtk_proxy_form_init (&ndialog->proxy); ugtk_download_form_init (&ndialog->download, &ndialog->proxy, (GtkWindow*) ndialog->self); if (has_category_form == FALSE) { // UGTK_NODE_DIALOG_DOWNLOAD gtk_notebook_append_page (notebook, ndialog->download.page1, gtk_label_new (_("General"))); gtk_notebook_append_page (notebook, ndialog->download.page2, gtk_label_new (_("Advanced"))); // set focus widget gtk_window_set_focus (GTK_WINDOW (ndialog->self), ndialog->download.uri_entry); } else { // UGTK_NODE_DIALOG_CATEGORY ugtk_category_form_init (&ndialog->category); gtk_notebook_append_page (notebook, ndialog->category.self, gtk_label_new (_("Category settings"))); gtk_notebook_append_page (notebook, ndialog->download.page1, gtk_label_new (_("Default for new download 1"))); gtk_notebook_append_page (notebook, ndialog->download.page2, gtk_label_new (_("Default 2"))); // hide field URI, mirrors, and rename ugtk_download_form_set_multiple (&ndialog->download, TRUE); // set focus widget gtk_window_set_focus (GTK_WINDOW (ndialog->self), ndialog->category.name_entry); } // gtk_widget_show (GTK_WIDGET (notebook)); } static void ugtk_node_dialog_init_list_ui (UgtkNodeDialog* ndialog, UgetNode* root) { GtkTreeModel* model; GtkWidget* scrolled; GtkBox* vbox; int width; // decide width if (ndialog->app->setting.window.category) width = gtk_paned_get_position (ndialog->app->window.hpaned); else width = 165; ndialog->node_tree = ugtk_node_tree_new (root, TRUE); ndialog->node_view = (GtkTreeView*) ugtk_node_view_new_for_category (); model = GTK_TREE_MODEL (ndialog->node_tree); gtk_tree_view_set_model (ndialog->node_view, model); ugtk_node_view_use_large_icon (ndialog->node_view, ndialog->app->setting.ui.large_icon, ndialog->app->setting.download_column.width.state); scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request (scrolled, width, 200); gtk_widget_show (scrolled); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scrolled), GTK_WIDGET (ndialog->node_view)); // pack vbox vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_box_pack_start (vbox, gtk_label_new (_("Category")), FALSE, FALSE, 0); gtk_box_pack_start (vbox, (GtkWidget*) scrolled, TRUE, TRUE, 0); gtk_box_pack_start (ndialog->hbox, (GtkWidget*) vbox, FALSE, FALSE, 1); gtk_widget_show_all ((GtkWidget*) vbox); } // ---------------------------------------------------------------------------- // Callback static void on_cursor_changed (GtkTreeView* view, UgtkNodeDialog* ndialog) { GtkTreeModel* model; GtkTreePath* path; GtkTreeIter iter; UgetNode* node; // apply settings model = gtk_tree_view_get_model (view); gtk_tree_view_get_cursor (view, &path, NULL); if (path == NULL) return; gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); node = iter.user_data; ugtk_proxy_form_set(&ndialog->proxy, node->info, TRUE); ugtk_download_form_set(&ndialog->download, node->info, TRUE); } static void after_uri_entry_changed (GtkEditable *editable, UgtkNodeDialog* ndialog) { gtk_dialog_set_response_sensitive (ndialog->self, GTK_RESPONSE_OK, ndialog->download.completed); } static void on_response_new_category (GtkDialog *dialog, gint response_id, UgtkNodeDialog* ndialog) { UgetNode* cnode; if (response_id == GTK_RESPONSE_OK) { cnode = uget_node_new (NULL); ugtk_node_dialog_get(ndialog, cnode->info); uget_app_add_category ((UgetApp*) ndialog->app, cnode, TRUE); ugtk_app_decide_category_sensitive (ndialog->app); ugtk_download_form_get_folders (&ndialog->download, &ndialog->app->setting); } if (ndialog->node_info) ug_info_unref(ndialog->node_info); ugtk_node_dialog_free (ndialog); } static void on_response_new_download (GtkDialog *dialog, gint response_id, UgtkNodeDialog* ndialog) { UgetNode* cnode; UgetNode* dnode; const char* uri; if (response_id == GTK_RESPONSE_OK) { ugtk_node_dialog_store_recent (ndialog, ndialog->app); dnode = uget_node_new (NULL); ugtk_node_dialog_get(ndialog, dnode->info); ugtk_node_dialog_get_category (ndialog, &cnode); uri = gtk_entry_get_text ((GtkEntry*) ndialog->download.uri_entry); if (ugtk_node_dialog_confirm_existing (ndialog, uri)) { uget_app_add_download ((UgetApp*) ndialog->app, dnode, cnode, FALSE); ugtk_download_form_get_folders (&ndialog->download, &ndialog->app->setting); } } if (ndialog->node_info) ug_info_unref(ndialog->node_info); ugtk_node_dialog_free (ndialog); } static void on_response_edit_category (GtkDialog *dialog, gint response_id, UgtkNodeDialog* ndialog) { UgtkApp* app; if (response_id == GTK_RESPONSE_OK && ndialog->node_info) { app = ndialog->app; ugtk_node_dialog_get(ndialog, ndialog->node_info); // if ndialog->node_info->ref_count == 1, ndialog->node is freed by App if (ndialog->node_info->ref_count > 1) ugtk_app_category_changed(app, ndialog->node); ug_info_unref(ndialog->node_info); ugtk_download_form_get_folders (&ndialog->download, &app->setting); } ugtk_node_dialog_free (ndialog); } static void on_response_edit_download (GtkDialog *dialog, gint response_id, UgtkNodeDialog* ndialog) { UgtkApp* app; if (response_id == GTK_RESPONSE_OK && ndialog->node_info) { app = ndialog->app; uget_uri_hash_remove_download(app->uri_hash, ndialog->node_info); ugtk_node_dialog_get(ndialog, ndialog->node_info); uget_uri_hash_add_download(app->uri_hash, ndialog->node_info); // if ndialog->node_info->ref_count == 1, ndialog->node is freed by App if (ndialog->node_info->ref_count > 1) { ugtk_traveler_reserve_selection (&app->traveler); uget_app_reset_download_name((UgetApp*) app, ndialog->node); ugtk_traveler_restore_selection (&app->traveler); } ug_info_unref(ndialog->node_info); ugtk_download_form_get_folders (&ndialog->download, &app->setting); } ugtk_node_dialog_free (ndialog); } // ---------------------------------------------------------------------------- // Callback for Main Window operate static void on_category_row_changed (GtkTreeModel* model, GtkTreePath* path_mw, GtkTreeIter* iter_mw, UgtkNodeDialog* ndialog) { GtkTreePath* path; GtkTreeIter* iter; path = gtk_tree_path_copy (path_mw); iter = gtk_tree_iter_copy (iter_mw); iter->stamp = ndialog->node_tree->stamp; gtk_tree_path_prev (path); gtk_tree_model_row_changed (GTK_TREE_MODEL (ndialog->node_tree), path, iter); gtk_tree_path_free (path); gtk_tree_iter_free (iter); } static void on_category_row_deleted (GtkTreeModel* model, GtkTreePath* path_mw, UgtkNodeDialog* ndialog) { GtkTreePath* path; path = gtk_tree_path_copy (path_mw); gtk_tree_path_prev (path); gtk_tree_model_row_deleted (GTK_TREE_MODEL (ndialog->node_tree), path); gtk_tree_path_free (path); } static void on_category_row_inserted (GtkTreeModel* model, GtkTreePath* path_mw, GtkTreeIter* iter_mw, UgtkNodeDialog* ndialog) { GtkTreePath* path; GtkTreeIter* iter; path = gtk_tree_path_copy (path_mw); iter = gtk_tree_iter_copy (iter_mw); iter->stamp = ndialog->node_tree->stamp; gtk_tree_path_prev (path); gtk_tree_model_row_inserted (GTK_TREE_MODEL (ndialog->node_tree), path, iter); gtk_tree_path_free (path); gtk_tree_iter_free (iter); } uget-2.2.3/ui-gtk/Makefile.am0000664000175000017500000000337013602733704012651 00000000000000bin_PROGRAMS = uget-gtk uget_gtk_CPPFLAGS = \ -DUG_DATADIR='"$(datadir)"' \ -I$(top_srcdir)/ui-gtk \ -I$(top_srcdir)/uget \ -I$(top_srcdir)/uglib uget_gtk_CFLAGS = \ @PTHREAD_CFLAGS@ \ @LFS_CFLAGS@ \ @CURL_CFLAGS@ \ @LIBGCRYPT_CFLAGS@ \ @LIBCRYPTO_CFLAGS@ \ @GTK_CFLAGS@ \ @LIBNOTIFY_CFLAGS@ \ @APP_INDICATOR_CFLAGS@ \ @GSTREAMER_CFLAGS@ \ @LIBPWMD_CFLAGS@ uget_gtk_LDFLAGS = @LFS_LDFLAGS@ uget_gtk_LDADD = \ $(top_builddir)/uget/libuget.a \ $(top_builddir)/uglib/libuglib.a \ @PTHREAD_LIBS@ \ @CURL_LIBS@ \ @LIBGCRYPT_LIBS@ \ @LIBCRYPTO_LIBS@ \ @GTK_LIBS@ \ @LIBNOTIFY_LIBS@ \ @APP_INDICATOR_LIBS@ \ @GSTREAMER_LIBS@ \ @LIBPWMD_LIBS@ uget_gtk_SOURCES = \ UgtkUtil.c UgtkConfig.c UgtkSetting.c \ UgtkNodeList.c UgtkNodeTree.c UgtkNodeView.c \ UgtkTraveler.c UgtkSummary.c \ UgtkTrayIcon.c UgtkBanner.c \ UgtkSequence.c UgtkSelector.c \ UgtkProxyForm.c UgtkDownloadForm.c UgtkCategoryForm.c \ UgtkNodeDialog.c UgtkBatchDialog.c \ UgtkScheduleForm.c UgtkSettingForm.c UgtkSettingDialog.c \ UgtkConfirmDialog.c UgtkAboutDialog.c \ UgtkMenubar.c UgtkMenubar-ui.c \ UgtkApp.c UgtkApp-ui.c UgtkApp-callback.c \ UgtkApp-timeout.c UgtkApp-main.c noinst_HEADERS = \ UgtkUtil.h UgtkConfig.h UgtkSetting.h \ UgtkNodeList.h UgtkNodeTree.h UgtkNodeView.h \ UgtkTraveler.h UgtkSummary.h \ UgtkTrayIcon.h UgtkBanner.h \ UgtkSequence.h UgtkSelector.h \ UgtkProxyForm.h UgtkDownloadForm.h UgtkCategoryForm.h \ UgtkNodeDialog.h UgtkBatchDialog.h \ UgtkScheduleForm.h UgtkSettingForm.h UgtkSettingDialog.h \ UgtkConfirmDialog.h UgtkAboutDialog.h \ UgtkMenubar.h \ UgtkApp.h uget-2.2.3/ui-gtk/UgtkSettingDialog.h0000664000175000017500000000616513602733704014363 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_SETTING_DIALOG_H #define UGTK_SETTING_DIALOG_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkSettingDialog UgtkSettingDialog; typedef enum { UGTK_SETTING_PAGE_UI, UGTK_SETTING_PAGE_CLIPBOARD, UGTK_SETTING_PAGE_OTHERS, } UgtkSettingDialogPage; struct UgtkSettingDialog { GtkDialog* self; UgtkApp* app; GtkTreeView* tree_view; GtkListStore* list_store; GtkNotebook* notebook; struct UgtkUserInterfaceForm ui; struct UgtkClipboardForm clipboard; struct UgtkBandwidthForm bandwidth; struct UgtkCompletionForm completion; struct UgtkAutoSaveForm auto_save; struct UgtkScheduleForm scheduler; struct UgtkCommandlineForm commandline; struct UgtkPluginForm plugin; struct UgtkMediaWebsiteForm media_website; }; UgtkSettingDialog* ugtk_setting_dialog_new (); void ugtk_setting_dialog_free (UgtkSettingDialog* sdialog); void ugtk_setting_dialog_run (UgtkSettingDialog* dialog, UgtkApp* app); void ugtk_setting_dialog_set (UgtkSettingDialog* dialog, UgtkSetting* setting); void ugtk_setting_dialog_get (UgtkSettingDialog* dialog, UgtkSetting* setting); void ugtk_setting_dialog_add (UgtkSettingDialog* sdialog, const gchar* title, GtkWidget* page); void ugtk_setting_dialog_set_page (UgtkSettingDialog* sdialog, int nth); #ifdef __cplusplus } #endif #endif // End of UGTK_SETTING_DIALOG_H uget-2.2.3/ui-gtk/UgtkNodeList.h0000664000175000017500000000623713602733704013347 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ /* * This file base on GTK+ 2.0 Tree View Tutorial - custom-list.h */ #ifndef UGTK_NODE_LIST_H #define UGTK_NODE_LIST_H #include #include #ifdef __cplusplus extern "C" { #endif #define UGTK_TYPE_NODE_LIST (ugtk_node_list_get_type ()) #define UGTK_NODE_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UGTK_TYPE_NODE_LIST, UgtkNodeList)) #define UGTK_NODE_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), UGTK_TYPE_NODE_LIST, UgtkNodeListClass)) #define UGTK_IS_NODE_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UGTK_TYPE_NODE_LIST)) #define UGTK_IS_NODE_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), UGTK_TYPE_NODE_LIST)) #define UGTK_NODE_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), UGTK_TYPE_NODE_LIST, UgtkNodeListClass)) typedef struct UgtkNodeList UgtkNodeList; typedef struct UgtkNodeListClass UgtkNodeListClass; // ---------------------------------------------------------------------------- // UgtkNodeList : GtkTreeModel for UgetNode real and fake nodes. struct UgtkNodeList { GObject parent; // this MUST be the first member UgetNode* root; gint stamp; // Random integer to check whether an iter belongs to our model gint n_fake; gboolean root_visible; // show root as first item }; // ------------------------------------ struct UgtkNodeListClass { GObjectClass parent_class; }; UgtkNodeList* ugtk_node_list_new (UgetNode* root, gint n_fake, gboolean root_visible); GType ugtk_node_list_get_type (void); #ifdef __cplusplus } #endif #endif // UGTK_NODE_LIST_H uget-2.2.3/ui-gtk/UgtkMenubar.c0000664000175000017500000007721113602733704013212 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #if defined _WIN32 || defined _WIN64 #include #include // ShellExecuteW() #endif #include #include #include #include #include #include #include #include // ---------------------------------------------------------------------------- // UgtkFileMenu static void on_create_download (GtkWidget* widget, UgtkApp* app) { ugtk_app_create_download (app, NULL, NULL); } static void on_offline_mode (GtkWidget* widget, UgtkApp* app) { UgetNode* cnode; gboolean offline; offline = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); app->setting.offline_mode = offline; // trayicon menu offline = gtk_check_menu_item_get_active ( (GtkCheckMenuItem*) app->trayicon.menu.offline_mode); if (offline != app->setting.offline_mode) { gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->trayicon.menu.offline_mode, app->setting.offline_mode); } if (app->setting.offline_mode) { for (cnode = app->real.children; cnode; cnode = cnode->next) uget_app_stop_category ((UgetApp*)app, cnode); app->user_action = TRUE; } } // ---------------------------------------------------------------------------- // UgtkEditMenu static void on_clipboard_monitor (GtkWidget* widget, UgtkApp* app) { gboolean active; active = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); app->setting.clipboard.monitor = active; app->trayicon.menu.emission = FALSE; gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->trayicon.menu.clipboard_monitor, active); app->trayicon.menu.emission = TRUE; } static void on_clipboard_quiet (GtkWidget* widget, UgtkApp* app) { gboolean active; active = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); app->setting.clipboard.quiet = active; app->trayicon.menu.emission = FALSE; gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->trayicon.menu.clipboard_quiet, active); app->trayicon.menu.emission = TRUE; } static void on_commandline_quiet (GtkWidget* widget, UgtkApp* app) { gboolean active; active = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); app->setting.commandline.quiet = active; app->trayicon.menu.emission = FALSE; gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->trayicon.menu.commandline_quiet, active); app->trayicon.menu.emission = TRUE; } static void on_skip_existing (GtkWidget* widget, UgtkApp* app) { gboolean active; active = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); app->setting.ui.skip_existing = active; app->trayicon.menu.emission = FALSE; gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->trayicon.menu.skip_existing, active); app->trayicon.menu.emission = TRUE; } static void on_apply_recent (GtkWidget* widget, UgtkApp* app) { gboolean active; active = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); app->setting.ui.apply_recent = active; app->trayicon.menu.emission = FALSE; gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->trayicon.menu.apply_recent, active); app->trayicon.menu.emission = TRUE; } static void on_config_completion (GtkWidget* widget, UgtkApp* app) { if (widget == app->menubar.edit.completion.disable) app->setting.completion.action = 0; else if (widget == app->menubar.edit.completion.hibernate) app->setting.completion.action = 1; else if (widget == app->menubar.edit.completion.suspend) app->setting.completion.action = 2; else if (widget == app->menubar.edit.completion.shutdown) app->setting.completion.action = 3; else if (widget == app->menubar.edit.completion.reboot) app->setting.completion.action = 4; else if (widget == app->menubar.edit.completion.custom) app->setting.completion.action = 5; } static void on_config_completion_remember (GtkWidget* widget, UgtkApp* app) { gboolean remember; remember = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); app->setting.completion.remember = remember; } static void on_config_completion_help (GtkWidget* widget, UgtkApp* app) { ugtk_launch_uri ("http://ugetdm.com/documentation/on-complete"); } static void on_config_settings (GtkWidget* widget, UgtkApp* app) { UgtkSettingDialog* sdialog; gchar* title; if (app->dialogs.setting) { gtk_window_present ((GtkWindow*) app->dialogs.setting); return; } title = g_strconcat (UGTK_APP_NAME " - ", _("Settings"), NULL); sdialog = ugtk_setting_dialog_new (title, app->window.self); g_free (title); ugtk_setting_dialog_set (sdialog, &app->setting); app->dialogs.setting = (GtkWidget*) sdialog->self; // set page // ugtk_setting_dialog_set_page (sdialog, UGTK_SETTING_PAGE_UI); // show settings dialog ugtk_setting_dialog_run (sdialog, app); } // ---------------------------------------------------------------------------- // UgtkViewMenu // static void on_change_visible_widget (GtkWidget* widget, UgtkApp* app) { struct UgtkWindowSetting* setting; GtkWidget* temp; gboolean visible; setting = &app->setting.window; visible = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); // Toolbar if (widget == app->menubar.view.toolbar) { setting->toolbar = visible; gtk_widget_set_visible (app->toolbar.self, visible); return; } // Statusbar if (widget == app->menubar.view.statusbar) { setting->statusbar = visible; gtk_widget_set_visible ((GtkWidget*) app->statusbar.self, visible); return; } // Category if (widget == app->menubar.view.category) { setting->category = visible; temp = gtk_paned_get_child1 (app->window.hpaned); gtk_widget_set_visible (temp, visible); return; } // Summary if (widget == app->menubar.view.summary) { setting->summary = visible; gtk_widget_set_visible (app->summary.self, visible); return; } } static void on_change_visible_summary (GtkWidget* widget, UgtkApp* app) { struct UgtkSummarySetting* setting; gboolean visible; setting = &app->setting.summary; visible = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); // which widget if (widget == app->menubar.view.summary_items.name) { setting->name = visible; app->summary.visible.name = visible; } else if (widget == app->menubar.view.summary_items.folder) { setting->folder = visible; app->summary.visible.folder = visible; } else if (widget == app->menubar.view.summary_items.category) { setting->category = visible; app->summary.visible.category = visible; } else if (widget == app->menubar.view.summary_items.uri) { setting->uri = visible; app->summary.visible.uri = visible; } else if (widget == app->menubar.view.summary_items.message) { setting->message = visible; app->summary.visible.message = visible; } ugtk_summary_show (&app->summary, app->traveler.download.cursor.node); } static void on_change_visible_column (GtkWidget* widget, UgtkApp* app) { struct UgtkDownloadColumnSetting* setting; UgtkTraveler* traveler; GtkTreeViewColumn* column; gboolean visible; gint column_index; setting = &app->setting.download_column; traveler = &app->traveler; visible = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); // which widget if (widget == app->menubar.view.columns.complete) { column_index = UGTK_NODE_COLUMN_COMPLETE; setting->complete = visible; } else if (widget == app->menubar.view.columns.total) { column_index = UGTK_NODE_COLUMN_TOTAL; setting->total = visible; } else if (widget == app->menubar.view.columns.percent) { column_index = UGTK_NODE_COLUMN_PERCENT; setting->percent = visible; } else if (widget == app->menubar.view.columns.elapsed) { column_index = UGTK_NODE_COLUMN_ELAPSED; setting->elapsed = visible; } else if (widget == app->menubar.view.columns.left) { column_index = UGTK_NODE_COLUMN_LEFT; setting->left = visible; } else if (widget == app->menubar.view.columns.speed) { column_index = UGTK_NODE_COLUMN_SPEED; setting->speed = visible; } else if (widget == app->menubar.view.columns.upload_speed) { column_index = UGTK_NODE_COLUMN_UPLOAD_SPEED; setting->upload_speed = visible; } else if (widget == app->menubar.view.columns.uploaded) { column_index = UGTK_NODE_COLUMN_UPLOADED; setting->uploaded = visible; } else if (widget == app->menubar.view.columns.ratio) { column_index = UGTK_NODE_COLUMN_RATIO; setting->ratio = visible; } else if (widget == app->menubar.view.columns.retry) { column_index = UGTK_NODE_COLUMN_RETRY; setting->retry = visible; } else if (widget == app->menubar.view.columns.category) { column_index = UGTK_NODE_COLUMN_CATEGORY; setting->category = visible; } else if (widget == app->menubar.view.columns.uri) { column_index = UGTK_NODE_COLUMN_URI; setting->uri = visible; } else if (widget == app->menubar.view.columns.added_on) { column_index = UGTK_NODE_COLUMN_ADDED_ON; setting->added_on = visible; } else if (widget == app->menubar.view.columns.completed_on) { column_index = UGTK_NODE_COLUMN_COMPLETED_ON; setting->completed_on = visible; } else return; column = gtk_tree_view_get_column (traveler->download.view, column_index); gtk_tree_view_column_set_visible (column, visible); } // ---------------------------------------------------------------------------- // UgtkCategoryMenu static void on_move_category_up (GtkWidget* widget, UgtkApp* app) { UgetNode* cnode; GtkTreeIter iter1, iter2; GtkTreePath *path1, *path2; cnode = app->traveler.category.cursor.node->base; if (cnode == NULL || cnode->prev == NULL) return; iter1.stamp = app->traveler.category.model->stamp; iter2.stamp = app->traveler.category.model->stamp; iter1.user_data = cnode; iter2.user_data = cnode->prev; uget_app_move_category ((UgetApp*) app, cnode, cnode->prev); ugtk_traveler_select_category (&app->traveler, app->traveler.category.cursor.pos -1, -1); gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); // emit signal "row-changed" path1 = gtk_tree_model_get_path (GTK_TREE_MODEL (app->traveler.category.model), &iter1); path2 = gtk_tree_model_get_path (GTK_TREE_MODEL (app->traveler.category.model), &iter2); gtk_tree_model_row_changed (GTK_TREE_MODEL (app->traveler.category.model), path1, &iter1); gtk_tree_model_row_changed (GTK_TREE_MODEL (app->traveler.category.model), path2, &iter2); gtk_tree_path_free (path1); gtk_tree_path_free (path2); } static void on_move_category_down (GtkWidget* widget, UgtkApp* app) { UgetNode* cnode; GtkTreeIter iter1, iter2; GtkTreePath *path1, *path2; cnode = app->traveler.category.cursor.node->base; if (cnode == NULL || cnode->next == NULL) return; iter1.stamp = app->traveler.category.model->stamp; iter2.stamp = app->traveler.category.model->stamp; iter1.user_data = cnode; iter2.user_data = cnode->next; uget_app_move_category ((UgetApp*) app, cnode, cnode->next->next); ugtk_traveler_select_category (&app->traveler, app->traveler.category.cursor.pos +1, -1); gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); // emit signal "row-changed" path1 = gtk_tree_model_get_path (GTK_TREE_MODEL (app->traveler.category.model), &iter1); path2 = gtk_tree_model_get_path (GTK_TREE_MODEL (app->traveler.category.model), &iter2); gtk_tree_model_row_changed (GTK_TREE_MODEL (app->traveler.category.model), path1, &iter1); gtk_tree_model_row_changed (GTK_TREE_MODEL (app->traveler.category.model), path2, &iter2); gtk_tree_path_free (path1); gtk_tree_path_free (path2); } static void on_delete_category (GtkWidget* widget, UgtkApp* app) { UgtkConfirmDialog* cdialog; // confirm to delete category cdialog = ugtk_confirm_dialog_new (UGTK_CONFIRM_DIALOG_DELETE_CATEGORY, app); ugtk_confirm_dialog_run (cdialog); } // ---------------------------------------------------------------------------- // UgtkDownloadMenu static void on_delete_download (GtkWidget* widget, UgtkApp* app) { ugtk_app_delete_download (app, FALSE); } static void on_delete_download_file (GtkWidget* widget, UgtkApp* app) { UgtkConfirmDialog* cdialog; if (app->setting.ui.delete_confirmation == FALSE) ugtk_app_delete_download (app, TRUE); else { // confirm to delete cdialog = ugtk_confirm_dialog_new(UGTK_CONFIRM_DIALOG_DELETE, app); ugtk_confirm_dialog_run (cdialog); } } static void on_open_download_file (GtkWidget* widget, UgtkApp* app) { UgetCommon* common; UgetNode* node; GtkWidget* dialog; gchar* string; node = app->traveler.download.cursor.node; if (node == NULL) return; common = ug_info_get (node->info, UgetCommonInfo); if (common == NULL || common->folder == NULL || common->file == NULL) return; if (ugtk_launch_default_app (common->folder, common->file) == FALSE) { string = g_strdup_printf (_("Can't launch default application for file '%s'."), common->file); dialog = gtk_message_dialog_new (app->window.self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", string); g_free (string); string = g_strconcat (UGTK_APP_NAME " - ", _("Error"), NULL); gtk_window_set_title ((GtkWindow*) dialog, string); g_free (string); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_widget_show ((GtkWidget*) dialog); } } static void on_open_download_folder (GtkWidget* widget, UgtkApp* app) { UgetCommon* common; UgetNode* node; GtkWidget* dialog; gchar* string; node = app->traveler.download.cursor.node; if (node == NULL) return; common = ug_info_get (node->info, UgetCommonInfo); if (common == NULL || common->folder == NULL) return; string = g_filename_from_utf8 (common->folder, -1, NULL, NULL, NULL); if (g_file_test (string, G_FILE_TEST_EXISTS) == FALSE) { g_free (string); string = g_strdup_printf (_("'%s' - This folder does not exist."), common->folder); dialog = gtk_message_dialog_new (app->window.self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", string); g_free (string); string = g_strconcat (UGTK_APP_NAME " - ", _("Error"), NULL); gtk_window_set_title ((GtkWindow*) dialog, string); g_free (string); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_widget_show ((GtkWidget*) dialog); return; } g_free (string); #if defined _WIN32 || defined _WIN64 { UgUri uuri; gchar* path; gchar* argument; gunichar2* argument_os; if (common->file == NULL && common->uri) { ug_uri_init (&uuri, common->uri); if (uuri.file == -1) argument = NULL; else { argument = g_strndup (uuri.uri + uuri.file, ug_uri_file (&uuri, NULL)); } path = g_build_filename (common->folder, argument, NULL); g_free (argument); } else path = g_build_filename (common->folder, common->file, NULL); if (g_file_test (path, G_FILE_TEST_EXISTS)) argument = g_strconcat ("/e,/select,\"", path, "\"", NULL); else argument = g_strconcat ("/e,\"", common->folder, "\"", NULL); g_free (path); argument_os = g_utf8_to_utf16 (argument, -1, NULL, NULL, NULL); g_free (argument); ShellExecuteW (NULL, NULL, L"explorer", argument_os, NULL, SW_SHOW); g_free (argument_os); } #else { GError* error = NULL; GFile* gfile; gchar* uri; gfile = g_file_new_for_path (common->folder); uri = g_file_get_uri (gfile); g_object_unref (gfile); g_app_info_launch_default_for_uri (uri, NULL, &error); g_free (uri); if (error) g_error_free (error); } #endif } static void on_set_download_force_start (GtkWidget* widget, UgtkApp* app) { UgetNode* node; UgetNode* cursor; GList* list; GList* link; list = ugtk_traveler_get_selected (&app->traveler); cursor = app->traveler.download.cursor.node->base; for (link = list; link; link = link->next) { node = link->data; node = node->base; link->data = node; uget_app_activate_download ((UgetApp*) app, node->base); } if (app->traveler.state.cursor.pos == 0) { ugtk_traveler_set_cursor (&app->traveler, cursor); ugtk_traveler_set_selected (&app->traveler, list); } g_list_free (list); // refresh other data & status gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); // ugtk_summary_show (&app->summary, app->traveler.download.cursor.node); } static void on_set_download_runnable (GtkWidget* widget, UgtkApp* app) { ugtk_app_queue_download (app, TRUE); } // UgtkMenubar.download.move_to static void on_move_download (GtkWidget* widget, UgtkApp* app) { GPtrArray* array; UgetNode* cnode; UgetNode* dnode; GList* list; GList* link; guint index; array = app->menubar.download.move_to.array; cnode = NULL; for (index = 0; index < array->len; index += 2) { if (widget == g_ptr_array_index (array, index)) { cnode = g_ptr_array_index (array, index + 1); break; } } if (cnode == NULL || cnode == app->traveler.category.cursor.node->base) return; // if current category is "All" if (app->traveler.category.cursor.pos == 0) ugtk_traveler_reserve_selection (&app->traveler); list = ugtk_traveler_get_selected (&app->traveler); for (link = list; link; link = link->next) { dnode = link->data; dnode = dnode->base; uget_app_move_download_to ((UgetApp*) app, dnode, cnode->base); } g_list_free (list); // refresh gtk_widget_queue_draw ((GtkWidget*) app->traveler.category.view); gtk_widget_queue_draw ((GtkWidget*) app->traveler.state.view); // if current category is "All" if (app->traveler.category.cursor.pos == 0) ugtk_traveler_restore_selection (&app->traveler); } // UgtkMenubar.download.prioriy static void on_set_download_prioriy (GtkWidget* widget, UgtkApp* app) { UgetPriority priority; UgetRelation* relation; UgetNode* node; GList* list; GList* link; if (widget == app->menubar.download.prioriy.high) priority = UGET_PRIORITY_HIGH; else if (widget == app->menubar.download.prioriy.normal) priority = UGET_PRIORITY_NORMAL; else priority = UGET_PRIORITY_LOW; list = ugtk_traveler_get_selected (&app->traveler); for (link = list; link; link = link->next) { node = link->data; node = node->base; relation = ug_info_realloc (node->info, UgetRelationInfo); relation->priority = priority; } g_list_free (list); } // ---------------------------------------------------------------------------- // UgtkHelpMenu // static void on_help_online (GtkWidget* widget, UgtkApp* app) { ugtk_launch_uri ("http://ugetdm.com/help"); } static void on_documentation (GtkWidget* widget, UgtkApp* app) { ugtk_launch_uri ("http://ugetdm.com/documentation"); } static void on_support_forum (GtkWidget* widget, UgtkApp* app) { ugtk_launch_uri ("http://ugetdm.com/forum/"); } static void on_submit_feedback (GtkWidget* widget, UgtkApp* app) { ugtk_launch_uri ("http://ugetdm.com/feedback"); } static void on_report_bug (GtkWidget* widget, UgtkApp* app) { ugtk_launch_uri ("http://ugetdm.com/reportbug"); } static void on_keyboard_shortcuts (GtkWidget* widget, UgtkApp* app) { ugtk_launch_uri ("http://ugetdm.com/keyboard-shortcuts"); } static void on_check_updates (GtkWidget* widget, UgtkApp* app) { ugtk_launch_uri ("http://ugetdm.com/versioncheck?v=" PACKAGE_VERSION); } static void on_about (GtkWidget* widget, UgtkApp* app) { UgtkAboutDialog* adialog; adialog = ugtk_about_dialog_new (app->window.self); // if (app->update_info.ready) // ugtk_about_dialog_set_info (adialog, app->update_info.text->str); ugtk_about_dialog_run (adialog); } // ---------------------------------------------------------------------------- // UgtkMenubar void ugtk_menubar_init_callback (UgtkMenubar* menubar, UgtkApp* app) { // ---------------------------------------------------- // UgtkFileMenu g_signal_connect (menubar->file.create_download, "activate", G_CALLBACK (on_create_download), app); g_signal_connect_swapped (menubar->file.create_category, "activate", G_CALLBACK (ugtk_app_create_category), app); g_signal_connect_swapped (menubar->file.create_torrent, "activate", G_CALLBACK (ugtk_app_create_torrent), app); g_signal_connect_swapped (menubar->file.create_metalink, "activate", G_CALLBACK (ugtk_app_create_metalink), app); g_signal_connect_swapped (menubar->file.batch.clipboard, "activate", G_CALLBACK (ugtk_app_clipboard_batch), app); g_signal_connect_swapped (menubar->file.batch.sequence, "activate", G_CALLBACK (ugtk_app_sequence_batch), app); g_signal_connect_swapped (menubar->file.batch.text_import, "activate", G_CALLBACK (ugtk_app_import_text_file), app); g_signal_connect_swapped (menubar->file.batch.html_import, "activate", G_CALLBACK (ugtk_app_import_html_file), app); g_signal_connect_swapped (menubar->file.batch.text_export, "activate", G_CALLBACK (ugtk_app_export_text_file), app); g_signal_connect_swapped (menubar->file.open_category, "activate", G_CALLBACK (ugtk_app_load_category), app); g_signal_connect_swapped (menubar->file.save_category, "activate", G_CALLBACK (ugtk_app_save_category), app); g_signal_connect_swapped (menubar->file.save, "activate", G_CALLBACK (ugtk_app_save), app); g_signal_connect (menubar->file.offline_mode, "toggled", G_CALLBACK (on_offline_mode), app); g_signal_connect_swapped (menubar->file.quit, "activate", G_CALLBACK (ugtk_app_decide_to_quit), app); // ---------------------------------------------------- // UgtkEditMenu g_signal_connect (menubar->edit.clipboard_monitor, "activate", G_CALLBACK (on_clipboard_monitor), app); g_signal_connect (menubar->edit.clipboard_quiet, "activate", G_CALLBACK (on_clipboard_quiet), app); g_signal_connect (menubar->edit.commandline_quiet, "activate", G_CALLBACK (on_commandline_quiet), app); g_signal_connect (menubar->edit.skip_existing, "activate", G_CALLBACK (on_skip_existing), app); g_signal_connect (menubar->edit.apply_recent, "activate", G_CALLBACK (on_apply_recent), app); g_signal_connect (menubar->edit.completion.disable, "activate", G_CALLBACK (on_config_completion), app); g_signal_connect (menubar->edit.completion.hibernate, "activate", G_CALLBACK (on_config_completion), app); g_signal_connect (menubar->edit.completion.suspend, "activate", G_CALLBACK (on_config_completion), app); g_signal_connect (menubar->edit.completion.shutdown, "activate", G_CALLBACK (on_config_completion), app); g_signal_connect (menubar->edit.completion.reboot, "activate", G_CALLBACK (on_config_completion), app); g_signal_connect (menubar->edit.completion.custom, "activate", G_CALLBACK (on_config_completion), app); g_signal_connect (menubar->edit.completion.remember, "activate", G_CALLBACK (on_config_completion_remember), app); g_signal_connect (menubar->edit.completion.help, "activate", G_CALLBACK (on_config_completion_help), app); g_signal_connect (menubar->edit.settings, "activate", G_CALLBACK (on_config_settings), app); // ---------------------------------------------------- // UgtkViewMenu g_signal_connect (menubar->view.toolbar, "toggled", G_CALLBACK (on_change_visible_widget), app); g_signal_connect (menubar->view.statusbar, "toggled", G_CALLBACK (on_change_visible_widget), app); g_signal_connect (menubar->view.category, "toggled", G_CALLBACK (on_change_visible_widget), app); g_signal_connect (menubar->view.summary, "toggled", G_CALLBACK (on_change_visible_widget), app); // summary items g_signal_connect (menubar->view.summary_items.name, "toggled", G_CALLBACK (on_change_visible_summary), app); g_signal_connect (menubar->view.summary_items.folder, "toggled", G_CALLBACK (on_change_visible_summary), app); g_signal_connect (menubar->view.summary_items.category, "toggled", G_CALLBACK (on_change_visible_summary), app); g_signal_connect (menubar->view.summary_items.uri, "toggled", G_CALLBACK (on_change_visible_summary), app); g_signal_connect (menubar->view.summary_items.message, "toggled", G_CALLBACK (on_change_visible_summary), app); // download columns g_signal_connect (menubar->view.columns.complete, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.total, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.percent, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.elapsed, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.left, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.speed, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.upload_speed, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.uploaded, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.ratio, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.retry, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.category, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.uri, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.added_on, "toggled", G_CALLBACK (on_change_visible_column), app); g_signal_connect (menubar->view.columns.completed_on, "toggled", G_CALLBACK (on_change_visible_column), app); // ---------------------------------------------------- // UgtkCategoryMenu g_signal_connect_swapped (menubar->category.create, "activate", G_CALLBACK (ugtk_app_create_category), app); g_signal_connect (menubar->category.delete, "activate", G_CALLBACK (on_delete_category), app); g_signal_connect_swapped (menubar->category.properties, "activate", G_CALLBACK (ugtk_app_edit_category), app); g_signal_connect (menubar->category.move_up, "activate", G_CALLBACK (on_move_category_up), app); g_signal_connect (menubar->category.move_down, "activate", G_CALLBACK (on_move_category_down), app); // ---------------------------------------------------- // UgtkDownloadMenu g_signal_connect (menubar->download.create, "activate", G_CALLBACK (on_create_download), app); g_signal_connect (menubar->download.delete, "activate", G_CALLBACK (on_delete_download), app); // file & folder g_signal_connect (menubar->download.delete_file, "activate", G_CALLBACK (on_delete_download_file), app); g_signal_connect (menubar->download.open, "activate", G_CALLBACK (on_open_download_file), app); g_signal_connect (menubar->download.open_folder, "activate", G_CALLBACK (on_open_download_folder), app); // change status g_signal_connect (menubar->download.force_start, "activate", G_CALLBACK (on_set_download_force_start), app); g_signal_connect (menubar->download.runnable, "activate", G_CALLBACK (on_set_download_runnable), app); g_signal_connect_swapped (menubar->download.pause, "activate", G_CALLBACK (ugtk_app_pause_download), app); // move g_signal_connect_swapped (menubar->download.move_up, "activate", G_CALLBACK (ugtk_app_move_download_up), app); g_signal_connect_swapped (menubar->download.move_down, "activate", G_CALLBACK (ugtk_app_move_download_down), app); g_signal_connect_swapped (menubar->download.move_top, "activate", G_CALLBACK (ugtk_app_move_download_top), app); g_signal_connect_swapped (menubar->download.move_bottom, "activate", G_CALLBACK (ugtk_app_move_download_bottom), app); // prioriy g_signal_connect (menubar->download.prioriy.high, "activate", G_CALLBACK (on_set_download_prioriy), app); g_signal_connect (menubar->download.prioriy.normal, "activate", G_CALLBACK (on_set_download_prioriy), app); g_signal_connect (menubar->download.prioriy.low, "activate", G_CALLBACK (on_set_download_prioriy), app); // properties g_signal_connect_swapped (menubar->download.properties, "activate", G_CALLBACK (ugtk_app_edit_download), app); // ---------------------------------------------------- // UgtkHelpMenu g_signal_connect (menubar->help.help_online, "activate", G_CALLBACK (on_help_online), app); g_signal_connect (menubar->help.documentation, "activate", G_CALLBACK (on_documentation), app); g_signal_connect (menubar->help.support_forum, "activate", G_CALLBACK (on_support_forum), app); g_signal_connect (menubar->help.submit_feedback, "activate", G_CALLBACK (on_submit_feedback), app); g_signal_connect (menubar->help.report_bug, "activate", G_CALLBACK (on_report_bug), app); g_signal_connect (menubar->help.keyboard_shortcuts, "activate", G_CALLBACK (on_keyboard_shortcuts), app); g_signal_connect (menubar->help.check_updates, "activate", G_CALLBACK (on_check_updates), app); g_signal_connect (menubar->help.about_uget, "activate", G_CALLBACK (on_about), app); } void ugtk_menubar_sync_category (UgtkMenubar* menubar, UgtkApp* app, gboolean reset) { UgetNode* cnode; UgetCommon* common; GtkWidget* menu_item; GtkWidget* image; GPtrArray* array; guint index; array = menubar->download.move_to.array; if (reset) { // remove all item for (index = 0; index < array->len; index += 2) { menu_item = g_ptr_array_index (array, index); gtk_container_remove ( (GtkContainer*) menubar->download.move_to.self, menu_item); } g_ptr_array_set_size (array, 0); // add new item for (cnode = app->real.children; cnode; cnode = cnode->next) { // create menu item common = ug_info_get(cnode->info, UgetCommonInfo); if (common && common->name) menu_item = gtk_image_menu_item_new_with_label (common->name); else menu_item = gtk_image_menu_item_new_with_label (""); image = gtk_image_new_from_stock (GTK_STOCK_DND_MULTIPLE, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image ((GtkImageMenuItem*) menu_item, image); gtk_menu_shell_append ( GTK_MENU_SHELL (app->menubar.download.move_to.self), menu_item); g_signal_connect (menu_item, "activate", G_CALLBACK (on_move_download), app); gtk_widget_show (menu_item); g_ptr_array_add (array, menu_item); g_ptr_array_add (array, cnode); } } // set sensitive for (index = 0; index < array->len; index += 2) { menu_item = g_ptr_array_index (array, index); cnode = g_ptr_array_index (array, index +1); if (cnode == app->traveler.category.cursor.node->base) gtk_widget_set_sensitive (menu_item, FALSE); else gtk_widget_set_sensitive (menu_item, TRUE); } } uget-2.2.3/ui-gtk/UgtkNodeTree.h0000664000175000017500000000640213602733704013325 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ /* * This file base on GTK+ 2.0 Tree View Tutorial - custom-list.h */ #ifndef UGTK_NODE_TREE_H #define UGTK_NODE_TREE_H #include #include #ifdef __cplusplus extern "C" { #endif #define UGTK_TYPE_NODE_TREE (ugtk_node_tree_get_type ()) #define UGTK_NODE_TREE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UGTK_TYPE_NODE_TREE, UgtkNodeTree)) #define UGTK_NODE_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), UGTK_TYPE_NODE_TREE, UgtkNodeTreeClass)) #define UGTK_IS_NODE_TREE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UGTK_TYPE_NODE_TREE)) #define UGTK_IS_NODE_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), UGTK_TYPE_NODE_TREE)) #define UGTK_NODE_TREE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), UGTK_TYPE_NODE_TREE, UgtkNodeTreeClass)) typedef struct UgtkNodeTree UgtkNodeTree; typedef struct UgtkNodeTreeClass UgtkNodeTreeClass; // ---------------------------------------------------------------------------- // UgtkNodeTree : GtkTreeModel for UgNode (UgetNode) parent and children nodes. struct UgtkNodeTree { GObject parent; // this MUST be the first member UgetNode* root; gint stamp; // Random integer to check whether an iter belongs to our model gboolean list_only; struct { UgetNode* root; gint len; } prefix; }; // ------------------------------------ struct UgtkNodeTreeClass { GObjectClass parent_class; }; UgtkNodeTree* ugtk_node_tree_new (UgetNode* root, gboolean list_only); GType ugtk_node_tree_get_type (void); void ugtk_node_tree_set_prefix (UgtkNodeTree* utree, UgetNode* prefix_root, gint prefix_len); #ifdef __cplusplus } #endif #endif // UGTK_NODE_TREE_H uget-2.2.3/ui-gtk/UgtkApp.h0000664000175000017500000002233613602733704012344 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_APP_H #define UGTK_APP_H #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #define UGTK_APP_DIR "uGet" #define UGTK_APP_NAME "uGet" #define UGTK_APP_ICON_NAME "uget-icon" #define UGTK_APP_ACCEL_PATH_NEW "/File/New" #define UGTK_APP_ACCEL_PATH_LOAD "/File/Load" #define UGTK_APP_ACCEL_PATH_SAVE "/File/Save" #define UGTK_APP_ACCEL_PATH_SAVE_ALL "/File/SaveAll" #define UGTK_APP_ACCEL_PATH_DELETE "/Download/Delete" #define UGTK_APP_ACCEL_PATH_DELETE_F "/Download/DeleteFile" #define UGTK_APP_ACCEL_PATH_OPEN "/Download/Open" #define UGTK_APP_ACCEL_PATH_OPEN_F "/Download/OpenFolder" #define UGTK_APP_ACCEL_PATH_SWITCH "/Download/SwitchState" typedef struct UgtkApp UgtkApp; struct UgtkApp { UGET_APP_MEMBERS; /* // ------ UgetApp members ------ UgetNode real; // real root node for real nodes UgetNode split; // virtual root UgetNode sorted; // virtual root UgetNode sorted_split; // virtual root UgetNode mix; // virtual root UgetNode mix_split; // virtual root UgRegistry infos; UgRegistry plugins; UgetPluginInfo* plugin_default; UgetTask task; UgArrayPtr nodes; void* uri_hash; char* config_dir; int n_error; // uget_app_grow() will count these value: int n_moved; // n_error, n_moved, n_deleted, and int n_deleted; // n_completed int n_completed; // */ UgetRpc* rpc; UgtkSetting setting; UgtkScheduleState schedule_state; // recent download settings struct { UgInfo* info; int category_index; int saved; } recent; // status gboolean user_action; // RSS UgetRss* rss_builtin; // Built-in RSS // Clipboard struct UgtkClipboard { GtkClipboard* self; gchar* text; GRegex* regex; gboolean processing; // monitor storage or media website gboolean website; } clipboard; // dialogs struct UgtkDialogs { GtkWidget* error; GtkWidget* message; GtkWidget* exit_confirmation; GtkWidget* delete_confirmation; GtkWidget* delete_category_confirmation; GtkWidget* setting; } dialogs; // ------------------------------------------------------- // GUI: Main Window and Tray Icon GtkAccelGroup* accel_group; UgtkTrayIcon trayicon; UgtkBanner banner; UgtkMenubar menubar; UgtkSummary summary; UgtkTraveler traveler; // (UgetNode) node traveler // -------------------------------- // Main Window (initialize in UgtkApp-ui.c) struct UgtkWindow { GtkWindow* self; GtkPaned* hpaned; // separate left side and right side GtkPaned* vpaned; // right side (UgtkTreeView and UgtkSummary) } window; // -------------------------------- // status bar (initialize in UgtkApp-ui.c) struct UgtkStatusbar { GtkStatusbar* self; GtkLabel* down_speed; GtkLabel* up_speed; } statusbar; // -------------------------------- // Toolbar (initialize in UgtkApp-ui.c) struct UgtkToolbar { GtkWidget* self; // GtkBox GtkWidget* toolbar; // GtkToolItem GtkWidget* create; // GtkMenuItem // menu for tool button GtkWidget* create_download; GtkWidget* create_category; GtkWidget* create_clipboard; GtkWidget* create_sequence; GtkWidget* create_torrent; GtkWidget* create_metalink; // GtkToolItem GtkWidget* save; GtkWidget* runnable; GtkWidget* pause; GtkWidget* properties; GtkWidget* move_up; GtkWidget* move_down; GtkWidget* move_top; GtkWidget* move_bottom; } toolbar; }; void ugtk_app_init (UgtkApp* app, UgetRpc* ipc); void ugtk_app_final (UgtkApp* app); // UgtkApp-ui.c, UgtkApp-callback.c, and UgtkApp-timeout.c void ugtk_app_init_ui (UgtkApp* app); void ugtk_app_init_callback (UgtkApp* app); void ugtk_app_init_timeout (UgtkApp* app); void ugtk_app_save (UgtkApp* app); void ugtk_app_load (UgtkApp* app); void ugtk_app_quit (UgtkApp* app); // set UgtkSetting from/to UgtkApp void ugtk_app_get_window_setting (UgtkApp* app, UgtkSetting* setting); void ugtk_app_set_window_setting (UgtkApp* app, UgtkSetting* setting); void ugtk_app_get_column_setting (UgtkApp* app, UgtkSetting* setting); void ugtk_app_set_column_setting (UgtkApp* app, UgtkSetting* setting); void ugtk_app_set_plugin_setting (UgtkApp* app, UgtkSetting* setting); void ugtk_app_set_other_setting (UgtkApp* app, UgtkSetting* setting); void ugtk_app_set_menu_setting (UgtkApp* app, UgtkSetting* setting); void ugtk_app_set_ui_setting (UgtkApp* app, UgtkSetting* setting); // decide sensitive or visible void ugtk_app_decide_download_sensitive (UgtkApp* app); void ugtk_app_decide_category_sensitive (UgtkApp* app); void ugtk_app_decide_trayicon_visible (UgtkApp* app); void ugtk_app_decide_to_quit (UgtkApp* app); // create node by UI void ugtk_app_create_category (UgtkApp* app); void ugtk_app_create_download (UgtkApp* app, const char* sub_title, const char* uri); // delete selected node void ugtk_app_delete_category (UgtkApp* app); void ugtk_app_delete_download (UgtkApp* app, gboolean delete_files); // edit selected node void ugtk_app_edit_category (UgtkApp* app); void ugtk_app_edit_download (UgtkApp* app); // queue/pause void ugtk_app_queue_download (UgtkApp* app, gboolean keep_active); void ugtk_app_pause_download (UgtkApp* app); void ugtk_app_switch_download_state (UgtkApp* app); // move selected node void ugtk_app_move_download_up (UgtkApp* app); void ugtk_app_move_download_down (UgtkApp* app); void ugtk_app_move_download_top (UgtkApp* app); void ugtk_app_move_download_bottom (UgtkApp* app); void ugtk_app_move_download_to (UgtkApp* app, UgetNode* cnode); // torrent & metalink void ugtk_app_create_torrent (UgtkApp* app); void ugtk_app_create_metalink (UgtkApp* app); // import/export void ugtk_app_save_category (UgtkApp* app); void ugtk_app_load_category (UgtkApp* app); void ugtk_app_import_html_file (UgtkApp* app); void ugtk_app_import_text_file (UgtkApp* app); void ugtk_app_export_text_file (UgtkApp* app); // batch void ugtk_app_sequence_batch (UgtkApp* app); void ugtk_app_clipboard_batch (UgtkApp* app); int ugtk_app_filter_existing (UgtkApp* app, GList* uris); // emit signal "row-changed" for UgtkNodeTree and UgtkNodeList void ugtk_app_download_changed (UgtkApp* app, UgetNode* dnode); void ugtk_app_category_changed (UgtkApp* app, UgetNode* cnode); void ugtk_app_add_default_category (UgtkApp* app); void ugtk_app_show_message (UgtkApp* app, GtkMessageType type, const gchar* message); // -------------------------------------------------------- // UgClipboard void ugtk_clipboard_init (struct UgtkClipboard* clipboard, const gchar* pattern); void ugtk_clipboard_set_pattern (struct UgtkClipboard* clipboard, const gchar* pattern); void ugtk_clipboard_set_text (struct UgtkClipboard* clipboard, gchar* text); GList* ugtk_clipboard_get_uris (struct UgtkClipboard* clipboard); GList* ugtk_clipboard_get_matched (struct UgtkClipboard* clipboard, const gchar* text); // -------------------------------------------------------- // UgStatusbar void ugtk_statusbar_set_info (struct UgtkStatusbar* statusbar, gint n_selected); void ugtk_statusbar_set_speed (struct UgtkStatusbar* statusbar, gint64 down_speed, gint64 up_speed); #ifdef __cplusplus } #endif #endif // UGTK_APP_H uget-2.2.3/ui-gtk/UgtkDownloadForm.c0000664000175000017500000011641513602733704014214 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include // UGTK_APP_NAME #include static void ugtk_download_form_init_page1 (UgtkDownloadForm* dform, UgtkProxyForm* proxy); static void ugtk_download_form_init_page2 (UgtkDownloadForm* dform); // signal handler static void on_spin_changed (GtkEditable *editable, UgtkDownloadForm* dform); static void on_entry_changed (GtkEditable *editable, UgtkDownloadForm* dform); static void on_uri_entry_changed (GtkEditable *editable, UgtkDownloadForm* dform); static void on_http_entry_changed (GtkEditable *editable, UgtkDownloadForm* dform); static void on_select_folder (GtkEntry* entry, GtkEntryIconPosition icon_pos, GdkEvent* event, UgtkDownloadForm* dform); static void on_select_cookie (GtkEntry* entry, GtkEntryIconPosition icon_pos, GdkEvent* event, UgtkDownloadForm* dform); static void on_select_post (GtkEntry* entry, GtkEntryIconPosition icon_pos, GdkEvent* event, UgtkDownloadForm* dform); void ugtk_download_form_init (UgtkDownloadForm* dform, UgtkProxyForm* proxy, GtkWindow* parent) { dform->changed.enable = TRUE; dform->changed.uri = FALSE; dform->changed.file = FALSE; dform->changed.folder = FALSE; dform->changed.user = FALSE; dform->changed.password = FALSE; dform->changed.referrer = FALSE; dform->changed.cookie = FALSE; dform->changed.post = FALSE; dform->changed.agent = FALSE; dform->changed.retry = FALSE; dform->changed.delay = FALSE; dform->changed.timestamp= FALSE; dform->parent = parent; ugtk_download_form_init_page1 (dform, proxy); ugtk_download_form_init_page2 (dform); gtk_widget_show_all (dform->page1); gtk_widget_show_all (dform->page2); } static void ugtk_download_form_init_page1 (UgtkDownloadForm* dform, UgtkProxyForm* proxy) { GtkWidget* widget; GtkGrid* top_grid; GtkGrid* grid; GtkWidget* frame; GtkBox* top_vbox; GtkWidget* vbox; GtkWidget* hbox; dform->page1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); top_vbox = (GtkBox*) dform->page1; gtk_container_set_border_width (GTK_CONTAINER (top_vbox), 2); top_grid = (GtkGrid*) gtk_grid_new (); gtk_box_pack_start (top_vbox, (GtkWidget*) top_grid, FALSE, FALSE, 0); // URL - entry widget = gtk_entry_new (); // gtk_entry_set_width_chars (GTK_ENTRY (widget), 20); // remove for GTK+ 3.12 gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); g_object_set (widget, "margin-left", 1, "margin-right", 1, NULL); g_object_set (widget, "margin-top", 2, "margin-bottom", 2, NULL); g_object_set (widget, "hexpand", TRUE, NULL); gtk_grid_attach (top_grid, widget, 1, 0, 2, 1); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_uri_entry_changed), dform); dform->uri_entry = widget; // URL - label widget = gtk_label_new_with_mnemonic (_("_URI:")); gtk_label_set_mnemonic_widget (GTK_LABEL(widget), dform->uri_entry); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (top_grid, widget, 0, 0, 1, 1); dform->uri_label = widget; // Mirrors - entry widget = gtk_entry_new (); // gtk_entry_set_width_chars (GTK_ENTRY (widget), 20); // remove for GTK+ 3.12 gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); g_object_set (widget, "margin-left", 1, "margin-right", 1, NULL); g_object_set (widget, "margin-top", 2, "margin-bottom", 2, NULL); g_object_set (widget, "hexpand", TRUE, NULL); gtk_grid_attach (top_grid, widget, 1, 1, 2, 1); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_uri_entry_changed), dform); dform->mirrors_entry = widget; // Mirrors - label widget = gtk_label_new_with_mnemonic (_("Mirrors:")); gtk_label_set_mnemonic_widget (GTK_LABEL(widget), dform->mirrors_entry); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 2, "margin-bottom", 2, NULL); gtk_grid_attach (top_grid, widget, 0, 1, 1, 1); dform->mirrors_label = widget; // File - entry widget = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_entry_set_placeholder_text (GTK_ENTRY (widget), _("Leave blank to use default filename ...")); g_object_set (widget, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (top_grid, widget, 1, 2, 2, 1); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_entry_changed), dform); dform->file_entry = widget; // File - label widget = gtk_label_new_with_mnemonic (_("File:")); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), dform->file_entry); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (top_grid, widget, 0, 2, 1, 1); dform->file_label = widget; // Folder - combo entry + icon dform->folder_combo = gtk_combo_box_text_new_with_entry (); dform->folder_entry = gtk_bin_get_child (GTK_BIN (dform->folder_combo)); widget = dform->folder_entry; gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 gtk_entry_set_icon_from_icon_name (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, "folder"); #else gtk_entry_set_icon_from_stock (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_DIRECTORY); #endif gtk_entry_set_icon_tooltip_text (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, _("Select Folder")); g_object_set (dform->folder_combo, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (top_grid, dform->folder_combo, 1, 3, 1, 1); g_signal_connect (widget, "icon-release", G_CALLBACK (on_select_folder), dform); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_entry_changed), dform); // Folder - label widget = gtk_label_new_with_mnemonic (_("_Folder:")); gtk_label_set_mnemonic_widget(GTK_LABEL (widget), dform->folder_combo); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (top_grid, widget, 0, 3, 1, 1); // Referrer - entry widget = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); g_object_set (widget, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (top_grid, widget, 1, 4, 2, 1); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_http_entry_changed), dform); dform->referrer_entry = widget; // Referrer - label widget = gtk_label_new_with_mnemonic (_("Referrer:")); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), dform->referrer_entry); g_object_set (widget, "margin-left", 3, "margin-right", 3, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (top_grid, widget, 0, 4, 1, 1); // dform->referrer_label = widget; // ---------------------------------------------------- // Connections // HBox for Connections hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (top_vbox, hbox, FALSE, FALSE, 2); // connections - label // widget = gtk_label_new (_("connections")); // gtk_box_pack_end (GTK_BOX (hbox), widget, FALSE, FALSE, 2); // dform->label_connections = widget; // connections - spin button widget = gtk_spin_button_new_with_range (1.0, 16.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); // gtk_entry_set_width_chars (GTK_ENTRY (widget), 3); // remove for GTK+ 3.12 gtk_box_pack_end (GTK_BOX (hbox), widget, FALSE, FALSE, 2); dform->spin_connections = widget; // "Max Connections:" - title label widget = gtk_label_new_with_mnemonic (_("_Max Connections:")); gtk_label_set_mnemonic_widget ((GtkLabel*)widget, dform->spin_connections); gtk_box_pack_end (GTK_BOX (hbox), widget, FALSE, FALSE, 2); dform->title_connections = widget; // ---------------------------------------------------- // HBox for "Status" and "Login" hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (top_vbox, hbox, FALSE, FALSE, 2); // ---------------------------------------------------- // frame for Status (start mode) frame = gtk_frame_new (_("Status")); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); dform->radio_runnable = gtk_radio_button_new_with_mnemonic (NULL, _("_Runnable")); dform->radio_pause = gtk_radio_button_new_with_mnemonic_from_widget ( (GtkRadioButton*)dform->radio_runnable, _("P_ause")); gtk_box_pack_start (GTK_BOX (vbox), dform->radio_runnable, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), dform->radio_pause, FALSE, FALSE, 0); // ---------------------------------------------------- // frame for login frame = gtk_frame_new (_("Login")); grid = (GtkGrid*) gtk_grid_new (); gtk_container_set_border_width (GTK_CONTAINER (grid), 2); gtk_container_add (GTK_CONTAINER (frame), (GtkWidget*) grid); gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 2); // User - entry widget = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); g_object_set (widget, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 1, 0, 1, 1); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_entry_changed), dform); dform->username_entry = widget; // User - label widget = gtk_label_new (_("User:")); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 0, 1, 1); // dform->username_label = widget; // Password - entry widget = gtk_entry_new (); gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); g_object_set (widget, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 1, 1, 1, 1); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_entry_changed), dform); dform->password_entry = widget; // Password - label widget = gtk_label_new (_("Password:")); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 1, 1, 1); // dform->password_label = widget; // ---------------------------------------------------- // proxy // ug_proxy_widget_init (&dform->proxy_dform); if (proxy) { widget = proxy->self; gtk_box_pack_start (top_vbox, widget, FALSE, FALSE, 2); } } static void ugtk_download_form_init_page2 (UgtkDownloadForm* dform) { GtkWidget* widget; GtkGrid* grid; dform->page2 = gtk_grid_new (); grid = (GtkGrid*) dform->page2; gtk_container_set_border_width (GTK_CONTAINER (grid), 2); // label - cookie file widget = gtk_label_new (_("Cookie file:")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 0, 1, 1); dform->cookie_label = widget; // entry - cookie file widget = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 gtk_entry_set_icon_from_icon_name (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, "text-x-generic"); #else gtk_entry_set_icon_from_stock (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_FILE); #endif gtk_entry_set_icon_tooltip_text (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, _("Select Cookie File")); g_object_set (widget, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 1, 0, 3, 1); g_signal_connect (widget, "icon-release", G_CALLBACK (on_select_cookie), dform); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_http_entry_changed), dform); dform->cookie_entry = widget; // label - post file widget = gtk_label_new (_("Post file:")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 1, 1, 1); dform->post_label = widget; // entry - post file widget = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 gtk_entry_set_icon_from_icon_name (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, "text-x-generic"); #else gtk_entry_set_icon_from_stock (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_FILE); #endif gtk_entry_set_icon_tooltip_text (GTK_ENTRY (widget), GTK_ENTRY_ICON_SECONDARY, _("Select Post File")); g_object_set (widget, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 1, 1, 3, 1); g_signal_connect (widget, "icon-release", G_CALLBACK (on_select_post), dform); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_http_entry_changed), dform); dform->post_entry = widget; // label - user agent widget = gtk_label_new (_("User Agent:")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 2, 1, 1); dform->agent_label = widget; // entry - user agent widget = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); g_object_set (widget, "margin", 1, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 1, 2, 3, 1); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_http_entry_changed), dform); dform->agent_entry = widget; // Retry limit - label widget = gtk_label_new_with_mnemonic (_("Retry _limit:")); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), dform->spin_retry); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 3, 2, 1); // Retry limit - spin button widget = gtk_spin_button_new_with_range (0.0, 99.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 2, 3, 1, 1); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_spin_changed), dform); dform->spin_retry = widget; // counts - label widget = gtk_label_new (_("counts")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 3, 3, 1, 1); // Retry delay - label widget = gtk_label_new_with_mnemonic (_("Retry _delay:")); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), dform->spin_delay); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 4, 2, 1); // Retry delay - spin button widget = gtk_spin_button_new_with_range (0.0, 600.0, 1.0); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 2, 4, 1, 1); g_signal_connect (GTK_EDITABLE (widget), "changed", G_CALLBACK (on_spin_changed), dform); dform->spin_delay = widget; // seconds - label widget = gtk_label_new (_("seconds")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 3, 4, 1, 1); // label - Max upload speed widget = gtk_label_new (_("Max upload speed:")); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 5, 2, 1); // spin - Max upload speed widget = gtk_spin_button_new_with_range (0, 99999999, 1); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); // gtk_entry_set_width_chars (GTK_ENTRY (widget), 8); g_object_set (widget, "margin", 1, NULL); gtk_grid_attach (grid, widget, 2, 5, 1, 1); dform->spin_upload_speed = (GtkSpinButton*) widget; // label - "KiB/s" widget = gtk_label_new (_("KiB/s")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin", 2, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 3, 5, 1, 1); // label - Max download speed widget = gtk_label_new (_("Max download speed:")); g_object_set (widget, "margin-left", 2, "margin-right", 2, NULL); g_object_set (widget, "margin-top", 1, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 6, 2, 1); // spin - Max download speed widget = gtk_spin_button_new_with_range (0, 99999999, 1); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); // gtk_entry_set_width_chars (GTK_ENTRY (widget), 8); g_object_set (widget, "margin", 1, NULL); gtk_grid_attach (grid, widget, 2, 6, 1, 1); dform->spin_download_speed = (GtkSpinButton*) widget; // label - "KiB/s" widget = gtk_label_new (_("KiB/s")); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); // left, center g_object_set (widget, "margin", 2, "hexpand", TRUE, NULL); gtk_grid_attach (grid, widget, 3, 6, 1, 1); // Retrieve timestamp widget = gtk_check_button_new_with_label (_("Retrieve timestamp")); g_object_set (widget, "margin-top", 3, "margin-bottom", 1, NULL); gtk_grid_attach (grid, widget, 0, 7, 3, 1); dform->timestamp = (GtkToggleButton*) widget; } void ugtk_download_form_get (UgtkDownloadForm* dform, UgInfo* node_info) { UgUri uuri; const gchar* text; gint number; union { UgetRelation* relation; UgetCommon* common; UgetHttp* http; } temp; // ------------------------------------------ // UgetCommon temp.common = ug_info_realloc(node_info, UgetCommonInfo); // folder text = gtk_entry_get_text ((GtkEntry*)dform->folder_entry); ug_free (temp.common->folder); temp.common->folder = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.common->folder, temp.common->folder); // user text = gtk_entry_get_text ((GtkEntry*)dform->username_entry); ug_free (temp.common->user); temp.common->user = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.common->user, temp.common->user); // password text = gtk_entry_get_text ((GtkEntry*)dform->password_entry); ug_free (temp.common->password); temp.common->password = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.common->password, temp.common->password); // retry_limit number = gtk_spin_button_get_value_as_int ((GtkSpinButton*) dform->spin_retry); temp.common->retry_limit = number; // retry_delay number = gtk_spin_button_get_value_as_int ((GtkSpinButton*) dform->spin_delay); temp.common->retry_delay = number; // max_upload_speed number = gtk_spin_button_get_value_as_int ((GtkSpinButton*) dform->spin_upload_speed) * 1024; temp.common->max_upload_speed = number; // max_download_speed number = gtk_spin_button_get_value_as_int ((GtkSpinButton*) dform->spin_download_speed) * 1024; temp.common->max_download_speed = number; // max_connections number = gtk_spin_button_get_value_as_int ((GtkSpinButton*) dform->spin_connections); temp.common->max_connections = number; // timestamp temp.common->timestamp = gtk_toggle_button_get_active (dform->timestamp); // URI if (gtk_widget_is_sensitive (dform->uri_entry) == TRUE) { text = gtk_entry_get_text ((GtkEntry*)dform->uri_entry); ug_free (temp.common->uri); temp.common->uri = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.common->uri, temp.common->uri); if (temp.common->uri) { ug_uri_init (&uuri, temp.common->uri); // set user number = ug_uri_user (&uuri, &text); if (number > 0) { ug_free (temp.common->user); temp.common->user = ug_strndup (text, number); } // set password number = ug_uri_password (&uuri, &text); if (number > 0) { ug_free (temp.common->password); temp.common->password = ug_strndup (text, number); } // Remove user & password from URL if (uuri.authority != uuri.host) { memmove ((char*)uuri.uri + uuri.authority, (char*)uuri.uri + uuri.host, strlen (uuri.uri + uuri.host) + 1); } } } // mirrors if (gtk_widget_is_sensitive (dform->mirrors_entry) == TRUE) { text = gtk_entry_get_text ((GtkEntry*)dform->mirrors_entry); ug_free (temp.common->mirrors); temp.common->mirrors = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.common->mirrors, temp.common->mirrors); } // file if (gtk_widget_is_sensitive (dform->file_entry) == TRUE) { text = gtk_entry_get_text ((GtkEntry*)dform->file_entry); ug_free (temp.common->file); temp.common->file = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.common->file, temp.common->file); } // ------------------------------------------ // UgetHttp temp.http = ug_info_realloc(node_info, UgetHttpInfo); // referrer text = gtk_entry_get_text ((GtkEntry*) dform->referrer_entry); ug_free (temp.http->referrer); temp.http->referrer = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.http->referrer, temp.http->referrer); // cookie_file text = gtk_entry_get_text ((GtkEntry*) dform->cookie_entry); ug_free (temp.http->cookie_file); temp.http->cookie_file = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.http->cookie_file, temp.http->cookie_file); // post_file text = gtk_entry_get_text ((GtkEntry*) dform->post_entry); ug_free (temp.http->post_file); temp.http->post_file = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.http->post_file, temp.http->post_file); // user_agent text = gtk_entry_get_text ((GtkEntry*) dform->agent_entry); ug_free (temp.http->user_agent); temp.http->user_agent = (*text) ? ug_strdup (text) : NULL; ug_str_remove_crlf (temp.http->user_agent, temp.http->user_agent); // ------------------------------------------ // UgetRelation if (gtk_widget_get_sensitive (dform->radio_pause)) { temp.relation = ug_info_realloc(node_info, UgetRelationInfo); if (gtk_toggle_button_get_active ((GtkToggleButton*) dform->radio_pause)) temp.relation->group |= UGET_GROUP_PAUSED; else temp.relation->group &= ~UGET_GROUP_PAUSED; } } void ugtk_download_form_set (UgtkDownloadForm* dform, UgInfo* node_info, gboolean keep_changed) { UgetRelation* relation; UgetCommon* common; UgetHttp* http; common = ug_info_realloc(node_info, UgetCommonInfo); http = ug_info_get(node_info, UgetHttpInfo); // disable changed flags dform->changed.enable = FALSE; // ------------------------------------------ // UgetCommon // set changed flags if (keep_changed == FALSE && common) { dform->changed.uri = common->keeping.uri; dform->changed.mirrors = common->keeping.mirrors; dform->changed.file = common->keeping.file; dform->changed.folder = common->keeping.folder; dform->changed.user = common->keeping.user; dform->changed.password = common->keeping.password; dform->changed.retry = common->keeping.retry_limit; dform->changed.delay = common->keeping.retry_delay; dform->changed.max_upload_speed = common->keeping.max_upload_speed; dform->changed.max_download_speed = common->keeping.max_download_speed; dform->changed.timestamp = common->keeping.timestamp; } // set data if (keep_changed==FALSE || dform->changed.uri==FALSE) { if (gtk_widget_is_sensitive (dform->uri_entry)) { gtk_entry_set_text ((GtkEntry*) dform->uri_entry, (common && common->uri) ? common->uri : ""); } } if (keep_changed==FALSE || dform->changed.mirrors==FALSE) { if (gtk_widget_is_sensitive (dform->mirrors_entry)) { gtk_entry_set_text ((GtkEntry*) dform->mirrors_entry, (common && common->mirrors) ? common->mirrors : ""); } } if (keep_changed==FALSE || dform->changed.file==FALSE) { if (gtk_widget_is_sensitive (dform->file_entry)) { gtk_entry_set_text ((GtkEntry*) dform->file_entry, (common && common->file) ? common->file : ""); // set changed flags if (common && common->file) dform->changed.file = TRUE; } } if (keep_changed==FALSE || dform->changed.folder==FALSE) { g_signal_handlers_block_by_func (GTK_EDITABLE (dform->folder_entry), on_entry_changed, dform); gtk_entry_set_text ((GtkEntry*) dform->folder_entry, (common && common->folder) ? common->folder : ""); g_signal_handlers_unblock_by_func (GTK_EDITABLE (dform->folder_entry), on_entry_changed, dform); } if (keep_changed==FALSE || dform->changed.user==FALSE) { gtk_entry_set_text ((GtkEntry*) dform->username_entry, (common && common->user) ? common->user : ""); } if (keep_changed==FALSE || dform->changed.password==FALSE) { gtk_entry_set_text ((GtkEntry*) dform->password_entry, (common && common->password) ? common->password : ""); } if (keep_changed==FALSE || dform->changed.retry==FALSE) { gtk_spin_button_set_value ((GtkSpinButton*) dform->spin_retry, (common) ? common->retry_limit : 99); } if (keep_changed==FALSE || dform->changed.delay==FALSE) { gtk_spin_button_set_value ((GtkSpinButton*) dform->spin_delay, (common) ? common->retry_delay : 6); } if (keep_changed==FALSE || dform->changed.max_upload_speed==FALSE) { gtk_spin_button_set_value ((GtkSpinButton*) dform->spin_upload_speed, (gdouble) (common->max_upload_speed / 1024)); } if (keep_changed==FALSE || dform->changed.max_download_speed==FALSE) { gtk_spin_button_set_value ((GtkSpinButton*) dform->spin_download_speed, (gdouble) (common->max_download_speed / 1024)); } if (keep_changed==FALSE || dform->changed.connections==FALSE) { gtk_spin_button_set_value ((GtkSpinButton*) dform->spin_connections, common->max_connections); } if (keep_changed==FALSE || dform->changed.timestamp==FALSE) gtk_toggle_button_set_active (dform->timestamp, common->timestamp); // ------------------------------------------ // UgetHttp // set data if (keep_changed==FALSE || dform->changed.referrer==FALSE) { gtk_entry_set_text ((GtkEntry*) dform->referrer_entry, (http && http->referrer) ? http->referrer : ""); } if (keep_changed==FALSE || dform->changed.cookie==FALSE) { gtk_entry_set_text ((GtkEntry*) dform->cookie_entry, (http && http->cookie_file) ? http->cookie_file : ""); } if (keep_changed==FALSE || dform->changed.post==FALSE) { gtk_entry_set_text ((GtkEntry*) dform->post_entry, (http && http->post_file) ? http->post_file : ""); } if (keep_changed==FALSE || dform->changed.agent==FALSE) { gtk_entry_set_text ((GtkEntry*) dform->agent_entry, (http && http->user_agent) ? http->user_agent : ""); } // set changed flags if (keep_changed==FALSE && http) { dform->changed.referrer = http->keeping.referrer; dform->changed.cookie = http->keeping.cookie_file; dform->changed.post = http->keeping.post_file; dform->changed.agent = http->keeping.user_agent; } // ------------------------------------------ // UgetRelation if (gtk_widget_get_sensitive (dform->radio_pause)) { relation = ug_info_realloc(node_info, UgetRelationInfo); if (relation->group & UGET_GROUP_PAUSED) gtk_toggle_button_set_active ((GtkToggleButton*) dform->radio_pause, TRUE); else gtk_toggle_button_set_active ((GtkToggleButton*) dform->radio_runnable, TRUE); } // enable changed flags dform->changed.enable = TRUE; // complete entry ugtk_download_form_complete_entry (dform); } void ugtk_download_form_set_multiple (UgtkDownloadForm* dform, gboolean multiple_mode) { // dform->multiple = multiple_mode; if (multiple_mode) { gtk_widget_hide (dform->uri_label); gtk_widget_hide (dform->uri_entry); gtk_widget_hide (dform->mirrors_label); gtk_widget_hide (dform->mirrors_entry); gtk_widget_hide (dform->file_label); gtk_widget_hide (dform->file_entry); } else { gtk_widget_show (dform->uri_label); gtk_widget_show (dform->uri_entry); gtk_widget_show (dform->mirrors_label); gtk_widget_show (dform->mirrors_entry); gtk_widget_show (dform->file_label); gtk_widget_show (dform->file_entry); } multiple_mode = !multiple_mode; gtk_widget_set_sensitive (dform->uri_label, multiple_mode); gtk_widget_set_sensitive (dform->uri_entry, multiple_mode); gtk_widget_set_sensitive (dform->mirrors_label, multiple_mode); gtk_widget_set_sensitive (dform->mirrors_entry, multiple_mode); gtk_widget_set_sensitive (dform->file_label, multiple_mode); gtk_widget_set_sensitive (dform->file_entry, multiple_mode); } void ugtk_download_form_set_folders (UgtkDownloadForm* dform, UgtkSetting* setting) { GtkComboBoxText* combo; UgLink* link; dform->changed.enable = FALSE; g_signal_handlers_block_by_func (GTK_EDITABLE (dform->folder_entry), on_entry_changed, dform); combo = GTK_COMBO_BOX_TEXT (dform->folder_combo); for (link = setting->folder_history.head; link; link = link->next) gtk_combo_box_text_append_text (combo, link->data); // set default folder gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); g_signal_handlers_unblock_by_func (GTK_EDITABLE (dform->folder_entry), on_entry_changed, dform); dform->changed.enable = TRUE; } void ugtk_download_form_get_folders (UgtkDownloadForm* dform, UgtkSetting* setting) { const gchar* current; current = gtk_entry_get_text ((GtkEntry*) dform->folder_entry); ugtk_setting_add_folder (setting, current); } void ugtk_download_form_complete_entry (UgtkDownloadForm* dform) { const gchar* text; // gchar* temp; UgUri upart; gboolean completed = FALSE; // URL text = gtk_entry_get_text ((GtkEntry*) dform->uri_entry); ug_uri_init (&upart, text); if (upart.host != -1) { // disable changed flags dform->changed.enable = FALSE; #if 0 // complete file entry text = gtk_entry_get_text ((GtkEntry*) dform->file_entry); if (text[0] == 0 || dform->changed.file == FALSE) { temp = ug_uri_get_file (&upart); gtk_entry_set_text ((GtkEntry*) dform->file_entry, (temp) ? temp : "index.htm"); g_free (temp); } // complete user entry text = gtk_entry_get_text ((GtkEntry*) dform->username_entry); if (text[0] == 0 || dform->changed.user == FALSE) { temp = ug_uri_get_user (&upart); gtk_entry_set_text ((GtkEntry*) dform->username_entry, (temp) ? temp : ""); g_free (temp); } // complete password entry text = gtk_entry_get_text ((GtkEntry*) dform->password_entry); if (text[0] == 0 || dform->changed.password == FALSE) { temp = ug_uri_get_password (&upart); gtk_entry_set_text ((GtkEntry*) dform->password_entry, (temp) ? temp : ""); g_free (temp); } #endif // enable changed flags dform->changed.enable = TRUE; // status completed = TRUE; } #if 1 // check existing for file name else if (ug_uri_part_file (&upart, &text) > 0) { completed = TRUE; } #else // file extension else if (ug_uri_part_file_ext (&upart, &text) > 0) { // torrent or metalink file path if (*text == 'm' || *text == 'M' || *text == 't' || *text == 'T') completed = TRUE; } #endif else if (upart.path > 0 && upart.uri[upart.path] != 0) completed = TRUE; else if (gtk_widget_is_sensitive (dform->uri_entry) == FALSE) completed = TRUE; dform->completed = completed; } // ---------------------------------------------------------------------------- // signal handler static void on_spin_changed (GtkEditable* editable, UgtkDownloadForm* dform) { if (dform->changed.enable) { if (editable == GTK_EDITABLE (dform->spin_retry)) dform->changed.retry = TRUE; else if (editable == GTK_EDITABLE (dform->spin_delay)) dform->changed.delay = TRUE; } } static void on_entry_changed (GtkEditable* editable, UgtkDownloadForm* dform) { if (dform->changed.enable) { if (editable == GTK_EDITABLE (dform->file_entry)) dform->changed.file = TRUE; else if (editable == GTK_EDITABLE (dform->folder_entry)) dform->changed.folder = TRUE; else if (editable == GTK_EDITABLE (dform->username_entry)) dform->changed.user = TRUE; else if (editable == GTK_EDITABLE (dform->password_entry)) dform->changed.password = TRUE; } } static void on_uri_entry_changed (GtkEditable* editable, UgtkDownloadForm* dform) { if (dform->changed.enable) { dform->changed.uri = TRUE; ugtk_download_form_complete_entry (dform); } } static void on_http_entry_changed (GtkEditable* editable, UgtkDownloadForm* dform) { if (dform->changed.enable) { if (editable == GTK_EDITABLE (dform->referrer_entry)) dform->changed.referrer = TRUE; else if (editable == GTK_EDITABLE (dform->cookie_entry)) dform->changed.cookie = TRUE; else if (editable == GTK_EDITABLE (dform->post_entry)) dform->changed.post = TRUE; else if (editable == GTK_EDITABLE (dform->agent_entry)) dform->changed.agent = TRUE; } } static void on_select_folder_response (GtkDialog* chooser, gint response, UgtkDownloadForm* dform) { gchar* file; gchar* path; if (response == GTK_RESPONSE_OK ) { file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); path = g_filename_to_utf8 (file, -1, NULL, NULL, NULL); gtk_entry_set_text (GTK_ENTRY (dform->folder_entry), path); g_free (path); g_free (file); } gtk_widget_destroy (GTK_WIDGET (chooser)); if (dform->parent) gtk_widget_set_sensitive ((GtkWidget*) dform->parent, TRUE); } static void on_select_folder (GtkEntry* entry, GtkEntryIconPosition icon_pos, GdkEvent* event, UgtkDownloadForm* dform) { GtkWidget* chooser; gchar* path; gchar* title; // disable sensitive of parent window // enable sensitive in function on_file_chooser_response() if (dform->parent) gtk_widget_set_sensitive ((GtkWidget*) dform->parent, FALSE); title = g_strconcat (UGTK_APP_NAME " - ", _("Select Folder"), NULL); chooser = gtk_file_chooser_dialog_new (title, dform->parent, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_free (title); gtk_window_set_transient_for ((GtkWindow*) chooser, dform->parent); gtk_window_set_destroy_with_parent ((GtkWindow*) chooser, TRUE); path = (gchar*) gtk_entry_get_text ((GtkEntry*) dform->folder_entry); if (*path) { path = g_filename_from_utf8 (path, -1, NULL, NULL, NULL); gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (chooser), path); g_free (path); } g_signal_connect (chooser, "response", G_CALLBACK (on_select_folder_response), dform); if (gtk_window_get_modal (dform->parent)) gtk_dialog_run ((GtkDialog*) chooser); else { gtk_window_set_modal ((GtkWindow*) chooser, FALSE); gtk_widget_show (chooser); } } static void on_select_cookie_response (GtkDialog* chooser, gint response, UgtkDownloadForm* dform) { gchar* file; gchar* path; if (response == GTK_RESPONSE_OK ) { file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); path = g_filename_to_utf8 (file, -1, NULL, NULL, NULL); gtk_entry_set_text (GTK_ENTRY (dform->cookie_entry), path); g_free (path); g_free (file); } gtk_widget_destroy (GTK_WIDGET (chooser)); if (dform->parent) gtk_widget_set_sensitive ((GtkWidget*) dform->parent, TRUE); } static void on_select_cookie (GtkEntry* entry, GtkEntryIconPosition icon_pos, GdkEvent* event, UgtkDownloadForm* dform) { GtkWidget* chooser; gchar* path; gchar* title; // disable sensitive of parent window // enable sensitive in function on_file_chooser_response() if (dform->parent) gtk_widget_set_sensitive ((GtkWidget*) dform->parent, FALSE); title = g_strconcat (UGTK_APP_NAME " - ", _("Select Cookie File"), NULL); chooser = gtk_file_chooser_dialog_new (title, dform->parent, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_free (title); gtk_window_set_transient_for ((GtkWindow*) chooser, dform->parent); gtk_window_set_destroy_with_parent ((GtkWindow*) chooser, TRUE); path = (gchar*) gtk_entry_get_text ((GtkEntry*) dform->cookie_entry); if (*path) { path = g_filename_from_utf8 (path, -1, NULL, NULL, NULL); gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (chooser), path); g_free (path); } g_signal_connect (chooser, "response", G_CALLBACK (on_select_cookie_response), dform); if (gtk_window_get_modal (dform->parent)) gtk_dialog_run ((GtkDialog*) chooser); else { gtk_window_set_modal ((GtkWindow*) chooser, FALSE); gtk_widget_show (chooser); } } static void on_select_post_response (GtkDialog* chooser, gint response, UgtkDownloadForm* dform) { gchar* file; gchar* path; if (response == GTK_RESPONSE_OK ) { file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); path = g_filename_to_utf8 (file, -1, NULL, NULL, NULL); gtk_entry_set_text (GTK_ENTRY (dform->post_entry), path); g_free (path); g_free (file); } gtk_widget_destroy (GTK_WIDGET (chooser)); if (dform->parent) gtk_widget_set_sensitive ((GtkWidget*) dform->parent, TRUE); } static void on_select_post (GtkEntry* entry, GtkEntryIconPosition icon_pos, GdkEvent* event, UgtkDownloadForm* dform) { GtkWidget* chooser; gchar* path; gchar* title; // disable sensitive of parent window // enable sensitive in function on_file_chooser_response() if (dform->parent) gtk_widget_set_sensitive ((GtkWidget*) dform->parent, FALSE); title = g_strconcat (UGTK_APP_NAME " - ", _("Select Post File"), NULL); chooser = gtk_file_chooser_dialog_new (title, dform->parent, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_free (title); gtk_window_set_transient_for ((GtkWindow*) chooser, dform->parent); gtk_window_set_destroy_with_parent ((GtkWindow*) chooser, TRUE); path = (gchar*) gtk_entry_get_text ((GtkEntry*) dform->post_entry); if (*path) { path = g_filename_from_utf8 (path, -1, NULL, NULL, NULL); gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (chooser), path); g_free (path); } g_signal_connect (chooser, "response", G_CALLBACK (on_select_post_response), dform); if (gtk_window_get_modal (dform->parent)) gtk_dialog_run ((GtkDialog*) chooser); else { gtk_window_set_modal ((GtkWindow*) chooser, FALSE); gtk_widget_show (chooser); } } uget-2.2.3/ui-gtk/UgtkBatchDialog.h0000664000175000017500000000652113602733704013763 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_BATCH_DIALOG_H #define UGTK_BATCH_DIALOG_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkBatchDialog UgtkBatchDialog; struct UgtkBatchDialog { UGTK_NODE_DIALOG_MEMBERS; /* // ------ UgtkNodeDialog members ------ GtkDialog* self; GtkBox* hbox; GtkWidget* notebook; GtkTreeView* node_view; UgtkNodeTree* node_tree; gulong handler_id[3]; UgtkApp* app; UgetNode* note; UgData* node_data; UgtkProxyForm proxy; UgtkDownloadForm download; UgtkCategoryForm category; */ UgtkSelector selector; UgtkSequence sequencer; }; UgtkBatchDialog* ugtk_batch_dialog_new (const char* title, UgtkApp* app); void ugtk_batch_dialog_free (UgtkBatchDialog* bdialog); void ugtk_batch_dialog_use_selector (UgtkBatchDialog* bdialog); void ugtk_batch_dialog_use_sequencer (UgtkBatchDialog* bdialog); // enable/disable category node list view in left side // return index of selected category #define ugtk_batch_dialog_get_category(bdialog, cnode) \ ugtk_node_dialog_get_category((UgtkNodeDialog*) bdialog, cnode) #define ugtk_batch_dialog_set_category(bdialog, cnode) \ ugtk_node_dialog_set_category((UgtkNodeDialog*) bdialog, cnode) // void ugtk_batch_dialog_apply_recent (UgtkNodeDialog* ndialog, UgtkApp* app); #define ugtk_batch_dialog_apply_recent(bdialog, app) \ ugtk_node_dialog_apply_recent((UgtkNodeDialog*) bdialog, app); void ugtk_batch_dialog_disable_batch (UgtkBatchDialog* bdialog); void ugtk_batch_dialog_run (UgtkBatchDialog* bdialog); #ifdef __cplusplus } #endif #endif // End of UGTK_BATCH_DIALOG_H uget-2.2.3/ui-gtk/UgtkSelector.h0000664000175000017500000001026513602733704013402 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_SELECTOR_H #define UGTK_SELECTOR_H #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkSelector UgtkSelector; typedef struct UgtkSelectorPage UgtkSelectorPage; typedef void (*UgtkSelectorNotify) (gpointer user_data, gboolean completed); // ---------------------------------------------------------------------------- // UgtkSelector // struct UgtkSelector { GtkWidget* self; // GtkVBox GtkWindow* parent; // parent window of UgtkSelector.self GtkNotebook* notebook; // GtkWidget* href_label; GtkEntry* href_entry; // entry for hypertext reference GtkWidget* href_separator; // select button GtkWidget* select_all; GtkWidget* select_none; GtkWidget* select_filter; // select by filter // UgtkSelectorPage is placed in array GArray* pages; // UgtkSelectorFilter use UgtkSelectorFilterData in UgtkSelectorPage struct UgtkSelectorFilter { GtkDialog* dialog; GtkTreeView* host_view; GtkTreeView* ext_view; } filter; // callback struct { UgtkSelectorNotify func; gpointer data; } notify; }; void ugtk_selector_init (UgtkSelector* selector, GtkWindow* parent); void ugtk_selector_finalize (UgtkSelector* selector); void ugtk_selector_hide_href (UgtkSelector* selector); // (gchar*) list->data. // To free the returned value, use: // g_list_free_full (list, (GDestroyNotify) g_free); GList* ugtk_selector_get_marked_uris (UgtkSelector* selector); // count marked item and notify gint ugtk_selector_count_marked (UgtkSelector* selector); gint ugtk_selector_n_items (UgtkSelector* selector); UgtkSelectorPage* ugtk_selector_add_page (UgtkSelector* selector, const gchar* title); UgtkSelectorPage* ugtk_selector_get_page (UgtkSelector* selector, gint nth_page); // ---------------------------------------------------------------------------- // UgtkSelectorPage // struct UgtkSelectorPage { GtkWidget* self; // GtkScrolledWindow GtkTreeView* view; GtkListStore* store; // total marked count gint n_marked; // used by UgtkSelectorFilter struct UgtkSelectorFilterData { GHashTable* hash; GtkListStore* host; GtkListStore* ext; } filter; }; void ugtk_selector_page_init (UgtkSelectorPage* page); void ugtk_selector_page_finalize (UgtkSelectorPage* page); // return numbers of uri added int ugtk_selector_page_add_uris (UgtkSelectorPage* page, GList* uris); void ugtk_selector_page_make_filter (UgtkSelectorPage* page); void ugtk_selector_page_mark_by_filter_all (UgtkSelectorPage* page); #ifdef __cplusplus } #endif #endif // End of UGTK_SELECTOR_H uget-2.2.3/ui-gtk/UgtkSetting.c0000664000175000017500000006156213602733704013240 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #define UGTK_APP_CLIPBOARD_PATTERN "BIN|ZIP|GZ|7Z|XZ|Z|TAR|TGZ|BZ2|" \ "LZH|A[0-9]?|RAR|R[0-9][0-9]|ISO|" \ "RPM|DEB|EXE|MSI|APK|" \ "3GP|AAC|FLAC|M4A|M4P|MP3|OGG|WAV|WMA|" \ "MP4|MKV|WEBM|OGV|AVI|MOV|WMV|FLV|F4V|MPG|MPEG|RMVB" #define UGTK_ARIA2_PATH "aria2c" #define UGTK_ARIA2_ARGS "--enable-rpc=true -D " \ "--disable-ipv6 " \ "--check-certificate=false" #define UGTK_ARIA2_URI "http://localhost:6800/jsonrpc" // ---------------------------------------------------------------------------- // WindowSetting static const UgEntry UgtkWindowSettingEntry[] = { {"Toolbar", offsetof (struct UgtkWindowSetting, toolbar), UG_ENTRY_BOOL, NULL, NULL}, {"Statusbar", offsetof (struct UgtkWindowSetting, statusbar), UG_ENTRY_BOOL, NULL, NULL}, {"Category", offsetof (struct UgtkWindowSetting, category), UG_ENTRY_BOOL, NULL, NULL}, {"Summary", offsetof (struct UgtkWindowSetting, summary), UG_ENTRY_BOOL, NULL, NULL}, {"Banner", offsetof (struct UgtkWindowSetting, banner), UG_ENTRY_BOOL, NULL, NULL}, {"x", offsetof (struct UgtkWindowSetting, x), UG_ENTRY_INT, NULL, NULL}, {"y", offsetof (struct UgtkWindowSetting, y), UG_ENTRY_INT, NULL, NULL}, {"width", offsetof (struct UgtkWindowSetting, width), UG_ENTRY_INT, NULL, NULL}, {"height", offsetof (struct UgtkWindowSetting, height), UG_ENTRY_INT, NULL, NULL}, {"maximized", offsetof (struct UgtkWindowSetting, maximized), UG_ENTRY_BOOL, NULL, NULL}, {"NthCategory", offsetof (struct UgtkWindowSetting, nth_category), UG_ENTRY_INT, NULL, NULL}, {"NthStatus", offsetof (struct UgtkWindowSetting, nth_state), UG_ENTRY_INT, NULL, NULL}, {"PanedPositionH", offsetof (struct UgtkWindowSetting, paned_position_h), UG_ENTRY_INT, NULL, NULL}, {"PanedPositionV", offsetof (struct UgtkWindowSetting, paned_position_v), UG_ENTRY_INT, NULL, NULL}, {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // SummarySetting static const UgEntry UgtkSummarySettingEntry[] = { {"name", offsetof (struct UgtkSummarySetting, name), UG_ENTRY_BOOL, NULL, NULL}, {"folder", offsetof (struct UgtkSummarySetting, folder), UG_ENTRY_BOOL, NULL, NULL}, {"category", offsetof (struct UgtkSummarySetting, category), UG_ENTRY_BOOL, NULL, NULL}, {"uri", offsetof (struct UgtkSummarySetting, uri), UG_ENTRY_BOOL, NULL, NULL}, {"message", offsetof (struct UgtkSummarySetting, message), UG_ENTRY_BOOL, NULL, NULL}, {NULL} // null-terminated }; // ---------------------------------------------------------------------------- // DownloadColumnSetting static const UgEntry UgtkDownloadColumnWidthEntry[] = { {"state", offsetof (struct UgtkDownloadColumnWidth, state), UG_ENTRY_INT, NULL, NULL}, {"name", offsetof (struct UgtkDownloadColumnWidth, name), UG_ENTRY_INT, NULL, NULL}, {"complete", offsetof (struct UgtkDownloadColumnWidth, complete), UG_ENTRY_INT, NULL, NULL}, {"total", offsetof (struct UgtkDownloadColumnWidth, total), UG_ENTRY_INT, NULL, NULL}, {"percent", offsetof (struct UgtkDownloadColumnWidth, percent), UG_ENTRY_INT, NULL, NULL}, {"elapsed", offsetof (struct UgtkDownloadColumnWidth, elapsed), UG_ENTRY_INT, NULL, NULL}, {"left", offsetof (struct UgtkDownloadColumnWidth, left), UG_ENTRY_INT, NULL, NULL}, {"speed", offsetof (struct UgtkDownloadColumnWidth, speed), UG_ENTRY_INT, NULL, NULL}, {"UploadSpeed", offsetof (struct UgtkDownloadColumnWidth, upload_speed), UG_ENTRY_INT, NULL, NULL}, {"uploaded", offsetof (struct UgtkDownloadColumnWidth, uploaded), UG_ENTRY_INT, NULL, NULL}, {"ratio", offsetof (struct UgtkDownloadColumnWidth, ratio), UG_ENTRY_INT, NULL, NULL}, {"retry", offsetof (struct UgtkDownloadColumnWidth, retry), UG_ENTRY_INT, NULL, NULL}, {"category", offsetof (struct UgtkDownloadColumnWidth, category), UG_ENTRY_INT, NULL, NULL}, {"uri", offsetof (struct UgtkDownloadColumnWidth, uri), UG_ENTRY_INT, NULL, NULL}, {"AddedOn", offsetof (struct UgtkDownloadColumnWidth, added_on), UG_ENTRY_INT, NULL, NULL}, {"CompletedOn", offsetof (struct UgtkDownloadColumnWidth, completed_on), UG_ENTRY_INT, NULL, NULL}, {NULL} // null-terminated }; static const UgEntry UgtkDownloadColumnSettingEntry[] = { {"complete", offsetof (struct UgtkDownloadColumnSetting, complete), UG_ENTRY_BOOL, NULL, NULL}, {"total", offsetof (struct UgtkDownloadColumnSetting, total), UG_ENTRY_BOOL, NULL, NULL}, {"percent", offsetof (struct UgtkDownloadColumnSetting, percent), UG_ENTRY_BOOL, NULL, NULL}, {"elapsed", offsetof (struct UgtkDownloadColumnSetting, elapsed), UG_ENTRY_BOOL, NULL, NULL}, {"left", offsetof (struct UgtkDownloadColumnSetting, left), UG_ENTRY_BOOL, NULL, NULL}, {"speed", offsetof (struct UgtkDownloadColumnSetting, speed), UG_ENTRY_BOOL, NULL, NULL}, {"UploadSpeed", offsetof (struct UgtkDownloadColumnSetting, upload_speed), UG_ENTRY_BOOL, NULL, NULL}, {"uploaded", offsetof (struct UgtkDownloadColumnSetting, uploaded), UG_ENTRY_BOOL, NULL, NULL}, {"ratio", offsetof (struct UgtkDownloadColumnSetting, ratio), UG_ENTRY_BOOL, NULL, NULL}, {"retry", offsetof (struct UgtkDownloadColumnSetting, retry), UG_ENTRY_BOOL, NULL, NULL}, {"category", offsetof (struct UgtkDownloadColumnSetting, category), UG_ENTRY_BOOL, NULL, NULL}, {"uri", offsetof (struct UgtkDownloadColumnSetting, uri), UG_ENTRY_BOOL, NULL, NULL}, {"AddedOn", offsetof (struct UgtkDownloadColumnSetting, added_on), UG_ENTRY_BOOL, NULL, NULL}, {"CompletedOn", offsetof (struct UgtkDownloadColumnSetting, completed_on), UG_ENTRY_BOOL, NULL, NULL}, {"SortType", offsetof (struct UgtkDownloadColumnSetting, sort.type), UG_ENTRY_INT, NULL, NULL}, {"SortNth", offsetof (struct UgtkDownloadColumnSetting, sort.nth), UG_ENTRY_INT, NULL, NULL}, {"Width", offsetof (struct UgtkDownloadColumnSetting, width), UG_ENTRY_OBJECT, (void*) UgtkDownloadColumnWidthEntry, NULL}, // deprecated {"completed", offsetof (struct UgtkDownloadColumnSetting, complete), UG_ENTRY_BOOL, NULL, NULL}, {NULL} // null-terminated }; // ---------------------------------------------------------------------------- // UserInterfaceSetting static const UgEntry UgtkUserInterfaceSettingEntry[] = { {"ExitConfirmation", offsetof (struct UgtkUserInterfaceSetting, exit_confirmation), UG_ENTRY_BOOL, NULL, NULL}, {"DeleteConfirmation", offsetof (struct UgtkUserInterfaceSetting, delete_confirmation), UG_ENTRY_BOOL, NULL, NULL}, {"ShowTrayIcon", offsetof (struct UgtkUserInterfaceSetting, show_trayicon), UG_ENTRY_BOOL, NULL, NULL}, {"StartInTray", offsetof (struct UgtkUserInterfaceSetting, start_in_tray), UG_ENTRY_BOOL, NULL, NULL}, {"CloseToTray", offsetof (struct UgtkUserInterfaceSetting, close_to_tray), UG_ENTRY_BOOL, NULL, NULL}, {"StartInOfflineMode", offsetof (struct UgtkUserInterfaceSetting, start_in_offline_mode), UG_ENTRY_BOOL, NULL, NULL}, {"StartNotification", offsetof (struct UgtkUserInterfaceSetting, start_notification), UG_ENTRY_BOOL, NULL, NULL}, {"SoundNotification", offsetof (struct UgtkUserInterfaceSetting, sound_notification), UG_ENTRY_BOOL, NULL, NULL}, {"ApplyRecently", offsetof (struct UgtkUserInterfaceSetting, apply_recent), UG_ENTRY_BOOL, NULL, NULL}, {"ApplyRecent", offsetof (struct UgtkUserInterfaceSetting, apply_recent), UG_ENTRY_BOOL, NULL, NULL}, {"SkipExisting", offsetof (struct UgtkUserInterfaceSetting, skip_existing), UG_ENTRY_BOOL, NULL, NULL}, {"LargeIcon", offsetof (struct UgtkUserInterfaceSetting, large_icon), UG_ENTRY_BOOL, NULL, NULL}, #ifdef HAVE_APP_INDICATOR {"AppIndicator", offsetof (struct UgtkUserInterfaceSetting, app_indicator), UG_ENTRY_BOOL, NULL, NULL}, #endif {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // ClipboardSetting static const UgEntry UgtkClipboardSettingEntry[] = { {"pattern", offsetof (struct UgtkClipboardSetting, pattern), UG_ENTRY_STRING, NULL, NULL}, {"monitor", offsetof (struct UgtkClipboardSetting, monitor), UG_ENTRY_BOOL, NULL, NULL}, {"quiet", offsetof (struct UgtkClipboardSetting, quiet), UG_ENTRY_BOOL, NULL, NULL}, {"NthCategory", offsetof (struct UgtkClipboardSetting, nth_category), UG_ENTRY_INT, NULL, NULL}, {"Website", offsetof (struct UgtkClipboardSetting, website), UG_ENTRY_BOOL, NULL, NULL}, // remove this in future verison {"MediaWebsite", offsetof (struct UgtkClipboardSetting, website), UG_ENTRY_BOOL, NULL, NULL}, {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // BandwidthSetting static const UgEntry UgtkBandwidthSettingEntry[] = { {"NormalUpload", offsetof (struct UgtkBandwidthSetting, normal.upload), UG_ENTRY_INT, NULL, NULL}, {"NormalDownload", offsetof (struct UgtkBandwidthSetting, normal.download), UG_ENTRY_INT, NULL, NULL}, {"SchedulerUpload", offsetof (struct UgtkBandwidthSetting, scheduler.upload), UG_ENTRY_INT, NULL, NULL}, {"SchedulerDownload", offsetof (struct UgtkBandwidthSetting, scheduler.download), UG_ENTRY_INT, NULL, NULL}, {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // SchedulerSetting static const UgEntry UgtkSchedulerSettingEntry[] = { {"enable", offsetof (struct UgtkSchedulerSetting, enable), UG_ENTRY_BOOL, NULL, NULL}, {"state", offsetof (struct UgtkSchedulerSetting, state), UG_ENTRY_ARRAY, ug_json_parse_array_int, ug_json_write_array_int}, {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // CommandlineSetting static const UgEntry UgtkCommandlineSettingEntry[] = { {"quiet", offsetof (struct UgtkCommandlineSetting, quiet), UG_ENTRY_BOOL, NULL, NULL}, {"NthCategory", offsetof (struct UgtkCommandlineSetting, nth_category), UG_ENTRY_INT, NULL, NULL}, {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // PluginAria2Setting static const UgEntry UgtkPluginAria2SettingEntry[] = { {"launch", offsetof (struct UgtkPluginAria2Setting, launch), UG_ENTRY_BOOL, NULL, NULL}, {"shutdown", offsetof (struct UgtkPluginAria2Setting, shutdown), UG_ENTRY_BOOL, NULL, NULL}, {"token", offsetof (struct UgtkPluginAria2Setting, token), UG_ENTRY_STRING, NULL, NULL}, {"path", offsetof (struct UgtkPluginAria2Setting, path), UG_ENTRY_STRING, NULL, NULL}, {"arguments", offsetof (struct UgtkPluginAria2Setting, args), UG_ENTRY_STRING, NULL, NULL}, {"uri", offsetof (struct UgtkPluginAria2Setting, uri), UG_ENTRY_STRING, NULL, NULL}, {"MaxUploadSpeed", offsetof (struct UgtkPluginAria2Setting, limit.upload), UG_ENTRY_INT, NULL, NULL}, {"MaxDownloadSpeed", offsetof (struct UgtkPluginAria2Setting, limit.download), UG_ENTRY_INT, NULL, NULL}, {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // PluginMediaSetting static const UgEntry UgtkPluginMediaSettingEntry[] = { {"match_mode", offsetof (struct UgtkPluginMediaSetting, match_mode), UG_ENTRY_INT, NULL, NULL}, {"quality", offsetof (struct UgtkPluginMediaSetting, quality), UG_ENTRY_INT, NULL, NULL}, {"type", offsetof (struct UgtkPluginMediaSetting, type), UG_ENTRY_INT, NULL, NULL}, {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // UgtkCompletionSetting static const UgEntry UgtkCompletionSettingEntry[] = { {"remember", offsetof (struct UgtkCompletionSetting, remember), UG_ENTRY_BOOL, NULL, NULL}, {"action", offsetof (struct UgtkCompletionSetting, action), UG_ENTRY_INT, NULL, NULL}, {"command", offsetof (struct UgtkCompletionSetting, command), UG_ENTRY_STRING, NULL, NULL}, {"OnError", offsetof (struct UgtkCompletionSetting, on_error), UG_ENTRY_STRING, NULL, NULL}, {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // UgtkSetting static const UgEntry UgtkSettingEntry[] = { {"Window", offsetof (UgtkSetting, window), UG_ENTRY_OBJECT, (void*) UgtkWindowSettingEntry, NULL}, {"Summary", offsetof (UgtkSetting, summary), UG_ENTRY_OBJECT, (void*) UgtkSummarySettingEntry, NULL}, {"DownloadColumn", offsetof (UgtkSetting, download_column), UG_ENTRY_OBJECT, (void*) UgtkDownloadColumnSettingEntry, NULL}, {"UserInterface", offsetof (UgtkSetting, ui), UG_ENTRY_OBJECT, (void*) UgtkUserInterfaceSettingEntry, NULL}, {"Clipboard", offsetof (UgtkSetting, clipboard), UG_ENTRY_OBJECT, (void*) UgtkClipboardSettingEntry, NULL}, {"Bandwidth", offsetof (UgtkSetting, bandwidth), UG_ENTRY_OBJECT, (void*) UgtkBandwidthSettingEntry, NULL}, {"Commandline", offsetof (UgtkSetting, commandline), UG_ENTRY_OBJECT, (void*) UgtkCommandlineSettingEntry, NULL}, {"PluginOrder", offsetof (UgtkSetting, plugin_order), UG_ENTRY_INT, NULL, NULL}, {"PluginAria2", offsetof (UgtkSetting, aria2), UG_ENTRY_OBJECT, (void*) UgtkPluginAria2SettingEntry, NULL}, {"PluginMedia", offsetof (UgtkSetting, media), UG_ENTRY_OBJECT, (void*) UgtkPluginMediaSettingEntry, NULL}, {"Completion", offsetof (UgtkSetting, completion), UG_ENTRY_OBJECT, (void*) UgtkCompletionSettingEntry, NULL}, {"FolderHistory", offsetof (UgtkSetting, folder_history), UG_ENTRY_ARRAY, ug_json_parse_list_string, ug_json_write_list_string}, {"AutoSave", offsetof (UgtkSetting, auto_save.enable), UG_ENTRY_INT, NULL, NULL}, {"AutoSaveInterval",offsetof (UgtkSetting, auto_save.interval), UG_ENTRY_INT, NULL, NULL}, // {"OfflineMode", offsetof (UgtkSetting, offline_mode), // UG_ENTRY_BOOL, NULL, NULL}, {"Scheduler", offsetof (UgtkSetting, scheduler), UG_ENTRY_OBJECT, (void*) UgtkSchedulerSettingEntry, NULL}, {NULL}, // null-terminated }; // ---------------------------------------------------------------------------- // "UgSetting" functions // void ugtk_setting_init (UgtkSetting* setting) { // "SchedulerSetting" ug_array_init (&setting->scheduler.state, sizeof (int), 7*24); memset (setting->scheduler.state.at, UGTK_SCHEDULE_NORMAL, 7*24); // default settings for media (or storage) website setting->clipboard.website = TRUE; setting->media.match_mode = UGET_MEDIA_MATCH_NEAR; setting->media.quality = UGET_MEDIA_QUALITY_360P; setting->media.type = UGET_MEDIA_TYPE_MP4; } void ugtk_setting_reset (UgtkSetting* setting) { unsigned int weekdays, dayhours; // "WindowSetting" setting->window.toolbar = TRUE; setting->window.statusbar = TRUE; setting->window.category = TRUE; setting->window.summary = TRUE; setting->window.banner = TRUE; setting->window.x = 0; setting->window.y = 0; setting->window.width = 0; setting->window.height = 0; setting->window.maximized = FALSE; setting->window.paned_position_h = -1; setting->window.paned_position_v = -1; // "SummarySetting" setting->summary.name = TRUE; setting->summary.folder = TRUE; setting->summary.category = FALSE; setting->summary.uri = FALSE; setting->summary.message = TRUE; // "DownloadColumnSetting" setting->download_column.complete = TRUE; setting->download_column.total = TRUE; setting->download_column.percent = TRUE; setting->download_column.elapsed = TRUE; setting->download_column.left = TRUE; setting->download_column.speed = TRUE; setting->download_column.upload_speed = TRUE; setting->download_column.uploaded = FALSE; setting->download_column.ratio = TRUE; setting->download_column.retry = TRUE; setting->download_column.category = FALSE; setting->download_column.uri = FALSE; setting->download_column.added_on = TRUE; setting->download_column.completed_on = FALSE; // default sorted column setting->download_column.sort.type = GTK_SORT_DESCENDING; setting->download_column.sort.nth = UGTK_NODE_COLUMN_STATE; // "DownloadColumnWidth" memset (&setting->download_column.width, 0, sizeof (setting->download_column.width)); // "UserInterfaceSetting" setting->ui.exit_confirmation = TRUE; setting->ui.delete_confirmation = TRUE; setting->ui.show_trayicon = TRUE; setting->ui.start_in_tray = FALSE; setting->ui.close_to_tray = TRUE; setting->ui.start_in_offline_mode = FALSE; setting->ui.start_notification = TRUE; setting->ui.sound_notification = TRUE; setting->ui.apply_recent = TRUE; setting->ui.skip_existing = FALSE; setting->ui.large_icon = FALSE; #ifdef HAVE_APP_INDICATOR setting->ui.app_indicator = TRUE; #endif // "ClipboardSetting" ug_free (setting->clipboard.pattern); setting->clipboard.pattern = ug_strdup (UGTK_APP_CLIPBOARD_PATTERN); setting->clipboard.monitor = TRUE; setting->clipboard.quiet = FALSE; setting->clipboard.nth_category = 0; setting->clipboard.website = TRUE; // "BandwidthSetting" setting->bandwidth.normal.upload = 0; setting->bandwidth.normal.download = 0; setting->bandwidth.scheduler.upload = 0; setting->bandwidth.scheduler.download = 0; // "SchedulerSetting" setting->scheduler.enable = FALSE; ug_array_init (&setting->scheduler.state, sizeof (int), 7*24); setting->scheduler.state.length = 7 * 24; for (weekdays = 0; weekdays < 7; weekdays++) { for (dayhours = 0; dayhours < 24; dayhours++) { setting->scheduler.state.at[weekdays*24 + dayhours] = UGTK_SCHEDULE_NORMAL; } } // "CommandlineSetting" setting->commandline.quiet = FALSE; setting->commandline.nth_category = 0; // "PluginSetting" setting->plugin_order = UGTK_PLUGIN_ORDER_CURL; // aria2 plug-in settings setting->aria2.limit.download = 0; setting->aria2.limit.upload = 0; setting->aria2.launch = TRUE; setting->aria2.shutdown = TRUE; setting->aria2.path = ug_strdup (UGTK_ARIA2_PATH); setting->aria2.args = ug_strdup (UGTK_ARIA2_ARGS); setting->aria2.uri = ug_strdup (UGTK_ARIA2_URI); // media plug-in settings setting->media.match_mode = UGET_MEDIA_MATCH_NEAR; setting->media.quality = UGET_MEDIA_QUALITY_360P; setting->media.type = UGET_MEDIA_TYPE_MP4; // Others setting->completion.remember = TRUE; setting->completion.action = 0; setting->completion.command = NULL; setting->completion.on_error = NULL; setting->auto_save.enable = TRUE; setting->auto_save.interval = 3; setting->offline_mode = FALSE; } // ---------------------------------------------------------------------------- // save/load settings int ugtk_setting_save (UgtkSetting* setting, const char* file) { int action; char* path; UgJsonFile* jfile; path = g_strconcat (file, ".temp", NULL); jfile = ug_json_file_new (4096); if (ug_json_file_begin_write (jfile, path, UG_JSON_FORMAT_ALL) == FALSE) { ug_json_file_free (jfile); g_free (path); return FALSE; } // save completion.action action = setting->completion.action; if (setting->completion.remember == FALSE) setting->completion.action = 0; ug_json_write_object_head (&jfile->json); ug_json_write_entry (&jfile->json, setting, UgtkSettingEntry); ug_json_write_object_tail (&jfile->json); // restore completion.action if (setting->completion.remember == FALSE) setting->completion.action = action; ug_json_file_end_write (jfile); ug_json_file_free (jfile); ug_remove (file); ug_rename (path, file); g_free (path); return TRUE; } int ugtk_setting_load (UgtkSetting* setting, const char* path) { int file_ok; char* path_temp; UgJsonFile* jfile; path_temp = g_strconcat (path, ".temp", NULL); jfile = ug_json_file_new (4096); file_ok = ug_json_file_begin_parse (jfile, path); if (file_ok) ug_remove (path_temp); else if (ug_rename (path_temp, path) != -1) file_ok = ug_json_file_begin_parse (jfile, path); g_free (path_temp); if (file_ok == FALSE) { ug_json_file_free (jfile); return FALSE; } ug_json_push (&jfile->json, ug_json_parse_entry, setting, (void*) UgtkSettingEntry); ug_json_push (&jfile->json, ug_json_parse_object, NULL, NULL); ug_json_file_end_parse (jfile); ug_json_file_free (jfile); // check & fix settings ugtk_setting_fix_data (setting); return TRUE; } void ugtk_setting_add_folder (UgtkSetting* setting, const char* folder) { UgList* list; UgLink* link; if (folder == NULL || folder[0] == 0) return; list = &setting->folder_history; for (link = list->head; link; link = link->next) { if (strcmp (folder, link->data) == 0) { ug_list_remove (list, link); ug_list_prepend (list, link); return; } } if (list->size >= 8) { link = list->tail; ug_list_remove (list, link); ug_free (link->data); ug_link_free (link); } link = ug_link_new (); link->data = ug_strdup (folder); ug_list_prepend (list, link); } void ugtk_setting_fix_data (UgtkSetting* setting) { unsigned int index; // "DownloadColumnSetting" // default sorted column if (setting->download_column.sort.type != GTK_SORT_ASCENDING && setting->download_column.sort.type != GTK_SORT_DESCENDING) { setting->download_column.sort.type = GTK_SORT_DESCENDING; } if (setting->download_column.sort.nth < 0 || setting->download_column.sort.nth >= UGTK_NODE_N_COLUMNS) { setting->download_column.sort.nth = UGTK_NODE_COLUMN_ADDED_ON; } // "ClipboardSetting" if (setting->clipboard.pattern == NULL || setting->clipboard.pattern[0] == 0) { ug_free (setting->clipboard.pattern); setting->clipboard.pattern = ug_strdup (UGTK_APP_CLIPBOARD_PATTERN); } // "SchedulerSetting" for (index = 0; index < 7*24; index++) { if (setting->scheduler.state.at[index] < 0 || setting->scheduler.state.at[index] >= UGTK_SCHEDULE_N_STATE) { setting->scheduler.state.at[index] = UGTK_SCHEDULE_NORMAL; } } // "PluginSetting" if (setting->plugin_order < 0 || setting->plugin_order >= UGTK_PLUGIN_N_ORDER) { setting->plugin_order = UGTK_PLUGIN_ORDER_CURL; } // aria2 plug-in settings if (setting->aria2.path == NULL || setting->aria2.path[0] == 0) { ug_free (setting->aria2.path); setting->aria2.path = ug_strdup (UGTK_ARIA2_PATH); } if (setting->aria2.args == NULL || setting->aria2.args[0] == 0) { ug_free (setting->aria2.args); setting->aria2.args = ug_strdup (UGTK_ARIA2_ARGS); } if (setting->aria2.uri == NULL || setting->aria2.uri[0] == 0) { ug_free (setting->aria2.uri); setting->aria2.uri = ug_strdup (UGTK_ARIA2_URI); } // media plug-in settings if (setting->media.match_mode < 0 || setting->media.match_mode > UGET_MEDIA_N_MATCH_MODE) setting->media.match_mode = UGET_MEDIA_MATCH_NEAR; if (setting->media.quality <= 1 || setting->media.quality > UGET_MEDIA_N_QUALITY) setting->media.quality = UGET_MEDIA_QUALITY_360P; if (setting->media.type <= 0 || setting->media.type > UGET_MEDIA_N_TYPE) setting->media.type = UGET_MEDIA_TYPE_MP4; } uget-2.2.3/ui-gtk/UgtkConfig.c0000664000175000017500000000654713602733704013032 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include // ---------------------------------------------------------------------------- // path #if defined _WIN32 || defined _WIN64 #include const char* ugtk_get_install_dir (void) { static gchar* install_dir = NULL; if (install_dir == NULL) { gchar* path; gunichar2* path_wcs; HMODULE hmod; hmod = GetModuleHandle (NULL); // UNICODE path_wcs = g_malloc (sizeof (wchar_t) * MAX_PATH); GetModuleFileNameW (hmod, path_wcs, MAX_PATH); path = g_utf16_to_utf8 (path_wcs, -1, NULL, NULL, NULL); g_free (path_wcs); install_dir = g_path_get_dirname (path); g_free (path); } return install_dir; } gboolean ugtk_is_portable_mode (void) { static int portable = -1; char* local_path; if (portable == -1) { local_path = g_build_filename (ugtk_get_install_dir(), "uget-portable-mode", NULL); portable = g_file_test (local_path, G_FILE_TEST_EXISTS); g_free (local_path); } return portable; } const char* ugtk_get_data_dir (void) { static gchar* data_dir = NULL; if (data_dir == NULL) data_dir = g_build_filename (ugtk_get_install_dir(), "..", "share", NULL); return data_dir; } const char* ugtk_get_config_dir (void) { static const gchar* config_dir = NULL; if (config_dir == NULL) { if (ugtk_is_portable_mode () == TRUE) config_dir = g_build_filename (ugtk_get_install_dir(), "..", "config", NULL); else config_dir = g_get_user_config_dir (); } return config_dir; } #else const char* ugtk_get_data_dir (void) { return UG_DATADIR; } const char* ugtk_get_config_dir (void) { return g_get_user_config_dir (); } #endif // _WIN32 || _WIN64 const char* ugtk_get_locale_dir (void) { static gchar* locale_dir = NULL; if (locale_dir == NULL) locale_dir = g_build_filename (ugtk_get_data_dir(), "locale", NULL); return locale_dir; } uget-2.2.3/ui-gtk/UgtkDownloadForm.h0000664000175000017500000001105013602733704014206 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_DOWNLOAD_FORM_H #define UGTK_DOWNLOAD_FORM_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgtkDownloadForm UgtkDownloadForm; typedef struct UgtkSetting UgtkSetting; struct UgtkDownloadForm { GtkWindow* parent; // parent window of UgtkDownloadForm.self // ---------------------------------------------------- // Page 1 // GtkWidget* page1; GtkWidget* uri_label; GtkWidget* uri_entry; // GtkWidget* url_button; GtkWidget* mirrors_label; GtkWidget* mirrors_entry; // GtkWidget* mirror_button; GtkWidget* file_label; GtkWidget* file_entry; // GtkWidget* file_button; GtkWidget* folder_combo; GtkWidget* folder_entry; // GtkWidget* folder_button; // GtkWidget* referrer_label; GtkWidget* referrer_entry; // widgets for login fields // GtkWidget* username_label; GtkWidget* username_entry; // GtkWidget* password_label; GtkWidget* password_entry; // widgets for Status GtkWidget* radio_runnable; GtkWidget* radio_pause; // Connections per server GtkWidget* title_connections; GtkWidget* label_connections; GtkWidget* spin_connections; // connections // ---------------------------------------------------- // Page 2 // GtkWidget* page2; GtkWidget* cookie_label; GtkWidget* cookie_entry; GtkWidget* post_label; GtkWidget* post_entry; GtkWidget* agent_label; // user agent GtkWidget* agent_entry; GtkSpinButton* spin_download_speed; GtkSpinButton* spin_upload_speed; // GtkWidget* spin_parts; // GtkWidget* spin_redirect; GtkWidget* spin_retry; // counts GtkWidget* spin_delay; // seconds GtkToggleButton* timestamp; // ---------------------------------------------------- // User changed entry // struct UgtkDownloadFormChanged { gboolean enable:1; gboolean uri:1; gboolean mirrors:1; gboolean file:1; gboolean folder:1; gboolean user:1; gboolean password:1; gboolean referrer:1; gboolean cookie:1; gboolean post:1; gboolean agent:1; gboolean retry:1; // spin_retry gboolean delay:1; // spin_delay gboolean connections:1; // spin_connections gboolean max_upload_speed:1; // spin_upload_speed gboolean max_download_speed:1; // spin_download_speed gboolean timestamp:1; } changed; gboolean completed:1; }; void ugtk_download_form_init (UgtkDownloadForm* dform, UgtkProxyForm* proxy, GtkWindow* parent); void ugtk_download_form_get (UgtkDownloadForm* dform, UgInfo* info); void ugtk_download_form_set (UgtkDownloadForm* dform, UgInfo* info, gboolean keep_changed); void ugtk_download_form_set_multiple (UgtkDownloadForm* dform, gboolean multiple_mode); void ugtk_download_form_set_folders (UgtkDownloadForm* dform, UgtkSetting* setting); void ugtk_download_form_get_folders (UgtkDownloadForm* dform, UgtkSetting* setting); void ugtk_download_form_complete_entry (UgtkDownloadForm* dform); #ifdef __cplusplus } #endif #endif // End of UGTK_DOWNLOAD_FORM_H uget-2.2.3/ui-gtk/UgtkTrayIcon.c0000664000175000017500000004174613602733704013355 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #define UGTK_TRAY_ICON_NAME "uget-tray-default" #define UGTK_TRAY_ICON_ERROR_NAME "uget-tray-error" #define UGTK_TRAY_ICON_ACTIVE_NAME "uget-tray-downloading" void ugtk_tray_icon_init (UgtkTrayIcon* trayicon) { GtkWidget* image; GtkWidget* menu; GtkWidget* menu_item; gchar* icon_name; gchar* file_name; // UgTrayIcon.menu menu = gtk_menu_new (); // New Download menu_item = gtk_image_menu_item_new_with_mnemonic (_("New _Download...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-new", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.create_download = menu_item; // New Clipboard batch menu_item = gtk_image_menu_item_new_with_mnemonic (_("New Clipboard _batch...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("edit-paste", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.create_clipboard = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // New Torrent menu_item = gtk_image_menu_item_new_with_mnemonic (_("New Torrent...")); // image = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.create_torrent = menu_item; // New Metalink menu_item = gtk_image_menu_item_new_with_mnemonic (_("New Metalink...")); // image = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.create_metalink = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // Settings shortcut menu_item = gtk_check_menu_item_new_with_mnemonic (_("Clipboard _Monitor")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.clipboard_monitor = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Clipboard works quietly")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.clipboard_quiet = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Command-line works quietly")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.commandline_quiet = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Skip existing URI")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.skip_existing = menu_item; menu_item = gtk_check_menu_item_new_with_mnemonic (_("Apply recent download settings")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.apply_recent = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // Settings menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Settings...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-properties", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.settings = menu_item; // About menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_ABOUT, NULL); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.about = menu_item; gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); #ifdef HAVE_APP_INDICATOR // Show window menu_item = gtk_menu_item_new_with_mnemonic (_("Show window")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.show_window = menu_item; #endif // Offline mode menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Offline Mode")); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.offline_mode = menu_item; // Quit menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); trayicon->menu.quit = menu_item; gtk_widget_show_all (menu); trayicon->menu.self = menu; // decide tray icon file_name = g_build_filename (UG_DATADIR, "icons", "hicolor", "16x16", "apps", "uget-icon.png", NULL); if (g_file_test (file_name, G_FILE_TEST_IS_REGULAR)) icon_name = UGTK_TRAY_ICON_NAME; else icon_name = GTK_STOCK_GO_DOWN; g_free (file_name); #ifdef HAVE_APP_INDICATOR trayicon->indicator = app_indicator_new ("uget-gtk", icon_name, APP_INDICATOR_CATEGORY_APPLICATION_STATUS); trayicon->indicator_temp = trayicon->indicator; if (trayicon->indicator) { app_indicator_set_menu (trayicon->indicator, GTK_MENU (trayicon->menu.self)); // app_indicator_set_attention_icon_full (trayicon->indicator, // UGTK_TRAY_ICON_ACTIVE_NAME, NULL); app_indicator_set_attention_icon (trayicon->indicator, UGTK_TRAY_ICON_ACTIVE_NAME); app_indicator_set_status (trayicon->indicator, APP_INDICATOR_STATUS_PASSIVE); } #endif // HAVE_APP_INDICATOR trayicon->self = gtk_status_icon_new_from_icon_name (icon_name); gtk_status_icon_set_visible (trayicon->self, FALSE); } void ugtk_tray_icon_set_info (UgtkTrayIcon* trayicon, guint n_active, gint64 down_speed, gint64 up_speed) { gchar* string; char* string_down_speed; char* string_up_speed; guint current_state; // change tray icon if (trayicon->error_occurred) { string = UGTK_TRAY_ICON_ERROR_NAME; current_state = UGTK_TRAY_ICON_STATE_ERROR; } else if (n_active > 0) { string = UGTK_TRAY_ICON_ACTIVE_NAME; current_state = UGTK_TRAY_ICON_STATE_RUNNING; } else { string = UGTK_TRAY_ICON_NAME; current_state = UGTK_TRAY_ICON_STATE_NORMAL; } if (trayicon->state != current_state) { trayicon->state = current_state; #ifdef HAVE_APP_INDICATOR if (trayicon->indicator) { trayicon->error_occurred = FALSE; if (app_indicator_get_status (trayicon->indicator) != APP_INDICATOR_STATUS_PASSIVE) { if (current_state == UGTK_TRAY_ICON_STATE_NORMAL) { app_indicator_set_status (trayicon->indicator, APP_INDICATOR_STATUS_ACTIVE); } else { app_indicator_set_attention_icon (trayicon->indicator, string); // app_indicator_set_attention_icon_full (trayicon->indicator, // string, "attention"); app_indicator_set_status (trayicon->indicator, APP_INDICATOR_STATUS_ATTENTION); } } } else #endif // HAVE_APP_INDICATOR gtk_status_icon_set_from_icon_name (trayicon->self, string); } // change tooltip string_down_speed = ug_str_from_int_unit (down_speed, "/s"); string_up_speed = ug_str_from_int_unit (up_speed, "/s"); string = g_strdup_printf ( UGTK_APP_NAME " " PACKAGE_VERSION "\n" "%u %s" "\n" "\xE2\x86\x93 %s" // "↓" " , " "\xE2\x86\x91 %s", // "↑" n_active, _("tasks"), string_down_speed, string_up_speed); #ifdef HAVE_APP_INDICATOR if (trayicon->indicator) { // g_object_set (trayicon->indicator, "icon-desc", string, NULL); // g_object_set (trayicon->indicator, "attention-icon-desc", string, NULL); } else #endif // HAVE_APP_INDICATOR gtk_status_icon_set_tooltip_text (trayicon->self, string); ug_free (string_down_speed); ug_free (string_up_speed); g_free (string); } void ugtk_tray_icon_set_visible (UgtkTrayIcon* trayicon, gboolean visible) { #ifdef HAVE_APP_INDICATOR if (trayicon->indicator) { if (visible) app_indicator_set_status (trayicon->indicator, APP_INDICATOR_STATUS_ACTIVE); else app_indicator_set_status (trayicon->indicator, APP_INDICATOR_STATUS_PASSIVE); } else #endif // HAVE_APP_INDICATOR gtk_status_icon_set_visible (trayicon->self, visible); trayicon->visible = visible; } #ifdef HAVE_APP_INDICATOR void ugtk_tray_icon_use_indicator (UgtkTrayIcon* trayicon, gboolean enable) { ugtk_tray_icon_set_visible (trayicon, FALSE); if (enable) trayicon->indicator = trayicon->indicator_temp; else trayicon->indicator = NULL; ugtk_tray_icon_set_visible (trayicon, trayicon->visible); } #endif // HAVE_APP_INDICATOR // ---------------------------------------------------------------------------- // Callback static void on_trayicon_activate (GtkStatusIcon* status_icon, UgtkApp* app) { gint x, y; if (gtk_widget_get_visible ((GtkWidget*) app->window.self) == TRUE) { // get position and size gtk_window_get_position (app->window.self, &x, &y); gtk_window_get_size (app->window.self, &app->setting.window.width, &app->setting.window.height); // gtk_window_get_position() may return: x == -32000, y == -32000 if (x + app->setting.window.width > 0) app->setting.window.x = x; if (y + app->setting.window.height > 0) app->setting.window.y = y; // hide window #if defined _WIN32 || defined _WIN64 // gtk_window_iconify (app->window.self); #endif gtk_widget_hide ((GtkWidget*) app->window.self); } else { #if defined _WIN32 || defined _WIN64 // gtk_window_deiconify (app->window.self); #endif gtk_widget_show ((GtkWidget*) app->window.self); gtk_window_present (app->window.self); ugtk_app_decide_trayicon_visible (app); // set position and size gtk_window_move (app->window.self, app->setting.window.x, app->setting.window.y); gtk_window_resize (app->window.self, app->setting.window.width, app->setting.window.height); } // clear error status if (app->trayicon.error_occurred) { app->trayicon.error_occurred = FALSE; app->trayicon.state = UGTK_TRAY_ICON_STATE_NORMAL; gtk_status_icon_set_from_icon_name (status_icon, UGTK_TRAY_ICON_NAME); } } static void on_trayicon_popup_menu (GtkStatusIcon* status_icon, guint button, guint activate_time, UgtkTrayIcon* trayicon) { gtk_menu_set_screen ((GtkMenu*) trayicon->menu.self, gtk_status_icon_get_screen (status_icon)); #if defined _WIN32 || defined _WIN64 gtk_menu_popup ((GtkMenu*) trayicon->menu.self, NULL, NULL, NULL, NULL, button, activate_time); #else gtk_menu_popup ((GtkMenu*) trayicon->menu.self, NULL, NULL, gtk_status_icon_position_menu, status_icon, button, activate_time); #endif } #if defined _WIN32 || defined _WIN64 static gboolean tray_menu_timeout (GtkMenu* menu) { gtk_menu_popdown (menu); // return FALSE if the source should be removed. return FALSE; } static gboolean tray_menu_leave_enter (GtkWidget* menu, GdkEventCrossing* event, gpointer data) { static guint tray_menu_timer = 0; if (event->type == GDK_LEAVE_NOTIFY && (event->detail == GDK_NOTIFY_ANCESTOR || event->detail == GDK_NOTIFY_UNKNOWN)) { if (tray_menu_timer == 0) { tray_menu_timer = g_timeout_add (500, (GSourceFunc) tray_menu_timeout, menu); } } else if (event->type == GDK_ENTER_NOTIFY && event->detail == GDK_NOTIFY_ANCESTOR) { if (tray_menu_timer != 0) { g_source_remove (tray_menu_timer); tray_menu_timer = 0; } } return FALSE; } #endif // _WIN32 || _WIN64 static void on_create_download (GtkWidget* widget, UgtkApp* app) { ugtk_app_create_download (app, NULL, NULL); } static void on_clipboard_monitor (GtkWidget* widget, UgtkApp* app) { if (app->trayicon.menu.emission) g_signal_emit_by_name (app->menubar.edit.clipboard_monitor, "activate"); } static void on_clipboard_quiet (GtkWidget* widget, UgtkApp* app) { if (app->trayicon.menu.emission) g_signal_emit_by_name (app->menubar.edit.clipboard_quiet, "activate"); } static void on_commandline_quiet (GtkWidget* widget, UgtkApp* app) { if (app->trayicon.menu.emission) g_signal_emit_by_name (app->menubar.edit.commandline_quiet, "activate"); } static void on_skip_existing (GtkWidget* widget, UgtkApp* app) { if (app->trayicon.menu.emission) g_signal_emit_by_name (app->menubar.edit.skip_existing, "activate"); } static void on_apply_recent (GtkWidget* widget, UgtkApp* app) { if (app->trayicon.menu.emission) g_signal_emit_by_name (app->menubar.edit.apply_recent, "activate"); } static void on_config_settings (GtkWidget* widget, UgtkApp* app) { g_signal_emit_by_name (app->menubar.edit.settings, "activate"); } static void on_offline_mode (GtkWidget* widget, UgtkApp* app) { gboolean offline; offline = gtk_check_menu_item_get_active ((GtkCheckMenuItem*) widget); app->setting.offline_mode = offline; // file menu offline = gtk_check_menu_item_get_active ( (GtkCheckMenuItem*) app->menubar.file.offline_mode); if (offline != app->setting.offline_mode) { gtk_check_menu_item_set_active ( (GtkCheckMenuItem*) app->menubar.file.offline_mode, app->setting.offline_mode); } } static void on_about (GtkWidget* widget, UgtkApp* app) { g_signal_emit_by_name (app->menubar.help.about_uget, "activate"); } #ifdef HAVE_APP_INDICATOR static void on_trayicon_show_window (GtkWidget* widget, UgtkApp* app) { if (gtk_widget_get_visible ((GtkWidget*) app->window.self)) gtk_window_present (app->window.self); else { gtk_widget_show ((GtkWidget*) app->window.self); // gtk_window_deiconify (app->window.self); gtk_window_present (app->window.self); ugtk_app_decide_trayicon_visible (app); } } #endif // HAVE_APP_INDICATOR void ugtk_trayicon_init_callback (struct UgtkTrayIcon* trayicon, UgtkApp* app) { g_signal_connect (trayicon->self, "activate", G_CALLBACK (on_trayicon_activate), app); g_signal_connect (trayicon->self, "popup-menu", G_CALLBACK (on_trayicon_popup_menu), trayicon); #if defined _WIN32 || defined _WIN64 g_signal_connect (trayicon->menu.self, "leave-notify-event", G_CALLBACK (tray_menu_leave_enter), NULL); g_signal_connect (trayicon->menu.self, "enter-notify-event", G_CALLBACK (tray_menu_leave_enter), NULL); #endif g_signal_connect (trayicon->menu.create_download, "activate", G_CALLBACK (on_create_download), app); g_signal_connect_swapped (trayicon->menu.create_clipboard, "activate", G_CALLBACK (ugtk_app_clipboard_batch), app); g_signal_connect_swapped (trayicon->menu.create_torrent, "activate", G_CALLBACK (ugtk_app_create_torrent), app); g_signal_connect_swapped (trayicon->menu.create_metalink, "activate", G_CALLBACK (ugtk_app_create_metalink), app); trayicon->menu.emission = TRUE; g_signal_connect (trayicon->menu.clipboard_monitor, "activate", G_CALLBACK (on_clipboard_monitor), app); g_signal_connect (trayicon->menu.clipboard_quiet, "activate", G_CALLBACK (on_clipboard_quiet), app); g_signal_connect (trayicon->menu.commandline_quiet, "activate", G_CALLBACK (on_commandline_quiet), app); g_signal_connect (trayicon->menu.skip_existing, "activate", G_CALLBACK (on_skip_existing), app); g_signal_connect (trayicon->menu.apply_recent, "activate", G_CALLBACK (on_apply_recent), app); g_signal_connect (trayicon->menu.settings, "activate", G_CALLBACK (on_config_settings), app); g_signal_connect (trayicon->menu.offline_mode, "toggled", G_CALLBACK (on_offline_mode), app); g_signal_connect (trayicon->menu.about, "activate", G_CALLBACK (on_about), app); g_signal_connect_swapped (trayicon->menu.quit, "activate", G_CALLBACK (ugtk_app_decide_to_quit), app); #ifdef HAVE_APP_INDICATOR g_signal_connect (trayicon->menu.show_window, "activate", G_CALLBACK (on_trayicon_show_window), app); #endif // HAVE_APP_INDICATOR } uget-2.2.3/ui-gtk/UgtkNodeList.c0000664000175000017500000004373213602733704013343 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ /* * This file base on GTK+ 2.0 Tree View Tutorial - custom-list.c */ #include #define NODE_LIST_N_COLUMNS 1 /* boring declarations of local functions */ static void init (UgtkNodeList* ugtree); static void class_init (UgtkNodeListClass *klass); static void tree_model_init (GtkTreeModelIface *iface); static void finalize (GObject* object); static GtkTreeModelFlags get_flags (GtkTreeModel* tree_model); static gint get_n_columns (GtkTreeModel* tree_model); static GType get_column_type (GtkTreeModel* tree_model, gint index); static gboolean get_iter (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreePath* path); static GtkTreePath* get_path (GtkTreeModel* tree_model, GtkTreeIter* iter); static void get_value (GtkTreeModel* tree_model, GtkTreeIter* iter, gint column, GValue* value); static gboolean iter_next (GtkTreeModel* tree_model, GtkTreeIter* iter); static gboolean iter_children (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* parent); static gboolean iter_has_child (GtkTreeModel* tree_model, GtkTreeIter* iter); static gint iter_n_children (GtkTreeModel* tree_model, GtkTreeIter* iter); static gboolean iter_nth_child (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* parent, gint n); static gboolean iter_parent (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* child); static GObjectClass* parent_class = NULL; /* GObject stuff - nothing to worry about */ /***************************************************************************** * * class_init: more boilerplate GObject/GType stuff. * Init callback for the type system, * called once when our new class is created. * *****************************************************************************/ static void class_init (UgtkNodeListClass* klass) { GObjectClass *object_class; parent_class = (GObjectClass*) g_type_class_peek_parent (klass); object_class = (GObjectClass*) klass; object_class->finalize = finalize; } /***************************************************************************** * * tree_model_init: init callback for the interface registration * in ugtk_node_list_get_type. Here we override * the GtkTreeModel interface functions that * we implement. * *****************************************************************************/ static void tree_model_init (GtkTreeModelIface* iface) { iface->get_flags = get_flags; iface->get_n_columns = get_n_columns; iface->get_column_type = get_column_type; iface->get_iter = get_iter; iface->get_path = get_path; iface->get_value = get_value; iface->iter_next = iter_next; iface->iter_children = iter_children; iface->iter_has_child = iter_has_child; iface->iter_n_children = iter_n_children; iface->iter_nth_child = iter_nth_child; iface->iter_parent = iter_parent; } /***************************************************************************** * * init: this is called everytime a new object object * instance is created (we do that in g_object_new). * Initialise the list structure's fields here. * *****************************************************************************/ static void init (UgtkNodeList* ulist) { ulist->stamp = g_random_int(); /* Random int to check whether an iter belongs to our model */ } /***************************************************************************** * * finalize: this is called just before a object is * destroyed. Free dynamically allocated memory here. * *****************************************************************************/ static void finalize (GObject* object) { // UgtkNodeList *ulist = UGTK_NODE_LIST(object); // must chain up - finalize parent (*parent_class->finalize) (object); } /***************************************************************************** * * get_flags: tells the rest of the world whether our tree model * has any special characteristics. In our case, * we have a list model (instead of a tree), and each * tree iter is valid as long as the row in question * exists, as it only contains a pointer to our struct. * *****************************************************************************/ static GtkTreeModelFlags get_flags (GtkTreeModel* tree_model) { g_return_val_if_fail (UGTK_IS_NODE_LIST(tree_model), (GtkTreeModelFlags)0); return (GTK_TREE_MODEL_LIST_ONLY | GTK_TREE_MODEL_ITERS_PERSIST); } /***************************************************************************** * * get_n_columns: tells the rest of the world how many data * columns we export via the tree model interface * *****************************************************************************/ static gint get_n_columns (GtkTreeModel* tree_model) { g_return_val_if_fail (UGTK_IS_NODE_LIST(tree_model), 0); return NODE_LIST_N_COLUMNS; } /***************************************************************************** * * get_column_type: tells the rest of the world which type of * data an exported model column contains * *****************************************************************************/ static GType get_column_type (GtkTreeModel* tree_model, gint index) { g_return_val_if_fail (UGTK_IS_NODE_LIST(tree_model), G_TYPE_INVALID); g_return_val_if_fail (index < NODE_LIST_N_COLUMNS && index >= 0, G_TYPE_INVALID); return G_TYPE_POINTER; } /***************************************************************************** * * get_iter: converts a tree path (physical position) into a * tree iter structure (the content of the iter * fields will only be used internally by our model). * We simply store a pointer to our CustomRecord * structure that represents that row in the tree iter. * *****************************************************************************/ static gboolean get_iter (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreePath* path) { UgtkNodeList* ulist; UgetNode* node; gint* indices; gint depth; g_assert (UGTK_IS_NODE_LIST(tree_model)); g_assert (path != NULL); ulist = UGTK_NODE_LIST(tree_model); if (ulist->root == NULL) return FALSE; indices = gtk_tree_path_get_indices(path); depth = gtk_tree_path_get_depth(path); g_assert (depth == 1); if (ulist->root_visible) { if (indices[0] == 0) node = ulist->root; else if (indices[0] <= ulist->n_fake) node = uget_node_nth_fake (ulist->root, indices[0] - 1); else return FALSE; } else { if (indices[0] < ulist->n_fake) node = uget_node_nth_fake (ulist->root, indices[0]); else return FALSE; } if (node == NULL) return FALSE; else { // We store a pointer to UgNode in the iter iter->stamp = ulist->stamp; iter->user_data = node; iter->user_data2 = NULL; /* unused */ iter->user_data3 = NULL; /* unused */ return TRUE; } } /***************************************************************************** * * get_path: converts a tree iter into a tree path (ie. the * physical position of that row in the list). * *****************************************************************************/ static GtkTreePath* get_path (GtkTreeModel* tree_model, GtkTreeIter* iter) { GtkTreePath* path; UgtkNodeList* ulist; UgetNode* node; gint n; g_return_val_if_fail (UGTK_IS_NODE_LIST(tree_model), NULL); g_return_val_if_fail (iter != NULL, NULL); g_return_val_if_fail (iter->user_data != NULL, NULL); node = iter->user_data; path = gtk_tree_path_new(); ulist = UGTK_NODE_LIST (tree_model); if (ulist->root_visible == FALSE) n = uget_node_fake_position (node->real, node); else { if (ulist->root == node) n = 0; else n = uget_node_fake_position (node->real, node) + 1; } gtk_tree_path_prepend_index (path, n); return path; } /***************************************************************************** * * get_value: Returns a row's exported data columns * (_get_value is what gtk_tree_model_get uses) * *****************************************************************************/ static void get_value (GtkTreeModel* tree_model, GtkTreeIter* iter, gint column, GValue* value) { // UgtkNodeList* ulist; g_return_if_fail (UGTK_IS_NODE_LIST (tree_model)); g_return_if_fail (iter != NULL); g_return_if_fail (column < NODE_LIST_N_COLUMNS); g_value_init (value, G_TYPE_POINTER); // ulist = UGTK_NODE_LIST (tree_model); g_value_set_pointer (value, iter->user_data); } /***************************************************************************** * * iter_next: Takes an iter structure and sets it to point * to the next row. * *****************************************************************************/ static gboolean iter_next (GtkTreeModel* tree_model, GtkTreeIter* iter) { UgtkNodeList* ulist; UgetNode* node; g_return_val_if_fail (UGTK_IS_NODE_LIST (tree_model), FALSE); ulist = UGTK_NODE_LIST(tree_model); if (ulist->root == NULL) return FALSE; node = iter->user_data; if (ulist->root_visible && ulist->root == node) node = node->fake; else node = node->peer; if (node == NULL || uget_node_fake_position (node->real, node) >= ulist->n_fake) return FALSE; else { iter->stamp = ulist->stamp; iter->user_data = node; return TRUE; } } /***************************************************************************** * * iter_children: Returns TRUE or FALSE depending on whether * the row specified by 'parent' has any children. * If it has children, then 'iter' is set to * point to the first child. Special case: if * 'parent' is NULL, then the first top-level * row should be returned if it exists. * *****************************************************************************/ static gboolean iter_children (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* parent) { UgtkNodeList* ulist; UgetNode* node; g_return_val_if_fail (UGTK_IS_NODE_LIST (tree_model), FALSE); g_return_val_if_fail (parent == NULL, FALSE); ulist = UGTK_NODE_LIST (tree_model); if (ulist->root == NULL) return FALSE; if (ulist->root_visible) node = ulist->root; else node = ulist->root->fake; // Set iter to first child item. if (node == NULL) return FALSE; else { iter->stamp = ulist->stamp; iter->user_data = node; return TRUE; } } /***************************************************************************** * * iter_has_child: Returns TRUE or FALSE depending on whether * the row specified by 'iter' has any children. * We only have a list and thus no children. * *****************************************************************************/ static gboolean iter_has_child (GtkTreeModel* tree_model, GtkTreeIter* iter) { return FALSE; } /***************************************************************************** * * iter_n_children: Returns the number of children the row * specified by 'iter' has. This is usually 0, * as we only have a list and thus do not have * any children to any rows. A special case is * when 'iter' is NULL, in which case we need * to return the number of top-level nodes, * ie. the number of rows in our list. * *****************************************************************************/ static gint iter_n_children (GtkTreeModel* tree_model, GtkTreeIter* iter) { UgtkNodeList* ulist; UgetNode* node; gint n = 0; g_return_val_if_fail (UGTK_IS_NODE_LIST (tree_model), -1); g_return_val_if_fail (iter == NULL, -1); ulist = UGTK_NODE_LIST (tree_model); if (ulist->root == NULL) return 0; node = iter->user_data; for (n = 0, node = node->fake; node; node = node->peer) n++; if (n > ulist->n_fake) n = ulist->n_fake; if (ulist->root_visible) n++; return n; } /***************************************************************************** * * iter_nth_child: If the row specified by 'parent' has any * children, set 'iter' to the n-th child and * return TRUE if it exists, otherwise FALSE. * A special case is when 'parent' is NULL, in * which case we need to set 'iter' to the n-th * row if it exists. * *****************************************************************************/ static gboolean iter_nth_child (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* parent, gint n) { UgtkNodeList* ulist; UgetNode* node; g_return_val_if_fail (UGTK_IS_NODE_LIST (tree_model), FALSE); g_return_val_if_fail (parent == NULL, FALSE); ulist = UGTK_NODE_LIST (tree_model); if (ulist->root == NULL) return FALSE; if (ulist->root_visible) { if (n == 0) node = ulist->root; else if (n <= ulist->n_fake) node = uget_node_nth_fake (ulist->root, n - 1); else return FALSE; } else { if (n < ulist->n_fake) node = uget_node_nth_fake (ulist->root, n); else return FALSE; } if (node == NULL) return FALSE; else { iter->stamp = ulist->stamp; iter->user_data = node; return TRUE; } } /***************************************************************************** * * iter_parent: Point 'iter' to the parent node of 'child'. As * we have a list and thus no children and no * parents of children, we can just return FALSE. * *****************************************************************************/ static gboolean iter_parent (GtkTreeModel* tree_model, GtkTreeIter* iter, GtkTreeIter* child) { return FALSE; } /***************************************************************************** * * ugtk_node_list_get_type: here we register our new type and its interfaces * with the type system. If you want to implement * additional interfaces like GtkTreeSortable, you * will need to do it here. * *****************************************************************************/ GType ugtk_node_list_get_type (void) { static GType ugtk_node_list_type = 0; /* Some boilerplate type registration stuff */ if (ugtk_node_list_type == 0) { static const GTypeInfo ugtk_node_list_info = { sizeof (UgtkNodeListClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) class_init, NULL, /* class finalize */ NULL, /* class_data */ sizeof (UgtkNodeList), 0, /* n_preallocs */ (GInstanceInitFunc) init }; static const GInterfaceInfo tree_model_info = { (GInterfaceInitFunc) tree_model_init, NULL, NULL }; /* First register the new derived type with the GObject type system */ ugtk_node_list_type = g_type_register_static (G_TYPE_OBJECT, "UgtkNodeList", &ugtk_node_list_info, (GTypeFlags)0); /* Now register our GtkTreeModel interface with the type system */ g_type_add_interface_static (ugtk_node_list_type, GTK_TYPE_TREE_MODEL, &tree_model_info); } return ugtk_node_list_type; } /***************************************************************************** * * ugtk_node_list_new: This is what you use in your own code to create a * new tree model for you to use. * *****************************************************************************/ UgtkNodeList* ugtk_node_list_new (UgetNode* root, gint n_fake, gboolean root_visible) { UgtkNodeList* ulist; ulist = (UgtkNodeList*) g_object_new (UGTK_TYPE_NODE_LIST, NULL); ulist->root = root; ulist->n_fake = n_fake; ulist->root_visible = root_visible; g_assert( ulist != NULL ); return ulist; } uget-2.2.3/ui-gtk/UgtkBanner.c0000664000175000017500000002305413602733704013022 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include static GdkCursor* hand_cursor = NULL; static GdkCursor* regular_cursor = NULL; static gboolean motion_notify_event (GtkWidget* tv_widget, GdkEventMotion* event, UgtkBanner* banner); static gboolean event_after (GtkWidget* text_view, GdkEvent* ev, UgtkBanner* banner); static GtkWidget* create_x_button (UgtkBanner* banner); void ugtk_banner_init (struct UgtkBanner* banner) { GtkStyleContext* style_context; GdkRGBA rgba; hand_cursor = gdk_cursor_new (GDK_HAND2); regular_cursor = gdk_cursor_new (GDK_XTERM); banner->self = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); banner->buffer = gtk_text_buffer_new (NULL); banner->tag_link = gtk_text_buffer_create_tag (banner->buffer, NULL, "underline", PANGO_UNDERLINE_SINGLE, NULL); banner->text_view = (GtkTextView*) gtk_text_view_new_with_buffer (banner->buffer); g_object_unref (banner->buffer); gtk_text_view_set_cursor_visible (banner->text_view, FALSE); gtk_text_view_set_editable (banner->text_view, FALSE); gtk_box_pack_start (GTK_BOX (banner->self), GTK_WIDGET (banner->text_view), TRUE, TRUE, 0); g_signal_connect (banner->text_view, "event-after", G_CALLBACK (event_after), banner); g_signal_connect (banner->text_view, "motion-notify-event", G_CALLBACK (motion_notify_event), banner); // style: color style_context = gtk_widget_get_style_context (GTK_WIDGET (banner->text_view)); gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_SELECTED, &rgba); // gtk_widget_override_background_color ( // GTK_WIDGET (banner->text_view), GTK_STATE_FLAG_NORMAL, &rgba); gtk_style_context_get_color (style_context, GTK_STATE_FLAG_SELECTED, &rgba); // gtk_widget_override_color ( // GTK_WIDGET (banner->text_view), GTK_STATE_FLAG_NORMAL, &rgba); // close button gtk_box_pack_end (GTK_BOX (banner->self), create_x_button (banner), FALSE, FALSE, 0); banner->show_builtin = 2; banner->rss.self = NULL; banner->rss.feed = NULL; banner->rss.item = NULL; } int ugtk_banner_show_rss (UgtkBanner* banner, UgetRss* urss) { banner->rss.self = urss; banner->rss.feed = NULL; banner->rss.item = NULL; banner->rss.feed = uget_rss_find_updated (urss, NULL); if (banner->rss.feed) banner->rss.item = uget_rss_feed_find (banner->rss.feed, banner->rss.feed->checked); if (banner->rss.item) ugtk_banner_show (banner, banner->rss.item->title, banner->rss.item->link); else { gtk_widget_hide (banner->self); return FALSE; } return TRUE; } void ugtk_banner_show (UgtkBanner* banner, const char* title, const char* url) { GtkTextIter iter; gtk_text_buffer_set_text(banner->buffer, "", 0); gtk_text_buffer_get_iter_at_offset (banner->buffer, &iter, 0); gtk_text_buffer_insert (banner->buffer, &iter, " ", 2); g_free (banner->link); if (url == NULL) { banner->link = NULL; gtk_text_buffer_insert (banner->buffer, &iter, title, -1); } else { banner->link = g_strdup (url); gtk_text_buffer_insert_with_tags (banner->buffer, &iter, title, -1, banner->tag_link, NULL); } gtk_widget_show (banner->self); } void ugtk_banner_show_donation (UgtkBanner* banner) { GtkTextIter iter; gtk_text_buffer_set_text(banner->buffer, "", 0); gtk_text_buffer_get_iter_at_offset (banner->buffer, &iter, 0); gtk_text_buffer_insert (banner->buffer, &iter, " ", 2); gtk_text_buffer_insert (banner->buffer, &iter, _("Attention uGetters:"), -1); gtk_text_buffer_insert (banner->buffer, &iter, " ", 1); gtk_text_buffer_insert (banner->buffer, &iter, _("we are running a Donation Drive " "for uGet's Future Development, please click "), -1); gtk_text_buffer_insert_with_tags (banner->buffer, &iter, _("HERE"), -1, banner->tag_link, NULL); g_free (banner->link); banner->link = g_strdup ("http://ugetdm.com/donate"); gtk_widget_show (banner->self); } void ugtk_banner_show_survey (UgtkBanner* banner) { GtkTextIter iter; gtk_text_buffer_set_text(banner->buffer, "", 0); gtk_text_buffer_get_iter_at_offset (banner->buffer, &iter, 0); gtk_text_buffer_insert (banner->buffer, &iter, " ", 2); gtk_text_buffer_insert (banner->buffer, &iter, _("Attention uGetters:"), -1); gtk_text_buffer_insert (banner->buffer, &iter, " ", 1); gtk_text_buffer_insert (banner->buffer, &iter, _("please fill out this quick User Survey for uGet."), -1); gtk_text_buffer_insert (banner->buffer, &iter, " - ", 3); gtk_text_buffer_insert_with_tags (banner->buffer, &iter, _("click here to take survey"), -1, banner->tag_link, NULL); g_free (banner->link); banner->link = g_strdup ("http://ugetdm.com/survey"); gtk_widget_show (banner->self); } // ---------------------------------------------------------------------------- // static functions /* Links can also be activated by clicking. */ static gboolean event_after (GtkWidget* text_view, GdkEvent* ev, UgtkBanner* banner) { GtkTextIter start, end, iter; GtkTextBuffer *buffer; GdkEventButton *event; gint x, y; GSList* slist; if (ev->type != GDK_BUTTON_RELEASE) return FALSE; event = (GdkEventButton *)ev; if (event->button != GDK_BUTTON_PRIMARY) return FALSE; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)); /* we shouldn't follow a link if the user has selected something */ gtk_text_buffer_get_selection_bounds (buffer, &start, &end); if (gtk_text_iter_get_offset (&start) != gtk_text_iter_get_offset (&end)) return FALSE; gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view), GTK_TEXT_WINDOW_WIDGET, (gint) event->x, (gint) event->y, &x, &y); gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (text_view), &iter, x, y); slist = gtk_text_iter_get_tags (&iter); if (slist) { if (banner->link) ugtk_launch_uri (banner->link); g_slist_free (slist); } return FALSE; } /* Update the cursor image if the pointer moved. */ /* Looks at all tags covering the position (x, y) in the text view, * and if one of them is a link, change the cursor to the "hands" cursor * typically used by web browsers. */ static gboolean motion_notify_event (GtkWidget* tv_widget, GdkEventMotion* event, UgtkBanner* banner) { GtkTextView* text_view; gint x, y; gboolean hovering = FALSE; GSList* slist; GtkTextIter iter; text_view = GTK_TEXT_VIEW (tv_widget); gtk_text_view_window_to_buffer_coords (text_view, GTK_TEXT_WINDOW_WIDGET, (gint) event->x, (gint) event->y, &x, &y); // set cursor if appropriate gtk_text_view_get_iter_at_location (text_view, &iter, x, y); slist = gtk_text_iter_get_tags (&iter); if (slist) hovering = TRUE; if (banner->hovering_over_link != hovering) { banner->hovering_over_link = hovering; if (banner->hovering_over_link) { gdk_window_set_cursor (gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT), hand_cursor); } else { gdk_window_set_cursor (gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT), regular_cursor); } } if (slist) g_slist_free (slist); return FALSE; } // ------------------------------------ static gboolean on_x_button_release (GtkWidget* text_view, GdkEvent* ev, UgtkBanner* banner) { GdkEventButton* event; event = (GdkEventButton*) ev; if (event->button != GDK_BUTTON_PRIMARY) return FALSE; if (banner->rss.self) { if (banner->rss.feed && banner->rss.item) banner->rss.feed->checked = banner->rss.item->updated; if (ugtk_banner_show_rss (banner, banner->rss.self)) return FALSE; } if (banner->show_builtin > 0) { banner->show_builtin--; if (banner->show_builtin == 1) ugtk_banner_show_donation (banner); else { ugtk_banner_show_survey (banner); banner->show_builtin = 0; } return FALSE; } gtk_widget_hide (banner->self); return FALSE; } static GtkWidget* create_x_button (UgtkBanner* banner) { GtkWidget* event_box; GtkWidget* label; label = gtk_label_new (" X "); event_box = gtk_event_box_new (); gtk_container_add (GTK_CONTAINER (event_box), label); g_signal_connect (event_box, "button-release-event", G_CALLBACK (on_x_button_release), banner); return event_box; } uget-2.2.3/ui-gtk/UgtkNodeView.h0000664000175000017500000000556613602733704013352 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_NODE_VIEW_H #define UGTK_NODE_VIEW_H #include #ifdef __cplusplus extern "C" { #endif // GtkTreeViewColumn* column; // column = gtk_tree_view_get_column (tree_view, UGTK_NODE_COLUMN_NAME); // gtk_tree_view_column_set_visible (column, TRUE); typedef enum { UGTK_NODE_COLUMN_STATE = 0, UGTK_NODE_COLUMN_NAME = 1, // Category & Status only UGTK_NODE_COLUMN_QUANTITY = 2, // Download only UGTK_NODE_COLUMN_COMPLETE = 2, // complete size UGTK_NODE_COLUMN_TOTAL, // total size UGTK_NODE_COLUMN_PERCENT, UGTK_NODE_COLUMN_ELAPSED, // consuming time UGTK_NODE_COLUMN_LEFT, // remaining time UGTK_NODE_COLUMN_SPEED, UGTK_NODE_COLUMN_UPLOAD_SPEED, // torrent UGTK_NODE_COLUMN_UPLOADED, // torrent UGTK_NODE_COLUMN_RATIO, // torrent UGTK_NODE_COLUMN_RETRY, UGTK_NODE_COLUMN_CATEGORY, // category name UGTK_NODE_COLUMN_URI, UGTK_NODE_COLUMN_ADDED_ON, UGTK_NODE_COLUMN_COMPLETED_ON, UGTK_NODE_N_COLUMNS, } UgtkNodeColumn; // return GtkTreeView GtkWidget* ugtk_node_view_new_for_download (void); GtkWidget* ugtk_node_view_new_for_category (void); GtkWidget* ugtk_node_view_new_for_state (void); void ugtk_node_view_use_large_icon (GtkTreeView* view, gboolean is_large, int fixed_width); #ifdef __cplusplus } #endif #endif // UGTK_NODE_VIEW_H uget-2.2.3/ui-gtk/UgtkApp-ui.c0000664000175000017500000004205613602733704012753 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include // GdkScreen #include static void ugtk_statusbar_init_ui (struct UgtkStatusbar* app_statusbar); static void ugtk_toolbar_init_ui (struct UgtkToolbar* app_toolbar, GtkAccelGroup* accel_group); static void ugtk_window_init_ui (struct UgtkWindow* window, UgtkApp* app); static void ugtk_app_init_size (UgtkApp* app); #if defined _WIN32 || defined _WIN64 static void ugtk_app_init_ui_win32 (UgtkApp* app, int screen_width); #endif void ugtk_app_init_ui (UgtkApp* app) { // Registers a new accelerator "Ctrl+N" with the global accelerator map. gtk_accel_map_add_entry (UGTK_APP_ACCEL_PATH_NEW, GDK_KEY_n, GDK_CONTROL_MASK); gtk_accel_map_add_entry (UGTK_APP_ACCEL_PATH_LOAD, GDK_KEY_o, GDK_CONTROL_MASK); gtk_accel_map_add_entry (UGTK_APP_ACCEL_PATH_SAVE, GDK_KEY_s, GDK_CONTROL_MASK); gtk_accel_map_add_entry (UGTK_APP_ACCEL_PATH_SAVE_ALL, GDK_KEY_s, GDK_CONTROL_MASK | GDK_SHIFT_MASK); gtk_accel_map_add_entry (UGTK_APP_ACCEL_PATH_DELETE, GDK_KEY_Delete, 0); // gtk_accel_map_add_entry (UGTK_APP_ACCEL_PATH_DELETE_F, GDK_KEY_Delete, GDK_SHIFT_MASK); gtk_accel_map_add_entry (UGTK_APP_ACCEL_PATH_DELETE_F, GDK_KEY_Delete, GDK_CONTROL_MASK); gtk_accel_map_add_entry (UGTK_APP_ACCEL_PATH_OPEN, GDK_KEY_Return, 0); gtk_accel_map_add_entry (UGTK_APP_ACCEL_PATH_OPEN_F, GDK_KEY_Return, GDK_SHIFT_MASK); // accelerators app->accel_group = gtk_accel_group_new (); // tray icon ugtk_tray_icon_init (&app->trayicon); // Main Window and it's widgets ugtk_banner_init (&app->banner); ugtk_menubar_init_ui (&app->menubar, app->accel_group); ugtk_summary_init (&app->summary, app->accel_group); ugtk_traveler_init (&app->traveler, app); ugtk_statusbar_init_ui (&app->statusbar); ugtk_toolbar_init_ui (&app->toolbar, app->accel_group); ugtk_window_init_ui (&app->window, app); ugtk_app_init_size (app); } // set default size static void ugtk_app_init_size (UgtkApp* app) { GdkScreen* screen; gint width, height; gint paned_position; screen = gdk_screen_get_default (); if (screen) { width = gdk_screen_get_width (screen); height = gdk_screen_get_height (screen); } else { width = 0; height = 0; } // decide window & traveler size if (width <= 640) { width = 620; height = 430; paned_position = 165; } if (width <= 800) { width = width * 95 / 100; height = height * 9 / 10; paned_position = 180; } else if (width <= 1000) { width = width * 90 / 100; height = height * 8 / 10; paned_position = 200; } else { width = width * 85 / 100; height = height * 8 / 10; paned_position = width * 22 / 100; } gtk_window_resize (app->window.self, width, height); gtk_paned_set_position (app->window.hpaned, paned_position); #if defined _WIN32 || defined _WIN64 ugtk_app_init_ui_win32 (app, width); #endif } #if defined _WIN32 || defined _WIN64 static void ugtk_app_init_ui_win32 (UgtkApp* app, int screen_width) { GSettings* gset; gint sidebar_width; #if 0 // This will use icons\hicolor\index.theme GtkIconTheme* icon_theme; gchar* path; icon_theme = gtk_icon_theme_get_default (); path = g_build_filename (UG_DATADIR, "icons", NULL); gtk_icon_theme_append_search_path (icon_theme, path); g_free (path); #endif if (screen_width <= 800) sidebar_width = 0; else if (screen_width <= 1200) sidebar_width = 180; else sidebar_width = 220; gset = g_settings_new ("org.gtk.Settings.FileChooser"); g_settings_set_boolean (gset, "sort-directories-first", TRUE); // default of "sidebar-width" == 148 if (sidebar_width > 0 && g_settings_get_int(gset, "sidebar-width") == 148) g_settings_set_int (gset, "sidebar-width", sidebar_width); } #endif // _WIN32 || _WIN64 // ---------------------------------------------------------------------------- // UgtkWindow static void ugtk_window_init_ui (struct UgtkWindow* window, UgtkApp* app) { GtkBox* vbox; GtkBox* lbox; // left side vbox GtkBox* rbox; // right side vbox window->self = (GtkWindow*) gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (window->self, UGTK_APP_NAME); // gtk_window_resize (window->self, 640, 480); gtk_window_add_accel_group (window->self, app->accel_group); gtk_window_set_default_icon_name (UGTK_APP_ICON_NAME); #if GTK_MAJOR_VERSION <= 3 && GTK_MINOR_VERSION < 14 gtk_window_set_has_resize_grip (window->self, FALSE); #endif // top container for Main Window vbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (window->self), GTK_WIDGET (vbox)); // banner + menubar gtk_box_pack_start (vbox, app->banner.self, FALSE, FALSE, 0); gtk_box_pack_start (vbox, app->menubar.self, FALSE, FALSE, 0); // hpaned window->hpaned = (GtkPaned*) gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start (vbox, GTK_WIDGET (window->hpaned), TRUE, TRUE, 0); lbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); rbox = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_paned_pack1 (window->hpaned, GTK_WIDGET (lbox), FALSE, TRUE); gtk_paned_pack2 (window->hpaned, GTK_WIDGET (rbox), TRUE, FALSE); gtk_box_pack_start (lbox, gtk_label_new (_("Status")), FALSE, FALSE, 0); gtk_box_pack_start (lbox, app->traveler.state.self, FALSE, FALSE, 0); gtk_box_pack_start (lbox, gtk_label_new (_("Category")), FALSE, FALSE, 0); gtk_box_pack_start (lbox, app->traveler.category.self, TRUE, TRUE, 0); gtk_box_pack_start (rbox, app->toolbar.self, FALSE, FALSE, 0); // vpaned window->vpaned = (GtkPaned*) gtk_paned_new (GTK_ORIENTATION_VERTICAL); gtk_box_pack_start (rbox, (GtkWidget*) window->vpaned, TRUE, TRUE, 0); gtk_paned_pack1 (window->vpaned, app->traveler.download.self , TRUE, TRUE); gtk_paned_pack2 (window->vpaned, app->summary.self, FALSE, TRUE); gtk_box_pack_start (vbox, GTK_WIDGET (app->statusbar.self), FALSE, FALSE, 0); gtk_widget_show_all ((GtkWidget*) vbox); } // ---------------------------------------------------------------------------- // UgtkStatusbar // static void ugtk_statusbar_init_ui (struct UgtkStatusbar* sbar) { GtkBox* hbox; GtkWidget* widget; PangoContext* context; PangoLayout* layout; int text_width; sbar->self = (GtkStatusbar*) gtk_statusbar_new (); hbox = GTK_BOX (sbar->self); // calculate text width context = gtk_widget_get_pango_context (GTK_WIDGET (sbar->self)); layout = pango_layout_new (context); pango_layout_set_text (layout, "9999 MiB/s", -1); pango_layout_get_pixel_size (layout, &text_width, NULL); g_object_unref (layout); if (text_width < 100) text_width = 100; // upload speed label widget = gtk_label_new (""); sbar->up_speed = (GtkLabel*) widget; gtk_widget_set_size_request (widget, text_width, 0); gtk_box_pack_end (hbox, widget, FALSE, TRUE, 2); // gtk_label_set_width_chars (sbar->down_speed, 15); gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5); gtk_box_pack_end (hbox, gtk_label_new ("\xE2\x86\x91"), FALSE, TRUE, 2); // "↑" gtk_box_pack_end (hbox, gtk_separator_new (GTK_ORIENTATION_VERTICAL), FALSE, TRUE, 8); // download speed label widget = gtk_label_new (""); sbar->down_speed = (GtkLabel*) widget; gtk_widget_set_size_request (widget, text_width, 0); gtk_box_pack_end (hbox, widget, FALSE, TRUE, 2); // gtk_label_set_width_chars (sbar->down_speed, 15); gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5); gtk_box_pack_end (hbox, gtk_label_new ("\xE2\x86\x93"), FALSE, TRUE, 2); // "↓" } // ---------------------------------------------------------------------------- // UgtkToolbar // static void ugtk_toolbar_init_ui (struct UgtkToolbar* ugt, GtkAccelGroup* accel_group) { GtkToolbar* toolbar; GtkToolItem* tool_item; GtkWidget* image; GtkWidget* menu; GtkWidget* menu_item; // toolbar ugt->toolbar = gtk_toolbar_new (); toolbar = GTK_TOOLBAR (ugt->toolbar); gtk_toolbar_set_style (toolbar, GTK_TOOLBAR_ICONS); gtk_toolbar_set_icon_size (toolbar, GTK_ICON_SIZE_SMALL_TOOLBAR); ugt->self = ugt->toolbar; gtk_widget_show (ugt->self); // New button --- start --- #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-new", GTK_ICON_SIZE_SMALL_TOOLBAR); tool_item = (GtkToolItem*) gtk_menu_tool_button_new (image, NULL); #else tool_item = (GtkToolItem*) gtk_menu_tool_button_new_from_stock (GTK_STOCK_NEW); #endif gtk_tool_item_set_tooltip_text (tool_item, _("Create new download")); gtk_menu_tool_button_set_arrow_tooltip_text ((GtkMenuToolButton*)tool_item, "Create new item"); gtk_tool_item_set_homogeneous (tool_item, FALSE); gtk_toolbar_insert (toolbar, tool_item, -1); ugt->create = GTK_WIDGET (tool_item); // menu for tool button (accelerators) menu = gtk_menu_new (); gtk_menu_set_accel_group ((GtkMenu*) menu, accel_group); gtk_menu_tool_button_set_menu ((GtkMenuToolButton*)tool_item, menu); // New Download (accelerators) menu_item = gtk_image_menu_item_new_with_mnemonic (_("New _Download...")); gtk_menu_item_set_accel_path ((GtkMenuItem*) menu_item, UGTK_APP_ACCEL_PATH_NEW); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-new", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); ugt->create_download = menu_item; // New Category menu_item = gtk_image_menu_item_new_with_mnemonic (_("New _Category...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("gtk-dnd-multiple", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_DND_MULTIPLE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); ugt->create_category = menu_item; // New Clipboard batch menu_item = gtk_image_menu_item_new_with_mnemonic (_("New Clipboard _batch...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("edit-paste", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); ugt->create_clipboard = menu_item; gtk_widget_show_all (menu); // New URL Sequence batch menu_item = gtk_image_menu_item_new_with_mnemonic (_("New _URL Sequence batch...")); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("view-sort-ascending", GTK_ICON_SIZE_MENU); #else image = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU); #endif gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); ugt->create_sequence = menu_item; gtk_widget_show_all (menu); gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_separator_menu_item_new() ); // New Torrent menu_item = gtk_image_menu_item_new_with_mnemonic (_("New Torrent...")); // image = gtk_image_new_from_stock (GTK_STOCK_FILE, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); ugt->create_torrent = menu_item; gtk_widget_show_all (menu); // New Metalink menu_item = gtk_image_menu_item_new_with_mnemonic (_("New Metalink...")); // image = gtk_image_new_from_stock (GTK_STOCK_FILE, GTK_ICON_SIZE_MENU); // gtk_image_menu_item_set_image ((GtkImageMenuItem*)menu_item, image); gtk_menu_shell_append ((GtkMenuShell*)menu, menu_item); ugt->create_metalink = menu_item; gtk_widget_show_all (menu); // New button --- end --- #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-save", GTK_ICON_SIZE_SMALL_TOOLBAR); tool_item = (GtkToolItem*) gtk_tool_button_new (image, NULL); #else tool_item = (GtkToolItem*) gtk_tool_button_new_from_stock (GTK_STOCK_SAVE); #endif gtk_tool_item_set_tooltip_text (tool_item, _("Save all settings")); gtk_toolbar_insert (toolbar, tool_item, -1); ugt->save = GTK_WIDGET (tool_item); tool_item = gtk_separator_tool_item_new (); gtk_toolbar_insert (toolbar, tool_item, -1); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("media-playback-start", GTK_ICON_SIZE_SMALL_TOOLBAR); tool_item = (GtkToolItem*) gtk_tool_button_new (image, NULL); #else tool_item = (GtkToolItem*) gtk_tool_button_new_from_stock (GTK_STOCK_MEDIA_PLAY); #endif gtk_tool_item_set_tooltip_text (tool_item, _("Set selected download runnable")); gtk_toolbar_insert (toolbar, tool_item, -1); ugt->runnable = GTK_WIDGET (tool_item); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("media-playback-pause", GTK_ICON_SIZE_SMALL_TOOLBAR); tool_item = (GtkToolItem*) gtk_tool_button_new (image, NULL); #else tool_item = (GtkToolItem*) gtk_tool_button_new_from_stock (GTK_STOCK_MEDIA_PAUSE); #endif gtk_tool_item_set_tooltip_text (tool_item, _("Set selected download to pause")); gtk_toolbar_insert (toolbar, tool_item, -1); ugt->pause = GTK_WIDGET (tool_item); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("document-properties", GTK_ICON_SIZE_SMALL_TOOLBAR); tool_item = (GtkToolItem*) gtk_tool_button_new (image, NULL); #else tool_item = (GtkToolItem*) gtk_tool_button_new_from_stock (GTK_STOCK_PROPERTIES); #endif gtk_tool_item_set_tooltip_text (tool_item, _("Set selected download properties")); gtk_toolbar_insert (toolbar, tool_item, -1); ugt->properties = GTK_WIDGET (tool_item); tool_item = gtk_separator_tool_item_new (); gtk_toolbar_insert (toolbar, tool_item, -1); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("go-up", GTK_ICON_SIZE_SMALL_TOOLBAR); tool_item = (GtkToolItem*) gtk_tool_button_new (image, NULL); #else tool_item = (GtkToolItem*) gtk_tool_button_new_from_stock (GTK_STOCK_GO_UP); #endif gtk_tool_item_set_tooltip_text (tool_item, _("Move selected download up")); gtk_toolbar_insert (toolbar, tool_item, -1); ugt->move_up = GTK_WIDGET (tool_item); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("go-down", GTK_ICON_SIZE_SMALL_TOOLBAR); tool_item = (GtkToolItem*) gtk_tool_button_new (image, NULL); #else tool_item = (GtkToolItem*) gtk_tool_button_new_from_stock (GTK_STOCK_GO_DOWN); #endif gtk_tool_item_set_tooltip_text (tool_item, _("Move selected download down")); gtk_toolbar_insert (toolbar, tool_item, -1); ugt->move_down = GTK_WIDGET (tool_item); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("go-top", GTK_ICON_SIZE_SMALL_TOOLBAR); tool_item = (GtkToolItem*) gtk_tool_button_new (image, NULL); #else tool_item = (GtkToolItem*) gtk_tool_button_new_from_stock (GTK_STOCK_GOTO_TOP); #endif gtk_tool_item_set_tooltip_text (tool_item, _("Move selected download to top")); gtk_toolbar_insert (toolbar, tool_item, -1); ugt->move_top = GTK_WIDGET (tool_item); #if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 10 image = gtk_image_new_from_icon_name ("go-bottom", GTK_ICON_SIZE_SMALL_TOOLBAR); tool_item = (GtkToolItem*) gtk_tool_button_new (image, NULL); #else tool_item = (GtkToolItem*) gtk_tool_button_new_from_stock (GTK_STOCK_GOTO_BOTTOM); #endif gtk_tool_item_set_tooltip_text (tool_item, _("Move selected download to bottom")); gtk_toolbar_insert (toolbar, tool_item, -1); ugt->move_bottom = GTK_WIDGET (tool_item); gtk_widget_show_all ((GtkWidget*) toolbar); } uget-2.2.3/README0000664000175000017500000000676413602733703010306 00000000000000uGet 2.2.3: (2020-01-01) 1. add parser for YouTube recently changed field. uGet 2.2.2: (2019-05-20) 1. use quicksort to sort downloads. 2. backup torrent and metalink files. 3. curl plug-in: handle duplicate files with double extensions. uGet 2.2.1: (2018-03-08) 1. reduce memory usage. 2. mega plug-in: completed size should not be '-1' if file size > 2G on a 32-bit system. 3. adjust speed limit independently without enabling global speed limit. 4. Fix: Can't get 1080p video from YouTube. 5. update translation files. uGet 2.2.0: (2018-01-06) 1. mega plug-in: create new plug-in for MEGA site. 2. all plug-in: avoid crash if plug-in failed to start. 3. Fix: some category/status doesn't refresh it's download list. 4. update translation files. uGet 2.1.6: (2017-08-24) 1. User can use sorting in any category and status. 2. curl plug-in: It can use ftruncate() to create large file. 3. media plug-in: don't use folder in path if folder == NULL. 4. Fix: uGet doesn't close File Descriptor when saving config file. 5. Fix: category functions can't work correctly. (2017-08-27) 6. add translation files. uGet 2.1.5: (2017-02-18) 1. URL Sequence Batch can setup 3 wildcard range. 2. Use character ↓/↑ to replace D:/U: to display speed. 3. avoid configure file corrupted on sudden shutdown. 4. curl plug-in: crashes when download file > 4GB. 5. Fix: program will move download to incorrect position if user switch to offline mode. 6. Fix: Segmentation fault after pressing delete key on gtk window. 7. Fix: Wayland hidden tray. 8. update translation files. uGet 2.1.4: (2016-05-16) 1. In speed limit mode, program adjust existing task speed when adding new task. 2. Add new setting "Display large icon". 3. Add configure argument "--enable-unix-socket" to use JSON-RPC over UNIX domain socket. 4. use msys2 + mingw to build uGet for windows. 5. curl plug-in: Don't use CURLAUTH_ANY, it causes authentication failed. 6. Fix: User can't use command-line to assign config directory (ui-gtk-1to2). 7. (2.1.3-2) Fix: Incorrect encoding on some characters (e.g. French characters) 8. (2.1.3-2) Fix: Program stop download queuing in some case. * uGet for Windows upgrade GTK+ from 3.10.4 to 3.16.6 uGet 2.1.3: (2016-04-10) 1. Fix: UI freeze if user activate download in sorted list. 2. Add Keywords entry into desktop file (Elías Alejandro Año Mendoza) 3. update translation files. uGet 2.1.2: (2016-04-01) Revert URI decoder to 2.0.4, it may fix incorrect encoding on some characters. uGet 2.1.1: (2016-03-20) 1. curl plug-in: fix a bug that downloaded file may be incomplete in some case. 2. curl plug-in: improve downloaded segment handler. 3. curl plug-in: set min split size to 10 MiB. 4. curl plug-in: adjust speed if plug-in add/remove segments in speed limit mode. 5. aria2 plug-in: fix a memory leak. 6. media plug-in: report error if YouTube video has been removed. * This version fix bug that download speed is slow when progress near 100% * If you usually get error message "Incorrect source", I suggest you use this version. uGet 2.1.0: (2016-02-20) 1. Add new media plug-in to get link from media website. 2. if file "uget-portable-mode" exists, data files save in installed folder. (Windows) 3. curl plug-in: avoid showing "99:99:99" in "elapsed" when downloading start. 4. curl plug-in: avoid reporting "Incorrect source" when downloading finished. 5. Fix: Program stop running download when user set "Runnable" to it. * In Windows, If "uget-portable-mode" and "uget.exe" place in the same folder, data files will save in uGet installed folder. uget-2.2.3/COPYING0000664000175000017500000006347613602733703010464 00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! uget-2.2.3/configure.ac0000664000175000017500000001605313602733703011704 00000000000000AC_INIT(uget, 2.2.3) ## Use automake (add automake to autogen.sh) AM_INIT_AUTOMAKE ## --- Use config.h (autogen.sh add autoheader) AC_CONFIG_HEADERS([config.h]) ## --- Determine a C compiler to use. AC_PROG_CC ## --- Check C compiler -c -o options. AM_PROG_CC_C_O ## --- Determine a C++ compiler to use. # AC_PROG_CXX ## --- Check for the ar command to use AM_PROG_AR ## Use library (static library) AC_PROG_RANLIB ## --- Check function posix_fallocate() AC_CHECK_FUNCS([posix_fallocate]) ## --- Check function ftruncate() AC_CHECK_FUNCS([ftruncate]) ## ---------------------------------------------- ## L10N (add intltoolize to autogen.sh) AC_PROG_INTLTOOL ## replace ALL_LINGUAS with po/LINGUAS # ALL_LINGUAS="" GETTEXT_PACKAGE="$PACKAGE" AC_SUBST(GETTEXT_PACKAGE) AM_GLIB_GNU_GETTEXT AM_GLIB_DEFINE_LOCALEDIR(LOCALEDIR) ## Use AM_GLIB_DEFINE_LOCALEDIR with AC_CONFIG_HEADERS ## ---------------------------------------------- ## GTK+ PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.4) ## ---------------- ## glib (add HAVE_GLIB definition to config.h) PKG_CHECK_EXISTS([glib-2.0], [have_glib="yes"], [have_glib="no"]) if test x$have_glib = xyes ; then PKG_CHECK_MODULES(GLIB, glib-2.0) AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) AC_DEFINE(HAVE_GLIB, 1, [Define to 1 if glib support is required.]) fi ## ---------------- ## pthread AC_CHECK_LIB(pthread, pthread_create,, [AC_MSG_ERROR([required library pthread missing])]) PTHREAD_CFLAGS="-pthread" PTHREAD_LIBS="-pthread" AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_LIBS) ## ---------------- ## LFS AC_PATH_PROG(GETCONF, getconf) if test "x$GETCONF" != "x" ; then LFS_CFLAGS=`$GETCONF LFS_CFLAGS` LFS_LDFLAGS=`$GETCONF LFS_LDFLAGS` fi AC_SUBST(LFS_CFLAGS) AC_SUBST(LFS_LDFLAGS) ## ---------------- ## cURL AC_PATH_PROG(CURL_CONFIG, curl-config) if test "x$CURL_CONFIG" = "x" ; then AC_MSG_ERROR(Unable to find curl-config, please install libcurl) fi CURL_CFLAGS=`$CURL_CONFIG --cflags` CURL_LIBS=`$CURL_CONFIG --libs` let CURL_VERNUM=0x0`$CURL_CONFIG --vernum` let CURL_VERMIN=0x071301 # 7.19.1 if test $CURL_VERNUM -lt $CURL_VERMIN; then AC_MSG_ERROR(Requires libcurl version >= 7.19.1) fi AC_SUBST(CURL_CFLAGS) AC_SUBST(CURL_LIBS) ## ---------------- ## GnuTLS AC_ARG_WITH( [gnutls], AC_HELP_STRING([--with-gnutls[=@<:@no/auto/yes@:>@]], [Enable GnuTLS support. (default is auto)]), [with_gnutls="$withval"], [with_gnutls="no"] ) if test "x$with_gnutls" != "xno"; then # AC_CHECK_HEADER(gcrypt.h, [USE_GNUTLS_GCRYPT=1], [USE_GNUTLS_GCRYPT=0]) # if test "$USE_GNUTLS_GCRYPT" = "1"; then # LIBGCRYPT_CFLAGS="" # AC_SUBST(LIBGCRYPT_CFLAGS) # fi # AC_CHECK_HEADER(gcrypt/gcrypt.h, [USE_GNUTLS_GCRYPT=1], [USE_GNUTLS_GCRYPT=0]) # if test "$USE_GNUTLS_GCRYPT" = "1"; then # LIBGCRYPT_CFLAGS="" # AC_SUBST(LIBGCRYPT_CFLAGS, [""]) # fi # AC_CHECK_LIB(gcrypt, gcry_control, [USE_GNUTLS_GCRYPT=1], [USE_GNUTLS_GCRYPT=0]) # if test "$USE_GNUTLS_GCRYPT" = "1"; then # LIBGCRYPT_LIBS="-lgcrypt" # AC_SUBST(LIBGCRYPT_LIBS, ["-lgcrypt"]) # fi AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config) if test "x$LIBGCRYPT_CONFIG" = "x" ; then if test "x$with_gnutls" = "xyes"; then AC_MSG_ERROR(Unable to find libgcrypt-config, please install libgcrypt) fi else LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags` LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs` AC_SUBST(LIBGCRYPT_CFLAGS) AC_SUBST(LIBGCRYPT_LIBS) AC_DEFINE(USE_GNUTLS, 1, [Define to 1 if gnutls support is required.]) fi fi ## ---------------- ## OpenSSL AC_ARG_WITH( [openssl], AC_HELP_STRING([--with-openssl[=@<:@no/yes@:>@]], [Enable OpenSSL support.]), [with_openssl="$withval"], [with_openssl="yes"] ) if test "x$LIBGCRYPT_CONFIG" = "x" ; then if test "x$with_openssl" = "xyes"; then PKG_CHECK_MODULES(LIBCRYPTO, libcrypto) AC_SUBST(LIBCRYPTO_CFLAGS) AC_SUBST(LIBCRYPTO_LIBS) AC_DEFINE(USE_OPENSSL, 1, [Define to 1 if openssl support is required.]) fi fi ## ---------------- ## libnotify AC_ARG_ENABLE( [notify], AC_HELP_STRING([--disable-notify], [Disable libnotify support.]), [enable_notify="$enableval"], [enable_notify="yes"] ) if test "x$enable_notify" = "xyes"; then PKG_CHECK_MODULES(LIBNOTIFY, libnotify) AC_DEFINE(HAVE_LIBNOTIFY, 1, [Define to 1 if libnotify support is required.]) # for ArchLinux AC_SUBST(LIBNOTIFY_CFLAGS) AC_SUBST(LIBNOTIFY_LIBS) fi ## ---------------- ## appindicator AC_ARG_ENABLE( [appindicator], AS_HELP_STRING([--enable-appindicator[=@<:@no/auto/yes@:>@]],[Build support for application indicators.]), [enable_appindicator=$enableval], [enable_appindicator="auto"] ) if test x$enable_appindicator = xauto ; then PKG_CHECK_EXISTS([appindicator3-0.1], [enable_appindicator="yes"], [enable_appindicator="no"]) fi if test x$enable_appindicator = xyes ; then PKG_CHECK_MODULES(APP_INDICATOR, appindicator3-0.1) AC_SUBST(APP_INDICATOR_CFLAGS) AC_SUBST(APP_INDICATOR_LIBS) AC_DEFINE(HAVE_APP_INDICATOR, 1, [Have AppIndicator]) fi ## ---------------- ## gstreamer AC_ARG_ENABLE( [gstreamer], AC_HELP_STRING([--disable-gstreamer], [Disable GStreamer audio support.]), [enable_gstreamer="$enableval"], [enable_gstreamer="yes"] ) if test "x$enable_gstreamer" = "xyes"; then PKG_CHECK_EXISTS([gstreamer-1.0], [enable_gstreamer1="yes"], [enable_gstreamer1="no"]) fi if test "x$enable_gstreamer1" = "xyes"; then PKG_CHECK_MODULES(GSTREAMER, gstreamer-1.0) AC_DEFINE(HAVE_GSTREAMER, 1, [Define to 1 if gstreamer support is required.]) # for ArchLinux AC_SUBST(GSTREAMER_CFLAGS) AC_SUBST(GSTREAMER_LIBS) elif test "x$enable_gstreamer" = "xyes"; then PKG_CHECK_MODULES(GSTREAMER, gstreamer-0.10) AC_DEFINE(HAVE_GSTREAMER, 1, [Define to 1 if gstreamer support is required.]) # for ArchLinux AC_SUBST(GSTREAMER_CFLAGS) AC_SUBST(GSTREAMER_LIBS) fi ## ----------------- ## libpwmd AC_ARG_ENABLE( [pwmd], AC_HELP_STRING([--enable-pwmd], [Enable pwmd support.]), [enable_pwmd="$enableval"], [enable_pwmd="no"] ) if test "x$enable_pwmd" = "xyes"; then PKG_CHECK_MODULES(LIBPWMD, [libpwmd-8.0 >= 8.3.0]) AC_DEFINE(HAVE_LIBPWMD, 1, [Define to 1 if libpwmd support is required.]) fi AM_CONDITIONAL([WITH_LIBPWMD], [test "x$enable_pwmd" = "xyes"]) ## ----------------- ## RSS Notify AC_ARG_ENABLE( [rss-notify], AC_HELP_STRING([--disable-rss-notify], [Disable RSS Notify.]), [enable_rss_notify="$enableval"], [enable_rss_notify="yes"] ) if test "x$enable_rss_notify" = "xyes"; then AC_DEFINE(HAVE_RSS_NOTIFY, 1, [Define to 1 to enable RSS Notify.]) fi ## ----------------- ## UNIX Domain Socket AC_ARG_ENABLE( [unix-socket], AC_HELP_STRING([--enable-unix-socket], [Enable UNIX Domain Socket.]), [enable_unix_socket="$enableval"], [enable_unix_socket="no"] ) if test "x$enable_unix_socket" = "xyes"; then AC_DEFINE(USE_UNIX_DOMAIN_SOCKET, 1, [Define to 1 to use UNIX Domain Socket.]) fi ## ---------------------------------------------- ## output AC_CONFIG_FILES([ Makefile doc/Makefile tests/Makefile uget/Makefile uglib/Makefile ui-gtk/Makefile ui-gtk-1to2/Makefile pixmaps/Makefile sounds/Makefile po/Makefile.in Windows/Makefile ]) AC_OUTPUT uget-2.2.3/po/0000775000175000017500000000000013602733774010117 500000000000000uget-2.2.3/po/he.po0000664000175000017500000011374013602733704010772 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Arthur Zamarin , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Hebrew (http://www.transifex.com/uget/uget/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "מתחבר..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "מעביר..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "נסה שוב" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "הורדה הושלמה" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "סיי×" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "ניתן להשהיה" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "×œ× × ×™×ª×Ÿ להשהיה" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "" #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "×œ× ×”×¦×œ×™×— להתחבר לשרת." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "התקיה כשלה בהיווצרותה." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "יצירת קובץ נכשלה (×©× ×œ× ×ž×ª××™× ×ו קובץ ×§×™×™×)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "פתיחת קובץ נכשלה." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "" #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "" #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "מנהל הורדות" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "" #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "מצב" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "" #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "" #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "torrent חדש..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "קטגוריה חדשה" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "העתק - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "" #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "שגי××”" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "הודעה" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "בחר תיקיה" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "התחבר" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "מהירות העל××” מירבית:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "" #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "" #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "" #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "כתובת" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "גודל" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "נש×ר" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "נוסף ב-" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "" #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "הורד" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "×¤×•×¨×•× ×ª×ž×™×›×”" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "" #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "כללי" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "גודל" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "" #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "כתובת" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "" #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "רגיש ל×ותיות גדולות" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "×יבר" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "העתק הכל" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "הצג חלון" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "" uget-2.2.3/po/ku.po0000664000175000017500000013016413602733704011014 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Haval Abdulkarim , 2015 # muhamad osman muhamad , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Kurdish (http://www.transifex.com/uget/uget/language/ku/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ku\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "پەیوەندی دەکرێ..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "بڵاودەکرێتەوە" #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "دوبارە هەوڵدان" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "داگرتن تەواوبوو" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "تەواوبووە" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "بەردەوامبوون Ù„Û• توانادا هەیە" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "بەردەوامبوون Ù„Û• توانادا نیە" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "ÙØ§ÛŒÙ„Û•Ú©Û• لەتوانادانیە ناوبنرێتەوە" #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "Ù„Û• توانادا نەبوو پەیوەندی بکرێت" #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Ùۆلدەرەکە Ù„Û• توانادانیە دروستبکرێت" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "ÙØ§ÛŒÙ„Û•Ú©Û• لەتوانادانیە دروستبکرێت )ناوی ÙØ§ÛŒÙ„Û•Ú©Û• خراپە یان دووبارەیە)" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "ÙØ§ÛŒÙ„Û•Ú©Û• لەتوانادانیە بکرێتەوە" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "شوێنی بەتاڵ نەماوە ( زاکیرە یان مێمۆری پڕبووە)" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "ÙØ§ÛŒÙ„Û•Ú©Û• بوونی نیە" #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "هیچ ڕێکخستنێکی دەرخستە." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "ژمارەیەکی زۆر Ù„Û• هەوڵدانەوە" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "ÙØ§ÛŒÙ„ÛŽÚ©ÛŒ پشتگیرینەکراوە." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "ژمارەیەکی زۆر Ù„Û• ڕێپیشاندان." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "بەڕێوەبەری داگرتن" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "ناوی-وەرگێڕەکان" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "کارەکان" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "نوێ Ù„Û• کلیپبۆردەوە" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "داگرتنی نوێ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "کلیپبۆرد" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Ù‡ÛŽÚµÛŒ ÙØ±Ù…ان" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "داگرتن دەستی پێکرد" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "دەستپێکردنی داگرتنی ڕیز." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "داگرتن تەواوبوو" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "هەموو دابەزاندنە دانراوەکان تەواوبوون" #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "دۆخ" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Ù¾Û†Ù„ÛŽÙ†" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "دروستکردنی داگرتنی نوێ" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "داگرتنی نوێ..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Ù¾Û†Ù„ÛŽÙ†ÛŒ نوێ..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Ú©Û†Ù…Û•ÚµÛ• لینکێکی نوێی یەک لەدوای یەک" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "تۆرێنتێکی نوێ..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "مێتالینکێکی نوێ..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "ئەم دابەزاندنە دیاریکراوانە دەستپێبکە" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "داگرتنی دیاریکراو بوەستێنە" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "دانانی زانیاری دابەزاندنە دیاریکراوەکان" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "ئەم دابەزاندنە دیاریکراوانە ببە لوتکە" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "ئەم دابەزاندنە دیاریکراوانە ببە خوارەوە" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "جوڵاندنی داگرتنی دیاریکراو بۆ سەرەوە" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "ئەم دابەزاندنە دیاریکراوانە ببە بنەوە" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "کۆمەڵەیەکی نوێ" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "لەبەرگرتنەوە -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "زانیاری ئەم Ú©Û†Ù…Û•ÚµÛ•" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "خاسیەتەکانی داگرتن" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "تۆرێنتێکی نوێ" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "مێتا لینکێکی نوێ" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "ÙØ§ÛŒÙ„ÛŒ تۆرێنت بکرەوە" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "ÙØ§ÛŒÙ„ÛŒ مێتالینک بکەرەوە" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "لینک" #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "ÙØ§ÛŒÙ„ÛŽÚ©ÛŒ تێکست" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "وەرگرتنی لینکەکان Ù„Û• ÙØ§ÛŒÙ„ÛŽÚ©ÛŒ HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "وەرگرتنی لینک Ù„Û• ÙØ§ÛŒÙ„ÛŽÚ©ÛŒ تێکستەوە" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "هیچ لینکێک Ù„Û• کلیپبۆرد نەدۆزرایەوە" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "یەکلەدوای یەک Ù„Û• کلیپبۆردەوە" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Ù‡Û•ÚµÛ•" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "نامە" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d دیاری کراوە" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "ئاگاداری بەکارهێنەرانی یوگێت" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "ئێمە بەخشینێک بۆ یوگێن دەکەین بۆ بەرەوپێشچونی زیاتر ،تکایە کلیک بکە" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "لێرە" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "تکایە ئەم خزمەتە خێرایە بکە بۆ یوگێت." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "کلیک لێرە بکە بۆئەوەی خزمەتێک بکەی" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "ناوی Ù¾Û†Ù„ÛŽÙ†:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "دابەزاندنە چالاکەکان:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "قەبارەی تەواوبوو:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "قەبارەی سڕاوە:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "دڵنیایت دایدەخەیت؟" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "دڵنیایت دەتەوێت دایبخەیت؟" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "دڵنیایت دەتەوێت ÙØ§ÛŒÙ„ەکان بسڕیتەوە" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "دڵنیایت دەتەوێ ÙØ§ÛŒÙ„ەکان بسڕیتەوە" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "دانەوە" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Ù¾Û•Ú•Ú¯Û•:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Ùۆڵدەرەکە دیاری بکە" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "ـبوخچە:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "بەردەوامبێت" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "وەستاندن" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "چونەناوەوە" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "بەکارهێنەر:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "پاسوۆرد" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "ÙØ§ÛŒÙ„ÛŒ کووکی" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "ÙØ§ÛŒÙ„ÛŒ کووکی دیاریبکە" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "ÙØ§ÛŒÙ„ÛŒ پۆست" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "ÙØ§ÛŒÙ„ÛŒ پۆستەکە دیاری بکە" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "بریکاری بەکارهێنەر" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "سنوری دوبارەکردنەوە" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "ژماردنەکان" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "چرکە" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "زۆرترین خێرایی ناردن" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "کب/Ú†" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "بەرزترین خێرایی داگرتن:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "کاتی وەرگرتن" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "ÙØ§ÛŒÙ„" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "دابەزاندنی یەک Ù„Û• دوای یەک" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "Ú©Û†Ù…Û•ÚµÛ• لینکی یەک لەدوای یەک" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "وەرگرتن Ù„Û• ÙØ§ÛŒÙ„ÛŽÚ©ÛŒ تێکستەوە" #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "وەرگرتنی لینک Ù„Û• ÙØ§ÛŒÙ„ÛŽÚ©ÛŒ HTML" #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "ناردنە ناو ÙØ§ÛŒÙ„ÛŽÚ©ÛŒ تێکست(.txt)" #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "دەستکاری کردن" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "چاودێری کلیپبۆرد" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "یارمەتی" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "ڕێکخستنەکان..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "بینین" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "توڵامراز" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "باڕی دۆخ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "کورتە" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Ù¾ÛŽØ´Û•Ú©ÛŒ پێکهاتەکان" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "ناو" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "Ùۆڵدەر" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "لینک" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "پەیام" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "ڕیزی دابەزاندنەکان" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "تەواوبوو" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "قەبارە" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "لەسەدا '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "کاتی بەسەرچوو" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "Ú†Û•Ù¾" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "خێرایی" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "خێرایی ناردن" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "ناردراو" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "تێکڕا" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "هەوڵدانەوە" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "دانراوە Ù„Û•" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "تەواوبوو Ù„Û•" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "Ú©Û†Ù…Û•ÚµÛ•" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "Ù¾Û†Ù„ÛŽÙ†ÛŒ نوێ" #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "سڕینەوەی Ú©Û†Ù…Û•ÚµÛ•" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "ـداگرتن" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "بە ÙØ´Ø§Ø± دەستپێکردن" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "بجوڵێنە بۆ " #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Ù„Û• ئینتەرنێت یارمەتی بەدەستبێنە" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Ú©Û†Ú•ÛŒ پشتگیری" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "ناردنی هەڵەیەک Ù„Û• بەرنامەکە" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "هەواڵدان Ù„Û• Ú©Û•Ù„ÛŽÙ†" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "گەڕان بۆ ڤێرژنی نوێ" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "ڕێکخستن" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "لەتوانادا نیە بە بەرنامەیەک ÙØ§ÛŒÙ„ÛŒ '%s' بکرێتەوە." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' ئەم Ùۆڵدەرە بوونی نیە" #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "گشتی" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "پێشکەوتوو" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "ڕێکخستنی Ú©Û†Ù…Û•ÚµÛ•" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "ڕێکخستن بۆ دابەزاندنی نوێی 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "ناونەنراو" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "سڕاوە" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "هەڵدەگیرێت" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "چالاک" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "ناو" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "تەواوبوو" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "قەبارە" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "ماوە" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "ماوە" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "ژمارە" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "پڕۆکسی" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "بەکاری Ù…Û•Ù‡ÛŽÙ†Û•" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "سەرەتا" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "لینک" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "پۆرت" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "ÙØ±Ù…انی بۆشایی:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "ماددەکان" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "دوو Ø´Û•Ù…" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "سێشەم" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "چوارشەم" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "پێنج Ø´Û•Ù…" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "هەینی" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "دانیشت" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "خۆر" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "کوژاندنەوە" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "هەموو کارەکان بوەستێنە" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "ئاسایی" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "بەئاسایی کارەکە بکە" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "هەموو" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "هیچ" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "دیاریکردن بە Ùلتەر" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "ئەمە هەموو دیاریکردنەکانی لینکەکەن دەگەڕێنێتەوە Ø´ÛŽÙˆÛ•ÛŒ سەرەتا." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "خانەخوێ" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "پاشکۆی ÙØ§ÛŒÙ„." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "لینک" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "نیشاندانی بنکەی زۆر نوسین" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "هەموو دیاری بکە" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "هیچیان دیاری Ù…Û•Ú©Û•" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "دیاریکردن بە Ùلتەر" #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "بۆ نموونە" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "لێرەوە" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "بۆ:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "لێرەوە" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "کارێکی هەستیارە" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "نابێت (*) Ù„Û• لینکەکەدا هەبێت." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "بەستەر نەگونجاوە." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "هیچ نەنوسراوە Ù„Û• ' لێرەوە ' یان ' بۆ '" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "پیشاندان" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "خشتەی کات" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "پێوەکراو" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "دیکە" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "جۆری بێدەنگ" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "جۆرەکان جیابکەرەوە بە '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "دەتوانی دەربڕینی ئاسایی بەکاربێنی لێرە." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "دڵنیاکردنەوە لەکاتی سڕینەوەی ÙØ§ÛŒÙ„ەکان" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "هەمیشە ئایکۆنی لەسەرەوە پشان بدە" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "بچووکبکەوە بۆ سەرەوە Ù„Û• سەرەتاوە" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "ئیشپێکردنی دەرهێڵ Ù„Û• سەرەتا" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "ئاگادارکەرەوەی دەستپێکردنی دابەزاندنی نوێ" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "دەنگ Ú©Û• دابەزاندن تەواوبوو" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "وچان" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "خولەک" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "ڕێکخستنەکانی Ù‡ÛŽÚµÛŒ ÙØ±Ù…ان" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "بێدەنگ هەڵبژێرە ÙˆÛ•Ú© سەرەتا" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "ئاریا 2 Ù„Û• سەرەتاوە ئیشپێبکە" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "کوژاندنەوەی ئاریا 2 پاش داخستن" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "شوێن" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "ÙØ±Ù…انەکان" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Ù¾Û•Ú•Ú¯Û•" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "بوخچە" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "پێکهاتە" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "بڕ" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "کۆپیکردنی هەموو" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "پیشاندانی بەرنامە" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "شێوازی دەرهێڵ" uget-2.2.3/po/bn_BD.po0000664000175000017500000013545713602733704011353 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Nazir Ahmed Sabbir , 2015 # Reazul Iqbal , 2015,2017 # Towfique Anam, 2013 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-07-12 20:35+0000\n" "Last-Translator: Reazul Iqbal \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/uget/uget/language/bn_BD/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "সকল বিভাগ" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "যà§à¦•à§à¦¤ হচà§à¦›à§‡..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "পà§à¦°à§‡à¦°à¦¿à¦¤ হচà§à¦›à§‡..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "পà§à¦¨à¦ƒà¦šà§‡à¦·à§à¦Ÿà¦¾" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "ডাউনলোড সমাপà§à¦¤" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "সমাপà§à¦¤" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "পà§à¦¨à¦°à¦¾à§Ÿ আরমà§à¦­à¦¯à§‹à¦—à§à¦¯" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "পà§à¦¨à¦°à§Ÿà¦¾à§Ÿ আরমà§à¦­à¦¯à§‹à¦—à§à¦¯ নয়" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "আউটপà§à¦Ÿ ফাইল পà§à¦¨à¦°à¦¾à§Ÿ নামকরন করা যাবে না।" #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "হোসà§à¦Ÿà§‡à¦° সাথে যà§à¦•à§à¦¤ হতে বà§à¦¯à¦°à§à¦¥à¥¤" #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ নয়।" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "ফাইল তৈরী করা সমà§à¦­à¦¬ নয় (খারাপ ফাইল নাম অথবা ফাইল আছে)।" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "ফাইল খোলা যাবে না।" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "থà§à¦°à§‡à¦¡ তৈরি করা যায়নি।" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "ভà§à¦² উৎস (ভিনà§à¦¨ আকারের ফাইল)।" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "রিসোরà§à¦¸ নেই (ডিসà§à¦• পূরà§à¦¨ অথবা পরà§à¦¯à¦¾à¦ªà§à¦¤ মেমরি নেই)।" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "কোন আউটপà§à¦Ÿ ফাইল নেই।" #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "আউটপà§à¦Ÿ সেটিং নেই।" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "অনেক বেশী পà§à¦¨à¦ƒà¦šà§‡à¦·à§à¦Ÿà¦¾à¥¤" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "সà§à¦•িম(পà§à¦°à¦Ÿà§‹à¦•ল) অসমরà§à¦¥à¦¿à¦¤à¥¤ " #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "অসরà§à¦®à¦¥à¦¿à¦¤ ফাইল।" #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "পোসà§à¦Ÿ পাওয়া যায়নি।" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "কà§à¦•ি ফাইল পাওয়া যায়নি।" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "ভিডিওটি সরানো হয়েছে।" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "ভিডিওটির তথà§à¦¯ আনতে কà§à¦°à§à¦Ÿà¦¿ হয়েছে।" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: à¦à¦•টি অজানা তà§à¦°à§à¦Ÿà¦¿ ঘটেছে।" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: টাইম আউট হয়েছে।" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "অনেক বেশী পà§à¦¨à¦ƒà¦¨à¦¿à¦°à§à¦¦à§‡à¦¶à¥¤" #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "ডাউনলোড মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "অনà§à¦¬à¦¾à¦¦à¦•-কà§à¦°à§‡à¦¡à¦¿à¦Ÿ" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "কাজসমূহ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "কà§à¦²à¦¿à¦ªà¦¬à§‹à¦°à§à¦¡ থেকে নতà§à¦¨" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "নতà§à¦¨ ডাউনলোড" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "কà§à¦²à¦¿à¦ªà¦¬à§‹à¦°à§à¦¡" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "কমানà§à¦¡ লাইন" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "ডাউনলোড শà§à¦°à§ হচà§à¦›à§‡" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "ডাউনলোডের তালিকা চালà§" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "ডাউনলোড সমাপà§à¦¤" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "তালিকাকৃত সকল ডাউনলোড সমাপà§à¦¤" #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "অবসà§à¦¥à¦¾" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "কà§à¦¯à¦¾à¦Ÿà¦¾à¦—রি" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "নতà§à¦¨ ডাউনলোড তৈরী" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "New _Download..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "New _Category..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "New Clipboard _batch..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "New _URL Sequence batch..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "নতà§à¦¨ টরেনà§à¦Ÿ..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "নতà§à¦¨ মেটালিঙà§à¦•..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ডাউনলোড চালà§à¦° উপযোগী হিসেবে সেট করà§à¦¨" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ডাউনলোড বিরতির জনà§à¦¯ সেট করà§à¦¨" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ডাউনলোডের বৈশিষà§à¦Ÿà§à¦¯ দেখানোর জনà§à¦¯ সেট করà§à¦¨" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ডাউনলোড উপরে তà§à¦²à§à¦¨" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ডাউনলোড নিচে নামান" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ডাউনলোড সবার উপরে তà§à¦²à§à¦¨" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ডাউনলোড সবার নিচে নামান" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "নতà§à¦¨ কà§à¦¯à¦¾à¦Ÿà¦¾à¦—রি" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "কপি" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "কà§à¦¯à¦¾à¦Ÿà¦¾à¦—রি বৈশিষà§à¦Ÿà§à¦¯" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "ডাউনলোড বৈশিষà§à¦Ÿà§à¦¯" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "নতà§à¦¨ টরেনà§à¦Ÿ" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "নতà§à¦¨ মেটালিংক" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "টরেনà§à¦Ÿ ফাইল খà§à¦²à§à¦¨" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "মেটালিংক ফাইল খà§à¦²à§à¦¨" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "লিংক " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "ছবি " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "টেকà§à¦¸à¦Ÿ ফাইল" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "HTML ফাইল থেকে URL ইমপোরà§à¦Ÿ" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "টেকà§à¦¸à¦Ÿ ফাইল থেকে URL ইমপোরà§à¦Ÿ" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "কà§à¦°à¦®à¦¾à¦¨à§à¦¸à¦¾à¦°à§‡ সাজানো URL " #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "কà§à¦²à¦¿à¦ªà¦¬à§‹à¦°à§à¦¡à§‡ কোন ইউআরà¦à¦² পাওয়া যায়নি" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "সাজানো কà§à¦²à¦¿à¦ªà¦¬à§‹à¦°à§à¦¡" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "তà§à¦°à§à¦Ÿà¦¿" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "বারà§à¦¤à¦¾" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d সংখà§à¦¯à¦• বসà§à¦¤à§ নিরà§à¦¬à¦¾à¦šà¦¿à¦¤" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "uGet বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীদের দৃষà§à¦Ÿà¦¿ আকরà§à¦·à¦£:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "আমরা uGet à¦à¦° ভবিষà§à¦¯à§Ž ডেভেলপমেনà§à¦Ÿà§‡à¦° জনà§à¦¯ ডোনেশন চাইছি, অনà§à¦—à§à¦°à¦¹ করে কà§à¦²à¦¿à¦• করà§à¦¨" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "à¦à¦–ানে" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "অনà§à¦—à§à¦°à¦¹ করে uGet à¦à¦° জনà§à¦¯ à¦à¦‡ ছোট সারà§à¦­à§‡à¦¤à§‡ অংশ নিন" #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "সারà§à¦­à§‡à¦¤à§‡ অংশ নিতে à¦à¦–ানে কà§à¦²à¦¿à¦• করà§à¦¨" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Category _name:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Active _downloads:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "সমাপà§à¦¤à§‡à¦° ধারণকà§à¦·à¦®à¦¤à¦¾:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "পà§à¦¨à¦ƒà¦¬à§à¦¯à¦¬à¦¹à¦¾à¦° ধারণকà§à¦·à¦®à¦¤à¦¾:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "আসলেই পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করবেন?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "আপনি কি নিশà§à¦šà¦¿à¦¤ যে আপনি পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করতে চান?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "আসলেই ফাইলগà§à¦²à§‹ মà§à¦›à¦¤à§‡ চান?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "আপনি কি নিশà§à¦šà¦¿à¦¤ আপনি ফাইলগà§à¦²à§‹ মà§à¦›à¦¤à§‡ চান?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "মিররসমূহ:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "ফাইল:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "ফোলà§à¦¡à¦¾à¦° নিরà§à¦¬à¦¾à¦šà¦¨" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Folder:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "রেফারকারী:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Runnable" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_ause" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "লগইন" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "পাসওয়ারà§à¦¡:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "কà§à¦•ি ফাইল:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "কà§à¦•ি ফাইল সিলেকà§à¦Ÿ করà§à¦¨" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "ফাইল পোসà§à¦Ÿ:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "পোসà§à¦Ÿ ফাইল নিরà§à¦¬à¦¾à¦šà¦¨:" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "ইউজার à¦à¦œà§‡à¦¨à§à¦Ÿ:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Retry _limit:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "গণনা" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Retry _delay:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "সেকেনà§à¦¡" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "সরà§à¦¬à§‹à¦šà§à¦š আপলোড গতি:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "কিবাইট/সে" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "সরà§à¦¬à§‹à¦šà§à¦š ডাউনলোডের গতি:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "টাইমসà§à¦Ÿà§à¦¯à¦¾à¦®à§à¦ª তà§à¦²à§‡ আনà§à¦¨" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_File" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Batch Downloads" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_Clipboard batch..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL Sequence batch..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Text file import (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML file import (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Export to Text file (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Edit" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Clipboard _Monitor" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "সামà§à¦ªà§à¦°à¦¤à¦¿à¦• ডাউনলোড সেটিং পà§à¦°à§Ÿà§‹à¦—" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Help" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Settings..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_View" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Toolbar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¾à¦¸à¦¬à¦¾à¦°" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Summary" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Summary _Items" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Name" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Folder" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Message" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Download _Columns" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Complete" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Size" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Percent '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Elapsed" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Left" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "গতি" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "আপলোড গতি" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "আপলোডেড" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "অনà§à¦ªà¦¾à¦¤" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Retry" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "শà§à¦°à§ হয়েছে" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "সমাপà§à¦¤ হয়েছে" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Category" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_New Category..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Delete Category" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Download" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "জোরপূরà§à¦¬à¦• আরমà§à¦­" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Move To" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "অনলাইনে সাহাযà§à¦¯ নিন" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "সাপোরà§à¦Ÿ ফোরাম" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "মতামত দিন" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "বাগ রিপোরà§à¦Ÿ করà§à¦¨" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "আপডেট চেক করà§à¦¨" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "সেটিং" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "'%s' à¦à¦° জনà§à¦¯ ডিফলà§à¦Ÿ à¦à¦ªà§à¦²à¦¿à¦•েশন পাওয়া যায়নি" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - à¦à¦‡ ফোলà§à¦¡à¦¾à¦°à¦Ÿà¦¿ নেই" #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "সাধারণ" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "অগà§à¦°à¦¬à¦°à§à¦¤à§€" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "কà§à¦¯à¦¾à¦Ÿà¦¾à¦—রি সেটিংস" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "নতà§à¦¨ ডাউনলোড 1 à¦à¦° জনà§à¦¯ পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤ 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "নামবিহীন" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "পà§à¦¨à¦ƒà¦šà¦¾à¦²à¦¨à¦¾" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "সারিবদà§à¦§ করা হচà§à¦›à§‡" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "সকà§à¦°à¦¿à§Ÿ" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "নাম" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "সমাপà§à¦¤" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "আকার" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "অতিকà§à¦°à¦¾à¦¨à§à¦¤ হয়েছে" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "বাকি আছে" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "পরিমাণ" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "পà§à¦°à¦•à§à¦¸à¦¿:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "বà§à¦¯à¦¬à¦¹à§ƒà¦¤ হবে না" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "হোসà§à¦Ÿ" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "পোরà§à¦Ÿ:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "সকেট:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "সকেট আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "উপাদান:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "সোম" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "মঙà§à¦—ল" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "বà§à¦§" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "বৃহঃ" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "শà§à¦•à§à¦°" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "শনি" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "রবি" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Enable Scheduler" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "বনà§à¦§ করà§à¦¨" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "-সব কাজ বনà§à¦§ করà§à¦¨" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "সà§à¦¬à¦¾à¦­à¦¾à¦¬à¦¿à¦•" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "-কাজ সà§à¦¬à¦¾à¦­à¦¾à¦¬à¦¿à¦•ভাবে চালান" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "সব" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "কোনটাই না" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "ফিলà§à¦Ÿà¦¾à¦°à§‡à¦° মাধà§à¦¯à¦®à§‡ মারà§à¦• করà§à¦¨" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "URL কে হোসà§à¦Ÿ à¦à¦¬à¦‚ ফাইলনেম দিয়ে মারà§à¦• করà§à¦¨" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "à¦à¦Ÿà¦¿ সকল URL à¦à¦° মারà§à¦• রিসেà§à¦Ÿ করবে।" #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "হোসà§à¦Ÿ" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "ফাইল à¦à¦•à§à¦¸à¦Ÿ." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL:" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "মূল হাইপারটেকà§à¦¸à¦Ÿ রেফারেনà§à¦¸" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Mark _All" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Mark _All" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Mark by filter..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "যেমন:" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_From:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "পà§à¦°à¦¤à¦¿:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "সংখà§à¦¯à¦¾:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "F_rom:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "কেস-সংবেদনশীল" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "URL à¦à¦¨à§à¦Ÿà§à¦°à¦¿à¦¤à§‡ কোন ওয়াইলà§à¦¡à¦•ারà§à¦¡(*) বরà§à¦£ নেই।" #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL টি সঠিক নয়" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "'from' বা 'to' à¦à¦¨à§à¦Ÿà§à¦°à¦¿à¦¤à§‡ কোন বরà§à¦£ নেই।" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "পà§à¦°à¦¿à¦­à¦¿à¦‰" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "শিডিওলার" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "পà§à¦²à¦¾à¦—-ইন" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "অনà§à¦¯à¦¾à¦¨à§à¦¯" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Quiet mode" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "টাইপগà§à¦²à§‹à¦•ে '|' দিয়ে আলাদা করà§à¦¨" #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "à¦à¦–ানে রেগà§à¦²à¦¾à¦° à¦à¦•à§à¦¸à¦ªà§à¦°à§‡à¦¶à¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦° করতে পারেন।" #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "ফাইল ডিলিট করার আগে নিশà§à¦šà¦¿à¦¤ করà§à¦¨" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "সবসময় টà§à¦°à§‡ আইকন দেখান" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "সà§à¦Ÿà¦¾à¦°à§à¦Ÿà¦†à¦ªà§‡ টà§à¦°à§‡à¦¤à§‡ মিনিমাইজ করà§à¦¨" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "সà§à¦Ÿà¦¾à¦°à§à¦Ÿà¦†à¦ªà§‡ অফলাইন মà§à¦¡ চালৠকরà§à¦¨" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "ডাউনলোড শà§à¦°à§ হবার নোটিফিকেশন" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "ডাউনলোড সমাপà§à¦¤ হলে শবà§à¦¦ বাজান" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Interval:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "মিনিট" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "কমানà§à¦¡à¦²à¦¾à¦‡à¦¨ সেটিংস" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "'--quiet' পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤à¦­à¦¾à¦¬à§‡ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Launch aria2 on startup" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Shutdown aria2 on exit" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "পথ" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿà¦¸à¦®à§‚হ" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "ফাইল" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "ফোলà§à¦¡à¦¾à¦°" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "বসà§à¦¤à§" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "মান" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Copy _All" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "উইনà§à¦¡à§‹ পà§à¦°à¦¦à¦°à§à¦¶à¦¨" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Offline Mode" uget-2.2.3/po/ru.po0000664000175000017500000014614513602733704011031 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Anton Shcherbina , 2016 # Paul Zercy , 2013 # Pavlo Bohmat , 2010 # Vasya Durkin , 2017 # Дмитрий Серов , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-07-13 14:16+0000\n" "Last-Translator: Vasya Durkin \n" "Language-Team: Russian (http://www.transifex.com/uget/uget/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Ð’Ñе категории" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Соединение..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Передача..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Повторить" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Закачка завершена" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Завершено" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "ВозобновлÑемо" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Ðе возобновлÑемо" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "ИÑходÑщий файл невозможно переименовать." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "не удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº узлу." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Ðевозможно Ñоздать каталог." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Файл не может быть Ñоздан (неверное Ð¸Ð¼Ñ Ð¸Ð»Ð¸ файл ÑущеÑтвует)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Ðевозможно открыть файл." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Ðе удаетÑÑ Ñоздать поток." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Ðеверный иÑточник (разный размер файла)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Ðет реÑурÑов (диÑк переполнен или недоÑтаточно памÑти)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Ðет иÑходÑщего файла." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Ðет иÑходÑщих наÑтроек." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Слишком много повторений." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "ÐÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ñхема (протокол)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Ðеподдерживаемый файл." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "cookie файл не найден" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Это видео удалено." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "Ðе найден video_id в ÑÑылке YouTube." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: Ð²Ñ€ÐµÐ¼Ñ Ð¸Ñтекло." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: реÑÑƒÑ€Ñ Ð½Ðµ найден." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 получила определенное чиÑло ошибок \"реÑÑƒÑ€Ñ Ð½Ðµ найден\". Смотрите параметр --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: ÑкороÑть была Ñлишком медленной." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: возникла проблема Ñ Ñетью." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: незавершенные загрузки." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Ðет реÑурÑов" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: размер блока был отличным от указанного в контрольном .aria2-файле" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 был загружен один и тот же файл." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 был загружен один и тот же хеш торрента." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: файл уже ÑущеÑтвует. Смотрите параметр --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: не удалоÑÑŒ открыть ÑущеÑтвующий файл." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: не удалоÑÑŒ Ñоздать новый файл или обнулить ÑущеÑтвующий файл." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: произошла ошибка чтениÑ/запиÑи файла." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: разрешение имен не удалоÑÑŒ." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: не удалоÑÑŒ проанализировать Metalink-документ." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP команда не удалаÑÑŒ." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP-заголовок ответа был иÑпорченным или неожиданным." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Слишком много перенаправлений." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP-Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ðµ удалаÑÑŒ." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: не удалоÑÑŒ проанализировать закодированный файл (обычно файл \".torrent\")." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: торрент-файл поврежден или недоÑтаточно информации." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: плохой Magnet URI." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: задан плохой/неопознанный параметр или неожиданный аргумент к нему." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: удаленный Ñервер не Ñмог обработать запроÑ." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: не удалоÑÑŒ проанализировать JSON-RPC запроÑ." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Ðет ответа. Может быть aria2 отключена?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid был удален." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Ðевозможно получить media ÑÑылку" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Менеджер закачек" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Павел Богмат \nМихаил Воронцов " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "ОÑнователь uGet: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Менеджер проекта uGet: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "задачи" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "ÐÐ¾Ð²Ð°Ñ Ð¸Ð· буфера обмена" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ°" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Буфер обмена" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Произошла ошибка" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Произошла ошибка при загрузке." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Закачка запущена" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Запущена очередь закачки" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Закачка завершена" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Ð’Ñе очереди загрузки были завершены." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "СоÑтоÑние" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Категории" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Создать новую закачку" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "ÐÐ¾Ð²Ð°Ñ _закачка..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "ÐÐ¾Ð²Ð°Ñ _категориÑ" #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "ÐÐ¾Ð²Ð°Ñ _из буфера обмена" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð°ÐºÐµÑ‚Ð½Ð°Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ°..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Ðовый торрент..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "ÐÐ¾Ð²Ð°Ñ Ð¼ÐµÑ‚Ð°-ÑÑылка" #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Сохранить вÑе наÑтройки" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "УÑтановить выбранные закачки на иÑполнение" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "УÑтановить выбранные закачки на паузу" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "ÐаÑтройки выбранных закачек" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "ПоднÑть выбранное" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "ОпуÑтить выбранное" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "ПеремеÑтить выбранное вверх" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "ПеремеÑтить выбранное вниз" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "ÐÐ¾Ð²Ð°Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Копировать - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "СвойÑтва категории" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "СвойÑтва закачки" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Ðовый торрент" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "ÐÐ¾Ð²Ð°Ñ Ð¼ÐµÑ‚Ð°-ÑÑылка" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Открыть торрент-файл" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrent файл (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Открыть файл мета-ÑÑылки" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Ðе удалоÑÑŒ Ñохранить файл категории." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Ðе удалоÑÑŒ загрузить файл категории." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Сохранить файл категории" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Открыть файл категории" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "Файл JSON (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "СÑылка " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Изображение " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "ТекÑтовый файл" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Импорт URL-адреÑов из HTML файла" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "Файл HTML (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Импорт URL-адреÑов из текÑтового файла" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "ПроÑтой текÑтовый файл" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "ЭкÑпорт URL-адреÑов в текÑтовый файл" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "ПоÑледовательноÑть ÑÑылок" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Ð’ буфере обмена не найдено URL-адреÑов." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Ð’Ñе URL-адреÑа уже ÑущеÑтвуют." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Из буфера обмена" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "ÐоваÑ" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Ошибка" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Сообщение" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Выбран(о) %d пункт(а,ов)" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Пользователи uGet, внимание:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "мы запуÑтили Donation Drive Ð´Ð»Ñ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐ¹ разработки uGet, пожалуйÑта, щелкните" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ЗДЕСЬ" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "пожалуйÑта, пройдите быÑтрый Ð¾Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "нажмите здеÑÑŒ, чтобы пройти опроÑ" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Ð˜Ð¼Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð¸:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Ðктивные _закачки:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Завершенных загрузок:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "КоличеÑтво удаленных:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "УÑÐ»Ð¾Ð²Ð¸Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "РаÑпознавать _хоÑты:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "РаÑпознавать _Ñхемы:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "РаÑпознавать _типы:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "ДейÑтвительно выйти?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Ð’Ñ‹ уверены, что хотите выйти?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "ДейÑтвительно удалить файлы?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Ð’Ñ‹ уверены, что хотите удалить файлы?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "ДейÑтвительно удалить категорию?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Ð’Ñ‹ уверены, что хотите удалить категорию?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Ðе Ñпрашивать Ñнова" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Зеркала:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Файл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Выбрать каталог" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Каталог:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "ИÑточник перехода:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_МакÑимальное чиÑло Ñоединений:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_ЗапуÑтить" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "П_ауза" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Вход" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Пользователь:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Пароль:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Файл куки:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Выбрать куки-файл" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Post файл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Выберать отправлÑемый файл" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "User Agent:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_ЧиÑло повторов:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "раз" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "_Задержка повтора:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "Ñекунд" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "ÐÐ°Ð¸Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ ÑкороÑть отправки:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "кб/Ñ" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑкороÑть закачки:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Получать timestamp" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Файл" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_ÐŸÐ°ÐºÐµÑ‚Ð½Ð°Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ°" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Из _буфера обмена" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_ÐŸÐ°ÐºÐµÑ‚Ð½Ð°Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ°..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Импортировать _текÑтовый файл (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Импортировать _HTML файл (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_ЭкÑпортировать в текÑтовый файл (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Открыть категорию..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Сохранить категорию как..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Сохранить _вÑе наÑтройки" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Ðвтономный режим" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Правка" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_Следить за буфером обмена" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Буфер обмена в автоматичеÑком режиме" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока в автоматичеÑком режиме" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "ПропуÑкать ÑущеÑтвующие URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "ПринÑть наÑтройки поÑледней закачки" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "_ДейÑÑ‚Ð²Ð¸Ñ Ð¿Ð¾Ñле завершениÑ" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Отключено" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "ГибернациÑ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Ждущий режим" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Завершение работы" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Перезагрузка" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "ПользовательÑкое" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Запомнить наÑтройку" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Справка" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_ÐаÑтройки..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Вид" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "Панель _инÑтрументов" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Строка ÑоÑтоÑниÑ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_ПодробноÑти" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "_Показывать в подробноÑÑ‚ÑÑ…" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_ИмÑ" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Каталог" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Сообщение" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Колонки ÑпиÑка _закачек" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Скачано" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Размер" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "Про_цент '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Прошло" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_ОÑталоÑÑŒ" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "СкороÑть" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "СкороÑть отдачи" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Отправлено" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Рейтинг" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Повторить" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Добавлено" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Завершено" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_КатегориÑ" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "Создать _категорию..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Удалить категорию" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Закачка" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Удалить запиÑÑŒ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Удалить запиÑÑŒ и _файл" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Открыть _Ñодержащий каталог" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "БыÑтрый Ñтарт" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "Пе_ремеÑтить в" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Приоритет" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Ð’Ñ‹Ñокий" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Ðормальный" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Ðизкий" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Получить помощь онлайн" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "ДокументациÑ" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Форум поддержки" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "ОÑтавить отзыв" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Сообщить об ошибке" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Ð¡Ð¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Проверить наличие обновлений" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "ÐаÑтройки" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Ðе удаетÑÑ Ð·Ð°Ð¿ÑƒÑтить приложение по умолчанию Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° '%s'" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - каталог не ÑущеÑтвует." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI уже ÑущеÑтвует" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Этот URI уже ÑущеÑтвует, вы уверены, что хотите продолжить?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Главные" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Дополнительные" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "ÐаÑтройки категории" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Ð£Ð¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ закачки 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Ð£Ð¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸Ñ 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "безымÑнный" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "ПриоÑтановлено" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Отправка" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Завершено" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Удалено" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Очередь" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Ðктивно" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Ð’Ñе ÑоÑтоÑниÑ" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "ИмÑ" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Скачано" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Размер" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Прошло" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "ОÑталоÑÑŒ" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "КоличеÑтво" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "ПрокÑи:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ðе иÑпользовать" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "По умолчанию" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Сервер:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Порт:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Сокет:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Параметры Ñокета:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Элемент:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Пнд" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Втр" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Срд" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Чтв" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Птн" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Суб" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Ð’Ñк" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "Включить планировщик" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Выключить" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- оÑтановить вÑÑ‘" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Ðормально" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- запуÑтить задачу нормально" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Ð’Ñе" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Ðичего" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Отметить по фильтру" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Отметить адреÑа принадлежащие узлу И раÑширению файлов." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Это приведет к ÑброÑу вÑех отмеченные URL-адреÑов." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Сервер" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "РаÑширение файла" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "База ÑÑылок" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Отметить _вÑÑ‘" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "СнÑть _вÑе отметки" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Отметить по фильтру..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "Ðапример:" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_С:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "По:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "цифр:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_Ñ:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ региÑтра" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Ðет Ñимвола шаблона(*) в URL." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "ÐедопуÑтимый URL-адреÑ." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Ð’ полÑÑ… 'С' или 'По' ничего нет." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "ПредпроÑмотр" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "ИнтерфейÑ" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "ПропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Планировщик" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Плагины" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Другое" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Включить мониторинг буфера обмена" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Ð’ автоматичеÑком\n режиме" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Ð˜Ð½Ð´ÐµÐºÑ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð¸ по умолчанию" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Добавление к N-ой категории, еÑли ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð½Ðµ раÑпознана." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Следить за Ñтими типами файлов в буфере обмена:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Типы отделÑÑŽÑ‚ÑÑ Ñимволом '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Можно иÑпользовать регулÑрные выражениÑ." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Подтверждение" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Показывать окно Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ выходе" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Подтверждение при удалении файлов" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "ОблаÑть уведомлений" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Ð’Ñегда показывать иконку в трее" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Минимизировать в трей при запуÑке" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Скрывать в трей при закрытии окна" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "ИÑпользовать индикатор приложений Ubuntu" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Включить автономный режим при запуÑке" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Уведомление при запуÑке загрузки" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Звуковое уведомление по окончании" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Показать увеличенные иконки" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Они воздейÑтвуют на вÑе плагины." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Глобальные Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑкороÑть отправки" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑкороÑть закачки" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð¿Ð¾Ñле завершениÑ" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "ПользовательÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "ПользовательÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° при возникновении ошибки:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_ÐвтоÑохранение" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Интервал:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "минут" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "ÐаÑтройки параметров командной Ñтроки" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "ИÑпользовать '--quiet' по умолчанию" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "ПорÑдок раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð²:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Опции плагина aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "Секретный токен RPC-авторизации" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Глобальные Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти только Ð´Ð»Ñ aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_ЗапуÑкать aria2 при Ñтарте" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Выключать aria2 при выходе" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "ЗапуÑкать aria2 на локальном уÑтройÑтве" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Путь" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Параметры" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Ð’Ñ‹ должны перезагрузить uGet поÑле внеÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "СоответÑтвует уÑловиÑм" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "КачеÑтво:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Тип:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Файл" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Каталог" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Пункт" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Значение" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Копировать _вÑÑ‘" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Показать окно" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Ðвтономный режим" uget-2.2.3/po/sr@latin.po0000664000175000017500000013061113602733704012146 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # markosm , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/uget/uget/language/sr@latin/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sr@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Sve kategorije" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Povezivanje..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Å aljem..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "PokuÅ¡aj ponovo" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Preuzimanje zavrÅ¡eno" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "ZavrÅ¡eno" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Obnovljivo" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Nije obnovljivo" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Izlazni fajl ne može biti preimenovan." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "nemoguće povezivanje sa raÄunarom." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Fascikla ne može biti kreirana." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Fajl ne može biti kreiran (pogreÅ¡no ime ili fajl već postoji)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Fajl se ne može otvoriti" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Nije moguće stvoriti nit." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Neispravan izvor (razliÄita veliÄina fajla)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Premalo resursa (disk je pun ili nema dovoljno memorije)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Nema izlaznog fajla." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Nema izlazne postavke." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "PreviÅ¡e ponovnih pokuÅ¡aja." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Nepodržana Å¡ema (protokol)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Nepodržan fajl." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: dogodila se nepoznata greÅ¡ka." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: vremenska pauza." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: resursi nisu pronaÄ‘eni." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 prijavljuje odreÄ‘eni broj 'resource not found' greÅ¡ki. Pogledaj --max-file-not-found opciju" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: brzina je vrlo spora." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: dogodio se problem sa mrežom." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: nezavrÅ¡ena preuzimanja." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Van resursa" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: dužina komada je razliÄita od one u .aria2 kontrolnom fajlu." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 je preuzela isti fajl." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 je preuzela isti torent info." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: fajl već postoji. Pogledaj --allow-overwrite opciju." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: ne mogu otvoriti postojeći fajl." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: ne mogu kreirati novi fajl ili skratiti postojeći." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: dogodila se I/O greÅ¡ka." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: neuspelo imenovanje rezolucije." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: nije moguće analizirati Metalink dokument." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP komanda nije uspela." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP odgovor je loÅ¡ ili neoÄekiva." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "PreviÅ¡e preusmeravanja." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP autorizacija nije uspela." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: ne mogu analizirati fajl (obiÄno .torrent fajl)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: torent fajl je oÅ¡tećen ili nedostaju informacije." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI je bio loÅ¡." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: data je loÅ¡a/nepoznata opcija." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: udaljeni server nije mogao da obradi zahtev." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: nije moguće analizirati JSON-RPC zahtev." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Bez odgovora. Da li je aria2 ugaÅ¡en?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid je uklonjen." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Menadžer preuzimanja" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "zasluge prevodilaca" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet osnivaÄ:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet menadžer projekta: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "zadaci" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Novo iz klipborda" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Novo preuzimanje" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Klipbord" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Komandna linija" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Dogodila se greÅ¡ka" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Dogodila se greÅ¡ka kod preuzimanja." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Preuzimanje zapoÄinje" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Pokretanje preuzimanja na Äekanju" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Preuzimanje zavrÅ¡eno" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Sva preuzimanja sa popisa Äekanja su zavrÅ¡ena." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Stanje" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategorija" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Kreiraj novo preuzimanje" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Novo _preuzimanje..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nova _kategorija..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Novo iz _klipborda..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Novi _URL redosled linkova..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Novi torent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Novi meta-link..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "SaÄuvaj sva podeÅ¡avanja" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Pokreni odabrano preuzimanje" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Pauziraj odabrano preuzimanje" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Podesi svojstva odabranog preuzimanja" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Pomeri odabrano preuzimanje gore" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Pomeri odabrano preuzimanje dole" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Pomeri odabrano preuzimanje na vrh" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Pomeri odabrano preuzimanje na dno" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nova kategorija" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Kopiraj - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Svojstva kategorije" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Svojstva preuzimanja" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Novi torent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Novi meta-link" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Otvori torent fajl" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Otvori meta-link fajl" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Neuspelo Äuvanje fajla kategorije" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Neuspelo uÄitavanje kategorije fajla." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "SaÄuvaj fajl kategorije" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Otvori fajl kategorije" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Link " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Slika " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Tekstualni fajl" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Uvezi URL-ove iz HTML fajla" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Uvezi URL-ove iz tekstualnog fajla" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Izvezi URL u tekstualni fajl" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL Redosled linkova" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Bez URL-a pronaÄ‘enih u klipbordu." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Sve URL adrese su postojeće." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Iz klipborda" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Novo" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "GreÅ¡ka" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Poruka" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Odabrano %d stavki" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Pažnja uGetters:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "pokrenuli smo prikupljanje donacija za budući razvoj uGet-a, molim kliknite " #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "OVDE" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "molimo popunite ovu kratku korisniÄku anketu za uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "kliknite ovde za poÄetak ankete" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Ime _kategorije:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Aktivna _preuzimanja:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Kapacitet zavrÅ¡enog:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Kapacitet obrisanog:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI podudarajući uslovi" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Podudareni _hostovi:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Podudarene _Å¡eme:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Podudareni _režimi:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Stvarno želite izaći?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Da li ste sigurni da želite izaći?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Stvarno želite obrisati fajlove?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Da li ste sigurni da želite obrisati fajlove?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Stvarno želite obrisati kategoriju?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Da li ste sigurni da želite obrisati kategoriju?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Ne pitaj me ponovo" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Serveri:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Fajl:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Odaberi fasciklu:" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Fascikla:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Izvor tranzicije:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Maks konekcija:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Pokreni" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_auza" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Prijava" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Korisnik:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Lozinka:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Fajl kolaÄića:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Odaberi fajl kolaÄića" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "PoÅ¡tanski fajl:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Odaberi poÅ¡tanski fajl" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "KorisniÄki zastupnik" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "OgraniÄenje _pokuÅ¡aja:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "pokuÅ¡aja" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "OdgaÄ‘anje _pokuÅ¡aja:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "sekundi" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Maksimalna brzina otpremanja:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Maksimalna brzina preuzimanja:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Prihvati vremenske oznake" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Fajl" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Paketna preuzimanja" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_Iz klipborda..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL redosled linkova..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Uvoz tekstualnog fajla (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_Uvoz HTML fajla (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Izvoz u tekstualnom fajlu (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Otvori kategoriju..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_SaÄuvaj kategoriju kao..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "SaÄuvaj _sva podeÅ¡avanja" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Režim van mreže" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Uredi" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Klipbord _monitor" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Klipbord radi u pozadini" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Komandna linija radi u pozadini" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "PreskoÄi postojeći URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Primeni nedavne postavke preuzimanja" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "ZavrÅ¡ene _auto-akcije" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Onemogući" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Uspavaj" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Suspenduj" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Napusti" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Ponovo pokreni" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "PrilagoÄ‘eno" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Zapamti podeÅ¡avanja" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Pomoć" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Postavke..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Pregled" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Traka alata" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Statusna traka" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Sažetak" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Stavke _sažetka" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Ime" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Fascikla" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Poruka" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Kolone _preuzimanja" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_ZavrÅ¡eno" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_VeliÄina" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Procenat '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_ProÅ¡lo vremena" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Levo" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Brzina" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Brzina otpreme" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Otpremljeno" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Odnos" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_PokuÅ¡aj ponovo" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Dodato" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "ZavrÅ¡eno" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategorija" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nova kategorija..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_ObriÅ¡i kategoriju" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Preuzimanje" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_ObriÅ¡i stavku" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "ObriÅ¡i stavku i _fajl" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Otvori _sadržajnu fasciklu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Prisili pokretanje" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Premesti u" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Prioritet" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Visok" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normalan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Nizak" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Potražite pomoć na mreži" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentacija" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Forum za podrÅ¡ku" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "PoÅ¡aljite povratnu informaciju" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Prijavite greÅ¡ke" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "PreÄice tastature" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Proverite ažuriranja" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Postavke" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Nemoguće pokretanje podrazumevane aplikacija za fajl '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Ova fascikla ne postoji." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI postoji" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Ovaj URI postoji, da li želite da nastavite?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "OpÅ¡te" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Napredno" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Postavke kategorije" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Podrazumevano za novo preuzimanje 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Podrazumevano 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "bezimeno" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Pauzirano" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Otpremanje" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "ZavrÅ¡eno" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Obrisano" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Na Äekanju" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktivno" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Svi statusi" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Ime" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "ZavrÅ¡eno" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "VeliÄina" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Pokrenuto" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "ZavrÅ¡eno" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "KoliÄina" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proksi:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ne koristi" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Podrazumevano" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "RaÄunar:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "UtiÄnica:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "UtiÄnica args:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Pon" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Uto" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Sre" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "ÄŒet" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Pet" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Sub" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Ned" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Omogući raspored" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "IskljuÄi" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- zaustavi sve zadatke" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normalno" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- normalno pokreni zadatak" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Sve" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Nepoznato" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "OznaÄi prema filteru" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "OznaÄi URL-ove prema raÄunaru i vrsti fajla." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Ovo će resetovati sve oznaÄene URL-ove." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "RaÄunar" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Vrsta fajla" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Osnovna hipertekst preporuka" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "OznaÄi _sve" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "OznaÄi _niÅ¡ta" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_OznaÄi prema filteru..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "npr." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Od:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Na:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "brojevi:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "O_d:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "mala-velika slova" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Bez zamenskih(*) karaktera u URL unosu." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL nije ispravan." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Nema znakova u 'Od' ili 'Na' unosu." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Pregled" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "KorisniÄko suÄelje" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Protok" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Raspored" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Dodatak" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Ostalo" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Omogući klipbord monitor" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Tihi režim" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Podrazumevani indeks kategorije" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Dodavanje u Nth kategoriju ako se ne podudaraju." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Monitor klipborda za odreÄ‘eni tip fajla:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Razdvoj vrste fajlova sa znakom '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Možete koristiti uobiÄajene izraze ovde." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Potvrda" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Prikaži dijalog potvrde na izlasku" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Potvrdi pri brisanju fajlova" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Sistemska kaseta" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Uvek prikaži ikonu u sistemskoj kaseti" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Smanji u sistemsku kasetu po pokretanju" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Spusti u sistemsku kasetu kad zatvoriÅ¡ prozor" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Koristi Ubuntu indikator" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Omogući na poÄetku režim van mreže" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "ObaveÅ¡tenje o poÄetku preuzimanja" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Zvuk kada se zavrÅ¡i preuzimanje" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Ovo će uticati na sve dodatke." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "OpÅ¡te ograniÄenje brzine" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Maks brzina otpremanja" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Maks brzina preuzimanja" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "ZavrÅ¡ene auto-akcije" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "PrilagoÄ‘ena komanda:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "PrilagoÄ‘ena komanda ako se dogodi greÅ¡ka:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Automatsko Äuvanje" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Interval:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minuta" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Postavke komandne linije" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Koristi '--quiet' kao podrazumevano" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Poredak povezivanja:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 opcije povezivanja" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC tajno pitanje za autorizaciju" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "OpÅ¡te ograniÄenje brzine samo za aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Pokreni aria2 na poÄetku" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_IskljuÄi aria2 na izlazu" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Pokreni aria2 na lokalnom ureÄ‘aju" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Putanja" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumenti" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Morate ponovo pokrenuti uGet nakon izmena." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Fajl" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Fascikla" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Stavka" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Vrednost" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Kopiraj _sve" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Prikaži prozor" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Režim van mreže" uget-2.2.3/po/fr.po0000664000175000017500000013556713602733704011020 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Nicolas Cuffia , 2016 # Patrice LACOUTURE , 2017 # Rémy J. , 2017 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-09-22 23:51+0000\n" "Last-Translator: Rémy J. \n" "Language-Team: French (http://www.transifex.com/uget/uget/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Service de gestion de mots de passe : uget\n\nLors de la tentative de connexion SSH à %s il y a eu un problème de vérification de la clé d'hôte vis à vis du fichier d'hôte connu et de confiance car cette clé d'hôte n'a pas été trouvé.\n\nSouhaitez-vous traiter cette connexion comme digne de confiance pour celle-ci et les futures connexions en ajoutant la clé d'hôte %s au fichier des hôtes connus ?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Toutes les catégories" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Connexion en cours..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Transmission en cours ..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Réessayer" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Téléchargement terminé" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Fini" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Reprise possible" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Reprise impossible" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Le fichier de sortie ne peut pas être renommé." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "Impossible de se connecter au serveur." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Le dossier ne peut pas être créé." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Le fichier ne peut être créé (mauvais nom de fichier ou le fichier existe)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Fichier ne peut pas être ouvert." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Impossible de créer fil." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Mauvaise source (taille de fichier différente)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Plus de ressources (disque plein ou à court de mémoire)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Pas de fichier de sortie." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Pas de réglage de la sortie." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Trop de tentatives." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Programme non pris en charge (protocole)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Fichier non pris en charge." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "fichier post introuvable." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "fichier cookie introuvable." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Cette vidéo a été supprimée." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Une erreur est survenue lors de l'obtention d'infos sur la vidéo." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Une erreur est survenue lors de l'obtention de la page web de la vidéo." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "Pas de video_id trouvé dans l'URL YouTube." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2 : une erreur inconnue s'est produite." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2 : un dépassement de temps s'est produit." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2 : la ressource n'a pas été trouvé." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 a vu le nombre spécifié d'erreur 'ressource non trouvé'. Voir l'option --max-file-option non trouvée" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2 : la vitesse était trop lente." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2 : un problème de réseau s'est produit." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2 : téléchargements inachevés." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Hors des ressources" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2 : la longueur de pièce était différente de celui du fichier de contrôle .aria2." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 téléchargeait le même fichier." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 téléchargeait le même torrent de hachage d'informations." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2 : le fichier existait déjà. Voir l'option --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2 : n'a pas pu ouvrir le fichier existant." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2 : impossible de créer le nouveau fichier ou de tronquer fichier existant." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2 : une erreur de I/O de fichier s'est produite." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2 : la résolution de nom a échoué." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2 : n'a pas pu analyser le document Metalink." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2 : la commande FTP a échoué." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2 : l'entête de réponse HTTP était mauvaise ou inattendue." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Trop de redirections." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2 : l'autorisation HTTP a échoué." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2 : n'a pas pu analyser le fichier bencoded (fichier .torrent habituellement)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2 : fichier torrent a été endommagé ou manquant d'informations." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2 : l'URI Magnet était mauvais." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2 : option mauvaise/non reconnue a été donnée ou argument d'option inattendue était " #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2 : le serveur distant n'a pas pu traiter la demande." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2 : n'a pas pu analyser la demande JSON-RPC." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Pas de réponse. Est-ce que aria2 est arrêté ?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2 : gid a été retiré." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Impossible d'obtenir le lien média." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Aucune correspondance média." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Gestionnaire de téléchargement" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Robert-André Mauchin\nEmmanuel Andry" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "Fondateur uGet : " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Chef de projet uGet : " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "tâches" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Nouveau depuis le Presse-papiers" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Nouveau téléchargement" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Presse-papiers" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Ligne de commande" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Une erreur est survenue" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Une erreur est survenue lors du téléchargement." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Démarrage Téléchargement" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Démarrer la file d'attente téléchargement." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Téléchargement Terminé" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Toutes les files d'attente téléchargement sont terminées." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Statut" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Catégorie" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Créer un nouveau téléchargement" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Nouveau _Téléchargement" #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nouvelle _Catégorie ..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Nouveau traitement par lot _depuis le presse-papiers" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Nouveau lot de séquence URL" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Nouveau Torrent ..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nouveau Metalink ..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Enregistrer tous les paramètres" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Mettre téléchargement sélectionné exécutable" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Mettre téléchargement sélectionné en pause" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Définir les propriétés du téléchargement sélectionnées " #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Déplacer le téléchargement sélectionné vers le haut" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Déplacer le téléchargement sélectionné vers le bas" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Déplacer le téléchargement sélectionné au début" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Déplacer le téléchargement sélectionné à la fin" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nouvelle catégorie" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Copier -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Propriétés catégorie" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Propriétés Téléchargement" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Nouveau Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nouveau Metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Ouvrir le fichier Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Fichier Torrent (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Ouvrir le fichier Metalink" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Impossible d'enregistrer le fichier de catégorie." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Impossible de charger le fichier de catégorie." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Enregistrer le fichier de catégorie" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Ouvrir le fichier de catégorie" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "Fichier JSON (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Lien " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Image " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Fichier Texte" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importer des URLs depuis un fichier HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "Fichier HTML (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importer des URLs depuis un fichier texte" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Fichier texte" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Exporter les URL dans un fichier texte" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Lot de séquence URL" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Aucune URL trouvée dans le presse-papiers." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Toutes les URL ont existé." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Traitement par lot du presse-papiers" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Nouveau" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Erreur" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Message" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d éléments sélectionnés" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Attention uGetters :" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "nous sommes entrain d'organiser une compagne de donation pour le développement futur de uGet, cliquez SVP" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ICI" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "remplissez SVP ce rapide sondage d'utilisateur pour uGet" #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "cliquez ici pour remplir le sondage" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Nom de la catégorie :" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "_Téléchargements actifs :" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Capacité des finis :" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Capacité des supprimés :" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI appairant les conditions" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "_Hôtes appariés :" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "_Schémas appariés :" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "_Types appariés:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Vraiment quitter ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Veux-tu vraiment quitter ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Vraiment supprimer ces fichiers ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Êtes-vous sûr de vouloir supprimer ces fichiers ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Vraiment supprimer la catégorie ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Êtes-vous sûr de vouloir supprimer la catégorie ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Ne plus jamais me demander" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI :" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Miroirs :" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Fichier :" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Sélectionnez un dossier" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Dossier :" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Référent :" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "Connexions _Max :" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Exécutable" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_ause" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Connexion" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Identifiant :" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Mot de passe :" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Fichier cookie :" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Sélectionner Fichier Cookie" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Fichier posté :" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Sélectionnez Fichier Posté" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Utilisateur :" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_Limite des ré-essais :" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "comptes" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "_Délai pour réessayer " #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "secondes" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Vitesse max téléchargement (up) :" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "Ko/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Vitesse max téléchargement (dl) :" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Récupérer horodatage" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Fichier" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "Traitement par lot de téléchargement" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Traitement par lot du _presse-papiers ..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "Lot de séquence URL..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Importer un fichier _Texte (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Importer un fichier _HTML (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Exporter vers un fichier texte (.txt) ..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Ouvrir la catégorie ..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Sauver la catégorie comme ..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Enregistrer tous les paramètres" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Mode hors ligne" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Éditer" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_Surveiller le Presse-papiers" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Le presse-papiers fonctionne discrètement" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "La ligne de commande fonctionne discrètement" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Passer l'URI existante" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Appliquer les paramètres de téléchargement récents" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "Complétion _Auto-Actions" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Désactiver" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Hiberner" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Suspendre" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Éteindre" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Redémarrer" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Personnalisé" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Se rappeler du paramètre" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Aide" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Paramètres..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Vue" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "Barre d'_outils" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Barre d’état" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Résumé" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Résumé des _Items" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Nom" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Dossier" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Message" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "_Colonnes Téléchargement" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Treminé" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Taille" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Pourcentage « % »" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Passé" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Restant" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Vitesse" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Vitesse d'émission" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Envoyé" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Ratio" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Réessayer" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Ajouté" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Terminé" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Catégorie" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nouvelle catégorie" #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "Catégorie _Supprimée" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Téléchargement" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "Supprimer l'entrée" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Supprimer l'entrée et le fichier" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Ouvrir le dossier contenant" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Forcer le Démarrage" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Déplacer à" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Priorité" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "En _haut" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normal" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "En _bas" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Obtenir de l'aide en ligne" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Documentation" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Forum d'aide" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Envoyer un retour" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Rapport de bug" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Raccourcis clavier" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Vérifier les mises à jour" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Paramètres" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Impossible de lancer l'application par défaut pour le fichier « %s ». " #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "« %s » - Ce dossier n'existe pas." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "l'URI avait existé" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Cette URI avait existé, êtes vous sûr de vouloir continuer ?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Général" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Options avancées" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Paramètres catégorie" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Par défaut pour le nouveau téléchargement 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Défaut 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "sans nom" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "En Pause" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Envoi en cours" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Terminé" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Supprimé" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "File d'attente" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Actif" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Tous les états" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Nom" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Complété" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Taille" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Fini" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Restant" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Quantité" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy :" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ne pas utiliser" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Standard" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Hôte :" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port :" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket :" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Socket args:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Élément :" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Lun" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Mar" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Mer" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Jeu" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Ven" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Sam" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Dim" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Activer le Planificateur" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Eteindre" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- Arrêter toutes les tâches" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normal" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- Exécuter normalement les tâches " #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Tous" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Aucune" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Marquer par filtre" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Marquer les URL par serveur et extension de fichier." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Ceci permet de réinitialiser toutes les marques d'URL." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Hôte" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Ext. Fichier" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Base de référence hypertexte" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Marquer _Tout" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Marquer _Aucun" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Marquer par filtre ..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "ex :" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_De :" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Vers :" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "Nb :" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_De" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "sensible à la casse" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Pas de caractère joker (*) dans l'URL." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "L'URL est invalide." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Pas de caractère dans les entrées « De » ou « Pour »." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Aperçu" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Interface utilisateur" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Bande passante" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Échéancier" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Plug-in" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Site Web média" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Autres" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "Activer le moniteur de presse-papiers" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Mode silencieux" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Indice de la catégorie par défaut" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Ajouter à la catégorie Nième si aucune catégorie appariés." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "Surveiller URL site Web média" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Surveiller presse-papiers pour les types de fichiers spécifiés :" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Séparer les types avec le caractère '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Vous pouvez utiliser des expressions régulières ici." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Confirmation" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Afficher la boite de dialogue de confirmation lors de la sortie" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Confirmer lors de la suppression de fichiers" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Zone de notification" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Toujours afficher dans la barre d'icônes" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Réduire en icône au démarrage" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Fermer le plateau sur la fenêtre fermée" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Utilisez App Indicateur d'Ubuntu" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Activer le mode hors ligne au démarrage" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Notification au démarrage des téléchargements" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Son quand le téléchargement est fini" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Afficher grande icône" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Tout cela affectera tous les greffons." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Limite de vitesse globale" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Vitesse de téléchargement max" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Vitesse de téléchargement max" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Complétion Auto-Actions" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Commande personnalisée :" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Commande personnalisée en cas d'erreur :" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "Sauvegarde _Auto" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Intervalle :" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minutes" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Paramètres ligne de commande" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Utiliser '--quiet' par défaut" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Ordre d'appariement des greffons :" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Options des greffons Aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "Jeton secret d'autorisation RPC " #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Limite de vitesse goblale pour aria2 seulement" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Lancement au démarrage d'aria2" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "Arrêt d'aria2 à la sortie" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Lancer aria2 sur périphérique local" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Chemin d'accès" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Arguments" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Vous devez redémarrer uGet après l'avoir modifié." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Mode de correspondance média :" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Conditions de correspondance" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Qualité :" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Type :" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Fichier" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Dossier" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Élément" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Valeur" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "To_ut copier" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Afficher la fenêtre" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "Mode h_ors ligne" uget-2.2.3/po/fa.po0000664000175000017500000014163213602733704010765 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ali 4129 , 2016 # amin hosseinzadeh fardnia , 2015 # Arash Kadkhodaei , 2016 # deadmarshal , 2014 # mhajiloo , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Ali 4129 \n" "Language-Team: Persian (http://www.transifex.com/uget/uget/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "همه دسته‌ها" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "در حال اتصال" #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "در حال ارسال" #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "تلاش دوباره" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "پایان بارگیری" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "پایان ÛŒØ§ÙØª" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "با قابلیت از سر Ú¯Ø±ÙØªÙ†" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "بدون قابلیت از سر Ú¯Ø±ÙØªÙ†" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "پرونده خروجی قابل نامگذاری نیست." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "خطا در ارتباط با میزبان." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "ساخت پوشه به مشکل برخورد." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "پرونده قابل ساخت نیست (نام غیرمجاز یا تکراری)" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "پرونده قابل باز شدن نیست." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "اشکال در ساختن سوژه." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "منبع نادرست (ØªÙØ§ÙˆØª در حجم ÙØ§ÛŒÙ„)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "منابع تمام شد (هارد پرشده یا رَم Ú©Ù… است)" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "بدون ÙØ§ÛŒÙ„ خروجی." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "بدون تنظیمات خروجی" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "بیش از حد تلاش شده." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "طرح (پروتوکل) پشتیبانی نشده." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "پرونده پشتیبانی نشده." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "کوکی‌ها پیدا نشد." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "این ویدیو پاک شده است." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "در زمان Ø¯Ø±ÛŒØ§ÙØª اطلاعات ویدیو خطا رخ داد." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "در زمان اتصال به ØµÙØ­Ù‡ اینترنتی ویدیو خطا رخ داد." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "در این URL از YouTube ویدیو با این شناسه video_id پیدا نشد." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: خطایی نامشخص رخ داد." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: تایم آوت رخ داد." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: منبع ÛŒØ§ÙØª نشد." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "آریا2: تعدادی خطای «منبع ÛŒØ§ÙØª نشد» مشاهده کرد. گزینه‌ی --max-file-not-found را مشاهده Ú©Ù†" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "آریا2: سرعت خیلی Ú©Ù… بود" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "آریا2: مشکل شبکه رخ داد" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "آریا2: بارگیری‌های تمام نشده" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "منبع تمام شد." #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "آریا2: طول قطعه در ÙØ§ÛŒÙ„ کنترلی .aria2 از یکی Ù…ØªÙØ§ÙˆØª بود." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 نیز همان ÙØ§ÛŒÙ„ را دانلود Ù…ÛŒ کرد." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "آریا2 اطلاعات هش شده تورنت یکسان بارگیری کرد." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: ÙØ§ÛŒÙ„ از قبل وجود دارد. گزینه --allow-overwrite را نگاه کنید." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: نتوانست ÙØ§ÛŒÙ„ موجود را باز کند." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "آریا2: نتوانست پرنده را بسازد یا پرنده موجود ناقص است " #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "آریا2: خطای I/O برای پرونده رخ داد." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "آریا2: تحلیل نام شکست خورد." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "آریا2: نتوانست سند متالینک را تجزیه کند." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "آریا2: دستور FTP شکست خورد." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "آریا2: عنوان پاسخ HTTP بد Ùˆ یا غیر منتظره بود." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "تغییر مسیر بیش از حد" #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "آریا2: مجوز HTTP شکست خورد." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "آریا2: نتوانست پرونده bencoded (معولاً پرونده تورنت) را تجزیه کند." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "آرای2: پرونده تورنت خراب شده بود Ùˆ یا اطلاعات از دست Ø±ÙØªÙ‡." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: URI مگنت اشتباه بود." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "آریا2: گزینه‌ی بد/ناشناخته داده شده یا آرگومان گزینه‌ی ناشناخته داده شده." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "آریا2: نتوانست سرور راه دور را به دست بگیرد." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "آریا2: Ù…ÛŒ توان درخواست JSON-RPC را تجزیه کرد." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "بدون پاسخ. آیا aria2 خاموش است؟" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "آریا2: gid حذ٠شد." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "مشکلی در Ø¯Ø±ÛŒØ§ÙØª لینک وجود دارد." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "رسانه‌ی همسان وجود ندارد." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "مدیریت دانلودها" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "توضیحات مترجم" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "مؤسس uGet:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "مدیر پروژه uGet:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "کارها" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "دانلود تازه از کلیپبورد" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "دانلود تازه" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "کلیپبورد" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "خط ÙØ±Ù…ان" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "ارور رخ داد" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "هنگام دانلود ارور رخ داد." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "دانلود در حال شروع" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "در حال شروع ص٠دانلود" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "پایان دانلود" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "تمام دانلودها پایان ÛŒØ§ÙØªÙ†Ø¯." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "وضعیت" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "دسته" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "ایجاد دانلود جدبد" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "ـدانلود تازه" #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "ـدسته تازه..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "دانلود گروهی جدید از کلیپبورد..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "دانلود گروهی جدید" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "تورنت تازه..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "ابرپیوند تازه" #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "همه تنظیمات را ذخیره Ú©Ù†" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "دانلود انتخاب شده را قابل اجرا تنظیم Ú©Ù†" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "دانلود انتخاب شده را Ù†Ú¯Ù‡ دار" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "مشخصات دانلود انتخاب شده را تنظیم Ú©Ù†" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "دانلود انتخاب شده را ببر بالا" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "دانلود انتخاب شده را ببر پایین" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "دانلود انتخاب شده را بالای همه ببر." #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "دانلود انتخاب شده را به پایین همه ببر" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "دسته‌ی جدید" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Ú©Ù¾ÛŒ -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "مشخصات رده" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "مشخصات دانلود" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "تورنت تازه" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "ابرپیوند تازه" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "گشودن ÙØ§ÛŒÙ„ تورنت" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "ÙØ§ÛŒÙ„‌های تورنت (torrent.*)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "باز کردن ÙØ§ÛŒÙ„ ابرپیوند" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "ذخیره‌سازی دسته‌بندی ÙØ§ÛŒÙ„ شکست خورد." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "بارکردن دسته‌بندی ÙØ§ÛŒÙ„ شکست خورد." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "دسته‌بندی پرونده را ذخیره Ú©Ù†." #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "دسته‌بندی پرونده را باز Ú©Ù†." #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "ÙØ§ÛŒÙ„‌های JSON" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "لینک " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "عکس " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "ÙØ§ÛŒÙ„ متنی" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "وارد کردن آدرس ها از ÙØ§ÛŒÙ„ HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "وارد کردن URLsها از ÙØ§ÛŒÙ„ متنی" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "ÙØ§ÛŒÙ„ متنی" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "URLها را به پرونده متنی صادر Ú©Ù†" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "دنباله گروهی sequence" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "هیچ آدرسی در کلیپبورد پیدا نشد." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "همه URLها وجود داشته است." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "دانلود گروهی از کلیپبورد" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "تازه" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "خطا" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "پیام" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d مورد انتخاب شده" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "توجه کنید کاربران uGet:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "ما یک درایو Ú©Ù…Ú© مالی برای ادامه توسعه uGet راه انداخته ایم، Ù„Ø·ÙØ§ کلیک کنید" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "اینجا" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "Ù„Ø·ÙØ§ این ارزیابی Ú©ÙˆÚ†Ú© را به خاطر uGet پر کنید." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "برای ارزیابی اینجا را بزنید" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "نام رده:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "دانلودهای ÙØ¹Ø§Ù„:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "ظرÙیت پایان ÛŒØ§ÙØªÙ‡ ها:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "ظرÙیت Ø¨Ø§Ø²ÛŒØ§ÙØªÛŒ ها:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "شرایط تطبیق URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "میزبان همسان:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "طرح‌های همسان:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "انواع همسان:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "واقعا خارج شوید؟" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "آیا مطمٔنید Ú©Ù‡ میخواهید خارج شوید؟" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "آیا واقعا ÙØ§ÛŒÙ„ ها حذ٠شوند؟" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "آیا مطمٔنید Ú©Ù‡ میخواهید ÙØ§ÛŒÙ„ها را پاک کنید؟" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "آیا واقعا رده پاک شود؟" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "آیا واقعا میخواهید Ú©Ù‡ این رده پاک شود؟" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "دیگر از من نپرس" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "آینه ها:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "ÙØ§ÛŒÙ„:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "پوشه را برگزینید" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "پوشه:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "مرجع:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "ـبیشترین تعداد اتصال" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "قابل اجرا" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "توقÙ" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "ورود" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "کاربر:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "پسورد:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "ÙØ§ÛŒÙ„ Ú©ÙˆÚ©ÛŒ:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "انتخاب ÙØ§ÛŒÙ„ Ú©ÙˆÚ©ÛŒ" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "ÙØ§ÛŒÙ„ پست:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "انتخاب ÙØ§ÛŒÙ„ پست" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "ارگان کاربر:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "حداکثر تلاشها:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "تعداد" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "ÙØ§ØµÙ„Ù‡ تلاشها:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "به ثانیه" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "بیشترین سرعت آپلود" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "بیشترین سرعت دانلود" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "بازیابی Ù…Ùهر زمان" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_ÙØ§ÛŒÙ„" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "دانلود دسته جمعی" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "دانلود دسته جمعی از کلیپبورد" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "دنباله URL گروهی" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "وارد کردن از ÙØ§ÛŒÙ„ متن (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "وارد کردن از ÙØ§ÛŒÙ„ اچ تی ام ال(.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "ریختن به ÙØ§ÛŒÙ„ متن (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "دسته‌ی باز..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "دخیره‌ی دسته به عنوان..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "تمام تنظیمات را ذخیره Ú©Ù†" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "حالت Ø¢Ùلاین" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "ویرایش" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "زیرنظر داشتن کلیپبورد" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "کلیپ‌برد بی صدا کار می‌کند" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "کامند لاین بی صدا کار می‌کند" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "از URl موجود صر٠نظر Ú©Ù†" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "تکمیل خودکار اقدامات" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "ØºÛŒØ±ÙØ¹Ø§Ù„ Ú©Ù†" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "هایبرنیت" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "معلق" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "خاموش کردن" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "ریبوت کردن" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "دستی" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "تنظیمات را به یاد بسپار" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "راهنما" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "ـتنظیمات..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "نشان دادن" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "بخش ابزارها" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "بخش وضعیت" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "خلاصه" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "موارد خلاصه" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "نام" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "پوشه" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "ـپیام" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "ردی٠های دانلود" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "پایان" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "حجم" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "درصد '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "مانده" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "Ù€Ú†Ù¾" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "سرعت" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "سرعت آپلود" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "آپلود شده" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "نرخ" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "تلاش دوباره" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Ø§ÙØ²ÙˆØ¯Ù‡ شده در" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "پایان ÛŒØ§ÙØªÙ‡ در" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "رده بندی" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "رده تازه..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "پاک کردن رده" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "دانلود" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "پاک کردن ورودی" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "پاک کردن ورودی Ùˆ پرونده" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "پوشه دربرگیرنده را باز Ú©Ù†" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "شروع با زور" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "بردن به" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "اولویت" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "بالا" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "معمولی" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "پایین" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Ø¯Ø±ÛŒØ§ÙØª راهنمایی آنلاین" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "مستندات" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "انجمن پشتیبانی" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "ارسال بازخورد" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "خبر دادن باگ" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "شورتکات های کیبورد" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "گشتن برای بروزرسانی" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "تنظیمات" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "اشکال در اجرای برنامه ÛŒ Ù¾ÛŒØ´ÙØ±Ø¶ برای ÙØ§ÛŒÙ„ '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - این پوشه وجود ندارد." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URl از پیش وجود داشت" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "این URl از پیش وجود داشت، آیا مطمئنید میخواهید ادامه دهید؟" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "اصلی" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Ù¾ÛŒØ´Ø±ÙØªÙ‡" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "تنظیمات دسته" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Ù¾ÛŒØ´ÙØ±Ø¶ برای دانلود 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Ù¾ÛŒØ´ÙØ±Ø¶ 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "بدون نام" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "متوق٠شده" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "در حال آپلود" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "پایان ÛŒØ§ÙØªÙ‡" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "بازیابی شده" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "در حال ص٠کشی" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "ÙØ¹Ø§Ù„" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "تمام وضعیت ها" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "نام" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "پایان" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "سایز" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "سپری شده" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "مانده" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URl" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "مقدار" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "پروکسی:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù†Ú©Ù†" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Ù¾ÛŒØ´ÙØ±Ø¶" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "میزبان:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "درگاه:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "سوکت:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "مشخصه های سوکت:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "المنت" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "دوشنبه" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "سه شنبه" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "چهار شنبه" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "پنج شنبه" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "جمعه" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "شنبه" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "یکشنبه" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "ÙØ¹Ø§Ù„ سازی زمان بند" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "خاموش Ú©Ù†" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "توق٠تمام کارها" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "عادی" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "اجرای معمولی کارها" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "همه" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "هیچ" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "انتخاب بر اساس Ùیلتر" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "نشانه گذاری URLها با میزبان Ùˆ پسوند ÙØ§ÛŒÙ„ها" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "این تمام انتخاب های URLها را برمیگرداند." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "میزبان" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "پسوند ÙØ§ÛŒÙ„" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "مرجع ابرمتن پایه" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "انتخاب همه" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "انتخاب هیچکدام" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "انتخاب بر اساس Ùیلتر" #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "برای نمونه" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "از:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "به:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "شماره ها:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "از:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "حساس به بزرگ Ùˆ Ú©ÙˆÚ†Ú©ÛŒ" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "کاراکترهای wildcard(*) در ورودی URL نیستند." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL معتبر نمی‌باشد" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "هیچ کاراکتری در ورودی 'از' یا 'به' نبود." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "پیش نمایش" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "رابط کاربری" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "پهنای باند" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "زمان بند" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Ø§ÙØ²ÙˆÙ†Ù‡" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "بقیه" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "زیر Ù†Ø¸Ø±Ú¯Ø±ÙØªÙ† کلیپبورد" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "حالت ساکت" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Ùهرست Ù¾ÛŒØ´ÙØ±Ø¶ رده" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "اضاÙÙ‡ کردن به Nمین رده اگر رده ای مناسب نبود." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "بررسی URL از وب‌سایت مدیا " #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "برای مدل ÙØ§ÛŒÙ„ های تعیین شده کلیپبورد را زیر نظر بگیر:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "شما میتوانید انواع را با کاراکتر |‌ جداکنید." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "میتوانید از عبارت های با قاعده Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "تاییدیه" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "نشان دادن دیالوگ تایید هنگام خروج" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Ú¯Ø±ÙØªÙ† تایید هنگام پاک کردن پرونده ها" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "System Tray" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "همیشه آیکن tray را نشان بده" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "هنگام شروع به tray جمع Ú©Ù†" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "بستن در Tray هنگام بستن پنجره" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Ø§Ø³ØªÙØ§Ø¯Ù‡ از Ubuntu App Indicator" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "هنگام شروع حالت Ø¢Ùلاین را ÙØ¹Ø§Ù„ Ú©Ù†" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "آگاه ساز شروع دانلود" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "پخش صدا هنگام پایان دانلود" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "نمایش آیکون‌های بزرگ" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "این همه Ø§ÙØ²ÙˆÙ†Ù‡ تأثیر می‌گذارد." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "محدودیت جهانی سرعت" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "سرعت بیشینه ÛŒ آپلود" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "سرعت بیشینه ÛŒ دانلود" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "کارهای خودکار هنگام پایان" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "ÙØ±Ù…ان Ø³ÙØ§Ø±Ø´ÛŒ:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "ÙØ±Ù…ان Ø³ÙØ§Ø±Ø´ÛŒ اگر خطا رخ داد:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "دخیره خودکار" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "دوره زمانی:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "دقیقه" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "تنظیمات خط ÙØ±Ù…ان" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "به طور Ù¾ÛŒØ´ÙØ±Ø¶ از حالت بیصدا Ø§Ø³ØªÙØ§Ø¯Ù‡ Ú©Ù†" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "درخواست مطابقت Ø§ÙØ²ÙˆÙ†Ù‡:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "گزینه‌های Ø§ÙØ²ÙˆÙ†Ù‡â€ŒÛŒ آریا2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "علامت٠محرمانه‌ی مجوز RPC " #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "محدودیت سرعت سراسری Ùقط برای آریا2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "اجرای aria2 در شروع" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "خاموش کردن aria2 در خروج" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "راه‌اندازی آریا2 روی دستگاه محلی" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "مسیر" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "آرگمانها" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "شما باید uGet را پس از اصلاح راه اندازی مجدد کنید." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "وضعیت مطابقت مدیا:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "شرایط تطبیق:" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Ú©ÛŒÙیت:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "نوع:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "ÙØ§ÛŒÙ„" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "پوشه" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "آیتم" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "مقدار" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Ú©Ù¾ÛŒ همه" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "نمایش پنجره" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "حالت Ø¢Ùلاین" uget-2.2.3/po/hu.po0000664000175000017500000013222513602733704011011 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Balzamon, 2016-2018 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2018-02-06 10:03+0000\n" "Last-Translator: Balzamon\n" "Language-Team: Hungarian (http://www.transifex.com/uget/uget/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Összes kategória" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Kapcsolódás..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Ãtvitel..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Újra" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "A letöltés kész." #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Kész" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Folytatható" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Nem folytatható" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "A kimeneti fájl nem nevezhetÅ‘ át." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "kapcsolódás a kiszolgálóhoz sikertelen" #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "A mappa nem hozható létre." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "A fájl nem hozható létre (hibás fájlnév vagy a fájl létezik)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "A fájl nem nyitható meg." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Nem lehet létrehozni a letöltési szálat." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Hibás forrás (eltérÅ‘ fájl méret)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Az forrás nem érhetÅ‘ el (a lemez vagy a memória megtelt)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Nincs kimeneti fájl." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Nincs kimeneti beállításl." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Túl sok újrapróbálkozás." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Nem támogatott rendszer (protokol)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Nem támogatott fájl." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "post fájl nem található" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "A cookie fájl nem található." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "A videót törölték." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Hiba történt a video info beszerzésekor." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Hiba történt a videó weboldalának betöltésekor." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: ismeretlen hiba történt." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: idÅ‘túllépési hiba." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: a forrás nem található." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 a forrás nem létezik hibát észlelt. Lásd --max-file-not-found opció" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: az átviteli sebesség túl kicsi" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: hálózati hiba." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: befejezetlen letöltés." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Az erÅ‘források elfogytak." #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: a szelet hossza eltér az .aria2 kontroll fájlban megadottétól." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 letöltötte már ezt a fájlt." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 letöltötte már ugyanezt a torrent szelet info-t." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: A fájl már létezik. Lásd --allow-overwrite opció." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: Nem nyitható meg ugyanaz a fájl." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: az új fájl nem hozható létre vagy nem írható felül létezÅ‘ fájl." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: fájl írás/olvasási hiba." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: a névfeloldás meghiúsult." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: nem elemezhetÅ‘ Metalink dokumentum." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: az FTP parancs végrehajtása meghiúsult." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: nem várt vagy hibás HTTP válasz fejléc" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Túl sok átirányítás." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP jogosultsági hiba." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: nem elemezhetÅ‘ kódolt fájl(.torrent file)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: a torrent fájl hibás vagy hiányzó információ" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI hibás" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: hibás/ismeretlen opció" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: a távoli szerver nem elérhetÅ‘ a kérés feldolgozásához" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: nem elemezhetÅ‘ JSON-RPC kérés" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Nincs válasz. Az aria2 kilépett?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: a csoportazonosító eltávolítva." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "A media link nem nyitható meg." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "LetöltéskezelÅ‘" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Fordítók listája" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet alapító:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet projekt menedzser:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "feladatok" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Új vágólapról" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Új letöltés" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Vágólap" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Parancssor" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Hiba történt" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Hiba történt a letöltéskor." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Letöltés indítása" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Letöltési sor indítása." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Letöltés kész" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Minden sorban álló letöltés befejezÅ‘dött." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Ãllapot" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategória" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Új letöltés létrehozása" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Új _letöltés..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Új _Kategória..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Új kötegelt letöltés _vágólapról..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Új _letöltési sor URL..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Új torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Új metalink..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Összes beállítás mentése" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Kiválasztott letöltés indítása" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Kiválasztott letöltés megállítása" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Kiválasztott letöltés tulajdonságai" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Rangsor növelés" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Rangsor csökkentés" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Rangsor legmagasabb" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Rangsor legalacsonyabb" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Új kategória" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Másolás -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Kategória beállítások" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Letöltési beállítások" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Új torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Új metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Torrent fájl megnyitása" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrent fájl (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Metalink fájl megnyitása" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "A kategória fájl mentése nem sikerült." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "A kategória fájl betöltése nem sikerült." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Kategória fájl mentése" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Kategória fájl megnyitása" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON file (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Link " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Kép " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Szöveg fájl" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Hivatkozás import HTML fájlból" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML file (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Hivatkozás import vágólapról" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "A hivatkozások exportálása szövegfájlba" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Letöltési sor URL" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Nincs hivatkozás a vágólapon" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Már az összes URL létezik." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Köteg vágólapról" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Új" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Hiba" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Üzenet" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Kiválasztott %d elemek" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Figyelmeztetés uGet használóknak:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "Itt támogathatod a jövÅ‘beni fejlesztéseket." #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ITT" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "Kérlek töltsd ki ezt a felmérést az UgetrÅ‘l." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "klikkelj ide a felméréshez" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Kategória _név:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Aktív _letöltések:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Befejezett" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Töröltek:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI egyezÅ‘ feltételek" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "EgyezÅ‘ _host-ok:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "EgyezÅ‘ _sémák:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "EgyezÅ‘ _típusok:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Biztosan kilép?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Tényleg kilépsz?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Tényleg törlöd a fájlokat?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Tényleg törlöd a fájlokat?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Tényleg törlöd a kategóriát?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Biztos, hogy törölni akarod a kategóriát?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Ne kérdezd meg újra" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Tükrök:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Fájl:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Mappa választás" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Mappa:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Hivatkozó:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Maximális kapcsolatok száma:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Indítás" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "Szün_et" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Belépés" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Felhasználó:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Jelszó:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Cookie fájl:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Cookie fájl kiválasztás" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Post fájl:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Post fájl kiválasztása" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Felhasználói ügynök:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Újracsatlakozások _korlátozása" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "db" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Késleltetett _próbálkozás:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "másodpercek" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Maximális feltöltési sebesség:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Maximális letöltés sebesség:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "IdÅ‘bélyeg kinyerése" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Fájl" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Kötegelt letöltés" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_Kötegelt letöltés vágólapról..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_Letöltési sor URL-bÅ‘l..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Szövegfájl import (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML fájl import (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Exportálás szövegfájlba (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Kategória megnyitása..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Kategória mentése mint.." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Összes _beállítás mentése" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Kapcsolat nélküli mód" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Szerkesztés" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Vágólap _figyelÅ‘" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "A vágólap háttérben fut" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "A parancssor a háttérben fut" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "LétezÅ‘ URI átugrása" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Alkalmazd a legújabb letöltési beállításokat" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "Az automatikus műveletek _befejezése" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Elutasít" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Hibernálás" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Alvó állapot" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Leállít" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Újraindít" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Egyéni" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Beállítások megjegyzése" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Segítség" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Beállítások..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Nézet" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Eszköztár" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "ÃllapotjelzÅ‘" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Összegzés" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Elemek _tulajdonságai" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Név" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Mappa" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Üzenet" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Letöltési _oszlopok" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Teljes" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Méret" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Százalék '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Eltelt idÅ‘" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_HátralévÅ‘" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Sebesség" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Sebesség növelés" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Feltöltés" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Arány" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Újra" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Hozzáadott" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Befejezett" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategória" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Új kategória..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Kategória törlése" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Letöltés" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Bejegyzés törlése" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "A hivatkozás és a fájl törlése" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Letöltési _mappa megnyitása" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Kényszerített indítás" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Ãthelyez" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "ElsÅ‘bbség" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Magas" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normál" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Alacsony" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Online segítségnyújtás" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Leírások" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Támogatási fórum" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Visszajelzés küldése" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Hibajelentés küldése" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Billentyűkombinációk" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Frissítések keresése" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Beállítások" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Az alapértelmezett alkalmazás nem futtatható a '%s' fájlhoz." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - A mappa nem létezik." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI már létezik" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Az URI már létezik, biztos hogy folytatod?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Ãltalános" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Haladó" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Kategória beállítások" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Alapértelmezett letöltés 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Alapértelmezett 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "névtelen" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Megállt" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Feltöltés" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Kész" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Törölt" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Várólista" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktív" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Összes állapot" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Név" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Kész" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Méret" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Eltelt idÅ‘" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "HátralévÅ‘" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Mennyiség" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ne használd" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Alapértelmezett" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Host:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Kommunikációs végpont:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Elem:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Hét" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Ked" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Sze" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Csü" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Pén" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Szo" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Vas" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_ÜtemezÅ‘ engedélyezése" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Kikapcsolás" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- minden folyamat leállítása" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normál" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- folyamat futtatása normál módban" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Összes" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Egyik sem" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Kijelölés szűrÅ‘vel" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "URL-ek megjelölése a kiszolgáló által ÉS fájlnév kiterjesztés." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Az összes URL kijelölés megszüntetése" #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Szerver" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Fájl kiterj." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Alap hypertext hivatkozás" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Összes _kijelölése" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Egyik _sem kijelölése" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Kijelölés szűrÅ‘vel..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "pl" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Innen:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "To:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "számjegyek:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "F_rom:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "nagybetű-érzékeny" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Nincs joker(*) karakter az URL bejegyzés" #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "A hivatkozás hibás." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Nincs karakter a 'From' vagy a 'To' bejegyzésben." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "ElÅ‘nézet" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Felhasználói felület" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Sávszélesség" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "ÜtemezÅ‘" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "BeépülÅ‘" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Egyebek" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Vágólap figyelés engedélyezése" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Néma üzemmód" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Alapértelmezett kategória index" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Hozzáadás az N-dik kategóriához, ha nincs egyezÅ‘ kategória." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Vágólap figyelés megadott fájltípusok után:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Típusok elválasztása '|' karakterrel" #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Reguláris kifejezés használható." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "MegerÅ‘sítés" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Mutasd a megerÅ‘sítés ablakot kilépéskor." #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "MegerÅ‘sítés fájlok törlésekor" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Rendszertálca" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Mindig mutassa a tray ikont" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Indítás minimódban a tálcán" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Tedd tálcára az ablak bezárásakor" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Használd az Ubuntu alkalmazás indikátort" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Offline mód engedélyezése induláskor" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Értesítés a letöltés megkezdésekor" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Hangjelzés a letöltés végén" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Nagy ikon" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Minden plug-in-ra vonatkozik." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Globális sebesség korlátozás" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Maximális feltöltési sebesség:" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Maximális letöltés sebesség:" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Az automatikus műveletek befejezése" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Egyedi parancs" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Hiba esetén egyedi parancs futtatása" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Automatikus mentés" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Intervallum:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "percek" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Parancssori beállítások" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Használd a '--csendes módot' alapértelmezetten" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Plug-in egyezÅ‘ségi sorrend:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 beépülÅ‘k beállításai" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC jogosultsági titkosító eszköz" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Globális letöltési sebesség korlátozás csak az aria2-nek" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Aria2 futtatása indításkor" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Aria2 leállítása kilépéskor" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Futtasd az aria2 a helyi meghajtón" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Útvonal" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Paraméterek" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Az uGet újraindítása szükséges a módosítások érvényesítéséhez." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "EgyezÅ‘ feltételek" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "MinÅ‘ség:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Típus:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Fájl" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Mappa" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Elem" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Érték" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Összes _másolás" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Mutasd az ablakot" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Kapcsolat nélküli mód" uget-2.2.3/po/ka_GE.po0000664000175000017500000014203113602733704011337 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Giorgi Maghlakelidze , 2013 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/uget/uget/language/ka_GE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ka_GE\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "დáƒáƒ™áƒáƒ•შირებáƒ..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "გáƒáƒ“áƒáƒªáƒ”მáƒ..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "ხელáƒáƒ®áƒšáƒ" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვრდáƒáƒ¡áƒ áƒ£áƒšáƒ”ბულიáƒ" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბული" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "გáƒáƒ’რძელებáƒáƒ“ი" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "გáƒáƒ£áƒ’რძელებáƒáƒ“ი" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "გáƒáƒ›áƒáƒ›áƒáƒ•áƒáƒšáƒ˜ ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ“áƒáƒ áƒ¥áƒ›áƒ”ვრშეუძლებელიáƒ." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "ჰáƒáƒ¡áƒ¢áƒ—áƒáƒœ კáƒáƒ•შირი ვერ დáƒáƒ›áƒ§áƒáƒ áƒ“áƒ." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ის შექმნრშეუძლებელიáƒ." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ შექმნრშეუძლებელირ(ფáƒáƒ˜áƒšáƒ˜áƒ¡ დáƒáƒ£áƒ¨áƒ•ებელი სáƒáƒ®áƒ”ლი áƒáƒ¥áƒ•ს, áƒáƒœ ის უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ შეუძლებელიáƒ." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "რესურსი áƒáƒ›áƒáƒ˜áƒ¬áƒ£áƒ áƒ (დისკი გáƒáƒ•სებული áƒáƒ áƒ˜áƒ¡, áƒáƒœ მეხსიერებრáƒáƒ áƒáƒ¡áƒáƒ™áƒ›áƒáƒ áƒ˜áƒ¡áƒ˜áƒ)" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "გáƒáƒ›áƒáƒ›áƒáƒ•áƒáƒšáƒ˜ ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ áƒ”შე." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "გáƒáƒ›áƒáƒ›áƒáƒ•áƒáƒšáƒ˜ პáƒáƒ áƒáƒ›áƒ”ტრის გáƒáƒ áƒ”შე." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "მეტისმეტáƒáƒ“ ბევრი ხელáƒáƒ®áƒáƒšáƒ˜ ცდáƒ." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "მხáƒáƒ áƒ“áƒáƒ£áƒ­áƒ”რელი სქემრ(პრáƒáƒ¢áƒáƒ™áƒáƒšáƒ˜)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "მხáƒáƒ áƒ“áƒáƒ£áƒ­áƒ”რელი ფáƒáƒ˜áƒšáƒ˜." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "მეტისმეტáƒáƒ“ ბევრი გáƒáƒ“áƒáƒ›áƒ˜áƒ¡áƒáƒ›áƒáƒ áƒ—ებáƒ." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვების მმáƒáƒ áƒ—ველი" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Giorgi Maghlakelidze " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "დáƒáƒ•áƒáƒšáƒ”ბები" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "áƒáƒ®áƒáƒšáƒ˜áƒ¡ შექმნრბუფერიდáƒáƒœ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "áƒáƒ®áƒáƒšáƒ˜ ჩáƒáƒ›áƒáƒ¢áƒ•ირთვáƒ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "ბუფერი" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "ბრძáƒáƒœáƒ”ბის ველი" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვრიწყებáƒ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვების რიგის დáƒáƒ¬áƒ§áƒ”ბáƒ." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვრდáƒáƒ¡áƒ áƒ£áƒšáƒ”ბულიáƒ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "რიგში მდგáƒáƒ›áƒ˜ ყველრჩáƒáƒ›áƒáƒ¢áƒ•ირთვრდáƒáƒ¡áƒ áƒ£áƒšáƒ”ბულიáƒ." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘áƒ" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "áƒáƒ®áƒáƒšáƒ˜ ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის შექმნáƒ" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "áƒáƒ®áƒáƒšáƒ˜ _ჩáƒáƒ›áƒáƒ¢áƒ•ირთვáƒ..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "áƒáƒ®áƒáƒšáƒ˜ _კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "áƒáƒ®áƒáƒšáƒ˜ ჯგუფი _ბუფერიდáƒáƒœ..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "áƒáƒ®áƒáƒšáƒ˜ _URL-თრმიმდევრáƒáƒ‘áƒ..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "áƒáƒ®áƒáƒšáƒ˜ ტáƒáƒ áƒ”ნტი..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "áƒáƒ®áƒáƒšáƒ˜ მეტáƒáƒ‘მული..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "áƒáƒ áƒ©áƒ”ული ჩáƒáƒ›áƒáƒ¢áƒ•ირთვრგáƒáƒ¨áƒ•ებáƒáƒ“იáƒ" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "áƒáƒ áƒ©áƒ”ული ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის შეჩერებáƒ" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "áƒáƒ áƒ©áƒ”ული ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის თვისებები" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "áƒáƒ áƒ©áƒ”ული ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის ზემáƒáƒ— წáƒáƒ¬áƒ”ვáƒ" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "áƒáƒ áƒ©áƒ”ული ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის ქვემáƒáƒ— წáƒáƒ¬áƒ”ვáƒ" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "áƒáƒ áƒ©áƒ”ული ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის თáƒáƒ•ში გáƒáƒ“áƒáƒ¢áƒáƒœáƒ" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "áƒáƒ áƒ©áƒ”ული ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის ძირში გáƒáƒ“áƒáƒ¢áƒáƒœáƒ" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "áƒáƒ®áƒáƒšáƒ˜ კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "áƒáƒ¡áƒšáƒ˜ - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ˜áƒ¡ თვისებები" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის თვისებები" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "áƒáƒ®áƒáƒšáƒ˜ ტáƒáƒ áƒ”ნტი" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "áƒáƒ®áƒáƒšáƒ˜ მეტáƒáƒ‘მული" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "ტáƒáƒ áƒ”ნტ ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "მეტáƒáƒ‘მულიáƒáƒœáƒ˜ ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "ბმული " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბრ" #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "ტექსტური ფáƒáƒ˜áƒšáƒ˜" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "URL ბმულების შემáƒáƒ¢áƒáƒœáƒ HTML ფáƒáƒ˜áƒšáƒ˜áƒ“áƒáƒœ" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "URL ბმულების შემáƒáƒ¢áƒáƒœáƒ ტექსტური ფáƒáƒ˜áƒšáƒ˜áƒ“áƒáƒœ" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL-თრმიმდევრáƒáƒ‘ის ჩáƒáƒ›áƒáƒ¢áƒ•ირთვáƒ" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "ბუფერში URL მისáƒáƒ›áƒáƒ áƒ—ები áƒáƒ  მáƒáƒ˜áƒ«áƒ”ბნáƒ." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "ჯგუფი ბუფერიდáƒáƒœ" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "შეცდáƒáƒ›áƒ" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "შეტყáƒáƒ‘ინებáƒ" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "áƒáƒ áƒ©áƒ”ულირ%d ელემენტი" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "ყურáƒáƒ“ღებáƒ, მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელáƒ:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "ჩვენ ვáƒáƒ¢áƒáƒ áƒ”ბთ სáƒáƒ¥áƒ•ელმáƒáƒ¥áƒ›áƒ”დრáƒáƒ¥áƒªáƒ˜áƒáƒ¡ uGet-ის მáƒáƒ›áƒáƒ•áƒáƒšáƒ˜ გáƒáƒœáƒ•ითáƒáƒ áƒ”ბისთვის, გვეწვიეთ" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "*áƒáƒ¥*" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "თუ áƒáƒ  შეწუხდებით, შეáƒáƒ•სეთ uGet-ის მáƒáƒ™áƒšáƒ” სáƒáƒ›áƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლრგáƒáƒ›áƒáƒ™áƒ˜áƒ—ხვáƒ." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "გáƒáƒ›áƒáƒ™áƒ˜áƒ—ხვისთვის დáƒáƒ¬áƒ™áƒáƒžáƒ”თ áƒáƒ¥ " #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ˜áƒ¡ _სáƒáƒ®áƒ”ლი:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "მáƒáƒ¥áƒ›áƒ”დი _ჩáƒáƒ›áƒáƒ¢áƒ•ირთვები:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბულის მáƒáƒªáƒ£áƒšáƒáƒ‘áƒ:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "გáƒáƒ“áƒáƒ§áƒ áƒ˜áƒšáƒ˜áƒ¡ მáƒáƒªáƒ£áƒšáƒáƒ‘áƒ:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "გáƒáƒ¡áƒ•ლრგსურთ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "დáƒáƒœáƒáƒ›áƒ“ვილებით გსურთ გáƒáƒ¡áƒ•ლáƒ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "ფáƒáƒ˜áƒšáƒ”ბის წáƒáƒ¨áƒšáƒ გსურთ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "დáƒáƒœáƒáƒ›áƒ“ვილებით გსურთ ფáƒáƒ˜áƒšáƒ”ბის წáƒáƒ¨áƒšáƒ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "სáƒáƒ áƒ™áƒ”ები:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "ფáƒáƒ˜áƒšáƒ˜: " #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ის áƒáƒ áƒ©áƒ”ვáƒ" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "გáƒáƒ“მáƒáƒ¡áƒ•ლის მისáƒáƒ›áƒáƒ áƒ—ი:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_გáƒáƒ¨áƒ•ებáƒáƒ“ი" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "შე_ჩერებáƒ" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "áƒáƒ•ტáƒáƒ áƒ˜áƒ–ებáƒ" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "სáƒáƒ®áƒ”ლი:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "პáƒáƒ áƒáƒšáƒ˜:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "ფუნთუშáƒáƒ¡ ფáƒáƒ˜áƒšáƒ˜:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "ფუნთუშáƒáƒ¡ ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ áƒ©áƒ”ვáƒ:" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "POST ფáƒáƒ˜áƒšáƒ˜:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "POST ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ áƒ©áƒ”ვáƒ:" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "სáƒáƒ›áƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლრáƒáƒ’ენტი:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "ცდების _ზღვáƒáƒ áƒ˜:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "ცდáƒ" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "ცდების დáƒ_ყáƒáƒ•ნებáƒ:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "წáƒáƒ›áƒ˜" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "áƒáƒ¢áƒ•ირთვის სიჩქáƒáƒ áƒ” áƒáƒ áƒáƒ£áƒ›áƒ”ტეს:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "კიბ/წმ" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის სიჩქáƒáƒ áƒ” áƒáƒ áƒáƒ£áƒ›áƒ”ტეს:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "თáƒáƒ áƒ˜áƒ¦áƒ˜áƒ¡ ბეჭდის მიღებáƒ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_ფáƒáƒ˜áƒšáƒ˜" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_ჯგუფური ჩáƒáƒ›áƒáƒ¢áƒ•ირთვები" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "ჯგუფი ბუ_ფერიდáƒáƒœ..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL-თრმიმდევრáƒáƒ‘áƒ..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_ტექსტური ფáƒáƒ˜áƒšáƒ˜áƒ¡ შემáƒáƒ¢áƒáƒœáƒ (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML ფáƒáƒ˜áƒšáƒ˜áƒ¡ შემáƒáƒ¢áƒáƒœáƒ (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_ტექსტური ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ¢áƒáƒœáƒ (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "ბუფერის _მეთვáƒáƒšáƒ§áƒ£áƒ áƒ”" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "áƒáƒ®áƒšáƒáƒ®áƒáƒœáƒ¡ ჩáƒáƒ›áƒáƒ¢áƒ•ირთულის პáƒáƒ áƒáƒ›áƒ”ტრების გáƒáƒ›áƒáƒ§áƒ”ნებáƒ" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_დáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_მáƒáƒ›áƒáƒ áƒ—ვáƒ..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_ხედი" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_ხელსáƒáƒ¬áƒ§áƒáƒ—რზáƒáƒšáƒ˜" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘ის ზáƒáƒšáƒ˜" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_შეჯáƒáƒ›áƒ”ბáƒ" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "შეჯáƒáƒ›áƒ”ბული _ელემენტები" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_სáƒáƒ®áƒ”ლი" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_შეტყáƒáƒ‘ინებáƒ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის _სვეტები" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბული" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_ზáƒáƒ›áƒ" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_პრáƒáƒªáƒ”ნტი '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_გáƒáƒ¡áƒ£áƒšáƒ˜ დრáƒ" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_დáƒáƒ áƒ©áƒ”ნილი დრáƒ" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "სიჩქáƒáƒ áƒ”" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "áƒáƒ¢áƒ•ირთვის სიჩქáƒáƒ áƒ”" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "áƒáƒ—ვირთულის ზáƒáƒ›áƒ" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "შეფáƒáƒ áƒ“ებáƒ" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_ხელáƒáƒ®áƒšáƒ" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "დáƒáƒ›áƒáƒ¢áƒ”ბის თáƒáƒ áƒ˜áƒ¦áƒ˜" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბის თáƒáƒ áƒ˜áƒ¦áƒ˜" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_áƒáƒ®áƒáƒšáƒ˜ კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ˜áƒ¡ _წáƒáƒ¨áƒšáƒ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_ჩáƒáƒ›áƒáƒ¢áƒ•ირთვáƒ" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "ძáƒáƒšáƒ“áƒáƒ¢áƒáƒœáƒ˜áƒ—ი დáƒáƒ¬áƒ§áƒ”ბáƒ" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_გáƒáƒ“áƒáƒ¢áƒáƒœáƒ" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "დáƒáƒ®áƒ›áƒáƒ áƒ”ბის მáƒáƒ«áƒ˜áƒ”ბრინტერნეტში" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "დáƒáƒ›áƒ®áƒ›áƒáƒ áƒ” მáƒáƒ¡áƒáƒšáƒ" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "მხáƒáƒ áƒ“áƒáƒ­áƒ”რის ფáƒáƒ áƒ£áƒ›áƒ˜" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "უკუკáƒáƒ•შირის გáƒáƒ’ზáƒáƒ•ნáƒ" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "შეცდáƒáƒ›áƒ˜áƒ¡ გáƒáƒ’ზáƒáƒ•ნáƒ" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "გáƒáƒœáƒáƒ®áƒšáƒ”ბის შემáƒáƒ¬áƒ›áƒ”ბáƒ" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "მáƒáƒ›áƒáƒ áƒ—ვáƒ" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "ვერ მáƒáƒ®áƒ”რხდრ'%s' ფáƒáƒ˜áƒšáƒ˜áƒ¡ ნáƒáƒ’ულისხმები პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "ზáƒáƒ’áƒáƒ“ი" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "გáƒáƒ¦áƒ áƒ›áƒáƒ•ებული" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ˜áƒ¡ მáƒáƒ›áƒáƒ áƒ—ვáƒ" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "ნáƒáƒ’ულისხმები áƒáƒ®áƒáƒšáƒ˜ ჩáƒáƒ›áƒáƒ¢áƒ•ირთვებისáƒáƒ—ვის 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "ნáƒáƒ’ულისხმები 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "უსáƒáƒ®áƒ”ლáƒ" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "გáƒáƒ“áƒáƒ§áƒ áƒ˜áƒšáƒ˜" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "რიგში" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "მáƒáƒ¥áƒ›áƒ”დი" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "სáƒáƒ®áƒ”ლი" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბული" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "ზáƒáƒ›áƒ" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "გáƒáƒ¡áƒ£áƒšáƒ˜" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "დáƒáƒ áƒ©áƒ”ნილი" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "áƒáƒ“ენáƒáƒ‘áƒ" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "პრáƒáƒ¥áƒ¡áƒ˜:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "áƒáƒ  გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნáƒ" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "ნáƒáƒ’ულისხმები" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "ჰáƒáƒ¡áƒ¢áƒ˜:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "პáƒáƒ áƒ¢áƒ˜:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "სáƒáƒ™áƒ”ტი:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "სáƒáƒ™áƒ”ტის áƒáƒ áƒ’-ბი:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "ელემენტ:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "áƒáƒ áƒ¨" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "სáƒáƒ›" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "áƒáƒ—ხ" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "ხუთ" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "პáƒáƒ " #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "სáƒáƒ‘" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "კვი" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "გáƒáƒœáƒ áƒ˜áƒ’ის _გáƒáƒ›áƒáƒ§áƒ”ნებáƒ" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "გáƒáƒ—იშვáƒ" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- ყველრდáƒáƒ•áƒáƒšáƒ”ბის გáƒáƒ©áƒ”რებáƒ" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "ჩვეულებრივი" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- დáƒáƒ•áƒáƒšáƒ”ბების ჩვეულებრივáƒáƒ“ შესრულებáƒ" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "ყველáƒ" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "áƒáƒ áƒáƒ¤áƒ”რი" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნრფილტრის მიხედვით" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "URL ბმულების მáƒáƒœáƒ˜áƒ¨áƒ•ნრჰáƒáƒ¡áƒ¢áƒ˜áƒ¡áƒ დრგáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბის მიხედვით." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "ეს ჩáƒáƒ›áƒáƒ§áƒ áƒ˜áƒ¡ URL ბმულების მáƒáƒœáƒ˜áƒ¨áƒ•ნáƒáƒ¡." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "ჰáƒáƒ¡áƒ¢áƒ˜" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბáƒ" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "ძირეული ჰიპერტექსტული მიმáƒáƒ áƒ—ვáƒ" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "_ყველáƒáƒ¡ მáƒáƒœáƒ˜áƒ¨áƒ•ნáƒ" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "_áƒáƒ áƒáƒ¤áƒ áƒ˜áƒ¡ მáƒáƒœáƒ˜áƒ¨áƒ•ნáƒ" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_მáƒáƒœáƒ˜áƒ¨áƒ•ნრფილტრით..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "მáƒáƒ’." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_გáƒáƒ›áƒáƒ›áƒ’ზáƒáƒ•ნი:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "მიმღები:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "ციფრები:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "გáƒáƒ›áƒ_მგზáƒáƒ•ნი:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "რეგისტრის მიმáƒáƒ áƒ— მგძნáƒáƒ‘იáƒáƒ áƒ”" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "URL ბმულში áƒáƒ  მáƒáƒ˜áƒ«áƒ”ბნებრ'*' ნიშáƒáƒœáƒ˜." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL ბმული უმáƒáƒ áƒ—ებულáƒáƒ." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "რáƒáƒ›áƒ”ლიმე ველი, 'გáƒáƒ›áƒáƒ›áƒ’ზáƒáƒ•ნი' áƒáƒœ 'მიმღები', ცáƒáƒ áƒ˜áƒ”ლიáƒ." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "გáƒáƒ“áƒáƒ®áƒ”დვáƒ" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "გáƒáƒœáƒ áƒ˜áƒ’ი" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "დáƒáƒœáƒáƒ›áƒáƒ¢áƒ˜" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "სხვáƒ" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_ჩუმი რეჟიმი" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "სáƒáƒ®áƒ”áƒáƒ‘áƒáƒ—რგáƒáƒ§áƒáƒ¤áƒ˜áƒ¡áƒ—ვის გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ სიმბáƒáƒšáƒ '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "áƒáƒ¡áƒ”ვე შეგიძლიáƒáƒ— გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნáƒáƒ— რეგულáƒáƒ áƒ£áƒšáƒ˜ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბები." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "დáƒáƒ“áƒáƒ¡áƒ¢áƒ£áƒ áƒ”ბრფáƒáƒ˜áƒšáƒ”ბის წáƒáƒ¨áƒšáƒ˜áƒ¡áƒáƒ¡" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "სისტემურ áƒáƒ áƒ”ში ხáƒáƒ¢áƒ£áƒšáƒ˜áƒ¡ ყáƒáƒ•ელთვის ჩვენებáƒ" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "ჩáƒáƒ áƒ—ვისáƒáƒ¡ ჩáƒáƒ™áƒ”ცვრსისტემურ áƒáƒ áƒ”ში" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "ჩáƒáƒ áƒ—ვისáƒáƒ¡ ხáƒáƒ–გáƒáƒ áƒ” რეჟიმის áƒáƒ›áƒáƒ¥áƒ›áƒ”დებáƒ" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვის დáƒáƒ¬áƒ§áƒ”ბის შეტყáƒáƒ‘ინებáƒ" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "ხმრჩáƒáƒ›áƒáƒ¢áƒ•ირთვის დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბისáƒáƒ¡" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_შუáƒáƒšáƒ”დი:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "წუთი" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "ბრძáƒáƒœáƒ”ბáƒáƒ—რსტრიქáƒáƒœáƒ˜áƒ¡ მáƒáƒ›áƒáƒ áƒ—ვáƒ" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "ნáƒáƒ’ულისხმებáƒáƒ“ '--quiet' áƒáƒ áƒ’უმენტის გáƒáƒ›áƒáƒ§áƒ”ნებáƒ" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_ჩáƒáƒ áƒ—ვისáƒáƒ¡ aria2-ის გáƒáƒ¨áƒ•ებáƒ" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_გáƒáƒ—იშვისáƒáƒ¡ aria2-ის გáƒáƒ—იშვáƒ" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "გზáƒ" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "áƒáƒ áƒ’უმენტები" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "ფáƒáƒ˜áƒšáƒ˜" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "ელემენტი" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "სიდიდე" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "ყველáƒáƒ¡ _áƒáƒ¡áƒšáƒ˜" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "ფáƒáƒœáƒ¯áƒ áƒ˜áƒ¡ ჩვენებáƒ" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_ხáƒáƒ–გáƒáƒ áƒ” რეჟიმი" uget-2.2.3/po/POTFILES.in0000664000175000017500000000121113602733704011600 00000000000000uget/pwmd.c uget/UgetApp.c uget/UgetEvent.c uget/UgetMedia-youtube.c uget/UgetPluginAria2.c uget/UgetPluginMedia.c uget/UgetPluginMega.c ui-gtk/UgtkAboutDialog.c ui-gtk/UgtkApp-main.c ui-gtk/UgtkApp-timeout.c ui-gtk/UgtkApp-ui.c ui-gtk/UgtkApp.c ui-gtk/UgtkBanner.c ui-gtk/UgtkBatchDialog.c ui-gtk/UgtkCategoryForm.c ui-gtk/UgtkConfirmDialog.c ui-gtk/UgtkDownloadForm.c ui-gtk/UgtkMenubar-ui.c ui-gtk/UgtkMenubar.c ui-gtk/UgtkNodeDialog.c ui-gtk/UgtkNodeView.c ui-gtk/UgtkProxyForm.c ui-gtk/UgtkScheduleForm.c ui-gtk/UgtkSelector.c ui-gtk/UgtkSequence.c ui-gtk/UgtkSettingDialog.c ui-gtk/UgtkSettingForm.c ui-gtk/UgtkSummary.c ui-gtk/UgtkTrayIcon.c uget-2.2.3/po/be.po0000664000175000017500000014073613602733704010771 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Mihail Varantsou , 2011 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Belarusian (http://www.transifex.com/uget/uget/language/be/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: be\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "УÑе катÑгорыі" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "ЗлучÑнне..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Перадача..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Спробы" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "СцÑгванне Ñкончана" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "СцÑгнутыÑ" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Можна дацÑгнуць пазней" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Без дацÑгваннÑ" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Ðемагчыма пераназваць выходны файл." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "немагчыма падлучыцца да хоÑта." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Ðемагчыма Ñтварыць каталог." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Ðемагчыма Ñтварыць файл (Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ Ð½Ð°Ð·Ð²Ð° файла або файл Ñ–Ñнуе)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Ðемагчыма адкрыць файл." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Ðе выйшла Ñтварыць трÑд." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "ÐŸÐ°Ð¼Ñ‹Ð»ÐºÐ¾Ð²Ð°Ñ ÐºÑ€Ñ‹Ð½Ñ–Ñ†Ð° (адрозны памер файла)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Ðе Ñтае Ñ€ÑÑурÑаў (дыÑк перапоўнены або недаÑтаткова памÑці)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "ÐÑма выходнага файла." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "ÐÑма выходных наÑтáўленнÑÑž." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Занадта шмат Ñпробаў." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Схема (пратакол) не падтрымліваецца." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Файл не падтрымліваецца." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "ÐÑма Ñ€ÑÑурÑаў" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Занадта шмат перанакіраваннÑÑž." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "ÐÑма адказу. Можа, aria2 адключанаÑ?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Кіраўнік ÑцÑгваннÑÑž" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "МіхаÑÑŒ Варанцоў " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "ЗаÑнавальнік uGet: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Кіраўнік праекту uGet: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "заданні" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Ðовае з буферу абмену" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Ðовае ÑцÑгванне" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Буфер абмену" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Загадны радок" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Узнікла памылка" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "ÐŸÐ°Ð´Ñ‡Ð°Ñ ÑцÑÐ³Ð²Ð°Ð½Ð½Ñ ÑžÐ·Ð½Ñ–ÐºÐ»Ð° памылка." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "ПачалоÑÑ ÑцÑгванне" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "ПачалоÑÑ ÑцÑгванне па чарзе." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "СцÑгванне Ñкончана" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "УÑÑ Ñ‡Ð°Ñ€Ð³Ð° ÑцÑгваннÑÑž Ñкончана." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Стан" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "КатÑгорыі" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Стварыць новае ÑцÑгванне" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Ðовае _ÑцÑгванне..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "ÐÐ¾Ð²Ð°Ñ ÐºÐ°Ñ‚ÑгорыÑ..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Ðовае _з буферу абмену..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Ðовае пакетнае ÑцÑгванне..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Ðовы торÑнт..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "ÐÐ¾Ð²Ð°Ñ Ð¼ÐµÑ‚Ð°-ÑпаÑылка..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Захаваць уÑе наÑтáўленні" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "ЗапуÑціць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÑцÑгванні" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Прыпыніць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÑцÑгванні" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "ÐаÑтавіць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÑцÑгванні" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "ПаÑунуць вылучанае вышÑй" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "ПаÑунуць вылучанае ніжÑй" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "ПаÑунуць вылучанае дагары" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "ПаÑунуць вылучанае дадолу" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "ÐÐ¾Ð²Ð°Ñ ÐºÐ°Ñ‚ÑгорыÑ" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "СкапіÑваць - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "УлаÑціваÑці катÑгорыі" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "УлаÑціваÑці ÑцÑгваннÑ" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Ðовы торÑнт" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "ÐÐ¾Ð²Ð°Ñ Ð¼ÐµÑ‚Ð°-ÑпаÑылка" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Ðдкрыць Torrent-файл" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Ðдкрыць файл мета-ÑпаÑылкі" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Ðе выйшла захаваць файл катÑгорыі." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Ðе выйшла прачытаць файл катÑгорыі." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Захаваць файл катÑгорыі" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Ðдкрыць файл катÑгорыі" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "СпаÑылка " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Ð’Ñ‹Ñва " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "ТÑкÑтавы файл" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Імпартаваць URL'Ñ‹ з HTML-файла" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Імпартаваць URL'Ñ‹ з Ñ‚ÑкÑтавага файла" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "ЭкÑпартаваць URL'Ñ‹ у Ñ‚ÑкÑтавы файл" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Пакетнае ÑцÑгванне" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Ðе знойдзена URL'аў у буферы абмену." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "УÑе URL'Ñ‹ ўжо Ñ–Ñнавалі." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "ÐаÑтáўленні _буферу абмену" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Ðовы" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Памылка" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Стан" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Ðбрана %d Ñлементаў" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "КарыÑтальнікі uGet, увага:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "мы запуÑцілі Donation Drive Ð´Ð»Ñ Ð´Ð°Ð»ÐµÐ¹ÑˆÐ°Ð¹ раÑпрацоўкі uGet. Калі лаÑка, пÑтрыкніце " #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ТУТ" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "калі лаÑка, прайдзіце хуткае апытанне карыÑтальнікаў Uget." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "пÑтрыкніце тут, каб прайÑці апытанне" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Ðазва катÑгорыі:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Дзейных ÑцÑгваннÑÑž, не болей за:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "ПамÑтаць Ñкончаных ÑцÑгваннÑÑž, не болей за:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "ПамÑтаць выдаленых ÑцÑгваннÑÑž, не болей за:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Умовы раÑÐ¿Ð°Ð·Ð½Ð°Ð½Ð½Ñ URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "РаÑпазнаваць _хоÑты:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "РаÑпазнаваць _Ñхемы:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "РаÑпазнаваць _тыпы:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Сапраўды выйÑці?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Ð’Ñ‹ Ñапраўды хочаце выйÑці?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Сапраўды выдаліць файлы?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Ð’Ñ‹ Ñапраўды хочаце выдаліць файлы?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Сапраўды выдаліць катÑгорыю?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Ð’Ñ‹ Ñапраўды хочаце выдаліць катÑгорыю?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Болей не пытацца" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "ЛюÑÑ‚Ñркі:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Файл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Пазначыць каталог" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Каталог:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Крыніца пераходу:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_МакÑімум злучÑннÑÑž:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_ЗапуÑціць" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "П_рыпыніць" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Уваход" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "КарыÑтальнік:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Пароль:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Файл кукі:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Пазначыць файл кукі" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Файл Ð´Ð»Ñ Ð´Ð°ÑыланнÑ:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Пазначыць файл, што трÑба даÑлаць" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "User Agent:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "КолькаÑць паўтораў:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "разоў" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Затрымка паўтора:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "Ñекунд" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "ÐÐ°Ð¹Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ…ÑƒÑ‚ÐºÐ°Ñць зацÑгваннÑ:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "КіБ/Ñ" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "ÐÐ°Ð¹Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ…ÑƒÑ‚ÐºÐ°Ñць ÑцÑгваннÑ:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Ðтрымліваць чаÑавы адбітак" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Файл" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "ÐÐ¾Ð²Ð°Ñ ÑÐµÑ€Ñ‹Ñ ÑцÑгваннÑÑž" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_ÐаÑтáўленні буферу абмену..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_Пакетнае ÑцÑгванне..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Імпарт Ñ‚ÑкÑтавага файла (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Імпарт HTML-файла (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_ЭкÑпартаваць у Ñ‚ÑкÑтавы файл (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Ðдкрыць катÑгорыю..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Захаваць катÑгорыю Ñк..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Захаваць _уÑе наÑтáўленні" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Ðфлайн-Ñ€Ñжым" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_ЗмÑніць" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Сачыць за _буферам абмену" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Буфер абмену Ñž аўтаматычным Ñ€Ñжыме" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Загадны радок у аўтаматычным Ñ€Ñжыме" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "ПропуÑк Ñ–Ñнага URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Ужываць наÑтáўленні апошнÑга ÑцÑгваннÑ" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "ДзеÑнні па ÑканчÑнні" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Ðдключыць" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "ЗаÑнуць" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Прыпыніць" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Ðдключыць" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "ПераÑтартаваць" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Сваё" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Запомніць наÑтáўленне" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Даведка" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_ÐаÑтáўленні..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_ВыглÑд" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "Паліца _начыннÑ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Радок Ñтану" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_ПадрабÑзнаÑці" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Паказваць у _падрабÑзнаÑцÑÑ…" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Ðазва" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Каталог" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Стан" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Слупкі _ÑпіÑу ÑцÑгваннÑÑž" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Колькі ÑцÑгнута" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Памер" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Рух (у %)" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Мінула чаÑу" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_ЗаÑталоÑÑ Ñ‡Ð°Ñу" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "ХуткаÑць ÑцÑгваннÑ" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "ХуткаÑць раздачы" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Раздадзена" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "СтаÑунак" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_ÐŸÐ°ÑžÑ‚Ð¾Ñ€Ð½Ñ‹Ñ Ñпробы" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Калі дададзена" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Калі Ñкончана" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_КатÑгорыÑ" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_ÐÐ¾Ð²Ð°Ñ ÐºÐ°Ñ‚ÑгорыÑ..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Выдаліць катÑгорыю" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_СцÑгванне" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Выдаліць Ñлемент" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Выдаліць Ñлемент Ñ– _файл" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Ðдкрыць _змÑшчальны каталог" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Хуткі Ñтарт" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_ПеранеÑці Ñž катÑгорыю" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "ПрыÑрытÑÑ‚" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Ð’Ñ‹Ñокі" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Ðармальны" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Ðізкі" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Ðнлайн-даведка" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "ДакументацыÑ" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Форум падтрымкі" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "ДаÑлаць водгук" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Паведаміць пра хібу" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "КлавіÑÑ‚ÑƒÑ€Ð½Ñ‹Ñ Ñкароты" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Праверыць на абнаўленні" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "ÐаÑтáўленні" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Ðемагчыма запуÑціць Ñтандартную праграму Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° '%s'" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - гÑты каталог не Ñ–Ñнуе." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI ужо Ñ–Ñнаваў" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "ГÑты URI ужо Ñ–Ñнаваў. Ð’Ñ‹ Ñапраўды жадаеце працÑгваць?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "ГалоўныÑ" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "ДадатковыÑ" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "ÐаÑтáўленні катÑгорыі" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ñ Ð½Ð°Ñтáўленні катÑгорыі" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ñ Ð½Ð°Ñтáўленні" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "безназоўны" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Прыпынена" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "ЗацÑгванне" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Скончана" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "ВыдаленыÑ" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "У чарзе" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "ДзейныÑ" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Ðгульны Ñтан" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Ðазва" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "СцÑгнута" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Памер" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "Рух, %" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Мінула" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "ЗаÑталоÑÑ" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "КолькаÑць" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "ПрокÑÑ–:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ðе выкарыÑтоўваць" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Стандартна" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "ХоÑÑ‚:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Порт:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Сокет:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Ðргументы Ñокета:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Элемент:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Пнд" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Ðўт" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Срд" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Чцв" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Птн" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Сбт" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Ðдз" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Праца паводле раÑкладу" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Спыніць" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- Ñпыніць уÑе заданні" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "ЗапуÑціць" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- запуÑціць заданні Ñк звычайна" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "УÑе" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Ðічога" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Вылучыць паводле фільтру" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Вылучыць URL'Ñ‹ паводле хоÑта І ТÐКСÐМРтыпу файла." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "ГÑта Ñкіне ÑžÑе вылучÑнні URL'аў." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "ХоÑÑ‚" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Тып файла." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Ð‘Ð°Ð·Ð°Ð²Ð°Ñ Ð³Ñ–Ð¿ÐµÑ€Ñ‚ÑкÑÑ‚Ð°Ð²Ð°Ñ ÑпаÑылка" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Вылучыць _уÑÑ‘" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "ЗнÑць _уÑе вылучÑнні" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Вылучыць паводле фільтру..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "напрыклад" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_З:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "_Па:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "лічбаў:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_З:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "зважаць на Ñ€ÑгіÑтр" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "ÐÑма знака падÑтановы(*) у полі URL." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL нÑдзейÑны." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "У палÑÑ… 'З' ці 'Па' нічога нÑма." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "ПерадпраглÑд" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "ІнтÑрфÑÐ¹Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "ПрапуÑÐºÐ½Ð°Ñ Ð·Ð´Ð¾Ð»ÑŒÐ½Ð°Ñць" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Планавальнік" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Убудовы" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Іншае" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Уключыць назіральнік буферу абмену" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Ðўтаматычны Ñ€Ñжым" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Стандартны індÑÐºÑ ÐºÐ°Ñ‚Ñгорыі" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Даданне да N-ай катÑгорыі, калі катÑÐ³Ð¾Ñ€Ñ‹Ñ Ð½Ðµ раÑпазнана." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Сачыць за буферам абмену на прадмет дадзеных тыпаў файлаў:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Тыпы размÑжоўваюцца знакам '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "ДазвалÑюцца Ñ€ÑгулÑÑ€Ð½Ñ‹Ñ Ð²Ñ‹Ñ€Ð°Ð·Ñ‹." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Пацверджанне" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Паказваць вакенца Ð¿Ð°Ñ†Ð²ÐµÑ€Ð´Ð¶Ð°Ð½Ð½Ñ Ð¿Ñ€Ñ‹ закрыцці" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Пацверджанне Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°Ñž" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "СіÑÑ‚Ñмны трÑй" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "ЗаўÑёды паказваць значок у трÑÑ–" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Згарнуць у трÑй на пачатку" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Згортвацца Ñž трÑй пры закрыцці вакна" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "ВыкарыÑтоўваць індыкатар праграм Ubuntu" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "УвайÑці Ñž афлайн-Ñ€Ñжым на пачатку" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "ÐбвÑшчÑнне пра пачатак ÑцÑгваннÑ" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Гук, калі ÑцÑгванне Ñкончана" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "ГÑта паўплывае на ÑžÑе ўбудовы." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Глабальнае абмежаванне хуткаÑці" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "ÐÐ°Ð¹Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ…ÑƒÑ‚ÐºÐ°Ñць зацÑгваннÑ" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "ÐÐ°Ð¹Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ…ÑƒÑ‚ÐºÐ°Ñць ÑцÑгваннÑ" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "ДзеÑнні па ÑканчÑнні" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Свой загад:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Свой загад на выпадак ÑƒÐ·Ð½Ñ–ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÑ–:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Ðўтазахаванне" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Прамежак чаÑу:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "хвілін" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Загадны радок" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "ВыкарыÑтоўваць '--quiet' Ñтандартна" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Парадак раÑÐ¿Ð°Ð·Ð½Ð°Ð½Ð½Ñ ÑƒÐ±ÑƒÐ´Ð¾Ñž:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Параметры убудовы aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "СакрÑтны токен RPC-аўтарызацыі" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Глабальнае абмежаванне хуткаÑці выключна Ð´Ð»Ñ aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_ЗапуÑкаць aria2 на пачатку" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_СпынÑць aria2 пры закрыцці" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "ЗапуÑкаць aria2 на лакальнай прыладзе" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "ШлÑÑ…" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Ðргументы" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "ТрÑба перазапуÑціць uGet паÑÐ»Ñ Ð·Ð¼ÑненнÑ." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Файл" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Каталог" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Элемент" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "ЗначÑнне" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "КапіÑваць _уÑÑ‘" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Паказаць вакно" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Ðфлайн-Ñ€Ñжым" uget-2.2.3/po/sr.po0000664000175000017500000014537013602733704011026 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # markosm , 2016 # markosm , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: markosm \n" "Language-Team: Serbian (http://www.transifex.com/uget/uget/language/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Менаџер лозинки: uget\n\nТоком покушаја SSH повезивања за %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n\nДа ли би желели да ову конекцију третирате као поуздана за Ñада и будућа повезивања додавањем %s's кључа од познатог домаћина?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Све категорије" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Повезивање..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Шаљем..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Покушај поново" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Преузимање завршено" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Завршено" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Обновљиво" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Ðије обновљиво" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Излазни фајл не може бити преименован." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "немогуће повезивање Ñа рачунаром." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "ФаÑцикла не може бити креирана." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Фајл не може бити креиран (погрешно име или фајл већ поÑтоји)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Фајл Ñе не може отворити" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Ðије могуће Ñтворити нит." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "ÐеиÑправан извор (различита величина фајла)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Премало реÑурÑа (диÑк је пун или нема довољно меморије)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Ðема излазног фајла." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Ðема излазне поÑтавке." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Превише поновних покушаја." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Ðеподржана шема (протокол)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Ðеподржан фајл." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "фајл поÑта није пронађен." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "фајл колачића није пронађен." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Овај видео је уклоњен." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Грешка код прибављања информација о видеу." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Грешка код прибављања Ñтранице Ñа видеом." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "Ðије пронађен video_id на YouTube адреÑи." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: догодила Ñе непозната грешка." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: временÑка пауза." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: реÑурÑи ниÑу пронађени." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 пријављује одређени број 'resource not found' грешки. Погледај --max-file-not-found опцију" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: брзина је врло Ñпора." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: догодио Ñе проблем Ñа мрежом." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: незавршена преузимања." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Ван реÑурÑа" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: дужина комада је различита од оне у .aria2 контролном фајлу." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 је преузела иÑти фајл." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 је преузела иÑти торент инфо." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: фајл већ поÑтоји. Погледај --allow-overwrite опцију." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: не могу отворити поÑтојећи фајл." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: не могу креирати нови фајл или Ñкратити поÑтојећи." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: догодила Ñе I/O грешка." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: неуÑпело именовање резолуције." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: није могуће анализирати Металинк документ." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: ФТП команда није уÑпела." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP одговор је лош или неочекива." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Превише преуÑмеравања." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP ауторизација није уÑпела." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: не могу анализирати фајл (обично .torrent фајл)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: торент фајл је оштећен или недоÑтају информације." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Магнет URI је био лош." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: дата је лоша/непозната опција." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: удаљени Ñервер није могао да обради захтев." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: није могуће анализирати JSON-RPC захтев." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Без одговора. Да ли је aria2 угашен?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: гид је уклоњен." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "ÐеуÑпело добављање медијÑког линка." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Без подударних медија." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Менаџер преузимања" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "заÑлуге преводилаца" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet оÑнивач:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet менаџер пројекта: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "задаци" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Ðово из клипборда" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Ðово преузимање" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Клипборд" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Командна линија" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Догодила Ñе грешка" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Догодила Ñе грешка код преузимања." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Преузимање започиње" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Покретање преузимања на чекању" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Преузимање завршено" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Сва преузимања Ñа попиÑа чекања Ñу завршена." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Стање" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Категорија" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Креирај ново преузимање" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Ðово _преузимање..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Ðова _категорија..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Ðово из _клипборда..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Ðови _URL редоÑлед линкова..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Ðови торент..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Ðови мета-линк..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Сачувај Ñва подешавања" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Покрени одабрано преузимање" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Паузирај одабрано преузимање" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "ПодеÑи ÑвојÑтва одабраног преузимања" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Помери одабрано преузимање горе" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Помери одабрано преузимање доле" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Помери одабрано преузимање на врх" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Помери одабрано преузимање на дно" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Ðова категорија" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Копирај - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "СвојÑтва категорије" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "СвојÑтва преузимања" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Ðови торент" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Ðови мета-линк" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Отвори торент фајл" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Торент фајл (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Отвори мета-линк фајл" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "ÐеуÑпело чување фајла категорије" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "ÐеуÑпело учитавање категорије фајла." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Сачувај фајл категорије" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Отвори фајл категорије" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON фајл (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Линк " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Слика " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "ТекÑтуални фајл" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Увези URL-ове из HTML фајла" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML фајл (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Увези URL-ове из текÑтуалног фајла" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "ЧиÑÑ‚ текÑтуални фајл" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Извези УРЛ у текÑтуални фајл" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL РедоÑлед линкова" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Без URL-а пронађених у клипборду." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Све УРЛ адреÑе Ñу поÑтојеће." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Из клипборда" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Ðово" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Грешка" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Порука" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Одабрано %d Ñтавки" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Пажња uGetters:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "покренули Ñмо прикупљање донација за будући развој uGet-а, молим кликните " #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ОВДЕ" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "молимо попуните ову кратку кориÑничку анкету за uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "кликните овде за почетак анкете" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Име _категорије:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Ðктивна _преузимања:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Капацитет завршеног:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Капацитет обриÑаног:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "УРИ подударајући уÑлови" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Подударени _хоÑтови:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Подударене _шеме:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Подударени _режими:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Стварно желите изаћи?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Да ли Ñте Ñигурни да желите изаћи?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Стварно желите обриÑати фајлове?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Да ли Ñте Ñигурни да желите обриÑати фајлове?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Стварно желите обриÑати категорију?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Да ли Ñте Ñигурни да желите обриÑати категорију?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Ðе питај ме поново" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Сервери:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Фајл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Одабери фаÑциклу:" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_ФаÑцикла:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Извор транзиције:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_ÐœÐ°ÐºÑ ÐºÐ¾Ð½ÐµÐºÑ†Ð¸Ñ˜Ð°:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Покрени" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "П_ауза" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Пријава" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "КориÑник:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Лозинка:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Фајл колачића:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Одабери фајл колачића" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "ПоштанÑки фајл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Одабери поштанÑки фајл" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "КориÑнички заÑтупник" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Ограничење _покушаја:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "покушаја" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Одгађање _покушаја:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "Ñекунди" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "МакÑимална брзина отпремања:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "МакÑимална брзина преузимања:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Прихвати временÑке ознаке" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Фајл" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Пакетна преузимања" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_Из клипборда..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL редоÑлед линкова..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Увоз текÑтуалног фајла (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_Увоз HTML фајла (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Извоз у текÑтуалном фајлу (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Отвори категорију..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Сачувај категорију као..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Сачувај _Ñва подешавања" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Режим ван мреже" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Уреди" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Клипборд _монитор" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Клипборд ради у позадини" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Командна линија ради у позадини" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "ПреÑкочи поÑтојећи URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Примени недавне поÑтавке преузимања" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "Завршене _ауто-акције" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Онемогући" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "УÑпавај" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "СуÑпендуј" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "ÐапуÑти" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Поново покрени" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Прилагођено" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Запамти подешавања" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Помоћ" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_ПоÑтавке..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Преглед" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Трака алата" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "СтатуÑна трака" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Сажетак" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Ставке _Ñажетка" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Име" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_ФаÑцикла" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Порука" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Колоне _преузимања" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Завршено" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Величина" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Проценат '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Прошло времена" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Лево" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Брзина" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Брзина отпреме" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Отпремљено" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "ОдноÑ" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Покушај поново" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Додато" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Завршено" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Категорија" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Ðова категорија..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Обриши категорију" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Преузимање" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Обриши Ñтавку" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Обриши Ñтавку и _фајл" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Отвори _Ñадржајну фаÑциклу" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "ПриÑили покретање" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_ПремеÑти у" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Приоритет" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_ВиÑок" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Ðормалан" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Ðизак" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Потражите помоћ на мрежи" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Документација" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Форум за подршку" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Пошаљите повратну информацију" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Пријавите грешке" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Пречице таÑтатуре" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Проверите ажурирања" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "ПоÑтавке" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Ðемогуће покретање подразумеване апликација за фајл '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Ова фаÑцикла не поÑтоји." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI поÑтоји" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Овај URI поÑтоји, да ли желите да наÑтавите?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Опште" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Ðапредно" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "ПоÑтавке категорије" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Подразумевано за ново преузимање 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Подразумевано 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "безимено" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Паузирано" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Отпремање" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Завршено" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "ОбриÑано" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Ðа чекању" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Ðктивно" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Сви ÑтатуÑи" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Име" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Завршено" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Величина" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Покренуто" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Завршено" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Количина" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "ПрокÑи:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ðе кориÑти" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Подразумевано" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Рачунар:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Порт:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Утичница:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Утичница args:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Елемент:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Пон" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Уто" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Сре" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Чет" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Пет" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Суб" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Ðед" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Омогући раÑпоред" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "ИÑкључи" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- зауÑтави Ñве задатке" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Ðормално" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- нормално покрени задатак" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Све" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Ðепознато" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Означи према филтеру" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Означи URL-ове према рачунару и врÑти фајла." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Ово ће реÑетовати Ñве означене URL-ове." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Рачунар" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Ð’Ñ€Ñта фајла" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "ОÑновна хипертекÑÑ‚ препорука" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Означи _Ñве" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Означи _ништа" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Означи према филтеру..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "нпр." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Од:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Ðа:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "бројеви:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "О_д:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "мала-велика Ñлова" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Без заменÑких(*) карактера у URL уноÑу." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL није иÑправан." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Ðема знакова у 'Од' или 'Ðа' уноÑу." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Преглед" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "КориÑничко Ñучеље" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Проток" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "РаÑпоред" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Додатак" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "МедијÑки Ñајт" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "ОÑтало" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Омогући клипборд монитор" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Тихи режим" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Подразумевани Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ˜Ðµ" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Додавање у Nth категорију ако Ñе не подударају." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_Монитор УРЛ од медијÑког Ñајта" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Монитор клипборда за одређени тип фајла:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Раздвој врÑте фајлова Ñа знаком '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Можете кориÑтити уобичајене изразе овде." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Потврда" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Прикажи дијалог потврде на излаÑку" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Потврди при бриÑању фајлова" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "СиÑтемÑка каÑета" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Увек прикажи икону у ÑиÑтемÑкој каÑети" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Смањи у ÑиÑтемÑку каÑету по покретању" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "СпуÑти у ÑиÑтемÑку каÑету кад затвориш прозор" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "КориÑти Ubuntu индикатор" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Омогући на почетку режим ван мреже" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Обавештење о почетку преузимања" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Звук када Ñе заврши преузимање" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Прикажи већу икону" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Ово ће утицати на Ñве додатке." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Опште ограничење брзине" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "ÐœÐ°ÐºÑ Ð±Ñ€Ð·Ð¸Ð½Ð° отпремања" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "ÐœÐ°ÐºÑ Ð±Ñ€Ð·Ð¸Ð½Ð° преузимања" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Завршене ауто-акције" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Прилагођена команда:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Прилагођена команда ако Ñе догоди грешка:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_ÐутоматÑко чување" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Интервал:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "минута" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "ПоÑтавке командне линије" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "КориÑти '--quiet' као подразумевано" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Поредак повезивања:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 опције повезивања" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC тајно питање за ауторизацију" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Опште ограничење брзине Ñамо за aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Покрени aria2 на почетку" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_ИÑкључи aria2 на излазу" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Покрени aria2 на локалном уређају" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Путања" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Ðргументи" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Морате поново покренути uGet након измена." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Режим медијÑког подударања:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Подударање уÑлова" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Квалитет:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Тип:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Фајл" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "ФаÑцикла" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Ставка" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "ВредноÑÑ‚" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Копирај _Ñве" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Прикажи прозор" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Режим ван мреже" uget-2.2.3/po/pl.po0000664000175000017500000013076313602733704011015 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Artur FrÄ…cek , 2013 # div off , 2016-2017 # fazi.3294, 2014 # Krzysztof Kokot , 2016 # MiÅ› Uszatek , 2012 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-01-01 13:42+0000\n" "Last-Translator: div off \n" "Language-Team: Polish (http://www.transifex.com/uget/uget/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Wszystkie kategorie" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "ÅÄ…czenie..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Transmisja..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "PowtórzeÅ„" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Pobieranie ukoÅ„czone" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "UkoÅ„czono" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Wznawialny" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Nie wznawialny" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Plik wyjÅ›ciowy nie może być zmieniony." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "nie można połączyć siÄ™ z hostem." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Folder nie może zostać utworzony." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Plik nie może zostać utworzony (zÅ‚a nazwa pliku lub plik istnieje)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Plik nie może być otwarty." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Nie można utworzyć wÄ…tku" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "NieprawidÅ‚owe źródÅ‚o (inny rozmiar pliku)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Obecne zasoby (peÅ‚ny dysk lub zabrakÅ‚o pamiÄ™ci)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Brak pliku wyjÅ›ciowego." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Nie ustawiono wyjÅ›cia." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Zbyt wiele prób." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "NieobsÅ‚ugiwany schemat (protokół)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "NieobsÅ‚ugiwany plik." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "Nie znaleziono pliku postu." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "Nie znaleziono pliku cookie." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "To wideo zostaÅ‚o usuniÄ™te." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "WystÄ…piÅ‚ błąd podczas pobierania informacji o wideo." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "Nie znaleziono video_id w adresie URL z YouTube'a" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: wystÄ…piÅ‚ nieznany błąd." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: przekroczono czas oczekiwania." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: nie znaleziono zasobu." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: szybkość połączenia byÅ‚a za wolna." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: wystÄ…piÅ‚ błąd sieciowy." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: niedokoÅ„czone pobierania." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 Å›ciÄ…gaÅ‚a ten sam plik." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: plik już istnieje. Zobacz opcjÄ™ --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: nie można otworzyć istniejÄ…cego pliku." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: nie można utworzyć nowego pliku lub usunąć istniejÄ…cego." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: wystÄ…piÅ‚ błąd wejÅ›cia/wyjÅ›cia w pliku." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: rozpoznawanie nazw nie powiodÅ‚o siÄ™." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: zawiodÅ‚o polecenie FTP." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: odpowiedź nagłówka HTTP byÅ‚a zÅ‚a lub niespodziewana." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Za dużo przekierowaÅ„." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: zawiodÅ‚a autoryzacja HTTP." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: plik torrentu byÅ‚ uszkodzony lub brakowaÅ‚o w nim informacji." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: serwer zdalny nie byÅ‚ w stanie obsÅ‚użyć żądania." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Nie ma odpowiedzi. Czy aria2 jest wyłączona?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: usuniÄ™to gid." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Nie udaÅ‚o siÄ™ pobrać linku do mediów." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Menedżer Pobierania" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Piotr Ozarowski, 2005-2006.\nMiÅ› Uszatek, 2012" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "Twórca uGet:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Menadżer projektu uGet" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "zadania" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Nowy ze schowka" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Nowe Pobierania" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Schowek" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "linia poleceÅ„" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "WystÄ…piÅ‚ błąd." #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "WystÄ…piÅ‚ błąd podczas pobierania." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "RozpoczÄ™to Pobieranie" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Uruchomienie kolejki pobierania." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Pobieranie UkoÅ„czone" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Wszystkie kolejki pobierania zostaÅ‚y ukoÅ„czone." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Status" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategoria" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Utwórz nowe pobieranie" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Nowe _Pobieranie..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nowa _Kategoria..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Wklej nowÄ… grupÄ™ ze schowka" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Nowa grupa sekwencji adresów URL" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Nowy Torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nowy Metalink..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Zapisz wszystkie ustawienia." #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Wznowienie wybranego pobierania " #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Wstrzymanie wybranego pobierania" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Ustaw wÅ‚aÅ›ciwoÅ›ci wybranego pobierania" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "PrzenieÅ› zaznaczone pobieranie wyżej" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "PrzenieÅ› zaznaczone pobieranie niżej" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "PrzenieÅ› zaznaczone pobieranie na górÄ™" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "PrzenieÅ› zaznaczone pobieranie na dół" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nowa Kategoria" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Kopiuj -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "WÅ‚aÅ›ciwoÅ›ci Kategorii" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "WÅ‚aÅ›ciwoÅ›ci Pobierania " #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Nowy Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nowy Metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Otwórz Plik Torrent " #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Plik torrent (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Otwórz Plik Metalink" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Nie udaÅ‚o siÄ™ zapisać pliku kategorii." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować pliku kategorii." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Zapisz plik categorii" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Otwórz plik kategorii" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "Plik JSON (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "OdnoÅ›niki " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Obrazki " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Plik tekstowy" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importuj adresy z pliku HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "Plik HTML (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importuj adresy z pliku tekstowego" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Plik tekstowy" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Eksportuj adresy URL do pliku tekstowego." #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Sekwencyjna grupa adresów URL" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Nie znaleziono adresów w schowku." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Wszystkie adresy URL już istniaÅ‚y." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Wklej grupÄ™ ze schowka" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Nowy" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Błąd" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Komunikaty" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Wybrano %d pozycje " #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Uwaga użytkownicy UGet:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "Zbieramy dotacje na sfinansowanie przyszÅ‚ych wersji uGet, proszÄ™ kliknij" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "TUTAJ" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "proszÄ™ wypeÅ‚nij tÄ™ krótkÄ… ankietÄ™ dla użytkowników uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "kliknij tutaj aby wypeÅ‚nić ankietÄ™" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Nazwa kategorii:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Aktywnych połączeÅ„:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Pojemność UkoÅ„czonych" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Pojemność Kosza" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "NaprawdÄ™ wyjść?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Czy na pewno chcesz zamknąć?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "NaprawdÄ™ usunąć pliki?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Czy na pewno chcesz usunąć pliki?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Na pewno usunąć kategoriÄ™?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "JesteÅ› pewny, że chcesz usunąć kategoriÄ™?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Nie pytaj mnie ponownie" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Obrazy Lustrzane:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Plik:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Wybierz Folder" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Folder:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "OdsyÅ‚acz:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Maksymalna liczba połączeÅ„" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Wznów" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_auza" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Logowanie" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Użytkownik:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "HasÅ‚o:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Plik ciasteczka:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Wybierz Plik Ciasteczka" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "PrzeÅ›lij pliki:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Wybierz Plik do WysÅ‚ania" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "User agent:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Limit _PonowieÅ„:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "Ilość" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Ponów z _opóźnieniem:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "sekund" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Maksymalna prÄ™dkość wysyÅ‚ania:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Maksymalna prÄ™dkość pobierania:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "znacznik czasu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Plik" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "Pobierz GrupÄ™" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Wklej grupÄ™ ze schowka" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "Sekwencyjna grupa adresów URL" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Importuj z pliku tekstowego (.txt)" #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Importuj z pliku HTML (.html)" #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "Eksportuj do pliku tekstowego (.txt)" #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Otwórz kategoriÄ™..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Zapisz kategoriÄ™ jako..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Zapisz _wszystkie ustawienia" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Tryb offline" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Edycja" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Monitorowanie _Schowka" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "PomiÅ„ istniejÄ…ce adresy URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Zastosuj ostatnie ustawienia pobierania" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Wyłącz" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Zahibernuj" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "UÅ›pij" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Zamknij" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Uruchom ponownie" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "WÅ‚asne" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "ZapamiÄ™taj ustawienia" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Pomoc" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Ustawienia..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Widok" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "Pasek narzÄ™dzi" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Pasek stanu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Podsumowanie" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Pozycje Podsumowania" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Nazwa" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Folder" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_Adres" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Wiadomość" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Kolumny Pobierania" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_UkoÅ„czono" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Rozmiar " #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Procent '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_UpÅ‚ynęło" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_PozostaÅ‚o" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Szybkość" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "PrÄ™dkość wysyÅ‚ania" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "WysÅ‚ane" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Stosunek" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Ponów" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Dodano" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "UkoÅ„czono " #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategoria" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nowa Kategoria..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_UsuÅ„ kategoriÄ™" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Pobierz" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_UsuÅ„ Wpis" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "UsuÅ„ Wpis i _Plik" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Otwóż _folder zawierajÄ…cy plik" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "WymuÅ› Start" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_PrzenieÅ› Do" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Priorytet" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Wysoki" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normalny" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Niski" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Pomoc Online" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentacja" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Forum" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "WyÅ›lij TwojÄ… OpiniÄ™" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "ZgÅ‚oÅ› Błąd" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Skróty klawiaturowe" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Aktualizacja" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Ustawienia" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Nie można uruchomić domyÅ›lnej aplikacji dla pliku '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Ten folder nie istnieje." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI już istniaÅ‚" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Ten adres URI już istniaÅ‚, jesteÅ› pewien, że chcesz kontynuować?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Ogólny" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Zaawansowany" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Ustawienia kategorii" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "DomyÅ›lne nowe pobranie 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "DomyÅ›lny 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "bez nazwy" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Zatrzymano" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "PrzesyÅ‚anie" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "UkoÅ„czono" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Kosz" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Kolejka" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktywne" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Wszystkie" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Nazwa" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "UkoÅ„czono" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Rozmiar" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "UpÅ‚ynęło" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "PozostaÅ‚o" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Wielkość" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Nie używaj" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "DomyÅ›lny" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Host:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Gniazdo:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Argumenty gniazda:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Pon" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Wt" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Åšro" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Czw" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Pt" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Sob" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Niedz" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Włącz Harmonogram" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Wyłącz" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- zatrzymaj wszystkie zadania" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normalny" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- uruchom zadanie normalnie" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Wszystko" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Brak" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Zaznacz przez filtr" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Zaznacz adres przez host i rozszerzenie pliku." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Spowoduje to zresetowanie wszystkich zaznaczonych adresów." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Host" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Plik Zewn." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "Adres" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Baza odwoÅ‚aÅ„ hipertekstu" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Zaznacz _Wszystko" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Brak _Zaznaczenia" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Zaznacz przez filtr..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "np." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Od:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Do:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "cyfrowy:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "O_d" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "wielkość liter" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Brak symbolu(*) wieloznacznego w zapisie adresu." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "Adres URL jest nieprawidÅ‚owy." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Brak znaków w pozycji 'Z' lub 'Do'" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "PodglÄ…d" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Interfejs Użytkownika" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Przepustowość" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Harmonogram" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Wtyczki" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Inne" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Włącz monitor schowka" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Cichy tryb" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "DomyÅ›lny indeks kategorii" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Monitorować schowek dla okreÅ›lonych typów plików:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Oddziel typy przez znak '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Możesz użyć wyrażeÅ„ regularnych tutaj." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Potwierdzenie" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "WyÅ›wietl dialog potwierdzenia przy wyjÅ›ciu" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Potwierdź przy usuwaniu plików" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Zasobnik systemowy" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Zawsze pokazuj ikonÄ™ na pasku zadaÅ„" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Minimalizuj do zasobnika na starcie" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Zminimalizuj do zasobnika systemowego po zamkniÄ™ciu okna" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Włącz tryb offline na starcie" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Włącz powiadomienia pobierania" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "DźwiÄ™k, gdy pobieranie zostanie ukoÅ„czone" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "WyÅ›wietl dużą ikonÄ™" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Ogólne ograniczenia szybkoÅ›ci" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Maksymalna prÄ™dkość wgrywania" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Maksymalna prÄ™dkość pobierania" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "WÅ‚asne polecenie" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "WÅ‚asne polecenie jeżeli wystÄ…pi błąd" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Autozapis" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_OdstÄ™p:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minut" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Ustawienia Wiersza PoleceÅ„" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Użyj '--quiet' domyÅ›lnie" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Opcje dodatku Aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Ogólne ograniczenia szybkoÅ›ci tylko dla arii2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Uruchom aria2 na starcie" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Zamknij aria2 przy wyjÅ›ciu" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Uruchom aria2 na urzÄ…dzeniu lokalnym" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Åšcieżka" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumenty" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Musisz uruchomić ponownie uGet po modyfikacji tego." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Jakość:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Typ:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Plik" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Folder" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Pozycja" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Wartość" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Kopiuj _Wszystko" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Pokaż okno" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Tryb offline" uget-2.2.3/po/de.po0000664000175000017500000013504213602733704010765 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Michael Tunnell , 2013 # Tobias Bannert , 2016-2017 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-09-22 23:51+0000\n" "Last-Translator: Tobias Bannert \n" "Language-Team: German (http://www.transifex.com/uget/uget/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Passwortverwaltungsdienst: uget\n\nBeim Versuch, eine SSH-Verbindung zu %s aufzubauen gab es ein Problem beim Überprüfen des Rechnerschlüssels gegen die bekannte und vertrauenswürdige Hosts-Datei, da der Rechnerschlüssel nicht gefunden wurde.\n\nMöchten Sie diese Verbindung als vertrauenswürdig für diese und zukünftige Verbindungen behandeln, indem Sie den Rechnerschlüssel von %s zu der bekannten Hosts-Datei hinzufügen?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Alle Kategorien" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Verbindungsaufbau …" #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Übertragung läuft …" #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Wiederholen" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Übertragung vollständig" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Fertiggestellt" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Fortsetzbar" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Nicht fortsetzbar" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Ausgabedatei kann nicht umbenannt werden." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "Verbindung zum Anbieter kann nicht hergestellt werden." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Ordner kann nicht erstellt werden." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Datei kann nicht erstellt werden (unzulässiger Dateiname oder Datei vorhanden)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Datei kann nicht geöffnet werden." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Strang kann nicht erstellt werden." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Unzulässige Quelle (unterschiedliche Dateigröße)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Kein Speicherplatz verfügbar (Festplatte voll oder Speicher belegt.)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Keine Ausgabedatei angegeben." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Keine Ausgabeeinstellung." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Zu viele Versuche." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Nicht unterstütztes Schema (Protokoll)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Nicht unterstütztes Dateiformat." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "Veröffentlichungsdatei nicht gefunden." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "Profildatei nicht gefunden." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Dieses Video wurde entfernt." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Es ist ein Fehler beim Erhalt der Videoinformation aufgetreten." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Es ist ein Fehler beim Erhalt der Videointernetseite aufgetreten." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "In der YouTube-Adresse wurde keine Videokennung (video_id) gefunden." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: unbekannter Fehler aufgetreten." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: Zeit abgelaufen." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: Quelle wurde nicht gefunden." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 sah die bestimmte Zahl des Fehlers »Quelle nicht gefunden«. Siehe Option --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: Geschwindigkeit war zu langsam." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: Netzwerkproblem aufgetreten." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: Unvollständige Übertragungen." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Kein Speicherplatz verfügbar" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: Teillänge war unterschiedlich zu einer .aria2-Steuerdatei." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 hat die selbe Datei heruntergeladen." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 hat den selben Info-Hash-Torrent heruntergeladen." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: Datei ist bereits vorhanden. Siehe Option --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: Vorhandene Datei kann nicht geöffnet werden." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: Neue Datei konnte nicht erstellt oder vorhandene Datei gekürzt werden." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: Datei-E/A-Fehler ist aufgetreten." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: Namensauflösung ist fehlgeschlagen." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: Metalink-Dokument konnte nicht analysiert werden." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP-Befehl ist fehlgeschlagen." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP-Antwortkopfzeile war fehlerhaft oder unerwartet." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Zu viele Umleitungen." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP-Legitimierung ist fehlgeschlagen." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: Bencoded-Datei (normalerweise .torrent-Datei) konnte nicht analysiert werden." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: Torrent-Datei ist beschädigt oder es fehlen Informationen." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet-Adresse ist fehlerhaft." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: schlechte oder nicht erkannte Option oder unerwartetes Optionsargument angegeben." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: Entfernter Server war nicht in der Lage die Anfrage zu verarbeiten." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: JSON-RPC-Anfrage konnte nicht analysiert werden." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Keine Antwort. Ist aria2 herunterfahren?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: GID wurde entfernt." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Erhalt der Medienverknüpfung ist fehlgeschlagen." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Keine übereinstimmenden Medien." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Übertragungsverwaltung" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Michael Tunnell\nRaphael Groner\nTobias Bannert" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet-Gründer: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet-Projektverwaltung: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "Aufgaben" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Neu aus Zwischenablage" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Neue Übertragung" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Zwischenablage" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Befehlszeile" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Fehler aufgetreten" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Es ist ein Fehler beim Herunterladen aufgetreten." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Übertragung beginnt" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Herunterladewarteschlange wird abgearbeitet" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Übertragung vollständig" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Alle Übertragungen in der Warteschlange wurden fertiggestellt." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Status" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategorie" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Neue Übertragung erstellen" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "_Neue Übertragung …" #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Neue _Kategorie …" #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Neue Zwischenablage a_barbeiten …" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Neue _Adressreihenfolge abarbeiten …" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Neuer Torrent …" #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Neuer Metalink …" #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Alle Einstellungen speichern" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Ausgewählte Übertragung ausführen" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Ausgewählte Übertragung anhalten" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Ausgewählten Übertragungseigenschaften einstellen" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Markierte Übertragung hoch schieben" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Markierte Übertragung runter schieben" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Markierte Übertragung zum Anfang schieben" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Markierte Übertragung zum Ende schieben" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Neue Kategorie" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Kopieren - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Kategorieeigenschaften" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Übertragungseigenschaften" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Neuer Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Neuer Metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Torrent-Datei öffnen" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrent-Datei (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Metalink-Datei öffnen" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Speichern der Kategoriedatei ist fehlgeschlagen." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Laden der Kategoriedatei ist fehlgeschlagen." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Kategoriedatei speichern" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Kategoriedatei öffnen" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON-Datei (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Verweis " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Bild " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Textdatei" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Adressen aus HTML-Datei importieren" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML-Datei (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Adressen aus Textdatei importieren" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Einfache Textdatei" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Adressen in Textdatei exportieren" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Adressreihenfolge abarbeiten" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Keine Adressen in Zwischenablage gefunden." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Alle Adressen bestehen." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Zwischenablage abarbeiten" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Neu" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Fehler" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Meldung" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d Einträge markiert" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Achtung uGetters:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "Wir betreiben eine Spendenaktion für uGets zukünftige Entwicklung, bitte klicken: " #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "HIER" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "bitte diese kurze Benutzerumfrage über uGet ausfüllen." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "Bitte hier klicken, um an der Umfrage teilzunehmen." #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Kategoriename:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "A_ktive Übertragungen:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "A_nzahl Fertiggestellter:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "An_zahl Gelöschter:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Übereinstimmungsbedingungen für Adressen" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Übereinstimmende _Rechner:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Übereinstimmende _Schemen:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Übereinstimmende _Typen:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Wirklich beenden?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Wollen Sie wirklich beenden?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Dateien wirklich löschen?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Wollen Sie die Dateien wirklich löschen?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Kategorie wirklich entfernen?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Sind Sie sicher, dass Sie die Kategorie entfernen wollen?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Nicht noch einmal fragen" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "A_dresse:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Spiegel:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Datei:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Ordner wählen" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Ordner:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "_Referrer:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Maximale Verbindungen" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "Ausfüh_ren" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "An_gehalten" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Anmelden" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Benutzer:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Passwort:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Profildatei (Cookie):" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Profildatei (Cookie) auswählen" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Sendedatei:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Sendedatei auswählen" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Benutzerkennung (User Agent):" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_Wiederholungen:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "Versuche" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Wie_derholungsverzögerung:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "Sekunden" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Höchste Hochladegeschwindigkeit:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Höchste Herunterladegeschwindigkeit:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Zeitstempel empfangen" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Datei" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "Übertragungen a_barbeiten" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_Zwischenablage abarbeiten …" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_Adressreihenfolge abarbeiten …" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Textdatei importieren (.txt) …" #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML-Datei importieren (.html) …" #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Export in Textdatei (.txt) …" #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "Kategorie _öffnen …" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "Kategorie _speichern als …" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Alle _Einstellungen speichern" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Getrennter Modus" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Bearbeiten" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Zwischenablage _überwachen" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "_Zwischenablage arbeitet unauffällig" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "_Befehlszeile arbeitet unauffällig" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Vorhandene Adresse überspringen" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Letzte Übertragungeinstellungen übernehmen" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "_Automatische Abschlussaktionen" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Deaktivieren" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Ruhezustand" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Bereitschaft" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Herunterfahren" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Neustarten" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Benutzerdefiniert" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Einstellungen merken" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Hilfe" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Einstellungen …" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Ansicht" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Werkzeugleiste" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "_Statusleiste" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Übersicht" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Übersicht_elemente" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Name" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Ordner" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_Adresse" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Meldung" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Übertragung_spalten" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Vollständig" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Größe" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Prozent »%«" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Vergangen" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Verbleibend" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Geschwindigkeit" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Hochladegeschwindigkeit" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Hochgeladen" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Verhältnis" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Wiederholen" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Hinzugefügt" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Vervollständigt" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategorien" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Neue Kategorie …" #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Kategorie löschen" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Herunterladen" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Eintrag entfernen" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Eintrag _und Datei entfernen" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "_Ordner öffnen" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Start erzwingen" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Verschieben nach" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Priorität" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Hoch" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normal" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Klein" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Hilfe im Internet erhalten" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentation" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Unterstützungsforum" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Rückmeldung einsenden" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Fehler berichten" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Tastenkombinationen" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Auf Aktualisierungen prüfen" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Einstellungen" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Vorgegebene Anwendung für Datei »%s« kann nicht gestartet werden." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "»%s« - Dieser Ordner ist nicht vorhanden." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "Adresse ist vorhanden" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Diese Adresse ist vorhanden, sind Sie sicher, dass Sie fortfahren wollen?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Allgemein" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Fortgeschritten" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Kategorieeinstellungen" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Vorgabe für neue Übertragung 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Vorgabe 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "unbenannt" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Angehalten" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Wird hochgeladen" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Vollständig" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Gelöscht" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Warteschlange" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktiv" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Alle" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Name" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Vollständig" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Größe" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "Prozent" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Vergangen" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Verbleibend" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "Adresse" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Größe" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Vermittlungsserver (Proxy):" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Keiner" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Vorgabe" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Server:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Anschluss (Port):" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Socket-Args:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Mo" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Di" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Mi" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Do" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Fr" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Sa" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "So" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "Planer _einschalten" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Ausschalten" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- alle Aufgaben anhalten" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normal" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- Aufgabe normal ausführen" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Alles" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Nichts" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Marieren nach Filter" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Adressen nach Server UND Dateityp markieren." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Markierungen für alle Adressen entfernen." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Server" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Suffix" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "Adresse" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Hypertextreferenzbasis" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr " _Alle markieren" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "_Nichts markieren" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Nach Filter markieren …" #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "z.B." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Von:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Bis:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "Stellen:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "V_on:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "Groß-/Kleinschreibung" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Kein Platzhalter (*) in Adresseintrag." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "Adresse ist ungültig." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Kein Eintrag in »Von« oder »Zu«." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Vorschau" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Benutzerschnittstelle" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Bandbreite" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Planer" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Modul" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Medienseite" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Andere" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Zwischenablageüberwachung aktivieren" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Ruhemodus" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Vorgegebener Kategorieindex" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Wird zur N-ten Kategorie hinzugefügt, wenn mit keiner Kategorie übereinstimmt." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "Adresse von Medienseite _überwachen" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Zwischenablage auf bestimmte Dateitypen überwachen:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Die Erweiterungen durch ein »|« trennen." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Es können reguläre Ausdrücke verwendet werden." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Bestätigung" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Bestätigungsdialog beim Beenden anzeigen" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Bestätigung beim Löschen von Dateien einholen" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Systemablage" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Immer Systemablagesymbol anzeigen" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Beim Start in Systemablage verkleinern" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Beim Fensterschließen, in Systemablage verkleinern" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Ubuntus App-Anzeige benutzen" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Getrennten Modus beim Start aktivieren" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Benachrichtigung beim Starten der Übertragung" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Ton ausgeben wenn Übertragung fertiggestellt wurde" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Großes Symbol anzeigen" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Das wird alle Module betreffen." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Globale Geschwindigkeitsbegrenzung" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Höchste Hochladegeschwindigkeit" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Höchste Herunterladegeschwindigkeit" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Automatische Abschlussaktionen" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Benutzerdefinierter Befehl:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Benutzerdefinierter Befehl, falls Fehler auftreten:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "Automatisches _Speichern" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "A_bstand:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "Minute(n)" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Befehlszeileneinstellungen" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "»--quiet« als Vorgabe benutzen" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Modulübereinstimmungsreihenfolge:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "aria2-Moduloptionen" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC-Legitimierung geheimer Token" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Globale Geschwindigkeitsbegrenzung nur für aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "aria2 beim Starten a_usführen" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "aria2 beim Beenden _beenden" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "aria2 auf lokalem Gerät starten" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Pfad" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumente" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Sie müssen uGet, nach dem Verändern, neu starten" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Medienübereinstimmungsmodus:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Übereinstimmungsbedingungen" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Qualität:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Typ:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Datei" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Ordner" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Eintrag" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Wert" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Alles _kopieren" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Fenster anzeigen" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Getrennter Modus" uget-2.2.3/po/it.po0000664000175000017500000013312213602733704011006 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # bovirus , 2013 # Giuseppe Pignataro (Fasbyte01) , 2017 # Martino Mensio , 2018 # tomberry , 2015 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2018-01-15 22:05+0000\n" "Last-Translator: Martino Mensio \n" "Language-Team: Italian (http://www.transifex.com/uget/uget/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Demone di gestione delle password: uget\n\nNel tentativo di connessione SSH a %s c'è stato un problema nella verifica della chiave del rispettivo host considerando il file degli host conosciuti e fidati perché la sua chiave host non è stata trovata.\n\nVuoi considerare questa connessione come fidata per questa e le future connessioni aggiungendo la chiave host di %s al file di host conosciuti?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Tutte le categorie" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Connessione..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Trasmissione..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Riprova" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Download completato" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Completato" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Riprendibile" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Non riprendibile" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Impossibile rinominare il file destinazione." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "impossibile connettersi all'host." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "La cartella non può essere creata." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Il file non può essere creato (nome non valido o già utilizzato)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Il file non può essere aperto." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Impossibile creare il thread." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Sorgente errata (dimensione file differente)" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Risorse non disponibili (disco pieno o memoria esaurita)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Nessun file destinazione." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Nessuna impostazione destinazione." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Troppi tentativi." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Schema (protocollo) non supportato." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "File non supportato." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "file post non trovato." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "file coockie non trovato" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Questo video è stato rimosso." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Errore durante il recupero delle informazioni video." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Errore durante il recupero della pagina web del video." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "Nessun video_id trovato nell'URL di YouTube." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: errore sconosociuto." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria: si è verificato un timeout." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: risorsa non trovata." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 vede il numero di errori 'risorse non trovate'. Vedi l'opzione --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: la velocità era troppo bassa." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: problemi di rete." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: download non completati." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Risorse esaurite" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: lunghezza segmento differente da quella nel file di controllo .aria2." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 sta scaricando lo stesso file." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 sta scaricando lo stesso torrrent info hash." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: il file esiste già. Vedi opzione --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: impossibile aprire file esistente." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: impossibile creare nuovo file o troncare file esistente." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: errore I/O." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: risoluzione nomi fallita." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: impossibile analizzare documento metalink." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: comando FTP fallito." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: intestazione risposta HTTP errata o inaspettata." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Troppi reindirizzamenti." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: autorizzazione HTTP fallita." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: impossibile analizzare file codificato (di solito file .torrent)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: il file .torrent è corrotto o mancano informazioni." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: URI Magnet errata." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: opzione errata/non riconosciuta o argomento opzione inaspettato." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: il server remoto non può gestire la richiesta." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: impossibile analizzare richiesta JSON-RPC." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Nessuna risposta. Aria2 è in chiusura?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid è stato rimosso." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Impossibile aprire il link del media." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Nessun media corrispondente." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Gestore download" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "bovirus (bovirus@gmail.com) e Giovanni Santini (giovanni.santini@katamail.com)" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet (sviluppatore): " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet (manager progetto): " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "attività" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Nuovo da Appunti" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Nuovo download" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Appunti" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Linea di comando" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Si è verificato un errroe" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Errore durante il download." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Inizio download" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Avvia elaborazione coda download." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Download completato" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Tutti i download in coda sono stati completati." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Stato" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Categoria" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Crea un nuovo download" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Nuovo _download..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nuova _categoria..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Nuovo _batch Appunti " #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Batch nuova sequenza _URL" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Nuovo torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nuovo collegamento meta..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Salva tutte le impostazioni" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Imposta download come attivo" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Imposta download in pausa" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Imposta proprietà download" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Sposta in su il download selezionato" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Sposta in giù il download selezionato" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Sposta in alto il download selezionato" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Sposta in basso il download selezionato" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nuova categoria" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Copia - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Proprietà categoria" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Proprietà download" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Nuovo torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nuovo collegamento meta" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Apri file torrent" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "File Torrent (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Apri file collegamento meta" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Impossibile salvare file categoria." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Caricamento fallito file categoria." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Salva file categoria" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Apri file categoria" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "File JSON (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Collegamento " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Immagine " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "File di testo" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importa URL da file HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "File HTML (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importa URL da file di testo" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "File di solo testo" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Esporta URL in un file di testo" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Batch sequenza URL" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Nessun URL trovato negli appunti." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Tutti gli URL esistevano." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Batch Appunti" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Nuovo" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Errore" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Messaggio" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Selezionati %d elementi" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Attenzione utenti uGet:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "Stiamo eseguendo una unità donazione per futuri sviluppi di uGet. Fai clic " #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "QUI" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "compila per favore questo veloce sondaggio per uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "fai clic qui per partecipare al sondaggio" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Nome categoria:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Download attivi:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Limite dei finiti:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Limite dei riciclati:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Condizioni corrispondenza URI:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Corrispondenza _host:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Corrispondenza _schemi:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Corrispondenza _tipi:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Confermi la chiusura?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Confermi la chiusura dell'applicazione?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Vuoi veramente eliminare i file?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Confermi la cancellazione dei file?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Vuoi veramente eliminare la categoria?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Sei sicuro di voler eliminare la categoria?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Non chiederlo nuovamente" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Mirror:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "File:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Scegli cartella" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Cartella:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Referrer:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "Connessioni _max:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Attivo" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_ausa" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Accedi" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Utente:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Password:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "File cookie:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Scegli file cookie:" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Carica file:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Scegli file da caricare" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Agente utente:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_Limite tentativi:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "volte" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "_Pausa tra ogni tentativo:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "secondi" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Velocità massima upload:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Velocità massima download:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Ottieni data/ora file" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_File" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "Download _batch..." #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Bat_ch Appunti" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "Batch sequenza _URL..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Importa file di _testo (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Importa file _HTML (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Esporta in un file di testo (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "Apri categ_oria..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Salva categoria come..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "S_alva tutte le impostazioni" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Modo offline" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Modifica" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_Monitorizza Appunti" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Gli Appunti funzionano silenziosamente" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "La linea di comando funziona silenziosamente" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Ignora URI esistente" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Applica impostazioni download recenti" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "Completato - Azioni automatiche" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Disabilita" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Iberna" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Sospendi" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Spegnimento" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Riavvio" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Personalizzato" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Ricorda impostazioni" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Aiuto" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Impostazioni..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Vista" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Barra strumenti" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Barra di stato" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Sommario" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "_Elementi sommario " #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Nome" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Cartella" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Messaggio" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "_Colonne download" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Completato" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Dimensioni" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Percentuale '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Trascorso" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Rimanente" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Velocità" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Velocità upload" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Inviato" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Rapporto" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Ritenta" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Aggiunto il" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Completato il" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Categoria" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nuova categoria" #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Elimina categoria" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Download" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Elimina elemento" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Elimina elemento e _file" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Apri cartella _contenitore" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Forza avvio" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Sposta in" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Priorità" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Alto" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normale" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Bassa" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Vai alla Guida in linea" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Documentazione" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Forum di supporto" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Invia feedback" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Segnala un problema" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Scorciatoie tastiera" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Verifica aggiornamenti" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Impostazioni" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Non posso lanciare l'applicazione predefinita per il file '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - questa cartella non esiste." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "L'URI esisteva" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Questa URI esisteva. Sei sicuro di voler continuare?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Generale" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Avanzate" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Impostazioni categoria" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Predefinito per nuovo download 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Predefinito 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "senza nome" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "In pausa" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Upload..." #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Completato" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Riciclati" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "In coda" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Attivi" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Tutti gli stati" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Nome" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Completato" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Dimensioni" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Trascorsi" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Rimanente" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Quantità" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Non usare" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Predefinito" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Host:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Porta:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Argomenti socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Elemento:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Lun" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Mar" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Mer" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Gio" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Ven" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Sab" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Dom" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Abilita pianificazione" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Disattiva" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- ferma tutte le attività" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normale" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- esegui normalmente le attività" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Tutti" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Nessuno" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Seleziona tramite filtro" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Seleziona URL per host E per estensione del file." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Questo ripristinerà i marcatori delle URL." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Host" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Estensione file" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Riferimento ipertesto di base" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Seleziona _tutti" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Deselezio_na tutti" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Seleziona tramite filtro..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "e.g." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "Da:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "A:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "numeri:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_Da:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "sensibile maiuscole/minuscole" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Nessun carattere jolly (*) nell'URL." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL non valido." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Nessun carattere nel campo 'Da' o 'A'." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Anteprima" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Interfaccia utente" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Banda" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Pianificazione" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Plugin" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Sito web media" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Varie" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "A_bilita monitoraggio Appunti" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Modalità pausa" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Indice categoria predefinita" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Aggiunta alla n categoria se nessuna categoria corrsiponde." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_Monitora URL del sito web del media" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Monitorizza Appunti per i tipi di file specificati:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Separa i tipi con il carattere '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Qui puoi usare normali espressioni." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Conferme" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Visualizza finestra conferma all'uscita" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Conferma quando elimini i file" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Barra di sistema" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Mostra sempre icona nella barra di sistema" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Minimizza nella barra di sistema all'avvio" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Mininimizza nella barra sistema alla chiusura finestra" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Usa indicatore app Ubuntu" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Abilità modalita offline all'avvio" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Notifica avvio download" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Suono a download completato" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Mostra icona grande" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Questo si applicaherà a tutti i plugin." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Limite globale velocità" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Velocità upload max" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Velocità download max" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Azioni automatiche al completamento" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Comando personalizzato:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Comando personalizzato in caso di errore:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Auto salvataggio" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Intervallo:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minuti" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Impostazioni linea di comando" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Usa '--quiet' come predefinito" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Ordine controllo plugin:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Opzioni plugin Aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "Token segreto autorizzazione RPC" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Limite globale velocità solo per aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Avvia aria2 all'avvio" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Chiudi aria2 alla chiusura" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Esegui aria2 sul dispositivo locale" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Percorso" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argomenti" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Devi riavviare uGet dopo averlo modificato." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Modalità corrispondenza media:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Condizioni corrispondenze" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Qualità:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Tipo:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "File" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Cartella" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Elemento" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Valore" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Copi_a tutto" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Visualizza la finestra" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Modalità offline" uget-2.2.3/po/sk_SK.po0000664000175000017500000013222113602733704011403 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # pyler , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/uget/uget/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk_SK\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "VÅ¡etky kategórie" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Pripájanie..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Prenášanie..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "SkúsiÅ¥ znovu" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "SÅ¥ahovanie dokonÄené" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "DokonÄené" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Obnoviteľné" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Neobnoviteľné" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Výstupný súbor nemôže byÅ¥ premenovaný." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "Nemožno sa pripojiÅ¥ k hostiteľovi." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "PrieÄinok nemôže byÅ¥ vytvorený." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Súbor nemôže byÅ¥ vytvorený (zlý názov súboru alebo súbor už existuje)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Súbor nemôže byÅ¥ otvorený." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Nemožno vytvoriÅ¥ vlákno." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Nesprávny zdroj (odliÅ¡ná veľkosÅ¥ súboru)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Nedostatok zdrojov (plný disk alebo nedostatok pamäte)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Žiadny výstupný súbor." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Žiadne nastavenie výstupu." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "PríliÅ¡ veľa opakovaní." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Nepodporovaná schéma (protokol)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Nepodporovaný súbor." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: Vyskytla sa neznáma chyba." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: ÄŒasový limit vyprÅ¡al." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: Zdroj nebol nájdený." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 má Å¡pecifický poÄet chýb 'zdroj nebol nájdený'. Pozrite možnosÅ¥ --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: RýchlosÅ¥ bola príliÅ¡ pomalá." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: Vyskytol sa problém so sieÅ¥ou." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: NedokonÄené sÅ¥ahovania." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Nedostatok zdrojov" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: Dĺžka Äasti bola odliÅ¡ná od uvedenej v kontrolnom súbore .aria2." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 sÅ¥ahoval rovnaký súbor." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 stiahol rovnaký info hash torrent." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: Súbor už existuje. Pozrite možnosÅ¥ --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: Nemožno otvoriÅ¥ existujúci súbor." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: Nemožno vytvoriÅ¥ nový súbor alebo skrátiÅ¥ existujúci súbor." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: Vyskytla sa vstupno-výstupná chyba súboru." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: Rozlíšenie názvu zlyhalo." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: Nemožno parsovaÅ¥ Metalink dokument." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP príkaz zlyhal." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HlaviÄka HTTP odozvy bola zlá alebo neoÄakávaná." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "PríliÅ¡ veľa presmerovaní." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP overenie zlyhalo." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: Nemožno parsovaÅ¥ benkódovaný súbor (zvyÄajne súbor .torrent)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: Súbor torrentu je poÅ¡kodený alebo neobsahuje niektoré informácie." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI je zlá." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: Bola zadaná zlá alebo nerozpoznaná možnosÅ¥ alebo zlý argument možnosti" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: Vzdialený server nemohol spracovaÅ¥ požiadavku." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: Nemožno parsovaÅ¥ JSON-RPC požiadavka." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Žiadna odozva. Je plugin aria2 vypnutý?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: Gid bol odstránený." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Správca sÅ¥ahovaní" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "pyler" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "Zakladateľ uGet: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Správca projektu uGet:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "úlohy" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Nové zo schránky" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Nové sÅ¥ahovanie" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Schránka" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Príkazový riadok" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Vyskytla sa chyba" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Vyskytla sa chyba pri sÅ¥ahovaní." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "SÅ¥ahovanie zaÄalo" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "SÅ¥ahovanie fronty zaÄalo." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "SÅ¥ahovanie dokonÄené" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "VÅ¡etky sÅ¥ahovania vo fronte sú dokonÄené." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Stav" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategória" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "VytvoriÅ¥ nové sÅ¥ahovanie" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Nové _sÅ¥ahovanie..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nová _kategória..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "New Clipboard _batch..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Nové _dávkové z URL sekvencie..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Nový torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nový metaodkaz..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "UložiÅ¥ vÅ¡etky nastavenia" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "SpustiÅ¥ vybrané sÅ¥ahovanie" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "PozastaviÅ¥ vybrané sÅ¥ahovanie" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Vlastnosti vybraného sÅ¥ahovania" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Posunúť vybrané sÅ¥ahovanie vyššie" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Posunúť vybrané sÅ¥ahovanie nižšie" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Posunúť vybrané sÅ¥ahovanie nahor" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Posunúť vybrané sÅ¥ahovanie nadol" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nová kategória" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "KopírovaÅ¥ - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Vlastnosti kategórie" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Vlastnosti sÅ¥ahovania" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Nový torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nový metaodkaz" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "OtvoriÅ¥ súbor torrentu" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "OtvoriÅ¥ súbor metaodkazu" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Nepodarilo sa uložiÅ¥ súbor kategórií." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Nepodarilo sa naÄítaÅ¥ súbor kategórií." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "UložiÅ¥ súbor kategórií" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "OtvoriÅ¥ súbor kategórií" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Odkaz " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Obrázok " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Textový súbor" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "ImportovaÅ¥ URL adresy z HTML súboru" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "ImportovaÅ¥ URL adresy z textového súboru" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "ExportovaÅ¥ URL adresy do textového súboru" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Dávkové zo URL sekvencie" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Nenájdené žiadne URL adresy v schránke." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "VÅ¡etky URL adresy existujú." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Dávkové zo schránky" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Nové" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Chyba" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Správa" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "PoÄet vybraných položiek: %d" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Upozornenie používateľom uGet:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "zbierame dary na financovanie budúcich verzií uGet, prosíme kliknÄ›te" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "TU" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "prosím, vyplňte tento krátky používateľský prieskum ohľadom uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "kliknite sem a zúÄastnite sa prieskumu" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Názov kategórie:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Aktívne _sÅ¥ahovania:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Kapacita dokonÄených:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Kapacita koÅ¡a:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Zodpovedajúce podmienky URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Zodpovedajúci _hostitelia:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Zodpovedajúce _schémy:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Zodpovedajúce _typy:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Naozaj ukonÄiÅ¥?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Ste si istý, že chcete ukonÄiÅ¥?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Naozaj vymazaÅ¥ súbory?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Ste si istý, že chcete vymazaÅ¥ súbory?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "VymazaÅ¥ kategóriu?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Ste si istý, že chcete vymazaÅ¥ kategóriu?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "NepýtaÅ¥ sa znovu" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Zrkadlá:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Súbor:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Vyberte prieÄinok" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_PrieÄinok:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Odkazovateľ:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Maximálny poÄet pripojení:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_SpustiÅ¥" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "_PozastaviÅ¥" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "_PrihlásiÅ¥ sa" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Používateľ:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Heslo:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Súbor cookie:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Vyberte súbor cookie:" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "OdoslaÅ¥ súbor:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Vyberte súbor na odoslanie:" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Používateľský agent:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_Limit opakovaní:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "poÄet" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "_Oneskorenie opakovania:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "sekúnd" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Maximálna rýchlosÅ¥ nahrávania:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Maximálna rýchlosÅ¥ sÅ¥ahovania:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "NaÄítaÅ¥ Äasovú peÄiatku" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Súbor" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Dávkové sÅ¥ahovanie" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_Dávkové zo schránky..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_Dávkové z URL sekvencie..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_ImportovaÅ¥ z textového súboru (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_ImportovaÅ¥ z HTML súboru (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_ExportovaÅ¥ do textového súboru (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_OtvoriÅ¥ kategóriu..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_UložiÅ¥ kategóriu ako..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "UložiÅ¥ _vÅ¡etky nastavenia" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Režim offline" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_UpraviÅ¥" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_Monitor schránky" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Schránka pracuje potichu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Príkazový riadok pracuje potichu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "PreskoÄiÅ¥ existujúce URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "PoužiÅ¥ nedávne nastavenia sÅ¥ahovania" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "DokonÄenie _automatických akcií" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_ZakázaÅ¥" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "HibernovaÅ¥" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "PozastaviÅ¥" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Vypnúť" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "ReÅ¡tartovaÅ¥" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Vlastné" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "ZapamätaÅ¥ nastavenie" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Pomocník" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Nastavenia..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_ZobraziÅ¥" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Panel nástrojov" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Stavový riadok" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Zhrnutie" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Zhrnutie _položiek" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Názov" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_PrieÄinok" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Správa" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Stĺpce sÅ¥ahovania" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_DokonÄené" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_VeľkosÅ¥" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Percento '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Uplynulé" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Zostáva" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "RýchlosÅ¥" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "RýchlosÅ¥ nahrávania" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Nahrané" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Pomer" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_SkúsiÅ¥ znovu" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Dátum pridania" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Dátum dokonÄenia" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategória" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nová kategória..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_VymazaÅ¥ kategóriu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_SÅ¥ahovanie" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_VymazaÅ¥ položku" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "VymazaÅ¥ položku a _súbor" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "OtvoriÅ¥ _cieľový prieÄinok" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "VynútiÅ¥ spustenie" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Presunúť do" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Priorita" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Vysoká" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normálna" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Nízka" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "ZískaÅ¥ pomoc online" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentácia" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Fórum podpory" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "OdoslaÅ¥ spätnú väzbu" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "NahlásiÅ¥ chybu" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Klávesové skratky" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "SkontrolovaÅ¥ aktualizácie" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Nastavenia" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Nemožno spustiÅ¥ predvolenú aplikáciu pre súbor '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Tento prieÄinok neexistuje." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI existuje" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Toto URI existuje, naozaj chcete pokraÄovaÅ¥?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "VÅ¡eobecné" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "PokroÄilé" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Nastavenia kategórie" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Predvolené pre nové sÅ¥ahovanie 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Predvolené 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "bez názvu" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Pozastavené" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Nahrávanie" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "DokonÄené" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "V koÅ¡i" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Vo fronte" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktívne" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "VÅ¡etky stavy" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Názov" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "DokonÄené" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "VeľkosÅ¥" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Uplynulé" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Zostáva" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "PoÄet" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "NepoužívaÅ¥" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Predvolené" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Hostiteľ:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Argumenty socketu:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Prvok:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Po" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Ut" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "St" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Å t" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Pi" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "So" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Ne" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_PovoliÅ¥ plánovaÄ" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Vypnúť" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- zastaviÅ¥ vÅ¡etky úlohy" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normálne" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- spustiÅ¥ úlohu normálne" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "VÅ¡etky" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Žiadne" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "OznaÄiÅ¥ podľa filtra" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "OznaÄiÅ¥ URL podľa hostiteľa a prípony súboru" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Toto obnoví vÅ¡etky oznaÄené URL." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Hostiteľ" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Prípona súboru" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Základ hypertextových odkazov" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "OznaÄiÅ¥ _vÅ¡etko" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "NeoznaÄiÅ¥ _žiadne" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_OznaÄiÅ¥ podľa filtra..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "napríklad" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Od:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Do:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "Äíslice:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_Od:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "citlivé na veľkosÅ¥ písmen" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Žiadny znak divokej karty (*) v položke URL." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL nie je platná" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Žiadny znak v položkách 'Od' alebo 'Do'." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Náhľad" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Používateľské rozhranie" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Šírka pásma" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "PlánovaÄ" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Zásuvný modul" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Ostatné" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_PovoliÅ¥ monitor schránky" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Tichý režim" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Predvolený index kategórií" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "PridaÅ¥ do N-tej kategórie, ak nie je žiadna zodpovedajúca kategória" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "MonitorovaÅ¥ schránku pre konkrétne typy súborov:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Oddeľte typy pomocou znaku '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Tu môžete používaÅ¥ regulárne výrazy." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Potvrdenie" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "ZobraziÅ¥ potvrdovací dialóg pri ukonÄení" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "PotvrdiÅ¥ pri vymazávaní súborov" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Systémový panel" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Vždy zobraziÅ¥ ikonu v oznamovacej oblasti" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "MinimalizovaÅ¥ po Å¡tarte do oznamovacej oblasti" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "MinimalizovaÅ¥ do panela po zavretí okna" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "PoužiÅ¥ Ubuntu indikátor aplikácie" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "PovoliÅ¥ režim offline po Å¡tarte" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Oznámenie o zaÄatí sÅ¥ahovania" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Zvuk pri dokonÄení sÅ¥ahovania" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Toto bude maÅ¥ vplyv na vÅ¡etky pluginy." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Globálne limity rýchlostí" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Maximálna rýchlosÅ¥ nahrávania" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Maximálna rýchlosÅ¥ sÅ¥ahovania" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "DokonÄenie automatických akcií" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Vlastný príkaz:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Vlastný príkaz ak dôjde k chybe:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Automaticky ukladaÅ¥" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Interval:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minútach" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Nastavenia príkazového riadku" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "PoužívaÅ¥ predvolene '--quiet'" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Plugin odpovedajúci zadaniu:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Možnosti pluginu Aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "Overovací tajný token RPC" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Globálne limity rýchlostí sú len pre aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_SpustiÅ¥ aria2 po Å¡tarte" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Vypnúť aria2 po ukonÄení" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "SpustiÅ¥ aria2 na lokálnom zariadení" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Umiestnenie" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumenty" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Po zmene musíte reÅ¡tartovaÅ¥ uGet." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Súbor" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "PrieÄinok" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Položka" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Hodnota" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "KopírovaÅ¥ _vÅ¡etko" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "ZobraziÅ¥ okno" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Režim offline" uget-2.2.3/po/LINGUAS0000664000175000017500000000025213602733703011053 00000000000000# Set of available languages. ar be bg bn_BD ca cs da de es fa fr he hr hu id it ja ka_GE kk ku lt or_IN pl pt_BR ro ru sk_SK sr sr@latin sv tr uk uz@Latn vi zh_CN zh_TW uget-2.2.3/po/or_IN.po0000664000175000017500000013552013602733704011404 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Oriya (India) (http://www.transifex.com/uget/uget/language/or_IN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: or_IN\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "ସଂଯୋଗ କରà­à¬›à¬¿......" #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "ପà­à¬°à­‡à¬°à¬£ କରାଯାଉଛି..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "ପà­à¬¨à¬ƒ-ଚେଷà­à¬Ÿà¬¾ କରନà­à¬¤à­" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "ଆହରଣ ସମାପà­à¬¤ ହେଲା" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "ସମାପà­à¬¤" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "ପà­à¬¨à¬ƒ-ଆରମà­à¬­à¬¯à­‹à¬—à­à­Ÿ" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "ପà­à¬¨à¬ƒ-ଆରମà­à¬­à¬¯à­‹à¬—à­à­Ÿ ନà­à¬¹à­‡à¬" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "ନିରà­à¬—ମ ଫାଇଲର ପà­à¬¨à¬ƒ-ନାମକରଣ କରି ହେବ ନାହିà¬" #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "ହୋଷà­à¬Ÿ ସହିତ ଯୋଗାଯୋଗ କରାଯାଇ ପାରà­à¬¨à¬¾à¬¹à¬¿à¬" #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "ଫୋଲà­à¬¡à¬° ତିଆରି କରିହେବନାହିà¬" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "ଫାଇଲ ତିଆରି କରି ହେବନାହିଠ(ଖରାପ ନାମ ଅଥବା à¬à¬¹à¬¿ ନାମରେ ଫାଇଲ ଆଗରୠଉପଲବà­à¬§)" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "ଫାଇଲ ଖୋଲି ହେଉନାହିà¬" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "ସମà­à¬¬à¬³à¬° ଅଭାବ (ଡିସà­à¬• ଭରà­à¬¤à¬¿ ଅଥବା ସà­à¬®à­ƒà¬¤à¬¿à¬° ଅଭାବ)" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "ନିରà­à¬—ମ ଫାଇଲ ନାହିà¬" #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "ନିରà­à¬—ମ ବିନà­à­Ÿà¬¾à¬¸ ନାହିà¬" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "ମାତà­à¬°à¬¾à¬§à¬¿à¬• ପà­à¬¨à¬ƒ-ଚେଷà­à¬Ÿà¬¾" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "ଅସମରà­à¬¥à¬¿à¬¤ ଯୋଜନା (ଅଧିନିୟମ)" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "ଅସମରà­à¬¥à¬¿à¬¤ ଫାଇଲ" #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "ମାତà­à¬°à¬¾à¬§à¬¿à¬• ପà­à¬¨à¬ƒ-ନିରà­à¬¦à­à¬¦à­‡à¬¶à¬¨à¬¾" #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "ଆହରଣ ପରିଚାଳକ" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "ଅନà­à¬¬à¬¾à¬¦à¬•-କà­à¬°à­‡à¬¡à¬¿à¬Ÿ" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "କାରà­à¬¯à­à­Ÿà¬¸à¬¬à­" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "କà­à¬²à¬¿à¬ªà­-ବୋରà­à¬¡à­ ରୠନୂଆ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "ନୂଆ ଆହରଣ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "କà­à¬²à¬¿à¬ªà­-ବୋରà­à¬¡à­" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "କମାଣà­à¬¡ ଲାଇନ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "ଆହରଣ ଆରମà­à¬­ ହେଉଛି" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "ଆହରଣ ଶୃଙà­à¬–ଳା ଆରମà­à¬­ ହେଉଛି" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "ଆହରଣ ସମାପà­à¬¤ ହେଲା" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "ସମସà­à¬¤ ଶୃଙà­à¬–ଳାବଦà­à¬§ ଆହରଣ ସମାପà­à¬¤ ହେଲା" #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "ସà­à¬¥à¬¿à¬¤à¬¿" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "ବିଭାଗ" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "ନୂଆ ଆହରଣ ତିଆରି କରନà­à¬¤à­" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "New _Download..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "New _Category..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "New Clipboard _batch..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "New _URL Sequence batch..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "ନୂଆ ଟରେଣà­à¬Ÿ..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "ନୂଆ ମେଟାଲିଙà­à¬•..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "ଚୟନୀତ ଆହରଣକୠଚଳନକà­à¬·à¬® ହିସାବରେ ସେଟ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "ଚୟନୀତ ଆହରଣ ବିରତି ପାଇଠସେଟ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "ଚୟନୀତ ଆହରଣର ଗà­à¬£-ଧରà­à¬® ସà­à¬¥à¬¿à¬° କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "ଚୟନୀତ ଆହରଣକୠଉପରକୠସà­à¬¥à¬¾à¬¨à¬¾à¬¨à­à¬¤à¬°à¬¿à¬¤ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "ଚୟନୀତ ଆହରଣକୠତଳକୠସà­à¬¥à¬¾à¬¨à¬¾à¬¨à­à¬¤à¬°à¬¿à¬¤ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "ଚୟନୀତ ଆହରଣକୠସବà­à¬ à¬¾à¬°à­ ଉପରକୠସà­à¬¥à¬¾à¬¨à¬¾à¬¨à­à¬¤à¬°à¬¿à¬¤ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "ଚୟନୀତ ଆହରଣକୠସବà­à¬ à¬¾à¬°à­ ତଳକୠସà­à¬¥à¬¾à¬¨à¬¾à¬¨à­à¬¤à¬°à¬¿à¬¤ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "ନୂଆ ବିଭାଗ" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "ନକଲ କରନà­à¬¤à­ - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "ବିଭାଗ ବୈଶିଷà­à¬Ÿà­à­Ÿ" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "ଆହରଣ ଗà­à¬£-ଧରà­à¬®" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "ନୂଆ ଟରେଣà­à¬Ÿ" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "ନୂଆ ମେଟାଲିଙà­à¬•" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "ଟରେଣà­à¬Ÿ ଫାଇଲ ଖୋଲନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "ମେଟାଲିଙà­à¬• ଫାଇଲ ଖୋଲନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "ଲିଙà­à¬• " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "ଛବି " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "ଟେକà­à¬¸à¬Ÿ ଫାଇଲ" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "HTML ଫାଇଲରୠURL ଆମଦାନୀ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "ଟେକà­à¬¸à¬Ÿ ଫାଇଲରୠURL ଆମଦାନୀ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "କà­à¬°à¬®à¬¾à¬¨à­à¬¸à¬¾à¬°à­‡ ସଜà­à¬œà¬¿à¬¤ URL" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "କà­à¬²à¬¿à¬ªà­-ବୋରà­à¬¡à­ ରେ କୌଣସି URL ମିଳିଲା ନାହିà¬" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "କà­à¬²à¬¿à¬ªà­-ବୋରà­à¬¡à­ ବà­à­Ÿà¬¾à¬š" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "ତà­à¬°à­à¬Ÿà¬¿" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "ବାରà­à¬¤à¬¾" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "ଚୟନୀତ %d ଟି ବସà­à¬¤à­" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "uGet ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•ାରୀ, ଧà­à­Ÿà¬¾à¬¨ ଦିଅନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "uGetର ଆଗାମୀ ଭବିଷà­à­Ÿà¬¤ ଓ ଉନà­à¬¨à¬¤à¬¿ ପାଇଠଆମେ à¬à¬• ଆରà­à¬¥à¬¿à¬• ସାହାଯà­à­Ÿ କାରà­à¬¯à­à­Ÿà¬•à­à¬°à¬® ଚଳାଇଛୠ। ଦୟାକରି କà­à¬²à¬¿à¬• କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "à¬à¬ à¬¾à¬°à­‡" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "ଦୟାକରି à¬à¬¹à¬¿ uGet ପାଇଠà¬à¬¹à¬¿ ପà­à¬°à¬¶à­à¬¨à­‹à¬¤à­à¬¤à¬° ପତà­à¬°à¬Ÿà¬¿ ପୂରଣ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "ପà­à¬°à¬¶à­à¬¨à­‹à¬¤à­à¬¤à¬° କାରà­à¬¯à­à­Ÿà¬•à­à¬°à¬®à¬°à­‡ ଭାଗ ନେବାପାଇଠà¬à¬ à¬¾à¬°à­‡ କà­à¬²à¬¿à¬• କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Category _name:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Active _downloads:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "ସମାପà­à¬¤à¬¿à¬° କà­à¬·à¬®à¬¤à¬¾:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "ପà­à¬¨à¬ƒ-ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କà­à¬·à¬®à¬¤à¬¾:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "ସତରେ ପà­à¬°à¬¸à­à¬¥à¬¾à¬¨ କରିବେ ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "ଆପଣ ନିଶà­à¬šà¬¿à¬¤ କି ଆପଣ ପà­à¬°à¬¸à­à¬¥à¬¾à¬¨ କରିବାକୠଚାହାନà­à¬¤à¬¿" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "ସତରେ ଫାଇଲଗà­à¬¡à¬¿à¬• ଅପସାରଣ କରିବାକୠଚାହାନà­à¬¤à¬¿ ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "ଆପଣ à¬à¬¹à¬¿ ଫାଇଲସବୠଅପସାରଣ କରିବାକୠନିଶà­à¬šà¬¿à¬¤ କି ?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "ମିରର ସବà­:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "ଫାଇଲ:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "ଫୋଲà­à¬¡à¬° ବାଛନà­à¬¤à­" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Folder:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "ପà­à¬°à­‡à¬·à¬•:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Runnable" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_ause" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "ଲଗà­-ଇନà­" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "ଉପଭୋକà­à¬¤à¬¾:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "ପà­à¬°à¬¬à­‡à¬¶ ସଂକେତ:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "କୂକି ଫାଇଲ:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "କà­à¬•à­€ ଫାଇଲ ବାଛନà­à¬¤à­:" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "ପୋଷà­à¬Ÿ ଫାଇଲ:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "ପୋଷà­à¬Ÿ ଫାଇଲ ବାଛନà­à¬¤à­" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "ଇଉଜର à¬à¬œà­‡à¬£à­à¬Ÿ:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Retry _limit:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "ଗଣନା" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Retry _delay:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "ସେକେଣà­à¬¡" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "ସରà­à¬¬à¬¾à¬§à¬¿à¬• ଅପଲୋଡ ବେଗ:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "କି.ବାଇଟ ସେକେଣà­à¬¡à¬ªà¬¿à¬›à¬¾" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "ସରà­à¬¬à¬¾à¬§à¬¿à¬• ଆହରଣ ବେଗ:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "ଟାଇମଷà­à¬Ÿà¬¾à¬®à­à¬ª ନେଇ ଆସନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_File" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Batch Downloads" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_Clipboard batch..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL Sequence batch..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Text file import (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML file import (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Export to Text file (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Edit" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Clipboard _Monitor" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "ସାମà­à¬ªà­à¬°à¬¤à¬¿à¬• ଆହରଣ ବିନà­à­Ÿà¬¾à¬¸à¬—à­à­œà¬¿à¬• ପà­à¬°à­Ÿà­‹à¬— କରନà­à¬¤à­" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Help" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Settings..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_View" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Toolbar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "ସà­à¬¥à¬¿à¬¤à¬¿-ସୂଚିକା" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Summary" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Summary _Items" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Name" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Folder" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Message" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Download _Columns" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Complete" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Size" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Percent '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Elapsed" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Left" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "ବେଗ" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "ଅପ ବେଗ" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "ଅପଲୋଡ ହୋଇଛି" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "ଅନà­à¬ªà¬¾à¬¤" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Retry" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "ଆରମà­à¬­ ସମୟ" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "ସମାପà­à¬¤à¬¿ ସମୟ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Category" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_New Category..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Delete Category" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Download" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "ବଳପୂରà­à¬¬à¬• ଆରମà­à¬­ କରନà­à¬¤à­" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Move To" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "ଅନଲାଇନ ସାହାଯà­à­Ÿ ନିଅନà­à¬¤à­" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "ନଥିପତà­à¬°" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "ସହାୟତା କେନà­à¬¦à­à¬°" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "ମତାମତ ଦିଅନà­à¬¤à­" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "ତà­à¬°à­à¬Ÿà¬¿ ବିଷୟରେ ସୂଚନା ଦିଅନà­à¬¤à­" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "ଅଦà­à­Ÿà¬¤à¬¨ ଖୋଜନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "ବିନà­à­Ÿà¬¾à¬¸" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr " '%s' ଫାଇଲ ପାଇଠପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ ପà­à¬°à­Ÿà­‹à¬— ଆରମà­à¬­ ହୋଇପାରà­à¬¨à¬¿" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - à¬à¬¹à¬¿ ଫୋଲà­à¬¡à¬°à¬Ÿà¬¿ ଉପଲବà­à¬§ ନାହିà¬" #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "ସାଧାରଣ" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "ଉନà­à¬¨à¬¤" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "ବିଭାଗ ବିନà­à­Ÿà¬¾à¬¸" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "ନୂତନ ଆହରଣ à­§ ପାଇଠପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ à­¨" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "ଅନାମଧେୟ" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "ପà­à¬¨à¬ƒ-ବà­à­Ÿà¬¬à¬¹à­ƒà¬¤" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "ଧାଡି" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "ସକà­à¬°à¬¿à­Ÿ" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "ନାମ" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "ସମାପà­à¬¤" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "ଆକାର" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "ଅତିକà­à¬°à¬¾à¬¨à­à¬¤ ହୋଇଛି" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "ବାମ" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "ପରିମାଣ" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "ପà­à¬°à¬•à­à¬¸à¬¿:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­à¬¨à¬¾à¬¹à¬¿à¬" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "ପୂରà­à¬¬à¬¨à¬¿à¬°à­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "ହୋଷà­à¬Ÿ:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "ପୋରà­à¬Ÿ:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "ସକେଟà­:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "ସକେଟୠଆରà­à¬—à­à¬®à­‡à¬£à­à¬Ÿ:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "ଉପାଦାନ:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "ସୋମ" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "ମଙà­à¬—ଳ" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "ବà­à¬§" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "ଗà­à¬°à­" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "ଶà­à¬•à­à¬°" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "ଶନି" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "ରବି" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Enable Scheduler" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "ବନà­à¬¦ କରନà­à¬¤à­" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- ସମସà­à¬¤ କାରà­à¬¯à­à­Ÿ ବନà­à¬¦ କରନà­à¬¤à­" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "ସà­à¬µà¬¾à¬­à¬¾à¬¬à¬¿à¬•" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- run task normally" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "ସମସà­à¬¤" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "କୌଣସିଟି ନà­à¬¹à­‡à¬" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "ପରିସà­à¬°à¬¬à¬£ ହିସାବରେ ଚିହà­à¬¨à¬¿à¬¤ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "URLଗà­à¬¡à¬¿à¬•ୠହୋଷà­à¬Ÿ à¬à¬¬à¬‚ ଫାଇଲ à¬à¬•à­à¬¸à¬Ÿà­‡à¬¨à¬¸à¬¨ ହିସାବରେ ଚିହà­à¬¨à¬¿à¬¤ କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "à¬à¬¹à¬¾ ସବୠURLର ମାରà­à¬•ଗà­à¬¡à¬¿à¬•ୠପà­à¬¨à¬ƒ-ସà­à¬¥à¬¾à¬ªà¬¨ କରିଦେବ" #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "ହୋଷà­à¬Ÿ" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "ଫାଇଲ à¬à¬•à­à¬¸à­à¬Ÿ" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "ମୂଳ ହାଇପରà­à¬Ÿà­‡à¬•à­à¬¸à­à¬Ÿ ରେଫରେନà­à¬¸" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Mark _All" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Mark _None" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Mark by filter..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "ଯେପରିକି:" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_From:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "ପà­à¬°à¬¤à¬¿:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "ସଂଖà­à­Ÿà¬¾:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "F_rom:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "କେସà­-ସଂବେଦନଶୀଳ" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "URL ରେ କୌଣସି ୱାଇଲà­à¬¡à¬•ାରà­à¬¡(*) ବରà­à¬£ ଉପସà­à¬¥à¬¿à¬¤ ନାହିà¬" #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL ବୈଧ ନà­à¬¹à­‡à¬" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "'From' ଅଥବା 'To' ସà­à¬¥à¬¾à¬¨à¬°à­‡ କିଛି ଅକà­à¬·à¬° ଉପସà­à¬¥à¬¿à¬¤ ନାହିà¬" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "ପà­à¬°à¬¾à¬•à­-ଦରà­à¬¶à¬¨" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "ନିରà­à¬˜à¬£à­à¬Ÿà¬•" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "ପà­à¬²à¬—à­-ଇନà­" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "ଅନà­à­Ÿà¬¾à¬¨à­à­Ÿ" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Quiet mode" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "ପà­à¬°à¬•ାର ଗà­à¬¡à¬¿à¬•à­ '|' ଦà­à¬µà¬¾à¬°à¬¾ ଅଲଗା କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "à¬à¬ à¬¾à¬°à­‡ ଆପଣ ଚିରାଚରିତ à¬à¬•à­à¬¸à¬ªà­à¬°à­‡à¬¸à¬¨ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରିପାରନà­à¬¤à¬¿" #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "ଫାଇଲ ଅପସାରଣ କଲାବେଳେ ସୂଚିତ କରାନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "ଟà­à¬°à­‡ ଚିତà­à¬°à¬¸à¬‚କେତ ସବà­à¬¬à­‡à¬³à­‡ ଦେଖାନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "କମà­à¬ªà­à¬Ÿà¬° ଚାଲà­à¬¹à­‡à¬¬à¬¾ ମାତà­à¬°à­‡ ଟà­à¬°à­‡ ରେ ମିନିମାଇଜ କରିଦିଅନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "କମà­à¬ªà­à¬Ÿà¬° ଚାଲà­à¬¹à­‡à¬¬à¬¾ ମାତà­à¬°à­‡ ଅଫଲାଇନ ଧାରା ଚାଲୠକରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "ଆହରଣ ଆରମà­à¬­ ହେବାର ବିଜà­à¬žà¬ªà­à¬¤à¬¿" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "ଆହରଣ ସମାପà­à¬¤ ହେଲେ à¬à¬• ଧà­à­±à¬¨à¬¿ ଶà­à¬£à¬¾à¬¨à­à¬¤à­" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Interval:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "ମିନିଟ" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "କମାଣà­à¬¡-ଲାଇନ ବିନà­à­Ÿà¬¾à¬¸" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "'--quiet' ପୂରà­à¬¬-ନିରà­à¬¦à­à¬§à¬¾à¬°à¬¿à¬¤ ଭାବେ ବà­à­Ÿà¬¬à¬¹à¬¾à¬° କରନà­à¬¤à­" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Launch aria2 on startup" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Shutdown aria2 on exit" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "ପଥ" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Arguments" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "ଫାଇଲ" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "ଫୋଲà­à¬¡à¬°" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "ବସà­à¬¤à­" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "ମୂଲà­à­Ÿ" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Copy _All" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "ୱିଣà­à¬¡à­‹ ଦେଖାନà­à¬¤à­" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Offline Mode" uget-2.2.3/po/tr.po0000664000175000017500000013254613602733704011030 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Emin Tufan , 2016-2017 # yakup , 2013 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-10-29 17:15+0000\n" "Last-Translator: Emin Tufan \n" "Language-Team: Turkish (http://www.transifex.com/uget/uget/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Parola Yönetici Artalanı: uget\n\n%s adresine SSH ile baÄŸlanmaya çalışılıyorken, bilinen ve güvenilen ana makineler dosyasına karşılık hostkey doÄŸrulamasında sorun oluÅŸtu çünkü hostkey bulunamadı.\n\n%s'in hostkey'ini bilinen ana makineler dosyasına ekleyerek, bu ve gelecek baÄŸlantılar için, bu baÄŸlantının güvenli olarak görülmesini ister misiniz?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Tüm Kategoriler" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "BaÄŸlanıyor..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Gönderiliyor..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Yeniden dene" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "İndirme tamamlandı" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Bitti" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Devam Edebilir" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Devam Edemez" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Çıktı dosyası yeniden adlandırılamadı." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "ana makineye baÄŸlanamadı." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Dizin oluÅŸturulamadı." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Dosya oluÅŸturulamadı (geçersiz dosya ismi veya dosya zaten mevcut)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Dosya açılamadı." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "İş parçacığı oluÅŸturulamıyor." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Geçersiz kaynak (farklı dosya boyutu)" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Yetersiz kaynak (disk dolu veya bellek yetersiz)" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Çıktı dosyası yok." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Çıktı ayarları yok." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Çok fazla yeniden deneme." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Desteklenmeyen ÅŸablon (protokol)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Desteklenmeyen dosya." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "gönderme dosyası bulunamadı." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "çerez dosyası bulunamadı." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Bu video silinmiÅŸ." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Video bilgisi alınırken hata oluÅŸtu." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Video web sayfası alınırken hata oluÅŸtu." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "YouTube adresinde video_id bulunamadı." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: bilinmeyen hata meydana geldi." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: zaman aşımı meydana geldi." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: kaynak bulunamadı." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 'kaynak bulunamadı' hatasının numarasını gördü. --max-file-not-found seçeneÄŸine bak" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: hız çok yavaÅŸ." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: aÄŸ sorunu meydana geldi." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: tamamlanmamış indirmeler." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Kaynak yetersiz" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: parça geniÅŸliÄŸi .aria2 denetim dosyasındakinden farklı." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 aynı dosyayı indiriyor." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 aynı hash bilgisine sahip torrenti indiriyor." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: dosya zaten mevcut. --allow-overwrite seçeneÄŸine bakın." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: mevcut dosya açılamıyor." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: yeni dosya oluÅŸturulamıyor ya da var olan dosya kırpılamıyor." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: dosya G/Ç hatası meydana geldi." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: isim çözümleme baÅŸarısız." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: Metalink belgesi ayrıştırılamadı." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP komutu baÅŸarısız." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP yanıt baÅŸlığı kötü ya da beklenmedik." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Çok fazla yönlendirme." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP yetkilendirmesi baÅŸarısız." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: bencode'lenmiÅŸ dosya ayrıştırılamıyor (çoÄŸunlukla .torrent dosyası)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: torrent dosyası bozuk ya da eksik bilgi içeriyor." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet adresi kötü." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: kötü/tanınmayan seçenek ya da beklenmeyen seçenek deÄŸeri verildi." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: uzak sunucu isteÄŸi iÅŸleyemiyor." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: JSON-RPC isteÄŸi ayrıştırılamıyor." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Yanıt yok. aria2 kapalı mı?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid kaldırıldı." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Ortam baÄŸlantısı alınamadı." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Ortam eÅŸleÅŸmedi." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "İndirme Yöneticisi" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "YiÄŸit AteÅŸ\nEmin Tufan Çetin " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet Kurucusu:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet Tasarı Yöneticisi:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "görevler" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Panodan Yeni" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Yeni İndirme" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Pano" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Komut satırı" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Hata OluÅŸtu" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "İndirilirken hata oluÅŸtu." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "İndirme BaÅŸlatılıyor" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "İndirme kuyruÄŸu baÅŸlatılıyor." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "İndirme Tamamlandı" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Kuyruktaki tüm indirmeler tamamlandı." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Durum" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Bölüm" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Yeni indirme oluÅŸtur" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Yeni İn_dirme..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Yeni _Bölüm..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Yeni _çoklu pano..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Yeni _URL Dizin yığını..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Yeni Torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Yeni Metalink..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Tüm ayarları kaydet" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Seçili indirmeyi çalıştırılabilir olarak belirle" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Seçili indirmeyi duraklat" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Seçili indirmenin özellikleri" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Seçili indirmeyi yukarı taşı" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Seçili indirmeyi aÅŸağı taşı" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Seçili indirmeyi en üste taşı" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Seçili indirmeyi en alta taşı" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Yeni Bölüm" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Kopyala -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Bölüm Özellikleri" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "İndirme Özellikleri" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Yeni Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Yeni Metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Torrent dosyası aç" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrent dosyası (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Metalink dosyası aç" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Kategori dosyası kaydetme baÅŸarısız." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Kategori dosyası yüklemesi baÅŸarısız." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Kategori dosyası kaydet" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Kategori dosyası aç" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON dosyası (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "BaÄŸlantı " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Resim " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Metin Dosyası" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "HTML dosyasından URL aktar" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML dosyası (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Metin dosyasından URL aktar" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Düz metin dosyası" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "URL'leri metin dosyasına aktar" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL Dizin Yığını" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Panoda URL bulunamadı." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Tüm URL'ler mevcut." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Panodan çoklu" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Yeni" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Hata" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "İleti" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d öge seçildi" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "uGet'çiler Dikkat:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "uGet'in gelecekteki geliÅŸtirmeleri için Donation Drive kullanıyoruz, lütfen tıklayın" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "BURADA" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "Lütfen uGet için bu hızlı Kullanıcı Anketini doldurun." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "anketi doldurmak için buraya tıklayın" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Bölüm _adı:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Etkin _indirmeler:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Bitenlerin Kapasitesi:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Geri Dönüşüm Kapasitesi:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI EÅŸleÅŸme koÅŸulları" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "EÅŸleÅŸen _Ana Makineler:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "EÅŸleÅŸen _Åžemalar:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "EÅŸleÅŸen _Türler:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Gerçekten çıkılsın mı?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Çıkmak istediÄŸinize emin misiniz?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Dosyalar kesin olarak silinsin mi?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Dosyaları silmek istediÄŸinizden emin misiniz?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Bölüm kesin olarak silinsin mi?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Bölümü silmek istediÄŸinize emin misiniz?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Bana yeniden sorma" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Yansılar:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Dosya:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Dizin Seç" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Dizin:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Yönlendiren:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Azami BaÄŸlantı:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "Çalıştı_rılabilir" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "Dur_aklat" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Oturum aç" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Kullanıcı:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Parola:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Çerez dosyası:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Çerez Dosyası Seç" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Gönderme dosyası:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Gönderme Dosyası Seç" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Kullanıcı Etmeni:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Yeniden deneme _sınırı:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "deneme" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Yeniden _deneme gecikmesi:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "saniye" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Azami yükleme hızı:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Azami indirme hızı:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Zaman damgasını al" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Dosya" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Çoklu İndirme" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Çoklu _pano..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL Dizin yığını..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Metin dosyasını içe ak_tar (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML dosyasını içe aktar (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "M_etin dosyasına dışarı aktar (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "Kateg_ori Aç..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "Kategoriyi farklı _kaydet..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Tüm _ayarları kaydet" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Çevrim Dışı Kip" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "Düz_enle" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Pano _İzleyici" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Pano usulca çalışıyor" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Komut satırı usulca çalışıyor" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Var olan URI'yi atla" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Son indirme ayarlarını uygula" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "Tamamlanış _KendiliÄŸinden Eylemleri" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Devre dışı bırak" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Uyut" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Beklet" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Kapat" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Yeniden baÅŸlat" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Özel" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Ayarı anımsa" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Yardım" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Ayarlar..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Görünüm" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Araç çubuÄŸu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Durum çubuÄŸu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Özet" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Özet _Ögeleri" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Ad" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Dizin" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_İleti" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "İndirme _Sütunları" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Tamamlanma" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Boyut" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Yüzde '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "G_eçen" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "Ka_lan" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Hız" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Yükleme Hızı" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Yüklendi" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Oran" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Yeniden dene" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Eklendi" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Tamamlandı" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Bölüm" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Yeni Bölüm..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Bölümü Sil" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_İndirme" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "Gir_diyi Sil" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Girdiyi ve _Dosyayı Sil" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Depolama _konumunu aç" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Zorla BaÅŸlat" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Taşı" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Öncelik" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Yüksek" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_OlaÄŸan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Düşük" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Çevrim İçi Yardım Alın" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Belgeleme" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Destek Forumu" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Geri Bildirim Gönder" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Bir Hata Bildir" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Klavye Kısayolları" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Güncellemeler için denetle" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Ayarlar" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "'%s' dosyası için varsayılan uygulama baÅŸlatılamıyor." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Bu dizin mevcut deÄŸil." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI mevcut" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Bu URI zaten var, devam etmek istediÄŸine emin misin?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Genel" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "GeliÅŸmiÅŸ" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Bölüm ayarları" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Yeni indirme 1 için varsayılan" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Varsayılan 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "adlandırılmamış" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Duraklatıldı" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Yükleniyor" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Tamamlandı" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Geri dönüştürüldü" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Kuyrukta" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Etkin" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Tüm Durumlar" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Ad" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Tamamlanma" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Boyut" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Geçen süre" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Kalan" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Miktar" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Vekil sunucu:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Kullanma" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Varsayılan" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Ana Makine:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Soket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Soket deÄŸerleri:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Nesne:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Pzt" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Sal" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Çar" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Per" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Cum" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Cmt" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Paz" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "Zamanlayıcıyı _EtkinleÅŸtir" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Kapat" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- tüm görevi durdur" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "OlaÄŸan" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- görevi olaÄŸan biçimde yürüt" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Tümü" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "BoÅŸ" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Süzgece göre imle" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "URL'leri ana makine VE dosya uzantısına göre imle" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Bu, tüm imli URL'leri sıfırlayacak." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Ana Makine" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Dosya Uzantısı" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Temel üst metin referansı" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "_Tümünü İmle" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "İmi _Kaldır" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "Süzgece göre _imle..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "örn." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "Kaynak:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Alıcı:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "basamak:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "K_aynak:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "büyük-küçük harfe hassas" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "URL giriÅŸinde özel karakter(*) yok." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "Geçersiz URL." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "'Kaynak' veya 'Alıcı' giriÅŸi boÅŸ." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Ön izleme" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Kullanıcı Arayüzü" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Bant geniÅŸliÄŸi" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Zamanlayıcı" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Eklenti" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Ortam web sitesi" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "DiÄŸerleri" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "Pano izleyiciyi _etkinleÅŸtir" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Sessiz kip" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Öntanımlı kategori dizini" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "EÅŸleÅŸen kategori yoksa N. kategoriye ekleniyor." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "Ortam websitesinin URL'sini _izle" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Belirtilen dosya türleri için panoyu izle:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Türleri '|' karakteri ile ayır." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Burada düzenli ifadeleri kullanabilirsiniz." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Onay" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Kapatırken onay kutusu göster" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Dosyalar silinirken onayla" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Sistem Tepsisi" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Küçük simgeyi her zaman göster" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Tepsiye küçültülmüş olarak baÅŸlat" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Pencere kapatıldığında sistem tepsisine küçült" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Ubuntu App Indicator'u kullan" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "BaÅŸlangıçta çevrim dışı kipi etkinleÅŸtir" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "İndirme baÅŸlıyor bildirimi" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "İndirme bittikten sonra ses çıkar" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "GeniÅŸ simge göster" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Bu tüm eklentileri etkileyecek." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Genel hız sınırı" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Azami yükleme hızı" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Azami indirme hızı" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Tamamlanış KendiliÄŸinden Eylemleri" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Özel komut:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Hata oluÅŸursa özel komut:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "KendiliÄŸinden k_aydet" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Aralık:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "dakika" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Komut Satırı Ayarları" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Varsayılan olarak \"--quiet\" kullan" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Eklenti eÅŸleÅŸme düzeni:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 eklenti seçenekleri" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC yetkilendirme gizli belirteci" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Yalnızca aria2 için genel hız sınırı" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "BaÅŸlangıçta aria2'yi ça_lıştır" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "Çıkışta aria2'yi _kapat" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "aria2'yi yerel aygıtta çalıştır" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Yol" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "DeÄŸerler" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "DeÄŸiÅŸtirdikten sonra uGet'i yeniden baÅŸlatmalısınız." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Ortam eÅŸleÅŸme kipi:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "EÅŸleÅŸme koÅŸulları" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Nitelik:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Tür:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Dosya" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Dizin" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Öge" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "DeÄŸer" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Tümünü Kopy_ala" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Pencereyi göster" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Çevrim Dışı Kip" uget-2.2.3/po/ChangeLog0000664000175000017500000000115213602733703011600 00000000000000Current translation files: https://www.transifex.com/projects/p/uget/ Former Translators: * ar.po: Arabic - Safa Alfulaij * be.po: Belarusian - Mihas Varantsou * cs.po: Czech - PÅ™elozil:WastingDouglas * de.po: German - Alexander Haeussler * es.po: Spanish - Victor Emmanuel * hu.po: Hungarian - Kurják Richárd * fr.po: French - jc1 * it.po: Italian - Giovanni Santini * pl.po: Polish - MiÅ› Uszatek * ru.po: Russian - Mihas Varantsou * tr.po: Turkish - YiÄŸit AteÅŸ * uk.po: Ukrainian - Сергій Дубик * zh_CN.po: Simplified Chinese - Liu Hao * zh_TW.po: Traditional Chinese - C.H. Huang uget-2.2.3/po/vi.po0000664000175000017500000013211313602733704011007 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Tran Thai Hoa , 2015 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Vietnamese (http://www.transifex.com/uget/uget/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Danh mục" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Äang kết nối..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Äang truyá»n dữ liệu..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Thá»­ lại" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Tải vá» hoàn tất" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Äã xong" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Có thể phục hồi lại" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Không thể phục hồi lại" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Không thể đổi tên tập tin đầu ra." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "không thể kết nối đến máy chá»§." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Không thể tạo thư mục." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Không thể tạo thư mục (tên tập tin không hợp lệ hoặc tập tin không tồn tại)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Không thể mở tập tin." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Không thể tạo tiến trình" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Nguồn không chính xác(dung lượng tệp khác nhau)" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Nguồn tài nguyên bị giá»›i hạn (ổ đĩa không đủ dung lượng hoặc không đủ bá»™ nhá»›)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Không có tập tin đầu ra." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Không có thiết lập dành cho việc xuất dữ liệu." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Quá nhiá»u lần cố gắng tải lại." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Giản đồ không được há»— trợ (giao thức)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Tập tin không được há»— trợ" #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: Lá»—i không xác định" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: Qúa thá»i gian" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: Nguồn không tồn tại" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: Tốc độ qúa chậm" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: Mạng có vấn Ä‘á»" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: Không hoàn thành tải" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Vượt qúa tài nguyên" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 Ä‘ang tải tệp tương tá»±" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Quá nhiá»u lần chuyển hướng." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP xác thá»±c thất bại" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: tệp torrent bị lá»—i hoặc thiếu thông tin" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI qúa tệ" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Không có phản hồi. Aria2 sẽ tắt?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Trình quản lý" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Dá»± án Vetati" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "các tác vụ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Tạo phần tải vá» má»›i từ bá»™ nhá»› ảo" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Tạo má»™t phần tải vá» má»›i" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Bá»™ nhá»› ảo" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Chế độ dòng lệnh" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Xảy ra lá»—i" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Lá»—i trong khi tải" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Äang bắt đầu tải vá»" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Äang bắt đầu tải vỠđối tượng trong danh sách đợi." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Tiến Trình Tải Vá» Äã Hoàn Tất" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Tiến trình tải vá» cá»§a toàn bá»™ các đối tượng trong danh sách đợi đã được hoàn tất." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Trạng thái" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Phân loại" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Tạo má»™t phần tải vá» má»›i" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Tạo phần tải _vá» má»›i..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Tạo _phân loại má»›i..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Truyá»n dữ liệu má»›i _từ bá»™ nhá»› ảo..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Tạo chuá»—i đưá»ng dẫn liên tiếp _má»›i..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Tạo torrent má»›i..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Tạo má»›i metalink..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Lưu toàn bá»™ thiết lập" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Chỉnh các các phần tải vỠđã chá»n có thể chạy được" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Chỉnh các các phần tải vỠđã chá»n có thể tạm dừng được" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Chỉnh thuá»™c tính các các phần tải vỠđã chá»n" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Di chuyển các phần tải vỠđã chá»n lên trên" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Di chuyển các phần tải vỠđã chá»n xuống dưới" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Di chuyển các phần tải vỠđã chá»n lên trên cùng" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Di chuyển các phần tải vỠđã chá»n xuống dưới cùng" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Phân loại má»›i" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Sao chép -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Thuá»™c tính cá»§a phân loại" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Thuá»™c tính tải vá»" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Tạo torrent má»›i" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Tạo má»›i metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Mở tập tin torrent" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Mở tập tin metalink" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Liên kết" #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Hình ảnh" #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Tập tin Văn bản" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Nhập đưá»ng dẫn liên kết từ tập tin HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Nhập đưá»ng dẫn liên kết từ tập tin văn bản" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Chuá»—i đưá»ng dẫn liên tiếp" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Không tìm thấy chuá»—i đưá»ng dẫn liên tiếp trong bá»™ nhá»› ảo." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Chuyển dữ liệu từ bá»™ nhá»› ảo sang" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Má»›i" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Xảy ra lá»—i" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Thông báo" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Äã chá»n %d đối tượng" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Xin ngưá»i dùng lưu ý:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "chúng tôi hiện Ä‘ang nhận sá»± á»§ng há»™ tài chính để có thể phát triển dá»± án hÆ¡n nữa, hãy click vào" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "TẠI ÄÂY" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "hãy Ä‘iá»n vào bảng khảo sát sau đây" #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "hãy click vào đây để tham gia khảo sát" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Tên _phân loại:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Các _phần tải vá» Ä‘ang được thá»±c thi:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Mức độ hoàn thành:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Công suất tái chế:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Bạn muốn thoát?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Bạn muốn thoát hoàn toàn khá»i chương trình?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Bạn có muốn thá»±c sá»± xóa những tập tin này?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Bạn có thá»±c sá»± muốn xóa những tập tin này hay không?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Bạn muốn xóa mục này?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Bạn muốn xóa mục này?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Không yêu cầu lần nữa" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Phần phụ:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Tập tin:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Chá»n thư mục" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Thư mục:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Phần tham chiếu:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Kết nối tối Ä‘a:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Có thể chạy được" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "Tạ_m ngưng" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Äăng nhập" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Ngưá»i dùng:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Mật khẩu:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Các tập tin cookie:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Chá»n tập tin Cookie" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Tập tin post:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Chá»n tập tin post" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Ngưá»i đại diện:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Giá»›i hạn số lần thá»­ lại:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "số lầ" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Äá»™ trá»… khi _thá»­ lại:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "giây" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Tốc độ tải lên tối Ä‘a:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/giây" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Tốc độ tải vá» tối Ä‘a:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Lưu lại dấu thá»i gian" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Tập tin" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Tải vá» liên tiếp" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_Chuyển liên tiếp dữ liệu từ bá»™ nhá»› ảo sang" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_Chuá»—i đưá»ng dẫn liên tiếp..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Nhập dữ liệu từ tập tin văn bản (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_Nhập dữ liệu từ tập tin HTML (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Xuất dữ liệu sang tập tin dạng văn bản (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Chế độ không kết nối" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Chỉnh sá»­a" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Quản lý bá»™ _nhá»› ảo" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Ãp dụng các thiết lập tải vá» gần đây" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Tắt" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Khởi động lại" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Mặc định" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Lưu cài đặt" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Dịch bởi Vetati" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Thiết lập..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Chế độ hiển thị" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Thanh công cụ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Thanh trạng thái" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Tóm tắt:" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Tóm tắt _các đối tượng" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Tên" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Thư mục" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_ÄÆ°á»ng dẫn liên kết" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Thông báo" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Cá»™t hiển thị tải _vá»" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Hoàn tất" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Kích thước" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Phần trăm '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Äã trôi qua" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Còn lại" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Tốc độ" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Tốc độ tải lên" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Äã tải lên" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Tỉ lệ" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Thá»­ lại" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "_ÄÆ°á»£c thêm vào" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "_Äã hoàn tất vào" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Phân loại" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Tạo phân loại má»›i..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Xóa phân loại" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Tải vá»" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Buá»™c phải bắt đầu tải" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Chuyển vào" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Mức độ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "Cao" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "Chuẩn" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "Thấp" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Nhận trợ giúp trá»±c tuyến" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Tài liệu hướng dẫn" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Diá»…n đàn há»— trợ" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Gá»­i phản hồi" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Báo cáo lá»—i" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Phím tắt" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Kiểm tra cập nhật" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Thiết lập" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Không thể khởi chạy ứng dụng mặc định dành cho việc mở tập tin '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Thư mục này không tồn tại." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI đã tồn tại" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "URI này đã tồn tại, bạn có muốn tiếp tục?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Tổng quan" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Nâng cao" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Thiết lập phân loại" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Mặc định cho phần tải vá» 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Mặc định 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "Chưa đặt tên" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Tạm dừng" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Äang gá»­i" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Äã xong" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Thùng rác" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Äang đợi" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Äang hoạt động" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Má»i trạng thái" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Tên" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Hoàn tất" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Kích thước" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Äã trôi qua" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Còn lại" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Số lượng" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy :" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Không sá»­ dụng" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Mặc định" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Máy chá»§:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Cổng kết nối:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket :" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Äối số mã mạng:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Phần tá»­ :" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "T2" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "T3" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "T4" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "T5" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "T6" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "T7" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "CN" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Bật phần thá»i khóa biểu tải" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Tắt" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- dừng lại tất cả các tác vụ" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Bình thưá»ng" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "-chạy tác vụ bình thưá»ng" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Tất cả" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Không có gì" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Äánh dấu dá»±a vào phần lá»c dữ liệu" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Äánh dấu các đưá»ng dẫn liên kết bằng máy chá»§ và Ä‘inh dạng tên tập tin." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Phần này sẽ cài đặt lại toàn bá»™ phần đánh dấu cá»§a các đưá»ng dẫn liên kết." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Máy chá»§" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Äịnh dạng tập tin." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "ÄÆ°á»ng dẫn liên kết" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Dá»±a trên phần tham chiếu văn bản siêu liên kết" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Äánh dấu _tất cả" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Không đánh _dấu phần nào" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Äánh dấu dá»±a vào phần lá»c dữ liệu..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "Ví dụ:" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Từ:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "_Äến:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "chữ số:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "T_ừ :" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "phân biệt chữ hoa-thưá»ng" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Không có ký tá»± (*) trong mục nhập URL." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "ÄÆ°á»ng dẫn liên kết không hợp lệ." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Không có ký tá»± trong mục 'Từ' hoặc 'Äến'." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Xem sÆ¡ lược" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Giao diện ngưá»i dùng" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Thá»i khóa biểu" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Tiện ích" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Các phần khác" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Có thể dùng clipboard" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Chế độ im lặng" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Ngăn cách các loại bằng ký tá»± '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Bạn có thể sá»­ dụng biểu thức thông thưá»ng ở đây." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Xác nhận khi xóa các tập tin" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Khay hệ thống" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Luôn hiển thị biểu tượng ở khay hệ thống" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Thu nhá» xuống khay hệ thống" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Ẩn tá»›i khay hệ thống khi đóng" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Bật chế độ offline khi khởi động" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Thông báo khi bắt đầu tải" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Phát âm thanh thông báo khi phần tải vỠđã được hoàn tất" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Gá»­i Ä‘i tối Ä‘a" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Tải vá» tối Ä‘a" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Tá»± động lưu" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Khoảng thá»i gian:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "phút" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Thiết lập chế độ dòng lệnh" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Sá»­ dụng dòng lệnh '--quiet' theo mặc định" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Cài đặt Aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Chạy aria3 khi khởi động" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Tắt aria2 khi thoát" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Chạy aria2 mặc định" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "ÄÆ°á»ng dẫn" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Äối số" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Bạn phải khởi động lại Uget sau khi cài đặt lại nó." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Tập tin" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Thư mục" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Äối tượng" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Giá trị" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Sao chép _tất cả" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Hiện cá»­a sổ" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "Chế Äá»™ _không có kết nối internet" uget-2.2.3/po/hr.po0000664000175000017500000012444113602733704011007 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # gogo , 2015 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Croatian (http://www.transifex.com/uget/uget/language/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Sve kategorije" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Povezivanje..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "PrenoÅ¡enje..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "PokuÅ¡aj ponovno" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Preuzimanje zavrÅ¡eno" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "ZavrÅ¡eno" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Izlazna datoteka ne može biti preimenovana." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "Nemoguće povezivanje s raÄunalom." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Mapa ne može biti stvorena" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Datoteka ne može bit stvorena (pogreÅ¡an naziv datoteke ili datoteka ne postoji)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Datoteka se ne može otvoriti" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Neispravan izvor (drugaÄija veliÄina datoteke)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Premalo resursa (nema slobodnog prostora na disku ili nema dovoljno memorije)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Nema izlazne datoteke." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Nema izlazne postavke." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "PreviÅ¡e ponovnih pokuÅ¡aja" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Nepodržana shema (protokol)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Nepodržana datoteka." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: dogodila se nepoznata greÅ¡ka." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: istek vremena." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: izvor nije pronaÄ‘en." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "PreviÅ¡e preusmjeravanja." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Upravitelj preuzimanja" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "prevoditelj-zasluge" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet osnivaÄ: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet Upravitelj projektom " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "zadaci" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Novo iz meÄ‘uspremnika" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Novo preuzimanje" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "MeÄ‘uspremnik" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Naredbeni redak" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Nastala je greÅ¡ka" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Nastala je greÅ¡ka pri preuzimanju." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Preuzimanje zapoÄinje" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Pokretanje preuzimanja u popisu Äekanja." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Preuzimanje zavrÅ¡eno" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Sva preuzimanja s popisa Äekanja su zavrÅ¡ena." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Stanje" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategorija" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Stvori novo preuzimanje" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Novo _preuzimanje..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nova _kategorija..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Novi torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nova metapoveznica..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Spremi sve postavke" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Pokreni odabrano preuzimanje" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Pauziraj odabrano preuzimanje" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Prikaži svojstva odabranog preuzimanja" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Pomakni odabrano preuzimanje gore" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Pomakni odabrano preuzimanje dolje" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Pomakni odabrano preuzimanje na vrh" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Pomakni odabrano preuzimanje na dno" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nova kategorija" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Kopiraj - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Svojstva kategorije" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Svojstva preuzimanja" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Novi torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nova metapoveznica" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Otvori datoteku torrenta" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Otvori datoteku metapoveznice" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Neuspjelo spremanje datoteke kategorije." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Neuspjelo uÄitavanje datoteke kategorije." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Spremi datoteku kategorije" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Otvori datoteku kategorije" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Poveznica " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Slika " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Tekstna datoteka" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Uvezi URL-ove s HTML datoteke" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Uvezi URL-ove s tekstne datoteke" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Izvezi URL-ove u tekstnu datoteku" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Nema pronaÄ‘enih URL-ova u meÄ‘uspremniku." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Svi URL-ovi su postojali." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "GreÅ¡ka" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Poruka" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Odabrano %d stavki" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Pozor uGetteri:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "pokrenuli smo prikupljanje donacija za budući razvoj uGet-a, kliknite ovdje" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "OVDJE" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "ispunite ovu brzu koriniÄku anketu za uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "kliknite ovdje za poÄetak ankete" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Naziv _kategorije:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Aktivna _preuzimanja:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Kapacitet zavrÅ¡enog:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Kapacitet obrisanog:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Stvarno želite izaći?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Jeste li sigurni da želite izaći?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Sigurno želite obristai datoteke?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Jeste li sigurni da želite obristi datoteke?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Sigurno želite obristai kategoriju?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Jeste li sigurni da želite obristi kategoriju?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Ne pitaj me ponovno" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Zrcalni poslužitelji:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Datoteka:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Odaberi mapu" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Mapa:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Maksimalno veza:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Pokreni" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_auza" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Prijava" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Korisnik:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Lozinka:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Datoteka kolaÄića:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Odaberi datoteku kolaÄića" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "KorisniÄki agent:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "OgraniÄenje _pokuÅ¡aja:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "pokuÅ¡aja" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Odgoda _pokuÅ¡aja:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "sekundi" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Maks brzinja slanja:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Maks brzina preuzimanja" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Prihvati vremenske oznake" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Datoteka" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Uvoz tekstne datoteke (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_Uvoz HTML datoteke (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Izvoz tekstne datoteke (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Otvori kategoriju..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Spremi kategoriju kao..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Spremi _sve postavke" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Uredi" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Nadgledanje _meÄ‘uspremnika" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Primijeni nedavne postavke preuzimanja" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "PrilagoÄ‘eno" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Zapamti postavke" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Pomoć" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Postavke..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Pogled" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Alatna traka" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Statusna traka" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Sažetak" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Stavke _sažetka" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Naziv" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Mapa" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Poruka" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Stupci _preuzimanja" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_ZavrÅ¡eno" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_VeliÄina" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Posto '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Pokrenuto" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Preostalo" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Brzina" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Brzina slanja" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Poslano" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Omjer" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_PokuÅ¡aj ponovno" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Dodano" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "ZavrÅ¡eno" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategorija" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nova kategorija..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_ObriÅ¡i kategoriju" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Preuzimanje" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Otvori _sadržajnu mapu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Prisili pokretanje" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Premjesti u" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Prioritet" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Visok" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normalan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Nizak" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Potražite pomoć online" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentacija" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Forum podrÅ¡ke" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Prijavite povratnu informaciju" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Prijavite greÅ¡ku" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "PreÄaci tipkovnice" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Provjerite ažuriranja" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Postavke" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Nemoguće pokretanje zadane aplikacije za datoteku '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Ova mapa ne postoji." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Općenito" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Napredno" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Postavke kategorije" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Zadano za novo preuzimanje 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Zadano 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "bezimeno" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Pauzirano" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Slanje" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "ZavrÅ¡eno" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Obrisano" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Na Äekanju" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktivno" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Sva stanja" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Naziv" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "ZavrÅ¡eno" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "VeliÄina" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Pokrenuto" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "ZavrÅ¡eno" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Kvantiteta" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ne koristi" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Zadano" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "RaÄunalo:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Ulaz:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Pon" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Uto" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Sri" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "ÄŒet" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Pet" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Sub" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Ned" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Omogući raspored" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "IskljuÄi" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- zaustavi sve zadatke" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normalno" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- pokreni zadatak normalno" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Sve" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Nepoznato" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "OznaÄi prema filteru" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "OznaÄi URL-ove prema raÄunalu I vrsti datoteke." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "" #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "RaÄunalo" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Vrsta datoteke." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Osnovna hipertekst preporuka" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "OznaÄi _sve" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "OznaÄi _niÅ¡ta" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_OznaÄi prema filteru..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "npr." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Od:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Na:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "znamenka:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "O_d:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "velika-mala slova" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Bez zamjenskih(*) znakova u URL unosu." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL nije valjan." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Nema znakova u 'Od' ili 'Na' unosu." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Pregled" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "KorisniÄko suÄelje" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Raspored" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Dodatak" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Ostalo" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Omogući nadgledanje meÄ‘uspremnika" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Tihi naÄin" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "_Nadgledaj meÄ‘uspremnik za odreÄ‘ene vrste datoteka:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Razdvoji vrste datoteka sa znakom '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Možete koristiti uobiÄajene izraze ovdje." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Potvrda" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Prikaži dijalog potvrde pri izlazu" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Potvrdi pri brisanju datoteka" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Traka sustava" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Uvijek prikaži ikonu trake sustava" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Smanji u traku sustava pri pokretanju" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Smanji u traku sustava pri zatvaranju prozora" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Korisit Ubuntu App Indikator " #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Omogući odspojeni naÄin pri pokretanju" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Obavijest pokretanja preuzimanja" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Zvuk zavrÅ¡etka preuzimanja" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Interval:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minuta" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Postavke naredbenog redka" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Koristi '--quiet' kao zadano" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Pokreni aria2 pri pokretanju" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Zatvori aria2 na izlazu" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Putanja" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumenti" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Datoteka" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Mapa" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Stavka" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Vrijednost" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Kopiraj _sve" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Prikaži prozor" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Odspojen naćin" uget-2.2.3/po/pt_BR.po0000664000175000017500000013412013602733704011377 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # carlo giusepe tadei valente sasaki , 2014,2016 # Rafael Fontenelle , 2013 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: carlo giusepe tadei valente sasaki \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/uget/uget/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Serviço de gerenciamento de senhas: uget\n\nHouve um problema na conexão SSH com %s : sua hostkey não foi encontrada no arquivo de hospedeiros conhecidos e confiáveis.\n\nGostaria de adicionar a hostkey de %s ao arquivo de hospedeiros conhecidos e definir essa conexão como confiável agora e futuramente?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Todas as categorias" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Conectando..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Transmitindo..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Tentar novamente" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Download concluído" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Finalizado" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Resumível" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Não resumível" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "O arquivo de saída não pode ser renomeado." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "não foi possível conectar ao host." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "A pasta não pôde ser criada." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "O arquivo não pôde ser criado (nome de arquivo inválido ou arquivo existe)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "O arquivo não pôde ser aberto." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Não foi possível criar a tarefa." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Fonte incorreta (tamanho do arquivo diferente)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Recursos insuficientes (disco cheio ou sem memória)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Nenhum arquivo de saída." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Nenhuma configuração de saída." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Número excessivo de tentativas." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Sem suporte ao esquema (protocolo)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Arquivo sem suporte." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "arquivo enviado não encontrado." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "arquivo de cookie não encontrado." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Esse vídeo foi removido." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Erro ao obter informações do vídeo." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Erro ao obter a página do vídeo." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "Nenhuma video_id encontrada na URL do YouTube." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: ocorreu um erro desconhecido." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: tempo excedido." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: recurso não encontrado." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 viu o erro de número específico de 'recurso não encontrado'. Veja --max-file-not-found option" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: velocidade muito baixa." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: ocorreu um problema na rede." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: downloads não encerrados." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Sem recursos" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: comprimento da peça diferente do arquivo de controle .aria2." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "O aria2 estava baixando o mesmo arquivo." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "O aria2 estava baixando o mesmo info hash de torrent." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: o arquivo já existe. Veja a opção --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: não foi possível abrir o arquivo existente." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: não foi possível criar um novo arquivo ou mesclar o arquivo existente." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: erro de I/O de arquivo." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: falha na resolução de nome." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: não foi possível analisar o documento Metalink." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: falha no comando FTP." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: cabeçalho de resposta HTTP errado ou inesperado." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Número excessivo de redirecionamentos." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: falha na autorização de HTTP." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: não foi possível analisar o arquivo bencoded (geralmente arquivo .torrent)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: arquivo torrent corrompido ou com informação ausente." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: URI Magnet errada." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: foi dada uma opção errada/não reconhecida ou um argumento inesperado." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: o servidor remoto foi incapaz de manipular a requisição." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: não foi possível analisar a requisição JSON-RPC." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Sem resposta. O aria2 está desligado?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: o gid foi removido." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Falha ao obter o link da mídia." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Nenhuma mídia correspondente." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Gerenciador de downloads" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Rafael Ferreira" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "Criador do uGet:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Gerente de Projeto do uGet:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "tarefas" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Novo da área de transferência" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Novo download" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Ãrea de transferência" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Linha de comando" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Ocorreu um erro" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Ocorreu um erro ao baixar." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Download começando" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Começando a fila de downloads." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Download concluído" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Todos os downloads da fila foram concluídos." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Status" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Categoria" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Cria novo download" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Novo _download..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nova _categoria..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Novo _lote da área de transferência..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Novo lote de sequência de _URL..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Novo torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Novo metalink..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Salvar todas as configurações" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Define o download selecionado como continuável" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Define o download selecionado como pausado" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Define as propriedades do download selecionado" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Move o download selecionado para cima" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Move o download selecionado para baixo" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Move o download selecionado para o topo" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Move o download selecionado para canto inferior" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nova categoria" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Cópia -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Propriedades da categoria" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Propriedades de download" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Novo torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Novo metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Abrir arquivo torrent" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Arquivo torrent (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Abrir arquivo metalink" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Falha ao salvar a categoria de arquivo." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Falha ao carregar a categoria de arquivo." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Salvar categoria de arquivo" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Abrir categoria de arquivo" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "Arquivo JSON (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Link " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Imagem " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Arquivo texto" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importar URLs de arquivo HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "Arquivo HTML (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importar URLs de arquivo texto" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Arquivo de texto simples" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Exportar URLs para arquivo de texto" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Lote de sequência de URLs" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Nenhuma URL encontrada na área de transferência." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Todas as URLs existiram." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Lote da área de transferência" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Novo" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Erro" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Mensagem" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Selecionados %d itens" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Atenção usuários do uGet:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "nós estamos fazendo uma Arrecadação de Doações para o Desenvolvimento Futuro do uGet, por favor clique" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "AQUI" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "por favor, preencha esta rápida Pesquisa de Usuário do uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "clique aqui para iniciar a pesquisa" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Nome da categoria:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "_Downloads ativos:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Capacidade de finalizados:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Capacidade de reciclados:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Condições de correspondência de URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "_Hosts correspondentes:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "_Esquemas correspondentes:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "_Tipos correspondentes:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Realmente sair?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Tem certeza que deseja sair?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Realmente excluir arquivos?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Tem certeza que deseja excluir os arquivos?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Realmente excluir a categoria?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Tem certeza que deseja excluir a categoria?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Não me perguntar novamente" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Espelhos:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Arquivo:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Selecione uma pasta" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Pasta:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Referência:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Máximo de conexões:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Continuável" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_ausar" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Login" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Usuário:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Senha:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Arquivo de cookie:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Selecione um arquivo de cookie" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Arquivo de post:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Selecione um arquivo de Post" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Agente de usuário:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_Limite de tentativas:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "vezes" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "_Atraso entre tentativas:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "segundos" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Velocidade máxima de upload:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Velocidade máxima de download:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Obter marca de tempo " #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Arquivo" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "Downloads em _lote" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Lote da área de _transferência..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "Lote de sequência de _URL..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Importação de arquivo de _texto (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Importação de arquivo _HTML (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Exportar para arquivo de texto (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Abrir categoria..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Salvar categoria como..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Salvar _todas as configurações" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Modo offline" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Editar" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_Monitor de área de transferência" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Monitor da área de transferência trabalha silenciosamente" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Linha de comando trabalha silenciosamente" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Pular URI existente" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Aplica configurações de download recentes" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "_Ações automáticas de acabamento" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Desabilitar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Hibernar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Suspender" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Desligar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Reiniciar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Personalizado" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Lembrar configuração" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "Aj_uda" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Configurações..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Ver" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Barra de ferramentas" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Barra de status" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Sumário" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "_Itens do sumário" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Nome" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Pasta" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Mensagem" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "_Colunas de download" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Concluído" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Tamanho" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Porcentagem \"%\"" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "Tra_nscorrido" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Restante" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Velocidade" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Veloc. Upload" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Enviado" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Proporção" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "Tenta_r novamente" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Adicionado em" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Concluído em" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Categoria" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nova categoria..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Excluir categoria" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Baixar" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Deletar entrada" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Deletar entrada e _arquivo" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Abrir pasta de _conteúdo" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Forçar início" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Mover para" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Prioridade" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Alta" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normal" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Baixa" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Obtenha ajuda on-line" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Documentação" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Fórum de suporte" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Enviar feedback" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Relatar um erro" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Atalhos de teclado" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Verificar por atualizações" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Configurações" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Não foi possível iniciar o aplicativo padrão para o arquivo \"%s\"." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "\"%s\" - Esta pasta não existe." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "A URI existe" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Essa URI já existe, tem certeza que quer continuar?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Geral" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Avançado" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Configurações da categoria" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Padrão para novos downloads 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Padrão 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "sem nome" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Pausado" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Enviando" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Concluído" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Reciclado" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Enfileramento" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Ativo" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Todos os estados" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Nome" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Concluído" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Tamanho" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Transcorrido" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Restante" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Qualidade" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Não usar" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Padrão" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Host:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Porta:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Args. de socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Elemento:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Seg" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Ter" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Qua" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Qui" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Sex" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Sáb" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Dom" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Habilitar agendador" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Desligar" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- para todas as tarefas" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normal" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- executa a tarefa normalmente" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Todos" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Nenhum" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Marcar por filtro" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Marcar URLs por host E por extensão do nome do arquivo." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Isso vai redefinir todos marcadores de URLs." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Host" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Ext. de arquivo" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Referência em base hipertexto" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Marcar _todos" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Marcar _nenhum" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Marcar por filtro..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "ex.:" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_De:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Para:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "dígitos:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_De:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "diferenciar maiúsculo/minúsculo" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Nenhum caractere coringa (*) na entrada de URL." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL não válida." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Nenhum caractere nas entradas \"De\" ou \"Para\"." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Visualizar" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Interface de usuário" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Largura de banda" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Agendador" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Plug-in" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Site de mídias" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Outros" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Habilitar monitor da área de transferência" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "Modo _silencioso" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Ãndice de categoria padrão" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Adicionar à N categoria se não houver categoria correspondente." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_Monitorar URL do site de mídias" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Monitorar a área de transferência para os seguintes tipos de arquivo:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Separe os tipos com o caractere \"|\"." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Você pode usar expressões regulares aqui." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Confirmação" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Exibir diálogo de confirmação ao sair" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Confirma ao excluir arquivos" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Barra do sistema" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Sempre mostra o ícone na área de notificação" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Minimiza para a área de notificação ao inicializar" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Ir para a barra ao fechar a janela" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Usar " #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Habilita modo offline ao inicializar" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Notificação de início de download" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Produz som quando o download tiver finalizado" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Exibir ícones grandes" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Isso afetará todos os plugins." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Limite de velocidade global" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Velocidade máxima de upload" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Velocidade máxima de download" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Ações automáticas de acabamento" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Comando personalizado:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Comando personalizado caso ocorra um erro:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Autosalvar" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Intervalo:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minutos" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Configurações de linha de comando" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Usa \"--quiet\" por padrão" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Ordem de correspondência de plugin:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Opções de plugins do Aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "Token secreto de autorização RPC" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Limite de velocidade global apenas para o aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Executar aria2 ao inicializar" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Desligar aria2 ao sair" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Executar o aria2 em dispositivo local" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Caminho" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumentos" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Você deve reiniciar o uGet após modificá-lo." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Modo de correspondência de mídia:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Condições para correspondência:" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Qualidade:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Tipo:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Arquivo" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Pasta" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Item" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Valor" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Copiar _todos" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Mostrar janela" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "Modo _offline" uget-2.2.3/po/ja.po0000664000175000017500000014132713602733704010772 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Naofumi , 2017 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-04-09 14:59+0000\n" "Last-Translator: Naofumi \n" "Language-Team: Japanese (http://www.transifex.com/uget/uget/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "パスワード マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ デーモン: uget\n\n%s ã« SSH 接続をã—よã†ã¨ã—ãŸã¨ãã«ã€æ—¢çŸ¥ã®ä¿¡é ¼æ¸ˆãƒ›ã‚¹ãƒˆãƒ•ァイルã«å¯¾ã—ã¦ãƒ›ã‚¹ãƒˆã‚­ãƒ¼ã‚’確èªã™ã‚‹éš›ã«ã€ãƒ›ã‚¹ãƒˆã‚­ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚\n\n既知㮠hosts ファイル㫠%s ã®ãƒ›ã‚¹ãƒˆã‚­ãƒ¼ã‚’追加ã™ã‚‹ã“ã¨ã§ã€ã“ã®æŽ¥ç¶šãŠã‚ˆã³å°†æ¥ã®æŽ¥ç¶šã«å¯¾ã—ã¦ä¿¡é ¼æ¸ˆã¨ã—ã¦æ‰±ã„ã¾ã™ã‹?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "ã™ã¹ã¦ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "接続中..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "é€ä¿¡ä¸­..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "リトライ" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "ダウロード完了" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "完了" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "å†é–‹å¯èƒ½" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "å†é–‹ä¸å¯èƒ½" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "出力ファイルã®åå‰ã‚’変更ã§ãã¾ã›ã‚“。" #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã§ãã¾ã›ã‚“。" #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "フォルダーを作æˆã§ãã¾ã›ã‚“。" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "ファイルを作æˆã§ãã¾ã›ã‚“ (ファイルåãŒæ­£ã—ããªã„ã‹ã€ãƒ•ァイルãŒå­˜åœ¨ã—ã¾ã™)。" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "ファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“。" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "スレッドを作æˆã§ãã¾ã›ã‚“。" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "ã‚½ãƒ¼ã‚¹ãŒæ­£ã—ãã‚りã¾ã›ã‚“ (ファイルサイズãŒç•°ãªã‚Šã¾ã™)。" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "リソースä¸è¶³ (ディスクフルã€ã¾ãŸã¯ãƒ¡ãƒ¢ãƒªä¸è¶³)。" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "出力ファイルãŒã‚りã¾ã›ã‚“。" #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "出力ã®è¨­å®šãŒã‚りã¾ã›ã‚“。" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "リトライ回数ãŒå¤šã™ãŽã¾ã™ã€‚" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„æ–¹å¼ (プロトコル)。" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ファイル。" #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "投稿ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "cookie ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "ã“ã®ãƒ“デオã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "ビデオ情報ã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "ビデオ Web ページã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "YouTube ã® URL ã« video_id ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: 䏿˜Žãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: タイムアウトãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: リソースãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 ã¯æŒ‡å®šã•ã‚ŒãŸæ•°ã® 'リソースãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“' ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ã‚’検出ã—ã¾ã—ãŸã€‚ --max-file-not-found オプションをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: 速度ãŒé…ã™ãŽã¾ã™ã€‚" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: ダウンロードãŒå®Œäº†ã—ã¦ã„ã¾ã›ã‚“。" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "リソースä¸è¶³" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: ピース長㌠.aria2 コントロールファイルã®ã‚‚ã®ã¨ç•°ãªã‚Šã¾ã—ãŸã€‚" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 ãŒåŒã˜ãƒ•ァイルをダウンロードã—ã¦ã„ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 ãŒåŒã˜æƒ…å ±ãƒãƒƒã‚·ãƒ¥ã® torrent をダウンロードã—ã¦ã„ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: ファイルãŒã™ã§ã«å­˜åœ¨ã—ã¾ã™ã€‚ --allow-overwrite オプションをå‚ç…§ã—ã¦ãã ã•ã„。" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: 既存ã®ãƒ•ァイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: æ–°ã—ã„ファイルを作æˆã€ã¾ãŸã¯æ—¢å­˜ã®ãƒ•ァイルを削除ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: ファイル I/O エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: åå‰è§£æ±ºã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: Metalink ドキュメントを解æžã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP コマンドã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP レスãƒãƒ³ã‚¹ãƒ˜ãƒƒãƒ€ãƒ¼ãŒé–“é•ã£ã¦ã„ã‚‹ã‹äºˆæœŸã—ãªã„ã‚‚ã®ã§ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "リダイレクトãŒå¤šã™ãŽã¾ã™ã€‚" #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP èªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: bencode ã•れãŸãƒ•ァイル (通常 .torrent ファイル) ã‚’è§£æžã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: torrent ファイルãŒå£Šã‚Œã¦ã„ã‚‹ã‹ã€æƒ…å ±ãŒä¸è¶³ã—ã¦ã„ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI ãŒé–“é•ã£ã¦ã„ã¾ã™ã€‚" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: é–“é•ã£ãŸ/èªè­˜ã§ããªã„ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæŒ‡å®šã•れãŸã‹ã€äºˆæœŸã—ãªã„ã‚ªãƒ—ã‚·ãƒ§ãƒ³å¼•æ•°ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: リモートサーãƒãƒ¼ãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’処ç†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: JSON-RPC リクエストを解æžã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "応答ãŒã‚りã¾ã›ã‚“。 aria2 ãŒã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã•れã¦ã„ã¾ã™ã‹ï¼Ÿ" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "メディアリンクã®å–å¾—ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "一致ã™ã‚‹ãƒ¡ãƒ‡ã‚£ã‚¢ãŒã‚りã¾ã›ã‚“。" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "ダウンロードマãƒãƒ¼ã‚¸ãƒ£ãƒ¼" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "翻訳者ã®ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆ" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet 創設者: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet プロジェクトマãƒãƒ¼ã‚¸ãƒ£ãƒ¼: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "タスク" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "クリップボードã‹ã‚‰æ–°è¦" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "æ–°è¦ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "クリップボード" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "コマンドライン" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "ダウンロード中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "ダウンロードを開始ã—ã¾ã—ãŸ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "ダウンロードキューを開始ã—ã¦ã„ã¾ã™ã€‚" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "ダウロード完了" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "ã™ã¹ã¦ã®ã‚­ãƒ¥ãƒ¼ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãŒå®Œäº†ã—ã¾ã—ãŸã€‚" #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "ステータス" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "カテゴリー" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "æ–°è¦ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’作æˆ" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "æ–°è¦ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰(_D)..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "æ–°è¦ã‚«ãƒ†ã‚´ãƒªãƒ¼(_C)..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "æ–°è¦ã‚¯ãƒªãƒƒãƒ—ボード一括(_b)..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "æ–°è¦ _URL é †åºä¸€æ‹¬..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "æ–°è¦ Torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "æ–°è¦ Metalink..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "ã™ã¹ã¦ã®è¨­å®šã‚’ä¿å­˜" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "é¸æŠžã—ãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’実行å¯èƒ½ã«è¨­å®šã™ã‚‹" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "é¸æŠžã—ãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’ä¸€æ™‚åœæ­¢ã«è¨­å®šã™ã‚‹" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "é¸æŠžã—ãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®ãƒ—ロパティを設定ã™ã‚‹" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "é¸æŠžã—ãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’上ã«ç§»å‹•" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "é¸æŠžã—ãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’下ã«ç§»å‹•" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "é¸æŠžã—ãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’先頭ã«ç§»å‹•" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "é¸æŠžã—ãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’最後ã«ç§»å‹•" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "æ–°è¦ã‚«ãƒ†ã‚´ãƒªãƒ¼" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "コピー - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "カテゴリープロパティ" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "ダウンロードプロパティ" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "æ–°è¦ Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "æ–°è¦ Metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Torrent ファイルを開ã" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrent ファイル (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Metalink ファイルを開ã" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "カテゴリーファイルã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "カテゴリーファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "カテゴリーファイルをä¿å­˜" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "カテゴリーファイルを開ã" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON ファイル (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "リンク " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "ç”»åƒ " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "テキストファイル" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "HTML ファイルã‹ã‚‰ URL をインãƒãƒ¼ãƒˆ" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML ファイル (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "テキストファイルã‹ã‚‰ URL をインãƒãƒ¼ãƒˆ" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "プレーンテキストファイル" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "URL をテキストファイルã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL é †åºä¸€æ‹¬" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "クリップボード㫠URL ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "ã™ã¹ã¦ã® URL ãŒå­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "クリップボード一括" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "æ–°è¦" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "エラー" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "メッセージ" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d ã‚¢ã‚¤ãƒ†ãƒ é¸æŠžæ¸ˆ" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "æ³¨æ„ uGetters:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "uGet ã®æœªæ¥ã®ç™ºå±•ã®ãŸã‚ã«å¯„付ドライブを実行ã—ã¦ã„ã¾ã™ã€‚クリックã—ã¦ãã ã•ã„" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ã“ã“" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "uGet ã®ç°¡å˜ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ãƒ³ã‚±ãƒ¼ãƒˆã«ã”記入ãã ã•ã„。" #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "アンケートã¯ã“ã“をクリックã—ã¦ãã ã•ã„" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "カテゴリーå(_n):" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "アクティブãªãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰æ•°(_d):" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "完了ã—ãŸå®¹é‡:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "リサイクルã®å®¹é‡:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI 一致æ¡ä»¶" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "一致ã—ãŸãƒ›ã‚¹ãƒˆ(_H):" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "一致ã—ãŸã‚¹ã‚­ãƒ¼ãƒž(_S):" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "一致ã—ãŸã‚¿ã‚¤ãƒ—(_T):" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "本当ã«çµ‚了ã—ã¾ã™ã‹?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "終了ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "本当ã«ãƒ•ァイルを削除ã—ã¾ã™ã‹?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "ファイルを削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "本当ã«ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’削除ã—ã¾ã™ã‹?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "カテゴリーを削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "今後表示ã—ãªã„" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "ミラー:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "ファイル:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠž" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "フォルダー(_F):" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "リファラー:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "最大接続数(_M):" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "実行å¯èƒ½(_R)" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "ä¸€æ™‚åœæ­¢(_a)" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "ログイン" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "ユーザー:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "パスワード:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Cookie ファイル:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Cookie ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Post ファイル:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Post ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "User Agent:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "リトライé™åº¦(_l):" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "回数" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "リトライé…å»¶(_d):" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "ç§’" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "最大アップロード速度:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "最大ダウンロード速度:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "タイムスタンプをå–å¾—" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "ファイル(_F)" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "一括ダウンロード(_B)" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "クリップボード一括(_C)..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL é †åºä¸€æ‹¬..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "テキストファイルインãƒãƒ¼ãƒˆ(_T) (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML ファイルインãƒãƒ¼ãƒˆ (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "テキストファイルã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ(_E) (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "カテゴリーを開ã(_O)..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "åå‰ã‚’付ã‘ã¦ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’ä¿å­˜(_S)..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "ã™ã¹ã¦ã®è¨­å®šã‚’ä¿å­˜(_a)" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "オフラインモード" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "編集(_E)" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "クリップボードモニター(_M)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "クリップボードをé™ã‹ã«å‹•作" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "コマンドラインをé™ã‹ã«å‹•作" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "既存㮠URI をスキップ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "最近ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰è¨­å®šã‚’é©ç”¨" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "完了自動æ“作(_A)" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "無効ã«ã™ã‚‹(_D)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "休止状態" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "サスペンド" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "シャットダウン" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "å†èµ·å‹•" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "カスタム" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "設定を記憶ã™ã‚‹" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "ヘルプ(_H)" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "設定(_S)..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "表示(_V)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "ツールãƒãƒ¼(_T)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "ステータスãƒãƒ¼" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "サマリー(_S)" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "アイテムã®ã‚µãƒžãƒªãƒ¼(_I)" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "åå‰(_N)" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "フォルダー(_F)" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "メッセージ(_M)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "ダウンロード列(_C)" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "完了(_C)" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "サイズ(_S)" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "パーセント(_P) '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "予測(_E)" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "残り(_L)" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "速度" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "アップ速度" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "アップロード済" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "レシオ" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "リトライ(_R)" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "追加" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "完了" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "カテゴリー(_C)" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "æ–°è¦ã‚«ãƒ†ã‚´ãƒªãƒ¼(_N)..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "カテゴリーを削除(_D)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "ダウンロード(_D)" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "エントリを削除(_D)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "エントリã¨ãƒ•ァイルを削除(_F)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "å«ã‚€ãƒ•ォルダーを開ã(_C)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "強制開始" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "移動(_M)" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "優先度" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "高(_H)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "通常(_N)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "低(_L)" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "オンラインã§ãƒ˜ãƒ«ãƒ—ã‚’å¾—ã‚‹" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "ドキュメント" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "サãƒãƒ¼ãƒˆãƒ•ォーラム" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "フィードãƒãƒƒã‚¯ã‚’é€ä¿¡" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "ãƒã‚°ã‚’報告" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "キーボードショートカット" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "更新を確èª" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "設定" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "ファイル '%s' ã®ãƒ‡ãƒ•ォルトアプリケーションを起動ã§ãã¾ã›ã‚“。" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - ã“ã®ãƒ•ォルダーãŒå­˜åœ¨ã—ã¾ã›ã‚“。" #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI ãŒå­˜åœ¨ã—ã¦ã„ã¾ã—ãŸ" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "ã“ã® URI ã¯å­˜åœ¨ã—ã¦ã„ã¾ã—ãŸã€ç¶šè¡Œã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "全般" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "詳細" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "カテゴリー設定" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "æ–°è¦ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®ãƒ‡ãƒ•ォルト 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "デフォルト 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "åå‰ãªã—" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "ä¸€æ™‚åœæ­¢ã—ã¾ã—ãŸ" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "アップロード中" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "完了" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "リサイクル" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "キュー中" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "アクティブ" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "ã™ã¹ã¦ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "åå‰" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "完了" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "サイズ" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "予測" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "残り" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "æ•°é‡" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "プロキシ:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "使用ã—ãªã„" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "デフォルト" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "ホスト:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "ãƒãƒ¼ãƒˆ:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Socket 引数:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "è¦ç´ :" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "月" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "ç«" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "æ°´" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "木" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "金" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "土" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "æ—¥" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "スケジューラ―を有効ã«ã™ã‚‹(_E)" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "オフã«ã™ã‚‹" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’åœæ­¢" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "通常" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- 通常ã§ã‚¿ã‚¹ã‚¯ã‚’実行" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "ã™ã¹ã¦" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "ãªã—" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "フィルターã§ãƒžãƒ¼ã‚¯" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "ホストã¨ãƒ•ァイルåã®æ‹¡å¼µå­ã§ URL をマークã—ã¾ã™ã€‚" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "ã“れã«ã‚ˆã‚Š URL ã®ã™ã¹ã¦ã®ãƒžãƒ¼ã‚¯ãŒãƒªã‚»ãƒƒãƒˆã•れã¾ã™ã€‚" #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "ホスト" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "ファイル拡張å­" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "ベースãƒã‚¤ãƒ‘ーテキストå‚ç…§" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "ã™ã¹ã¦ãƒžãƒ¼ã‚¯(_A)" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "マークãªã—(_N)" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "フィルターã§ãƒžãƒ¼ã‚¯(_M)..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "例" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "é–‹å§‹(_F):" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "終了:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "æ¡æ•°:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "é–‹å§‹(_r):" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "å¤§æ–‡å­—å°æ–‡å­—を区別" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "URL エントリã«ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰(*) ã¯ã‚りã¾ã›ã‚“。" #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL ãŒæ­£ã—ãã‚りã¾ã›ã‚“。" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "'é–‹å§‹' ã¾ãŸã¯ '終了' ã‚¨ãƒ³ãƒˆãƒªã«æ–‡å­—ãŒã‚りã¾ã›ã‚“。" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "プレビュー" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "ユーザーインターフェース" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "帯域幅" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "スケジューラ―" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "プラグイン" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "メディアウェブサイト" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "ãã®ä»–" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "クリップボードモニターを有効ã«ã™ã‚‹(_E)" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "é™ã‹ãƒ¢ãƒ¼ãƒ‰(_Q)" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "デフォルトã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "カテゴリーãŒä¸€è‡´ã—ãªã„å ´åˆã€N番目ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã«è¿½åŠ ã—ã¾ã™ã€‚" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "メディアウェブサイト㮠URL をモニター(_M)" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "指定ã—ãŸãƒ•ァイルタイプã®ã‚¯ãƒªãƒƒãƒ—ボードをモニター:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "文字 '|' ã§ã‚¿ã‚¤ãƒ—を区切りã¾ã™ã€‚" #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "ã“ã“ã§æ­£è¦è¡¨ç¾ã‚’使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "確èª" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "終了時ã«ç¢ºèªãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’表示ã—ã¾ã™" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "ファイルを削除ã™ã‚‹ã¨ãã«ç¢ºèªã—ã¾ã™" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "システムトレイ" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "常ã«ãƒˆãƒ¬ã‚¤ã‚¢ã‚¤ã‚³ãƒ³ã‚’表示" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "起動時ã«ãƒˆãƒ¬ã‚¤ã«æœ€å°åŒ–" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "ウインドウを閉ã˜ã‚‹æ™‚ã«ãƒˆãƒ¬ã‚¤ã«é–‰ã˜ã‚‹" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Ubuntu ã®ã‚¢ãƒ—リインジケーターを使用ã™ã‚‹" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "起動時ã«ã‚ªãƒ•ラインモードを有効ã«ã™ã‚‹" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "ダウンロード開始通知" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "ダウンロード完了時ã«ã‚µã‚¦ãƒ³ãƒ‰" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "大ãã„アイコンを表示" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "ã“れã¯ã™ã¹ã¦ã®ãƒ—ラグインã«å½±éŸ¿ã—ã¾ã™ã€‚" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "グローãƒãƒ«é€Ÿåº¦åˆ¶é™" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "最大アップロード速度" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "最大ダウンロード速度" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "完了自動æ“作" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "カスタムコマンド:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "エラーãŒç™ºç”Ÿã—ãŸå ´åˆã®ã‚«ã‚¹ã‚¿ãƒ ã‚³ãƒžãƒ³ãƒ‰:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "自動ä¿å­˜(_A)" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "é–“éš”(_I):" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "分" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "コマンドライン設定" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "デフォルト㧠'--quiet' を使用ã™ã‚‹" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "プラグインã®ä¸€è‡´é †åº:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 プラグインオプション" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC èªè¨¼ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãƒˆãƒ¼ã‚¯ãƒ³" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "aria2 ã®ã¿ã®ã‚°ãƒ­ãƒ¼ãƒãƒ«é€Ÿåº¦åˆ¶é™" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "起動時㫠aria2 ã‚’èµ·å‹•(_L)" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "終了時㫠aria2 をシャットダウン(_S)" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "ローカルデãƒã‚¤ã‚¹ã§ aria2 ã‚’èµ·å‹•ã™ã‚‹" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "パス" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "引数" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "変更後㫠uGet ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "メディア一致モード:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "一致æ¡ä»¶" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "å“質:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "タイプ:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "ファイル" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "フォルダー" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "アイテム" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "値" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "ã™ã¹ã¦ã‚³ãƒ”ー(_A)" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "ウインドウを表示" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "オフラインモード(_O)" uget-2.2.3/po/da.po0000664000175000017500000013151513602733704010762 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Filip Kemuel Dam Bartholdy , 2013,2016 # scootergrisen, 2017 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-10-14 17:10+0000\n" "Last-Translator: scootergrisen\n" "Language-Team: Danish (http://www.transifex.com/uget/uget/language/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "AdgangskodehÃ¥ndteringsdæmon: uget\n\nVed forsøg pÃ¥ en SSH-forbindelse til %s var der et problem med at verificere dets værtsnøgle mod den kendte og betroede værts fil fordi dens værtsnøgle ikke blev fundet.\n\nVil du gerne behandle denne forbindelse som betroet for denne og fremtidige forbindelser ved at tilføje %ss værtsnøgle til de kendte værts fil?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Alle kategorier" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Opretter forbindelse..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Overfører..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Forsøg" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Download fuldført" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Færdige" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Genoptagelig" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Ikke genoptagelig" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Outputfilen kan ikke omdøbes." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "kunne ikke oprette forbindelse til vært." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Mappe kan ikke oprettes." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Fil kan ikke oprettes (ugyldigt filnavn eller filen findes allerede)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Filen kan ikke Ã¥bnes." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Kan ikke oprette trÃ¥d." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Forkert kilde (forskellig filstørrelse)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Ikke flere ressourcer (disken er fyldt eller er løbet tør for hukommelse)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Ingen outputfil." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Ingen outputindstilling." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "For mange forsøg." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Ikke-understøttet skema (protokol)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Ikke-understøttet fil." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "postfil ikke fundet." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "cookiefil ikke fundet." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Denne video er blevet fjernet." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Der opstod fejl under hentning af videoinfo." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Der opstod fejl under hentning af videoens webside." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "Ingen video_id fundet i YouTube-URL." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: der opstod en ukendt fejl." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: fik timeout." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: ressource blev ikke fundet." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 sÃ¥ det angivne antal af fejlen 'ressource ikke fundet'. Se tilvalget --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: hastighed var for langsom." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: der opstod et netværksproblem." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: ufærdige downloads." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Ikke flere ressourcer" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: stykkelængde var ikke som den i .aria2-kontrolfilen." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 downloadede samme fil." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 downloadede samme infohash-torrent." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: filen findes allerede. Se tilvalget --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: kunne ikke Ã¥bne eksisterende fil." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: kunne ikke oprette ny fil eller afkorte eksisterende fil." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: der opstod fil-I/O-fejl." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: navneoversættelse mislykkedes." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: kunne ikke fortolke metalink-dokument." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP-kommando mislykkedes." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP-svar-header var ugyldigt eller uventet." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "For mange videresendelser." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP-godkendelse mislykkedes." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: kunne ikke fortolke kodet fil (typisk .torrentfil)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: torrentfil var ødelagt eller manglede information." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet-URI var ugyldigt." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: ugyldigt/ikke-genkendt tilvalg blev givet eller uventet tilvalgsargument blev givet." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: fjern-serveren kunnen ikke hÃ¥ndtere anmodningen." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: kunne ikke fortolke JSON-RPC-anmodning." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Intet svar. Er aria2 stoppet?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid blev fjernet." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Kunne ikke hente medielink." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Intet matchet medie." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "DownloadhÃ¥ndtering" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Filip Kemuel (kemuel.dk)\nscootergrisen" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet grundlægger: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet projektmanager: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "opgaver" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Ny fra udklipsholder" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Ny download" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Udklipsholder" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Kommandolinje" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Der opstod fejl" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Der opstod fejl under download." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Download starter" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Starter downloadkø." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Download fuldført" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Alle downloads i køen er fuldførte." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Status" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategori" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Opret ny download" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Ny _download..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Ny _kategori..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Ny udklipsholder_batch..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Ny _URL-sekvensbatch..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Ny torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nyt metalink..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Gem alle indstillinger" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Sæt valgte download kørende" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Sæt valgte download pÃ¥ pause" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Sæt egenskaber for valgte download" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Flyt valgte download op" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Flyt valgte download ned" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Flyt valgte download øverst" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Flyt valgte download nederst" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Ny kategori" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Kopier - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Kategoriegenskaber" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Downloadegenskaber" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Ny torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nyt metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Ã…bn torrentfil" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrentfil (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Ã…bn metalinkfil" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Kunne ikke gemme kategorifil." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Kunne ikke indlæse kategorifil." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Gem kategorifil" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Ã…bn kategorifil" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON-fil (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Link " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Billede " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Tekstfil" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importér URL'er fra HTML-fil" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML-fil (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importér URL'er fra tekstfil" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Ren tekstfil" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Eksportér URL'er til tekstfil" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL-sekvensbatch" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Ingen URL'er fundet i udklipsholderen." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Alle URL'er findes." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Udklipsholderbatch" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Ny" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Fejl" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Besked" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d elementer valgt" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Hallo uGettere:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "vi kører en donationskampagne for uGets fremtidige udvikling, klik venligst " #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "HER" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "udfyld venligst denne hurtige brugerundersøgelse for uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "klik her for at deltage i undersøgelsen" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Kategori_navn:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Aktive _downloads:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Kapacitet af færdige:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Kapacitet af papirkurv:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI matchende betingelser" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Matchede _værter:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Matchede _skemaer:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Matchede _typer:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Vil du virkelig afslutte?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Er du sikker pÃ¥, at du vil afslutte?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Vil du virkelig slette filerne?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Er du sikker pÃ¥, at du vil slette filerne?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Vil du virkelig slette kategorien?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Er du sikker pÃ¥, at du vil slette kategorien?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Spørg mig ikke igen" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Spejle:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Fil:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Vælg mappe" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Mappe:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Henviser:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Maks. forbindelser:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Kørende" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_ause" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Login" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Bruger:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Adgangskode:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Cookiefil:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Vælg cookiefil" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Postfil:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Vælg postfil" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "User Agent:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Forsøgsgr_ænse:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "gange" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Forsøgs_forsinkelse:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "sekunder" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Maks. uploadhastighed:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Maks. downloadhastighed:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Hent tidsstempel" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Fil" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Batchdownloads" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Udklipsholder_batch..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL-sekvensbatch..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Tekstfilimport (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML-filimport (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Eksportér til tekstfil (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Ã…bn kategori..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Gem kategori som..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Gem _alle indstillinger" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Offlinetilstand" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Rediger" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_OvervÃ¥gning af udklipsholder" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Udklipsholder arbejder stille" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Kommandolinje arbejder stille" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Spring eksisterende URI over" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Anvend seneste downloadindstillinger" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "_Automatiske handlinger ved fuldførelse" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Deaktivér" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Dvale" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Hvile" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Luk ned" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Genstart" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Tilpasset" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Husk indstilling" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Hjælp" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Indstillinger..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Vis" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Værktøjslinje" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Statuslinje" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Opsummering" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Opsummerings_elementer" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Navn" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Mappe" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Besked" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Download_kolonner" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Fuldført" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Størrelse" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Procent '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Forløbet" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Tilbage" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Hastighed" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Ophastighed" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Uploadet" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Forhold" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Forsøg" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Tilføjet den" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Fuldført den" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategori" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Ny kategori..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Slet kategori" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Download" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Slet post" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Slet post og _fil" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Ã…bn _indeholdende mappe" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Gennemtving start" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Flyt til" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Prioritet" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Høj" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normal" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Lav" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "FÃ¥ hjælp online" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentation" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Supportforum" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Indsend feedback" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Rapportér en fejl" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Tastaturgenveje" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Søg efter opdateringer" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Indstillinger" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Kan ikke Ã¥bne standardprogram for filen '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Denne mappe findes ikke." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI findes" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Denne URI findes. Er du sikker pÃ¥, at du vil fortsætte?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Generelt" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Avanceret" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Kategoriindstillinger" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Standard for ny download 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Standard 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "unavngivet" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Sat pÃ¥ pause" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Uploader" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Fuldført" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Papirkurv" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "I kø" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktive" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Al status" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Navn" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Fuldført" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Størrelse" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Forløbet" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Tilbage" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Mængde" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Brug ikke" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Standard" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Vært:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Socket args:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Man" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Tirs" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Ons" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Tors" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Fre" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Lør" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Søn" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Aktivér planlægger" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "SlÃ¥ fra" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- stop alle opgaver" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normal" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- kør opgaver normalt" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Alle" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Ingen" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Mærk efter filter" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Mærk URL'er efter vært OG filnavnendelse." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Dette vil gendanne alle mærker for URL'er." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Vært" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Filendelse" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Base hypertekst-reference" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Mærk _alle" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Mærk _ingen" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Mærk efter filter..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "f.eks." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Fra:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Til:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "cifre:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "F_ra:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "forskel pÃ¥ store og smÃ¥ bogstaver" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Ingen jokertegn(*) i URL-post." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL'en er ugyldig." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Ingen tegn i 'Fra'- eller 'Til'-post." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "ForhÃ¥ndsvisning" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Brugergrænseflade" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "BÃ¥ndbredde" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Planlægger" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Plugin" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Mediets websted" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Andet" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Aktivér overvÃ¥gning af udklipsholder" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Stilletilstand" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Standardkategoriindeks" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Tilføjer til Nth kategori hvis ingen kategori matcher." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_OvervÃ¥g mediewebstedets URL" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "OvervÃ¥g udklipsholder for angivne filtyper:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Adskil typerne med tegnet '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Her kan du bruge regulære udtryk." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Bekræftelse" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Vis bekræftelsesdialog ved afslutning" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Bekræft ved sletning af filer" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Systembakke" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Vis altid systembakkeikon" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Minimer til systembakke ved opstart" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Luk til bakke nÃ¥r vindue lukkes" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Brug Ubuntus appindikator" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Aktivér offlinetilstand ved opstart" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Download startsnotifikation" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Lyd nÃ¥r download er færdig" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Vis stort ikon" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Dette pÃ¥virker alle plugins." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Global hastighedsbegrænsning" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Maks. uploadhastighed" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Maks. downloadhastighed" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Automatiske handlinger ved fuldførelse" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Tilpasset kommando:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Tilpasset kommando hvis der opstÃ¥r fejl:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "Gem _automatisk" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Interval:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minutter" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Kommandolinjeindstillinger" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Brug '--quiet' som standard" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Plugin som matcher rækkefølge:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Valgmuligheder for aria2-plugin" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC-godkendelse hemmelig token" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Global hastighedsbegrænsning kun for aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Ã…bn aria2 ved opstart" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Stop aria2 ved afslutning" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Start aria2 pÃ¥ lokal enhed" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Sti" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumenter" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Du skal genstarte uGet efter den er blevet ændret." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Matchtilstand for medie:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Matchbetingelser" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Kvalitet:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Type:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Fil" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Mappe" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Element" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Værdi" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Kopiér _alle" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Vis vindue" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Offlinetilstand" uget-2.2.3/po/bg.po0000664000175000017500000013216613602733704010771 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Atanas Kovachki , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Bulgarian (http://www.transifex.com/uget/uget/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Ð’Ñички категории" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Свързване..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Предаване..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Отново" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "ИзтеглÑнето приключи" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Завършено" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Възобновено" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Ðе е възобновено" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Ð˜Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» не може да Ñе преименува." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "не може да Ñе Ñвърже Ñ Ñ…Ð¾Ñта." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Папката не може да бъде Ñъздадена." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Файла не може да бъде Ñъздаден (лошо име на файл или файла ÑъщеÑтвува)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Файла не може да бъде отворен." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "ÐÑма реÑурÑи (диÑка е препълнен или нÑма доÑтатъчно памет)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "ÐÑма изходен файл." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "ÐÑма изходÑщи наÑтройки." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Твърде много повторни опити." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Ðеподдържана Ñхема (протокол)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Ðеподдържан файл." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Твърде много пренаÑочваниÑ." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Даунлоуд мениджър" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "ÐÑ‚Ð°Ð½Ð°Ñ ÐšÐ¾Ð²Ð°Ñ‡ÐºÐ¸ " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "задачи" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Ðов от клипборда" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Ðово изтеглÑне" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Клипборд" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Команден ред" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "ИзтеглÑнето Ñтартира" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Стартиране на чакащо изтеглÑне." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "ИзтеглÑнето завърши" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Ð’Ñички чакащи ÑвалÑниÑ, Ñа завършени." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "СтатуÑ" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "КатегориÑ" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Създай ново изтеглÑне" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Ðово _изтеглÑне..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Ðова _категориÑ..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Ðов _от клипборда" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Ðова поÑледователноÑÑ‚ от _връзки..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Ðов торент..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Ðов металинк..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Съхрани вÑички наÑтройки" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "УÑтанови избраното изтеглÑне на изпълнение" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "УÑтанови избраното изтеглÑне на пауза" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "ÐаÑтройки на избраните изтеглÑниÑ" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "ПремеÑти избраното изтеглÑне нагоре" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "ПремеÑти избраното изтеглÑне надолу" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "ПремеÑти избраното изтеглÑне най-отгоре" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "ПремеÑти избраното изтеглÑне най-отдолу" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Ðова категориÑ" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Копирай - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "СвойÑтва на категориÑта" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "СвойÑтва на изтеглÑнето" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Ðов торент" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Ðов металинк" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Отвори торент файл" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Отвори металинк файл" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Връзка " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Изображение " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "ТекÑтов файл" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Импорт на връзки от HTML файл" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Импорт на връзки от текÑтов файл" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "ПоÑледователноÑÑ‚ на връзките" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "ÐÑма открити връзки в клипборда." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "От клипборда" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Грешка" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Съобщение" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Избрани %d елемента" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Внимание, потребители на uGet:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "ние пуÑнахме Donation Drive за бъдещото развитие на uGet, молÑ, кликнете" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ТУК" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "молÑ, попълните потребителÑката анкетата за uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "кликнете тук, за да попълните анкетата" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Име на категориÑта:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Ðктивни _изтеглÑниÑ:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "КоличеÑтво изтеглÑниÑ:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "КоличеÑтво изтрити:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "ÐаиÑтина ли иÑкате да излезете?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "ÐаиÑтина ли иÑкате да излезете?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "ÐаиÑтина ли да изтриете файловете?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "ÐаиÑтина ли иÑкате да изтриете файловете?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Огледала:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Файл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Изберете папка" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Папка:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Източник на прехода:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Стартирай" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "П_ауза" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Вход" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Потребител:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Парола:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Файл Ñ Ð±Ð¸Ñквитките:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Изберете файл Ñ Ð±Ð¸Ñквитките" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Изпращащ файл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Изберете файл за изпращане" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Потребител:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_ЧиÑло на повторениÑта:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "пъти" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "ЗабавÑне на _повторениÑта:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "Ñекунди" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Max ÑкороÑÑ‚ на качване:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "кб/Ñ" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Max ÑкороÑÑ‚ на изтеглÑне:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Получавай Ð²Ñ€ÐµÐ¼ÐµÐ²Ð¸Ñ Ð¾Ñ‚Ð¿ÐµÑ‡Ð°Ñ‚ÑŠÐº" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Файл" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Пакетно изтеглÑне" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "От _клипборда..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "ПоÑледователноÑÑ‚ на _връзки..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Импортирай _текÑтов файл (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Импортирай _HTML файл (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_ЕкÑпортирай в текÑтов файл (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Редактиране" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_Следи за клипборда" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Приложи наÑтройките от поÑледното изтеглÑне" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Помощ" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_ÐаÑтройки..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Преглед" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "Лента Ñ _инÑтрументи" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Лента за ÑÑŠÑтоÑнието" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_ПодробноÑти" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "_Показвай в подробноÑтите" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Име" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Папка" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_Връзка" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Съобщение" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "_Колони за изтеглÑнето" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Завършено" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Размер" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "Про_цент '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Изминало" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_ОÑтава" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "СкороÑÑ‚" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "СкороÑÑ‚ на качване" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Качено" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Рейтинг" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Повтори" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Добавено на" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Завършено на" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_КатегориÑ" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Ðова категориÑ..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Изтрий категориÑта" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_ИзтеглÑне" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Бързо Ñтартиране" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "П_ремеÑти в" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Приоритет" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Получете помощ онлайн" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "ДокументациÑ" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Форум за поддръжка" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "ОÑтавете коментар" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Съобщете за грешка" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Проверете за актуализации" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "ÐаÑтройки" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Ðе може да Ñе Ñтартира Ñтандартното приложение за файла '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - папката не ÑъщеÑтвува." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Главни" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Разширени" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "ÐаÑтройки на категориÑта" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Стандартно за ново изтеглÑне 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Стандартно 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "неименуван" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Ðа пауза" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Изтрити" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Чакащи" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Ðктивни" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Име" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Завършено" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Размер" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Измина" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "ОÑтава" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "КоличеÑтво" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "ПрокÑи:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ðе използвай" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Стандартно" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "ХоÑÑ‚:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Порт:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Сокет:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Сокет аргументи:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Елемент:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Пон" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Вто" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "СрÑ" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Чет" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Пет" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Съб" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Ðед" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Включи планировчика" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Изключи" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- Ñпри вÑички задачи" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Ðормално" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- Ñтартирай нормално задачата" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Ð’Ñички" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Ðищо" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Маркирай по филтър" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Маркирай връзките по хоÑÑ‚ и разширение на файла." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Това ще възÑтанови вÑички маркирани връзки." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "ХоÑÑ‚" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Разширение на файла" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "Връзка" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "База от връзки" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Маркирай _вÑички" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Отмаркирай _вÑички" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Маркирай по филтър..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "Ðапример:" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "О_Ñ‚:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "До:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "цифри:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_От:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "малки и главни букви" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "ÐÑма Ñимвола в шаблона(*) във връзката." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "Връзката не е валидна." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Ð’ полетата 'От' или 'До' нÑма нищо." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Преглед" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "ПотребителÑки интерфейÑ" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Планировчик" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Плъгини" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Други" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Тих режим" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Разделете видове, използвайки Ñимвола \"|\"." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Можете да използвате регулÑрни изрази тук." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Потвърждение при изтриване на файлове" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Винаги показвай иконката в треÑ" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Минимизирай в Ñ‚Ñ€ÐµÑ Ð¿Ñ€Ð¸ Ñтартиране" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Включи Ñ‚Ð¸Ñ…Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼ при Ñтартиране" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "ИзвеÑтие при Ñтартиране на изгеглÑне" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Звуково извеÑтие при завършване на изтеглÑнето" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Интервал:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "минути" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "ÐаÑтройки на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Използвай '--quiet' Ñтандартно" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_ПуÑкай aria2 при Ñтартиране" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Изключвай aria2 при изход" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Път" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Ðргументи" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Файл" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Папка" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Елемент" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Значение" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Копирай _вÑички" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Покажи прозореца" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Офлайн режим" uget-2.2.3/po/ro.po0000664000175000017500000011451113602733704011013 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Nicolae Crefelean, 2017 # Remus-Gabriel Chelu , 2016 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-09-23 22:34+0000\n" "Last-Translator: Nicolae Crefelean\n" "Language-Team: Romanian (http://www.transifex.com/uget/uget/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Serviciu de gestiune a parolelor: uget\n\nLa încercarea de conectare prin SSH la %s a apărut o problemă la verificarea cheii gazdei cu cea din fiÈ™ierul local cu gazde cunoscute È™i de încredere, pentru că această cheie nu a fost găsită.\n\nDoriÈ›i să trataÈ›i ca sigură conexiunea curentă È™i cele viitoare, adăugând cheia gazdei %s în fiÈ™ierul gazdelor cunoscute?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Toate categoriile" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Conectare..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Transmitere..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Reîncearcă" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Descărcare completă" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Terminat" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Se poate continua" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Nu se poate continua" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "FiÈ™ierul de destinaÈ›ie nu poate fi redenumit." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "conectarea la gazdă nu a reuÈ™it." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Directorul nu a putut fi creat." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "FiÈ™ierul nu a putut fi creat (nume incorect sau fiÈ™ierul există)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "FiÈ™ierul nu poate fi deschis." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Nu se poate crea firul." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Sursă incorectă (dimensiunea fiÈ™ierului diferă)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Resurse epuizate (disc plin sau memorie insuficientă)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Nu există un fiÈ™ier destinaÈ›ie." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Nu există setări pentru destinaÈ›ie." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Prea multe reîncercări." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "" #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "" #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "" #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "" #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "" #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "" #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "" #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "" #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "" #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "" #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "" #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "" #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "" #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "" uget-2.2.3/po/es.po0000664000175000017500000013432313602733704011005 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Alejo_K , 2015 # Alejo_K , 2016 # Juan Roberto García Sánchez , 2017 # Vico Koby , 2013 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-09-22 23:51+0000\n" "Last-Translator: Juan Roberto García Sánchez \n" "Language-Team: Spanish (http://www.transifex.com/uget/uget/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Demonio del Gestor de Contraseñas: uget\n\nAl intentar una conexión SSH a %s ocurrió un problema verificando está clave del host contra el archivo host conocido y de confianza porque la clave no fue encontrada.\n\n¿Le gustaría tratar esta conexión como confiable para esta y futuras conexiones agregando la clave del host %s's al archivo de hosts conocidos?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Todas las categorías" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Conectando..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Transmitiendo..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Reintentos" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Descarga completa" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Finalizados" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Reanudable" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "No reanudable" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "El archivo de salida no puede ser renombrado." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "No se podría conectar al host." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "La carpeta no puede ser creada." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "El archivo no puede ser creado (nombre incorrecto o ya existe)" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "El archivo no puede ser abierto." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Imposible crear hilo." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Fuente incorrecta (tamaño de archivo diferente)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Recursos insuficientes (disco lleno o ejecución fuera de memoria)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Falta el archivo de salida." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Falta la configuración de salida." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Demasiados reintentos." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Esquema no soportado (protocolo)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Archivo no soportado." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "archivo post no encontrado." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "archivo cookie no encontrado." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Este video fue eliminado." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Se ha producido un error al obtener info del video." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Se ha producido un error al obtener vídeo de la página web." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "No se encontró video_id en la URL de YouTube." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: se ha producido un error desconocido." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: tiempo de espera agotado." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: no se encontró el recurso." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 vio el número específico del error 'no se encontró el recurso'. Ver opción --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: velocidad era demasiado lento." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: ocurrió un error de conexión." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: descargas sin terminar." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Recursos insuficientes" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: la longitud de la pieza era diferente en el archivo de control de .aria2." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 descargó el mismo archivo." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 estaba descargando la misma información hash del torrent." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: archivo ya existe. Ver opción --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: no se pudo abrir archivo existente." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: no se pudo crear un nuevo archivo o truncar archivo existente." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: ocurrió un error de E/S." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: fallo resolución de nombre." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: no se pudo analizar Metalink del documento." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: fallo del comando FTP." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: Encabezado de respuesta HTTP malo o inesperado." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Demasiadas redirecciones." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP error de autorización." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: no se pudo analizar el archivo bencoded (normalmente archivo .torrent)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: archivo torrent está dañado o falta información." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI está dañado." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: opción mala/desconocida fue dada o inesperado argumento de opción fue dado." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr " aria2: servidor remoto no pudo manejar la petición." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: no pudo analizar petición JSON-RPC." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "No hay respuesta. ¿Está aria2 apagado?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid fue eliminado." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Fallo al obtener el enlace." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "No hay medios emparejados." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Gestor de descargas" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Victor Emmanuel, vicokoby@gmail.com" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "Fundador de uGet:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Director de proyecto uGet:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "tareas" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Nuevo desde el portapapeles" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Nueva descarga" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Portapapeles" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Línea de comandos" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Se ha producido un error" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Se ha producido un error al descargar." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Iniciando descarga" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Iniciando cola de descargas." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Descarga completa" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Todas las descargas en cola se han completado." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Estado" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Categoría" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Crea una nueva descarga" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Nueva _descarga..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nueva _categoría..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Descargas nuevas en _masa desde el portapapeles..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Nueva secuencia de _URL's en masa..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Nuevo Torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nuevo metaenlace..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Guardar todos los ajustes" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Ejecutar las descargas seleccionadas" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Pausar las descargas seleccionadas" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Establecer las propiedades de las descargas seleccionadas" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Mover las descargas seleccionadas hacia arriba" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Mover las descargas seleccionadas hacia abajo" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Mover las descargas seleccionadas al principio" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Mover las descargas seleccionadas al final" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nueva categoría" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Copiar -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Propiedades de la categoría" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Propiedades de la descarga" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Nuevo Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nuevo metaenlace" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Abrir archivo Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Archivo Torrent (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Abrir archivo de metaenlace" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Fallo al guardar archivo de categoría." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Fallo al cargar archivo de categoría." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Guardar archivo de Categoría" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Abrir archivo de Categoría" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "Archivo JSON (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Enlace " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Imagen " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Archivo de texto" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importar URLs de archivo HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "Archivo HTML (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importar URLs de archivo de texto" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Archivo de texto plano." #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Exportar URLs a un archivo de texto" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Secuencia de URL's en masa" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "No se encontraron URLs en el portapapeles." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Existían todas las URL." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "En masa del portapapeles..." #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Nuevo" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Error" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Mensaje" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d elementos seleccionados" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Atención uGetters:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "Estamos ejecutando una unidad de donación para el desarrollo futuro de uGet, por favor haga clic" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "AQUÃ" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "por favor llene esta encuesta rápida de usuario para uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "haga clic aquí para tomar la encuesta" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Nombre de la categoría:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "_Descargas activas:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Capacidad de finalizados:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Capacidad de reciclados:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Condiciones de emparejamiento URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Hosts_Emparejados:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Sistemas_Emparejados:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Tipos_de_emparejamientos:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "¿Salir realmente?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "¿Está seguro que quiere salir?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "¿Realmente eliminar archivos?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "¿Está seguro que quiere eliminar los archivos?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "¿Realmente eliminar la categoría?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "¿Está seguro que quiere eliminar la categoría?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "No volver a preguntar" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Espejos:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Archivo:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Seleccionar carpeta" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Carpeta:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Referencia:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Máximo de conexiones:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Ejecutar" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_ausar" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Ingresar" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Usuario:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Contraseña:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Archivo Cookie:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Seleccionar archivo cookie" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Archivo posteado:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Selecccionar archivo posteado" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Agente de Usuario:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_Límite de reintentos:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "veces" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "_Retardo reintentos:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "segundos" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Velocidad máxima de subida:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Velocidad máxima de descarga:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Recuperar estampa de tiempo" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Archivo" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "Lote de descargas" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "En masa desde el _portapapeles..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "Secuencia de _URL's en masa..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Archivo de importación de _texto (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Archivo de importación _HTML (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Exportar a archivo de texto(.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Abrir categoría..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Guardar categoría como..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Guardar _todos los ajustes" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Modo sin conexión" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Editar" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_Monitoreo del portapapeles" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Portapapeles trabaja silenciosamente" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Línea de comandos trabaja silenciosamente" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Saltar URI existente" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Aplicar configuración de descargas recientes" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "Al finalizar _Acciones-Automáticas" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Deshabilitar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Hibernar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Suspender" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Apagar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Reiniciar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Personalizado" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Recordar ajustes" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "Ay_uda" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Configuración..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Ver" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Barra de herramientas" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Barra de estado" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Resumen" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Sumario de Ã_tems" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Nombre" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Carpeta" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Mensaje" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "_Columnas de descarga" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Completado" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Tamaño" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Porcentaje '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Transcurrido" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Restante" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Velocidad" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Aumentar velocidad" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Subido" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Tasa" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Reintentos" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Añadido en" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Completado en" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Categoría" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nueva categoría..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Eliminar categoría" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Descarga" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Eliminar Entrada" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Eliminar Entrada y _Archivo" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Abrir carpeta _Contenedora" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Forzar inicio" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Mover a" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Prioridad" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Alta" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normal" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Baja" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Obtener ayuda en línea" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Documentación" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Foro de soporte" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Enviar información retroactiva" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Reportar un error" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr " Atajos de teclado" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Comprobar actualizaciones" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Configuración" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "No se puede ejecutar la aplicación asociada al archivo '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Esta carpeta no existe." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI ya existía" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Está URI ya existía, ¿esta seguro que desea continuar?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "General" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Avanzado" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Configuración de la categoría" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Por defecto para nueva descarga 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Por defecto 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "sin nombre" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Pausado" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Subiendo" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Completado" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Reciclados" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Cola" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Activo" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Todo el estado" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Nombre" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Completado" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Tamaño" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Transcurrido" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Restante" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Cantidad" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "No usar" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Predeterminado" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Host:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Puerto:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Args. sockets:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Elemento:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Lunes" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Martes" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Miércoles" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Jueves" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Viernes" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Sábado" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Domingo" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Habilitar planificador" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Activado" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- detiene todas las tareas" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normal" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- ejecuta tareas normalmente" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Todo" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Ninguno" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Marcar por filtro" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Marcar URLs por host Y por extensión de archivo." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Esto retablecerá todas las marcas de las URLs." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Host" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Ext. archivo" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Hipertexto de referencia base" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Marcar _todo" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "_Desmarcar todo" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Marcar por filtro..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "ej." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Desde:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Hasta:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "dígitos:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "D_esde:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "sensible a MAY/min" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "No hay caracteres comodín(*) en la URL de entrada." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "La URL no es válida." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "No hay caracteres en la entrada 'Desde' o 'Hasta'." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Vista previa" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Interfaz de usuario" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Ancho de banda" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Planificador" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Complemento" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Sitio web de medios" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Otros" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Activar monitor de portapapeles" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "Modo _silencioso" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Ãndice de categoría por defecto" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Añadir a la categoría Nth si ninguna categoría coincide." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_Monitorear la URL del sitio web de medios" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Monitorear portapapeles para determinados tipos de archivos:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Separe los tipos con el caracter '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "También puede usar expresiones regulares." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Confirmación" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Mostrar diálogo de confirmación al salir" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Confirmar eliminación de archivos" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Bandeja del sistema" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Siempre mostrar icono en bandeja" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Minimizar a la bandeja al inicio" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Ocultar a la bandeja al cerrar la ventana" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Usar indicador de aplicaciones de Ubuntu" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Habilitar modo fuera de línea al inicio" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Notificar inicio de descarga" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Sonido al finalizar la descarga" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Mostrar icono grande" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Esto afectará a todos los complementos." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Límite de velocidad global" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Velocidad de subida máxima" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Velocidad de descarga máxima" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Al finalizar Acciones-Automáticas" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Comando personalizado:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Comando personalizado si se produce un error:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Autoguardar" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Intervalo:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minutos" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Configuración de la línea de comandos" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Usar '--quiet' por defecto" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Complemento en orden correspondiente:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 opciones del complemento" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "Token secreto de autorización RPC" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Límite de velocidad global solo para aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Ejecutar aria2 al inicio" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Cerrar aria2 al salir" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Ejecutar aria2 en dispositivo local" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Ruta" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumentos" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Debe reiniciar uGet después de modificarlo." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Modo de emparejamiento de los medios:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Condiciones de coincidencia" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Calidad:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Tipo:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Archivo" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Carpeta" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Ãtem" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Valor" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Copiar _todo" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Mostrar ventana" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "Modo _fuera de línea" uget-2.2.3/po/kk.po0000664000175000017500000012430613602733704011003 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Baurzhan Muftakhidinov , 2016 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-09-22 23:51+0000\n" "Last-Translator: Baurzhan Muftakhidinov \n" "Language-Team: Kazakh (http://www.transifex.com/uget/uget/language/kk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kk\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Барлық Ñанаттар" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "БайланыÑты орнату..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "" #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Қайталау" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Жүктеме аÑқталды" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Дайын" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "" #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "" #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Ð¨Ñ‹Ò“Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ жоқ." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Қолдауы жоқ файл." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: белгіÑіз қате орын алған." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Қайта бағдарлаулар Ñаны тым көп." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Жүктемелер баÑқарушыÑÑ‹" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Baurzhan Muftakhidinov " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet негізін қалаған: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet жоба баÑқарушыÑÑ‹: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "тапÑырма" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Жаңа, алмаÑу буферінен" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Жаңа жүктеме" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "ÐлмаÑу буфері" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Командалық жол" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Қате орын алды" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Жүктеп алу қатеÑÑ–." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Жүктеп алу баÑталды" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Жүктемелер кезегін баÑтау." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Жүктеме аÑқталды" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Кезектегі барлық жүктемелер аÑқталды." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Күйі" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Санат" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Жаңа жүктемені жаÑау" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Жаңа _жүктеме..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Жаңа _Ñанат..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Жаңа торрент..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Жаңа метаÑілтеме..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Барлық баптауларды Ñақтау" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Таңдалған жүктемені орындалатын етіп белгілеу" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Таңдалған жүктемені аÑлдату" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Таңдалған жүктеменің баптауларын орнату" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Таңдалған жүктемені жоғары жылжыту" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Таңдалған жүктемені төмен жылжыту" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Таңдалған жүктемені баÑына жылжыту" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Таңдалған жүктемені Ñоңына жылжыту" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Жаңа Ñанат" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Көшірме - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Санат қаÑиеттері" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Жүктеме қаÑиеттері" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Жаңа торрент" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Жаңа метаÑілтеме" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Торрент файлын ашу" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrent файлы (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "МетаÑілтеме файлын ашу" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Санаттар файлын Ñақтау ÑәтÑіз аÑқталды." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Санаттар файлын жүктеу ÑәтÑіз аÑқталды." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Санаттар файлын Ñақтау" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Санаттар файлын ашу" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON файлы (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "" #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Мәтін файлы" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML файлы (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Жаңа" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Қате" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Хабарлама" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "" #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Шығуды қалайÑыз ба?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Санатты өшіруді шынымен қалайÑыз ба?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Мені келеÑіде Ñұрамау" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Ðйналар:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Файл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Буманы таңдау" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "Бу_ма:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Сілтеуші:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "О_рындалатын" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "Ð_Ñлдату" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Логин" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Пайдаланушы:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Пароль:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Cookie файлы:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Cookie файлын таңдау" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Post файлы:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Post файлын таңдау" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "рет" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "Ñекунд" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "КиБ/Ñек" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Файл" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "" #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "" #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "" #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "" #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Желіден Ñ‚Ñ‹Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "Тү_зету" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "Сө_ндіру" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "ГибернациÑ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Ұйықтату" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Сөндіру" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Қайта қоÑу" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Таңдауыңызша" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Көмек" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Баптаулар..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "Тү_рі" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Панель" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Қалып-күй жолағы" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "Жи_ынды мәлімет" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Ðты" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Бума" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_Сілтеме" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Хабарлама" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "Ó¨_лшемі" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "Қа_лды" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Жылдамдығы" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "Қа_йталау" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Санат" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Жаңа Ñанат..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "Санатты Ó©_шіру" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "Жү_ктеп алу" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "Элементті Ó©_шіру" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Элементті және _файлды өшіру" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "_ОрналаÑқан бумаÑын ашу" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Мәжбүрлі баÑтау" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "Қайда ж_ылжыту" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Приоритеті" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Жоғары" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "Òš_алыпты" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Төмен" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Желідегі көмек" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Құжаттама" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Қолдау көрÑету форумы" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Кері Ð±Ð°Ð¹Ð»Ð°Ð½Ñ‹Ñ Ð¿Ñ–ÐºÑ–Ñ€Ñ–Ð½ жіберу" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Ðқаулық жөнінде хабарлау" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Пернетақта жарлықтары" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Жаңартуларға текÑеру" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Баптаулар" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "'%s' файлы үшін үнÑіз келіÑім қолданбаÑын жөнелту мүмкін емеÑ." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Бұл бума жоқ болып тұр." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Жалпы" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Кеңейтілген" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Санат баптаулары" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "атауÑыз" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "ÐÑлдатылған" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "ÐÑқталған" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "БелÑенді" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Барлық қалып-күйлер" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Ðтауы" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "ÐÑқталды" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Өлшемі" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Өткен" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Қалды" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Саны" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "ПрокÑи:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Қолданбау" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "БаÑтапқы" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "ХоÑÑ‚:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Порт:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Сокет:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Сокет аргументтері:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "ДÑ" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "СÑ" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Ср" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "БÑ" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Жм" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Сн" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Жк" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Сөндіру" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- барлық тапÑырмаларды тоқтату" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Қалыпты" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- тапÑырманы қалыпты орындау" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Барлығы" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "ЕшнәрÑе" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "" #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "ХоÑÑ‚" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "" #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "мыÑ." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Ðлдын-ала қарау" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Пайдаланушы интерфейÑÑ–" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "ЖоÑпарлаушы" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "БаÑқалар" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Тыныш режимі" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "РаÑтау" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Жүйелік трей" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Трей таңбашаÑын әрқашан көрÑету" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "ІÑке қоÑылғанда, трейге қайыру" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Терезе жабылғанда, трейге қайыру" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Үлкен таңбашаны көрÑету" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_ÐвтоÑақтау" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Ðралығы:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "минут" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Командалық жол баптаулары" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "ОрналаÑу" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Ðргументтер" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "СапаÑÑ‹:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Түрі:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Файл" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Бума" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Элемент" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Мәні" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Бар_лығын көшіріп алу" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Терезені көрÑету" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "Желіден Ñ‚_Ñ‹Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–" uget-2.2.3/po/Makefile.in.in0000644000000000000000000001575613234604056012462 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ localedir = @localedir@ subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V)) INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@; .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $* $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $< .po.gmo: $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info ctags tags CTAGS TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/po/zh_CN.po0000664000175000017500000013107013602733704011373 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Demon Smith , 2018 # Dz Chen , 2015-2017 # jiajinming , 2014 # Tommy He , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2018-02-24 10:55+0000\n" "Last-Translator: Demon Smith \n" "Language-Team: Chinese (China) (http://www.transifex.com/uget/uget/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "密ç ç®¡ç†å™¨å®ˆæŠ¤ç¨‹åºï¼šuget\n\n当å°è¯• SSH 连接到 %s 时验è¯å®ƒçš„ hostkey 到已知和å—信任的 hosts 文件出现问题,因为它的 hostkey 并未找到。\n\n您想è¦å°†æ­¤è¿žæŽ¥æ­¤è¿žæŽ¥å’Œå°†æ¥çš„连接视为å—信任的å—?添加 %s's hostkey 到已知的 hosts 文件æ¥å®Œæˆæ­¤æ“作。" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "全部分类" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "连接中..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "ä¼ é€ä¸­..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "é‡è¯•" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "下载完æˆ" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "完æˆ" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "å¯ç»­ä¼ " #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "ä¸å¯ç»­ä¼ " #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "无法é‡å‘½å输出文件。" #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "无法连接到主机。" #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "无法创建文件夹。" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "无法创建文件(文件å错误或者文件已存在)。" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "无法打开文件。" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "创建线程失败。" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "䏿­£ç¡®çš„æ¥æº(文件尺寸ä¸åŒ)。" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "资æºä¸è¶³(ç£ç›˜å·²æ»¡æˆ–者内存ä¸è¶³)。" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "没有输出文件。" #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "没有输出设置。" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "é‡è¯•已达上é™ã€‚" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "䏿”¯æŒçš„æ–¹æ¡ˆ(åè®®)。" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "䏿”¯æŒçš„æ–‡ä»¶ã€‚" #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "未找到åŽå¤„ç†æ–‡ä»¶ã€‚" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "未找到 cookie 文件。" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "该视频已被移除。" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "获å–è§†é¢‘ä¿¡æ¯æ—¶å‘生错误。" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "获å–视频网页时å‘生错误。" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "未在 YouTube çš„ URL 上找到视频 ID" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: å‘生未知的错误。" #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: å‘生超时。" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: èµ„æºæœªæ‰¾åˆ°ã€‚" #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 é‡åˆ°æŒ‡å®šæ•°é‡çš„â€œèµ„æºæ— æ³•找到â€é”™è¯¯ã€‚查看 --max-file-not-found 选项" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: 速度过慢。" #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: å‘生网络问题。" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: 未完æˆçš„下载。" #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "资æºä¸å¯ç”¨" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: 分å—长度与 .aria2 é…置文件中ä¸åŒã€‚" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 正在下载相åŒçš„æ–‡ä»¶ã€‚" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 正在下载信æ¯å“ˆå¸Œå€¼ç›¸åŒçš„ç§å­ã€‚" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: 文件已存在。查看 --allow-overwrite 选项。" #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: 无法打开已存在文件。" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: 无法创建新文件或分割已有文件。" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: å‘生文件 I/O 错误。" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: åç§°è§£æžå¤±è´¥ã€‚" #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: æ— æ³•è§£æž Metalink 文档。" #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP 命令失败。" #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP å“应头错误或ä¸ç¬¦é¢„期。" #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "é‡å®šå‘已达上é™ã€‚" #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP 认è¯å¤±è´¥ã€‚" #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: æ— æ³•è§£æž bencoded 文件(通常是 .torrent 文件)。" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: ç§å­æ–‡ä»¶æŸå或缺少信æ¯ã€‚" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: ç£é“¾ URI 错误。" #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: é…置或者é…ç½®å‚æ•°é”™è¯¯/无法识别。" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: 远程æœåŠ¡å™¨æ— æ³•å¤„ç†è¯·æ±‚。" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: æ— æ³•è§£æž JSON-RPC 请求。" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "æ— å“应。aria2 是å¦å·²è¢«åœæ­¢ï¼Ÿ" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid 已被移除。" #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "获å–媒体链接失败。" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "没有匹é…的媒体。" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "下载管ç†å™¨" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "lh \nTommy He " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet 创始人:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet 项目管ç†å‘˜ï¼š" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "任务" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "从剪切æ¿ä¸­æ–°å»º" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "新建下载" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "剪切æ¿" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "命令行" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "å‘生错误" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "下载时å‘生错误。" #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "下载开始" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "开始下载队列。" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "下载完æˆ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "队列里所有下载都已完æˆã€‚" #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "状æ€" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "分类" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "创建新下载" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "新建下载(_D)..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "新建分类(_C)..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "å‰ªåˆ‡æ¿æ‰¹é‡ä¸‹è½½(_B)..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "新建 URL åºåˆ—下载(_U)..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "新建ç§å­..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "新建ç£é“¾..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "ä¿å­˜å…¨éƒ¨è®¾ç½®" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "è¿è¡Œé€‰ä¸­çš„下载" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "æš‚åœé€‰ä¸­çš„下载" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "设置选中的下载的属性" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "上移选中的下载" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "下移选中的下载" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "移动选中的下载到顶部" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "移动选中的下载到底部" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "新建分类" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "å¤åˆ¶ - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "分类属性" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "下载属性" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "新建ç§å­" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "新建ç£é“¾" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "打开ç§å­æ–‡ä»¶" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "ç§å­æ–‡ä»¶ (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "打开ç£é“¾æ–‡ä»¶" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "ä¿å­˜åˆ†ç±»æ–‡ä»¶å¤±è´¥ã€‚" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "载入分类文件失败。" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "ä¿å­˜åˆ†ç±»æ–‡ä»¶" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "打开分类文件" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON 文件 (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "链接 " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "å›¾åƒ " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "文本文件" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "从 HTML 文件中导入 URL 地å€" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML 文件 (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "从文本文件中导入 URL 地å€" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "纯文本文件" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "导出 URL 至文本文件" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL åºåˆ—下载" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "剪切æ¿ä¸­æ²¡æœ‰æ‰¾åˆ° URL 地å€ã€‚" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "所有的 URL 已存在。" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "å‰ªåˆ‡æ¿æ‰¹é‡ä¸‹è½½" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "新建" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "错误" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "ä¿¡æ¯" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "已选中 %d 个项目" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "uGet 用户们请注æ„:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "我们正在为ä¿è¯ uGet 的未æ¥å‘展的进行募æï¼ŒæåŠ©è¯·ç‚¹å‡»" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "这里" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "请填写 uGet 快速用户调查。" #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "点击这里å‚加调查" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "分类åç§°(_N):" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "åŒæ—¶è¿›è¡Œä¸‹è½½æ•°(_D):" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "\"已完æˆ\"分类的容é‡:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "\"回收站\"分类的容é‡:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI åŒ¹é…æ¡ä»¶" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "匹é…主机(_H):" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "åŒ¹é…æ¨¡å¼(_S):" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "匹é…类型(_T):" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "确认退出å—?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "您确认è¦é€€å‡ºå—?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "确认删除文件å—?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "您确认è¦åˆ é™¤è¿™äº›æ–‡ä»¶å—?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "确认删除分类?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "您确认è¦åˆ é™¤åˆ†ç±»å—?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "下次ä¸å†è¯¢é—®" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "URI(_U):" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "镜åƒ:" #: ../ui-gtk/UgtkDownloadForm.c:141 msgid "Leave blank to use default filename ..." msgstr "留空以使用默认文件å ..." #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "文件:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "选择文件夹" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "文件夹(_F):" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "引用页:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "最大连接数(_M):" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "开始(_R)" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "æš‚åœ((_A)" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "登录" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "用户:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "密ç :" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Cookie 文件" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "选择 Cookie 文件" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "å‘逿–‡ä»¶ï¼š" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "选择å‘逿–‡ä»¶" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "用户代ç†" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "é‡è¯•上é™(_L)" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "计数" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "é‡è¯•延迟(_D)" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "ç§’" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "最大上传速度:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "最大下载速度:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "å–回时间戳" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "文件(_F)" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "批é‡ä¸‹è½½(_B)" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "å‰ªåˆ‡æ¿æ‰¹é‡ä¸‹è½½(_C)..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "URL åºåˆ—下载(_U)..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "导入文本文件(_T)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "导入HTML文件(_H)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "导出文本文件(_E)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "打开分类(_O)..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "ä¿å­˜åˆ†ç±»ä¸º(_S)..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "ä¿å­˜å…¨éƒ¨è®¾ç½®(_A)" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "离线模å¼" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "编辑(_E)" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "剪切æ¿ç›‘视(_M)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "剪贴æ¿é™é»˜å·¥ä½œ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "命令行é™é»˜å·¥ä½œ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "跳过已存在 URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "使用上一次的下载设置" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "å®Œæˆæ—¶çš„自动æ“作(_A)" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "ç¦ç”¨(_D)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "休眠" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "挂起" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "关机" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "é‡å¯" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "自定义" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "è®°ä½è®¾ç½®" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "说明(_H)" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "设置(_S)..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "查看(_V)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "工具æ (_T)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "çŠ¶æ€æ " #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "概况(_S)" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "概况项目(_I)" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "åç§°(_N)" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "文件夹(_F)" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "URL(_U)" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "ä¿¡æ¯(_M)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "下载列(_C)" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "完æˆ(_C)" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "大å°(_S)" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "百分比 '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "已用时间(_E)" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "剩余(_L)" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "速度" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "上传速度" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "已上传" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "分享率" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "é‡è¯•(_R)" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "添加时间" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "å®Œæˆæ—¶é—´" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "分类(_C)" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "新建分类(_N)..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "删除分类(_D)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "下载(_D)" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "删除æ¡ç›®(_D)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "删除æ¡ç›®åŠæ–‡ä»¶(_F)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "打开ä¿å­˜æ–‡ä»¶å¤¹(_C)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "强制开始" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "移动到(_M)" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "优先级" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "高(_H)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "中(_N)" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "低(_L)" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "获å–在线帮助" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "文档" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "支æŒè®ºå›" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "æäº¤å馈" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "报告错误" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "键盘快æ·é”®" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "检查更新" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "设置" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "æ— æ³•ä½¿ç”¨é»˜è®¤ç¨‹åºæ‰“开文件 '%s'。" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - 文件夹ä¸å­˜åœ¨ã€‚" #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI 已存在" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "该 URI 已存在,您确定è¦ç»§ç»­ï¼Ÿ" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "一般" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "高级" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "分类设置" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "默认一般设置" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "默认高级设置" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "未命å" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "已暂åœ" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "正上传" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "已完æˆ" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "回收站" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "队列" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "活跃的" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "全部状æ€" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "åç§°" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "完æˆ" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "大å°" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "已完æˆ" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "剩余" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "æ•°é‡" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "ä»£ç†æœåС噍:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "ä¸ä½¿ç”¨" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "默认" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "主机:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "端å£:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "端å£å‚æ•°:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "对象:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "一" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "二" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "三" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "å››" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "五" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "å…­" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "æ—¥" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "å¯ç”¨ä¸‹è½½è®¡åˆ’(_E)" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "关闭" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- åœæ­¢æ‰€æœ‰çš„任务" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "正常" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- 正常è¿è¡Œä»»åŠ¡" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "全部" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "æ— " #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "æ ¹æ®è¿‡æ»¤è§„则选择" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "æ ¹æ®ä¸»æœºå’Œæ–‡ä»¶æ‰©å±•å选择 URL 地å€." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "将会é‡ç½®æ‰€æœ‰é€‰æ‹©çš„ URL 地å€." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "主机" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "文件扩展å." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "基本超文本引用" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "全选(_A)" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "å…¨ä¸é€‰(_N)" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "æ ¹æ®è¿‡æ»¤è§„则选择(_M)..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "例如" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "æ¥æº(_F):" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "到:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "æ•°å­—:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "从(_R):" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "区分大å°å†™" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "URL 输入框中没有通é…符(*)." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL 无效。" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "'æ¥æº'å’Œ'到'输入框为空。" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "预览" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "用户界é¢" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "带宽" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "下载计划" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "æ’ä»¶" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "媒体网站" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "å…¶ä»–" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "å¯ç”¨å‰ªè´´æ¿ç›‘控(_E)" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "é™é»˜æ¨¡å¼(_Q)" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "默认分类索引" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "如果没有匹é…分类则添加至第 N 个分类。" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "监控媒体网站的 URL(_M)" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "监控剪贴æ¿ä¸­çš„æŒ‡å®šæ–‡ä»¶ç±»åž‹ï¼š" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "使用符å·'|'æ¥åˆ†é𔿖‡ä»¶ç±»åž‹ã€‚" #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "您å¯ä»¥åœ¨è¿™é‡Œä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼ã€‚" #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "确认" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "é€€å‡ºæ—¶æ˜¾ç¤ºç¡®è®¤å¯¹è¯æ¡†" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "删除文件时需è¦ç¡®è®¤" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "系统托盘" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "始终显示托盘图标" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "程åºå¯åŠ¨è‡ªåŠ¨æœ€å°åŒ–到系统托盘" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "窗å£å…³é—­æ—¶ç¼©å°è‡³æ‰˜ç›˜" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "使用 Ubuntu çš„ App Indicator" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "程åºå¯åŠ¨ä½¿ç”¨ç¦»çº¿æ¨¡å¼" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "下载开始æç¤º" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "完æˆä¸‹è½½æ—¶å‘出声音" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "显示大图标" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "è¿™å°†å½±å“æ‰€æœ‰æ’件。" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "全局速度é™åˆ¶" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "最大上传速度" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "最大下载速度" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "å®Œæˆæ—¶çš„自动æ“作" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "自定义命令:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "错误å‘生时的自定义命令:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "自动ä¿å­˜(_A)" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "é—´éš”(_I):" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "分钟" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "命令行设置" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "默认使用 '--quiet'" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "æ’件匹é…顺åºï¼š" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 æ’件选项" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC 认è¯å¯†é’¥" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "针对 aria2 的全局速度é™åˆ¶" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "å¯åŠ¨æ—¶è¿è¡Œ aria2" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "退出时关闭 aria2" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "å¯åŠ¨æœ¬åœ°è®¾å¤‡ä¸Šçš„ aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "路径:" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "傿•°" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "您在修改它之åŽå¿…é¡»é‡å¯ uGet。" #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "åª’ä½“åŒ¹é…æ¨¡å¼ï¼š" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "åŒ¹é…æ¡ä»¶" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "è´¨é‡ï¼š" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "类型:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "文件" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "文件夹" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "项目" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "值" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "全部å¤åˆ¶(_A)" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "显示窗å£" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "离线模å¼(_O)" uget-2.2.3/po/zh_TW.po0000664000175000017500000012013713602733704011427 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # chhuang , 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-06 15:22+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: chhuang \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/uget/uget/language/" "zh_TW/)\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../uget/UgetApp.c:109 msgid "All Category" msgstr "全分類" #. UGET_EVENT_NORMAL_CUSTOM #: ../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "連線中..." #. UGET_EVENT_NORMAL_CONNECT #: ../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "傳輸中..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../uget/UgetEvent.c:60 ../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "é‡è©¦" #. UGET_EVENT_NORMAL_RETRY, #: ../uget/UgetEvent.c:61 msgid "Download completed" msgstr "下載完æˆ" #. UGET_EVENT_NORMAL_COMPLETE, #: ../uget/UgetEvent.c:62 ../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "å·²çµæŸ" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../uget/UgetEvent.c:64 msgid "Resumable" msgstr "å¯çºŒå‚³" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../uget/UgetEvent.c:65 ../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "無法續傳" #. UGET_EVENT_WARNING_CUSTOM #: ../uget/UgetEvent.c:73 ../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "輸出檔無法改å。" #. UGET_EVENT_ERROR_CUSTOM #: ../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "無法連接到主機。" #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../uget/UgetEvent.c:82 ../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "資料夾無法建立" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "檔案無法建立 (檔å錯誤或檔案已經存在)。" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "檔案無法開啟。" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "無法建立執行緒。" #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "䏿­£ç¢ºçš„ä¾†æº (檔案大å°ä¸åŒ)" #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "系統資æºä¸è¶³ (儲存空間或記憶體ä¸è¶³)" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../uget/UgetEvent.c:88 msgid "No output file." msgstr "沒有指定輸出檔案。" #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../uget/UgetEvent.c:89 msgid "No output setting." msgstr "沒有輸出的設定。" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "é‡è©¦å¤ªå¤šæ¬¡ã€‚" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "䏿”¯æ´çš„通訊å”定。" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "䏿”¯æ´çš„æª”案。" #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: 發生未知的錯誤。" #: ../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: 發生超時。" #: ../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: 找ä¸åˆ°è³‡æºã€‚" #: ../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specified number of 'resource not found' error. See --max-file-" "not-found option" msgstr "" "aria2 發ç¾'找ä¸åˆ°è³‡æº'的錯誤é”到指定的數é‡ã€‚è«‹çœ‹åƒæ•¸ --max-file-not-found" #: ../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: 數度太慢。" #: ../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: 發生網絡å•題。" #: ../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: æœªçµæŸçš„下載。" #. _("Not Resumable"), #: ../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "資æºç”¨ç›¡" #. _(), #: ../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: 片段長度和 .aria2 控制文件所紀錄的ä¸åŒã€‚" #. 11 - 20 #: ../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 已經下載éŽç›¸åŒçš„æª”案。" #: ../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 正在下載相åŒçš„ Torrent。" #: ../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2 æ–‡ä»¶å·²ç¶“å­˜åœ¨ã€‚è«‹çœ‹åƒæ•¸ --allow-overwrite" #. _("Output file can't be renamed."), #: ../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: 無法開啟已經存在的檔案." #: ../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: ç„¡æ³•å‰µå»ºæ–°çš„æ–‡ä»¶æˆ–æˆªæ–·ç¾æœ‰æ–‡ä»¶ã€‚" #: ../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: 發生文件讀寫錯誤。" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: å稱解æžå¤±æ•—。" #: ../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: 無法解æžçš„ Metalink 檔案。" #. 21 - 30 #: ../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP 命令失敗。" #: ../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP 回應開頭部分æå£žæˆ–é æœŸä»¥å¤–的。" #: ../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "釿–°å°Žå‘太多次." #: ../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP 授權失敗。" #: ../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: 無法解æžç·¨ç¢¼æ–‡ä»¶ï¼ˆé€šå¸¸æ˜¯ .torrent 文件)" #: ../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: torrent文件被æå£žæˆ–丟失信æ¯ã€‚" #: ../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet çš„ URI å·²æå£žã€‚" #: ../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: 收到æå£ž/無法識別的é¸é …或æ„外的é¸é …åƒæ•¸ã€‚" #: ../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: é ç¨‹æœå‹™å™¨ç„¡æ³•處ç†è«‹æ±‚。" #: ../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: ç„¡ç™¼åˆ†æž JSON-RPC 請求。" #: ../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "沒有回應。 aria2 是å¦é—œé–‰ï¼Ÿ" #. debug #: ../uget/UgetPluginAria2.c:650 msgid "aria2: gid was removed." msgstr "aria2: gid 已被删除。" #: ../uget/UgetPluginMedia.c:498 msgid "Failed to get media link." msgstr "" #: ../uget/UgetPluginMedia.c:514 msgid "No matched media." msgstr "" #: ../uget/UgetPluginMega.c:176 msgid "Can't handle this MEGA URL." msgstr "" #: ../uget/UgetPluginMega.c:203 msgid "Can't get download URL." msgstr "" #: ../uget/UgetPluginMega.c:653 msgid "decrypting file..." msgstr "" #: ../uget/UgetPluginMega.c:745 msgid "decryption completed" msgstr "" #: ../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "下載管ç†ç¨‹å¼" #: ../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "ç¹é«”中文 (zh_TW) - 黃正雄" #: ../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet 創立者: " #: ../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet 項目經ç†: " #. "↓" #. "↑" #: ../ui-gtk/UgtkApp-timeout.c:262 ../ui-gtk/UgtkTrayIcon.c:240 msgid "tasks" msgstr "任務" #: ../ui-gtk/UgtkApp-timeout.c:398 msgid "New from Clipboard" msgstr "從剪貼簿新增" #: ../ui-gtk/UgtkApp-timeout.c:400 ../ui-gtk/UgtkApp.c:912 msgid "New Download" msgstr "新增下載" #: ../ui-gtk/UgtkApp-timeout.c:424 ../ui-gtk/UgtkApp.c:1684 #: ../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "剪貼簿" #: ../ui-gtk/UgtkApp-timeout.c:426 msgid "Command line" msgstr "命令列" #: ../ui-gtk/UgtkApp-timeout.c:779 msgid "Error Occurred" msgstr "發生錯誤" #: ../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred during downloading." msgstr "下載期間發生錯誤。" #: ../ui-gtk/UgtkApp-timeout.c:781 msgid "Download Starting" msgstr "開始下載" #: ../ui-gtk/UgtkApp-timeout.c:782 msgid "Starting download queue." msgstr "開始下載佇列" #: ../ui-gtk/UgtkApp-timeout.c:783 msgid "Download Completed" msgstr "下載完æˆ" #: ../ui-gtk/UgtkApp-timeout.c:784 msgid "All queuing downloads have been completed." msgstr "所有排隊中的檔案下載完æˆ." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../ui-gtk/UgtkApp-ui.c:193 ../ui-gtk/UgtkDownloadForm.c:224 #: ../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "狀態" #. Summary Items - Category #. Download Columns - Category #: ../ui-gtk/UgtkApp-ui.c:195 ../ui-gtk/UgtkMenubar-ui.c:318 #: ../ui-gtk/UgtkMenubar-ui.c:346 ../ui-gtk/UgtkMenubar-ui.c:431 #: ../ui-gtk/UgtkNodeDialog.c:418 ../ui-gtk/UgtkNodeView.c:932 #: ../ui-gtk/UgtkNodeView.c:1020 ../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "分類" #: ../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "建立新的下載" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../ui-gtk/UgtkApp-ui.c:289 ../ui-gtk/UgtkMenubar-ui.c:58 #: ../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "新增下載(_D)..." #. New Category #: ../ui-gtk/UgtkApp-ui.c:300 ../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "新增分類(_C)..." #. New Clipboard batch #: ../ui-gtk/UgtkApp-ui.c:310 ../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "新增剪貼簿批次下載(_B)..." #. New URL Sequence batch #: ../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "新增 _URL åºåˆ—下載..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, gtk_separator_menu_item_new() ); #. New Torrent #: ../ui-gtk/UgtkApp-ui.c:335 ../ui-gtk/UgtkMenubar-ui.c:81 #: ../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "新增 Torrent..." #. New Metalink #: ../ui-gtk/UgtkApp-ui.c:342 ../ui-gtk/UgtkMenubar-ui.c:87 #: ../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "新增 Metalink..." #: ../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "儲存全部設定" #: ../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "鏿“‡çš„項目設定為å¯é‹è¡Œçš„" #: ../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "鏿“‡çš„項目設定為暫åœ" #: ../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "è¨­å®šé¸æ“‡çš„項目的內容" #: ../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "鏿“‡çš„é …ç›®å‘上移" #: ../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "鏿“‡çš„é …ç›®å‘下移" #: ../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "鏿“‡çš„é …ç›®å‘上移到頂" #: ../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "鏿“‡çš„é …ç›®å‘下移到底" #: ../ui-gtk/UgtkApp.c:881 msgid "New Category" msgstr "新增分類" #: ../ui-gtk/UgtkApp.c:891 msgid "Copy - " msgstr "複製 - " #: ../ui-gtk/UgtkApp.c:1047 msgid "Category Properties" msgstr "分類內容" #: ../ui-gtk/UgtkApp.c:1061 msgid "Download Properties" msgstr "下載內容" #: ../ui-gtk/UgtkApp.c:1302 msgid "New Torrent" msgstr "新增 Torrent" #: ../ui-gtk/UgtkApp.c:1318 msgid "New Metalink" msgstr "新增 Metalink" #: ../ui-gtk/UgtkApp.c:1327 msgid "Open Torrent file" msgstr "開啟 Torrent 檔案" #: ../ui-gtk/UgtkApp.c:1330 msgid "Torrent file (*.torrent)" msgstr "" #: ../ui-gtk/UgtkApp.c:1343 msgid "Open Metalink file" msgstr "開啟 Metalink 檔案" #: ../ui-gtk/UgtkApp.c:1383 msgid "Failed to save category file." msgstr "分類檔案儲存失敗。" #: ../ui-gtk/UgtkApp.c:1403 msgid "Failed to load category file." msgstr "分類檔案載入失敗。" #: ../ui-gtk/UgtkApp.c:1414 msgid "Save Category file" msgstr "儲存分類檔案" #: ../ui-gtk/UgtkApp.c:1432 msgid "Open Category file" msgstr "開啟分類檔案" #: ../ui-gtk/UgtkApp.c:1435 msgid "JSON file (*.json)" msgstr "" #. add link #: ../ui-gtk/UgtkApp.c:1491 msgid "Link " msgstr "é€£çµ " #. add image #: ../ui-gtk/UgtkApp.c:1496 msgid "Image " msgstr "å½±åƒ " #: ../ui-gtk/UgtkApp.c:1541 msgid "Text File" msgstr "文字檔案" #: ../ui-gtk/UgtkApp.c:1588 msgid "Import URLs from HTML file" msgstr "從 HTML 檔案匯入網å€" #: ../ui-gtk/UgtkApp.c:1591 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../ui-gtk/UgtkApp.c:1603 msgid "Import URLs from text file" msgstr "從文字檔案匯入網å€" #: ../ui-gtk/UgtkApp.c:1606 msgid "Plain text file" msgstr "" #: ../ui-gtk/UgtkApp.c:1618 msgid "Export URLs to text file" msgstr "匯出網å€åˆ°æ–‡å­—檔案" #: ../ui-gtk/UgtkApp.c:1637 msgid "URL Sequence batch" msgstr "URL åºåˆ—下載" #: ../ui-gtk/UgtkApp.c:1663 msgid "No URLs found in clipboard." msgstr "å‰ªè²¼ç°¿è£¡é¢æ²’有網å€ã€‚" #: ../ui-gtk/UgtkApp.c:1672 msgid "All URLs had existed." msgstr "全部的 URL 都已經存在。" #: ../ui-gtk/UgtkApp.c:1677 msgid "Clipboard batch" msgstr "剪貼簿批次下載" #: ../ui-gtk/UgtkApp.c:1766 msgid "New" msgstr "新增" #: ../ui-gtk/UgtkApp.c:1807 ../ui-gtk/UgtkMenubar.c:460 #: ../ui-gtk/UgtkMenubar.c:492 ../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "錯誤" #: ../ui-gtk/UgtkApp.c:1815 ../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "訊æ¯" #: ../ui-gtk/UgtkApp.c:1931 #, c-format msgid "Selected %d items" msgstr "已鏿“‡ %d 個項目" #: ../ui-gtk/UgtkBanner.c:145 ../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "關注 uGetters:" #: ../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "我們正在進行uGet未來發展的募æï¼Œè«‹æŒ‰" #: ../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "這裡" #: ../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "請填寫快速用戶調查。" #: ../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "按這裡åƒåŠ èª¿æŸ¥" #: ../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "分類å稱(_N):" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "啟動下載數é‡(_D):" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "'å·²çµæŸ'的容é‡:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "'回收å€'的容é‡:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI é…å°æ¢ä»¶" #: ../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "é…å°ä¸»æ©Ÿ(_H):" #: ../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "é…å°å”è­°(_S):" #: ../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "é…å°æª”案類型(_T):" #: ../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "真的è¦é›¢é–‹?" #: ../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "你確定è¦é›¢é–‹?" #: ../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "真的è¦åˆªé™¤æ–‡ä»¶ï¼Ÿ" #: ../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "你確定è¦åˆªé™¤æª”案?" #: ../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "真的è¦åˆªé™¤åˆ†é¡žï¼Ÿ" #: ../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "你確定è¦åˆªé™¤åˆ†é¡ž?" #: ../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "ä¸‹æ¬¡åˆ¥å•æˆ‘" #. URL - label #: ../ui-gtk/UgtkDownloadForm.c:111 ../ui-gtk/UgtkSequence.c:235 msgid "_URI:" msgstr "ç¶²å€(_U)" #. Mirrors - label #: ../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "é¡åƒ:" #: ../ui-gtk/UgtkDownloadForm.c:141 msgid "Leave blank to use default filename ..." msgstr "ä¿æŒç©ºç™½ä»¥ä½¿ç”¨é è¨­æª”å ..." #. File - label #: ../ui-gtk/UgtkDownloadForm.c:146 ../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "檔案:" #: ../ui-gtk/UgtkDownloadForm.c:166 ../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "鏿“‡è³‡æ–™å¤¾" #. Folder - label #: ../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "資料夾(_F):" #. Referrer - label #: ../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "åƒç…§ä½å€:" #. "Max Connections:" - title label #: ../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "最大連線數(_M)" #: ../ui-gtk/UgtkDownloadForm.c:230 ../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "å¯é‹è¡Œ(_R)" #: ../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "æš«åœ(_A)" #. ---------------------------------------------------- #. frame for login #: ../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "登入" #. User - label #. user label & entry #: ../ui-gtk/UgtkDownloadForm.c:252 ../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "使用者:" #. Password - label #. password label & entry #: ../ui-gtk/UgtkDownloadForm.c:268 ../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "密碼:" #. label - cookie file #: ../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "cookie 資料檔" #: ../ui-gtk/UgtkDownloadForm.c:310 ../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "鏿“‡ cookie 資料檔" #. label - post file #: ../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Post 檔案:" #: ../ui-gtk/UgtkDownloadForm.c:336 ../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "鏿ª¡ Post 檔案" #. label - user agent #: ../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "用戶代ç†:" #. Retry limit - label #: ../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "é‡è©¦é™åˆ¶(_L):" #. counts - label #: ../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "次" #. Retry delay - label #: ../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "é‡è©¦å»¶é²(_D):" #. seconds - label #: ../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "ç§’" #. label - Max upload speed #: ../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "最大上傳速度" #. label - "KiB/s" #: ../ui-gtk/UgtkDownloadForm.c:418 ../ui-gtk/UgtkDownloadForm.c:436 #: ../ui-gtk/UgtkSettingForm.c:311 ../ui-gtk/UgtkSettingForm.c:323 #: ../ui-gtk/UgtkSettingForm.c:612 ../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "最大下載速度" #. Retrieve timestamp #: ../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "å–回時間戳記" #: ../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "檔案(_F)" #. Batch Downloads --- start --- #: ../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "批次下載(_B)" #. Batch downloads - Clipboard batch #: ../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "剪貼簿批次下載(_C)..." #. Batch downloads - URL Sequence batch #: ../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL åºåˆ—下載..." #. Batch downloads - Text file import (.txt) #: ../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "匯入文字檔(_T)..." #. Batch downloads - HTML file import (.html) #: ../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "匯入HTML檔(_H)..." #. Batch downloads - Export to Text file (.txt) #: ../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "匯出文字檔(_E)..." #. Open Category #: ../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "開啟分類檔案(_O)..." #. Save Category #: ../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "å¦å­˜åˆ†é¡žç‚º(_S)..." #. Save All #: ../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "儲存全部設定(_A)" #. Offline mode #: ../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "離線模å¼" #: ../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "編輯(_E)" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. Settings shortcut #: ../ui-gtk/UgtkMenubar-ui.c:215 ../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "監視剪貼簿(_M)" #: ../ui-gtk/UgtkMenubar-ui.c:219 ../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "剪貼簿é™é™åœ°å·¥ä½œ" #: ../ui-gtk/UgtkMenubar-ui.c:223 ../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "命令列é™é™åœ°å·¥ä½œ" #: ../ui-gtk/UgtkMenubar-ui.c:227 ../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "è·³éŽå·²æœ‰çš„URI" #: ../ui-gtk/UgtkMenubar-ui.c:231 ../ui-gtk/UgtkSettingForm.c:223 #: ../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "套用上一次的下載設定" #. --- Completion Auto-Actions --- start --- #: ../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "完æˆè‡ªå‹•æ“作(_A)" #. Completion Auto-Actions - Disable #: ../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "ç¦ç”¨(_D)" #: ../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "休眠" #: ../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "æš«åœ" #: ../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "關機" #: ../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "釿–°é–‹æ©Ÿ" #: ../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "自訂" #. Completion Auto-Actions - Remember #: ../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "記ä½è¨­å®š" #. Completion Auto-Actions - Help #: ../ui-gtk/UgtkMenubar-ui.c:279 ../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "說明(_H)" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../ui-gtk/UgtkMenubar-ui.c:285 ../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "設定(_S)..." #: ../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "檢視(_V)" #: ../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "工具列(_T)" #: ../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "狀態列" #: ../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "摘è¦(_S)" #. Summary Items --- start --- #: ../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "摘è¦é …ç›®(_I)" #. Summary Items - Name #: ../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "å稱(_N)" #. Summary Items - Folder #: ../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "資料夾(_F)" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../ui-gtk/UgtkMenubar-ui.c:356 ../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "ç¶²å€(_U)" #. Summary Items - Message #: ../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "訊æ¯(_M)" #: ../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "下載欄ä½(_C)" #. Download Columns - Complete #: ../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "完æˆ(_C)" #. Download Columns - Total #: ../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "大å°(_S)" #. Download Columns - Percent (%) #: ../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "百分比 '%' (_P)" #. Download Columns - Elapsed #: ../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "ç¶“éŽæ™‚é–“(_E)" #. Download Columns - Left #: ../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "剩餘時間(_L)" #. Download Columns - Speed #: ../ui-gtk/UgtkMenubar-ui.c:406 ../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "速度" #. Download Columns - Up Speed #: ../ui-gtk/UgtkMenubar-ui.c:411 ../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "上傳速度" #. Download Columns - Uploaded #: ../ui-gtk/UgtkMenubar-ui.c:416 ../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "上傳大å°" #. Download Columns - Ratio #: ../ui-gtk/UgtkMenubar-ui.c:421 ../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "分享比" #. Download Columns - Retry #: ../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "é‡è©¦(_R)" #. Download Columns - Added On #: ../ui-gtk/UgtkMenubar-ui.c:441 ../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "加入時間" #. Download Columns - Completed On #: ../ui-gtk/UgtkMenubar-ui.c:446 ../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "å®Œæˆæ™‚é–“" #: ../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "分類(_C)" #. New Category #: ../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "新增分類(_N)..." #. Delete Category #: ../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "刪除分類(_D)" #: ../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "下載(_D)" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, accel_group); #: ../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "刪除資料(_D)" #: ../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "刪除檔案和資料(_F)" #: ../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "開啟所在的資料夾(_C)" #: ../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "強制開始" #. Move to --- start --- #: ../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "æ¬ç§»åˆ°(_M)" #. Priority --- start --- #: ../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "優先權" #: ../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "高(_H)" #: ../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "一般(_N)" #: ../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "低(_L)" #. Get Help Online #: ../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "å–得線上å”助" #. Documentation #: ../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "文件" #. Support Forum #: ../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "支æ´è«–å¦" #. Submit Feedback #: ../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "æäº¤å饋" #. Report a Bug #: ../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "回報錯誤" #. Keyboard Shortcuts #: ../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "å¿«æ·éµ" #. Check for Updates #: ../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "檢查更新" #: ../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "設定" #: ../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "無法啟動檔案 '%s' çš„é è¨­æ‡‰ç”¨ç¨‹å¼." #: ../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - 這個資料夾ä¸å­˜åœ¨." #. title #: ../ui-gtk/UgtkNodeDialog.c:219 ../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI已經存在" #: ../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "這個URI已經存在,你確定è¦ç¹¼çºŒå—Žï¼Ÿ" #: ../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "一般設定" #: ../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "進階設定" #: ../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "分類設定" #: ../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "新增下載的é è¨­å€¼ 1" #: ../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "é è¨­å€¼ 2" #: ../ui-gtk/UgtkNodeView.c:143 ../ui-gtk/UgtkNodeView.c:608 #: ../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "未命å" #: ../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "æš«åœ" #: ../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "上傳中" #: ../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "已完æˆ" #: ../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "回收å€" #: ../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "排隊中" #: ../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "æ´»èºçš„" #: ../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "全狀態" #: ../ui-gtk/UgtkNodeView.c:773 ../ui-gtk/UgtkSettingDialog.c:101 #: ../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "å稱" #: ../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "完æˆ" #: ../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "大å°" #: ../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "ç¶“éŽæ™‚é–“" #: ../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "剩餘時間" #: ../ui-gtk/UgtkNodeView.c:946 ../ui-gtk/UgtkSettingForm.c:584 #: ../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "ç¶²å€" #: ../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "數é‡" #. proxy type label & combo box #: ../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "代ç†ä¼ºæœå™¨:" #: ../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "ä¸ä½¿ç”¨" #: ../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "é è¨­" #. host label & entry #: ../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "主機:" #. port label & entry #: ../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "埠號:" #: ../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Socket args:" #: ../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "一" #: ../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "二" #: ../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "三" #: ../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "å››" #: ../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "五" #: ../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "å…­" #: ../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "æ—¥" #: ../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "啟用排程器(_E)" #. Turn off - label #: ../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "關閉" #. Turn off - help label #: ../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- åœæ­¢æ‰€æœ‰ä»»å‹™" #. Normal - label #: ../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "一般" #. Normal - help label #: ../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- 正常é‹è¡Œ" #: ../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "全部" #: ../ui-gtk/UgtkSelector.c:259 ../ui-gtk/UgtkSequence.c:59 msgid "None" msgstr "清除" #: ../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "æ¢ä»¶æ¨™è¨˜" #: ../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "用主機å稱和副檔å來標記網å€." #: ../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "é€™å€‹åŠŸèƒ½æœƒé‡æ–°è¨­å®šæ‰€æœ‰çš„æ¨™è¨˜." #. filter view ----------------------- #. left side #: ../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "主機å稱" #. right side (filename extension) #: ../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "副檔å" #: ../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "ç¶²å€" #: ../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "基本超文本引用" #. select all #: ../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "標記全部(_A)" #. select none #: ../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "清除標記(_N)" #. select by filter #: ../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "æ¢ä»¶æ¨™è¨˜(_M)" #: ../ui-gtk/UgtkSequence.c:61 msgid "Num" msgstr "" #: ../ui-gtk/UgtkSequence.c:63 msgid "Char" msgstr "" #. Label - To #: ../ui-gtk/UgtkSequence.c:89 msgid "To:" msgstr "到:" #. label - digits #: ../ui-gtk/UgtkSequence.c:104 msgid "digits:" msgstr "使•¸:" #. label - case-sensitive #: ../ui-gtk/UgtkSequence.c:128 msgid "case-sensitive" msgstr "大å°å¯«ä¸åŒ" #. e.g. #: ../ui-gtk/UgtkSequence.c:246 msgid "e.g." msgstr "範例" #: ../ui-gtk/UgtkSequence.c:295 msgid "URI is not valid." msgstr "ä¸åˆæ³•的網å€." #: ../ui-gtk/UgtkSequence.c:303 msgid "No wildcard(*) character in URI entry." msgstr "ç¶²å€é …目裡沒有è¬ç”¨å­—å…ƒ(*)." #: ../ui-gtk/UgtkSequence.c:311 msgid "No character in 'From' or 'To' entry." msgstr "'從'或'到'的項目裡沒有資料." #: ../ui-gtk/UgtkSequence.c:393 msgid "Preview" msgstr "é è¦½" #: ../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "用戶界é¢" #: ../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "頻寬" #: ../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "排程器" #: ../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "外掛程å¼" #: ../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "媒體網站" #: ../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "å…¶ä»–" #. Monitor button #: ../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "監視剪貼簿(_E)" #. quiet mode #: ../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "å®‰éœæ¨¡å¼(_Q)" #: ../ui-gtk/UgtkSettingForm.c:72 ../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "é è¨­åˆ†é¡žç´¢å¼•" #: ../ui-gtk/UgtkSettingForm.c:84 ../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "添加到第N個分類,如果沒有匹é…的類別。" #. media or storage website #: ../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of website" msgstr "監視網站的 URL" #: ../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "監視剪貼簿裡指定的檔案類型:" #: ../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "用 '|' 字元分隔檔案類型." #: ../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "這裡å¯ä»¥ä½¿ç”¨æ­£è¦è¡¨é”å¼." #: ../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "確èª" #. Confirmation check buttons #: ../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "關閉時確èª" #: ../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "刪除檔案時確èª" #: ../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "系統列" #. System Tray check buttons #: ../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "æ°¸é é¡¯ç¤ºç³»çµ±åˆ—圖示" #: ../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "啟動時縮å°åˆ°ç³»çµ±åˆ—" #: ../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "關閉視窗時縮å°åˆ°ç³»çµ±åˆ—" #: ../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "使用Ubuntuçš„ App Indicator" #: ../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "啟動時進入離線模å¼" #: ../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "開始下載時通知" #: ../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "ä¸‹è¼‰å®Œæˆæ™‚發出è²éŸ³" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "顯示大圖示" #: ../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "這些將影響到所有的外掛程å¼ã€‚" #. Global speed limit #: ../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "全體速度é™åˆ¶" #: ../ui-gtk/UgtkSettingForm.c:309 ../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "最大上傳速度" #: ../ui-gtk/UgtkSettingForm.c:321 ../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "最大下載速度" #: ../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "完æˆè‡ªå‹•æ“作" #: ../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "自定命令:" #: ../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occurred:" msgstr "如果發生錯誤時自定命令:" #: ../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "自動存檔(_A)" #. auto save interval label #: ../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "é–“éš”(_I):" #. auto save interval unit label #: ../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "分é˜" #. Commandline Settings #: ../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "命令列設定" #. --quiet #: ../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "é è¨­ä½¿ç”¨ '--quiet' åƒæ•¸" #: ../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "外掛程å¼åŒ¹é…é †åº:" #: ../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 外掛程å¼é¸é …" #: ../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "é ç¨‹å‘¼å«æŽˆæ¬Šå¯†ç¢¼" #. ------------------------------------------------------------------------ #. Speed Limits #: ../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Aria2 全域速度é™åˆ¶" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "啟動時執行 aria2" #. shutdown #: ../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "離開時關閉 aria2" #. ------------------------------------------------------------------------ #. Local options #: ../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "本地設備執行 aria2" #: ../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "路徑" #: ../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "åƒæ•¸" #. Arguments - hint #: ../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "修改'åƒæ•¸'ä¹‹å¾Œå¿…é ˆé‡æ–°å•Ÿå‹• uGet。" #: ../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "媒體é…å°æ¨¡å¼:" #: ../ui-gtk/UgtkSettingForm.c:788 msgid "Don't match" msgstr "ä¸é…å°" #: ../ui-gtk/UgtkSettingForm.c:790 msgid "Match 1 condition" msgstr "符åˆ1個é…å°æ¢ä»¶" #: ../ui-gtk/UgtkSettingForm.c:792 msgid "Match 2 condition" msgstr "符åˆ2個é…å°æ¢ä»¶" #: ../ui-gtk/UgtkSettingForm.c:794 msgid "Near quality" msgstr "è¿‘ä¼¼å“質" #: ../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "é…å°æ¢ä»¶" #. Quality #: ../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "å“質:" #. Type #: ../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "æ ¼å¼:" #: ../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "檔案" #: ../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "目錄" #: ../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "é …ç›®" #: ../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "值" #. Copy All #: ../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "複製全部(_A)" #. Show window #: ../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "顯示視窗" #. Offline mode #: ../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "離線模å¼(_O)" #~ msgid "_From:" #~ msgstr "從(_F):" #~ msgid "F_rom:" #~ msgstr "從(_R):" uget-2.2.3/po/id.po0000664000175000017500000013165713602733704011001 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # benny , 2013 # Hasan Al Banna, 2014 # Ikhwan Setiawan , 2014 # Muhammad Iqbal , 2013 # Rendiyono Wahyu Saputro , 2015 # Rizal Muttaqin , 2014 # Sony 2TH , 2016 # Yurike, 2014 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Sony 2TH \n" "Language-Team: Indonesian (http://www.transifex.com/uget/uget/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Semua Kategori" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Menghubungkan" #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Sedang mengirim" #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Ulangi" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Download selesai" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Selesai" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Dapat dilanjutkan" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Tidak dapat dilanjutkan" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Tidak dapat mengubah nama file" #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "Tidak dapat menyambung ke host" #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Map tidak bisa dibuat " #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Berkas tidak dapat dibuat (kesalahan penamaan atau berkas sudah ada)" #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Berkas tidak dapat dibuka" #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Tidak dapat membuat thread." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Sumber tidak benar (ukuran file berbeda)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Melebihi kapasitas (penyimpanan penuh atau melebihi kapasitas memori)" #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Berkas keluaran tidak ada" #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Tidak ada pengaturan keluaran" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Terlalu banyak mengulang" #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Skema tidak di dukung (protokol)" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Berkas tidak didukung" #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "catatan berkas tidak ditemukan." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "cookie berkas tidak ditemukan." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Video ini telah dihapus." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Kesalahan terjadi selama mendapatkan info video." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Kesalahan terjadi selama mendapatkan halaman web video." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "Tidak ada video_id ditemukan di URL Youtube ini." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: sebuah galat yang tidak diketahui terjadi." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: kehabisan waktu terjadi." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: sumber daya tidak ditemukan." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 melihat angka spesifik dari galat 'sumber daya tidak ditemukan'. Lihat opsi --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: kecepatan terlalu lambat." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: masalah jaringan terjadi." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: Unduhan yang belum selesai." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Keluar dari sumber daya" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: panjang bagian berbeda dari satunya di berkas kendali .aria2." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 telah mengunduh berkas yang sama." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 telah mengunduh informasi hash torrent." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: berkas sudah ada. Lihat opsi --boleh-timpa." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: tidak bisa membuka berkas yang ada." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: tidak bisa membuat berkas baru atau memotong berkas yang ada." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: galat I/O berkas terjadi." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: resolusi nama gagal." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: tidak bisa mengurai dokumen Metalink." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: perintah FTP gagal." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: kepala respon HTTP buruk atau tak terduga." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Terlalu banyak pengalihan" #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: autorisasi HTTP gagal." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: tidak bisa mengurai berkas bencoded(biasanya berkas .torrent)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: berkas torrent rusak atau kehilangan informasi." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI buruk." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: opsi buruk/tidak dikenal telah diberikan atau argumen opsi tak terduga diberikan." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: remote server tidak dapat menangani permintaan." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: tidak dapat mengurai permintaan JSON-RPC." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Tidak ada respon. Apakah aria2 mati?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid telah dihapus." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Gagal untuk mendapatkan tautan media." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Tidak sesuai media." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Download Manager" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Daftar penerjemah" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "Pendiri uGet: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Manajer Proyek uGet: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "tugas" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Baru dari klipboard" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Download Baru" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Papan klip" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Baris perintah" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Galat Terjadi" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Galat Terjadi ketika sedang mengunduh." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Memulai Unduhan" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Memulai antrian unduhan" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Unduhan selesai" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Semua antrian unduhan sudah selesai" #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Status" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategori" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Membuat unduhan baru" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Unduhan_ Baru" #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Kategori_Baru" #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Batch_Klipboard Baru" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Rangkaian baru kumpulan _URL" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Torrent Baru..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Metalink Baru..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Simpan semua pengaturan" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Pilih unduhan untuk dilanjutkan" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Pilih unduhan untuk berhenti sebentar" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Atur properti unduhan yang dipilih" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Pindahkan unduhan terpilih keatas" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Pindah unduhan terpilih kebawah" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Pindah unduhan terpilih ke paling atas" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Pindah unduhan terpilih ke paling bawah" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Kategori Baru" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Salin -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Kategori Properti" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Properti Download" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Torrent Baru" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Metalink Baru" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Buka file Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Berkas torrent (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Membuka file Metalink" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Gagal untuk menyimpan berkas kategori" #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Gagal untuk memuat berkas kategori" #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Simpan Berkas kategori" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Buka Berkas kategori" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "Berkas JSON (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Tautan " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Gambar " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Berkas Teks" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Mengimpor URLs dari berkas HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "Berkas HTML (*.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Mengimpor URLs dari berkas teks" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Berkas text biasa" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Ekspor URL ke berkas teks" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Urutan kumpulan URL" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Tidak ada URL ditemukan pada papan klip" #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Semua URL telah ada" #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Kumpulan papan klip" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Baru" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Kesalahan " #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Pesan" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Memilih %d items" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Perhatian uGetters:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "kami menjalankan Donation Drive untuk pengembangkan uGet ke depannya, tolong klik" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "DISINI" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "Harap isi Survei Pengguna untuk uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "klik disini untuk mengikuti survei" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Nama_kategori" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Unduhan_aktif" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Kapasitas yang telah selesai:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Kapasitas yang didaur ulang:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Kondisi Pencocokan URL" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Cocok _Host:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Cocok _Skema:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Cocok _Tipe:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Apakah yakin mau keluar?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Apakah anda yakin akan keluar?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Yakin akan menghapus file?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Apakah Anda yakin akan menghapus file ini?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Sungguh menghapus kategori?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Apakah kamu yakin ingin menghapus kategori?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Jangan tanya saya lagi" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Mirror:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Nama Berkas:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Memilih Folder" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Folder" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Penghubung:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_ Koneksi Maks:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Dapat dijalankan" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "_Jeda" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Login" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Pengguna:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Kata kunci" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Berkas cookie" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Pilih Berkas Cookie" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Berkas postingan:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Pilih berkas postingan" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Kurir:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Batas_mengulang" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "Jumlah" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Penundaan_mengulang:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "detik" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Kecepatan unggah maksimal:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Kecepatan unduh maksimal:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Mengambil catatan waktu" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Berkas" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Batch Downloads" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_batch klipboard" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_Urutan Batch URL" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Impor berkas teks (.txt)" #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_Impor berkas HTML (.html)" #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Export ke berkas Text (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Buka kategori..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Simpan kategori sebagai..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Simpan _semua pengaturan" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Mode Offline" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Edit" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Pemantau_ Papan Klip" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Papan klip bekerja diam - diam" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Baris perintah bekerja diam - diam" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Lewati URL yang ada" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Terapkan pengaturan unduh baru-baru ini" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "Penyelesaian _Aksi Otomatis" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Nonaktifkan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Hibernasi" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Menangguhkan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Matikan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Hidupkan Ulang" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Kustom" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Ingat pengaturan" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Bantuan" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Pengaturan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Tampilan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Peralatan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Barstatus" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Hasil" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Butir _Ringkasan" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Nama" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Folder" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL/Alamat" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Rincian" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Kolom_ Unduhan" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Selesai" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Ukuran" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Persentasi '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Sudah berjalan" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Tersisa" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Kecepatan" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Kecepatan Unggah" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Terunggah" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Perbandingan" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_mengulang" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Ditambahkan Pada" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Selesai Pada" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategori" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Kategori Baru" #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Hapus Kategori" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Unduh" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Hapus Entri" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Hapis Entri dan _Berkas" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Buka _Folder yang berisi" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Mulai Paksa" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Pindah Ke" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Prioritas" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Tinggi" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normal" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Rendah" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Dapatkan Bantuan Online" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentasi" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Dukungan Forum" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Kirim Saran" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Melaporkan Masalah" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Cara Pintas Keyboard" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Periksa Update" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Pengaturan" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Tidak bisa menjalankan aplikasi untuk file '%s'" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Berkas ini tidak ditemukan." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI telah ada" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "URI ini telah ada, apa kamu ingin lanjutkan?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Umum" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Tingkat Lanjut" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Atur Kategori" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Bawaan untuk unduhan baru 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Bawaan 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "tidak dinamai" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Berhenti sejenak" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Mengunggah" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Selesai" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Kembalikan" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Antrian" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktif" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Semua Status" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Nama" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Selesai" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Ukuran" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Sudah berjalan" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Tersisa" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Kuantitas" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Jangan gunakan" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Bawaan" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Host:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Soket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "args Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Elemen:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Senin" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Selasa" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Rabu" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Kamis" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Jumat" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Sabtu" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Minggu" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Aktifkan Penjadwalan" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Matikan" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- hentikan semua tugas" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normal" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- jalankan tugas secara normal" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Semuanya" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Tidak ada" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Tandai berdasarkan filter" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Tandai URLs berdasarkan host dan ekstensi berkas" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Ini akan mereset semua tanda pada URL" #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Host" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Ekstensi File" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Referensi dasar hypertext" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Tandai_Semua" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Hilangkan_Tanda" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Tandai berdasarkan filter" #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "contoh" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Dari:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Ke:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "digit" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_Dari:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "hurup besar & kecil dibedakan" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Tidak boleh ada character wildcard(*) di entri URL." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL tidak valid." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Tidak ada karakter di entri 'Dari' atau 'Ke'." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Lihat" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Antarmuka Pengguna" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Bandwidth" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Pengatur Jadwal" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Plug-In" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Media situs web" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Lainnya" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Aktifkan pemantau papan klip" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Mode senyap" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Index kategori standar" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Tambahkan ke kategori ke-N jika tidak ada kategori yang cocok." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_Mengamati URL dari media situs web" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Pantau papan klip untuk tipe berkas tertentu:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Pisahkan tuisan dengan carakter '|'" #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Anda dapat menggunakan regular ekspresi disini" #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Konfirmasi" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Tampilkan dialog konfirmasi saat keluar" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Konfirmasi ketika menghapus file" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Sistem Baki" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Selalu tampilkan ikon tray" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Minimalkan ke tray saat starup" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Tutup ke baki saat jendela ditutup" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Gunakan indikator Aplikasi Ubuntu" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Aktifkan modus offline saat startup" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Pemberitahuan memulai unduhan" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Aktifkan suara ketika unduhan selesai" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Menampilkan ikon besar" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Ini akan mempengaruhi semua pengaya." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Batas kecepatan global" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Kecepatan maks unggah" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Kecepatan maks unduh" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Penyelesaian Aksi Otomatis" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Perintah kustom:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Perintah kustom jika galat terjadi:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Simpan otomatis" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Jarak" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "menit" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Pengaturan baris perintah" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Gunakan '--senyap' sebagai default" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Urutan pengaya yang cocok:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Opsi pengaya Aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "token autorisasi rahasia RPC" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Batas kecepatan global hanya untuk aria2 saja" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Nyalakan aria2 pada startup" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Matikan aria2 saat keluar" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Luncurkan aria2 pada perangkat lokal" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Lokasi" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumen" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Kamu harus hidupkan ulang uGet setelah memodifikasinya." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Mode menyesuaikan media:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Menyesuaikan kondisi" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Kualitas:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Menggolongkan:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Berkas" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Folder" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Item" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Nilai" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Salin_Semua" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Tunjukkan jendela" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Modus Offline" uget-2.2.3/po/ca.po0000664000175000017500000013247513602733704010767 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # dsabadell , 2015 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Catalan (http://www.transifex.com/uget/uget/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Totes les categories" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Connectant..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Transmetent..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Torna a provar" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "La descàrrega ha estat completada" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Ha finalitzat" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Reprèn la baixada" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "No es pot reprendre" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "L'arxiu de sortida no pot ser reanomenat." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "S'ha produït un error al connectar amb l'amfitrió." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "No es pot crear la carpeta." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "No es pot crear el fitxer (ja existeix o no s'admet el nom)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "El fitxer no es pot obrir." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "No es pot crear un fil." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "El fitxer font no és correcte (té una grandària diferent)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Hem fet curt de recursos (el disc està ple o hem esgotat la memòria)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Manca el fitxer de sortida." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Manca un paràmetre de sortida." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Ho hem intentat massa vegades." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "No s'admet el procés (o protocol)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "No s'admet el tipus de fitxer." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: s'ha produït un error desconegut." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: el temps d'espera s'ha esgotat." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: no s'ha trobat el recurs." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 ha arribat al límit d'errors 'recurs no trobat' de l'opció --max-file-not-found." #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: la velocitat de baixada és massa lenta." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: s'ha produït un error de xarxa." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: no s'han enllestit les descàrregues." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Manquen recursos." #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: la mida del fragment és diferent de la consignada al fitxer de control .aria2." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2: ja has descarregat aquest fitxer." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 estàs descarregant informació duplicada del torrent." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: el fitxer ja existeix. Fixa't en l'opció --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: no es pot obrir un fitxer existent." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: no s'ha pogut crear un nou fitxer o truncar-ne un d'existent." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: s'ha produït un error d'I/O d'un fitxer " #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: la resolució de nom ha fallat." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: no s'ha pogut gestionar un fitxer Metalink." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: l'ordre de FTP ha fallat." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: la capçalera de resposta HTTP és dolenta o desconeguda." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "S'ha redireccionat massa vegades." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: ha fallat l'autorització HTTP." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: no s'ha pogut analitzar un fitxer .torrent." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: el fitxer torrent és defectuós o conté informació incompleta." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: l'URI del fitxer magnet és dolent." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: l'opció donada és dolenta o incompleta; o bé l'opció té un argument desconegut. " #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: el servidor remot no pot gestionar la petició." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: no es pot gestionar la petició JSON-RPC." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "aria2 no respon. Comprova que estigui actiu." #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: s'ha eliminat l'identificador de grup." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Gestor de descàrregues" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "David Sabadell i Ximenes " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "Fundador d'uGet:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Gestor de Projecte d'uGet:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "tasques" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Nova des del porta-retalls" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Nova descàrrega" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Porta-retalls" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Línia d'ordres" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "S'ha produït un error" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "S'ha produït un error mentre descarregava." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "S'està iniciant la baixada" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Comença la descàrrega de la cua." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "S'ha enllestit la descàrrega." #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "S'ha enllestit la cua de descàrregues." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Estat" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Categoria" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Crea una nova descàrrega" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Nova _descàrrega" #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nova _categoria..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Nou _lot del porta-retalls..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Nova _seqüència d'URLs... " #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Nou torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nou metalink..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Desar tots els paràmetres" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Defineix les descàrregues seleccionades com actives" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Posa les descàrregues seleccionades en espera" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Defineixles propietats de les descàrregues seleccionades" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Mou les descàrregues seleccionades amunt" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Mou les descàrregues seleccionades avall" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Posa les descàrregues seleccionades dalt de tot" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Posa les descàrregues seleccionades sota de tot" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nova categoria" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Copia -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Propietats de la categoria" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Propietats de la descàrrega" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Nou torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nou metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Obre un fitxer torrent" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Obre un fitxer metalink" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "No s'ha pogut desar la categoria." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "No s'ha pogut carregar la categoria." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Desar el fitxer de categoria" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Obrir un fitxer de categoria" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Enllaç " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Imatge " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Fitxer de text" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importa URLs des d'un fitxer HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importa URLs des d'un fitxer de text" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Exporta URLs a un fitxer de text" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Lot de seqüència d'URLs" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "No s'ha trobat cap URL al porta-retalls." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Totes les URL existeixen." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Lot del porta-retalls" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Nova" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Error" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Missatge" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d ítems seleccionats" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Atenció usuaris d'uGet:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "hem endegat una campanya de donació per al futur desenvolupament d'uGet: si us plau, cliqueu" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "AQUÃ" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "Empleneu aquesta breu enquesta d'ús per millorar uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "Clica aquí per respondre l'enquesta" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Nom de la categoria:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "_Descàrregues actives:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Capacitat de les finalitzades:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Capacitat de la paperera:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Les condicions de coincidència d'URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Amfitrions coincidents:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Esquemes/processos coincidents:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Tipus coincidents:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Vols sortir del programa?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Estàs segur que vols sortir?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Vols esborrar els fitxers?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Estàs segur que vols esborrar els fitxers?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Vols esborrar la categoria?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Esteu segur que vols esborrar la categoria?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "No m'ho demanis més" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Servidors alternatius:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Fitxer:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Selecciona una carpeta" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Carpeta:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Referència:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "Nombre _màxim de connexions simultànies:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Activa" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_ausa" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Inicia sessió" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Usuari:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Contrasenya:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Galeta:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Selecciona una galeta" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Fitxer 'post':" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Seleccioneu el fitxer 'post'" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Agent d'usuari:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_Núm. màx. de temptatives:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "contador" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "_Retard en intentar-ho:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "segons" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Velocitat màx. de pujada:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Velocitat màx. de baixada:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Data i hora actuals" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Fitxer" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Lot de descàrregues" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Lot del _porta-retalls..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "Lot de seqüència d'_URLs..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Importa un fitxer de _text (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Importa un fitxer _HTML (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Exporta a un fitxer de _text (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "Obre categoria" #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "De_sa la categoria com..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Des_a els paràmetres" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Mode fora de línia" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Edita" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_Monitoreja el porta-retalls" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Porta-retalls silenciós" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Línia d'ordres silenciosa" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Evita URI existent" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Aplica els paràmetres de baixada més nous" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "_Accions autom. de compleció" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Inhabilita" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Hiberna" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Suspèn" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Atura l'equip" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Reinicia l'equip" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Personalitza" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Recorda els paràmetres" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "A_juda" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Paràmetres..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Visualitza" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Barra d'eines" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Barra d'estat" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Sumari" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "_Ãtems del sumari" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Nom" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Carpeta" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Missatge" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "_Columnes de descàrrega" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Complet" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Mida" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Percentatge '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Transcorregut" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Pendent" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Velocitat" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Límit de velocitat" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Transferit" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Relació" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Reintenta" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Afegit en" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Completat en" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Categoria" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nova categoria..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Esborra la categoria" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Descarrega" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "Es_borra aquesta entrada" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Esborra el _fitxer i les dades" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Obre la _carpeta contenidora" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Força'l a engegar" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Mou a" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Prioritat" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "Alta" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normal" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Baixa" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Aconsegueix ajuda en línia" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Documentació" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Fòrum de suport" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Volem conèixer el teu parer" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Informa d'un error" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Dreceres de teclat" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Comprova si hi ha actualitzacions" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Paràmetres" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "No es pot executar l'aplicació predefinida per al fitxer '%s'" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Aquesta carpeta no existeix." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "L'URI ja existeix." #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Aquesta URI ja existeix. Estàs segur que vol continuar?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "General" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Avançat" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Paràmetres de categoria" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Predeterminada per a nova descàrrega 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Predeterminada 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "sense nom" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "En pausa" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "S'està transferint" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Completades" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Descartades" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Posant en cua" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Actives" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Tots els estats" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Nom" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Complet" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Mida" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Transcorregut" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Pendent" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Quantitat" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Servidor intermediari:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "No l'empris" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Predeterminada" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Amfitrió:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Sòcol:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Arguments del sòcul:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Dll" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Dm" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Dc" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Dj" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Dv" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Ds" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Dg" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Habilita el temporitzador" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Desactiva" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- atura totes les tasques" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normal" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- executa les tasques amb normalitat" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Tot" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Cap" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Selecciona per filtrar" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Selecciona URLs per servidor I per extensió de fitxer" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Això netejarà tota selecció d'URLs." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Amfitrió" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Extensió de fitxer" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Referència base d'hipertext" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Seleccion_a-les totes" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "No e_n seleccionis cap" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Selecciona per filtre..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "p.ex." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_De:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "A:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "dígits:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_De" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "distingeix majúsc. i minúsc." #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "No empreu el caràcter comodí (*) en el camp URL" #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "L'URL no és vàlida." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Cap caràcter en els camps 'De' o 'A'" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Previsualització" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Interfície d'usuari" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Ample de banda" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Temporitzador" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Connector" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Altres" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Habilita el monitor del porta-retalls" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Mode silenciós" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Ãndex predeterminat de categoria" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Si no coincideix amb cap categoria, afegeix a la Na categoria." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "_Cerca aquests tipus de fitxer al porta-retalls " #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Separa els tipus de fitxer amb el caràcter '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Aquí pots emprar expressions regulars." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Confirma" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Demana confirmació per sortir" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Confirma l'eliminació de fitxers" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Safata del sistema" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Sempre mostra icona a la safata" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Minimitza a la safata en arrencar" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Minimitza a la safata al tancar la finestra" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Activa l'extensió d'integració amb l'Ubuntu" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Habilita el mode fora de línia en arrencar" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Notificació d'inici de descàrrega" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Fés un so quan la descàrrega acabi" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Això afectarà a tots els connectors." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Límit global de velocitat" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Velocitat màx. de pujada" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Velocitat màx. de baixada" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Accions autom. de compleció" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Ordre personalitzada:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Ordre predeterminada si s'escau un error:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "Desa _automàticament" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Intèrval:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minuts" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Paràmetres de línia d'ordres" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Empra el mode silenciós" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Ordre de coincidència dels connectors:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Opcions dels connectors d'aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "Autorització secreta de RPC" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Límit de velocitat global només per aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Executa l'aria2 en arrencar" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Atura l'aria2 en sortir" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Arrenca aria2 en el dispositiu local" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Camí" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Arguments :" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Cal reiniciar uGet en modificar-los." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Fitxer" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Carpeta" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Element" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Valor" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Copia-ho _tot" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Mostra la finestra" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Mode fora de línia" uget-2.2.3/po/cs.po0000664000175000017500000013346113602733704011005 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Alois NeÅ¡por , 2014 # Radoslav Klein , 2017 # ToMáš Marný, 2013 # ToMáš_Marný, 2013 # wastingdouglas , 2011 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-09-22 23:51+0000\n" "Last-Translator: ToMáš Marný\n" "Language-Team: Czech (http://www.transifex.com/uget/uget/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Password Manager Daemon: uget\n\nPÅ™i pokusu o SSH pÅ™ipojení k %s doÅ¡lo k problému s ověřením klíÄe, protože klÃ­Ä nebyl nalezen ve známém a důvÄ›ryhodném seznamu známých hostitelů.\n\nChcete tohoto pÅ™ipojení oznaÄit jako důvÄ›ryhodné pro toto i budoucí pÅ™ipojení pÅ™idáním tohoto %s klíÄe do seznamu známých hostitelů?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "VÅ¡echny kategorie" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "PÅ™ipojování..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "PÅ™enášení..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Opakovat" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Stahování dokonÄeno" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "DokonÄeno" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Možno pokraÄovat" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Není možné pokraÄovat" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Výstupní soubor nemohl být pÅ™ejmenován." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "Není možné se pÅ™ipojit na hosta." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Složka nemohla být vytvoÅ™ena" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Soubor nemohl být vytvoÅ™en (Å¡patné jméno souboru nebo soubor již existuje)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Soubor nemohl být otevÅ™en." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "NepodaÅ™ilo se vytvoÅ™it vlákno." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Chybný zdroj (velikost souboru je jiná)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Nedostatek prostÅ™edků (plný disk nebo nedostatek pamÄ›ti)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Žádný výstupní soubor." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Chybí nastavení výstupu." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "PříliÅ¡ mnoho opakování." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Nepodporované schéma (protokol)" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Nepodporovaný soubor." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "post soubor nenalezen." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "cookie soubor nenalezen." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Toto video bylo odstranÄ›no." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "PÅ™i získávání informací o videu doÅ¡lo k chybÄ›." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "PÅ™i získávání webové stránky videa doÅ¡lo k chybÄ›." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "V URL YouTube nebylo nalezeno video_id." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: vyskytla se neznámá chyba." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: vyprÅ¡el Äasový limit" #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: zdroj nebyl nalezen." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 chyba v zadaném poÄtu 'zdroj nebyl nalezen'. Podívejte se na volbu --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: rychlost byla příliÅ¡ pomalá." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: nastal problém se sítí" #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: nedokonÄené stahování." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr " Nedostatek zdrojů Äi prostÅ™edků" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: velikost jednoho dílu je rozdílná než v kontrolním souboru." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 stáhla stejný soubor." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 stáhla stejný info hash torrent." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: soubor již existuje. Podívjte se na volbu --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: nelze otevřít existující soubor." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: nelze vytvoÅ™it nový soubor." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: nastala chyba I/O souboru." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: rozliÅ¡ení jména selhalo." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: nelze parsovat Metalink dokument." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP příkaz selhal." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP hlaviÄka je chybná nebo neoÄekávaná." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "PříliÅ¡ mnoho pÅ™esmÄ›rování." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: selhala HTTP autorizace." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: nelze parsovat soubor (obvykle .torrent soubor)" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: soubor torrentu je poÅ¡kozený nebo v nÄ›m chybí potÅ™ebné informace." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI je chybný." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: byl zadán Å¡patná nebo nerozpoznatelná volba, případnÄ› Å¡patný argument volby" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: vzdálený server neodpovídá na žádost." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: nelze parsovat JSON-RPC." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Žádná odezva. Je aria2 vypnuta?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid byl odstranÄ›n." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "NepodaÅ™ilo se získat mediální odkaz." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Žádná odpovídající média." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Správce stahování" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Tomáš Marný, Alois NeÅ¡por" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "Zakladatel uGet:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Projektový manažer uGet:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "úkoly" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Nové ze schránky" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Nové stahování" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Schránka" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Příkazová řádka" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Vyskytla se chyba" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Vyskytla se chyba bÄ›hem stahování." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Stahování zaÄalo" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "ZaÄíná se stahovat fronta." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Stahování dokonÄeno" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "VÅ¡echna stahovaní fronty byla dokonÄena." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Stav" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategorie" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "VytvoÅ™it nové stahování" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Nové _stahování..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nová _kategorie..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Nové _hromadné ze schránky..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Nová hromadná _URL sekvence..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Nový torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nový metalink..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Uložit veÅ¡keré nastavení" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Spustit vybrané stahování" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Pozastavit vybrané stahování" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Nastavit vlastnosti vybraného stahování" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Posunout vybrané stahování nahoru" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Posunout vybrané stahování dolů" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Posunout vybrané stahování na vrchol" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Posunout vybrané stahování na spod" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nová kategorie" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Kopírovat - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Vlastnosti kategorie" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Vlastnosti stahování" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Nový torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nový metalink" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Otevřít torrent soubor" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrent soubor (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Otevřít soubor metalinku" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "NepodaÅ™ilo se uložit soubor kategorií." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "NepodaÅ™ilo se otevřít soubor kategorií." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Uložit soubor kategorií" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Otevřít soubor kategorií" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON soubor (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Odkaz " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Obrázek " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Textový soubor" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importovat URL z HTML souboru" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML soubor (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importovat URL z textového souboru" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Prostý text" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Exportovat URL do textového souboru" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL sekvence hromadnÄ›" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Ve schránce nebyla nalezena žádná URL adresa." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "VÅ¡echny URL existují." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Schránka hromadnÄ›" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Nový" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Chyba" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Zpráva" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Vybráno %d položek" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "UpozornÄ›ní uživatelům uGet:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "Sbíráme dary k financování budoucích verzí uGet, prosíme kliknÄ›te" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ZDE" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "vyplňte prosím tento krátký uživatelský průzkum o uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "kliknÄ›te sem a zahajte průzkum" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "_Název kategorie:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Aktivní _stahování:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Kapacita dokonÄeného:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Kapacita koÅ¡e:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Odpovídající podmínky URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Odpovídající _hosté:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Odpovídající _schémata:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Odpovídající _typy:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "SkuteÄnÄ› skonÄit?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Opravdu chcete skonÄit?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "SkuteÄnÄ› smazat soubory?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Opravdu chcete soubory smazat?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "SkuteÄnÄ› smazat kategorii?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Opravdu chcete smazat kategorii?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Neptat se znovu" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Zrcadla:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Soubor:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Vybrat složku" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Složka:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Referrer:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Maximálních pÅ™ipojení:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Běžící" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "Pozast_aveno" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "PÅ™ihlášení" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Uživatel:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Heslo:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Soubor cookie:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Vyberte soubor cookie" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Publikovat soubor:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Vyberte publikovaný soubor" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Uživatelský klient:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_Limit opakování:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "poÄet" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Zpož_dÄ›ní opakování:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "sekund" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Max. rychlost odesílání:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Max. rychlost stahování:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "NaÄíst Äasové razítko" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Soubor" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Dávková stahování" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "HromadnÄ› ze _schránky..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "HromadnÄ› _URL sekvence..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Importovat _textový soubor (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Importovat _HTML soubor (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Exportovat _textový soubor (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Otevřít kategorii..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Uložit kategorii jako..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Uložit _veÅ¡keré nastavení" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Offline režim" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Upravit" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "_Monitor schránky" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Schránka pracuje tiÅ¡e" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Příkazový řádek pracuje tiÅ¡e" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "PÅ™eskoÄit existující URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Použít nastavení posledního stahování" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "DokonÄení _automatických akcí" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Zakázat" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Hibernovat" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Uspat" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Vypnout" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Restartovat" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Vlastní" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Zapamatovat nastavení" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_NápovÄ›da" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Nastavení..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Zobrazit" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Panel nástrojů" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Stavový řádek" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Shrnutí" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Shrnutí _položek" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Název" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Složka" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Zpráva" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Slou_pec stahování" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_DokonÄeno" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Velikost" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Procent '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_ÄŒas bÄ›hu" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Zbývá" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Rychlost" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Rychl. odes." #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Odesláno" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "PomÄ›r" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Opakování" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "PÅ™idáno" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "DokonÄeno" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategorie" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nová kategorie..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Smazat kategorii" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Stahování" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Smazat položku" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Smazat položku a _soubor" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Otevřít _cílovou složku" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Vynutit start" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_PÅ™esunout do" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Priorita" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Vysoká" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normální" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Nízká" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Získat pomoc online" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentace" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Fórum s podporou" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Odeslat zpÄ›tnou vazbu" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Nahlásit chybu" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Klávesové zkratky" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Zkontrolovat aktualizace" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Nastavení" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Není možné spustit výchozí aplikaci pro soubor %s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Tato složka neexistuje." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI existuje" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Toto URI existuje, chcete opravdu pokraÄovat?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Hlavní" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "PokroÄilé" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Nastavení kategorie" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Výchozí pro nové stahování 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Výchozí 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "bezejmenný" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Pozastaveno" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Odesílání" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Kompletní" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "V koÅ¡i" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Ve frontÄ›" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktivní" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "VÅ¡echny stavy" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Název" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Kompletní" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Velikost" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "ÄŒas bÄ›hu" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Zbývá" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "PoÄet" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Nepoužít" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Výchozí" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Host:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Argumenty socketu:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Po" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Út" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "St" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "ÄŒt" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Pá" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "So" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Ne" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Aktivovat plánovaÄ" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Vypnout" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- zastavit vÅ¡echny úkoly" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normální" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- spustit úkoly normálnÄ›" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "VÅ¡e" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Nic" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "OznaÄit podle filtru" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "OznaÄit URL podle hosta a pÅ™ipony souboru." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Toto resetuje vÅ¡echna oznaÄená URL." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Host" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Přípona souboru." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Základ hypertextových odkazů" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Ozn_aÄit vÅ¡e" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "NeoznaÄit _nic" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_OznaÄit podle filtru..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "například" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Od:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Do:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "Äíslice:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "O_d:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "citlivé na velikost písmen" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Žádné wildcard(*) znaky v URL adrese." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL není platné." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Žádné znaky v položkách 'Od' nebo 'Do'." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Náhled" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Uživatelské rozhraní" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Šířka pásma" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "PlánovaÄ" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Zásuvný modul" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Webová stránka médií" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Ostatní" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Zapnout monitor schránky" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Tichý režim" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Výchozí index kategorií" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "PÅ™idat do Nth kategorie, pokud není žádná odpovídající kategorie." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_Sledovat URL adresy médií na webových stránkách " #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Monitorovat schránku pro stanovené typy souboru:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "RozdÄ›lte typy znakem '|'." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Můžete použít regulární výrazy." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Potvrzení" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Zobrazit potvrzovací dialog pÅ™i ukonÄení" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Potvrdit pÅ™i mazání souborů" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Systémová liÅ¡ta" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Vždy zobrazit ikonu v oznamovací oblasti" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "PÅ™i startu minimalizovat do oznamovací oblasti" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "PÅ™i zavÅ™ení okna minimalizovat do liÅ¡ty" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Použít Ubuntu App indikátor" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "PÅ™i startu aktivovat offline režim" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Signalizace startu stahování" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Zvuk po dokonÄení stahování" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Zobrazovat velké ikony" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "To bude mít vliv na vÅ¡echny zásuvné moduly." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Globální limit rychlosti" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Max. rychlost odesílání" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Max. rychlost stahování" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "DokonÄení automatických akcí" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Vlastní příkaz:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Vlastní příkaz, když se vyskytne chyba:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Automatické uložení" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Interval:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minut" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Nastavení příkazové řádky" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Ve výchozím nastavení použít '--quiet'" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Zásuvný modul odpovídající zadání:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Volby zásuvného modulu Aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC autorizaÄní tajný token" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Globální limit rychlosti pouze pro Aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Spustit aria2 pÅ™i startu" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Vypnout aria2 po ukonÄení" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Spustit aria2 na lokálním zařízení" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Cesta" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumenty" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Po úpravÄ› musíte uGet restartovat." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Režim pÅ™izpůsobení médií:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Odpovídající podmínky" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Kvalita:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Typ:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Soubor" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Složka" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Položka" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Hodnota" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Kopírov_at vÅ¡e" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Zobrazit okno" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Offline režim" uget-2.2.3/po/lt.po0000664000175000017500000013416713602733704011023 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Moo, 2017 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-12-02 22:37+0000\n" "Last-Translator: Moo\n" "Language-Team: Lithuanian (http://www.transifex.com/uget/uget/language/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lt\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Slaptažodžių tvarkytuvÄ—s tarnyba: uget\n\nBandant SSH ryšį su serveriu %s atsirado problemų patvirtinant jo serverio raktÄ… ir lyginant šį raktÄ… su žinomų ir patikimų serverių failu, nes jo serverio raktas nebuvo rastas.\n\nAr norÄ—tumÄ—te Å¡iam ir ateityje užmezgiamiems ryÅ¡iams laikyti šį ryšį kaip patikimÄ…, pridedant %s serverio raktÄ… į žinomų serverių failÄ…?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Visos kategorijos" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Jungiamasi..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "PersiunÄiama..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Bandyti dar kartÄ…" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Atsiuntimas užbaigtas" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Užbaigta" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "PratÄ™siama" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "NepratÄ™siama" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "IÅ¡vesties failas negali bÅ«ti pervadintas." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "nepavyko prisijungti prie serverio." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Aplankas negali bÅ«ti sukurtas." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Failas negali bÅ«ti sukurtas (blogas failo pavadinimas arba failas jau yra)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Failas negali bÅ«ti atvertas." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Nepavyko sukurti gijos." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Neteisingas Å¡altinis (skirtingo failo dydžiai)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "TrÅ«ksta iÅ¡teklių (diskas yra pilnas arba baigÄ—si atmintis)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "NÄ—ra iÅ¡vesties failo." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "NÄ—ra iÅ¡vesties nustatymo" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Per daug bandymų iÅ¡ naujo." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Nepalaikoma schema (protokolas)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Nepalaikomas failas." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "nerastas post failas." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "slapukas nerastas." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Å is vaizdo įraÅ¡as buvo paÅ¡alintas." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Gaunant vaizdo įraÅ¡o informacijÄ…, atsirado klaidų." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Gaunant vaizdo įraÅ¡o svetainÄ—s informacijÄ…, atsirado klaidų." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "YouTube URL adrese nerasta video_id." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: įvyko nežinoma klaida." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: pasibaigÄ— laikas." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: iÅ¡teklius nerastas." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 pamatÄ— \"iÅ¡teklius nerastas\" nurodytÄ… klaidos numerį. ŽiÅ«rÄ—kite --max-file-not-found parametrÄ…" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: sparta buvo pernelyg lÄ—ta." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: atsirado tinklo problemų." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: neužbaigti atsiuntimai." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "NÄ—ra iÅ¡tekliaus" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: dalies ilgis buvo kitoks nei tas, kuris yra .aria2 valdymo faile." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 atsiuntinÄ—jo tÄ… patį failÄ…." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 siuntÄ—si tokios paÄios informacijos maiÅ¡os torrent failÄ…." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: failas jau buvo. ŽiÅ«rÄ—kite --allow-overwrite parametrÄ…." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: nepavyko atverti esamo failo." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: nepavyko sukurti naujo failo ar apkirpti esamo failo." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: įvyko failo I/O klaida." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: pavadinimo rezoliucija nepavyko." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: nepavyko iÅ¡nagrinÄ—ti Metanuorodos dokumento." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP komanda nepavyko." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP atsakymo antraÅ¡tÄ— buvo bloga arba netikÄ—ta." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Per daug peradresavimų." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP tapatybÄ—s nustatymas nepavyko." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: nepavyko iÅ¡nagrinÄ—ti koduoto failo (dažniausiai, .torrent failo)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: torrent failas buvo pažeistas ar jame trÅ«ko informacijos." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI buvo blogas." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: buvo nurodytas blogas/nepažįstamas parametras ar nurodytas netikÄ—tas parametro argumentas." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: nuotoliniam serveriui nepavyko apdoroti užklausos." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: nepavyko iÅ¡nagrinÄ—ti JSON-RPC užklausos." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "NÄ—ra atsakymo. Ar aria2 iÅ¡jungta?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid buvo paÅ¡alinta." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Failed gauti medijos nuorodos." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "NÄ—ra atitinkamos medijos." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Atsiuntimų tvarkytuvÄ—" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Moo" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet įkÅ«rÄ—jas: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet projekto vadybininkas: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "užduoÄių" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Naujas iÅ¡ iÅ¡karpinÄ—s" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Naujos atsiuntimas" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "IÅ¡karpinÄ—" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Komandų eilutÄ—" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Ä®vyko klaida" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "AtsiunÄiant, įvyko klaida." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Atsiuntimas pradedamas" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Pradedama atsiuntimų eilÄ—." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Atsiuntimas užbaigtas" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Visi atsiuntimai eilÄ—je yra užbaigti." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "BÅ«sena" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategorija" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Sukurti naujÄ… atsiuntimÄ…" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Naujas _atsiuntimas..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Nauja _kategorija..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Naujas paketinis atsiuntimas iÅ¡ _iÅ¡karpinÄ—s..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Naujas _URL sekos paketinis atsiuntimas..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Naujas torentas..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Nauja metanuoroda..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Ä®raÅ¡yti visus nustatymus" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Nustatyti pažymÄ—tus atsiuntimus kaip paleistus" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Nustatyti pažymÄ—tus atsiuntimus kaip pristabdytus" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Nustatyti pažymÄ—tų atsiuntimų savybes" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Pakelti pažymÄ—tÄ… atsiuntimÄ…" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Nuleisti pažymÄ—tÄ… atsiuntimÄ…" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Perkelti pažymÄ—tÄ… atsiuntimÄ… į viršų" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Perkelti pažymÄ—tÄ… atsiuntimÄ… į apaÄiÄ…" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Nauja kategorija" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Kopija - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Kategorijos savybÄ—s" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Atsiuntimo savybÄ—s" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Naujas torentas" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Nauja metanuoroda" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Atverti Torrent failÄ…" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrent failas (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Atverti Metanuorodos failÄ…" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Nepavyko įraÅ¡yti kategorijos failo." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Nepavyko įkelti kategorijos failo." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Ä®raÅ¡yti kategorijos failÄ…" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Atverti kategorijos failÄ…" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON failas (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Nuoroda " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Paveikslas " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Tekstinis failas" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importuoti URL adresus iÅ¡ HTML failo" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML failas (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importuoti URL adresus iÅ¡ tekstinio failo" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Grynojo teksto failas" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Eksportuoti URL adresus į tekstinį failÄ…" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL sekos paketinis atsiuntimas" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "IÅ¡karpinÄ—je nerasta jokių URL." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Visi URL jau buvo." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Paketinis atsiuntimas iÅ¡ iÅ¡karpinÄ—s" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Naujas" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Klaida" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "ŽinutÄ—" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "PažymÄ—ta %d elementų" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "DÄ—mÄ—sio uGet naudotojai:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "mes vykdome paaukojimų maratonÄ…, skirtÄ… ateities uGet plÄ—tojimui, praÅ¡ome spustelÄ—ti " #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ÄŒIA" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "praÅ¡ome užpildyti Å¡iÄ… trumpÄ… uGet naudotojų apklausÄ…." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "spustelÄ—kite Äia, norÄ—dami sudalyvauti apklausoje" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Kategorijos pavadi_nimas:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Aktyvių _atsiuntimų:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Užbaigtų talpa:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Å iukÅ¡linÄ—s talpa:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI atitikimo sÄ…lygos" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Atitinkantys s_erveriai:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "AtitinkanÄios _schemos:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Atitinkantys _tipai:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Tikrai iÅ¡eiti?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Ar tikrai norite iÅ¡eiti?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Tikrai iÅ¡trinti failus?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Ar tikrai norite iÅ¡trinti failus?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Tikrai iÅ¡trinti kategorijÄ…?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Ar tikrai norite iÅ¡trinti kategorijÄ…?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Daugiau nebeklausti" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "TinklavietÄ—s:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Failas:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Pasirinkite aplankÄ…" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "A_plankas:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "NukreipÄ—jas:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Daugiausia sujungimų:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Paleisti" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_ristabdyti" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Prisijungimas" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Naudotojas:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Slaptažodis:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Slapuko failas:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Pasirinkite slapuko failÄ…" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Post failas:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Pasirinkite Post failÄ…" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Naudotojo agentas:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Bandymų iÅ¡ naujo _riba:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "kartų" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Bandymų iÅ¡ naujo _delsa:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "sek." #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Didžiausia iÅ¡siuntimo sparta:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Didžiausia atsiuntimo sparta:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Gauti laiko žymÄ…" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Failas" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Paketiniai atsiuntimai" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_Paketinis atsiuntimas iÅ¡ iÅ¡karpinÄ—s..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL sekos paketinis atsiuntimas..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_Tekstinio failo importavimas (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML failo importavimas (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Eksportuoti į tekstinį failÄ… (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Atverti kategorijÄ…..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "Ä®_raÅ¡yti kategorijÄ… kaip..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Ä®raÅ¡yti _visus nustatymus" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "AutonominÄ— veiksena" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Taisa" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "IÅ¡karpinÄ—s _prižiÅ«ryklÄ—" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "IÅ¡karpinÄ— veikia tyliai" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Komandų eilutÄ— veikia tyliai" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Praleisti esamÄ… URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Taikyti paskiausio atsiuntimo nustatymus" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "_Automatiniai užbaigimo veiksmai" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_IÅ¡jungti" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Užmigdyti" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Pristabdyti" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "IÅ¡jungti" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Paleisti iÅ¡ naujo" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Pasirinktinai" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Prisiminti nustatymÄ…" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "Ž_inynas" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "Nu_statymai..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Rodinys" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "Ä®_rankių juosta" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "BÅ«senos juosta" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Santrauka" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Santraukos _elementai" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "Pavadi_nimas" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Aplankas" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_ŽinutÄ—" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Atsiuntimo s_tulpeliai" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Užbaigta" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Dydis" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Procentai \"%\"" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_PraÄ—jÄ™s laikas" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Liko" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Sparta" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "IÅ¡siuntimo sparta" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "IÅ¡siųsta" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Santykis" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Bandyti dar kartÄ…" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "PridÄ—tas" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Užbaigtas" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategorija" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Nauja kategorija..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_IÅ¡trinti kategorijÄ…" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Atsiuntimas" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_IÅ¡trinti įrašą" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "IÅ¡trinti įrašą ir _failÄ…" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Atverti _vidinį aplankÄ…" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Priverstinai pradÄ—ti" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Perkelti į" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "PirmenybÄ—" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_AukÅ¡ta" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normali" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "Že_ma" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Rodyti žinynÄ… internete" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentacija" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Palaikymo forumas" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Pateikti atsiliepimÄ…" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "PraneÅ¡ti apie klaidÄ…" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Spartieji klaviÅ¡ai" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Tikrinti ar yra atnaujinimų" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Nustatymai" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Nepavyksta paleisti numatytosios programos failui \"%s\"." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "\"%s\" - Å io aplanko nÄ—ra." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI jau buvo" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Å is URI jau buvo, ar tikrai norite tÄ™sti?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Bendros" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "IÅ¡plÄ—stinÄ—s" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Kategorijos nustatymai" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Numatytieji naujam atsiuntimui 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Numatytieji 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "be pavadinimo" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Pristabdyti" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "IÅ¡siunÄiama" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Užbaigta" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Å iukÅ¡linÄ—je" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "EilÄ—je" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "AktyvÅ«s" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Visos bÅ«senos" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Pavadinimas" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Užbaigta" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Dydis" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "PraÄ—jÄ™s laikas" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Liko" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Kiekis" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Ä®galiotasis serveris:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Nenaudoti" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Numatytasis" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Serveris:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Prievadas:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Lizdas:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Lizdo argumentai:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Elementas:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Pir" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Ant" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Tre" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Ket" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Pen" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Å eÅ¡" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Sek" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "Ä®_jungti planuoklÄ™" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "IÅ¡jungti" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- stabdyti visas užduotis" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Ä®prasta" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- vykdyti užduotis įprastai" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Visi" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Joks" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "ŽymÄ—ti pagal filtrÄ…" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "ŽymÄ—ti URL adresus pagal serverį IR failo prievardį." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Tai atstatys visus URL adresų žymÄ—jimus." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Serveris" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Failo prievardis" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "BazinÄ— hiperteksto nuoroda" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "ŽymÄ—ti _visus" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Nuimti žymÄ—jimÄ… _nuo visų" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "Ž_ymÄ—ti pagal filtrÄ…..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "pvz.," #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Nuo:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Iki:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "skaitmenys:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "N_uo:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "skiriant raidžių dydį" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "URL įraÅ¡e nÄ—ra pakaitos simbolio(*)." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL yra neteisingas." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "\"Nuo\" ar \"Iki\" įraÅ¡e nÄ—ra simbolio." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "PeržiÅ«ra" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Naudotojo sÄ…saja" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Siuntimo sparta" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "PlanuoklÄ—" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Ä®skiepis" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Medijos svetainÄ—" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Kiti" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "Ä®_jungti iÅ¡karpinÄ—s prižiÅ«ryklÄ™" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Tylioji veiksena" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Numatytoji kategorijos rodyklÄ—" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Jei nÄ—ra atitinkamos kategorijos, pridedama į N-tÄ… kategorija." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_StebÄ—ti medijos svetainių URL" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "IÅ¡karpinÄ—je stebÄ—ti nurodytus failų tipus:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Atskirkite tipus, naudodami \"|\" simbolį." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "ÄŒia galite naudoti reguliariuosius reiÅ¡kinius." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Patvirtinimas" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "IÅ¡einant, rodyti patvirtinimo dialogÄ…" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "IÅ¡trinant failus, klausti patvirtinimo" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Sistemos dÄ—klas" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Visada rodyti dÄ—klo piktogramÄ…" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Paleidus programÄ…, suskleisti į sistemos dÄ—klÄ…" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "UžvÄ—rus langÄ…, suskleisti į dÄ—klÄ…" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Naudoti Ubuntu programų indikatorių" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Paleidimo metu įjungti autonominÄ™ veiksenÄ…" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "PraneÅ¡imas apie pradedamÄ… atsiuntimÄ…" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Užbaigus atsiuntimÄ…, groti garsÄ…" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Rodyti dideles piktogramas" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Tai paveiks visus įskiepius." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Visuotiniai spartos apribojimai" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Didžiausia iÅ¡siuntimo sparta" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Didžiausia atsiuntimo sparta" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Automatiniai užbaigimo veiksmai" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "PasirinktinÄ— komanda:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "PasirinktinÄ— komanda, įvykus klaidai:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Automatinis įraÅ¡ymas" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Intervalas:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minutÄ—s" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Komandų eilutÄ—s nustatymai" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Pagal numatymÄ…, naudoti \"--quiet\"" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Ä®skiepio atitikimo tvarka:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 įskiepio parametrai" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "Slaptas RPC prieigos teisių prieigos raktas" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Visuotinis spartos apribojimas, skirtas tik aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "Pa_leidžiant programÄ…, paleisti aria2" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_IÅ¡einant iÅ¡ programos, iÅ¡jungti aria2" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Paleisti aria2 vietiniame įrenginyje" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Kelias" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumentai" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Juos modifikavÄ™, privalote paleisti uGet iÅ¡ naujo." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Medijos atitikimo veiksena:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Atitikimo sÄ…lygos" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "KokybÄ—:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Tipas:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Failas" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Aplankas" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Elementas" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "ReikÅ¡mÄ—" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Kopijuoti viskÄ…" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Rodyti langÄ…" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_AutonominÄ— veiksena" uget-2.2.3/po/ar.po0000664000175000017500000014125213602733704010777 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # ABDULSALAM Arromaih , 2016 # ahmad , 2013 # Benamara Mohamed , 2015 # Hayder Majid , 2016 # Ibrahim Saed , 2014 # Omar Anwar , 2017 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-09-22 23:51+0000\n" "Last-Translator: Omar Anwar \n" "Language-Team: Arabic (http://www.transifex.com/uget/uget/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "خادم مدير كلمات السر:uget\n\nأثناء محاولة عمل أتصال SSH مع %s , حصل خطأ بالتحقق من Ù…ÙØ§ØªÙŠØ­ Ø§Ù„Ø¥Ø³ØªØ¶Ø§ÙØ© الخاصة به مع Ù…Ù„Ù Ø§Ù„Ø¥Ø³ØªØ¶Ø§ÙØ§Øª الموثوقة بسبب عدم العثور عليها ÙÙŠ هذا المل٠.\n\nهل ترغب بمعالجة هذا الخطأ ÙÙŠ الاتصال بجعله موثوق الأن Ùˆ ÙÙŠ الإتصالات المستقبلية عن طريق Ø¥Ø¶Ø§ÙØ© Ù…ÙØ§ØªÙŠØ­ Ø¥Ø³ØªØ¶Ø§ÙØ© %s's إلي Ù…Ù„Ù Ø§Ù„Ø¥Ø³ØªØ¶Ø§ÙØ§Øª Ø§Ù„Ù…Ø¹Ø±ÙˆÙØ© ØŸ" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "كل Ø§Ù„ÙØ¦Ø§Øª" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "يتّصل..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "يحيل..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "الإعادة" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "اكتمل التنزيل" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "انتهى" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "قابل للإستئناÙ" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "غير قابل للإستئناÙ" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "تعذّرت تسمية Ø§Ù„Ù…Ù„Ù Ø§Ù„Ù…ÙØ®Ø±Ø¬." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "تعذّر الإتصال بالمضيÙ." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "تعذّر إنشاء المجلد." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "تعذّر إنشاء المل٠(اسم المل٠سيء أو موجود مسبقًا)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "تعذّر ÙØªØ­ الملÙ." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "تعذّر إنشاء خيط." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "مصدر غير صحيح (حجم الملÙÙ‘ مختلÙ)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Ù†ÙØ°Øª الموارد (القرص ممتلئ أو Ù†ÙØ°Øª الذاكرة)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "لا Ù…Ù„Ù Ù…ÙØ®Ø±Ø¬." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "لا إعدادات Ù…ÙØ®Ø±Ø¬Ø©." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "الكثير من الإعادات." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "مخطّط (بروتوكول) غير مدعوم." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "مل٠غير مدعوم." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "المل٠الملصق غير موجود." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "مل٠الكوكيز غير موجود." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "تم حذ٠هذا الÙيديو." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "حصل خطأ اثناء الحصول على معلومات الÙيديو." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "حصل خطأ اثناء الحصول على ØµÙØ­Ø© الويب للÙيديو." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "لا يوجد تعري٠للÙيديو ÙÙŠ رابط اليوتيوب." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: حدث خطأ مجهول." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "الوضع2: إنتهت المهلة." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: لم ÙŠÙØ¹Ø«Ø± على المورد." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "شاهد aria2 عدد من اخطاء 'المصدر غير موجود' . انظر الى خيارات --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: كانت السرعة بطيئة جدًّا." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: حدثت مشكلة شبكيّة." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: تنزيلات غير منتهية." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Ù†ÙØ°Øª الموارد" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: طول القطعة مختل٠عن احدى الموجودات . مل٠تحكم aria2" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "كان aria2 ينزّل Ù†ÙØ³ الملÙ." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "كان aria2 ينزّل Ù†ÙØ³ معلومات تلبيدة السيل." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: المل٠موجود Ø¨Ø§Ù„ÙØ¹Ù„. طالع خيار ‎--allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: ï»» يمكن ÙØªØ­ مل٠موجود." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: لا يمكن إنشاء مل٠جديد أو اقتطاع مل٠موجود." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: حدث خطأ دَخْل/خَرْج Ø§Ù„Ù…Ù„ÙØ§Øª." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: ÙØ´Ù„ تحليل الأسم." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: تعذّر تحليل مستند ميتالÙنك." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: ÙØ´Ù„ أمر FTP." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: ردّ HTTP سيّئ أو غير متوقّع." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "إعادات توجيه كثيرة." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: ÙØ´Ù„ إستيثاق HTTP." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: لا يمكن تحليل مل٠bencoded(عادة مل٠.torrent)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: مل٠الترونت معطوب أو معلوماته ناقصة." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: معرّ٠URI الممغنط سيّئ." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: تم اعطاء خيار سيء/غير معرو٠او تم اعطاء عنصر غير مقبول" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: لم يتمكن خادوم التحكم من الحصول على الطلب" #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: لا يمكن تحليل طلب JSON-RPC" #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "لا استجابة. هل aria2 Ù…Ø·ÙØ£ØŸ" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: تم حذ٠gid " #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "ÙØ´Ù„ ÙÙŠ الحصول على رابط الوسائط" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "لا يوجد وسائط متطابقة." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "مدير تنزيلات" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "ØµÙØ§ الÙليج\t" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "مؤسّس uGet:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "مدير مشروع uGet:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "من المهام" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "جديد من Ø§Ù„Ø­Ø§ÙØ¸Ø©" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "تنزيل جديد" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Ø§Ù„Ø­Ø§ÙØ¸Ø©" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "سطر الأوامر" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "حدث خطأ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "حدث خطأ أثناء التنزيل." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "يبدأ التنزيل" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "يبدأ طابور التنزيل." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "اكتمل التنزيل" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "جميع التنزيلات المصطÙّة اكتملت." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "الحالة" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Ø§Ù„ÙØ¦Ø©" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "أنشئ تنزيل جديد" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "تن_زيل جديد..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "_ÙØ¦Ø© جديدة..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "دÙ_عة جديدة من Ø§Ù„Ø­Ø§ÙØ¸Ø©..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Ø¯ÙØ¹Ø© Ùˆ_صلات متسلسلة جديدة..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "تورنت جديد..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "ميتالÙنك جديد..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Ø§Ø­ÙØ¸ كلّ الإعدادات" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "عيّن التنزيلات المحدّدة إلى قابلية التشغيل" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "عيّن التنزيلات المحدّدة إلى الإلباث" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "عيّن خصائص التنزيلات المحدّدة" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "انقل التنزيل المحدّد لأعلى" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "انقل التنزيل المحدّد لأسÙÙ„" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "انقل التنزيل المحدّد للأعلى" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "انقل التنزيل المحدّد للأسÙÙ„" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "ÙØ¦Ø© جديدة" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "نسخة - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "خصائص Ø§Ù„ÙØ¦Ø©" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "خصائص التنزيل" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "تورنت جديد" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "ميتالÙنك جديد" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Ø§ÙØªØ­ مل٠تورنت" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "مل٠تورنت (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Ø§ÙØªØ­ مل٠ميتالÙنك" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "ÙØ´Ù„ Ø­ÙØ¸ Ù…Ù„Ù Ø§Ù„ÙØ¦Ø©." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "ÙØ´Ù„ تحميل Ù…Ù„Ù Ø§Ù„ÙØ¦Ø©." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Ø§Ø­ÙØ¸ Ù…Ù„Ù Ø§Ù„ÙØ¦Ø©" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Ø§ÙØªØ­ Ù…Ù„Ù ÙØ¦Ø©" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr " مل٠JSON (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "رابط " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "صورة " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "مل٠نصّي" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "استورد وصلات من مل٠HTML" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "مل٠HTML (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "استورد وصلات من مل٠نصّي" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "مل٠نصي بسيط" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "صدّر العناوين إلى مل٠نصّيّ" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Ø¯ÙØ¹Ø© وصلات متسلسلة" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "لا توجد وصلات ÙÙŠ Ø§Ù„Ø­Ø§ÙØ¸Ø©." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "كلّ العناوين موجودة." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Ø¯ÙØ¹Ø© من Ø§Ù„Ø­Ø§ÙØ¸Ø©" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "جديد" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "خطأ" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "رسالة" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d من العناصر محدّدة" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "مستخدمي uGet انتبهوا:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "نقوم٠بحملة تبرع لتطوير uGet المستقبلي، ÙØ¶Ù„ًا انقر" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "هنا" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "ÙØ¶Ù„ًا املأ هذه الدراسة السريعة Ù„ÙÙ€ uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "انقر هنا لأخذ الدراسة" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "ا_سم Ø§Ù„ÙØ¦Ø©:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "التن_زيلات النشطة:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "سعة المنتهية:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "سعة Ø§Ù„Ù…Ø­Ø°ÙˆÙØ©" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "الشروط مطابقة URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Ø§Ù„Ø§Ø³ØªØ¶Ø§ÙØ§Øª_المطابقة:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "الرسوم_المطابقة:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "الأنواع_المطابقة:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "أأخرج Ø¨Ø§Ù„ÙØ¹Ù„ØŸ" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "أتريد حقًّا الخروج؟" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Ø£Ø£Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØ§ØªØŸ" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "أتريد حقًّا Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØ§ØªØŸ" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Ø£Ø£Ø­Ø°Ù Ø§Ù„ÙØ¦Ø©ØŸ" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "أمتأكّد من Ø­Ø°Ù Ø§Ù„ÙØ¦Ø©ØŸ" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "لا تسألني ثانيةً" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_الرابط:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "المرايا:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "الملÙ:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "اختر مجلدًا" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "ال_مجلد:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Ø§Ù„Ù…ÙØ±Ø¬Ùع:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "Ø£_قصى عدد اتصالات:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "قابل للتش_غيل" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "ألب_Ø«" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Ù„ÙØ¬" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "اسم المستخدم:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "كلمة السر:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "مل٠الكعكات:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "اختر مل٠الكعكات" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "المل٠البريدي:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "اختر ملÙًا بريديًّا" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "وكيل المستخدم:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_حدود الإعادة:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "مرة" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Ù…_هلة الإعادة:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "ثانية" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "أقصى حد Ù„Ù„Ø±ÙØ¹:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "Ùƒ.بايت/Ø«" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "أقصى حد للتنزيل:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "استردّ الختم الزمني" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_ملÙ" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "د_ÙØ¹Ø© تنزيلات" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Ø¯ÙØ¹Ø© من الحاÙ_ظة..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "Ø¯ÙØ¹Ø© Ùˆ_صلات متسلسلة..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "استورد مل٠_نصّي (‎.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "است_ورد مل٠HTML†(‎.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_صدر إلى مل٠نصّي (‎.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "ا_ÙØªØ­ ÙØ¦Ø©..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "ا_Ø­ÙØ¸ Ø§Ù„ÙØ¦Ø© كـ..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Ø§Ø­ÙØ¸ _كلّ الإعدادات" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "وضع عدم الاتصال" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_حرّر" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "را_قب Ø§Ù„Ø­Ø§ÙØ¸Ø©" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Ø§Ù„Ø­Ø§ÙØ¸Ø© تعمل بهدوء" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "عمل سطر الاوامر بصورة هادئة" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "تجاهل الرابط الموجود" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "طبّق إعدادات التنزيل الأخيرة" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "إنهاء _التطبيقات-التلقائية" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_عطّل" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Ø£Ø³Ø¨ÙØª" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "علّق" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Ø£Ø·ÙØ¦" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "أعد الإقلاع" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "مخصّص" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Ø§Ø­ÙØ¸ الإعداد" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "Ù…_ساعدة" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "Ø¥_عدادات..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "ا_عرض" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "شر_يط الأدوات" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "شريط الحالة" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "المل_خّص" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "ع_ناصر الملخّص" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "الا_سم" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "الم_جلد" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "الو_صلة" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "ال_رسالة" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Ø£_عمدة التنزيل" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "Ù…_كتمل" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "الح_جم" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "ال_نسبة \"%\"" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "المنق_ضي" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "المتب_قي" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "السرعة" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "سرعة Ø§Ù„Ø±ÙØ¹" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "المرÙوع" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "النسبة" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "الإ_عادة" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Ø£ÙØ¶ÙŠÙ ÙÙŠ" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "انتهى ÙÙŠ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_ÙØ¦Ø©" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "ÙØ¦Ø© _جديدة..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "اح_Ø°Ù Ø§Ù„ÙØ¦Ø©" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "Ù†_زّل" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "ا_حذ٠المدخلة" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "احذ٠المدخلة مع ال_ملÙ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Ø§ÙØªØ­ المجلد الم_حتوي" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "أجبر البدء" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "ان_قل إلى" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "الأهمّيّة" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_عالÙ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "عا_ديّ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "Ù…_Ù†Ø®ÙØ¶" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "احصل على المساعدة عبر الإنترنت" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "التوثيق" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "منتدى الدعم" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Ø£ÙˆØ¯ÙØ¹ تغذية استرجاعية" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "أبلغ عن علّة" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "اختصارات لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "التمس التحديثات" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "إعدادات" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "تعذّر تشغيل التطبيق Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ Ù„Ù„Ù…Ù„Ù \"%s\"." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "\"%s\" - المجلد هذا غير موجود." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "معرّ٠URI موجود" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "معرّ٠URI موجد، أمتأكّد من المتابعة؟" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "عامّ" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "متقدّم" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "إعدادات Ø§Ù„ÙØ¦Ø©" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ Ù„Ù„ØªÙ†Ø²ÙŠÙ„ الجديد 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "غير معنون" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Ù…Ùلبث" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "ÙŠØ±ÙØ¹" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "اكتمل" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Ø§Ù„Ù…Ø­Ø°ÙˆÙØ©" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "المصطÙّة" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "النشطة" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "كلّ الحالات" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "الاسم" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "مكتمل" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "الحجم" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "المنقضي" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "المتبقي" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "رابط" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "الكمية" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "الوسيط:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "لا تستخدم" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "المضيÙ:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Ø§Ù„Ù…Ù†ÙØ°:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "المقبس:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Ù…ÙØ¹Ø·ÙŠØ§Øª المقبس:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "العنصر:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "الإثنين" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "الثلاثاء" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "الأربعاء" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "الخميس" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "الجمعة" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "السبت" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "الأحد" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "Ù…_كّن الجدولة" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Ø£Ø·ÙØ¦" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- أوق٠كل المهام" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "عادي" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- شغّل المهمة اعتياديًا" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "الكلّ" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "لاشيء" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "علّم بالمرشّح" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "علّم الوصلات بالمضي٠وامتداد الملÙ." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "هذا Ø³ÙŠÙØ¹ÙŠØ¯ جميع علامات الوصلات." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "المضيÙ" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "المل٠موجود" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "الوصلة" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "أساس المرجع النصيّ التشعبيّ" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "علّم ال_كل" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "علّم لا _شيء" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_علّم بالمرشّح..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "مثال" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_من:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "إلى" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "الخانات:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "Ù…_Ù†:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "حسّاس للأحرÙ" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "لا حر٠بدل (*) ÙÙŠ Ù…ÙØ¯Ø®Ù„Ø© الوصلة." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "الوصلة غير صالحة." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "لا محار٠ÙÙŠ مدخلات \"من\" أو \"إلى\"." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "معاينة" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "واجهة المستخدم" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "عرض النطاق" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "الجدولة" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "موقع الوسائط" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "أخرى" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "Ù…_كّن مراقبة Ø§Ù„Ø­Ø§ÙØ¸Ø©" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "الوضع ال_صامت" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Ùهرس Ø§Ù„ÙØ¦Ø© Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Ø§Ø¶Ø§ÙØ© عدد من Ø§Ù„ÙØ¦Ø§Øª اذا لم يتم المطابقة مع ÙØ¦Ø©" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_Monitor عرض رابط موقع الوسائط" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "راقب Ø§Ù„Ø­Ø§ÙØ¸Ø© بحثًا عن أنواع Ø§Ù„Ù…Ù„ÙØ§Øª:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Ø§ÙØµÙ„ الأنواع بالمحر٠\"|\"." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "تستطيع استعمال التعابير النمطية هنا." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "أكّد" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "أظهر حواري تأكيدي عن الخروج" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "أظهر تأكيد عند Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØ§Øª" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "صينيّة النظام" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "أظهر صينية النظام دائمًا" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "صغّر إلى الصينية عند البدء" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "أغلق إلى الصينيّة عند إغلاق Ø§Ù„Ù†Ø§ÙØ°Ø©" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "استخدم مؤشّر برمجيات أبونتو" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "مكّن وضع عدم الاتصال عند البدء" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "إخطار بدء التنزيل" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "إصدار صوت عند انتهاء التنزيل" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "اعرض رموز كبيرة" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "سيؤثّر هذا على كلّ Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "حدّ السرعة العموميّ" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "حدّ Ø§Ù„Ø±ÙØ¹ العموميّ" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "حدّ التنزيل العموميّ" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "إجراءات الاكتمال الآليّة" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "أمر مخصّص:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "أمر مخصّص إن حدث خطأ:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "Ø§Ø­ÙØ¸ Ø¢_ليًّا" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "ال_مدة:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "دقيقة" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "إعدادات سطر الأوامر" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "استخدم \"‎--quiet\" Ø§ÙØªØ±Ø§Ø¶ÙŠÙ‹Ø§" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "ترتيب مطابقة الملحقات:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "خيارات ملحقات Aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "رمز ترخيص RPC السري" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "حدّ السرعة العموميّ Ù„ÙÙ€ aria2 Ùقط" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "ا_بدء aria2 عند بدء التشغيل" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "أو_ق٠تشغيل aria2 عند الخروج" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "أطلÙÙ‚ aria2 على جهاز محلّيّ" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "المسار" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Ø§Ù„Ù…ÙØ¹Ø·ÙŠØ§Øª" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "عليك إعادة تشغيل uGet بعد تعديلها." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "نمط تطابق الميديا" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "تطابق الشروط" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "الجودة:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "النوع:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "ملÙ" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "مجلد" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "عنصر" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "قيمة" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "انسخ ال_كلّ" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "أظهر Ø§Ù„Ù†Ø§ÙØ°Ø©" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "وضع ع_دم الاتصال" uget-2.2.3/po/sv.po0000664000175000017500000013231013602733704011020 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Patrik Nilsson , 2017 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2017-09-16 10:31+0000\n" "Last-Translator: Patrik Nilsson \n" "Language-Team: Swedish (http://www.transifex.com/uget/uget/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "Demon för lösenordshanterare: uget\n\nUnder försöket att upprätta en SSH anslutning till %s uppstod det ett problem med verifieringen av dess värdnyckel emot den kända och betrodda värd filen, eftersom dess värdnyckel inte hittades.\n\nVill du behandla den här anslutningen som betrodda för denna och framtida anslutningar genom att lägga till %s's värdnyckel till den kända värdfilen?" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "All kategorin" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Ansluter..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Överför..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Försök igen" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Nedladdning slutförd" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Slutförd" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Kan Ã¥terupptas" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Kan ej Ã¥terupptas" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Output-fil kan inte döpas om." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "kunde inte ansluta till värd." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Mappen kan inte skapas." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Filen kan inte skapas (ogiltigt filnamn eller filen existerar redan)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Filen kan inte öppnas." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Kunde inte skapa trÃ¥d." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Felaktig källa (skiljaktig filstorlek)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Slut pÃ¥ resurser (disken är full eller slut pÃ¥ arbetsminne)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Ingen output-fil." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Ingen output inställning" #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "För mÃ¥nga försök." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Protokollet stöds ej." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Filen stöds ej." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "post-filen hittades inte." #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "kakfilen hittades inte." #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "Den här videon har tagits bort." #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "Fel uppstod under hämtningen av video info." #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "Fell uppstod under hämtningen av video webbsida." #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "Inget video_id hittades i URL till YouTube." #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: ett okänt fel inträffade." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: timeout inträffade." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: resursen hittades inte." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 sÃ¥g det angivna antalet 'resursen hittades inte' fel. Se alternativet --max-file-not-found." #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: hastigheten var för lÃ¥g." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: ett nätverksproblem uppstod." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: oavslutade nedladdningar." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Slut pÃ¥ resurser" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: bit längd var annorlunda än en i .aria2 kontroll filen." #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 hämtade samma fil." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 hämtade samma info hash torrent." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: filen existerade redan. Se --allow-overwrite alternativet." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: kunde inte öppna den befintliga filen." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: kunde inte skapa ny fil eller ändra befintlig fil." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: fil I/O fel inträffade." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: namn uppslagning misslyckades." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aira2: kunde inte tolka Metalink dokumentet." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP-kommandot misslyckades." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aira2: HTTP-svarshuvud var felaktig eller oväntat." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "För mÃ¥nga omdirigeringar." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP autentisering misslyckades." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: kunde inte tolka bencoded fil (vanligtvis .torrent fil)." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aira2: torrent filen var korrupt eller saknade information." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aira2: Magnetlänk URI var felaktig." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aira2: felaktig/oigenkännligt alternativ angavs eller oväntat alternativ argument angivet." #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: fjärrservern kunde inte hantera förfrÃ¥gan." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: kunde inte tolka JSON-RPC förfrÃ¥gan." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Inget svar. Är aria2 nedstängt?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid togs bort." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "Misslyckade att hämta media-länk." #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "Inget matchat media." #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Nedladdningshanterare" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Patrik Nilsson " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet Grundare:" #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet Projektledare:" #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "uppgifter" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Ny frÃ¥n urklipp" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Ny nedladdning" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Urklipp" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Kommandorad" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Fel uppstod" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Fel uppstod under nedladdning." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Nedladdning startar" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Startar nedladdnings kö." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Nedladdning slutförd" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Alla nedladdningar i kön har slutförts." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Status" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Kategorier" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Skapa ny nedladdning" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Ny _nedladdning..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Ny _kategori..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Ny _sats frÃ¥n urklipp..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Ny _URL sekvenssats..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Ny torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Ny metalänk..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Spara alla inställningar" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Kör markerad nedladdning" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Pausa markerad nedladdning" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Ställ in den markerade nedladdningens egenskaper" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Flytta markerad nedladdning upp" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Flytta markerad nedladdning ner" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Flytta markerad nedladdning till toppen" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Flytta markerad nedladdning till botten" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Ny kategori" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Kopiera -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Kategori egenskaper" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Nedladdnings egenskaper" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Ny torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Ny metalänk" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Öppna torrent-fil" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "Torrent fil (*.torrent)" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Öppna metalänk-fil" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Det gick inte att spara kategori filen." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Det gick inte att läsa in kategori filen." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Spara kategori fil" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Öppna kategori fil" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "JSON fil (*.json)" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Länk " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Bild " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Textfil" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Importera URL:er frÃ¥n HTML-fil" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "HTML fil (*.htm, *.html)" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Importera URL:er frÃ¥n textfil" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "Vanlig textfil" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "Exportera URL:er till text fil" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL sekvenssats" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Inga URL:er hittades i urklipp." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Alla URL:er har existerat." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Urklippssats " #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Ny" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Fel" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Meddelande" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Markerade %d objekt" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "Observera! uGet användare:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "vi har en donations insamling för uGets framtida utveckling, vänligen klicka" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "HÄR" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "vänligen fyll i den här snabba användarundersökningen för uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "klicka här för att ta undersökningen" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Kategori _namn:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Aktiva _nedladdningar:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "Kapacitet för slutförda:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "Kapacitet för borttagna:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "URI matchande förhÃ¥llanden" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Matchade _värdar:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Matchade _scheman:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Matchade _typer:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Vill du avsluta?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Är du säker pÃ¥ att du vill avsluta?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Vill du ta bort filerna?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Är du säker pÃ¥ att du vill ta bort filerna?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Vill du ta bort kategorin?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Är du säker pÃ¥ att du vill radera kategorin?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "FrÃ¥ga mig inte igen" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Speglar:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Fil:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Välj mapp" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Mapp:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "Hänvisare:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Max anslutningar:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Körbar" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "_Pausa" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Inloggning" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Användare:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Lösenord:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Cookie-fil:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Välj en Cookie-fil" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Post-fil:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Välj en post-fil" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Användaragent:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Gräns för Ã¥terförsök:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "antal" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Fördröjning mellan _Ã¥terförsök:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "sekunder" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Max uppladdningshastighet:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Max nedladdningshastighet:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Hämta tidsstämpel" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Arkiv" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Satsvisa nedladdningar" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "Ur_klippssats..." #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_URL sekvenssats..." #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "Import av _textfil (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "Import av _HTML-fil (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_Exportera till textfil (.txt)..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Öppna kategori..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Spara kategori som..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Spara _alla inställningar" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Offlineläge" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_Redigera" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Urklipps_övervakare" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Urklipp arbetar tyst" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Kommandorad arbetar tyst" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "Hoppa över befintlig URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "Tillämpa senaste nedladdnings inställningar" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "Slutförande _auto-Ã¥tgärder" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Inaktivera" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Vila" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Viloläge" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Stäng av" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Starta om" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Anpassad" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Kom ihÃ¥g inställning" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Hjälp" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Inställningar..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Visa" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Verktygsfält" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Statusrad" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Sammanfattning" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "Sammanfattning av _objekt" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Namn" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Mapp" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Meddelande" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Nedladdnings _kolumner" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Slutförd" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Storlek" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Procent '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Förlopp" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Kvar" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Hastighet" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Upp hastighet" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Uppladdat" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Ratio" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Försök" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Lades till" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Slutförd den" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Kategori" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Ny kategori..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Ta bort kategori" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Nedladdning" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Ta bort inlägg" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Ta bort inlägg och _fil" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Öppna _innehÃ¥llande mapp" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Tvinga uppstart" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Flytta till" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Prioritet" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Hög" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Normal" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_LÃ¥g" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "FÃ¥ hjälp online" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Dokumentation" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Support forum" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Skicka feedback" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Rapportera ett fel" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Kortkommandon" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Sök efter uppdateringar" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Inställningar" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Kan inte öppna standardprogram för fil '%s'." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Den här mappen finns inte." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI har existerat" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Denna URI hade existerat, är du säker pÃ¥ att fortsätta?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Allmänt" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Avancerat" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Kategori inställningar" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Standard för ny nedladdning 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Standard 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "namnlös" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Pausade" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Uppladdat" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Slutförda" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Borttagna" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "I kö" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Aktiva" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Alla status" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Namn" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Slutförd" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Storlek" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Förlopp" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Kvar" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Kvantitet" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proxy:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Använd ej" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Standard" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Värd:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Socket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Socket argument:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Mon" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Tis" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Ons" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Tor" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Fre" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Lör" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Sön" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "Aktivera _schemaläggare" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Stäng av" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- stoppa alla uppgifter" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Normal" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- kör uppgifter som vanligt" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Alla" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Ingen" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Markera efter filter" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Markera URL:er efter värd OCH filändelse." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Detta kommer att Ã¥terställa alla URL:ers markeringar." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Värd" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Filändelse" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "Grundreferens för hypertext" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Markera _alla" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "Markera _ingen" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "_Markera efter filter..." #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "ex." #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_FrÃ¥n:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "Till:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "siffror:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "F_rÃ¥n:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "Skillnad mellan smÃ¥/större bokstäver" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Inga asterisk(*) tecken i URL:en." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL:en är inte giltig" #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Inga tecken i 'FrÃ¥n' eller 'Till' fälten." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Förhandsvisning" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Användargränssnitt" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "Bandbredd" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Schemaläggare" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Insticksmodul" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "Media webbplats" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Övriga" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Aktivera urklippsövervakare" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_Tyst läge" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Standard kategori index" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Lägger till i Nth kategori om ingen matchade kategori." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "_Övervaka URL till media webbplats" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Övervaka urklipp efter specificerade filtyper:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Separera typerna med '|' tecknet." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Du kan använda reguljära uttryck här." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Bekräftelse" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Visa bekräftelsedialog vid avslut" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Bekräfta när du tar bort filer" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Systemfältet" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Visa alltid en ikon i systemfältet" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Minimera till systemfält vid uppstart" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Stäng till systemfält vid stängning" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "Använd Ubuntu's app indikator" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "Aktivera offline läge vid uppstart" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "Notifiera när en nedladdning pÃ¥börjas" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Spela en ton när nedladdning är slutförd" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "Visa stor ikon" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Dessa kommer att pÃ¥verka alla insticksmoduler." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Global hastighetsbegränsning" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Max uppladdningshastighet" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Max nedladdningshastighet" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Slutförande auto-Ã¥tgärder" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Anpassat kommando:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Anpassat kommando om fel inträffade:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Auto-spara" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Intervall:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "minuter" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Kommandorad inställningar" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Använd '--quiet' som standard" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Insticksmoduler i matchande ordning:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Alternativ för aria2 insticksmodul" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "RPC hemligt autentiserings token" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Endast global hastighetsbegränsning för aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_Starta aria2 vid uppstart" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Stäng aria2 vid nedstängning" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "Starta aria2 pÃ¥ lokal enhet" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Sökväg" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argument" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Du mÃ¥ste starta om uGet efter att ha modifierat det." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "Media matchningsläge:" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "Match förhÃ¥llanden:" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "Kvalitet:" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "Typ:" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Fil" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Mapp" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Objekt" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Värde" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Kopiera _alla" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Visa fönster" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Offline-läge" uget-2.2.3/po/uk.po0000664000175000017500000014566513602733704011030 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Oleh, 2014 # Serhij Dubyk , 2011 # Микола Ткач , 2016 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Ukrainian (http://www.transifex.com/uget/uget/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "УÑÑ– категорії" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "З’єднаннÑ…" #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Передача…" #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Спроби" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Завершено" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Можливе продовженнÑ" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "ÐŸÑ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Вихідний файл неможливо перейменувати." #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "не вдаєтьÑÑ Ð¿Ñ–Ð´'єднатиÑÑ Ð´Ð¾ вузла." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Ðеможливо Ñтворити теку." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Файл не може бути Ñтворений (невірна назва чи файл Ñ–Ñнує)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Ðе вдаєтьÑÑ Ñтворити потік." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Ðевірне джерело (різний розмір файлу)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Бракує реÑурÑів (диÑк заповнений чи брак пам’Ñті)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "ВідÑутній вихідний файл." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Ðемає вихідних налаштувань." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Забагато Ñпроб." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Ðепідтримувана Ñхема (протокол)." #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Ðепідтримуваний файл." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: ÑталаÑÑ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° помилка." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: Ñ‡Ð°Ñ Ñплив." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: реÑÑƒÑ€Ñ Ð½Ðµ знайдено." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 отримала певне чиÑло помилок \"реÑÑƒÑ€Ñ Ð½Ðµ знайдено\". ДивітьÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ --max-file-not-found" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: швидкіÑть була замалою." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: виникла проблема з мережею." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: незавершені завантаженнÑ." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Ðемає реÑурÑів" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "aria2: розмір блоку відрізнÑвÑÑ Ð²Ñ–Ð´ вказаного у контрольному .aria2-файлі" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "aria2 був завантажений один Ñ– той Ñамий файл." #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "aria2 був завантажений один Ñ– той Ñамий хеш торенту." #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: файл вже Ñ–Ñнує. ДивітьÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "aria2: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ñ–Ñнуючий файл." #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "aria2: не вдалоÑÑ Ñтворити новий файл або обнулити Ñ–Ñнуючий файл." #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "aria2: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° читаннÑ/запиÑу файлу." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: дозвіл імен не вдавÑÑ." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: не вдалоÑÑ Ð¿Ñ€Ð¾Ð°Ð½Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Metalink-документ." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP команда не вдалаÑÑ." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP-заголовок відповіді був зіпÑованим або неочікуваним." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Забагато переÑпрÑмувань." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "ria2: HTTP-Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ñ–Ñ Ð½Ðµ вдалаÑÑ." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "aria2: не вдалоÑÑ Ð¿Ñ€Ð¾Ð°Ð½Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ закодований файл (зазвичай файл \".torrent\")." #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "aria2: торент-файл пошкоджений або бракує інформації." #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: поганий Magnet URI." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "aria2: задано поганий/нерозпізнаний параметр або неочкуваний аргумент до нього" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: віддалений Ñервер не зміг опрацювати запит." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: не вдалоÑÑ Ð¿Ñ€Ð¾Ð°Ð½Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ JSON-RPC запит." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Ðемає відповіді. Можливо aria2 відімкнена?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid був вилучений." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Керівник звантажень" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "Сергій Дубик \nÐœÐ°ÐºÑ Ð›Ñшук \nМикола Ткач " #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "ЗаÑновник uGet: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "Керівник проєкту uGet: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "завданнÑ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Ðове Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð· буферу обміну" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Ðове звантаженнÑ" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Буфер обміну" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Командний Ñ€Ñдок" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при завантаженні." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð¾" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "запущена черга звантажень." #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Ð—Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "УÑÑ– файли з черги уÑпішно звантажено." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "СтатуÑ" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "КатегоріÑ" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Створити нове звантаженнÑ" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Ðове _звантаженнÑ…" #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Ðова _категоріÑ…" #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Ðове Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð· _буферу обміну…" #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Ðовий перелік поÑилань" #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Ðовий торент..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Ðове метапоÑиланнÑ..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Зберегти уÑÑ– налаштуваннÑ" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Почати Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ñ… запиÑів" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Призупинити вибрані звантаженнÑ" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Ð’Ñтановити ціхи вибраних звантажень" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "ПереміÑтити обране Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸Ñ‰Ðµ" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "ПереміÑтити обране Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð¸Ð¶Ñ‡Ðµ" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "ПереміÑтити обране Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾ початку" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "ПереміÑтити обране Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñƒ кінець" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Ðова категоріÑ" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Копіювати -" #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "ВлаÑтивоÑті категорії" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "ВлаÑтивоÑті звантаженнÑ" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Ðовий торент" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Ðове метапоÑиланнÑ" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Відкрити torrent-файл" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Відкрити файл метапоÑилань" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ файл категорії." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл категорії." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Зберегти файл категорії" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Відкрити файл категорії" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "ТекÑтовий файл" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "Імпортувати URL-адреÑи з HTML-файлу" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "Імпортувати URL-адреÑи з текÑтового файлу" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "ЕкÑпорт URL-Ð°Ð´Ñ€ÐµÑ Ñƒ текÑтовий файл" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "Перелік поÑилань" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "У буфері обміну не знайдено URL-адреÑ." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "УÑÑ– URL-адреÑи вже Ñ–Ñнують." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "З буферу обміну" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Ðова" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Помилка" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "ПовідомленнÑ" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "Обрано запиÑів: %d" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "КориÑтувачі UGet, зверніть увагу:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "ми запуÑтили Donation Drive Ð´Ð»Ñ Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÐ¾Ñ— розробки uGet, будь лаÑка, клацніть" #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "ТУТ" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "будь лаÑка, пройдіть швидке Ð¾Ð¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів uGet." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "натиÑніть тут, аби пройти опитуваннÑ" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "Ðазва категорії:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "Ðктивні з_вантаженнÑ:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "КількіÑть завершених:" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "КількіÑть вилучених:" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "Умови Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ URI" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "Розпізнавати _хоÑти:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "Розпізнавати _Ñхеми:" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "Розпізнавати _типи:" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "Справді вийти?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "Ви Ñправді бажаєте вийти?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "Справді волієте вилучити файли?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "Ви впевнені, що бажаєте вилучити файли?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "Справді вилучити категорію?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "Ви впевнені, що волієте вилучити категорію?" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Ðе питати знову" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Дзеркала:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Файл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Виберіть теку" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Тека:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñторінку:" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_МакÑимальне чиÑло з’єднань:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_ЗапуÑк" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "_ПризупиненнÑ" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Вхід" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "КориÑтувач:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Пароль:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Файл-куки:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Виберіть файл з куками" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Відвантажуваний файл:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Виберіть Post-файл" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Клієнт кориÑтувача:" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "Межа кількоÑти Ñпроб:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "раз" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Затримка між Ñпробами:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "Ñекунд" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "МакÑимальна швидкіÑть відвантаженнÑ:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/Ñ" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "МакÑимальна швидкіÑть завантаженнÑ:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "Отримувати чаÑову мітку" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Файл" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "_Пакункове завантаженнÑ" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "_З буферу обміну" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "_Перелік поÑилань" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "_ТекÑтовий файл імпорту (.txt)..." #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML-файл імпорту (.html)..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "_ЕкÑпортувати до текÑтового файлу (.txt)" #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "_Відкрити категорію..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "_Зберегти категорію Ñк..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "Зберегти _уÑÑ– налаштуваннÑ" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Режим офлайн" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "_РедагуваннÑ" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Стежити за _буфером обміну" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "Буфер обміну у автоматичному режимі" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "Командний Ñ€Ñдок у автоматичному режимі" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "ПропуÑкати Ñ–Ñнуючі URI" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "_Дії піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_Відімкнено" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "ГібернаціÑ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "Режим очікуваннÑ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Ð—Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "ПерезавантаженнÑ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "КориÑтувацьке" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Запам’Ñтати налаштуваннÑ" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Довідка" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_ÐалаштуваннÑ…" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_ПереглÑд" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Панель знарÑдь" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "РÑдок Ñтану" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_ЗведеннÑ" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "ÐŸÐ¾Ð»Ñ _зведеннÑ" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Ðазва" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Тека" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_ПовідомленнÑ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "_Стовпці переліку звантажень" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Завершено" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Розмір" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "ВідÑоток '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Пройшло чаÑу" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_ЗалишилоÑÑŒ чаÑу" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "ШвидкіÑть" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "ШвидкіÑть завантаженнÑ" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Відвантажено" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "ВідношеннÑ" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Cпроби" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Додано в" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Завершено в" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_КатегоріÑ" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Створити категорію…" #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "Ви_лучити категорію" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_ЗвантаженнÑ" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Вилучити запиÑ" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Вилучити Ð·Ð°Ð¿Ð¸Ñ Ñ– _файл" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "Відкрити _каталог, що міÑтить" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "ПримуÑовий запуÑк" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_ПереміÑтити до" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Пріоритет" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_ВиÑокий" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_Звичайний" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Ðизький" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Отримати допомогу онлайн" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "ДокументаціÑ" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Форум підтримки" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "ВідіÑлати відгук" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "СповіÑтити про недолік" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Ð¡ÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Перевірити наÑвніÑть оновлень" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "ÐалаштуваннÑ" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð¿ÑƒÑтити типову проґраму Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ „%s“" #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' – цієї теки не Ñ–Ñнує." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "URI вже Ñ–Ñнує" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Цей URI вже Ñ–Ñнує, Ви впевнені, що бажаєте продовжити?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Загальні" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Додаткові" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ñ–Ñ—" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "Типово Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ 1" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Типове 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "неназване" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Призупинено" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "ВивантаженнÑ" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Завершено" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Вилучені" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "У черзі" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Ðктивно" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "УÑÑ– Ñтани" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Ðазва" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Завершено" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Розмір" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "Минуло" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "ЗалишилоÑÑ" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "КількіÑть" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "ПрокÑÑ–:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Ðе викориÑтовувати" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Типово" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Сайт:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Порт:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Сокет:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Ðргументи Ñокета:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Елемент:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Пон" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Вів" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Сер" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Чет" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "П’ÑÑ‚" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Суб" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Ðед" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "_Увімкнути планувальник" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "Вимкнути" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- зупинити уÑÑ– завданнÑ" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "Ðормальний" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- запуÑтити Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ñƒ звичайному режимі" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "УÑÑ–" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Жодного" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð° фільтром" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "Відзначити URL-адреÑи за Ñайтом ТРрозширеннÑм файлу." #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "Це Ñкине уÑÑ– Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ URL-адреÑ." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Сайт" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ" #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "База гіпертекÑтових поÑилань" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "Позначити _уÑÑ–" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "_ЗнÑти позначки" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "Від_фільтрувати…" #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "Ðаприклад:" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "_Від:" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "До:" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "цифри:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "_Від:" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "з урахуваннÑм регіÑтру" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "Ðе викориÑтовувати Ñимвол підÑтановки (*) в URL-адреÑÑ–." #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "Ðевірна URL." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "Ðемає Ñимволів у входженні „Від“ чи „До“." #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Попередній переглÑд" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "КориÑтувацький інтерфейÑ" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "ПропуÑкна здатніÑть" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Планувальник" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "ДоповненнÑ" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Інше" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "_Увімкнути моніторинг буферу обміну" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "_У автоматичному режимі" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "Ð†Ð½Ð´ÐµÐºÑ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ñ— категорії" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "Ð”Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ N-ої категорії, Ñкщо ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ñ–Ñ Ð½Ðµ розпізнана." #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "Стежити за ціма типами файлів у буфері обміну:" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Відокремлювати типи Ñимволом „|“." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Тут Ви можете викориÑтовувати регулÑрні вирази." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "ПідтвердженнÑ" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Показувати вікно Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ виході" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Питати ÑÑ…Ð²Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ вилученні файлів" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "СиÑтемна тацÑ" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "Завжди показувати піктограму у треї" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "Ховати до ÑиÑтемної таці при запуÑку" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "Приховувати у тацю при закриванні вікна" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "ВикориÑтовувати індикатор заÑтоÑунків Ubuntu" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "ЗадіÑти автономний режим при запуÑку" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ запуÑку звантаженнÑ" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "Звук при завершенні звантаженнÑ" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "Вони впливають на уÑÑ– втулки." #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Глобальні Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ñті" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "МакÑимальна швидкіÑть вивантаженнÑ" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "МакÑимальна швидкіÑть завантаженнÑ" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Дії піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "КориÑтувацька команда:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "КориÑтувацька команда при виникненні помилки:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_ÐвтозбереженнÑ" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Інтервал:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "хвилини" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ñдка" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Типово викориÑтовувати '--quiet'" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "ПорÑдок Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð²Ñ‚ÑƒÐ»Ð¾Ðº:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Параметри втулки aria2" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "Секретний токен RPC-авторизації" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Глобальні Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ñті лише Ð´Ð»Ñ aria2" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "_ЗапуÑкати aria2 під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "_Закривати aria2 при виході" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "ЗапуÑкати aria2 на локальному приÑтрої" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "ШлÑÑ…" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Ðргументи" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "Ви повинні перезавантажити uGet піÑÐ»Ñ Ð²Ð½ÐµÑÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Файл" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Тека" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "ЗапиÑ" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "ЗначеннÑ" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "Копіювати _уÑÑ–" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Показати вікно" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "_Ðвтономний режим" uget-2.2.3/po/uz@Latn.po0000664000175000017500000012653713602733704011763 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Akmal , 2015 msgid "" msgstr "" "Project-Id-Version: uGet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-06-03 03:10+0800\n" "PO-Revision-Date: 2016-11-09 16:16+0000\n" "Last-Translator: Michael Tunnell \n" "Language-Team: Uzbek (Latin) (http://www.transifex.com/uget/uget/language/uz@Latn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uz@Latn\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../po/../uget/pwmd.c:32 #, c-format msgid "" "Password Manager Daemon: uget\n" "\n" "While attempting an SSH connection to %s there was a problem verifying it's hostkey against the known and trusted hosts file because it's hostkey was not found.\n" "\n" "Would you like to treat this connection as trusted for this and future connections by adding %s's hostkey to the known hosts file?" msgstr "" #: ../../po/../uget/UgetApp.c:103 msgid "All Category" msgstr "Barcha turkum" #. UGET_EVENT_NORMAL_CUSTOM #: ../../po/../uget/UgetEvent.c:58 msgid "Connecting..." msgstr "Ulanmoqda..." #. UGET_EVENT_NORMAL_CONNECT #: ../../po/../uget/UgetEvent.c:59 msgid "Transmitting..." msgstr "Uzatilmoqda..." #. UGET_EVENT_NORMAL_TRANSMIT, #: ../../po/../uget/UgetEvent.c:60 ../../po/../ui-gtk/UgtkNodeView.c:917 msgid "Retry" msgstr "Qayta urinish" #. UGET_EVENT_NORMAL_RETRY, #: ../../po/../uget/UgetEvent.c:61 msgid "Download completed" msgstr "Yuklab olish jarayoni tugadi!" #. UGET_EVENT_NORMAL_COMPLETE, #: ../../po/../uget/UgetEvent.c:62 ../../po/../ui-gtk/UgtkNodeView.c:644 msgid "Finished" msgstr "Tugadi" #. UGET_EVENT_NORMAL_FINISH, #. resumable #: ../../po/../uget/UgetEvent.c:64 msgid "Resumable" msgstr "Davom ettirsa bo‘ladi" #. UGET_EVENT_NORMAL_RESUMABLE, #: ../../po/../uget/UgetEvent.c:65 ../../po/../uget/UgetPluginAria2.c:287 msgid "Not Resumable" msgstr "Davom ettirib bo‘lmaydi" #. UGET_EVENT_WARNING_CUSTOM #: ../../po/../uget/UgetEvent.c:73 ../../po/../uget/UgetPluginAria2.c:294 msgid "Output file can't be renamed." msgstr "Chiquvchi fayl nomini o‘zgartirib bo‘lmaydi" #. UGET_EVENT_ERROR_CUSTOM #: ../../po/../uget/UgetEvent.c:81 msgid "couldn't connect to host." msgstr "hostga ulana olmadi." #. UGET_EVENT_ERROR_CONNECT_FAILED #: ../../po/../uget/UgetEvent.c:82 ../../po/../uget/UgetPluginAria2.c:298 msgid "Folder can't be created." msgstr "Jild yaratilmadi." #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:83 msgid "File can't be created (bad filename or file exist)." msgstr "Fayl yaratilmadi (fayl nomi to‘g‘ri kelmaydi yoki shu nomdagi fayl mavjud)." #. UGET_EVENT_ERROR_FILE_CREATE_FAILED #: ../../po/../uget/UgetEvent.c:84 msgid "File can't be opened." msgstr "Faylni ochib bo‘lmaydi." #. UGET_EVENT_ERROR_FILE_OPEN_FAILED #: ../../po/../uget/UgetEvent.c:85 msgid "Unable to create thread." msgstr "Mavzu yaratilmadi." #. UGET_EVENT_ERROR_THREAD_CREATE_FAILED, #: ../../po/../uget/UgetEvent.c:86 msgid "Incorrect source (different file size)." msgstr "Noto‘g‘ri manba (boshqa fayl hajmi)." #. UGET_EVENT_ERROR_INCORRECT_SOURCE, #: ../../po/../uget/UgetEvent.c:87 msgid "Out of resource (disk full or run out of memory)." msgstr "Manbadan tashqari (disk to‘la yoki xotira yetishmayapti)." #. UGET_EVENT_ERROR_OUT_OF_RESOURCE #: ../../po/../uget/UgetEvent.c:88 msgid "No output file." msgstr "Chiquvchi fayl yo‘q." #. UGET_EVENT_ERROR_NO_OUTPUT_FILE #: ../../po/../uget/UgetEvent.c:89 msgid "No output setting." msgstr "Chiqish sozlamasi o‘rnatilmagan." #. UGET_EVENT_ERROR_NO_OUTPUT_SETTING #: ../../po/../uget/UgetEvent.c:90 msgid "Too many retries." msgstr "Juda ko‘p urinildi." #. UGET_EVENT_ERROR_TOO_MANY_RETRIES #: ../../po/../uget/UgetEvent.c:91 msgid "Unsupported scheme (protocol)." msgstr "Mos kelmaydigan sxema (protokol)" #. UGET_EVENT_ERROR_UNSUPPORTED_SCHEME #: ../../po/../uget/UgetEvent.c:92 msgid "Unsupported file." msgstr "Mos kelmaydigan fayl." #. UGET_EVENT_ERROR_UNSUPPORTED_FILE #: ../../po/../uget/UgetEvent.c:93 msgid "post file not found." msgstr "" #. UGET_EVENT_ERROR_POST_FILE_NOT_FOUND #: ../../po/../uget/UgetEvent.c:94 msgid "cookie file not found." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:275 msgid "This video has been removed." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:288 msgid "Error occurred during getting video info." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:534 msgid "Error occurred during getting video web page." msgstr "" #: ../../po/../uget/UgetMedia-youtube.c:606 msgid "No video_id found in URL of YouTube." msgstr "" #. 1 - 10 #: ../../po/../uget/UgetPluginAria2.c:280 msgid "aria2: an unknown error occurred." msgstr "aria2: noma’lum xatolik yuz berdi." #: ../../po/../uget/UgetPluginAria2.c:281 msgid "aria2: time out occurred." msgstr "aria2: tanaffus yuz berdi." #: ../../po/../uget/UgetPluginAria2.c:282 msgid "aria2: resource was not found." msgstr "aria2: manba topilmadi." #: ../../po/../uget/UgetPluginAria2.c:283 msgid "" "aria2 saw the specfied number of 'resource not found' error. See --max-file-" "not-found option" msgstr "aria2 'resource not found' xatosining ko‘rsatilgan raqamini ko‘ring. --max-file-not-found tanlamasini ko‘ring" #: ../../po/../uget/UgetPluginAria2.c:284 msgid "aria2: speed was too slow." msgstr "aria2: tezlik juda past." #: ../../po/../uget/UgetPluginAria2.c:285 msgid "aria2: network problem occurred." msgstr "aria2: tarmoqda muammo yuz berdi." #: ../../po/../uget/UgetPluginAria2.c:286 msgid "aria2: unfinished downloads." msgstr "aria2: tugallanmagan yuklab olishlar." #. _("Not Resumable"), #: ../../po/../uget/UgetPluginAria2.c:288 msgid "Out of resource" msgstr "Manbadan tashqari" #. _(), #: ../../po/../uget/UgetPluginAria2.c:289 msgid "aria2: piece length was different from one in .aria2 control file." msgstr "" #. 11 - 20 #: ../../po/../uget/UgetPluginAria2.c:291 msgid "aria2 was downloading same file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:292 msgid "aria2 was downloading same info hash torrent." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:293 msgid "aria2: file already existed. See --allow-overwrite option." msgstr "aria2: fayl allaqachon mavjud. Ko‘ring: --allow-overwrite." #. _("Output file can't be renamed."), #: ../../po/../uget/UgetPluginAria2.c:295 msgid "aria2: could not open existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:296 msgid "aria2: could not create new file or truncate existing file." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:297 msgid "aria2: file I/O error occurred." msgstr "" #. UGET_EVENT_ERROR_FOLDER_CREATE_FAILED #: ../../po/../uget/UgetPluginAria2.c:299 msgid "aria2: name resolution failed." msgstr "aria2: o‘lcham nomi amalga oshmadi." #: ../../po/../uget/UgetPluginAria2.c:300 msgid "aria2: could not parse Metalink document." msgstr "aria2: ma’lumot havolasi hujjatini ajratib bo‘lmadi." #. 21 - 30 #: ../../po/../uget/UgetPluginAria2.c:302 msgid "aria2: FTP command failed." msgstr "aria2: FTP buyrug‘i amalga oshmadi." #: ../../po/../uget/UgetPluginAria2.c:303 msgid "aria2: HTTP response header was bad or unexpected." msgstr "aria2: HTTP javob bosh qatori juda yomon yoki kutilmaganda yuz berdi." #: ../../po/../uget/UgetPluginAria2.c:304 msgid "Too many redirections." msgstr "Juda ko‘p qayta yo‘naltirildi." #: ../../po/../uget/UgetPluginAria2.c:305 msgid "aria2: HTTP authorization failed." msgstr "aria2: HTTP tasdiqdan o‘tish amalga oshmadi." #: ../../po/../uget/UgetPluginAria2.c:306 msgid "aria2: could not parse bencoded file(usually .torrent file)." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:307 msgid "aria2: torrent file was corrupted or missing information." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:308 msgid "aria2: Magnet URI was bad." msgstr "aria2: Magnet URI manzili yomon edi." #: ../../po/../uget/UgetPluginAria2.c:309 msgid "" "aria2: bad/unrecognized option was given or unexpected option argument was " "given." msgstr "" #: ../../po/../uget/UgetPluginAria2.c:310 msgid "aria2: remote server was unable to handle the request." msgstr "aria2: masofaddagi server so‘rovni ishlay olmadi." #: ../../po/../uget/UgetPluginAria2.c:311 msgid "aria2: could not parse JSON-RPC request." msgstr "aria2: JSON-RPC so‘rovi tahlil qilinmadi." #: ../../po/../uget/UgetPluginAria2.c:314 msgid "No response. Is aria2 shutdown?" msgstr "Javob bo‘lmadi. aria2 o‘chirilganmi?" #. debug #: ../../po/../uget/UgetPluginAria2.c:641 msgid "aria2: gid was removed." msgstr "aria2: gid o‘chirilgan edi." #: ../../po/../uget/UgetPluginMedia.c:489 msgid "Failed to get media link." msgstr "" #: ../../po/../uget/UgetPluginMedia.c:505 msgid "No matched media." msgstr "" #: ../../po/../ui-gtk/UgtkAboutDialog.c:46 msgid "Download Manager" msgstr "Yuklab olish menejeri" #: ../../po/../ui-gtk/UgtkAboutDialog.c:48 msgid "translator-credits" msgstr "tarjima mualliflari" #: ../../po/../ui-gtk/UgtkAboutDialog.c:80 msgid "uGet Founder: " msgstr "uGet asoschisi: " #: ../../po/../ui-gtk/UgtkAboutDialog.c:81 msgid "uGet Project Manager: " msgstr "uGet loyihasi menejeri: " #: ../../po/../ui-gtk/UgtkApp-timeout.c:263 #: ../../po/../ui-gtk/UgtkTrayIcon.c:239 msgid "tasks" msgstr "ta vazifa" #: ../../po/../ui-gtk/UgtkApp-timeout.c:399 msgid "New from Clipboard" msgstr "Almashish buferidan yangi" #: ../../po/../ui-gtk/UgtkApp-timeout.c:401 ../../po/../ui-gtk/UgtkApp.c:915 msgid "New Download" msgstr "Yangi yuklab olish" #: ../../po/../ui-gtk/UgtkApp-timeout.c:425 ../../po/../ui-gtk/UgtkApp.c:1679 #: ../../po/../ui-gtk/UgtkSettingDialog.c:119 msgid "Clipboard" msgstr "Almashish buferi" #: ../../po/../ui-gtk/UgtkApp-timeout.c:427 msgid "Command line" msgstr "Buyruq qatori" #: ../../po/../ui-gtk/UgtkApp-timeout.c:780 msgid "Error Occurred" msgstr "Xatolik yuz berdi" #: ../../po/../ui-gtk/UgtkApp-timeout.c:781 msgid "Error Occurred during downloading." msgstr "Yuklab olinayotganda xatolik yuz berdi." #: ../../po/../ui-gtk/UgtkApp-timeout.c:782 msgid "Download Starting" msgstr "Yuklab olish boshlanmoqda" #: ../../po/../ui-gtk/UgtkApp-timeout.c:783 msgid "Starting download queue." msgstr "Yuklash navbati boshlanmoqda" #: ../../po/../ui-gtk/UgtkApp-timeout.c:784 msgid "Download Completed" msgstr "Yuklab olish tugadi" #: ../../po/../ui-gtk/UgtkApp-timeout.c:785 msgid "All queuing downloads have been completed." msgstr "Barcha navbatga qo‘shilgan yuklab olishlar tugadi." #. ---------------------------------------------------- #. frame for Status (start mode) #: ../../po/../ui-gtk/UgtkApp-ui.c:193 #: ../../po/../ui-gtk/UgtkDownloadForm.c:224 #: ../../po/../ui-gtk/UgtkNodeView.c:1040 msgid "Status" msgstr "Holati" #. Summary Items - Category #. Download Columns - Category #: ../../po/../ui-gtk/UgtkApp-ui.c:195 ../../po/../ui-gtk/UgtkMenubar-ui.c:318 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:346 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:431 #: ../../po/../ui-gtk/UgtkNodeDialog.c:418 #: ../../po/../ui-gtk/UgtkNodeView.c:932 #: ../../po/../ui-gtk/UgtkNodeView.c:1020 ../../po/../ui-gtk/UgtkSummary.c:131 msgid "Category" msgstr "Turkum" #: ../../po/../ui-gtk/UgtkApp-ui.c:279 msgid "Create new download" msgstr "Yangi yuklab olish yaratish" #. New Download (accelerators) #. gtk_menu_shell_append ((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() ); #. New Download #: ../../po/../ui-gtk/UgtkApp-ui.c:289 ../../po/../ui-gtk/UgtkMenubar-ui.c:58 #: ../../po/../ui-gtk/UgtkTrayIcon.c:59 msgid "New _Download..." msgstr "Yangi _yuklanish..." #. New Category #: ../../po/../ui-gtk/UgtkApp-ui.c:300 ../../po/../ui-gtk/UgtkMenubar-ui.c:69 msgid "New _Category..." msgstr "Yangi _turkum..." #. New Clipboard batch #: ../../po/../ui-gtk/UgtkApp-ui.c:310 ../../po/../ui-gtk/UgtkTrayIcon.c:70 msgid "New Clipboard _batch..." msgstr "Yangi almashish buferi _paketi..." #. New URL Sequence batch #: ../../po/../ui-gtk/UgtkApp-ui.c:321 msgid "New _URL Sequence batch..." msgstr "Yangi _URL davomiylik paketi..." #. New Torrent #. separator #. gtk_menu_shell_append ((GtkMenuShell*)submenu, #. gtk_separator_menu_item_new() ); #. New Torrent #: ../../po/../ui-gtk/UgtkApp-ui.c:335 ../../po/../ui-gtk/UgtkMenubar-ui.c:81 #: ../../po/../ui-gtk/UgtkTrayIcon.c:83 msgid "New Torrent..." msgstr "Yangi torrent..." #. New Metalink #: ../../po/../ui-gtk/UgtkApp-ui.c:342 ../../po/../ui-gtk/UgtkMenubar-ui.c:87 #: ../../po/../ui-gtk/UgtkTrayIcon.c:90 msgid "New Metalink..." msgstr "Yangi metahavola..." #: ../../po/../ui-gtk/UgtkApp-ui.c:356 msgid "Save all settings" msgstr "Barcha sozlamalarni saqlash" #: ../../po/../ui-gtk/UgtkApp-ui.c:369 msgid "Set selected download runnable" msgstr "Tanlangan yuklab olishni vaqtincha davom etadigan qilish" #: ../../po/../ui-gtk/UgtkApp-ui.c:379 msgid "Set selected download to pause" msgstr "Tanlangan yuklab olishni vaqtincha to‘xatsa bo‘ladigan qilish" #: ../../po/../ui-gtk/UgtkApp-ui.c:389 msgid "Set selected download properties" msgstr "Tanlangan yuklab olish xossalarini o‘rnatish" #: ../../po/../ui-gtk/UgtkApp-ui.c:402 msgid "Move selected download up" msgstr "Tanlangan yuklab olishni yuqoriga o‘tkazish" #: ../../po/../ui-gtk/UgtkApp-ui.c:412 msgid "Move selected download down" msgstr "Tanlangan yuklab olishni pastga o‘tkazish" #: ../../po/../ui-gtk/UgtkApp-ui.c:422 msgid "Move selected download to top" msgstr "Tanlangan yuklab olishni eng yuqoriga o‘tkazish" #: ../../po/../ui-gtk/UgtkApp-ui.c:432 msgid "Move selected download to bottom" msgstr "Tanlangan yuklab olishni eng pastga o‘tkazish" #: ../../po/../ui-gtk/UgtkApp.c:883 msgid "New Category" msgstr "Yangi turkum" #: ../../po/../ui-gtk/UgtkApp.c:894 msgid "Copy - " msgstr "Nusxa olish - " #: ../../po/../ui-gtk/UgtkApp.c:1049 msgid "Category Properties" msgstr "Turkum xossalari" #: ../../po/../ui-gtk/UgtkApp.c:1063 msgid "Download Properties" msgstr "Yuklab olish xossalari" #: ../../po/../ui-gtk/UgtkApp.c:1296 msgid "New Torrent" msgstr "Yangi Torrent" #: ../../po/../ui-gtk/UgtkApp.c:1312 msgid "New Metalink" msgstr "Yangi metahavola" #: ../../po/../ui-gtk/UgtkApp.c:1321 msgid "Open Torrent file" msgstr "Torrent faylini ochish" #: ../../po/../ui-gtk/UgtkApp.c:1324 msgid "Torrent file (*.torrent)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1337 msgid "Open Metalink file" msgstr "Metahavola faylini ochish" #: ../../po/../ui-gtk/UgtkApp.c:1377 msgid "Failed to save category file." msgstr "Turkum faylini saqlab bo‘lmadi." #: ../../po/../ui-gtk/UgtkApp.c:1397 msgid "Failed to load category file." msgstr "Turkum faylini yuklash amalga oshmadi." #: ../../po/../ui-gtk/UgtkApp.c:1408 msgid "Save Category file" msgstr "Turkum faylini saqlash" #: ../../po/../ui-gtk/UgtkApp.c:1426 msgid "Open Category file" msgstr "Turkum faylini ochish" #: ../../po/../ui-gtk/UgtkApp.c:1429 msgid "JSON file (*.json)" msgstr "" #. add link #: ../../po/../ui-gtk/UgtkApp.c:1485 msgid "Link " msgstr "Havola: " #. add image #: ../../po/../ui-gtk/UgtkApp.c:1490 msgid "Image " msgstr "Rasm: " #: ../../po/../ui-gtk/UgtkApp.c:1535 msgid "Text File" msgstr "Matn fayli" #: ../../po/../ui-gtk/UgtkApp.c:1582 msgid "Import URLs from HTML file" msgstr "URL manzillarni HTML faylidan import qilish" #: ../../po/../ui-gtk/UgtkApp.c:1585 msgid "HTML file (*.htm, *.html)" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1597 msgid "Import URLs from text file" msgstr "URL manzillarni matn faylidan import qilish" #: ../../po/../ui-gtk/UgtkApp.c:1600 msgid "Plain text file" msgstr "" #: ../../po/../ui-gtk/UgtkApp.c:1612 msgid "Export URLs to text file" msgstr "URL manzillarni matn fayliga eksport qilish" #: ../../po/../ui-gtk/UgtkApp.c:1631 msgid "URL Sequence batch" msgstr "URL davomiyligi to‘plami" #: ../../po/../ui-gtk/UgtkApp.c:1658 msgid "No URLs found in clipboard." msgstr "Vaqtinchalik xotirada URL manzillar topilmadi." #: ../../po/../ui-gtk/UgtkApp.c:1667 msgid "All URLs had existed." msgstr "Barcha URL manzillar mavjud." #: ../../po/../ui-gtk/UgtkApp.c:1672 msgid "Clipboard batch" msgstr "Almashish buferi paketi" #: ../../po/../ui-gtk/UgtkApp.c:1762 msgid "New" msgstr "Yangi" #: ../../po/../ui-gtk/UgtkApp.c:1803 ../../po/../ui-gtk/UgtkMenubar.c:460 #: ../../po/../ui-gtk/UgtkMenubar.c:492 ../../po/../ui-gtk/UgtkNodeView.c:640 msgid "Error" msgstr "Xato" #: ../../po/../ui-gtk/UgtkApp.c:1811 ../../po/../ui-gtk/UgtkSummary.c:176 msgid "Message" msgstr "Xabar" #: ../../po/../ui-gtk/UgtkApp.c:1927 #, c-format msgid "Selected %d items" msgstr "%d ta element tanlandi" #: ../../po/../ui-gtk/UgtkBanner.c:145 ../../po/../ui-gtk/UgtkBanner.c:165 msgid "Attention uGetters:" msgstr "uGetters’ga diqqat qiling:" #: ../../po/../ui-gtk/UgtkBanner.c:148 msgid "" "we are running a Donation Drive for uGet's Future Development, please click " msgstr "uGet dasturini kelajakda rivojlantirish uchun xayriya loyihasini ishga tushirdik. Yordam berish uchun " #: ../../po/../ui-gtk/UgtkBanner.c:151 msgid "HERE" msgstr "BU YERGA BOSING!" #: ../../po/../ui-gtk/UgtkBanner.c:168 msgid "please fill out this quick User Survey for uGet." msgstr "uGet uchun tezkor foydalanuvchi so‘rovnomasini to‘ldirib bering, iltimos." #: ../../po/../ui-gtk/UgtkBanner.c:171 msgid "click here to take survey" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:62 msgid "Category _name:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_active), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:82 msgid "Active _downloads:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_finished), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:92 msgid "Capacity of Finished:" msgstr "" #. gtk_entry_set_width_chars (GTK_ENTRY(cform->spin_recycled), 5); #: ../../po/../ui-gtk/UgtkCategoryForm.c:102 msgid "Capacity of Recycled:" msgstr "" #. ------------------------------------------------------------------------ #. URI Matching conditions #: ../../po/../ui-gtk/UgtkCategoryForm.c:111 msgid "URI Matching conditions" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:118 msgid "Matched _Hosts:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:129 msgid "Matched _Schemes:" msgstr "" #: ../../po/../ui-gtk/UgtkCategoryForm.c:140 msgid "Matched _Types:" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:64 msgid "Really Quit?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:65 msgid "Are you sure you want to quit?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:69 msgid "Really delete files?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:70 msgid "Are you sure you want to delete files?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:74 msgid "Really delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:75 msgid "Are you sure you want to delete category?" msgstr "" #: ../../po/../ui-gtk/UgtkConfirmDialog.c:109 msgid "Don't ask me again" msgstr "Yana soÊ»ralmasin" #. URL - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:111 #: ../../po/../ui-gtk/UgtkSequence.c:63 msgid "_URI:" msgstr "_URI:" #. Mirrors - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:130 msgid "Mirrors:" msgstr "Oynalar:" #. File - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:146 #: ../../po/../ui-gtk/UgtkProxyForm.c:393 msgid "File:" msgstr "Fayl:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:166 #: ../../po/../ui-gtk/UgtkDownloadForm.c:897 msgid "Select Folder" msgstr "Jildni tanlash" #. Folder - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:174 msgid "_Folder:" msgstr "_Jild:" #. Referrer - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:189 msgid "Referrer:" msgstr "" #. "Max Connections:" - title label #: ../../po/../ui-gtk/UgtkDownloadForm.c:212 msgid "_Max Connections:" msgstr "_Maksimal ulanishlar:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:230 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:574 msgid "_Runnable" msgstr "_Yangilanadigan" #: ../../po/../ui-gtk/UgtkDownloadForm.c:232 msgid "P_ause" msgstr "P_auza" #. ---------------------------------------------------- #. frame for login #: ../../po/../ui-gtk/UgtkDownloadForm.c:238 msgid "Login" msgstr "Kirish" #. User - label #. user label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:252 #: ../../po/../ui-gtk/UgtkProxyForm.c:149 msgid "User:" msgstr "Foydalanuvchi:" #. Password - label #. password label & entry #: ../../po/../ui-gtk/UgtkDownloadForm.c:268 #: ../../po/../ui-gtk/UgtkProxyForm.c:160 msgid "Password:" msgstr "Parol:" #. label - cookie file #: ../../po/../ui-gtk/UgtkDownloadForm.c:293 msgid "Cookie file:" msgstr "Kuki fayli:" #: ../../po/../ui-gtk/UgtkDownloadForm.c:310 #: ../../po/../ui-gtk/UgtkDownloadForm.c:953 msgid "Select Cookie File" msgstr "Kuki faylini tanlash" #. label - post file #: ../../po/../ui-gtk/UgtkDownloadForm.c:319 msgid "Post file:" msgstr "Post fayli" #: ../../po/../ui-gtk/UgtkDownloadForm.c:336 #: ../../po/../ui-gtk/UgtkDownloadForm.c:1009 msgid "Select Post File" msgstr "Post faylini tanlash" #. label - user agent #: ../../po/../ui-gtk/UgtkDownloadForm.c:346 msgid "User Agent:" msgstr "Foydalanuvchi agent" #. Retry limit - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:362 msgid "Retry _limit:" msgstr "_Qayta urinish cheklovi:" #. counts - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:377 msgid "counts" msgstr "miqdori" #. Retry delay - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:384 msgid "Retry _delay:" msgstr "Qayta urinish _orasi:" #. seconds - label #: ../../po/../ui-gtk/UgtkDownloadForm.c:399 msgid "seconds" msgstr "soniya" #. label - Max upload speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:406 msgid "Max upload speed:" msgstr "Maksimal yuklash tezligi:" #. label - "KiB/s" #: ../../po/../ui-gtk/UgtkDownloadForm.c:418 #: ../../po/../ui-gtk/UgtkDownloadForm.c:436 #: ../../po/../ui-gtk/UgtkSettingForm.c:311 #: ../../po/../ui-gtk/UgtkSettingForm.c:323 #: ../../po/../ui-gtk/UgtkSettingForm.c:612 #: ../../po/../ui-gtk/UgtkSettingForm.c:624 msgid "KiB/s" msgstr "KiB/s" #. label - Max download speed #: ../../po/../ui-gtk/UgtkDownloadForm.c:424 msgid "Max download speed:" msgstr "Maksimal yuklab olish tezligi:" #. Retrieve timestamp #: ../../po/../ui-gtk/UgtkDownloadForm.c:442 msgid "Retrieve timestamp" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:51 msgid "_File" msgstr "_Fayl" #. Batch Downloads --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:94 msgid "_Batch Downloads" msgstr "" #. Batch downloads - Clipboard batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:100 msgid "_Clipboard batch..." msgstr "" #. Batch downloads - URL Sequence batch #: ../../po/../ui-gtk/UgtkMenubar-ui.c:110 msgid "_URL Sequence batch..." msgstr "" #. Batch downloads - Text file import (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:120 msgid "_Text file import (.txt)..." msgstr "" #. Batch downloads - HTML file import (.html) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:130 msgid "_HTML file import (.html)..." msgstr "_HTML faylni (.html) import qilish..." #. Batch downloads - Export to Text file (.txt) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:142 msgid "_Export to Text file (.txt)..." msgstr "Matn fayilga (.txt) eksport qilish..." #. Open Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:156 msgid "_Open category..." msgstr "Turkumni _ochish..." #. Save Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:167 msgid "_Save category as..." msgstr "Turkumni _saqlash..." #. Save All #: ../../po/../ui-gtk/UgtkMenubar-ui.c:178 msgid "Save _all settings" msgstr "_Barcha sozlamalarni saqlash" #. Offline mode #: ../../po/../ui-gtk/UgtkMenubar-ui.c:192 msgid "Offline Mode" msgstr "Oflayn rejimi" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:210 msgid "_Edit" msgstr "&Tahrirlash" #. menu.gtk_menu_shell_append((GtkMenuShell*)menu, gtk_tearoff_menu_item_new() #. ); #. Settings shortcut #: ../../po/../ui-gtk/UgtkMenubar-ui.c:215 #: ../../po/../ui-gtk/UgtkTrayIcon.c:99 msgid "Clipboard _Monitor" msgstr "Vaqtinchqlik xotirani _nazorat qilish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:219 #: ../../po/../ui-gtk/UgtkTrayIcon.c:103 msgid "Clipboard works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:107 msgid "Command-line works quietly" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:227 #: ../../po/../ui-gtk/UgtkTrayIcon.c:111 msgid "Skip existing URI" msgstr "" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:231 #: ../../po/../ui-gtk/UgtkSettingForm.c:223 #: ../../po/../ui-gtk/UgtkTrayIcon.c:115 msgid "Apply recent download settings" msgstr "" #. --- Completion Auto-Actions --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:238 msgid "Completion _Auto-Actions" msgstr "Tugaganda keyingi amallar" #. Completion Auto-Actions - Disable #: ../../po/../ui-gtk/UgtkMenubar-ui.c:244 msgid "_Disable" msgstr "_O‘chirib qo‘yish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:249 msgid "Hibernate" msgstr "Uyquga ketish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:254 msgid "Suspend" msgstr "To‘xtatib turish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:259 msgid "Shutdown" msgstr "Tizimni o‘chirish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:264 msgid "Reboot" msgstr "Qayta ishga tushirish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:269 msgid "Custom" msgstr "Boshqa" #. Completion Auto-Actions - Remember #: ../../po/../ui-gtk/UgtkMenubar-ui.c:275 msgid "Remember setting" msgstr "Sozlamasi eslab qolish" #. Completion Auto-Actions - Help #: ../../po/../ui-gtk/UgtkMenubar-ui.c:279 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:682 msgid "_Help" msgstr "_Yordam" #. --- Completion Auto-Actions --- end --- #. menu_item = gtk_menu_item_new_with_mnemonic (_("_Settings...")); #. Settings #: ../../po/../ui-gtk/UgtkMenubar-ui.c:285 #: ../../po/../ui-gtk/UgtkTrayIcon.c:122 msgid "_Settings..." msgstr "_Sozlamalar..." #: ../../po/../ui-gtk/UgtkMenubar-ui.c:304 msgid "_View" msgstr "_Ko‘rinishi" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:308 msgid "_Toolbar" msgstr "_Asboblar paneli" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:313 msgid "Statusbar" msgstr "Holat paneli" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:323 msgid "_Summary" msgstr "_Natija" #. Summary Items --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:331 msgid "Summary _Items" msgstr "_Elementlar natijasi" #. Summary Items - Name #: ../../po/../ui-gtk/UgtkMenubar-ui.c:336 msgid "_Name" msgstr "_Nomi" #. Summary Items - Folder #: ../../po/../ui-gtk/UgtkMenubar-ui.c:341 msgid "_Folder" msgstr "_Jild" #. Summary Items - Elapsed #. menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Elapsed")); #. gtk_check_menu_item_set_active ((GtkCheckMenuItem*) menu_item, TRUE); #. gtk_menu_shell_append ((GtkMenuShell*) submenu, menu_item); #. menubar->view.summary_items.elapsed = menu_item; #. Summary Items - URL #. Download Columns - URL #: ../../po/../ui-gtk/UgtkMenubar-ui.c:356 #: ../../po/../ui-gtk/UgtkMenubar-ui.c:436 msgid "_URL" msgstr "_URL" #. Summary Items - Message #: ../../po/../ui-gtk/UgtkMenubar-ui.c:361 msgid "_Message" msgstr "_Xabar" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:376 msgid "Download _Columns" msgstr "Yuklab olish _ustunlari" #. Download Columns - Complete #: ../../po/../ui-gtk/UgtkMenubar-ui.c:381 msgid "_Complete" msgstr "_Tugatish" #. Download Columns - Total #: ../../po/../ui-gtk/UgtkMenubar-ui.c:386 msgid "_Size" msgstr "_Hajmi" #. Download Columns - Percent (%) #: ../../po/../ui-gtk/UgtkMenubar-ui.c:391 msgid "_Percent '%'" msgstr "_Foiz '%'" #. Download Columns - Elapsed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:396 msgid "_Elapsed" msgstr "_Sarflangan vaqt" #. Download Columns - Left #: ../../po/../ui-gtk/UgtkMenubar-ui.c:401 msgid "_Left" msgstr "_Qolgan vaqt" #. Download Columns - Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:406 #: ../../po/../ui-gtk/UgtkNodeView.c:861 msgid "Speed" msgstr "Tezlik" #. Download Columns - Up Speed #: ../../po/../ui-gtk/UgtkMenubar-ui.c:411 #: ../../po/../ui-gtk/UgtkNodeView.c:875 msgid "Up Speed" msgstr "Tezlikni oshirish" #. Download Columns - Uploaded #: ../../po/../ui-gtk/UgtkMenubar-ui.c:416 #: ../../po/../ui-gtk/UgtkNodeView.c:889 msgid "Uploaded" msgstr "Yuklandi" #. Download Columns - Ratio #: ../../po/../ui-gtk/UgtkMenubar-ui.c:421 #: ../../po/../ui-gtk/UgtkNodeView.c:903 msgid "Ratio" msgstr "Nisbat" #. Download Columns - Retry #: ../../po/../ui-gtk/UgtkMenubar-ui.c:426 msgid "_Retry" msgstr "_Qayta urinish" #. Download Columns - Added On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:441 #: ../../po/../ui-gtk/UgtkNodeView.c:960 msgid "Added On" msgstr "Qo‘shilgan" #. Download Columns - Completed On #: ../../po/../ui-gtk/UgtkMenubar-ui.c:446 #: ../../po/../ui-gtk/UgtkNodeView.c:974 msgid "Completed On" msgstr "Tugallangan" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:461 msgid "_Category" msgstr "_Turkum" #. New Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:466 msgid "_New Category..." msgstr "_Yangi turkum..." #. Delete Category #: ../../po/../ui-gtk/UgtkMenubar-ui.c:476 msgid "_Delete Category" msgstr "_Turkumni o‘chirish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:517 msgid "_Download" msgstr "_Yuklab olish" #. menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, #. accel_group); #: ../../po/../ui-gtk/UgtkMenubar-ui.c:529 msgid "_Delete Entry" msgstr "_Kiritilganni o‘chirish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:540 msgid "Delete Entry and _File" msgstr "Kiritilgan va _Faylni o‘chirish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:555 msgid "Open _Containing folder" msgstr "_Saqlangan jildni ochish" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:568 msgid "Force Start" msgstr "Majburiy boshlash" #. Move to --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:596 msgid "_Move To" msgstr "_Ko‘chirish" #. Priority --- start --- #: ../../po/../ui-gtk/UgtkMenubar-ui.c:645 msgid "Priority" msgstr "Muhimligi" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:654 msgid "_High" msgstr "_Yuqori" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:659 msgid "_Normal" msgstr "_O‘rtacha" #: ../../po/../ui-gtk/UgtkMenubar-ui.c:664 msgid "_Low" msgstr "_Past" #. Get Help Online #: ../../po/../ui-gtk/UgtkMenubar-ui.c:687 msgid "Get Help Online" msgstr "Onlayn yordam olish" #. Documentation #: ../../po/../ui-gtk/UgtkMenubar-ui.c:698 msgid "Documentation" msgstr "Qo‘llanma" #. Support Forum #: ../../po/../ui-gtk/UgtkMenubar-ui.c:709 msgid "Support Forum" msgstr "Yordam forumi" #. Submit Feedback #: ../../po/../ui-gtk/UgtkMenubar-ui.c:720 msgid "Submit Feedback" msgstr "Fikr bildirish" #. Report a Bug #: ../../po/../ui-gtk/UgtkMenubar-ui.c:731 msgid "Report a Bug" msgstr "Nosozlik haqida xabar berish" #. Keyboard Shortcuts #: ../../po/../ui-gtk/UgtkMenubar-ui.c:742 msgid "Keyboard Shortcuts" msgstr "Tugmalar birikmasi" #. Check for Updates #: ../../po/../ui-gtk/UgtkMenubar-ui.c:749 msgid "Check for Updates" msgstr "Yangilanishlar uchun tekshirish" #: ../../po/../ui-gtk/UgtkMenubar.c:187 msgid "Settings" msgstr "Sozlamalar" #: ../../po/../ui-gtk/UgtkMenubar.c:454 #, c-format msgid "Can't launch default application for file '%s'." msgstr "'%s' fayli uchun standart ilova dastur ishga tushmadi." #: ../../po/../ui-gtk/UgtkMenubar.c:486 #, c-format msgid "'%s' - This folder does not exist." msgstr "'%s' - Ushbu jild mavjud emas." #. title #: ../../po/../ui-gtk/UgtkNodeDialog.c:219 #: ../../po/../ui-gtk/UgtkNodeDialog.c:223 msgid "URI had existed" msgstr "Bunday URI mavjud" #: ../../po/../ui-gtk/UgtkNodeDialog.c:221 msgid "This URI had existed, are you sure to continue?" msgstr "Ushbu URI mavjud. Davom etishni xohlaysizmi?" #: ../../po/../ui-gtk/UgtkNodeDialog.c:359 msgid "General" msgstr "Umumiy" #: ../../po/../ui-gtk/UgtkNodeDialog.c:361 msgid "Advanced" msgstr "Qo‘shimcha" #: ../../po/../ui-gtk/UgtkNodeDialog.c:370 msgid "Category settings" msgstr "Turkum sozlamalari" #: ../../po/../ui-gtk/UgtkNodeDialog.c:372 msgid "Default for new download 1" msgstr "1-yangi yuklab olish uchun standart" #: ../../po/../ui-gtk/UgtkNodeDialog.c:374 msgid "Default 2" msgstr "Standart 2" #: ../../po/../ui-gtk/UgtkNodeView.c:143 ../../po/../ui-gtk/UgtkNodeView.c:608 #: ../../po/../ui-gtk/UgtkSummary.c:107 msgid "unnamed" msgstr "nomsiz" #: ../../po/../ui-gtk/UgtkNodeView.c:641 msgid "Paused" msgstr "Vaqtincha to‘xtatildi" #: ../../po/../ui-gtk/UgtkNodeView.c:642 msgid "Uploading" msgstr "Saytga yuklanmoqda" #: ../../po/../ui-gtk/UgtkNodeView.c:643 msgid "Completed" msgstr "Tugadi" #: ../../po/../ui-gtk/UgtkNodeView.c:645 msgid "Recycled" msgstr "Chiqindiga tashlangan" #: ../../po/../ui-gtk/UgtkNodeView.c:646 msgid "Queuing" msgstr "Navbatda" #: ../../po/../ui-gtk/UgtkNodeView.c:647 msgid "Active" msgstr "Faol" #: ../../po/../ui-gtk/UgtkNodeView.c:668 msgid "All Status" msgstr "Barcha holat" #: ../../po/../ui-gtk/UgtkNodeView.c:773 #: ../../po/../ui-gtk/UgtkSettingDialog.c:101 #: ../../po/../ui-gtk/UgtkSummary.c:100 msgid "Name" msgstr "Nomi" #: ../../po/../ui-gtk/UgtkNodeView.c:790 msgid "Complete" msgstr "Tugatish" #: ../../po/../ui-gtk/UgtkNodeView.c:804 msgid "Size" msgstr "Hajmi" #: ../../po/../ui-gtk/UgtkNodeView.c:819 msgid "%" msgstr "%" #: ../../po/../ui-gtk/UgtkNodeView.c:833 msgid "Elapsed" msgstr "O‘tgan vaqt" #: ../../po/../ui-gtk/UgtkNodeView.c:847 msgid "Left" msgstr "Qolgan vaqt" #: ../../po/../ui-gtk/UgtkNodeView.c:946 #: ../../po/../ui-gtk/UgtkSettingForm.c:584 #: ../../po/../ui-gtk/UgtkSummary.c:143 msgid "URI" msgstr "URI" #: ../../po/../ui-gtk/UgtkNodeView.c:997 msgid "Quantity" msgstr "Miqdori" #. proxy type label & combo box #: ../../po/../ui-gtk/UgtkProxyForm.c:64 msgid "Proxy:" msgstr "Proksi:" #: ../../po/../ui-gtk/UgtkProxyForm.c:67 msgid "Don't use" msgstr "Foydalanmang" #: ../../po/../ui-gtk/UgtkProxyForm.c:69 msgid "Default" msgstr "Standart" #. host label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:121 msgid "Host:" msgstr "Host:" #. port label & entry #: ../../po/../ui-gtk/UgtkProxyForm.c:132 msgid "Port:" msgstr "Port:" #: ../../po/../ui-gtk/UgtkProxyForm.c:359 msgid "Socket:" msgstr "Sokket:" #: ../../po/../ui-gtk/UgtkProxyForm.c:369 msgid "Socket args:" msgstr "Sokket argumentlari:" #: ../../po/../ui-gtk/UgtkProxyForm.c:379 msgid "Element:" msgstr "Element:" #: ../../po/../ui-gtk/UgtkScheduleForm.c:57 msgid "Mon" msgstr "Dush" #: ../../po/../ui-gtk/UgtkScheduleForm.c:58 msgid "Tue" msgstr "Sesh" #: ../../po/../ui-gtk/UgtkScheduleForm.c:59 msgid "Wed" msgstr "Chor" #: ../../po/../ui-gtk/UgtkScheduleForm.c:60 msgid "Thu" msgstr "Pay" #: ../../po/../ui-gtk/UgtkScheduleForm.c:61 msgid "Fri" msgstr "Jum" #: ../../po/../ui-gtk/UgtkScheduleForm.c:62 msgid "Sat" msgstr "Shan" #: ../../po/../ui-gtk/UgtkScheduleForm.c:63 msgid "Sun" msgstr "Yak" #: ../../po/../ui-gtk/UgtkScheduleForm.c:104 msgid "_Enable Scheduler" msgstr "Rejalashtirgichni _yoqish" #. Turn off - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:154 msgid "Turn off" msgstr "O‘chirish" #. Turn off - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:159 msgid "- stop all task" msgstr "- barcha vazifalarni to‘xtatish" #. Normal - label #: ../../po/../ui-gtk/UgtkScheduleForm.c:169 msgid "Normal" msgstr "O‘rtacha" #. Normal - help label #: ../../po/../ui-gtk/UgtkScheduleForm.c:174 msgid "- run task normally" msgstr "- vazifani o‘rtacha bajarish" #: ../../po/../ui-gtk/UgtkSelector.c:254 msgid "All" msgstr "Barchasi" #: ../../po/../ui-gtk/UgtkSelector.c:259 msgid "None" msgstr "Yo‘q" #: ../../po/../ui-gtk/UgtkSelector.c:276 msgid "Mark by filter" msgstr "Filter bo‘yicha belgilash" #: ../../po/../ui-gtk/UgtkSelector.c:294 msgid "Mark URLs by host AND filename extension." msgstr "URL manzillarni host va fayl nomi kengaytmasi bo‘yicha belgilash" #: ../../po/../ui-gtk/UgtkSelector.c:297 msgid "This will reset all marks of URLs." msgstr "U barcha URL belgilashlarni tiklaydi." #. filter view ----------------------- #. left side #: ../../po/../ui-gtk/UgtkSelector.c:305 msgid "Host" msgstr "Host" #. right side (filename extension) #: ../../po/../ui-gtk/UgtkSelector.c:309 msgid "File Ext." msgstr "Fayl keng." #: ../../po/../ui-gtk/UgtkSelector.c:449 msgid "URL" msgstr "URL" #: ../../po/../ui-gtk/UgtkSelector.c:781 msgid "Base hypertext reference" msgstr "" #. select all #: ../../po/../ui-gtk/UgtkSelector.c:797 msgid "Mark _All" msgstr "_Barchasini belgilash" #. select none #: ../../po/../ui-gtk/UgtkSelector.c:801 msgid "Mark _None" msgstr "_Yo‘q deb belgilash" #. select by filter #: ../../po/../ui-gtk/UgtkSelector.c:805 msgid "_Mark by filter..." msgstr "" #. e.g. #: ../../po/../ui-gtk/UgtkSequence.c:74 msgid "e.g." msgstr "mas-n:" #. ------------------------------------------------------- #. radio "From" #: ../../po/../ui-gtk/UgtkSequence.c:85 msgid "_From:" msgstr "" #. label "To" #: ../../po/../ui-gtk/UgtkSequence.c:108 msgid "To:" msgstr "" #. label "digits" #: ../../po/../ui-gtk/UgtkSequence.c:123 msgid "digits:" msgstr "raqamlar:" #: ../../po/../ui-gtk/UgtkSequence.c:132 msgid "F_rom:" msgstr "" #. label case-sensitive #: ../../po/../ui-gtk/UgtkSequence.c:162 msgid "case-sensitive" msgstr "katta-kichik harflarni farqlash" #: ../../po/../ui-gtk/UgtkSequence.c:188 msgid "No wildcard(*) character in URL entry." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:192 msgid "URL is not valid." msgstr "URL noto‘g‘ri." #: ../../po/../ui-gtk/UgtkSequence.c:196 msgid "No character in 'From' or 'To' entry." msgstr "" #: ../../po/../ui-gtk/UgtkSequence.c:311 msgid "Preview" msgstr "Ko‘rinishi" #: ../../po/../ui-gtk/UgtkSettingDialog.c:113 msgid "User Interface" msgstr "Foydalanish interfeysi" #: ../../po/../ui-gtk/UgtkSettingDialog.c:125 msgid "Bandwidth" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:131 msgid "Scheduler" msgstr "Rejalashtirgich" #: ../../po/../ui-gtk/UgtkSettingDialog.c:137 msgid "Plug-in" msgstr "Plagin" #: ../../po/../ui-gtk/UgtkSettingDialog.c:143 msgid "Media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingDialog.c:149 msgid "Others" msgstr "Boshqalar" #. Monitor button #: ../../po/../ui-gtk/UgtkSettingForm.c:61 msgid "_Enable clipboard monitor" msgstr "" #. quiet mode #: ../../po/../ui-gtk/UgtkSettingForm.c:66 msgid "_Quiet mode" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:72 #: ../../po/../ui-gtk/UgtkSettingForm.c:488 msgid "Default category index" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:84 #: ../../po/../ui-gtk/UgtkSettingForm.c:500 msgid "Adding to Nth category if no matched category." msgstr "" #. media website #: ../../po/../ui-gtk/UgtkSettingForm.c:90 msgid "_Monitor URL of media website" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:105 msgid "Monitor clipboard for specified file types:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:125 msgid "Separate the types with character '|'." msgstr "Fayl turlarini ajratish uchun '|' belgisidan foydalaning." #: ../../po/../ui-gtk/UgtkSettingForm.c:130 msgid "You can use regular expressions here." msgstr "Siz muntazam ifodalardan bu yerda foydalanishingiz mumkin." #: ../../po/../ui-gtk/UgtkSettingForm.c:176 msgid "Confirmation" msgstr "Tasdiqlash" #. Confirmation check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:182 msgid "Show confirmation dialog on exit" msgstr "Chiqishda tasdiqlash oynasini ko‘rsatish" #: ../../po/../ui-gtk/UgtkSettingForm.c:185 msgid "Confirm when deleting files" msgstr "Fayllar o‘chirilayotganda tasdiqlash" #: ../../po/../ui-gtk/UgtkSettingForm.c:191 msgid "System Tray" msgstr "Tizim nishonchasi" #. System Tray check buttons #: ../../po/../ui-gtk/UgtkSettingForm.c:197 msgid "Always show tray icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:200 msgid "Minimize to tray on startup" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:203 msgid "Close to tray on window close" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:207 msgid "Use Ubuntu's App Indicator" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:214 msgid "Enable offline mode on startup" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:217 msgid "Download starting notification" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:220 msgid "Sound when download is finished" msgstr "" #. widget = gtk_check_button_new_with_label (_("Skip existing URI from #. clipboard and command-line")); #. uiform->skip_existing = (GtkToggleButton*) widget; #. gtk_box_pack_start (vbox, widget, FALSE, FALSE, 1); #: ../../po/../ui-gtk/UgtkSettingForm.c:229 msgid "Display large icon" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:295 msgid "These will affect all plug-ins." msgstr "" #. Global speed limit #: ../../po/../ui-gtk/UgtkSettingForm.c:301 msgid "Global speed limit" msgstr "Global tezlik cheklovi" #: ../../po/../ui-gtk/UgtkSettingForm.c:309 #: ../../po/../ui-gtk/UgtkSettingForm.c:610 msgid "Max upload speed" msgstr "Maksimal yuklash tezligi" #: ../../po/../ui-gtk/UgtkSettingForm.c:321 #: ../../po/../ui-gtk/UgtkSettingForm.c:622 msgid "Max download speed" msgstr "Maksimal yuklab olish tezligi" #: ../../po/../ui-gtk/UgtkSettingForm.c:354 msgid "Completion Auto-Actions" msgstr "Tugaganda keyingi amallar" #: ../../po/../ui-gtk/UgtkSettingForm.c:362 msgid "Custom command:" msgstr "Boshqa buyruq:" #: ../../po/../ui-gtk/UgtkSettingForm.c:374 msgid "Custom command if error occured:" msgstr "Boshqa xato yuz bersa, boshqa buyruq:" #: ../../po/../ui-gtk/UgtkSettingForm.c:424 msgid "_Autosave" msgstr "_Autosaqlash" #. auto save interval label #: ../../po/../ui-gtk/UgtkSettingForm.c:435 msgid "_Interval:" msgstr "_Interval:" #. auto save interval unit label #: ../../po/../ui-gtk/UgtkSettingForm.c:446 msgid "minutes" msgstr "daqiqa" #. Commandline Settings #: ../../po/../ui-gtk/UgtkSettingForm.c:475 msgid "Commandline Settings" msgstr "Buyruqlar qatori sozlamalari" #. --quiet #: ../../po/../ui-gtk/UgtkSettingForm.c:482 msgid "Use '--quiet' by default" msgstr "Joriy holat bo‘yicha '--quiet' buyrug‘ida foydalaning" #: ../../po/../ui-gtk/UgtkSettingForm.c:554 msgid "Plug-in matching order:" msgstr "Plagin mosligi tartibi:" #: ../../po/../ui-gtk/UgtkSettingForm.c:577 msgid "Aria2 plug-in options" msgstr "Aria2 plug-in moslamalari" #: ../../po/../ui-gtk/UgtkSettingForm.c:593 msgid "RPC authorization secret token" msgstr "" #. ------------------------------------------------------------------------ #. Speed Limits #: ../../po/../ui-gtk/UgtkSettingForm.c:602 msgid "Global speed limit for aria2 only" msgstr "Faqat aria2 uchun global tezlik cheklov" #. ------------------------------------------------------------------------ #. aria2 works on local device #. launch #: ../../po/../ui-gtk/UgtkSettingForm.c:635 msgid "_Launch aria2 on startup" msgstr "aria2’ni tizim bilan birga ishga tushirish" #. shutdown #: ../../po/../ui-gtk/UgtkSettingForm.c:641 msgid "_Shutdown aria2 on exit" msgstr "aria2’dan chiqishda _o‘chirish" #. ------------------------------------------------------------------------ #. Local options #: ../../po/../ui-gtk/UgtkSettingForm.c:647 msgid "Launch aria2 on local device" msgstr "aria2’ni kompyuterda ishga tushirish" #: ../../po/../ui-gtk/UgtkSettingForm.c:656 msgid "Path" msgstr "Yo‘l" #: ../../po/../ui-gtk/UgtkSettingForm.c:674 msgid "Arguments" msgstr "Argumentlar" #. Arguments - hint #: ../../po/../ui-gtk/UgtkSettingForm.c:679 msgid "You must restart uGet after modifying it." msgstr "uGet moslangandan so‘ng qayta ishga tushirish kerak." #: ../../po/../ui-gtk/UgtkSettingForm.c:783 msgid "Media matching mode:" msgstr "" #: ../../po/../ui-gtk/UgtkSettingForm.c:801 msgid "Match conditions" msgstr "" #. Quality #: ../../po/../ui-gtk/UgtkSettingForm.c:810 msgid "Quality:" msgstr "" #. Type #: ../../po/../ui-gtk/UgtkSettingForm.c:830 msgid "Type:" msgstr "" #: ../../po/../ui-gtk/UgtkSummary.c:104 msgid "File" msgstr "Fayl" #: ../../po/../ui-gtk/UgtkSummary.c:119 msgid "Folder" msgstr "Jild" #: ../../po/../ui-gtk/UgtkSummary.c:262 msgid "Item" msgstr "Element" #: ../../po/../ui-gtk/UgtkSummary.c:267 msgid "Value" msgstr "Qiymat" #. Copy All #: ../../po/../ui-gtk/UgtkSummary.c:299 msgid "Copy _All" msgstr "_Barchasidan nusxa olish" #. Show window #: ../../po/../ui-gtk/UgtkTrayIcon.c:141 msgid "Show window" msgstr "Oynani ko‘rsatish" #. Offline mode #: ../../po/../ui-gtk/UgtkTrayIcon.c:147 msgid "_Offline Mode" msgstr "Oflayn rejimi" uget-2.2.3/install-sh0000755000175000017500000003546312676613141011431 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # $RANDOM is not portable (e.g. dash); use it when possible to # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # As "mkdir -p" follows symlinks and we work in /tmp possibly; so # create the $tmpdir first (and fail if unsuccessful) to make sure # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: uget-2.2.3/AUTHORS0000664000175000017500000000057213602733703010465 00000000000000uGet - A download manager with GUI. ============================================= Active Developer: ------------------ C.H. Huang (plushuang.tw@gmail.com) - Maintainer Project Manager: ------------------ Michael Tunnell (visuex.com) Artists: -------- Michael Tunnell - Logo Designer saf1 (linuxac.org) - Former Logo Designer Skeleton_Eel (linuxac.org) - Former Logo improver uget-2.2.3/Makefile.in0000664000175000017500000006765613602733760011505 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # intltool : add "po" in SUBDIRS VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(appsdir)" DATA = $(apps_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README ar-lib compile depcomp \ install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_INDICATOR_CFLAGS = @APP_INDICATOR_CFLAGS@ APP_INDICATOR_LIBS = @APP_INDICATOR_LIBS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_CONFIG = @CURL_CONFIG@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETCONF = @GETCONF@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LFS_CFLAGS = @LFS_CFLAGS@ LFS_LDFLAGS = @LFS_LDFLAGS@ LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@ LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBPWMD_CFLAGS = @LIBPWMD_CFLAGS@ LIBPWMD_LIBS = @LIBPWMD_LIBS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = \ uglib \ uget \ ui-gtk \ ui-gtk-1to2 \ pixmaps \ sounds \ tests \ po \ doc \ Windows EXTRA_DIST = \ uget-gtk.desktop \ .snapcraft.yaml appsdir = $(datadir)/applications apps_DATA = uget-gtk.desktop all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-appsDATA: $(apps_DATA) @$(NORMAL_INSTALL) @list='$(apps_DATA)'; test -n "$(appsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(appsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(appsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(appsdir)" || exit $$?; \ done uninstall-appsDATA: @$(NORMAL_UNINSTALL) @list='$(apps_DATA)'; test -n "$(appsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(appsdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(appsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-appsDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-appsDATA .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-appsDATA install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am uninstall-appsDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/NEWS0000664000175000017500000000000013024175375010101 00000000000000uget-2.2.3/doc/0000775000175000017500000000000013602733774010246 500000000000000uget-2.2.3/doc/uget.txt0000664000175000017500000000447413602733703011674 00000000000000 UgNode | `-- UgetNode (Root, Category, Download, File) ------------------------------------------------------------------------------- UgetNode Tree chart: Root --+-- Category1 --+-- Download1 (URI) | | | | | | | `-- Download2 (URI) | (torrent path) | | `-- Category2 --+-- Download3 (URI) | (metalink path) | | `-- Download4 (URI) ------------------------------------------------------------------------------- UgetNode Tree chart for "All Category" Real node and Fake node: Real Fake L1 Fake L2 Category0 --+ Category1 --+--> all ------+--> all active Category2 --+ +--> all queuing +--> all finished `--> all recycled ------------------------------------------------------------------------------- UgetNode Tree chart for "All Status" Real node and Fake node: Real Fake Category --+--> active +--> queuing +--> finished +--> recycled | `--> sorted ------------------------------------------------------------------------------- 1 category has 1 json file. Below is sample file. Category-Home.json { "info": { "category": {}, "common": { "name": "Home" }, "proxy": {}, "http": {}, "ftp": {} }, "children": [ { "info": { "common": { "name": "download-file1", "file": "download-file1.torrent" }, "files": { "collection" : [ { "name": "download-file1.zip", "type": 0 } ] } "proxy": {}, "http": {}, "ftp": {} }, "children": [ ] }, { "info": { "common": { "name": "download-file3", "file": "download-file3.7z" }, "proxy": {}, "http": {}, "ftp": {} }, "children": [ ] } ] } uget-2.2.3/doc/Makefile.in0000664000175000017500000003122613602733760012232 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_INDICATOR_CFLAGS = @APP_INDICATOR_CFLAGS@ APP_INDICATOR_LIBS = @APP_INDICATOR_LIBS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_CONFIG = @CURL_CONFIG@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETCONF = @GETCONF@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LFS_CFLAGS = @LFS_CFLAGS@ LFS_LDFLAGS = @LFS_LDFLAGS@ LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@ LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBPWMD_CFLAGS = @LIBPWMD_CFLAGS@ LIBPWMD_LIBS = @LIBPWMD_LIBS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ uget.txt \ folders.txt \ JSON-RPC_interface.txt \ To_build_uGet_in_MinGW.txt all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/doc/folders.txt0000664000175000017500000000173713602733703012365 00000000000000Source code folders: uglib (LGPL) This is low-level library for uget. It based on Standard C library, POSIX/Windows threads, Socket API, and libcurl. This folder has Android.mk, user can use it to build static library in Android. Add definition HAVE_GLIB if your program works with glib. uget (LGPL) This is is application core logic. (see functions defined in UgetApp.h) It contains curl and aria2 plug-in, download control, command line, and Queuing. This folder has Android.mk, user can use it to build static library in Android. Add definition HAVE_GLIB if your program works with glib. Add definition NDEBUG to disable debug code & message in plug-in. Add definition NO_RETRY_IF_CONNECT_FAILED to disable retry if connection failed. Add definition NO_URI_HASH to disable URI Hash Table (UgetHash). ui-gtk (LGPL) This is GTK+ user interface for uget. Some platform (or library) dependent code place here. ui-gtk-1to2 (LGPL) It can convert uGet for GTK+ data file from 1.10.x to 2.x uget-2.2.3/doc/To_build_uGet_in_MinGW.txt0000664000175000017500000000071713602733703015200 00000000000000To build uGet in MinGW environment # ------------ Install packages -------------- # toolchain pacman -S mingw-w64-i686-binutils mingw-w64-i686-gcc mingw-w64-i686-gdb # make and Autotools pacman -S make pkgconfig autoconf automake libtool intltool # gtk familiy pacman -S mingw-w64-i686-gtk3 # curl pacman -S mingw-w64-i686-curl # ------------ Build uGet -------------- . autogen.sh ./configure --disable-notify --disable-gstreamer _WINDOWS=1 NDEBUG=1 make uget-2.2.3/doc/JSON-RPC_interface.txt0000664000175000017500000000124513602733703014134 00000000000000uGet JSON-RPC interface uGet provides JSON-RPC over TCP (localhost:14777). --------------------------------------- Method: uget.sendCommand This method send command-line arguments to uGet. Request sample { "jsonrpc": "2.0", "method": "uget.sendCommand", "params": [ "--user=foo", "--password=bar", "http://foo.bar.idv/test.mp4" ], "id": 1 } Response sample { "jsonrpc": "2.0", "result": true, "id": 1 } --------------------------------------- Method: uget.present This method can present uGet main window in screen. Request sample { "jsonrpc": "2.0", "method": "uget.present", "id": 1 } Response sample { "jsonrpc": "2.0", "result": true, "id": 1 } uget-2.2.3/doc/Makefile.am0000664000175000017500000000014613602733703012213 00000000000000EXTRA_DIST = \ uget.txt \ folders.txt \ JSON-RPC_interface.txt \ To_build_uGet_in_MinGW.txt uget-2.2.3/INSTALL0000644000175000017500000003661012676613141010451 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command `./configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. uget-2.2.3/compile0000755000175000017500000001624512676613141011000 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: uget-2.2.3/depcomp0000755000175000017500000005601612676613141010777 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: uget-2.2.3/uget/0000775000175000017500000000000013602733773010444 500000000000000uget-2.2.3/uget/CMakeLists.txt0000664000175000017500000000206013602733704013114 00000000000000cmake_minimum_required(VERSION 3.4.1) project(uget) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNDEBUG") # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_RETRY_IF_CONNECT_FAILED") include_directories( ${CURL_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../uglib ) add_library( uget STATIC UgetSequence.c UgetRpc.c UgetOption.c UgetData.c UgetFiles.c UgetNode.c UgetNode-compare.c UgetNode-filter.c UgetTask.c UgetHash.c UgetSite.c UgetApp.c UgetEvent.c UgetPlugin.c UgetA2cf.c UgetCurl.c UgetAria2.c UgetMedia.c UgetMedia-youtube.c UgetPluginCurl.c UgetPluginAria2.c UgetPluginMedia.c UgetPluginAgent.c UgetPluginMega.c ) uget-2.2.3/uget/UgetTask.c0000664000175000017500000002604413602733704012257 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include // static function static int uget_task_dispatch1(UgetTask* task, UgetNode* node, UgetPlugin* plugin); void uget_task_init(UgetTask* task) { int count; ug_slinks_init((UgSLinks*) task, 32); for (count = 0; count < UGET_TASK_N_WATCH; count++) { task->watch[count].func = NULL; task->watch[count].data = NULL; } // current speed & speed limit task->speed.download = 0; task->speed.upload = 0; task->limit.download = 0; task->limit.upload = 0; } void uget_task_final(UgetTask* task) { uget_task_remove_all(task); // ug_slinks_final((UgSLinks*) task); ug_array_clear(task); } int uget_task_add(UgetTask* task, UgetNode* node, const UgetPluginInfo* info) { UgetRelation* relation; int dlul_int_array[2]; int temp_int_array[2]; union { UgetProgress* progress; UgetCommon* common; } temp; // UgetRelation: check exist plug-in relation = ug_info_realloc(node->info, UgetRelationInfo); if (relation->task) return FALSE; // UgetProgress: clear progress when it completed temp.progress = ug_info_get(node->info, UgetProgressInfo); if (temp.progress) { // reset progress if it's percent is 100%. if (temp.progress->percent == 100) { temp.progress->percent = 0; temp.progress->uploaded = 0; temp.progress->complete = 0; temp.progress->total = 0; } temp.progress->download_speed = 0; temp.progress->upload_speed = 0; } // UgetCommon: clear retry_count temp.common = ug_info_get(node->info, UgetCommonInfo); if (temp.common) temp.common->retry_count = 0; // create plug-in and control it relation->task = ug_malloc0(sizeof(struct UgetRelationTask)); relation->task->plugin = uget_plugin_new(info); uget_plugin_accept(relation->task->plugin, node->info); if (task->limit.download || task->limit.upload) { // backup current speed limit temp_int_array[0] = task->limit.download; temp_int_array[1] = task->limit.upload; // set speed limit for existing task dlul_int_array[0] = task->limit.download / (task->n_links + 1); dlul_int_array[1] = task->limit.upload / (task->n_links + 1); uget_task_set_speed(task, temp_int_array[0] - dlul_int_array[0], temp_int_array[1] - dlul_int_array[1]); // set speed limit for new task uget_plugin_ctrl_speed(relation->task->plugin, dlul_int_array); // restore current speed limit task->limit.download = temp_int_array[0]; task->limit.upload = temp_int_array[1]; } if (uget_plugin_start(relation->task->plugin) == FALSE) { // dispatch error message from plug-in uget_task_dispatch1(task, node, relation->task->plugin); // release plug-in uget_plugin_unref(relation->task->plugin); // free task runtime data ug_free(relation->task); relation->task = NULL; return FALSE; } ug_slinks_add((UgSLinks*) task, node); return TRUE; } int uget_task_remove(UgetTask* task, UgetNode* node) { UgSLink* prev; UgetRelation* relation; if (ug_slinks_find((UgSLinks*) task, node, &prev)) { ug_slinks_remove((UgSLinks*) task, node, prev); // UgetRelation relation = ug_info_get(node->info, UgetRelationInfo); if (relation) { // uget_plugin_post(relation->task->plugin, // uget_event_new_state(node, UGET_GROUP_QUEUING)); uget_plugin_stop(relation->task->plugin); uget_plugin_unref(relation->task->plugin); relation->group &= ~UGET_GROUP_ACTIVE; // free task runtime data ug_free(relation->task); relation->task = NULL; } return TRUE; } return FALSE; } void uget_task_remove_all(UgetTask* task) { while (task->used) uget_task_remove(task, task->used->data); } static int uget_task_dispatch1(UgetTask* task, UgetNode* node, UgetPlugin* plugin) { UgetRelation* relation; UgetEvent* event; UgetEvent* next; int active; union { int count; UgetLog* log; UgetFiles* files; } temp; active = uget_plugin_sync(plugin, node->info); // update UgetFiles temp.files = ug_info_get(node->info, UgetFilesInfo); if (temp.files) uget_files_erase_deleted(temp.files); // plug-in was paused by user (see function uget_app_pause_download) relation = ug_info_realloc(node->info, UgetRelationInfo); if (relation->group & UGET_GROUP_PAUSED) active = FALSE; // plug-in has stopped if uget_plugin_sync() return FALSE. if (active == FALSE) relation->group &= ~UGET_GROUP_ACTIVE; event = uget_plugin_pop(plugin); for (; event; event = next) { for (temp.count = 0; temp.count < UGET_TASK_N_WATCH; temp.count++) { if (task->watch[temp.count].func) { task->watch[temp.count].func(task, event, node, task->watch[temp.count].data); } } // unlink current UgetEvent next = event->next; event->next = NULL; event->prev = NULL; switch (event->type) { case UGET_EVENT_ERROR: relation->group |= UGET_GROUP_ERROR; // don't break here case UGET_EVENT_WARNING: case UGET_EVENT_NORMAL: temp.log = ug_info_realloc(node->info, UgetLogInfo); ug_list_prepend(&temp.log->messages, (UgLink*) event); break; case UGET_EVENT_START: relation->group |= UGET_GROUP_ACTIVE; uget_event_free(event); break; case UGET_EVENT_STOP: relation->group &= ~UGET_GROUP_ACTIVE; uget_event_free(event); active = FALSE; break; case UGET_EVENT_COMPLETED: relation->group |= UGET_GROUP_COMPLETED; uget_event_free(event); break; case UGET_EVENT_UPLOADING: relation->group |= UGET_GROUP_UPLOADING; uget_event_free(event); break; case UGET_EVENT_STOP_UPLOADING: relation->group &= ~UGET_GROUP_UPLOADING; uget_event_free(event); break; default: uget_event_free(event); break; } } return active; } void uget_task_dispatch(UgetTask* task) { UgSLink* link; UgetNode* node; UgetProgress* progress; UgetRelation* relation; task->speed.download = 0; task->speed.upload = 0; for (link = task->used; link; link = link->next) { node = link->data; relation = ug_info_get(node->info, UgetRelationInfo); if (uget_task_dispatch1(task, node, relation->task->plugin) == FALSE) continue; // speed progress = ug_info_get(node->info, UgetProgressInfo); if (progress) { task->speed.download += progress->download_speed; task->speed.upload += progress->upload_speed; relation->task->speed[0] = progress->download_speed; relation->task->speed[1] = progress->upload_speed; } } } void uget_task_add_watch(UgetTask* task, UgetWatchFunc func, void* data) { int count; for (count = 0; count < UGET_TASK_N_WATCH; count++) { if (task->watch[count].func) continue; task->watch[count].func = func; task->watch[count].data = data; break; } } // ---------------------------------------------------------------------------- // speed control #define SPEED_MIN 512 static void uget_task_disable_limit_index(UgetTask* task, int idx); static void uget_task_adjust_speed_index(UgetTask* task, int idx, int limit_new); void uget_task_set_speed(UgetTask* task, int dl_speed, int ul_speed) { // download task->limit.download = dl_speed; if (dl_speed == 0) uget_task_disable_limit_index(task, 0); else if (task->n_links > 0) uget_task_adjust_speed_index(task, 0, dl_speed - task->speed.download); // upload task->limit.upload = ul_speed; if (ul_speed == 0) uget_task_disable_limit_index(task, 1); else if (task->n_links > 0) uget_task_adjust_speed_index(task, 1, ul_speed - task->speed.upload); } void uget_task_adjust_speed(UgetTask* task) { if (task->n_links == 0) return; if (task->limit.download > 0) uget_task_adjust_speed_index(task, 0, task->limit.download - task->speed.download); if (task->limit.upload > 0) uget_task_adjust_speed_index(task, 1, task->limit.upload - task->speed.upload); } static void uget_task_adjust_speed_index(UgetTask* task, int idx, int remain) { UgSLink* link; UgetNode* node; UgetRelation* relation = NULL; UgetRelation* prev = NULL; int n_piece = 0; if (remain > 0) { // increase speed by priority for (link = task->used; link; link = link->next) { node = (UgetNode*) link->data; relation = ug_info_get(node->info, UgetRelationInfo); relation->task->prev = prev; prev = relation; n_piece += relation->priority + 1; } remain = remain / n_piece; for (; relation; relation = prev) { relation->task->limit[idx] = relation->task->speed[idx] + remain * (relation->priority+1); if (relation->task->limit[idx] < SPEED_MIN) relation->task->limit[idx] = SPEED_MIN; uget_plugin_ctrl_speed(relation->task->plugin, relation->task->limit); prev = relation->task->prev; relation->task->prev = NULL; } } else { // reduce speed remain = remain / task->n_links; for (link = task->used; link; link = link->next) { node = (UgetNode*) link->data; relation = ug_info_get(node->info, UgetRelationInfo); relation->task->limit[idx] = relation->task->speed[idx] + remain; if (relation->task->limit[idx] < SPEED_MIN) relation->task->limit[idx] = SPEED_MIN; uget_plugin_ctrl_speed(relation->task->plugin, relation->task->limit); } } } static void uget_task_disable_limit_index(UgetTask* task, int idx) { UgSLink* link; UgetNode* node; UgetRelation* relation; for (link = task->used; link; link = link->next) { node = (UgetNode*) link->data; relation = ug_info_get(node->info, UgetRelationInfo); relation->task->limit[idx] = 0; uget_plugin_ctrl_speed(relation->task->plugin, relation->task->limit); } } uget-2.2.3/uget/UgetMedia.c0000664000175000017500000001367313602733704012400 00000000000000/* * * Copyright (C) 2015-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include // abs() #include #include #include // ---------------------------------------------------------------------------- // UgetMedia int uget_media_grab_youtube(UgetMedia* umedia, UgetProxy* proxy); UgetMedia* uget_media_new(const char* url, UgetSiteId site_id) { UgetMedia* umedia; umedia = ug_malloc0(sizeof(UgetMedia)); umedia->url = ug_strdup(url); if (site_id == UGET_SITE_UNKNOWN) site_id = uget_site_get_id(url); umedia->site_id = site_id; return umedia; } void uget_media_free(UgetMedia* umedia) { uget_media_clear(umedia, TRUE); ug_free(umedia); } void uget_media_clear(UgetMedia* umedia, int free_items) { if (free_items== TRUE) { ug_list_foreach((UgList*) umedia, (UgForeachFunc) uget_media_item_free, NULL); ug_list_clear((UgList*) umedia, FALSE); } ug_free(umedia->url); umedia->url = NULL; ug_free(umedia->title); umedia->title = NULL; if (umedia->event) { uget_event_free(umedia->event); umedia->event = NULL; } } int uget_media_grab_items(UgetMedia* umedia, UgetProxy* proxy) { int n_items = 0; switch (umedia->site_id) { case UGET_SITE_YOUTUBE: n_items = uget_media_grab_youtube(umedia, proxy); break; case UGET_SITE_UNKNOWN: default: break; } return n_items; } UgetMediaItem* uget_media_match(UgetMedia* umedia, UgetMediaMatchMode mode, UgetMediaQuality quality, UgetMediaType type) { UgetMediaItem* cur; UgetMediaItem* prev; UgetMediaItem* result = NULL; UgetMediaItem* result_audio = NULL; int abs_cur, abs_res; int count_cur, count_res; if (mode == UGET_MEDIA_MATCH_0) return umedia->head; for (cur = umedia->tail; cur; cur = prev) { prev = cur->prev; count_cur = 0; if (cur->quality == quality) count_cur++; if (cur->type == type) count_cur++; else if ((type & UGET_MEDIA_TYPE_DEMUX) == UGET_MEDIA_TYPE_DEMUX) { // if type has UGET_MEDIA_TYPE_DEMUX if ((type & UGET_MEDIA_TYPE_MUX) == (cur->type & UGET_MEDIA_TYPE_MUX)) count_cur++; if (cur->type & UGET_MEDIA_TYPE_AUDIO) result_audio = cur; } else if ((type & UGET_MEDIA_TYPE_MUX) == UGET_MEDIA_TYPE_MUX) { // if type has UGET_MEDIA_TYPE_MUX if ((cur->type & UGET_MEDIA_TYPE_MUX) != 0) count_cur++; } if ((mode == UGET_MEDIA_MATCH_1 && count_cur >= 1) || (mode == UGET_MEDIA_MATCH_2 && count_cur >= 2)) { // move matched items to tail of list ug_list_remove((UgList*) umedia, (UgLink*) cur); ug_list_append((UgList*) umedia, (UgLink*) cur); if (result == NULL) result = cur; } else if (mode == UGET_MEDIA_MATCH_NEAR) { if (result == NULL) { result = cur; count_res = count_cur; continue; } abs_res = abs((int)quality - result->quality); abs_cur = abs((int)quality - cur->quality); if (abs_res == abs_cur) { if (count_res < count_cur) { result = cur; count_res = count_cur; } // choose near (or less) quality media file. else if (result->quality > cur->quality) { result = cur; count_res = count_cur; } } else if (abs_res > abs_cur) { result = cur; count_res = count_cur; } } } if (mode == UGET_MEDIA_MATCH_NEAR && result) { // move matched items to tail of list ug_list_remove((UgList*) umedia, (UgLink*) result); ug_list_append((UgList*) umedia, (UgLink*) result); } if (result_audio) { for (cur = result; cur; cur = cur->next) { if ( (cur->type & UGET_MEDIA_TYPE_AUDIO) || (cur->type & UGET_MEDIA_TYPE_DEMUX) == 0) { result_audio = NULL; break; } } } if (result_audio) { ug_list_remove((UgList*) umedia, (UgLink*) result_audio); ug_list_append((UgList*) umedia, (UgLink*) result_audio); if (result == NULL) result = result_audio; } return result; } // ---------------------------------------------------------------------------- // UgetMediaItem UgetMediaItem* uget_media_item_new(UgetMedia* umedia) { UgetMediaItem* umitem; umitem = ug_malloc0(sizeof(UgetMediaItem)); umitem->self = umitem; umitem->type = UGET_MEDIA_TYPE_UNKNOWN; umitem->quality = UGET_MEDIA_QUALITY_UNKNOWN; ug_list_append((UgList*) umedia, (UgLink*) umitem); return umitem; } void uget_media_item_free(UgetMediaItem* umitem) { ug_free(umitem->url); ug_free(umitem); } uget-2.2.3/uget/UgetPluginAria2.h0000664000175000017500000001203713602733704013474 00000000000000/* * * Copyright (C) 2011-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_PLUGIN_ARIA2_H #define UGET_PLUGIN_ARIA2_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetPluginAria2 UgetPluginAria2; typedef struct UgetPluginAria2Setting UgetPluginAria2Setting; extern const UgetPluginInfo* UgetPluginAria2Info; typedef enum { UGET_PLUGIN_ARIA2_GLOBAL = UGET_PLUGIN_GLOBAL_DERIVED, UGET_PLUGIN_ARIA2_GLOBAL_URI, // set parameter = (char* ) // UGET_PLUGIN_ARIA2_GLOBAL_LOCAL, // set parameter = (intptr_t) UGET_PLUGIN_ARIA2_GLOBAL_PATH, // set parameter = (char* ) UGET_PLUGIN_ARIA2_GLOBAL_ARGUMENT, // set parameter = (char* ) UGET_PLUGIN_ARIA2_GLOBAL_TOKEN, // set parameter = (char* ) UGET_PLUGIN_ARIA2_GLOBAL_LAUNCH, // get/set parameter = (intptr_t) UGET_PLUGIN_ARIA2_GLOBAL_SHUTDOWN, // set parameter = (intptr_t) UGET_PLUGIN_ARIA2_GLOBAL_SHUTDOWN_NOW, // set parameter = (intptr_t) } UgetPluginAria2GlobalCode; typedef enum { UGET_PLUGIN_ARIA2_ERROR_NONE, UGET_PLUGIN_ARIA2_ERROR_RPC, UGET_PLUGIN_ARIA2_ERROR_LAUNCH, } UgetPluginAria2Error; /* ---------------------------------------------------------------------------- UgetPluginAria2: aria2 plug-in that derived from UgetPlugin. UgType | `--- UgetPlugin | `--- UgetPluginAria2 */ struct UgetPluginAria2 { UGET_PLUGIN_MEMBERS; /* // ------ UgType members ------ const UgetPluginInfo* info; // ------ UgetPlugin members ------ UgetEvent* messages; UgMutex mutex; int ref_count; */ // aria2.addUri, aria2.addTorrent, aria2.addMetalink UgJsonrpcObject* start_request; time_t start_time; UgUri uri_part; int uri_type; unsigned int retry_delay; // all gids and it's files UgArrayStr gids; UgetFiles* files; int files_per_gid; // aria2.tellStatus int status; int errorCode; int64_t totalLength; int64_t completedLength; int64_t uploadLength; int downloadSpeed; int uploadSpeed; // speed limit control // limit[0] = download speed limit // limit[1] = upload speed limit int limit[2]; int limit_upper[2]; uint8_t limit_changed:1; // speed limit changed by user or program // flags uint8_t synced:1; uint8_t paused:1; // paused by user or program uint8_t stopped:1; // download is stopped uint8_t restart:1; // for retry uint8_t named:1; }; // ---------------------------------------------------------------------------- struct UgetPluginAria2Setting { uint8_t launch; uint8_t shutdown; // millisecond interval between aria2.tellStatus() int polling_interval; char* uri; char* path; char* arguments; }; #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { const PluginInfo* const PluginAria2Info = (PluginInfo*) UgetPluginAria2Info; // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct PluginAria2Method : PluginMethod {}; // This one is for directly use only. You can NOT derived it. struct PluginAria2 : PluginAria2Method, UgetPluginAria2 { inline void* operator new(size_t size) { return uget_plugin_new(PluginAria2Info); } }; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_PLUGIN_ARIA2_H uget-2.2.3/uget/UgetPluginMega.h0000664000175000017500000001064313602733704013410 00000000000000/* * * Copyright (C) 2016-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_PLUGIN_MEGA_H #define UGET_PLUGIN_MEGA_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetPluginMega UgetPluginMega; extern const UgetPluginInfo* UgetPluginMegaInfo; /* ---------------------------------------------------------------------------- UgetPluginMega: It derived from UgetPluginAgent. It use libcurl to get download URL. It use curl/aria2 plug-in to download file. UgType | `--- UgetPlugin | `--- UgetPluginAgent | `--- UgetPluginMega */ struct UgetPluginMega { UGET_PLUGIN_AGENT_MEMBERS; /* // ------ UgType members ------ const UgetPluginInfo* info; // ------ UgetPlugin members ------ UgetEvent* messages; UgMutex mutex; int ref_count; // ------ UgetPluginAgent members ------ // This plug-in use other plug-in to download files, // so we need extra UgetPlugin and UgInfo. // plugin->target_info is a copy of UgInfo that store in UgetApp UgInfo* target_info; // target_plugin use target_info to download UgetPlugin* target_plugin; // speed limit control // limit[0] = download speed limit // limit[1] = upload speed limit int limit[2]; uint8_t limit_changed:1; // speed limit changed by user or program // control flags uint8_t paused:1; // paused by user or program uint8_t stopped:1; // all downloading thread are stopped */ uint8_t named:1; // change UgetCommon::name uint8_t synced:1; // used by plugin_sync() uint8_t decrypting:1; // decrypting downloaded file // These UgData store in target_info UgetFiles* target_files; UgetProxy* target_proxy; UgetCommon* target_common; UgetProgress* target_progress; // MEGA URL contains these char* id; // ID char* key; // decrypt key char* iv; // Initialization Vector // use MEGA ID to request these information char* url; // file download URL char* file; // file name // JSON parser UgJson json; UgValue value; }; #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { const PluginInfo* const PluginMegaInfo = (const PluginInfo*) UgetPluginMegaInfo; // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct PluginMegaMethod : PluginAgentMethod {}; // This one is for directly use only. You can NOT derived it. struct PluginMega : PluginMegaMethod, UgetPluginMega { inline void* operator new(size_t size) { return uget_plugin_new(PluginMegaInfo); } }; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_PLUGIN_MEGA_H uget-2.2.3/uget/UgetAria2.h0000664000175000017500000001053013602733704012311 00000000000000/* * * Copyright (C) 2011-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_ARIA2_H #define UGET_ARIA2_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetAria2 UgetAria2; typedef struct UgetAria2Thread UgetAria2Thread; typedef enum { UGET_ARIA2_ERROR_NONE, UGET_ARIA2_ERROR_RPC, UGET_ARIA2_ERROR_LAUNCH, } UGET_ARIA2_ERROR; struct UgetAria2 { int ref_count; UgMutex mutex; UgetAria2Thread* thread; // request -> global thread -> requested + responsed // // requested + responsed -+-> reuse // | | // | V // +-> recycled // // JSON objects(UgJsonrpcObject) pair UgJsonrpcArray queuing; UgJsonrpcArray recycled; // completed UgSLinks requested; UgSLinks responsed; UgMutex completed_mutex; int completed_changed; // common data for status request UgValue status_keys; unsigned int error; unsigned int batch_len; unsigned int batch_additional; unsigned int polling_interval; // boolean uint8_t connect_fail:1; uint8_t speed_required:1; uint8_t limit_required:1; uint8_t launched:1; uint8_t shutdown:1; uint8_t uri_changed:1; uint8_t uri_remote:1; char* uri; char* path; char* args; char* token; // --rpc-secret= struct { int download; int upload; } speed, limit; // speed limit counter int limit_count_prev; int limit_count; }; UgetAria2* uget_aria2_new (void); void uget_aria2_ref (UgetAria2* ua2); void uget_aria2_unref (UgetAria2* ua2); void uget_aria2_start_thread (UgetAria2* uaria2); void uget_aria2_stop_thread (UgetAria2* uaria2); void uget_aria2_set_uri (UgetAria2* uaria2, const char* uri); void uget_aria2_set_path (UgetAria2* uaria2, const char* path); void uget_aria2_set_args (UgetAria2* uaria2, const char* args); void uget_aria2_set_token (UgetAria2* uaria2, const char* token); void uget_aria2_set_speed (UgetAria2* uaria2, int dl_speed, int ul_speed); int uget_aria2_launch (UgetAria2* aria2); void uget_aria2_shutdown (UgetAria2* aria2); // If you want to get response, set request->id.type = UG_VALUE_INT // If you don't need response, set request->id.type = UG_VALUE_NONE UgJsonrpcObject* uget_aria2_alloc (UgetAria2* aria2, int is_request, int has_response); void uget_aria2_request (UgetAria2* aria2, UgJsonrpcObject* request); UgJsonrpcObject* uget_aria2_respond (UgetAria2* aria2, UgJsonrpcObject* request); void uget_aria2_recycle (UgetAria2* aria2, UgJsonrpcObject* jobject); UgValue* uget_aria2_clear_token (UgJsonrpcObject* jobject); #ifdef __cplusplus } #endif // __cplusplus #endif // End of UGET_ARIA2_H uget-2.2.3/uget/UgetPluginAria2.c0000664000175000017500000012301413602733704013465 00000000000000/* * * Copyright (C) 2011-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include #include #include #include #include #include #include #include #include #ifdef HAVE_LIBPWMD #include "pwmd.h" static gboolean uget_plugin_aria2_set_proxy_pwmd (UgetPluginAria2 *plugin, UgInfo* info, UgValue* options); #endif #if defined _WIN32 || defined _WIN64 #include // Sleep() #define ug_sleep Sleep #else #include // sleep(), usleep() #define ug_sleep(millisecond) usleep (millisecond * 1000) #endif // _WIN32 || _WIN64 #ifdef HAVE_GLIB #include #undef printf #else #define N_(x) x #define _(x) x #endif static UgJsonrpcObject* alloc_speed_request(UgetPluginAria2* plugin); static void recycle_speed_request(UgJsonrpcObject* object); static UgJsonrpcObject* alloc_status_request(UgValue** gid); static void recycle_status_request(UgJsonrpcObject* object); static void* ug_file_to_base64(const char* file, int* length); static int decide_file_type(UgetPluginAria2* plugin); static void add_uri_mirrors(UgValue* varray, const char* mirrors); enum UgetPluginAria2UriType { URI_UNSUPPORTED, URI_NET, URI_MAGNET, // magnet: URI_TORRENT, URI_METALINK, }; typedef enum Aria2Status { ARIA2_STATUS_ACTIVE, ARIA2_STATUS_WAITING, // used by Aria2Uri.status and Aria2Telled.status ARIA2_STATUS_PAUSED, ARIA2_STATUS_ERROR, ARIA2_STATUS_COMPLETE, ARIA2_STATUS_REMOVED, ARIA2_STATUS_USED, // used by Aria2Uri.status ARIA2_N_STATUS, } Aria2Status; // ---------------------------------------------------------------------------- // UgetPluginInfo (derived from UgTypeInfo) static void plugin_init (UgetPluginAria2* plugin); static void plugin_final(UgetPluginAria2* plugin); static int plugin_ctrl (UgetPluginAria2* plugin, int code, void* data); static int plugin_accept(UgetPluginAria2* plugin, UgInfo* node_info); static int plugin_sync (UgetPluginAria2* plugin, UgInfo* node_info); static UgetResult global_set(int code, void* parameter); static UgetResult global_get(int code, void* parameter); static const char* schemes[] = {"http", "https", "ftp", "magnet", NULL}; static const char* types[] = {"torrent", "metalink", "meta4", NULL}; static const UgetPluginInfo UgetPluginAria2InfoStatic = { "aria2", sizeof(UgetPluginAria2), (UgInitFunc) plugin_init, (UgFinalFunc) plugin_final, (UgetPluginSyncFunc) plugin_accept, (UgetPluginSyncFunc) plugin_sync, (UgetPluginCtrlFunc) plugin_ctrl, NULL, schemes, types, (UgetPluginGlobalFunc) global_set, (UgetPluginGlobalFunc) global_get }; // extern const UgetPluginInfo* UgetPluginAria2Info = &UgetPluginAria2InfoStatic; // ---------------------------------------------------------------------------- // global data and it's functions. static struct { UgetAria2* data; int ref_count; } global = {NULL, 0}; static UgetResult global_init(void) { if (global.data == NULL) { global.data = uget_aria2_new(); uget_aria2_start_thread(global.data); } global.ref_count++; return UGET_RESULT_OK; } static void global_ref(void) { global.ref_count++; } static void global_unref(void) { if (global.data == NULL) return; global.ref_count--; if (global.ref_count == 0) { if (global.data->shutdown) uget_aria2_shutdown(global.data); uget_aria2_stop_thread(global.data); uget_aria2_unref(global.data); global.data = NULL; } } static UgetResult global_set(int option, void* parameter) { UgetPluginAria2Setting* setting; switch (option) { case UGET_PLUGIN_GLOBAL_INIT: // do global initialize/uninitialize here if (parameter) return global_init(); else global_unref(); break; case UGET_PLUGIN_GLOBAL_SPEED_LIMIT: if (global.data) { uget_aria2_set_speed(global.data, ((int*)parameter)[0], ((int*)parameter)[1]); } break; case UGET_PLUGIN_ARIA2_GLOBAL_URI: if (parameter) uget_aria2_set_uri(global.data, (char*) parameter); break; case UGET_PLUGIN_ARIA2_GLOBAL_PATH: uget_aria2_set_path(global.data, (char*) parameter); break; case UGET_PLUGIN_ARIA2_GLOBAL_ARGUMENT: uget_aria2_set_args(global.data, (char*) parameter); break; case UGET_PLUGIN_ARIA2_GLOBAL_TOKEN: uget_aria2_set_token(global.data, (char*) parameter); break; case UGET_PLUGIN_ARIA2_GLOBAL_LAUNCH: if (parameter != NULL) if (uget_aria2_launch(global.data) == FALSE) return UGET_RESULT_ERROR; break; case UGET_PLUGIN_ARIA2_GLOBAL_SHUTDOWN: if (parameter) global.data->shutdown = TRUE; else global.data->shutdown = FALSE; break; case UGET_PLUGIN_ARIA2_GLOBAL_SHUTDOWN_NOW: if (parameter && global.data) uget_aria2_shutdown(global.data); break; case UGET_PLUGIN_GLOBAL_SETTING: setting = parameter; global.data->polling_interval = setting->polling_interval; global.data->shutdown = setting->shutdown; uget_aria2_set_uri (global.data, setting->uri); uget_aria2_set_path(global.data, setting->path); uget_aria2_set_args(global.data, setting->arguments); if (setting->launch) uget_aria2_launch(global.data); break; default: return UGET_RESULT_UNSUPPORT; } return UGET_RESULT_OK; } static UgetResult global_get(int option, void* parameter) { switch (option) { case UGET_PLUGIN_GLOBAL_INIT: if (parameter) *(int*)parameter = global.data ? TRUE : FALSE; break; case UGET_PLUGIN_GLOBAL_ERROR_CODE: if (parameter) *(int*)parameter = global.data->error; break; case UGET_PLUGIN_ARIA2_GLOBAL_LAUNCH: if (parameter) *(int*)parameter = global.data->launched; break; default: return UGET_RESULT_UNSUPPORT; } return UGET_RESULT_OK; } // ---------------------------------------------------------------------------- // control functions static const char* error_string[] = { NULL, // 1 - 10 N_("aria2: an unknown error occurred."), N_("aria2: time out occurred."), N_("aria2: resource was not found."), N_("aria2 saw the specified number of 'resource not found' error. See --max-file-not-found option"), N_("aria2: speed was too slow."), N_("aria2: network problem occurred."), N_("aria2: unfinished downloads."), N_("Not Resumable"), // _("Not Resumable"), N_("Out of resource"), // _(), N_("aria2: piece length was different from one in .aria2 control file."), // 11 - 20 N_("aria2 was downloading same file."), N_("aria2 was downloading same info hash torrent."), N_("aria2: file already existed. See --allow-overwrite option."), N_("Output file can't be renamed."), // _("Output file can't be renamed."), N_("aria2: could not open existing file."), N_("aria2: could not create new file or truncate existing file."), N_("aria2: file I/O error occurred."), N_("Folder can't be created."), // UGET_EVENT_ERROR_FOLDER_CREATE_FAILED N_("aria2: name resolution failed."), N_("aria2: could not parse Metalink document."), // 21 - 30 N_("aria2: FTP command failed."), N_("aria2: HTTP response header was bad or unexpected."), N_("Too many redirections."), N_("aria2: HTTP authorization failed."), N_("aria2: could not parse bencoded file(usually .torrent file)."), N_("aria2: torrent file was corrupted or missing information."), N_("aria2: Magnet URI was bad."), N_("aria2: bad/unrecognized option was given or unexpected option argument was given."), N_("aria2: remote server was unable to handle the request."), N_("aria2: could not parse JSON-RPC request."), }; static const char* aria2_no_response = N_("No response. Is aria2 shutdown?"); static void plugin_init(UgetPluginAria2* plugin) { if (global.data == NULL) global_init(); else global_ref(); ug_array_init(&plugin->gids, sizeof(char*), 16); plugin->stopped = TRUE; plugin->paused = TRUE; plugin->synced = TRUE; } static void plugin_final(UgetPluginAria2* plugin) { ug_array_foreach_str(&plugin->gids, (UgForeachFunc) ug_free, NULL); ug_array_clear(&plugin->gids); // clear UgetFiles if (plugin->files) ug_data_free(plugin->files); // clear and recycle start_request object if (plugin->start_request) { ug_value_foreach(&plugin->start_request->params, ug_value_set_name, NULL); uget_aria2_recycle(global.data, plugin->start_request); } global_unref(); } // ---------------------------------------------------------------------------- // plugin_ctrl static int plugin_ctrl_speed(UgetPluginAria2* plugin, int* speed); static int plugin_start(UgetPluginAria2* plugin); static int plugin_ctrl(UgetPluginAria2* plugin, int code, void* data) { switch (code) { case UGET_PLUGIN_CTRL_START: if (plugin->start_request) return plugin_start(plugin); break; case UGET_PLUGIN_CTRL_STOP: plugin->paused = TRUE; return TRUE; case UGET_PLUGIN_CTRL_SPEED: // speed control return plugin_ctrl_speed(plugin, data); // state ---------------- case UGET_PLUGIN_GET_STATE: *(int*)data = (plugin->stopped) ? FALSE : TRUE; return TRUE; default: break; } return FALSE; } static int plugin_ctrl_speed(UgetPluginAria2* plugin, int* speed) { int value; // notify plug-in that speed limit has been changed if (plugin->limit[0] != speed[0] || plugin->limit[1] != speed[1]) plugin->limit_changed = TRUE; // decide speed limit by user specified data. value = speed[0]; if (plugin->limit_upper[0] > 0) { if (value > plugin->limit_upper[0] || value == 0) { value = plugin->limit_upper[0]; plugin->limit_changed = TRUE; } } plugin->limit[0] = value; value = speed[1]; if (plugin->limit_upper[1] > 0) { if (value > plugin->limit_upper[1] || value == 0) { value = plugin->limit_upper[1]; plugin->limit_changed = TRUE; } } plugin->limit[1] = value; return plugin->limit_changed; } // ---------------------------------------------------------------------------- // plugin_sync // return FALSE if plug-in was stopped. static int plugin_sync(UgetPluginAria2* plugin, UgInfo* node_info) { int index; UgetEvent* event; UgetFiles* files; UgetFile* file1; struct { UgetCommon* common; UgetProgress* progress; } temp; if (plugin->stopped) { if (plugin->synced) return FALSE; plugin->synced = TRUE; } else if (plugin->synced == TRUE) // maybe thread is accessing plugin->gids return TRUE; // avoid crash if plug-in failed to start. if (plugin->start_request == NULL) return FALSE; // sync data between plug-in and foreign UgData // ------------------------------------------------ // update progress temp.progress = ug_info_realloc(node_info, UgetProgressInfo); temp.progress->complete = plugin->completedLength; temp.progress->total = plugin->totalLength; temp.progress->download_speed = plugin->downloadSpeed; temp.progress->upload_speed = plugin->uploadSpeed; temp.progress->uploaded = plugin->uploadLength; temp.progress->elapsed = time(NULL) - plugin->start_time; // ratio if (temp.progress->uploaded && temp.progress->complete) temp.progress->ratio = (double)temp.progress->uploaded / (double)temp.progress->complete; else temp.progress->ratio = 0.0; // If total size is unknown, don't calculate percent. if (temp.progress->total) temp.progress->percent = (int) (temp.progress->complete * 100 / temp.progress->total); else temp.progress->percent = 0; // If total size and average speed is unknown, don't calculate remain time. if (temp.progress->download_speed > 0 && temp.progress->total > 0) temp.progress->left = (temp.progress->total - temp.progress->complete) / temp.progress->download_speed; temp.common = ug_info_realloc(node_info, UgetCommonInfo); // ------------------------------------------------ // sync changed limit from foreign UgInfo if (plugin->limit_upper[1] != temp.common->max_upload_speed || plugin->limit_upper[0] != temp.common->max_download_speed) { // speed control plugin->limit_upper[1] = temp.common->max_upload_speed; plugin->limit_upper[0] = temp.common->max_download_speed; plugin_ctrl_speed(plugin, plugin->limit_upper); } // update UgetFiles files = ug_info_realloc(node_info, UgetFilesInfo); uget_plugin_lock(plugin); uget_files_sync(files, plugin->files); uget_plugin_unlock(plugin); // change name. if (files->list.size > 0 && plugin->named == FALSE && plugin->files_per_gid > 0) { plugin->named = TRUE; if (plugin->uri_type == URI_NET && temp.common->file == NULL) { uget_plugin_lock(plugin); file1 = (UgetFile*) plugin->files->list.head; ug_uri_init(&plugin->uri_part, file1->path); uget_plugin_unlock(plugin); index = plugin->uri_part.file; if (index != -1) { ug_free(temp.common->name); temp.common->name = ug_uri_get_file(&plugin->uri_part); event = uget_event_new(UGET_EVENT_NAME); uget_plugin_post((UgetPlugin*) plugin, event); #ifndef NDEBUG // debug if (temp.common->debug_level) printf("base name = %s\n", temp.common->name); #endif } } } switch (plugin->status) { case ARIA2_STATUS_ACTIVE: if (plugin->completedLength > 0 && plugin->completedLength == plugin->totalLength) { event = uget_event_new(UGET_EVENT_UPLOADING); uget_plugin_post((UgetPlugin*) plugin, event); } break; case ARIA2_STATUS_WAITING: // clear uploading state event = uget_event_new(UGET_EVENT_STOP_UPLOADING); uget_plugin_post((UgetPlugin*) plugin, event); break; case ARIA2_STATUS_COMPLETE: // clear uploading state event = uget_event_new(UGET_EVENT_STOP_UPLOADING); uget_plugin_post((UgetPlugin*) plugin, event); // remove completed gid if (plugin->gids.length > 0) { ug_free(plugin->gids.at[0]); ug_array_erase(&plugin->gids, 0, 1); } // If there is only one followed gid and file, change uri. if (plugin->gids.length == 1 && plugin->files_per_gid == 1) { // If URI scheme is not "magnet" and aria2 runs in local device if (global.data->uri_remote == FALSE && plugin->uri_type != URI_MAGNET) { // change URI ug_free(temp.common->uri); ug_free(temp.common->name); ug_free(temp.common->file); file1 = (UgetFile*) plugin->files->list.head; temp.common->uri = ug_strdup(file1->path); temp.common->name = uget_name_from_uri_str(temp.common->uri); temp.common->file = NULL; #ifndef NDEBUG // debug if (temp.common->debug_level) printf("uri followed to %s\n", temp.common->uri); #endif } } // If no followed gid, it was completed. else if (plugin->gids.length == 0) { event = uget_event_new(UGET_EVENT_COMPLETED); uget_plugin_post((UgetPlugin*)plugin, event); } // clear files uget_plugin_lock(plugin); uget_files_clear(plugin->files); uget_plugin_unlock(plugin); plugin->files_per_gid = 0; break; case ARIA2_STATUS_ERROR: // clear uploading state event = uget_event_new(UGET_EVENT_STOP_UPLOADING); uget_plugin_post((UgetPlugin*) plugin, event); #ifdef NO_RETRY_IF_CONNECT_FAILED // download speed was too slow if (plugin->errorCode == 5) { #else // download speed was too slow or name resolution failed if (plugin->errorCode == 5 || plugin->errorCode == 19) { #endif // retry if (temp.common->retry_count < temp.common->retry_limit || temp.common->retry_limit == 0) { temp.common->retry_count++; plugin->restart = TRUE; #ifndef NDEBUG // debug if (temp.common->debug_level) printf("retry %d\n", temp.common->retry_count); #endif } else { event = uget_event_new_error( UGET_EVENT_ERROR_TOO_MANY_RETRIES, NULL); uget_plugin_post((UgetPlugin*) plugin, event); } } else { if (plugin->errorCode > 30) plugin->errorCode = 1; // if this is last gid. if (plugin->gids.length == 1) { #ifdef HAVE_GLIB event = uget_event_new_error(0, gettext(error_string[plugin->errorCode])); #else event = uget_event_new_error(0, error_string[plugin->errorCode]); #endif uget_plugin_post((UgetPlugin*)plugin, event); } } // remove stopped gid ug_free(plugin->gids.at[0]); plugin->gids.length -= 1; memmove(plugin->gids.at, plugin->gids.at + 1, sizeof(char*) * plugin->gids.length); break; case ARIA2_STATUS_REMOVED: // clear uploading state event = uget_event_new(UGET_EVENT_STOP_UPLOADING); uget_plugin_post((UgetPlugin*) plugin, event); // debug event = uget_event_new_normal(0, _("aria2: gid was removed.")); uget_plugin_post((UgetPlugin*)plugin, event); // remove completed gid ug_free(plugin->gids.at[0]); plugin->gids.length -= 1; memmove(plugin->gids.at, plugin->gids.at + 1, sizeof(char*) * plugin->gids.length); break; } // If we have followed gid, don't restart. if (plugin->gids.length > 0) plugin->restart = FALSE; else { #ifndef NDEBUG // debug if (temp.common->debug_level) printf("gids.length = %d\n", plugin->gids.length); #endif // If no followed gid and no need to retry, it must stop. if (plugin->restart == FALSE) plugin->paused = TRUE; } // if plug-in was stopped, don't sync data with thread if (plugin->stopped == FALSE) plugin->synced = TRUE; return TRUE; } // ---------------------------------------------------------------------------- // plugin_thread static void add_gids_by_value_array(UgArrayStr* gids, UgValueArray* varray) { UgValue* value; int index; #ifndef NDEBUG // debug printf("add %d gids\n", varray->length); #endif for (index = 0; index < varray->length; index++) { value = varray->at + index; *(char**) ug_array_alloc(gids, 1) = value->c.string; value->c.string = NULL; value->type = UG_VALUE_NONE; } } static int send_start_request(UgetPluginAria2* plugin) { UgJsonrpcObject* res; uget_aria2_request(global.data, plugin->start_request); res = uget_aria2_respond(global.data, plugin->start_request); if (res == NULL) { #ifdef HAVE_GLIB uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(0, gettext(aria2_no_response))); #else uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(0, aria2_no_response)); #endif return FALSE; } if (res->error.code) { uget_plugin_post((UgetPlugin*)plugin, uget_event_new_error(0, res->error.message)); uget_aria2_recycle(global.data, res); return FALSE; } // add gid from response if (plugin->uri_type == URI_METALINK) add_gids_by_value_array(&plugin->gids, res->result.c.array); else { *(char**) ug_array_alloc(&plugin->gids, 1) = ug_strdup(res->result.c.string); } // recycle response uget_aria2_recycle(global.data, res); return TRUE; } static int plugin_delay(UgetPluginAria2* plugin) { unsigned int count; for (count = 0; count < plugin->retry_delay; count++) { if (plugin->paused) return FALSE; // sleep 1 second every time ug_sleep(1000); } return TRUE; } static UgThreadResult plugin_thread(UgetPluginAria2* plugin) { UgJsonrpcObject* req; UgJsonrpcObject* res; UgJsonrpcObject* status_req; UgValue* status_gid; UgValue* value; UgValue* member; int count; // create status_req and initialize status_gid status_req = alloc_status_request(&status_gid); // send start_request to server plugin->restart = FALSE; if (send_start_request(plugin) == FALSE) goto exit; while (plugin->paused == FALSE) { // retry if (plugin->restart == TRUE) { if (plugin_delay(plugin) == FALSE) continue; #ifndef NDEBUG // debug printf("retry\n"); #endif // send start_request to server again plugin->restart = FALSE; if (send_start_request(plugin) == FALSE) goto exit; } // Don't update status until user call plugin_sync() if (plugin->synced == FALSE) { // sleep 0.5 second ug_sleep(500); continue; } // set gid for status request // status_req->params.c.array->at[0].c.string = plugin->gids.at[0]; status_gid->c.string = plugin->gids.at[0]; // status request uget_aria2_request(global.data, status_req); // speed control : speed request & response if (plugin->limit_changed) { plugin->limit_changed = FALSE; // request & response req = alloc_speed_request(plugin); uget_aria2_request(global.data, req); res = uget_aria2_respond(global.data, req); // recycle uget_aria2_recycle(global.data, res); recycle_speed_request(req); } // status respond res = uget_aria2_respond(global.data, status_req); if (res == NULL) { #ifdef HAVE_GLIB uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(0, gettext(aria2_no_response))); #else uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(0, aria2_no_response)); #endif goto exit; } if (res->error.code) { uget_plugin_post((UgetPlugin*)plugin, uget_event_new_error(0, res->error.message)); uget_aria2_recycle(global.data, res); goto exit; } // parse status response --- start --- ug_value_sort_name(&res->result); value = ug_value_find_name(&res->result, "status"); switch (value->c.string[0]) { case 'a': plugin->status = ARIA2_STATUS_ACTIVE; break; case 'w': plugin->status = ARIA2_STATUS_WAITING; break; case 'p': plugin->status = ARIA2_STATUS_PAUSED; break; case 'e': plugin->status = ARIA2_STATUS_ERROR; break; case 'c': plugin->status = ARIA2_STATUS_COMPLETE; break; case 'r': plugin->status = ARIA2_STATUS_REMOVED; break; default: plugin->status = ARIA2_N_STATUS; break; } value = ug_value_find_name(&res->result, "errorCode"); plugin->errorCode = (value) ? ug_value_get_int(value) : 0; value = ug_value_find_name(&res->result, "totalLength"); plugin->totalLength = ug_value_get_int64(value); value = ug_value_find_name(&res->result, "completedLength"); plugin->completedLength = ug_value_get_int64(value); value = ug_value_find_name(&res->result, "uploadLength"); plugin->uploadLength = ug_value_get_int64(value); value = ug_value_find_name(&res->result, "downloadSpeed"); plugin->downloadSpeed = ug_value_get_int(value); value = ug_value_find_name(&res->result, "uploadSpeed"); plugin->uploadSpeed = ug_value_get_int(value); value = ug_value_find_name(&res->result, "followedBy"); if (value) add_gids_by_value_array(&plugin->gids, value->c.array); value = ug_value_find_name(&res->result, "files"); if (value && ug_value_length(value) != plugin->files_per_gid) { UgValueArray* array; UgetFile* ufile; char* string; array = value->c.array; plugin->files_per_gid = ug_value_length(value); for (count = 0; count < array->length; count++) { value = array->at + count; ug_value_sort_name(value); member = ug_value_find_name(value, "path"); if (member == NULL || member->c.string[0] == '\0') { plugin->files_per_gid--; continue; } uget_plugin_lock(plugin); // add .aria2 control file first if (plugin->files_per_gid == 1) { string = ug_strdup_printf("%s.aria2", member->c.string); ufile = uget_files_realloc(plugin->files, string); ufile->type = UGET_FILE_TEMPORARY; ug_free(string); } // add downloading file ufile = uget_files_realloc(plugin->files, member->c.string); member = ug_value_find_name(value, "completedLength"); ufile->complete = ug_value_get_int64(member); member = ug_value_find_name(value, "length"); ufile->total = ug_value_get_int64(member); uget_plugin_unlock(plugin); } } // parse status response --- end --- // recycle status response uget_aria2_recycle(global.data, res); // plugin_sync() will exchange data plugin->synced = FALSE; } if (plugin->gids.length) { req = uget_aria2_alloc(global.data, TRUE, TRUE); req->method_static = "aria2.remove"; // if there is no secret token in params. if (req->params.type == UG_VALUE_NONE) ug_value_init_array(&req->params, plugin->gids.length); // add gids to params. value = ug_value_alloc(&req->params, plugin->gids.length); for (count = 0; count < plugin->gids.length; count++, value++) { value->type = UG_VALUE_STRING; value->c.string = ug_strdup(plugin->gids.at[count]); } // call "aria2.remove" uget_aria2_request(global.data, req); res = uget_aria2_respond(global.data, req); #ifndef NDEBUG // debug if (res->error.code) { printf("aria2.remove() response error code = %d" "\n" " message = \"%s\"." "\n", res->error.code, res->error.message); } #endif uget_aria2_recycle(global.data, res); uget_aria2_recycle(global.data, req); } exit: recycle_status_request(status_req); plugin->stopped = TRUE; uget_plugin_unref((UgetPlugin*)plugin); return UG_THREAD_RESULT; } // ---------------------------------------------------------------------------- // plugin_accept/plugin_start static int plugin_accept(UgetPluginAria2* plugin, UgInfo* node_info) { UgJsonrpcObject* request; UgValue* value; UgValue* member; char* uri; char* str = NULL; char* user = NULL; char* password = NULL; union { UgetCommon* common; UgetFiles* files; UgetProxy* proxy; UgetHttp* http; UgetHttp* ftp; } temp; temp.common = ug_info_get(node_info, UgetCommonInfo); if (temp.common == NULL || temp.common->uri == NULL) return FALSE; uri = temp.common->uri; plugin->uri_type = URI_NET; ug_uri_init(&plugin->uri_part, uri); if ((plugin->uri_part.scheme_len == 4 && strncmp(uri, "file", 4) == 0) || (plugin->uri_part.scheme_len == 0 && plugin->uri_part.file >= 0)) { // file type is torrent or metalink? if (decide_file_type(plugin) == URI_UNSUPPORTED) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_UNSUPPORTED_FILE, NULL)); return FALSE; } // load file and convert it's binary to base64 if (plugin->uri_part.path > 0) str = ug_file_to_base64(uri + plugin->uri_part.path + 1, NULL); else str = ug_file_to_base64(uri, NULL); if (str == NULL) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_FILE_OPEN_FAILED, NULL)); return FALSE; } } else if (plugin->uri_part.scheme_len == 6 && strncmp(uri, "magnet", 6) == 0) plugin->uri_type = URI_MAGNET; request = uget_aria2_alloc(global.data, TRUE, TRUE); if (request->params.type == UG_VALUE_NONE) ug_value_init_array(&request->params, 3); switch (plugin->uri_type) { case URI_NET: case URI_MAGNET: request->method_static = "aria2.addUri"; // parameter1 : URIs value = ug_value_alloc(&request->params, 1); ug_value_init_array(value, 8); member = ug_value_alloc(value, 1); member->type = UG_VALUE_STRING; member->c.string = ug_strdup(uri); // mirrors add_uri_mirrors(value, temp.common->mirrors); // parameter2 : options break; case URI_TORRENT: request->method_static = "aria2.addTorrent"; // parameter1 : encoded torrent file value = ug_value_alloc(&request->params, 1); value->type = UG_VALUE_STRING; value->c.string = str; // parameter2 : URIs value = ug_value_alloc(&request->params, 1); ug_value_init_array(value, 0); // parameter3 : options break; case URI_METALINK: // parameter1 : encoded metalink file request->method_static = "aria2.addMetalink"; value = ug_value_alloc(&request->params, 1); value->type = UG_VALUE_STRING; value->c.string = str; // parameter2 : options break; } // parameterX : options value = ug_value_alloc(&request->params, 1); ug_value_init_object(value, 16); member = ug_value_alloc(value, 1); member->name = "continue"; member->type = UG_VALUE_BOOL; member->c.boolean = TRUE; if ((temp.common->user && temp.common->user[0]) || (temp.common->password && temp.common->password[0])) { user = (temp.common->user) ? temp.common->user : ""; password = (temp.common->password) ? temp.common->password : ""; } if (temp.common->folder) { member = ug_value_alloc(value, 1); member->name = "dir"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup(temp.common->folder); } if (temp.common->file) { member = ug_value_alloc(value, 1); member->name = "out"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup(temp.common->file); } member = ug_value_alloc(value, 1); member->name = "remote-time"; member->type = UG_VALUE_BOOL; member->c.boolean = temp.common->timestamp; member = ug_value_alloc(value, 1); member->name = "retry-wait"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup_printf("%u", temp.common->retry_delay); member = ug_value_alloc(value, 1); member->name = "max-tries"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup_printf("%u", temp.common->retry_limit); // speed control: decide speed limit before starting plug-in plugin->limit_upper[1] = temp.common->max_upload_speed; plugin->limit_upper[0] = temp.common->max_download_speed; plugin_ctrl_speed(plugin, plugin->limit); member = ug_value_alloc(value, 1); member->name = "max-download-limit"; member->type = UG_VALUE_STRING; // member->c.string = ug_strdup_printf("%d", temp.common->max_download_speed); member->c.string = ug_strdup_printf("%d", plugin->limit[0]); member = ug_value_alloc(value, 1); member->name = "max-upload-limit"; member->type = UG_VALUE_STRING; // member->c.string = ug_strdup_printf("%d", temp.common->max_upload_speed); member->c.string = ug_strdup_printf("%d", plugin->limit[1]); member = ug_value_alloc(value, 1); member->name = "lowest-speed-limit"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup_printf("%u", 128); // Don't set connection limit if max_connections is 0. if (temp.common->max_connections != 0) { // aria2 doesn't accept "max-connection-per-server" large than 16. member = ug_value_alloc(value, 1); member->name = "max-connection-per-server"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup_printf("%u", (temp.common->max_connections <= 16) ? temp.common->max_connections : 16); // split member = ug_value_alloc(value, 1); member->name = "split"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup_printf("%u", temp.common->max_connections); } temp.files = ug_info_get(node_info, UgetFilesInfo); if (temp.files) plugin->files = ug_data_copy(temp.files); else plugin->files = ug_data_new(UgetFilesInfo); temp.proxy = ug_info_get(node_info, UgetProxyInfo); #ifdef HAVE_LIBPWMD if (temp.proxy && temp.proxy->type == UGET_PROXY_PWMD) { if (uget_plugin_aria2_set_proxy_pwmd(plugin, node_info, member) == FALSE) return FALSE; } else #endif if (temp.proxy && temp.proxy->host) { member = ug_value_alloc(value, 1); member->name = "all-proxy"; member->type = UG_VALUE_STRING; if (temp.proxy->port == 0) member->c.string = ug_strdup(temp.proxy->host); else { member->c.string = ug_strdup_printf("%s:%d", temp.proxy->host, temp.proxy->port); } if ((temp.proxy->user && temp.proxy->user[0]) || (temp.proxy->password && temp.proxy->password[0])) { member = ug_value_alloc(value, 1); member->name = "all-proxy-user"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup( (temp.proxy->user) ? temp.proxy->user : ""); member = ug_value_alloc(value, 1); member->name = "all-proxy-password"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup( (temp.proxy->password) ? temp.proxy->password : ""); } } temp.http = ug_info_get(node_info, UgetHttpInfo); if (temp.http) { if (plugin->uri_part.scheme_len >= 4 && strncmp(uri, "http", 4) == 0) { if ((temp.http->user && temp.http->user[0]) || (temp.http->password && temp.http->password[0])) { user = (temp.http->user) ? temp.http->user : ""; password = (temp.http->password) ? temp.http->password : ""; } } if (temp.http->referrer) { member = ug_value_alloc(value, 1); member->name = "referer"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup(temp.http->referrer); } // if (temp.http->cookie_file) { // member = ug_value_alloc(value, 1); // member->name = "load-cookies"; // member->type = UG_VALUE_STRING; // member->c.string = ug_strdup(temp.http->cookie_file); // } if (temp.http->user_agent) { member = ug_value_alloc(value, 1); member->name = "user-agent"; member->type = UG_VALUE_STRING; member->c.string = ug_strdup(temp.http->user_agent); } } temp.ftp = ug_info_get(node_info, UgetFtpInfo); if (temp.ftp) { if (plugin->uri_part.scheme_len >= 3 && strncmp(uri, "ftp", 3) == 0) { if ((temp.ftp->user && temp.ftp->user[0]) || (temp.ftp->password && temp.ftp->password[0])) { user = (temp.ftp->user) ? temp.ftp->user : ""; password = (temp.ftp->password) ? temp.ftp->password : ""; } } } if (plugin->uri_type == URI_NET && plugin->uri_part.host != -1) { if (user || password) { str = ug_malloc(strlen(user) + strlen(password) + strlen(uri) + 2 + 1); // + ':' + '@' + '\0' str[plugin->uri_part.host] = 0; strncpy(str, uri, plugin->uri_part.host); strcat(str, user); strcat(str, ":"); strcat(str, password); strcat(str, "@"); strcat(str, uri + plugin->uri_part.host); // reset uri for aria2.addUri, request->params[0][0] value = request->params.c.array->at; value = value->c.array->at; ug_free(value->c.string); value->c.string = ug_strdup(str); } } plugin->files_per_gid = 0; plugin->synced = TRUE; plugin->start_time = time(NULL); plugin->start_request = request; return TRUE; } static int plugin_start(UgetPluginAria2* plugin) { UgThread thread; int ok; // try to start thread plugin->paused = FALSE; plugin->stopped = FALSE; uget_plugin_ref((UgetPlugin*) plugin); ok = ug_thread_create(&thread, (UgThreadFunc) plugin_thread, plugin); if (ok == UG_THREAD_OK) ug_thread_unjoin(&thread); else { // failed to start thread ----------------- plugin->paused = TRUE; plugin->stopped = TRUE; // post error message and decreases the reference count uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_THREAD_CREATE_FAILED, NULL)); uget_plugin_unref((UgetPlugin*) plugin); return FALSE; } return TRUE; } // ---------------------------------------------------------------------------- // JSON-RPC request // speed control static UgJsonrpcObject* alloc_speed_request(UgetPluginAria2* plugin) { UgJsonrpcObject* object; UgValue* options; UgValue* value; object = uget_aria2_alloc(global.data, TRUE, TRUE); object->method_static = "aria2.changeOption"; if (object->params.type == UG_VALUE_NONE) ug_value_init_array(&object->params, 2); // gid value = ug_value_alloc(&object->params, 1); value->type = UG_VALUE_STRING; value->c.string = plugin->gids.at[0]; // object options = ug_value_alloc(&object->params, 1); ug_value_init_object(options, 2); // max-download-limit value = ug_value_alloc(options, 1); value->name = ug_strdup("max-download-limit"); value->type = UG_VALUE_STRING; value->c.string = ug_strdup_printf("%d", plugin->limit[0]); // max-upload-limit value = ug_value_alloc(options, 1); value->name = ug_strdup("max-upload-limit"); value->type = UG_VALUE_STRING; value->c.string = ug_strdup_printf("%d", plugin->limit[1]); return object; } static void recycle_speed_request(UgJsonrpcObject* object) { UgValue* value; value = uget_aria2_clear_token(object); // params[0] is gid // value = object->params.c.array->at; value->type = UG_VALUE_NONE; value->c.array = NULL; // ready to recycle it uget_aria2_recycle(global.data, object); } static UgJsonrpcObject* alloc_status_request(UgValue** gid) { UgJsonrpcObject* object; UgValue* params; UgValue* keys; // prepare JSON-RPC object for "aria2.tellStatus" object = uget_aria2_alloc(global.data, TRUE, TRUE); object->method_static = "aria2.tellStatus"; params = &object->params; if (params->type == UG_VALUE_NONE) ug_value_init_array(params, 2); // gid gid[0] = ug_value_alloc(params, 1); gid[0]->type = UG_VALUE_STRING; gid[0]->c.string = NULL; // keys array from UgetAria2.status_keys keys = ug_value_alloc(params, 1); keys->type = UG_VALUE_ARRAY; keys->c.array = global.data->status_keys.c.array; return object; } static void recycle_status_request(UgJsonrpcObject* object) { UgValue* value; value = uget_aria2_clear_token(object); // params[0] is gid // value = object->params.c.array->at; value->type = UG_VALUE_NONE; value->c.array = NULL; // params[1] is keys of status // value = object->params.c.array->at + 1; value++; value->type = UG_VALUE_NONE; value->c.array = NULL; // ready to recycle it uget_aria2_recycle(global.data, object); } // ---------------------------------------------------------------------------- // static utility functions static void* ug_file_to_base64(const char* file, int* length) { int fd; int fsize, fpos = 0; int result_len; void* buffer; void* result; // fd = open(file, O_RDONLY | O_BINARY, S_IREAD); fd = ug_open(file, UG_O_READONLY | UG_O_BINARY, UG_S_IREAD); if (fd == -1) return NULL; // lseek(fd, 0, SEEK_END); ug_seek(fd, 0, SEEK_END); fsize = (int) ug_tell(fd); buffer = ug_malloc(fsize); // lseek(fd, 0, SEEK_SET); ug_seek(fd, 0, SEEK_SET); do { result_len = ug_read(fd, buffer, fsize - fpos); // result_len = read(fd, buffer, fsize - fpos); fpos += result_len; } while (result_len > 0); // close(fd); ug_close(fd); if (fsize != fpos) { ug_free(buffer); return NULL; } result = ug_base64_encode(buffer, fsize, &result_len); ug_free(buffer); if (length) *length = result_len; return result; } static int decide_file_type(UgetPluginAria2* plugin) { char buf[11]; union { const char* ext; int fd; int path; } temp; plugin->uri_type = URI_UNSUPPORTED; // handle URI file:/// temp.path = plugin->uri_part.path; if (temp.path > 0 && plugin->uri_part.uri[temp.path] != 0) temp.path++; // temp.fd = ug_open(plugin->uri_part.uri + temp.path, UG_O_READONLY | UG_O_BINARY, UG_S_IREAD); if (temp.fd != -1 && ug_read(temp.fd, buf, 11) == 11) { if (strncmp(buf, "d8:announce", 11) == 0) plugin->uri_type = URI_TORRENT; else { buf[10] = 0; if (strchr(buf, '<')) plugin->uri_type = URI_METALINK; } } ug_close(temp.fd); if (plugin->uri_type == URI_UNSUPPORTED && ug_uri_part_file_ext(&plugin->uri_part, &temp.ext)) { if (temp.ext[0] == 'm' || temp.ext[0] == 'M') plugin->uri_type = URI_METALINK; else if (temp.ext[0] == 't' || temp.ext[0] == 'T') plugin->uri_type = URI_TORRENT; else plugin->uri_type = URI_UNSUPPORTED; } return plugin->uri_type; } static void add_uri_mirrors(UgValue* varray, const char* mirrors) { UgValue* value; const char* curr; const char* prev; for (curr = mirrors; curr && curr[0];) { // skip space ' ' while (curr[0] == ' ') curr++; prev = curr; curr = curr + strcspn(curr, " "); value = ug_value_alloc(varray, 1); value->type = UG_VALUE_STRING; value->c.string = ug_malloc(curr - prev + 1); value->c.string[curr - prev] = 0; // NULL terminated strncpy(value->c.string, prev, curr - prev); } } // ---------------------------------------------------------------------------- // PWMD // #ifdef HAVE_LIBPWMD static gboolean uget_plugin_aria2_set_proxy_pwmd(UgetPluginAria2 *plugin, UgInfo* info, UgValue* options) { struct pwmd_proxy_s pwmd; gpg_error_t rc; UgetEvent *message; UgetProxy *proxy; memset(&pwmd, 0, sizeof(pwmd)); proxy = ug_info_get(info, UgetProxyInfo); rc = ug_set_pwmd_proxy_options(&pwmd, proxy); if (rc) goto fail; // proxy host and port // host UgValue *value = ug_value_alloc(options, 1); value->name = ug_strdup("all-proxy"); value->type = UG_VALUE_STRING; if (pwmd.port == 0) value->c.string = ug_strdup(pwmd.hostname); else { value->c.string = ug_strdup_printf("%s:%u", pwmd.hostname, pwmd.port); } // proxy user and password if (pwmd.username || pwmd.password) { // user value = ug_value_alloc(options, 1); value->name = ug_strdup("all-proxy-user"); value->type = UG_VALUE_STRING; value->c.string = ug_strdup(pwmd.username ? pwmd.username : ""); // password value = ug_value_alloc(options, 1); value->name = ug_strdup("all-proxy-password"); value->type = UG_VALUE_STRING; value->c.string = ug_strdup(pwmd.password ? pwmd.password : ""); } ug_close_pwmd(&pwmd); return TRUE; fail: ug_close_pwmd(&pwmd); gchar *e = g_strdup_printf("Pwmd ERR %i: %s", rc, gpg_strerror(rc)); message = uget_event_new_error(UGET_EVENT_ERROR_CUSTOM, e); uget_plugin_post((UgetPlugin*) plugin, message); g_free(e); return FALSE; } #endif // HAVE_LIBPWMD uget-2.2.3/uget/UgetHash.c0000664000175000017500000004033113602733704012233 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #ifdef NO_URI_HASH #else #if defined HAVE_GLIB #define ug_hash_table_destroy g_hash_table_destroy #define ug_hash_table_lookup g_hash_table_lookup #define ug_hash_table_insert g_hash_table_insert #define ug_hash_table_remove g_hash_table_remove #else // modify GHashTable from GLib #include #include #include typedef struct UgHashTable UgHashTable; typedef unsigned int (*UgHashFunc) (const void* v); UgHashTable* ug_hash_table_new (UgHashFunc hash, UgCompareFunc compare); void ug_hash_table_destroy (UgHashTable* hash_table); void* ug_hash_table_lookup (UgHashTable* hash_table, const void* key); void ug_hash_table_insert (UgHashTable* hash_table, void* key, void* value); int ug_hash_table_remove (UgHashTable* hash_table, const void* key); unsigned int ug_hash_str (const void* v); // port GHashTable to Android... struct UgHashTable { int size; int mod; unsigned int mask; int nnodes; int noccupied; // nnodes + tombstones void** keys; void** values; unsigned int* hashes; int ref_count; UgHashFunc hash_func; UgCompareFunc compare_func; UgNotifyFunc key_destroy_func; UgNotifyFunc value_destroy_func; }; // ---------------------------------------------------------------------------- #undef MAX #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #define HASH_TABLE_MIN_SHIFT 3 // 1 << 3 == 8 buckets #define UNUSED_HASH_VALUE 0 #define TOMBSTONE_HASH_VALUE 1 #define HASH_IS_UNUSED(h_) ((h_) == UNUSED_HASH_VALUE) #define HASH_IS_TOMBSTONE(h_) ((h_) == TOMBSTONE_HASH_VALUE) #define HASH_IS_REAL(h_) ((h_) >= 2) static const int prime_mod [] = { 1, /* For 1 << 0 */ 2, 3, 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381, 32749, 65521, /* For 1 << 16 */ 131071, 262139, 524287, 1048573, 2097143, 4194301, 8388593, 16777213, 33554393, 67108859, 134217689, 268435399, 536870909, 1073741789, 2147483647 /* For 1 << 31 */ }; static void ug_hash_table_set_shift (UgHashTable *hash_table, int shift) { int i; unsigned int mask = 0; hash_table->size = 1 << shift; hash_table->mod = prime_mod [shift]; for (i = 0; i < shift; i++) { mask <<= 1; mask |= 1; } hash_table->mask = mask; } static int ug_hash_table_find_closest_shift (int n) { int i; for (i = 0; n; i++) n >>= 1; return i; } static void ug_hash_table_set_shift_from_size (UgHashTable *hash_table, int size) { int shift; shift = ug_hash_table_find_closest_shift (size); shift = MAX (shift, HASH_TABLE_MIN_SHIFT); ug_hash_table_set_shift (hash_table, shift); } static unsigned int ug_hash_table_lookup_node (UgHashTable* hash_table, const void* key, unsigned int* hash_return) { unsigned int node_index; unsigned int node_hash; unsigned int hash_value; unsigned int first_tombstone = 0; int have_tombstone = FALSE; unsigned int step = 0; hash_value = hash_table->hash_func (key); if (!HASH_IS_REAL (hash_value)) hash_value = 2; *hash_return = hash_value; node_index = hash_value % hash_table->mod; node_hash = hash_table->hashes[node_index]; while (!HASH_IS_UNUSED (node_hash)) { /* We first check if our full hash values * are equal so we can avoid calling the full-blown * key equality function in most cases. */ if (node_hash == hash_value) { void* node_key = hash_table->keys[node_index]; if (hash_table->compare_func) { if (hash_table->compare_func (node_key, key) == 0) return node_index; } else if (node_key == key) { return node_index; } } else if (HASH_IS_TOMBSTONE (node_hash) && !have_tombstone) { first_tombstone = node_index; have_tombstone = TRUE; } step++; node_index += step; node_index &= hash_table->mask; node_hash = hash_table->hashes[node_index]; } if (have_tombstone) return first_tombstone; return node_index; } static void ug_hash_table_remove_node (UgHashTable* hash_table, int i, int notify) { void* key; void* value; key = hash_table->keys[i]; value = hash_table->values[i]; /* Erect tombstone */ hash_table->hashes[i] = TOMBSTONE_HASH_VALUE; /* Be GC friendly */ hash_table->keys[i] = NULL; hash_table->values[i] = NULL; hash_table->nnodes--; if (notify && hash_table->key_destroy_func) hash_table->key_destroy_func (key); if (notify && hash_table->value_destroy_func) hash_table->value_destroy_func (value); } static void ug_hash_table_remove_all_nodes (UgHashTable* hash_table, int notify) { int i; void* key; void* value; hash_table->nnodes = 0; hash_table->noccupied = 0; if (!notify || (hash_table->key_destroy_func == NULL && hash_table->value_destroy_func == NULL)) { memset (hash_table->hashes, 0, hash_table->size * sizeof (unsigned int)); memset (hash_table->keys, 0, hash_table->size * sizeof (void*)); memset (hash_table->values, 0, hash_table->size * sizeof (void*)); return; } for (i = 0; i < hash_table->size; i++) { if (HASH_IS_REAL (hash_table->hashes[i])) { key = hash_table->keys[i]; value = hash_table->values[i]; hash_table->hashes[i] = UNUSED_HASH_VALUE; hash_table->keys[i] = NULL; hash_table->values[i] = NULL; if (hash_table->key_destroy_func != NULL) hash_table->key_destroy_func (key); if (hash_table->value_destroy_func != NULL) hash_table->value_destroy_func (value); } else if (HASH_IS_TOMBSTONE (hash_table->hashes[i])) { hash_table->hashes[i] = UNUSED_HASH_VALUE; } } } static void ug_hash_table_resize (UgHashTable *hash_table) { void** new_keys; void** new_values; unsigned int* new_hashes; int old_size; int i; old_size = hash_table->size; ug_hash_table_set_shift_from_size (hash_table, hash_table->nnodes * 2); new_keys = ug_malloc0 (sizeof (void*) * hash_table->size); if (hash_table->keys == hash_table->values) new_values = new_keys; else new_values = ug_malloc0 (sizeof (void*) * hash_table->size); new_hashes = ug_malloc0 (sizeof (unsigned int) * hash_table->size); for (i = 0; i < old_size; i++) { unsigned int node_hash = hash_table->hashes[i]; unsigned int hash_val; unsigned int step = 0; if (!HASH_IS_REAL (node_hash)) continue; hash_val = node_hash % hash_table->mod; while (!HASH_IS_UNUSED (new_hashes[hash_val])) { step++; hash_val += step; hash_val &= hash_table->mask; } new_hashes[hash_val] = hash_table->hashes[i]; new_keys[hash_val] = hash_table->keys[i]; new_values[hash_val] = hash_table->values[i]; } if (hash_table->keys != hash_table->values) ug_free (hash_table->values); ug_free (hash_table->keys); ug_free (hash_table->hashes); hash_table->keys = new_keys; hash_table->values = new_values; hash_table->hashes = new_hashes; hash_table->noccupied = hash_table->nnodes; } static inline void ug_hash_table_maybe_resize (UgHashTable *hash_table) { int noccupied = hash_table->noccupied; int size = hash_table->size; if ((size > hash_table->nnodes * 4 && size > 1 << HASH_TABLE_MIN_SHIFT) || (size <= noccupied + (noccupied / 16))) ug_hash_table_resize (hash_table); } UgHashTable* ug_hash_table_new (UgHashFunc hash_func, UgCompareFunc compare_func) { UgHashTable* hash_table; hash_table = ug_malloc (sizeof (UgHashTable)); ug_hash_table_set_shift (hash_table, HASH_TABLE_MIN_SHIFT); hash_table->nnodes = 0; hash_table->noccupied = 0; hash_table->hash_func = hash_func ? hash_func : NULL; hash_table->compare_func = compare_func; hash_table->ref_count = 1; hash_table->key_destroy_func = NULL; hash_table->value_destroy_func = NULL; hash_table->keys = ug_malloc0 (sizeof (void*) * hash_table->size); hash_table->values = hash_table->keys; hash_table->hashes = ug_malloc0 (sizeof (unsigned int) * hash_table->size); return hash_table; } static void ug_hash_table_insert_node (UgHashTable* hash_table, unsigned int node_index, unsigned int key_hash, void* key, void* value, int keep_new_key, int reusing_key) { unsigned int old_hash; void* old_key; void* old_value; if (hash_table->keys == hash_table->values && key != value) { hash_table->values = ug_malloc0 (sizeof (void*) * hash_table->size); memcpy (hash_table->values, hash_table->keys, sizeof (void*) * hash_table->size); } old_hash = hash_table->hashes[node_index]; old_key = hash_table->keys[node_index]; old_value = hash_table->values[node_index]; if (HASH_IS_REAL (old_hash)) { if (keep_new_key) hash_table->keys[node_index] = key; hash_table->values[node_index] = value; } else { hash_table->keys[node_index] = key; hash_table->values[node_index] = value; hash_table->hashes[node_index] = key_hash; hash_table->nnodes++; if (HASH_IS_UNUSED (old_hash)) { /* We replaced an empty node, and not a tombstone */ hash_table->noccupied++; ug_hash_table_maybe_resize (hash_table); } } if (HASH_IS_REAL (old_hash)) { if (hash_table->key_destroy_func && !reusing_key) hash_table->key_destroy_func (keep_new_key ? old_key : key); if (hash_table->value_destroy_func) hash_table->value_destroy_func (old_value); } } void ug_hash_table_destroy (UgHashTable *hash_table) { // ug_hash_table_remove_all (hash_table); ug_hash_table_remove_all_nodes (hash_table, TRUE); ug_hash_table_maybe_resize (hash_table); // ug_hash_table_unref (hash_table); ug_hash_table_remove_all_nodes (hash_table, TRUE); if (hash_table->keys != hash_table->values) ug_free (hash_table->values); ug_free (hash_table->keys); ug_free (hash_table->hashes); ug_free (hash_table); } void* ug_hash_table_lookup (UgHashTable* hash_table, const void* key) { unsigned int node_index; unsigned int node_hash; node_index = ug_hash_table_lookup_node (hash_table, key, &node_hash); return HASH_IS_REAL (hash_table->hashes[node_index]) ? hash_table->values[node_index] : NULL; } void ug_hash_table_insert (UgHashTable *hash_table, void* key, void* value) { // g_hash_table_insert_internal (hash_table, key, value, FALSE); unsigned int key_hash; unsigned int node_index; node_index = ug_hash_table_lookup_node (hash_table, key, &key_hash); // g_hash_table_insert_node (hash_table, node_index, key_hash, key, value, keep_new_key, FALSE); ug_hash_table_insert_node (hash_table, node_index, key_hash, key, value, FALSE, FALSE); } int ug_hash_table_remove (UgHashTable* hash_table, const void* key) { // return g_hash_table_remove_internal (hash_table, key, TRUE); unsigned int node_index; unsigned int node_hash; node_index = ug_hash_table_lookup_node (hash_table, key, &node_hash); if (!HASH_IS_REAL (hash_table->hashes[node_index])) return FALSE; ug_hash_table_remove_node (hash_table, node_index, TRUE); ug_hash_table_maybe_resize (hash_table); return TRUE; } unsigned int ug_hash_str (const void* v) { const signed char *p; uint32_t h = 5381; for (p = v; *p != '\0'; p++) h = (h << 5) + h + *p; return h; } #endif // HAVE_GLIB // ---------------------------------------------------------------------------- void* uget_uri_hash_new (void) { #if defined HAVE_GLIB return g_hash_table_new_full (g_str_hash, g_str_equal, ug_free, NULL); #else UgHashTable* uuhash; uuhash = ug_hash_table_new (ug_hash_str, (UgCompareFunc) strcmp); uuhash->key_destroy_func = ug_free; return uuhash; #endif // HAVE_GLIB } void uget_uri_hash_free (void* uuhash) { if (uuhash) ug_hash_table_destroy (uuhash); } int uget_uri_hash_find (void* uuhash, const char* uri) { if (uuhash && ug_hash_table_lookup (uuhash, uri)) return TRUE; else return FALSE; } void uget_uri_hash_add (void* uuhash, const char* uri) { uintptr_t counts; if (uri) { counts = (uintptr_t) ug_hash_table_lookup (uuhash, uri); ug_hash_table_insert (uuhash, ug_strdup (uri), (void*) (++counts)); } } void uget_uri_hash_remove (void* uuhash, const char* uri) { uintptr_t counts; if (uri) { counts = (uintptr_t) ug_hash_table_lookup (uuhash, uri); if (counts > 1) ug_hash_table_insert (uuhash, ug_strdup (uri), (void*) (--counts)); else ug_hash_table_remove (uuhash, uri); } } void uget_uri_hash_add_download (void* uuhash, UgInfo* dnode_info) { UgetCommon* common; uintptr_t counts; if (uuhash == NULL) return; common = ug_info_get(dnode_info, UgetCommonInfo); if (common && common->uri) { counts = (uintptr_t) ug_hash_table_lookup (uuhash, common->uri); ug_hash_table_insert (uuhash, ug_strdup (common->uri), (void*) (++counts)); } } void uget_uri_hash_remove_download (void* uuhash, UgInfo* dnode_info) { UgetCommon* common; uintptr_t counts; if (uuhash == NULL) return; common = ug_info_get(dnode_info, UgetCommonInfo); if (common && common->uri) { counts = (uintptr_t) ug_hash_table_lookup (uuhash, common->uri); if (counts > 1) ug_hash_table_insert (uuhash, ug_strdup (common->uri), (void*) (--counts)); else ug_hash_table_remove (uuhash, common->uri); } } void uget_uri_hash_add_category (void* uuhash, UgetNode* cnode) { UgetNode* dnode; UgetCommon* common; uintptr_t counts; if (uuhash == NULL) return; for (dnode = cnode->children; dnode; dnode = dnode->next) { common = ug_info_get (dnode->info, UgetCommonInfo); if (common && common->uri) { counts = (uintptr_t) ug_hash_table_lookup (uuhash, common->uri); ug_hash_table_insert (uuhash, ug_strdup (common->uri), (void*) (++counts)); } } } void uget_uri_hash_remove_category (void* uuhash, UgetNode* cnode) { UgetNode* dnode; UgetCommon* common; uintptr_t counts; if (uuhash == NULL) return; for (dnode = cnode->children; dnode; dnode = dnode->next) { common = ug_info_get (dnode->info, UgetCommonInfo); if (common && common->uri) { counts = (uintptr_t) ug_hash_table_lookup (uuhash, common->uri); if (counts > 1) ug_hash_table_insert (uuhash, ug_strdup (common->uri), (void*) (--counts)); else ug_hash_table_remove (uuhash, common->uri); } } } #endif // NO_URI_HASH uget-2.2.3/uget/UgetData.h0000664000175000017500000002515513602733704012235 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_DATA_H #define UGET_DATA_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif // group data typedef struct UgetCommon UgetCommon; typedef struct UgetProgress UgetProgress; typedef struct UgetProxy UgetProxy; typedef struct UgetHttp UgetHttp; typedef struct UgetFtp UgetFtp; typedef struct UgetLog UgetLog; typedef struct UgetRelation UgetRelation; typedef struct UgetCategory UgetCategory; extern const UgDataInfo* UgetCommonInfo; extern const UgDataInfo* UgetProgressInfo; extern const UgDataInfo* UgetProxyInfo; extern const UgDataInfo* UgetHttpInfo; extern const UgDataInfo* UgetFtpInfo; extern const UgDataInfo* UgetLogInfo; extern const UgDataInfo* UgetRelationInfo; extern const UgDataInfo* UgetCategoryInfo; /* ---------------------------------------------------------------------------- UgetCommon: It derived from UgData and store in UgInfo. UgType | `-- UgData | `-- UgetCommon */ struct UgetCommon { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgData(UgType) member char* name; char* uri; char* mirrors; char* file; char* folder; char* user; char* password; // timeout unsigned int connect_timeout; // second unsigned int transmit_timeout; // second // retry int retry_delay; // second int retry_limit; // limit of retry_count int retry_count; unsigned int max_connections; // max connections per server int max_upload_speed; // bytes per seconds int max_download_speed; // bytes per seconds // retrieve timestamp of the remote file if it is available. int timestamp; // retrieve file timestamp // debug int debug_level; // keeping flags used by ug_data_assign () // They works like read-only struct { uint8_t enable:1; uint8_t name:1; uint8_t uri:1; uint8_t mirrors:1; uint8_t file:1; uint8_t folder:1; uint8_t user:1; uint8_t password:1; uint8_t timestamp:1; uint8_t connect_timeout:1; uint8_t transmit_timeout:1; uint8_t retry_delay:1; uint8_t retry_limit:1; uint8_t max_connections:1; uint8_t max_upload_speed:1; uint8_t max_download_speed:1; uint8_t discard_timestamp:1; uint8_t debug_level:1; } keeping; }; // helper functions for UgetCommon::name char* uget_name_from_uri(UgUri* uri); char* uget_name_from_uri_str(const char* uri); /* ---------------------------------------------------------------------------- UgetProgress: It derived from UgData and store in UgInfo. UgType | `-- UgData | `-- UgetProgress */ struct UgetProgress { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgData(UgType) member int64_t elapsed; // consume time (seconds) int64_t left; // remain time (seconds) int64_t complete; // complete size int64_t total; // total size // torrent - upload int64_t uploaded; double ratio; int upload_speed; // other int download_speed; int percent; }; /* ---------------------------------------------------------------------------- UgetProxy: It derived from UgData and store in UgInfo. UgType | `-- UgData | `-- UgetProxy */ typedef enum { UGET_PROXY_NONE, UGET_PROXY_DEFAULT, // Decided by plug-ins UGET_PROXY_HTTP, UGET_PROXY_SOCKS4, UGET_PROXY_SOCKS5, #ifdef HAVE_LIBPWMD UGET_PROXY_PWMD, #endif UGET_PROXY_N_TYPE, } UgetProxyType; struct UgetProxy { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgData(UgType) member char* host; unsigned int port; UgetProxyType type; char* user; char* password; struct { uint8_t enable:1; uint8_t host:1; uint8_t port:1; uint8_t type:1; uint8_t user:1; uint8_t password:1; } keeping; #ifdef HAVE_LIBPWMD struct UgetProxyPwmd { char* socket; char* socket_args; char* file; char* element; struct { uint8_t socket:1; uint8_t socket_args:1; uint8_t file:1; uint8_t element:1; } keeping; } pwmd; #endif // HAVE_LIBPWMD }; /* ---------------------------------------------------------------------------- UgetHttp: It derived from UgData and store in UgInfo. UgType | `-- UgData | `-- UgetHttp */ struct UgetHttp { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgData(UgType) member char* user; char* password; char* referrer; char* user_agent; char* post_data; char* post_file; char* cookie_data; char* cookie_file; unsigned int redirection_limit; // limit of redirection_count unsigned int redirection_count; // count of redirection struct { uint8_t enable:1; uint8_t user:1; uint8_t password:1; uint8_t referrer:1; uint8_t user_agent:1; uint8_t post_data:1; uint8_t post_file:1; uint8_t cookie_data:1; uint8_t cookie_file:1; uint8_t redirection_limit:1; } keeping; }; /* ---------------------------------------------------------------------------- UgetFtp: It derived from UgData and store in UgInfo. UgType | `-- UgData | `-- UgetFtp */ struct UgetFtp { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgData(UgType) member char* user; char* password; int active_mode; struct { uint8_t enable:1; uint8_t user:1; uint8_t password:1; uint8_t active_mode:1; } keeping; }; /* --------------------------------------------------------------------------- UgetLog UgType | `-- UgData | `-- UgetLog */ struct UgetLog { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgData(UgType) member time_t added_time; time_t completed_time; UgList messages; // List for UgetEvent }; /* ---------------------------------------------------------------------------- UgetRelation: It derived from UgData and store in UgInfo. UgType | `-- UgData | `-- UgetRelation */ typedef enum { UGET_PRIORITY_LOW, // 0 UGET_PRIORITY_NORMAL, // default UGET_PRIORITY_HIGH } UgetPriority; struct UgetRelation { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgData(UgType) member int group; // UgetGroup int priority; // UgetPriority // used by UgetTask struct UgetRelationTask { UgetRelation* prev; UgetPlugin* plugin; // speed control int speed[2]; // current speed int limit[2]; // current speed limit }* task; }; /* ---------------------------------------------------------------------------- UgetCategory: It derived from UgData and store in UgInfo. UgType | `-- UgData | `-- UgetCategory */ struct UgetCategory { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgData(UgType) member // use these to classify download UgArrayStr hosts; UgArrayStr schemes; UgArrayStr file_exts; // limit int active_limit; int finished_limit; // finished: completed and stopped int recycled_limit; // subcategory in UgetNode::fake UgetNode* active; UgetNode* queuing; UgetNode* finished; UgetNode* recycled; }; #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { const UgDataInfo* const CommonInfo = UgetCommonInfo; const UgDataInfo* const ProgressInfo = UgetProgressInfo; const UgDataInfo* const ProxyInfo = UgetProxyInfo; const UgDataInfo* const HttpInfo = UgetHttpInfo; const UgDataInfo* const FtpInfo = UgetFtpInfo; const UgDataInfo* const LogInfo = UgetLogInfo; const UgDataInfo* const RelationInfo = UgetRelationInfo; const UgDataInfo* const CategoryInfo = UgetCategoryInfo; // These are for directly use only. You can NOT derived it. struct Common : Ug::DataMethod, UgetCommon { inline void* operator new(size_t size) { return ug_data_new(UgetCommonInfo); } }; struct Progress : Ug::DataMethod, UgetProgress { inline void* operator new(size_t size) { return ug_data_new(UgetProgressInfo); } }; struct Proxy : Ug::DataMethod, UgetProxy { inline void* operator new(size_t size) { return ug_data_new(UgetProxyInfo); } }; struct Http : Ug::DataMethod, UgetHttp { inline void* operator new(size_t size) { return ug_data_new(UgetHttpInfo); } }; struct Ftp : Ug::DataMethod, UgetFtp { inline void* operator new(size_t size) { return ug_data_new(UgetFtpInfo); } }; struct Log : Ug::DataMethod, UgetLog { inline void* operator new(size_t size) { return ug_data_new(UgetLogInfo); } }; struct Relation : Ug::DataMethod, UgetRelation { inline void* operator new(size_t size) { return ug_data_new(UgetRelationInfo); } }; struct Category : Ug::DataMethod, UgetCategory { inline void* operator new(size_t size) { return ug_data_new(UgetCategoryInfo); } }; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_DATA_H uget-2.2.3/uget/Makefile.in0000664000175000017500000022266513602733761012443 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : @WITH_LIBPWMD_TRUE@am__append_1 = @LIBPWMD_CFLAGS@ @WITH_LIBPWMD_TRUE@am__append_2 = pwmd.c @WITH_LIBPWMD_TRUE@am__append_3 = pwmd.h subdir = uget ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__noinst_HEADERS_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libuget_a_AR = $(AR) $(ARFLAGS) libuget_a_LIBADD = am__libuget_a_SOURCES_DIST = UgetSequence.c UgetRss.c UgetRpc.c \ UgetOption.c UgetData.c UgetFiles.c UgetNode.c \ UgetNode-compare.c UgetNode-filter.c UgetTask.c UgetHash.c \ UgetSite.c UgetApp.c UgetEvent.c UgetPlugin.c UgetA2cf.c \ UgetCurl.c UgetAria2.c UgetMedia.c UgetMedia-youtube.c \ UgetPluginCurl.c UgetPluginAria2.c UgetPluginMedia.c \ UgetPluginAgent.c UgetPluginMega.c UgetPluginEmpty.c pwmd.c @WITH_LIBPWMD_TRUE@am__objects_1 = libuget_a-pwmd.$(OBJEXT) am_libuget_a_OBJECTS = libuget_a-UgetSequence.$(OBJEXT) \ libuget_a-UgetRss.$(OBJEXT) libuget_a-UgetRpc.$(OBJEXT) \ libuget_a-UgetOption.$(OBJEXT) libuget_a-UgetData.$(OBJEXT) \ libuget_a-UgetFiles.$(OBJEXT) libuget_a-UgetNode.$(OBJEXT) \ libuget_a-UgetNode-compare.$(OBJEXT) \ libuget_a-UgetNode-filter.$(OBJEXT) \ libuget_a-UgetTask.$(OBJEXT) libuget_a-UgetHash.$(OBJEXT) \ libuget_a-UgetSite.$(OBJEXT) libuget_a-UgetApp.$(OBJEXT) \ libuget_a-UgetEvent.$(OBJEXT) libuget_a-UgetPlugin.$(OBJEXT) \ libuget_a-UgetA2cf.$(OBJEXT) libuget_a-UgetCurl.$(OBJEXT) \ libuget_a-UgetAria2.$(OBJEXT) libuget_a-UgetMedia.$(OBJEXT) \ libuget_a-UgetMedia-youtube.$(OBJEXT) \ libuget_a-UgetPluginCurl.$(OBJEXT) \ libuget_a-UgetPluginAria2.$(OBJEXT) \ libuget_a-UgetPluginMedia.$(OBJEXT) \ libuget_a-UgetPluginAgent.$(OBJEXT) \ libuget_a-UgetPluginMega.$(OBJEXT) \ libuget_a-UgetPluginEmpty.$(OBJEXT) $(am__objects_1) libuget_a_OBJECTS = $(am_libuget_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libuget_a_SOURCES) DIST_SOURCES = $(am__libuget_a_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__noinst_HEADERS_DIST = UgetSequence.h UgetRss.h UgetRpc.h \ UgetOption.h UgetData.h UgetFiles.h UgetNode.h UgetTask.h \ UgetHash.h UgetSite.h UgetApp.h UgetEvent.h UgetPlugin.h \ UgetA2cf.h UgetCurl.h UgetAria2.h UgetMedia.h UgetPluginCurl.h \ UgetPluginAria2.h UgetPluginMedia.h UgetPluginAgent.h \ UgetPluginMega.h UgetPluginEmpty.h pwmd.h HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_INDICATOR_CFLAGS = @APP_INDICATOR_CFLAGS@ APP_INDICATOR_LIBS = @APP_INDICATOR_LIBS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_CONFIG = @CURL_CONFIG@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETCONF = @GETCONF@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LFS_CFLAGS = @LFS_CFLAGS@ LFS_LDFLAGS = @LFS_LDFLAGS@ LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@ LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBPWMD_CFLAGS = @LIBPWMD_CFLAGS@ LIBPWMD_LIBS = @LIBPWMD_LIBS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # lib_LIBRARIES = libuget.a noinst_LIBRARIES = libuget.a libuget_a_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget libuget_a_CFLAGS = @PTHREAD_CFLAGS@ @GLIB_CFLAGS@ $(am__append_1) libuget_a_SOURCES = UgetSequence.c UgetRss.c UgetRpc.c UgetOption.c \ UgetData.c UgetFiles.c UgetNode.c UgetNode-compare.c \ UgetNode-filter.c UgetTask.c UgetHash.c UgetSite.c UgetApp.c \ UgetEvent.c UgetPlugin.c UgetA2cf.c UgetCurl.c UgetAria2.c \ UgetMedia.c UgetMedia-youtube.c UgetPluginCurl.c \ UgetPluginAria2.c UgetPluginMedia.c UgetPluginAgent.c \ UgetPluginMega.c UgetPluginEmpty.c $(am__append_2) noinst_HEADERS = UgetSequence.h UgetRss.h UgetRpc.h UgetOption.h \ UgetData.h UgetFiles.h UgetNode.h UgetTask.h UgetHash.h \ UgetSite.h UgetApp.h UgetEvent.h UgetPlugin.h UgetA2cf.h \ UgetCurl.h UgetAria2.h UgetMedia.h UgetPluginCurl.h \ UgetPluginAria2.h UgetPluginMedia.h UgetPluginAgent.h \ UgetPluginMega.h UgetPluginEmpty.h $(am__append_3) EXTRA_DIST = \ Android.mk \ CMakeLists.txt all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu uget/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu uget/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libuget.a: $(libuget_a_OBJECTS) $(libuget_a_DEPENDENCIES) $(EXTRA_libuget_a_DEPENDENCIES) $(AM_V_at)-rm -f libuget.a $(AM_V_AR)$(libuget_a_AR) libuget.a $(libuget_a_OBJECTS) $(libuget_a_LIBADD) $(AM_V_at)$(RANLIB) libuget.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetA2cf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetApp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetAria2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetCurl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetData.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetEvent.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetFiles.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetHash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetMedia-youtube.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetMedia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetNode-compare.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetNode-filter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetNode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetOption.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetPlugin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetPluginAgent.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetPluginAria2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetPluginCurl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetPluginEmpty.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetPluginMedia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetPluginMega.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetRpc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetRss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetSequence.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetSite.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-UgetTask.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libuget_a-pwmd.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libuget_a-UgetSequence.o: UgetSequence.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetSequence.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetSequence.Tpo -c -o libuget_a-UgetSequence.o `test -f 'UgetSequence.c' || echo '$(srcdir)/'`UgetSequence.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetSequence.Tpo $(DEPDIR)/libuget_a-UgetSequence.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetSequence.c' object='libuget_a-UgetSequence.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetSequence.o `test -f 'UgetSequence.c' || echo '$(srcdir)/'`UgetSequence.c libuget_a-UgetSequence.obj: UgetSequence.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetSequence.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetSequence.Tpo -c -o libuget_a-UgetSequence.obj `if test -f 'UgetSequence.c'; then $(CYGPATH_W) 'UgetSequence.c'; else $(CYGPATH_W) '$(srcdir)/UgetSequence.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetSequence.Tpo $(DEPDIR)/libuget_a-UgetSequence.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetSequence.c' object='libuget_a-UgetSequence.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetSequence.obj `if test -f 'UgetSequence.c'; then $(CYGPATH_W) 'UgetSequence.c'; else $(CYGPATH_W) '$(srcdir)/UgetSequence.c'; fi` libuget_a-UgetRss.o: UgetRss.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetRss.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetRss.Tpo -c -o libuget_a-UgetRss.o `test -f 'UgetRss.c' || echo '$(srcdir)/'`UgetRss.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetRss.Tpo $(DEPDIR)/libuget_a-UgetRss.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetRss.c' object='libuget_a-UgetRss.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetRss.o `test -f 'UgetRss.c' || echo '$(srcdir)/'`UgetRss.c libuget_a-UgetRss.obj: UgetRss.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetRss.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetRss.Tpo -c -o libuget_a-UgetRss.obj `if test -f 'UgetRss.c'; then $(CYGPATH_W) 'UgetRss.c'; else $(CYGPATH_W) '$(srcdir)/UgetRss.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetRss.Tpo $(DEPDIR)/libuget_a-UgetRss.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetRss.c' object='libuget_a-UgetRss.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetRss.obj `if test -f 'UgetRss.c'; then $(CYGPATH_W) 'UgetRss.c'; else $(CYGPATH_W) '$(srcdir)/UgetRss.c'; fi` libuget_a-UgetRpc.o: UgetRpc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetRpc.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetRpc.Tpo -c -o libuget_a-UgetRpc.o `test -f 'UgetRpc.c' || echo '$(srcdir)/'`UgetRpc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetRpc.Tpo $(DEPDIR)/libuget_a-UgetRpc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetRpc.c' object='libuget_a-UgetRpc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetRpc.o `test -f 'UgetRpc.c' || echo '$(srcdir)/'`UgetRpc.c libuget_a-UgetRpc.obj: UgetRpc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetRpc.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetRpc.Tpo -c -o libuget_a-UgetRpc.obj `if test -f 'UgetRpc.c'; then $(CYGPATH_W) 'UgetRpc.c'; else $(CYGPATH_W) '$(srcdir)/UgetRpc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetRpc.Tpo $(DEPDIR)/libuget_a-UgetRpc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetRpc.c' object='libuget_a-UgetRpc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetRpc.obj `if test -f 'UgetRpc.c'; then $(CYGPATH_W) 'UgetRpc.c'; else $(CYGPATH_W) '$(srcdir)/UgetRpc.c'; fi` libuget_a-UgetOption.o: UgetOption.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetOption.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetOption.Tpo -c -o libuget_a-UgetOption.o `test -f 'UgetOption.c' || echo '$(srcdir)/'`UgetOption.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetOption.Tpo $(DEPDIR)/libuget_a-UgetOption.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetOption.c' object='libuget_a-UgetOption.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetOption.o `test -f 'UgetOption.c' || echo '$(srcdir)/'`UgetOption.c libuget_a-UgetOption.obj: UgetOption.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetOption.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetOption.Tpo -c -o libuget_a-UgetOption.obj `if test -f 'UgetOption.c'; then $(CYGPATH_W) 'UgetOption.c'; else $(CYGPATH_W) '$(srcdir)/UgetOption.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetOption.Tpo $(DEPDIR)/libuget_a-UgetOption.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetOption.c' object='libuget_a-UgetOption.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetOption.obj `if test -f 'UgetOption.c'; then $(CYGPATH_W) 'UgetOption.c'; else $(CYGPATH_W) '$(srcdir)/UgetOption.c'; fi` libuget_a-UgetData.o: UgetData.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetData.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetData.Tpo -c -o libuget_a-UgetData.o `test -f 'UgetData.c' || echo '$(srcdir)/'`UgetData.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetData.Tpo $(DEPDIR)/libuget_a-UgetData.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetData.c' object='libuget_a-UgetData.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetData.o `test -f 'UgetData.c' || echo '$(srcdir)/'`UgetData.c libuget_a-UgetData.obj: UgetData.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetData.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetData.Tpo -c -o libuget_a-UgetData.obj `if test -f 'UgetData.c'; then $(CYGPATH_W) 'UgetData.c'; else $(CYGPATH_W) '$(srcdir)/UgetData.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetData.Tpo $(DEPDIR)/libuget_a-UgetData.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetData.c' object='libuget_a-UgetData.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetData.obj `if test -f 'UgetData.c'; then $(CYGPATH_W) 'UgetData.c'; else $(CYGPATH_W) '$(srcdir)/UgetData.c'; fi` libuget_a-UgetFiles.o: UgetFiles.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetFiles.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetFiles.Tpo -c -o libuget_a-UgetFiles.o `test -f 'UgetFiles.c' || echo '$(srcdir)/'`UgetFiles.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetFiles.Tpo $(DEPDIR)/libuget_a-UgetFiles.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetFiles.c' object='libuget_a-UgetFiles.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetFiles.o `test -f 'UgetFiles.c' || echo '$(srcdir)/'`UgetFiles.c libuget_a-UgetFiles.obj: UgetFiles.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetFiles.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetFiles.Tpo -c -o libuget_a-UgetFiles.obj `if test -f 'UgetFiles.c'; then $(CYGPATH_W) 'UgetFiles.c'; else $(CYGPATH_W) '$(srcdir)/UgetFiles.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetFiles.Tpo $(DEPDIR)/libuget_a-UgetFiles.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetFiles.c' object='libuget_a-UgetFiles.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetFiles.obj `if test -f 'UgetFiles.c'; then $(CYGPATH_W) 'UgetFiles.c'; else $(CYGPATH_W) '$(srcdir)/UgetFiles.c'; fi` libuget_a-UgetNode.o: UgetNode.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetNode.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetNode.Tpo -c -o libuget_a-UgetNode.o `test -f 'UgetNode.c' || echo '$(srcdir)/'`UgetNode.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetNode.Tpo $(DEPDIR)/libuget_a-UgetNode.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetNode.c' object='libuget_a-UgetNode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetNode.o `test -f 'UgetNode.c' || echo '$(srcdir)/'`UgetNode.c libuget_a-UgetNode.obj: UgetNode.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetNode.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetNode.Tpo -c -o libuget_a-UgetNode.obj `if test -f 'UgetNode.c'; then $(CYGPATH_W) 'UgetNode.c'; else $(CYGPATH_W) '$(srcdir)/UgetNode.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetNode.Tpo $(DEPDIR)/libuget_a-UgetNode.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetNode.c' object='libuget_a-UgetNode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetNode.obj `if test -f 'UgetNode.c'; then $(CYGPATH_W) 'UgetNode.c'; else $(CYGPATH_W) '$(srcdir)/UgetNode.c'; fi` libuget_a-UgetNode-compare.o: UgetNode-compare.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetNode-compare.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetNode-compare.Tpo -c -o libuget_a-UgetNode-compare.o `test -f 'UgetNode-compare.c' || echo '$(srcdir)/'`UgetNode-compare.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetNode-compare.Tpo $(DEPDIR)/libuget_a-UgetNode-compare.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetNode-compare.c' object='libuget_a-UgetNode-compare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetNode-compare.o `test -f 'UgetNode-compare.c' || echo '$(srcdir)/'`UgetNode-compare.c libuget_a-UgetNode-compare.obj: UgetNode-compare.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetNode-compare.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetNode-compare.Tpo -c -o libuget_a-UgetNode-compare.obj `if test -f 'UgetNode-compare.c'; then $(CYGPATH_W) 'UgetNode-compare.c'; else $(CYGPATH_W) '$(srcdir)/UgetNode-compare.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetNode-compare.Tpo $(DEPDIR)/libuget_a-UgetNode-compare.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetNode-compare.c' object='libuget_a-UgetNode-compare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetNode-compare.obj `if test -f 'UgetNode-compare.c'; then $(CYGPATH_W) 'UgetNode-compare.c'; else $(CYGPATH_W) '$(srcdir)/UgetNode-compare.c'; fi` libuget_a-UgetNode-filter.o: UgetNode-filter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetNode-filter.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetNode-filter.Tpo -c -o libuget_a-UgetNode-filter.o `test -f 'UgetNode-filter.c' || echo '$(srcdir)/'`UgetNode-filter.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetNode-filter.Tpo $(DEPDIR)/libuget_a-UgetNode-filter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetNode-filter.c' object='libuget_a-UgetNode-filter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetNode-filter.o `test -f 'UgetNode-filter.c' || echo '$(srcdir)/'`UgetNode-filter.c libuget_a-UgetNode-filter.obj: UgetNode-filter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetNode-filter.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetNode-filter.Tpo -c -o libuget_a-UgetNode-filter.obj `if test -f 'UgetNode-filter.c'; then $(CYGPATH_W) 'UgetNode-filter.c'; else $(CYGPATH_W) '$(srcdir)/UgetNode-filter.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetNode-filter.Tpo $(DEPDIR)/libuget_a-UgetNode-filter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetNode-filter.c' object='libuget_a-UgetNode-filter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetNode-filter.obj `if test -f 'UgetNode-filter.c'; then $(CYGPATH_W) 'UgetNode-filter.c'; else $(CYGPATH_W) '$(srcdir)/UgetNode-filter.c'; fi` libuget_a-UgetTask.o: UgetTask.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetTask.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetTask.Tpo -c -o libuget_a-UgetTask.o `test -f 'UgetTask.c' || echo '$(srcdir)/'`UgetTask.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetTask.Tpo $(DEPDIR)/libuget_a-UgetTask.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetTask.c' object='libuget_a-UgetTask.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetTask.o `test -f 'UgetTask.c' || echo '$(srcdir)/'`UgetTask.c libuget_a-UgetTask.obj: UgetTask.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetTask.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetTask.Tpo -c -o libuget_a-UgetTask.obj `if test -f 'UgetTask.c'; then $(CYGPATH_W) 'UgetTask.c'; else $(CYGPATH_W) '$(srcdir)/UgetTask.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetTask.Tpo $(DEPDIR)/libuget_a-UgetTask.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetTask.c' object='libuget_a-UgetTask.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetTask.obj `if test -f 'UgetTask.c'; then $(CYGPATH_W) 'UgetTask.c'; else $(CYGPATH_W) '$(srcdir)/UgetTask.c'; fi` libuget_a-UgetHash.o: UgetHash.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetHash.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetHash.Tpo -c -o libuget_a-UgetHash.o `test -f 'UgetHash.c' || echo '$(srcdir)/'`UgetHash.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetHash.Tpo $(DEPDIR)/libuget_a-UgetHash.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetHash.c' object='libuget_a-UgetHash.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetHash.o `test -f 'UgetHash.c' || echo '$(srcdir)/'`UgetHash.c libuget_a-UgetHash.obj: UgetHash.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetHash.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetHash.Tpo -c -o libuget_a-UgetHash.obj `if test -f 'UgetHash.c'; then $(CYGPATH_W) 'UgetHash.c'; else $(CYGPATH_W) '$(srcdir)/UgetHash.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetHash.Tpo $(DEPDIR)/libuget_a-UgetHash.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetHash.c' object='libuget_a-UgetHash.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetHash.obj `if test -f 'UgetHash.c'; then $(CYGPATH_W) 'UgetHash.c'; else $(CYGPATH_W) '$(srcdir)/UgetHash.c'; fi` libuget_a-UgetSite.o: UgetSite.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetSite.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetSite.Tpo -c -o libuget_a-UgetSite.o `test -f 'UgetSite.c' || echo '$(srcdir)/'`UgetSite.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetSite.Tpo $(DEPDIR)/libuget_a-UgetSite.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetSite.c' object='libuget_a-UgetSite.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetSite.o `test -f 'UgetSite.c' || echo '$(srcdir)/'`UgetSite.c libuget_a-UgetSite.obj: UgetSite.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetSite.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetSite.Tpo -c -o libuget_a-UgetSite.obj `if test -f 'UgetSite.c'; then $(CYGPATH_W) 'UgetSite.c'; else $(CYGPATH_W) '$(srcdir)/UgetSite.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetSite.Tpo $(DEPDIR)/libuget_a-UgetSite.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetSite.c' object='libuget_a-UgetSite.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetSite.obj `if test -f 'UgetSite.c'; then $(CYGPATH_W) 'UgetSite.c'; else $(CYGPATH_W) '$(srcdir)/UgetSite.c'; fi` libuget_a-UgetApp.o: UgetApp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetApp.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetApp.Tpo -c -o libuget_a-UgetApp.o `test -f 'UgetApp.c' || echo '$(srcdir)/'`UgetApp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetApp.Tpo $(DEPDIR)/libuget_a-UgetApp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetApp.c' object='libuget_a-UgetApp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetApp.o `test -f 'UgetApp.c' || echo '$(srcdir)/'`UgetApp.c libuget_a-UgetApp.obj: UgetApp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetApp.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetApp.Tpo -c -o libuget_a-UgetApp.obj `if test -f 'UgetApp.c'; then $(CYGPATH_W) 'UgetApp.c'; else $(CYGPATH_W) '$(srcdir)/UgetApp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetApp.Tpo $(DEPDIR)/libuget_a-UgetApp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetApp.c' object='libuget_a-UgetApp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetApp.obj `if test -f 'UgetApp.c'; then $(CYGPATH_W) 'UgetApp.c'; else $(CYGPATH_W) '$(srcdir)/UgetApp.c'; fi` libuget_a-UgetEvent.o: UgetEvent.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetEvent.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetEvent.Tpo -c -o libuget_a-UgetEvent.o `test -f 'UgetEvent.c' || echo '$(srcdir)/'`UgetEvent.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetEvent.Tpo $(DEPDIR)/libuget_a-UgetEvent.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetEvent.c' object='libuget_a-UgetEvent.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetEvent.o `test -f 'UgetEvent.c' || echo '$(srcdir)/'`UgetEvent.c libuget_a-UgetEvent.obj: UgetEvent.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetEvent.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetEvent.Tpo -c -o libuget_a-UgetEvent.obj `if test -f 'UgetEvent.c'; then $(CYGPATH_W) 'UgetEvent.c'; else $(CYGPATH_W) '$(srcdir)/UgetEvent.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetEvent.Tpo $(DEPDIR)/libuget_a-UgetEvent.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetEvent.c' object='libuget_a-UgetEvent.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetEvent.obj `if test -f 'UgetEvent.c'; then $(CYGPATH_W) 'UgetEvent.c'; else $(CYGPATH_W) '$(srcdir)/UgetEvent.c'; fi` libuget_a-UgetPlugin.o: UgetPlugin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPlugin.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetPlugin.Tpo -c -o libuget_a-UgetPlugin.o `test -f 'UgetPlugin.c' || echo '$(srcdir)/'`UgetPlugin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPlugin.Tpo $(DEPDIR)/libuget_a-UgetPlugin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPlugin.c' object='libuget_a-UgetPlugin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPlugin.o `test -f 'UgetPlugin.c' || echo '$(srcdir)/'`UgetPlugin.c libuget_a-UgetPlugin.obj: UgetPlugin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPlugin.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetPlugin.Tpo -c -o libuget_a-UgetPlugin.obj `if test -f 'UgetPlugin.c'; then $(CYGPATH_W) 'UgetPlugin.c'; else $(CYGPATH_W) '$(srcdir)/UgetPlugin.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPlugin.Tpo $(DEPDIR)/libuget_a-UgetPlugin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPlugin.c' object='libuget_a-UgetPlugin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPlugin.obj `if test -f 'UgetPlugin.c'; then $(CYGPATH_W) 'UgetPlugin.c'; else $(CYGPATH_W) '$(srcdir)/UgetPlugin.c'; fi` libuget_a-UgetA2cf.o: UgetA2cf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetA2cf.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetA2cf.Tpo -c -o libuget_a-UgetA2cf.o `test -f 'UgetA2cf.c' || echo '$(srcdir)/'`UgetA2cf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetA2cf.Tpo $(DEPDIR)/libuget_a-UgetA2cf.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetA2cf.c' object='libuget_a-UgetA2cf.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetA2cf.o `test -f 'UgetA2cf.c' || echo '$(srcdir)/'`UgetA2cf.c libuget_a-UgetA2cf.obj: UgetA2cf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetA2cf.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetA2cf.Tpo -c -o libuget_a-UgetA2cf.obj `if test -f 'UgetA2cf.c'; then $(CYGPATH_W) 'UgetA2cf.c'; else $(CYGPATH_W) '$(srcdir)/UgetA2cf.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetA2cf.Tpo $(DEPDIR)/libuget_a-UgetA2cf.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetA2cf.c' object='libuget_a-UgetA2cf.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetA2cf.obj `if test -f 'UgetA2cf.c'; then $(CYGPATH_W) 'UgetA2cf.c'; else $(CYGPATH_W) '$(srcdir)/UgetA2cf.c'; fi` libuget_a-UgetCurl.o: UgetCurl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetCurl.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetCurl.Tpo -c -o libuget_a-UgetCurl.o `test -f 'UgetCurl.c' || echo '$(srcdir)/'`UgetCurl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetCurl.Tpo $(DEPDIR)/libuget_a-UgetCurl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetCurl.c' object='libuget_a-UgetCurl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetCurl.o `test -f 'UgetCurl.c' || echo '$(srcdir)/'`UgetCurl.c libuget_a-UgetCurl.obj: UgetCurl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetCurl.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetCurl.Tpo -c -o libuget_a-UgetCurl.obj `if test -f 'UgetCurl.c'; then $(CYGPATH_W) 'UgetCurl.c'; else $(CYGPATH_W) '$(srcdir)/UgetCurl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetCurl.Tpo $(DEPDIR)/libuget_a-UgetCurl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetCurl.c' object='libuget_a-UgetCurl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetCurl.obj `if test -f 'UgetCurl.c'; then $(CYGPATH_W) 'UgetCurl.c'; else $(CYGPATH_W) '$(srcdir)/UgetCurl.c'; fi` libuget_a-UgetAria2.o: UgetAria2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetAria2.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetAria2.Tpo -c -o libuget_a-UgetAria2.o `test -f 'UgetAria2.c' || echo '$(srcdir)/'`UgetAria2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetAria2.Tpo $(DEPDIR)/libuget_a-UgetAria2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetAria2.c' object='libuget_a-UgetAria2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetAria2.o `test -f 'UgetAria2.c' || echo '$(srcdir)/'`UgetAria2.c libuget_a-UgetAria2.obj: UgetAria2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetAria2.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetAria2.Tpo -c -o libuget_a-UgetAria2.obj `if test -f 'UgetAria2.c'; then $(CYGPATH_W) 'UgetAria2.c'; else $(CYGPATH_W) '$(srcdir)/UgetAria2.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetAria2.Tpo $(DEPDIR)/libuget_a-UgetAria2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetAria2.c' object='libuget_a-UgetAria2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetAria2.obj `if test -f 'UgetAria2.c'; then $(CYGPATH_W) 'UgetAria2.c'; else $(CYGPATH_W) '$(srcdir)/UgetAria2.c'; fi` libuget_a-UgetMedia.o: UgetMedia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetMedia.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetMedia.Tpo -c -o libuget_a-UgetMedia.o `test -f 'UgetMedia.c' || echo '$(srcdir)/'`UgetMedia.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetMedia.Tpo $(DEPDIR)/libuget_a-UgetMedia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetMedia.c' object='libuget_a-UgetMedia.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetMedia.o `test -f 'UgetMedia.c' || echo '$(srcdir)/'`UgetMedia.c libuget_a-UgetMedia.obj: UgetMedia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetMedia.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetMedia.Tpo -c -o libuget_a-UgetMedia.obj `if test -f 'UgetMedia.c'; then $(CYGPATH_W) 'UgetMedia.c'; else $(CYGPATH_W) '$(srcdir)/UgetMedia.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetMedia.Tpo $(DEPDIR)/libuget_a-UgetMedia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetMedia.c' object='libuget_a-UgetMedia.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetMedia.obj `if test -f 'UgetMedia.c'; then $(CYGPATH_W) 'UgetMedia.c'; else $(CYGPATH_W) '$(srcdir)/UgetMedia.c'; fi` libuget_a-UgetMedia-youtube.o: UgetMedia-youtube.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetMedia-youtube.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetMedia-youtube.Tpo -c -o libuget_a-UgetMedia-youtube.o `test -f 'UgetMedia-youtube.c' || echo '$(srcdir)/'`UgetMedia-youtube.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetMedia-youtube.Tpo $(DEPDIR)/libuget_a-UgetMedia-youtube.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetMedia-youtube.c' object='libuget_a-UgetMedia-youtube.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetMedia-youtube.o `test -f 'UgetMedia-youtube.c' || echo '$(srcdir)/'`UgetMedia-youtube.c libuget_a-UgetMedia-youtube.obj: UgetMedia-youtube.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetMedia-youtube.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetMedia-youtube.Tpo -c -o libuget_a-UgetMedia-youtube.obj `if test -f 'UgetMedia-youtube.c'; then $(CYGPATH_W) 'UgetMedia-youtube.c'; else $(CYGPATH_W) '$(srcdir)/UgetMedia-youtube.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetMedia-youtube.Tpo $(DEPDIR)/libuget_a-UgetMedia-youtube.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetMedia-youtube.c' object='libuget_a-UgetMedia-youtube.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetMedia-youtube.obj `if test -f 'UgetMedia-youtube.c'; then $(CYGPATH_W) 'UgetMedia-youtube.c'; else $(CYGPATH_W) '$(srcdir)/UgetMedia-youtube.c'; fi` libuget_a-UgetPluginCurl.o: UgetPluginCurl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginCurl.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginCurl.Tpo -c -o libuget_a-UgetPluginCurl.o `test -f 'UgetPluginCurl.c' || echo '$(srcdir)/'`UgetPluginCurl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginCurl.Tpo $(DEPDIR)/libuget_a-UgetPluginCurl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginCurl.c' object='libuget_a-UgetPluginCurl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginCurl.o `test -f 'UgetPluginCurl.c' || echo '$(srcdir)/'`UgetPluginCurl.c libuget_a-UgetPluginCurl.obj: UgetPluginCurl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginCurl.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginCurl.Tpo -c -o libuget_a-UgetPluginCurl.obj `if test -f 'UgetPluginCurl.c'; then $(CYGPATH_W) 'UgetPluginCurl.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginCurl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginCurl.Tpo $(DEPDIR)/libuget_a-UgetPluginCurl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginCurl.c' object='libuget_a-UgetPluginCurl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginCurl.obj `if test -f 'UgetPluginCurl.c'; then $(CYGPATH_W) 'UgetPluginCurl.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginCurl.c'; fi` libuget_a-UgetPluginAria2.o: UgetPluginAria2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginAria2.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginAria2.Tpo -c -o libuget_a-UgetPluginAria2.o `test -f 'UgetPluginAria2.c' || echo '$(srcdir)/'`UgetPluginAria2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginAria2.Tpo $(DEPDIR)/libuget_a-UgetPluginAria2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginAria2.c' object='libuget_a-UgetPluginAria2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginAria2.o `test -f 'UgetPluginAria2.c' || echo '$(srcdir)/'`UgetPluginAria2.c libuget_a-UgetPluginAria2.obj: UgetPluginAria2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginAria2.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginAria2.Tpo -c -o libuget_a-UgetPluginAria2.obj `if test -f 'UgetPluginAria2.c'; then $(CYGPATH_W) 'UgetPluginAria2.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginAria2.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginAria2.Tpo $(DEPDIR)/libuget_a-UgetPluginAria2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginAria2.c' object='libuget_a-UgetPluginAria2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginAria2.obj `if test -f 'UgetPluginAria2.c'; then $(CYGPATH_W) 'UgetPluginAria2.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginAria2.c'; fi` libuget_a-UgetPluginMedia.o: UgetPluginMedia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginMedia.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginMedia.Tpo -c -o libuget_a-UgetPluginMedia.o `test -f 'UgetPluginMedia.c' || echo '$(srcdir)/'`UgetPluginMedia.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginMedia.Tpo $(DEPDIR)/libuget_a-UgetPluginMedia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginMedia.c' object='libuget_a-UgetPluginMedia.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginMedia.o `test -f 'UgetPluginMedia.c' || echo '$(srcdir)/'`UgetPluginMedia.c libuget_a-UgetPluginMedia.obj: UgetPluginMedia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginMedia.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginMedia.Tpo -c -o libuget_a-UgetPluginMedia.obj `if test -f 'UgetPluginMedia.c'; then $(CYGPATH_W) 'UgetPluginMedia.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginMedia.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginMedia.Tpo $(DEPDIR)/libuget_a-UgetPluginMedia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginMedia.c' object='libuget_a-UgetPluginMedia.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginMedia.obj `if test -f 'UgetPluginMedia.c'; then $(CYGPATH_W) 'UgetPluginMedia.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginMedia.c'; fi` libuget_a-UgetPluginAgent.o: UgetPluginAgent.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginAgent.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginAgent.Tpo -c -o libuget_a-UgetPluginAgent.o `test -f 'UgetPluginAgent.c' || echo '$(srcdir)/'`UgetPluginAgent.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginAgent.Tpo $(DEPDIR)/libuget_a-UgetPluginAgent.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginAgent.c' object='libuget_a-UgetPluginAgent.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginAgent.o `test -f 'UgetPluginAgent.c' || echo '$(srcdir)/'`UgetPluginAgent.c libuget_a-UgetPluginAgent.obj: UgetPluginAgent.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginAgent.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginAgent.Tpo -c -o libuget_a-UgetPluginAgent.obj `if test -f 'UgetPluginAgent.c'; then $(CYGPATH_W) 'UgetPluginAgent.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginAgent.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginAgent.Tpo $(DEPDIR)/libuget_a-UgetPluginAgent.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginAgent.c' object='libuget_a-UgetPluginAgent.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginAgent.obj `if test -f 'UgetPluginAgent.c'; then $(CYGPATH_W) 'UgetPluginAgent.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginAgent.c'; fi` libuget_a-UgetPluginMega.o: UgetPluginMega.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginMega.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginMega.Tpo -c -o libuget_a-UgetPluginMega.o `test -f 'UgetPluginMega.c' || echo '$(srcdir)/'`UgetPluginMega.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginMega.Tpo $(DEPDIR)/libuget_a-UgetPluginMega.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginMega.c' object='libuget_a-UgetPluginMega.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginMega.o `test -f 'UgetPluginMega.c' || echo '$(srcdir)/'`UgetPluginMega.c libuget_a-UgetPluginMega.obj: UgetPluginMega.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginMega.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginMega.Tpo -c -o libuget_a-UgetPluginMega.obj `if test -f 'UgetPluginMega.c'; then $(CYGPATH_W) 'UgetPluginMega.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginMega.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginMega.Tpo $(DEPDIR)/libuget_a-UgetPluginMega.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginMega.c' object='libuget_a-UgetPluginMega.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginMega.obj `if test -f 'UgetPluginMega.c'; then $(CYGPATH_W) 'UgetPluginMega.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginMega.c'; fi` libuget_a-UgetPluginEmpty.o: UgetPluginEmpty.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginEmpty.o -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginEmpty.Tpo -c -o libuget_a-UgetPluginEmpty.o `test -f 'UgetPluginEmpty.c' || echo '$(srcdir)/'`UgetPluginEmpty.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginEmpty.Tpo $(DEPDIR)/libuget_a-UgetPluginEmpty.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginEmpty.c' object='libuget_a-UgetPluginEmpty.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginEmpty.o `test -f 'UgetPluginEmpty.c' || echo '$(srcdir)/'`UgetPluginEmpty.c libuget_a-UgetPluginEmpty.obj: UgetPluginEmpty.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-UgetPluginEmpty.obj -MD -MP -MF $(DEPDIR)/libuget_a-UgetPluginEmpty.Tpo -c -o libuget_a-UgetPluginEmpty.obj `if test -f 'UgetPluginEmpty.c'; then $(CYGPATH_W) 'UgetPluginEmpty.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginEmpty.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-UgetPluginEmpty.Tpo $(DEPDIR)/libuget_a-UgetPluginEmpty.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='UgetPluginEmpty.c' object='libuget_a-UgetPluginEmpty.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-UgetPluginEmpty.obj `if test -f 'UgetPluginEmpty.c'; then $(CYGPATH_W) 'UgetPluginEmpty.c'; else $(CYGPATH_W) '$(srcdir)/UgetPluginEmpty.c'; fi` libuget_a-pwmd.o: pwmd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-pwmd.o -MD -MP -MF $(DEPDIR)/libuget_a-pwmd.Tpo -c -o libuget_a-pwmd.o `test -f 'pwmd.c' || echo '$(srcdir)/'`pwmd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-pwmd.Tpo $(DEPDIR)/libuget_a-pwmd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwmd.c' object='libuget_a-pwmd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-pwmd.o `test -f 'pwmd.c' || echo '$(srcdir)/'`pwmd.c libuget_a-pwmd.obj: pwmd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -MT libuget_a-pwmd.obj -MD -MP -MF $(DEPDIR)/libuget_a-pwmd.Tpo -c -o libuget_a-pwmd.obj `if test -f 'pwmd.c'; then $(CYGPATH_W) 'pwmd.c'; else $(CYGPATH_W) '$(srcdir)/pwmd.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libuget_a-pwmd.Tpo $(DEPDIR)/libuget_a-pwmd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwmd.c' object='libuget_a-pwmd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libuget_a_CPPFLAGS) $(CPPFLAGS) $(libuget_a_CFLAGS) $(CFLAGS) -c -o libuget_a-pwmd.obj `if test -f 'pwmd.c'; then $(CYGPATH_W) 'pwmd.c'; else $(CYGPATH_W) '$(srcdir)/pwmd.c'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/uget/UgetNode.h0000664000175000017500000002720613602733704012250 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_NODE_H #define UGET_NODE_H #include // offsetof() #include // int16_t #include #include #include #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------------------- UgetNode: extend from UgNode and add pointers (real, fake, and peer). * Tree chart 1: (parent and child nodes) Root --+-- Category1 --+-- Download1 (URI) | | | | | | | +-- Download2 (URI) | (torrent path) | | +-- Category2 --+-- Download3 (URI) | (metalink path) | | +-- Download4 (URI) * Tree chart 2: fake ----- peer -----> fake / / prev / prev / | / | / | / | / | / | / |/ |/ ... <---> parent <--------------> child <----> ... /| /| / | / | / | / | / | / | / | / | / next / next / / real real */ typedef struct UgetNode UgetNode; /* typedef struct UgetNodeControl UgetNodeControl; typedef struct UgetNodeNotifier UgetNodeNotifier; typedef struct UgetNodeSort UgetNodeSort; */ typedef void (*UgetNodeFunc)(UgetNode* node, UgetNode* sibling, UgetNode* child); extern const UgEntry UgetNodeEntry[]; typedef enum { UGET_GROUP_NULL = 0, UGET_GROUP_QUEUING = 1 << 0, UGET_GROUP_PAUSED = 1 << 1, UGET_GROUP_ACTIVE = 1 << 2, UGET_GROUP_COMPLETED = 1 << 3, UGET_GROUP_UPLOADING = 1 << 4, UGET_GROUP_ERROR = 1 << 5, UGET_GROUP_FINISHED = 1 << 6, UGET_GROUP_RECYCLED = 1 << 7, UGET_GROUP_MAJOR = UGET_GROUP_ACTIVE | UGET_GROUP_QUEUING | UGET_GROUP_FINISHED | UGET_GROUP_RECYCLED, UGET_GROUP_INACTIVE = UGET_GROUP_PAUSED | UGET_GROUP_ERROR, UGET_GROUP_UNRUNNABLE = UGET_GROUP_PAUSED | UGET_GROUP_ERROR | UGET_GROUP_FINISHED | UGET_GROUP_RECYCLED, UGET_GROUP_UNFINISHED = UGET_GROUP_ACTIVE | UGET_GROUP_UPLOADING, } UgetGroup; struct UgetNodeNotifier { // notify when node has inserted a child node. UgetNodeFunc inserted; // notify when node has removed a child node. UgetNodeFunc removed; // notify when a child node has updated. UgNotifyFunc updated; // UgNotifyFunc destroy; void* data; // extra data for user }; struct UgetNodeSort { UgCompareFunc compare; int reverse; // TRUE or FALSE }; struct UgetNodeControl { // struct UgetNodeControl* children; // control of children node struct UgetNodeNotifier* notifier; struct UgetNodeSort sort; // filter child of real node and decide how to insert child of fake node. // If real node inserted a child node, all fake nodes call this to filter. UgetNodeFunc filter; }; extern struct UgetNodeControl uget_node_default_control; extern struct UgetNodeNotifier uget_node_default_notifier; // ---------------------------------------------------------------------------- // UgetNode functions UgetNode* uget_node_new (UgetNode* node_real); void uget_node_free (UgetNode* node); void uget_node_init (UgetNode* node, UgetNode* node_real); void uget_node_final (UgetNode* node); void uget_node_clear_fake (UgetNode* node); void uget_node_clear_children (UgetNode* node); void uget_node_move (UgetNode* node, UgetNode* sibling, UgetNode* child); void uget_node_insert (UgetNode* node, UgetNode* sibling, UgetNode* child); void uget_node_remove (UgetNode* node, UgetNode* child); void uget_node_append (UgetNode* node, UgetNode* child); void uget_node_prepend (UgetNode* node, UgetNode* child); void uget_node_sort (UgetNode* node, UgCompareFunc cmp_func, int is_reversed); void uget_node_insert_sorted (UgetNode* node, UgetNode* child); void uget_node_reorder_by_real (UgetNode* node, UgetNode* real); void uget_node_reorder_by_fake (UgetNode* node, UgetNode* fake); void uget_node_remove_fake (UgetNode* node, UgetNode* fake); void uget_node_make_fake (UgetNode* node); #define uget_node_nth_child(node,nth) \ (UgetNode*) ug_node_nth_child((UgNode*)node, nth) #define uget_node_child_position(node,child) \ ug_node_child_position((UgNode*)node, (UgNode*)child) UgetNode* uget_node_nth_fake (UgetNode* node, int nth); int uget_node_fake_position (UgetNode* node, UgetNode* fake); // notify void uget_node_updated (UgetNode* node); // ---------------------------------------------------------------------------- // JSON parser used with UG_ENTRY_ARRAY. UgJsonError ug_json_parse_uget_node_children (UgJson* json, const char* name, const char* value, void* node, void* none); // JSON writer used with UG_ENTRY_ARRAY. void ug_json_write_uget_node_children (UgJson* json, const UgetNode* node); /* ---------------------------------------------------------------------------- compare functions for UgetNode.control.sort.compare and uget_node_sort() these function implemented in UgetNode-compare.c */ int uget_node_compare_name (UgetNode* node1, UgetNode* node2); int uget_node_compare_complete (UgetNode* node1, UgetNode* node2); int uget_node_compare_size (UgetNode* node1, UgetNode* node2); int uget_node_compare_percent (UgetNode* node1, UgetNode* node2); int uget_node_compare_elapsed (UgetNode* node1, UgetNode* node2); int uget_node_compare_left (UgetNode* node1, UgetNode* node2); int uget_node_compare_speed (UgetNode* node1, UgetNode* node2); int uget_node_compare_upload_speed (UgetNode* node1, UgetNode* node2); int uget_node_compare_uploaded (UgetNode* node1, UgetNode* node2); int uget_node_compare_ratio (UgetNode* node1, UgetNode* node2); int uget_node_compare_retry (UgetNode* node1, UgetNode* node2); int uget_node_compare_parent_name (UgetNode* node1, UgetNode* node2); int uget_node_compare_uri (UgetNode* node1, UgetNode* node2); int uget_node_compare_added_time (UgetNode* node1, UgetNode* node2); int uget_node_compare_completed_time (UgetNode* node1, UgetNode* node2); /* ---------------------------------------------------------------------------- callback functions for UgetNode.control.filter (they are used by UgetApp) these function implemented in UgetNode-filter.c */ void uget_node_filter_mix (UgetNode* node, UgetNode* sibling, UgetNode* child_real); void uget_node_filter_split (UgetNode* node, UgetNode* sibling, UgetNode* child_real); void uget_node_filter_mix_split (UgetNode* node, UgetNode* sibling, UgetNode* child_real); void uget_node_filter_sorted (UgetNode* node, UgetNode* sibling, UgetNode* child_real); /* uget_node_filter_split() v ,-----------. ,--------. | real node | ---> | filter | --+---> fake node (UGET_GROUP_ACTIVE) `-----------' `--------' | +---> fake node (UGET_GROUP_QUEUING) | +---> fake node (UGET_GROUP_FINISHED) | `---> fake node (UGET_GROUP_RECYCLED) * helper functions for uget_node_filter_split(), uget_node_filter_mix_split() uget_node_get_split() use 'group' (UgetGroup) to find fake node. uget_node_get_group() return UgetGroup if it is split fake node. */ UgetNode* uget_node_get_split(UgetNode* node, int group); int uget_node_get_group(UgetNode* node); #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // UgetNode structure struct UgetNode { UG_NODE_MEMBERS(UgetNode, UgetNode, base); /* // ------ UgNode members ------ UgetNode* base; // the realest UgetNode (real->real->real-> ...) UgetNode* next; UgetNode* prev; UgetNode* parent; UgetNode* children; UgetNode* last; int n_children; */ UgetNode* real; UgetNode* fake; UgetNode* peer; UgInfo* info; struct UgetNodeControl* control; #ifdef __cplusplus inline void* operator new(size_t size, UgetNode* node_real = NULL) { return uget_node_new(node_real); } inline void operator delete(void* p) { uget_node_free((UgetNode*)p); } inline void init(UgetNode* node_real = NULL) { uget_node_init(this, node_real); } inline void final() { uget_node_final(this); } inline void clearFake(void) { uget_node_clear_fake(this); } inline void clearChildren(void) { uget_node_clear_children(this); } inline void move(UgetNode* sibling, UgetNode* child) { uget_node_move(this, sibling, child); } inline void insert(UgetNode* sibling, UgetNode* child) { uget_node_insert(this, sibling, child); } inline void remove(UgetNode* child) { uget_node_remove(this, child); } inline void append(UgetNode* child) { uget_node_append(this, child); } inline void prepend(UgetNode* child) { uget_node_prepend(this, child); } inline UgetNode* nthChild(int nth) { return uget_node_nth_child(this, nth); } inline int childPosition(UgetNode* child) { return uget_node_child_position(this, child); } inline UgetNode* nthFake(int nth) { return uget_node_nth_fake(this, nth); } inline int fakePosition(UgetNode* fake) { return uget_node_fake_position(this, fake); } inline UgetNode* getSplit(int group) { return uget_node_get_split(this, group); } inline int getGroup() { return uget_node_get_group(this); } #endif // __cplusplus }; // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { // This one is for directly use only. You can NOT derived it. typedef struct UgetNode Node; }; // namespace Uget #endif // __cplusplus #endif // UGET_NODE_H uget-2.2.3/uget/UgetHash.h0000664000175000017500000000545413602733704012247 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_HASH_H #define UGET_HASH_H #include #ifdef __cplusplus extern "C" { #endif // ---------------------------------------------------------------------------- // URI hash table #ifdef NO_URI_HASH #define uget_uri_hash_new() #define uget_uri_hash_free(uuhash) #define uget_uri_hash_find(uuhash, uri) #define uget_uri_hash_add(uuhash, uri) FALSE #define uget_uri_hash_remove(uuhash, uri) #define uget_uri_hash_add_download(uuhash, dnode) #define uget_uri_hash_remove_download(uuhash, dnode) #define uget_uri_hash_add_category(uuhash, cnode) #define uget_uri_hash_remove_category(uuhash, cnode) #else void* uget_uri_hash_new (void); void uget_uri_hash_free (void* uuhash); int uget_uri_hash_find (void* uuhash, const char* uri); void uget_uri_hash_add (void* uuhash, const char* uri); void uget_uri_hash_remove (void* uuhash, const char* uri); void uget_uri_hash_add_download (void* uuhash, UgInfo* dnode_info); void uget_uri_hash_remove_download (void* uuhash, UgInfo* dnode_info); void uget_uri_hash_add_category (void* uuhash, UgetNode* cnode); void uget_uri_hash_remove_category (void* uuhash, UgetNode* cnode); #endif // End of NO_URI_HASH #ifdef __cplusplus } #endif #endif // End of UGET_HASH_H uget-2.2.3/uget/UgetEvent.h0000664000175000017500000001204313602733704012435 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_EVENT_H #define UGET_EVENT_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetEvent UgetEvent; typedef enum { UGET_EVENT_EMPTY = 0, // message log UGET_EVENT_WARNING, UGET_EVENT_NORMAL, // e.g. connecting to host UGET_EVENT_ERROR, // plug-in notifition UGET_EVENT_STOP, UGET_EVENT_START, UGET_EVENT_COMPLETED, // Download completed UGET_EVENT_UPLOADING, // Uploading UGET_EVENT_STOP_UPLOADING, // events for uget_task_dispatch() UGET_EVENT_NAME, // UgetNode's name changed } UgetEventType; typedef enum { UGET_EVENT_NORMAL_CUSTOM = 0, // must be 0 UGET_EVENT_NORMAL_CONNECT, UGET_EVENT_NORMAL_TRANSMIT, UGET_EVENT_NORMAL_RETRY, UGET_EVENT_NORMAL_COMPLETE, // download completed UGET_EVENT_NORMAL_FINISH, // completed, it will not be used in future. // resumable UGET_EVENT_NORMAL_RESUMABLE, UGET_EVENT_NORMAL_NOT_RESUMABLE, } UgetEventNormal; typedef enum { UGET_EVENT_WARNING_CUSTOM = 0, // must be 0 UGET_EVENT_WARNING_FILE_RENAME_FAILED, } UgetEventWarning; typedef enum { UGET_EVENT_ERROR_CUSTOM = 0, // must be 0 UGET_EVENT_ERROR_CONNECT_FAILED, UGET_EVENT_ERROR_FOLDER_CREATE_FAILED, UGET_EVENT_ERROR_FILE_CREATE_FAILED, UGET_EVENT_ERROR_FILE_OPEN_FAILED, UGET_EVENT_ERROR_THREAD_CREATE_FAILED, UGET_EVENT_ERROR_INCORRECT_SOURCE, UGET_EVENT_ERROR_OUT_OF_RESOURCE, // disk full or out of memory UGET_EVENT_ERROR_NO_OUTPUT_FILE, UGET_EVENT_ERROR_NO_OUTPUT_SETTING, UGET_EVENT_ERROR_TOO_MANY_RETRIES, UGET_EVENT_ERROR_UNSUPPORTED_SCHEME, UGET_EVENT_ERROR_UNSUPPORTED_PROTOCOL = UGET_EVENT_ERROR_UNSUPPORTED_SCHEME, UGET_EVENT_ERROR_UNSUPPORTED_FILE, UGET_EVENT_ERROR_POST_FILE_NOT_FOUND, UGET_EVENT_ERROR_COOKIE_FILE_NOT_FOUND, // plug-in error code // UGET_EVENT_ERROR_PLUGIN_INITIALIZE_FAILED = 10000, } UgetEventError; extern const UgEntry UgetEventEntry[]; // ---------------------------------------------------------------------------- // UgetEvent: It can store in UgetLog. struct UgetEvent { UG_LINK_MEMBERS (UgetEvent, UgetEvent, self); /* // ------ UgLink members ------ UgetEvent* self; UgetEvent* next; UgetEvent* prev; */ int type; // UgetEventType time_t time; // date & time (seconds) char* string; // User readable string or name parameter for UGET_EVENT_RENAME. // extra data union { void* data; int code; // UGET_EVENT_ERROR, UGET_EVENT_WARNING, UGET_EVENT_NORMAL } value; // } value[3]; }; UgetEvent* uget_event_new (UgetEventType type, ...); void uget_event_free (UgetEvent* event); #define uget_event_new_error(code, string) uget_event_new (UGET_EVENT_ERROR, code, string) #define uget_event_new_normal(code, string) uget_event_new (UGET_EVENT_NORMAL, code, string) #define uget_event_new_warning(code, string) uget_event_new (UGET_EVENT_WARNING, code, string) /* UgetEvent* uget_event_new_error (int code, const char* string); UgetEvent* uget_event_new_normal (int code, const char* string); UgetEvent* uget_event_new_warning (int code, const char* string); */ #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { // This one is for directly use only. You can NOT derived it. struct Event : UgetEvent {}; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_EVENT_H uget-2.2.3/uget/UgetPluginAgent.h0000664000175000017500000001324413602733704013575 00000000000000/* * * Copyright (C) 2016-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_PLUGIN_AGENT_H #define UGET_PLUGIN_AGENT_H #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetPluginAgent UgetPluginAgent; typedef enum { UGET_PLUGIN_AGENT_GLOBAL = UGET_PLUGIN_GLOBAL_DERIVED, // begin UGET_PLUGIN_AGENT_GLOBAL_PLUGIN, // set parameter = (UgetPluginInfo*) UGET_PLUGIN_AGENT_GLOBAL_DERIVED, } UgetPluginAgentGlobalCode; /* ---------------------------------------------------------------------------- UgetPluginAgent: It derived from UgetPlugin. It use other(curl/aria2) plug-in to download file. UgType | `--- UgetPlugin | `--- UgetPluginAgent */ #define UGET_PLUGIN_AGENT_MEMBERS \ UGET_PLUGIN_MEMBERS; \ UgInfo* target_info; \ UgetPlugin* target_plugin; \ int limit[2]; \ uint8_t limit_changed:1; \ uint8_t paused:1; \ uint8_t stopped:1 struct UgetPluginAgent { UGET_PLUGIN_AGENT_MEMBERS; /* // ------ UgType members ------ const UgetPluginInfo* info; // ------ UgetPlugin members ------ UgetEvent* messages; UgMutex mutex; int ref_count; // ------ UgetPluginAgent members ------ // This plug-in use other plug-in to download files, // so we need extra UgetPlugin and UgInfo. // plugin->target_info is a copy of UgInfo that store in UgetApp UgInfo* target_info; // target_plugin use target_info to download UgetPlugin* target_plugin; // speed limit control // limit[0] = download speed limit // limit[1] = upload speed limit int limit[2]; uint8_t limit_changed:1; // speed limit changed by user or program // control flags uint8_t paused:1; // paused by user or program uint8_t stopped:1; // all downloading thread are stopped */ }; #ifdef __cplusplus } #endif // global functions ------------------- UgetResult uget_plugin_agent_global_init (void); void uget_plugin_agent_global_ref (void); void uget_plugin_agent_global_unref (void); UgetResult uget_plugin_agent_global_set (int option, void* parameter); UgetResult uget_plugin_agent_global_get (int option, void* parameter); // instance functions ----------------- void uget_plugin_agent_init (UgetPluginAgent* plugin); void uget_plugin_agent_final (UgetPluginAgent* plugin); int uget_plugin_agent_ctrl (UgetPluginAgent* plugin, int code, void* data); int uget_plugin_agent_ctrl_speed (UgetPluginAgent* plugin, int* speed); // sync functions --------------------- // sync common data (include speed limit) between 'common' and 'target' // if parameter 'target' is NULL, it get/alloc 'target' from plugin->target_info void uget_plugin_agent_sync_common (UgetPluginAgent* plugin, UgetCommon* common, UgetCommon* target); // sync progress data from 'target' to 'progress' // if parameter 'target' is NULL, it get/alloc 'target' from plugin->target_info void uget_plugin_agent_sync_progress (UgetPluginAgent* plugin, UgetProgress* progress, UgetProgress* target); // thread functions ------------------- int uget_plugin_agent_start (UgetPluginAgent* plugin, UgThreadFunc thread_func); // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct PluginAgentMethod : Uget::PluginMethod { inline void syncCommon(UgetCommon* common, UgetCommon* target) { uget_plugin_agent_sync_common((UgetPluginAgent*)this, common, target); } inline void syncProgress(UgetProgress* progress, UgetProgress* target) { uget_plugin_agent_sync_progress((UgetPluginAgent*)this, progress, target); } }; // This one is for directly use only. You can NOT derived it. struct PluginAgent : Uget::PluginAgentMethod, UgetPluginAgent {}; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_PLUGIN_AGENT_H uget-2.2.3/uget/UgetPlugin.c0000664000175000017500000001245313602733704012612 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include // ------------------------------------ // UgetPluginInfo global functions UgetPlugin* uget_plugin_new(const UgetPluginInfo* info) { UgetPlugin* plugin; plugin = ug_malloc0(info->size); plugin->info = info; ug_mutex_init(&plugin->mutex); plugin->ref_count = 1; info->init(plugin); return plugin; } UgetResult uget_plugin_global_set(const UgetPluginInfo* info, int option, void* parameter) { UgetPluginGlobalFunc global_set; global_set = info->global_set; if (global_set) return global_set(option, parameter); return UGET_RESULT_UNSUPPORT; } UgetResult uget_plugin_global_get(const UgetPluginInfo* info, int option, void* parameter) { UgetPluginGlobalFunc global_get; global_get = info->global_get; if (global_get) return global_get(option, parameter); return UGET_RESULT_UNSUPPORT; } int uget_plugin_match(const UgetPluginInfo* info, UgUri* uuri) { UgetResult res; const char* str; int len; int matched_count = 0; if (info == NULL) return 0; if (info->hosts && (len = ug_uri_part_host(uuri, &str))) { if (ug_uri_match_hosts(uuri, (char**)info->hosts) >= 0) { matched_count++; // Don't match this plug-in if it is for specify host. res = uget_plugin_global_get(info, UGET_PLUGIN_GLOBAL_MATCH, (void*) uuri->uri); if (res == UGET_RESULT_FAILED) matched_count = -1; else if (res == UGET_RESULT_OK) matched_count = 2; } } if (info->schemes && (len = ug_uri_part_scheme(uuri, &str))) { if (ug_uri_match_schemes(uuri, (char**)info->schemes) >= 0) matched_count++; } if (info->file_exts && (len = ug_uri_part_file_ext(uuri, &str))) { if (ug_uri_match_file_exts(uuri, (char**)info->file_exts) >= 0) matched_count++; } return matched_count; } // ------------------------------------ // UgetPlugin functions //void uget_plugin_init(UgetPlugin* plugin); #define uget_plugin_init ug_type_init //void uget_plugin_final(UgetPlugin* plugin); #define uget_plugin_final ug_type_final void uget_plugin_ref(UgetPlugin* plugin) { plugin->ref_count++; } void uget_plugin_unref(UgetPlugin* plugin) { UgetEvent* curr; UgetEvent* next; if (--plugin->ref_count == 0) { uget_plugin_final(plugin); ug_mutex_clear(&plugin->mutex); // free events for (curr = plugin->events; curr; curr = next) { next = curr->next; uget_event_free(curr); } // free plug-in ug_free(plugin); } } int uget_plugin_accept(UgetPlugin* plugin, UgInfo* info) { UgetPluginSyncFunc accept; accept = plugin->info->accept; if (accept) return accept(plugin, info); return FALSE; } int uget_plugin_sync(UgetPlugin* plugin, UgInfo* info) { UgetPluginSyncFunc sync; sync = plugin->info->sync; if (sync) return sync(plugin, info); return FALSE; } int uget_plugin_ctrl(UgetPlugin* plugin, int code, void* data) { UgetPluginCtrlFunc ctrl; ctrl = plugin->info->ctrl; if (ctrl) return ctrl(plugin, code, data); return FALSE; } int uget_plugin_get_state(UgetPlugin* plugin) { int is_active; uget_plugin_ctrl(plugin, UGET_PLUGIN_GET_STATE, &is_active); return is_active; } void uget_plugin_post(UgetPlugin* plugin, UgetEvent* message) { ug_mutex_lock(&plugin->mutex); if (plugin->events) plugin->events->prev = message; message->next = plugin->events; plugin->events = message; ug_mutex_unlock(&plugin->mutex); } UgetEvent* uget_plugin_pop(UgetPlugin* plugin) { UgetEvent* curr; UgetEvent* next; ug_mutex_lock(&plugin->mutex); curr = plugin->events; plugin->events = NULL; ug_mutex_unlock(&plugin->mutex); // revert while (curr) { next = curr->next; curr->next = curr->prev; curr->prev = next; if (next == NULL) break; curr = next; } return curr; } uget-2.2.3/uget/UgetTask.h0000664000175000017500000001001013602733704012246 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_TASK_H #define UGET_TASK_H #include #include #include #include #include #include #define UGET_TASK_N_WATCH 4 #ifdef __cplusplus extern "C" { #endif /* UgetTask - match/manage UgetNode and UgetPlugin - adjust/limit speed */ typedef struct UgetTask UgetTask; typedef int (*UgetWatchFunc) (void* instance, UgetEvent* msg, UgetNode* node, void* data); // ---------------------------------------------------------------------------- // UgetTask functions void uget_task_init(UgetTask* task); void uget_task_final(UgetTask* task); int uget_task_add(UgetTask* task, UgetNode* node, const UgetPluginInfo* pinfo); int uget_task_remove(UgetTask* task, UgetNode* node); void uget_task_remove_all(UgetTask* task); void uget_task_dispatch(UgetTask* task); void uget_task_add_watch(UgetTask* task, UgetWatchFunc func, void* data); void uget_task_set_speed(UgetTask* task, int dl_speed, int ul_speed); void uget_task_adjust_speed(UgetTask* task); #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // UgetTask structure struct UgetTask { UG_SLINKS_MEMBERS; /* // ------ UgSLinks members ------ UgSLink* at; int length; int allocated; int element_size; int n_links; UgSLink* used; UgSLink* freed; */ struct { UgetWatchFunc func; void* data; } watch[UGET_TASK_N_WATCH]; struct { int upload; int download; } speed, limit; #ifdef __cplusplus // C++11 standard-layout inline void init(void) { uget_task_init((UgetTask*) this); } inline void final(void) { uget_task_final((UgetTask*) this); } inline int add(UgetNode* node, UgetPluginInfo* info) { return uget_task_add((UgetTask*) this, node, info); } inline void remove(UgetNode* node) { uget_task_remove((UgetTask*) this, node); } inline void dispatch(void) { uget_task_dispatch((UgetTask*) this); } inline void setSpeed(int dl_speed, int ul_speed) { uget_task_set_speed(this, dl_speed, ul_speed); } inline void adjustSpeed(void) { uget_task_adjust_speed(this); } #endif // __cplusplus }; // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { typedef struct UgetTask Task; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_TASK_H uget-2.2.3/uget/UgetPluginEmpty.h0000664000175000017500000000640013602733704013631 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_PLUGIN_EMPTY_H #define UGET_PLUGIN_EMPTY_H #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetPluginEmpty UgetPluginEmpty; extern const UgetPluginInfo* UgetPluginEmptyInfo; typedef enum { UGET_PLUGIN_EMPTY_GLOBAL = UGET_PLUGIN_GLOBAL_DERIVED, // begin // your setting ID... } UgetPluginEmptyCode; /* ---------------------------------------------------------------------------- UgetPluginEmpty: an empty plug-in. It derived from UgetPlugin. UgType | `--- UgetPlugin | `--- UgetPluginEmpty */ struct UgetPluginEmpty { UGET_PLUGIN_MEMBERS; /* // ------ UgType members ------ const UgetPluginInfo* info; // ------ UgetPlugin members ------ UgetEvent* messages; UgMutex mutex; int ref_count; */ UgetCommon* common; // speed limit control // limit[0] = download speed limit // limit[1] = upload speed limit int limit[2]; uint8_t limit_changed; }; #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { const PluginInfo* const PluginEmptyInfo = (const PluginInfo*) UgetPluginEmptyInfo; // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct PluginEmptyMethod : PluginMethod {}; // This one is for directly use only. You can NOT derived it. struct PluginEmpty : PluginEmptyMethod, UgetPluginEmpty { inline void* operator new(size_t size) { return uget_plugin_new(PluginEmptyInfo); } }; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_PLUGIN_EMPTY_H uget-2.2.3/uget/UgetAria2.c0000664000175000017500000005146013602733704012313 00000000000000/* * * Copyright (C) 2011-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #if defined _WIN32 || defined _WIN64 #include #include // ShellExecuteW() #else #include // fork(), execlp() #include #include #endif // _WIN32 || _WIN64 #define RPC_URI "http://localhost:6800/jsonrpc" #define RPC_BATCH_LEN 5 #define RPC_INTERVAL 500 #define ARIA2_PATH "aria2c" #define ARIA2_ARGS "--enable-rpc=true -D --check-certificate=false" #if defined _WIN32 || defined _WIN64 #define ug_sleep Sleep #else #define ug_sleep(millisecond) usleep (millisecond * 1000) #endif #ifdef _MSC_VER #define strcasecmp stricmp #define strncasecmp strnicmp #endif // ---------------------------------------------------------------------------- // UgetAria2Thread struct UgetAria2Thread { UgThread thread; UgetAria2* uaria2; UgJsonrpcArray queuing; UgJsonrpcArray request; UgJsonrpcArray response; UgJsonrpcCurl json; int finalized; }; static UgThreadResult uget_aria2_thread (UgetAria2Thread* uathread); static UgetAria2Thread* uget_aria2_thread_new (UgetAria2* uaria2) { UgetAria2Thread* uat; UgThread thread; uat = ug_malloc (sizeof (UgetAria2Thread)); uat->uaria2 = uaria2; ug_jsonrpc_array_init (&uat->queuing, 16); ug_jsonrpc_array_init (&uat->request, 16); ug_jsonrpc_array_init (&uat->response, 16); ug_jsonrpc_curl_init (&uat->json); ug_jsonrpc_curl_set_url (&uat->json, uaria2->uri); uat->finalized = FALSE; uget_aria2_ref (uaria2); ug_thread_create (&thread, (UgThreadFunc) uget_aria2_thread, uat); ug_thread_unjoin (&thread); return uat; } static void uget_aria2_thread_free (UgetAria2Thread* uat) { ug_jsonrpc_array_clear (&uat->queuing, TRUE); ug_jsonrpc_array_clear (&uat->request, TRUE); ug_jsonrpc_array_clear (&uat->response, TRUE); ug_jsonrpc_curl_final (&uat->json); ug_free (uat); } static int uget_aria2_thread_queuing (UgetAria2Thread* uathread) { UgetAria2* uaria2; int length; int index; index = 0; uaria2 = uathread->uaria2; length = uathread->queuing.length; ug_mutex_lock (&uaria2->mutex); ug_array_alloc (&uathread->queuing, uaria2->queuing.length); while (index < uaria2->queuing.length) uathread->queuing.at[length++] = uaria2->queuing.at[index++]; uaria2->queuing.length = 0; ug_mutex_unlock (&uaria2->mutex); return length; } static void uget_aria2_match_response (UgetAria2Thread* uathread) { UgetAria2* uaria2; UgJsonrpcObject* req; UgJsonrpcObject* res; int length; int index_req, index_res; uaria2 = uathread->uaria2; length = uathread->request.length; for (index_req = 0; index_req < length; index_req++) { req = uathread->request.at[index_req]; res = ug_jsonrpc_array_find (&uathread->response, &req->id, &index_res); if (res) uathread->response.at[index_res] = NULL; uathread->request.at[index_req] = NULL; if (req->id.type == UG_VALUE_NONE) { uget_aria2_recycle (uaria2, req); uget_aria2_recycle (uaria2, res); } else { ug_mutex_lock (&uaria2->completed_mutex); ug_slinks_add (&uaria2->requested, req); ug_slinks_add (&uaria2->responsed, res); ug_mutex_unlock (&uaria2->completed_mutex); } } uathread->request.length = 0; uaria2->completed_changed++; length = uathread->response.length; for (index_res = 0; index_res < length; index_res++) { res = uathread->response.at[index_res]; if (res) uget_aria2_recycle (uaria2, res); } uathread->response.length = 0; } static int uget_aria2_thread_request (UgetAria2Thread* uathread) { UgJsonrpcObject* ujobj; UgetAria2* uaria2; int index; int length; int limit; int counts; uaria2 = uathread->uaria2; limit = uaria2->batch_len + uaria2->batch_additional; for (index = 0; index < uathread->queuing.length; index++) { length = uathread->queuing.length - index; if (length > limit) length = limit; ug_array_alloc (&uathread->request, length); for (counts = 0; counts < length; counts++) { ujobj = uathread->queuing.at[index++]; uathread->request.at[counts] = ujobj; if (ujobj->id.type != UG_VALUE_NONE) { ujobj = uget_aria2_alloc (uaria2, FALSE, FALSE); *(void**) ug_array_alloc (&uathread->response, 1) = ujobj; } } // JSON-RPC counts = ug_jsonrpc_call_batch (&uathread->json.rpc, &uathread->request, &uathread->response); if (counts == -1) { uaria2->error = TRUE; uaria2->connect_fail = TRUE; } uget_aria2_match_response (uathread); } uathread->queuing.length = 0; return index; } static UgJsonrpcObject* add_limit_request (UgetAria2* uaria2) { UgJsonrpcObject* jobj; UgValue* vobj; UgValue* value; jobj = uget_aria2_alloc (uaria2, TRUE, TRUE); jobj->method_static = "aria2.changeGlobalOption"; if (jobj->params.type == UG_VALUE_NONE) ug_value_init_array (&jobj->params, 2); vobj = ug_value_alloc (&jobj->params, 1); ug_value_init_object (vobj, 2); value = ug_value_alloc (vobj, 1); value->name = "max-overall-download-limit"; value->type = UG_VALUE_STRING; value->c.string = ug_strdup_printf ("%dK", uaria2->limit.download / 1024); value = ug_value_alloc (vobj, 1); value->name = "max-overall-upload-limit"; value->type = UG_VALUE_STRING; value->c.string = ug_strdup_printf ("%dK", uaria2->limit.upload / 1024); // max-concurrent-downloads must >= 1 // value = ug_value_alloc (vobj, 1); // value->name = "max-concurrent-downloads"; // value->type = UG_VALUE_STRING; // value->c.string = ug_strdup_printf ("%u", uaria2->limit.connections); uget_aria2_request (uaria2, jobj); return jobj; } static void recycle_limit_request (UgetAria2* uaria2, UgJsonrpcObject* jreq) { UgJsonrpcObject* jres; jres = uget_aria2_respond (uaria2, jreq); ug_value_foreach (&jreq->params, ug_value_set_name, NULL); uget_aria2_recycle (uaria2, jreq); uget_aria2_recycle (uaria2, jres); } static UgJsonrpcObject* add_speed_request (UgetAria2* uaria2) { UgJsonrpcObject* jobj; jobj = uget_aria2_alloc (uaria2, TRUE, TRUE); jobj->method_static = "aria2.getGlobalStat"; uget_aria2_request (uaria2, jobj); return jobj; } static void recycle_speed_request (UgetAria2* uaria2, UgJsonrpcObject* jreq) { UgJsonrpcObject* jres; UgValue* value; jres = uget_aria2_respond (uaria2, jreq); if (jres && jres->error.code == 0) { ug_value_sort_name (&jres->result); value = ug_value_find_name (&jres->result, "downloadSpeed"); uaria2->speed.download = ug_value_get_int (value); value = ug_value_find_name (&jres->result, "uploadSpeed"); uaria2->speed.upload = ug_value_get_int (value); } uget_aria2_recycle (uaria2, jreq); uget_aria2_recycle (uaria2, jres); } static UgThreadResult uget_aria2_thread (UgetAria2Thread* uathread) { UgetAria2* uaria2; UgJsonrpcObject* jreq = NULL; UgJsonrpcObject* jobj = NULL; UgJsonrpcObject* jreq_shutdown = NULL; int counts; uaria2 = uathread->uaria2; // temp.index = ug_jsonrpc_array_find_ptr (uaria2); for (counts = 0; ; counts++) { // finalize if (uathread->finalized == TRUE) { // shutdown request if (uaria2->shutdown && jreq_shutdown == NULL) { jreq_shutdown = uget_aria2_alloc (uaria2, TRUE, TRUE); jreq_shutdown->method_static = "aria2.shutdown"; uget_aria2_request (uaria2, jreq_shutdown); } if (uaria2->queuing.length == 0) break; } // URI changed ug_mutex_lock (&uaria2->mutex); if (uaria2->uri_changed) { uaria2->uri_changed = FALSE; ug_jsonrpc_curl_set_url (&uathread->json, uaria2->uri); } ug_mutex_unlock (&uaria2->mutex); // additional request if (uaria2->limit_count_prev != uaria2->limit_count) { uaria2->limit_count_prev = uaria2->limit_count; uaria2->limit_required = TRUE; jreq = add_limit_request (uaria2); uaria2->batch_additional++; } if (uaria2->speed_required && (counts & 2) == 2) { jobj = add_speed_request (uaria2); uaria2->batch_additional++; } // get requests from queue if (uget_aria2_thread_queuing (uathread) == 0) { // default: sleep 0.5 second ug_sleep (uaria2->polling_interval); continue; } // send requests & get responses uget_aria2_thread_request (uathread); // recycle additional request if (uaria2->limit_required) { uaria2->limit_required = FALSE; recycle_limit_request (uaria2, jreq); uaria2->batch_additional--; } if (uaria2->speed_required && (counts & 2) == 2) { recycle_speed_request (uaria2, jobj); uaria2->batch_additional--; } } // shutdown response if (jreq_shutdown) { jobj = uget_aria2_respond (uaria2, jreq_shutdown); uget_aria2_recycle (uaria2, jreq_shutdown); uget_aria2_recycle (uaria2, jobj); } uget_aria2_thread_free (uathread); uget_aria2_unref (uaria2); return UG_THREAD_RESULT; } // ---------------------------------------------------------------------------- // UgetAria2 UgetAria2* uget_aria2_new (void) { UgetAria2* uaria2; UgValue* value; UgValue* keys; #if defined _WIN32 || defined _WIN64 WSADATA WSAData; WSAStartup (MAKEWORD (2, 2), &WSAData); #endif // _WIN32 || _WIN64 curl_global_init (CURL_GLOBAL_ALL); uaria2 = ug_malloc0 (sizeof (UgetAria2)); uaria2->ref_count = 1; uaria2->batch_len = RPC_BATCH_LEN; uaria2->polling_interval = RPC_INTERVAL; uaria2->speed_required = FALSE; uaria2->limit_required = FALSE; uaria2->uri = ug_strdup (RPC_URI); uaria2->path = ug_strdup (ARIA2_PATH); uaria2->args = ug_strdup (ARIA2_ARGS); ug_mutex_init (&uaria2->mutex); ug_mutex_init (&uaria2->completed_mutex); ug_jsonrpc_array_init (&uaria2->queuing, 16); ug_jsonrpc_array_init (&uaria2->recycled, 16); ug_slinks_init (&uaria2->requested, 16); ug_slinks_init (&uaria2->responsed, 16); uaria2->completed_changed = 0; ug_value_init_array (&uaria2->status_keys, 16); keys = &uaria2->status_keys; value = ug_value_alloc (keys, 1); value->type = UG_VALUE_STRING; value->c.string = "status"; value = ug_value_alloc (keys, 1); value->type = UG_VALUE_STRING; value->c.string = "totalLength"; value = ug_value_alloc (keys, 1); value->type = UG_VALUE_STRING; value->c.string = "completedLength"; value = ug_value_alloc (keys, 1); value->type = UG_VALUE_STRING; value->c.string = "uploadLength"; value = ug_value_alloc (keys, 1); value->type = UG_VALUE_STRING; value->c.string = "downloadSpeed"; value = ug_value_alloc (keys, 1); value->type = UG_VALUE_STRING; value->c.string = "uploadSpeed"; value = ug_value_alloc (keys, 1); value->type = UG_VALUE_STRING; value->c.string = "errorCode"; value = ug_value_alloc (keys, 1); value->type = UG_VALUE_STRING; value->c.string = "files"; value = ug_value_alloc (keys, 1); value->type = UG_VALUE_STRING; value->c.string = "followedBy"; return uaria2; } void uget_aria2_ref (UgetAria2* uaria2) { uaria2->ref_count++; } void uget_aria2_unref (UgetAria2* uaria2) { if (--uaria2->ref_count == 0) { ug_jsonrpc_array_clear (&uaria2->queuing, TRUE); ug_jsonrpc_array_clear (&uaria2->recycled, TRUE); ug_slinks_foreach (&uaria2->requested, (void*)ug_jsonrpc_object_free, NULL); ug_slinks_foreach (&uaria2->responsed, (void*)ug_jsonrpc_object_free, NULL); ug_slinks_final (&uaria2->requested); ug_slinks_final (&uaria2->responsed); ug_value_foreach (&uaria2->status_keys, ug_value_set_string, NULL); ug_value_clear (&uaria2->status_keys); ug_mutex_clear (&uaria2->completed_mutex); ug_mutex_clear (&uaria2->mutex); ug_free (uaria2->uri); ug_free (uaria2->path); ug_free (uaria2->args); ug_free (uaria2); curl_global_cleanup (); #if defined _WIN32 || defined _WIN64 WSACleanup (); #endif // _WIN32 || _WIN64 } } void uget_aria2_start_thread (UgetAria2* uaria2) { if (uaria2->thread == NULL) uaria2->thread = uget_aria2_thread_new (uaria2); } void uget_aria2_stop_thread (UgetAria2* uaria2) { uaria2->thread->finalized = TRUE; uaria2->thread = NULL; } void uget_aria2_set_uri (UgetAria2* uaria2, const char* uri) { UgUri upart; int len; if (strcmp (uaria2->uri, uri) != 0) { ug_uri_init (&upart, uri); uaria2->uri_remote = TRUE; if (upart.host != -1) { len = ug_uri_host (&upart, NULL); // localhost // IPv6 "::1" // IPv4 "127.0.0.1" if (strncmp (uri + upart.host, "::1", len) == 0 || strncmp (uri + upart.host, "127.0.0.1", len) == 0 || strncasecmp (uri + upart.host, "localhost", len) == 0) { uaria2->uri_remote = FALSE; } } ug_mutex_lock (&uaria2->mutex); ug_free (uaria2->uri); uaria2->uri = ug_strdup (uri); uaria2->uri_changed = TRUE; ug_mutex_unlock (&uaria2->mutex); } } void uget_aria2_set_path (UgetAria2* uaria2, const char* path) { // ug_mutex_lock (&uaria2->mutex); ug_free (uaria2->path); uaria2->path = (path) ? ug_strdup (path) : NULL; // ug_mutex_unlock (&uaria2->mutex); } void uget_aria2_set_args (UgetAria2* uaria2, const char* args) { // ug_mutex_lock (&uaria2->mutex); ug_free (uaria2->args); uaria2->args = (args) ? ug_strdup (args) : NULL; // ug_mutex_unlock (&uaria2->mutex); } void uget_aria2_set_token (UgetAria2* uaria2, const char* token) { ug_mutex_lock (&uaria2->mutex); ug_free (uaria2->token); uaria2->token = (token) ? ug_strdup (token) : NULL; ug_mutex_unlock (&uaria2->mutex); } void uget_aria2_set_speed (UgetAria2* uaria2, int dl_speed, int ul_speed) { uaria2->limit.download = dl_speed; uaria2->limit.upload = ul_speed; uaria2->limit_count++; } #ifdef __ANDROID__ #if 1 // __ANDROID__ int uget_aria2_launch (UgetAria2* uaria2) { return uaria2->launched; } #else typedef struct { UgetAria2* uaria2; char cmd[1]; } Aria2LaunchData; static UgThreadResult aria2_launch_thread (Aria2LaunchData* uald) { int result; result = system (uald->cmd); if (result == -1) uald->uaria2->launched = FALSE; else uald->uaria2->launched = TRUE; ug_free (uald); return UG_THREAD_RESULT; } int uget_aria2_launch (UgetAria2* uaria2) { Aria2LaunchData* uald; UgThread thread; uald = ug_malloc (sizeof (Aria2LaunchData) + strlen (uaria2->path) + strlen (uaria2->args) + 1); uald->uaria2 = uaria2; uald->cmd[0] = 0; strcat (uald->cmd, uaria2->path); strcat (uald->cmd, " "); strcat (uald->cmd, uaria2->args); ug_thread_create (&thread, (UgThreadFunc)aria2_launch_thread, uald); ug_thread_unjoin (&thread); return uaria2->launched; } #endif // __ANDROID__ #elif (defined _WIN32 || defined _WIN64) int uget_aria2_launch (UgetAria2* uaria2) { uint16_t* path_utf16; uint16_t* args_utf16; int result; if (uaria2->launched == TRUE) return TRUE; if (uaria2->path == NULL || uaria2->args == NULL) return FALSE; // ug_mutex_lock (&uaria2->mutex); path_utf16 = ug_utf8_to_utf16 (uaria2->path, -1, NULL); args_utf16 = ug_utf8_to_utf16 (uaria2->args, -1, NULL); // ug_mutex_unlock (&uaria2->mutex); result = (int)ShellExecuteW (NULL, L"open", path_utf16, args_utf16, NULL, SW_HIDE); ug_free (args_utf16); ug_free (path_utf16); if (result > 32) { uaria2->launched = TRUE; return TRUE; } else { uaria2->error = UGET_ARIA2_ERROR_LAUNCH; return FALSE; } } #else int uget_aria2_launch (UgetAria2* uaria2) { char** argv; int temp; int execpipe[2]; pid_t pid; if (uaria2->launched == TRUE) return TRUE; if (uaria2->path == NULL || uaria2->args == NULL) return FALSE; argv = ug_argv_from_cmd (uaria2->args, NULL, 1); argv[0] = uaria2->path; pipe (execpipe); // close on exec fcntl (execpipe[1], F_SETFD, fcntl (execpipe[1], F_GETFD) | FD_CLOEXEC); pid = fork(); if (pid == -1) { // fork failed temp = -1; } else if (pid == 0) { // child process, [0] input, [1] output close (execpipe[0]); // on success, never returns execvp (uaria2->path, argv); temp = errno; write (execpipe[1], &temp, sizeof (temp)); // doesn't matter what you exit with exit(0); } else { // parent process, [0] input, [1] output close (execpipe[1]); // if exec failed, read the child's errno value if (read (execpipe[0], &temp, sizeof(temp)) == sizeof(temp)) temp = -1; } ug_argv_free (argv); // parent process if (temp == -1) uaria2->launched = FALSE; else uaria2->launched = TRUE; return uaria2->launched; } #endif // _WIN32 || _WIN64 void uget_aria2_shutdown (UgetAria2* uaria2) { UgJsonrpcObject* jreq; UgJsonrpcObject* jres; jreq = uget_aria2_alloc (uaria2, TRUE, TRUE); jreq->method_static = "aria2.shutdown"; uget_aria2_request (uaria2, jreq); jres = uget_aria2_respond (uaria2, jreq); uget_aria2_recycle (uaria2, jreq); uget_aria2_recycle (uaria2, jres); } UgJsonrpcObject* uget_aria2_alloc (UgetAria2* uaria2, int is_request, int has_response) { UgJsonrpcObject* result; UgValue* rpc_token = NULL; ug_mutex_lock (&uaria2->mutex); if (uaria2->recycled.length == 0) result = ug_jsonrpc_object_new (); else result = uaria2->recycled.at[--uaria2->recycled.length]; ug_mutex_unlock (&uaria2->mutex); // RPC authorization secret token (aria2 v1.18.4) if (is_request) { ug_mutex_lock (&uaria2->mutex); if (uaria2->token) { ug_value_init_array (&result->params, 4); rpc_token = ug_value_alloc (&result->params, 1); rpc_token->type = UG_VALUE_STRING; rpc_token->c.string = ug_malloc (strlen (uaria2->token) + 7); // "token:" rpc_token->c.string[0] = 0; strcat (rpc_token->c.string, "token:"); strcat (rpc_token->c.string, uaria2->token); } ug_mutex_unlock (&uaria2->mutex); } if (has_response) result->id.type = UG_VALUE_INT; return result; } void uget_aria2_request (UgetAria2* uaria2, UgJsonrpcObject* request) { ug_mutex_lock (&uaria2->mutex); *(UgJsonrpcObject**)ug_array_alloc (&uaria2->queuing, 1) = request; ug_mutex_unlock (&uaria2->mutex); } UgJsonrpcObject* uget_aria2_respond (UgetAria2* uaria2, UgJsonrpcObject* request) { UgJsonrpcObject* response = NULL; UgSLink* prev_response; UgSLink* prev; UgSLink* link = NULL; int completed_changed = 0; while (link == NULL) { while (completed_changed == uaria2->completed_changed) { // default: sleep 0.5 second ug_sleep (uaria2->polling_interval); continue; } ug_mutex_lock (&uaria2->completed_mutex); link = ug_slinks_find (&uaria2->requested, request, &prev); if (link) { // remove request if (prev) prev_response = uaria2->responsed.at + (prev - uaria2->requested.at); else prev_response = NULL; // get response & remove it response = (UgJsonrpcObject*) uaria2->responsed.at[link - uaria2->requested.at].data; ug_slinks_remove (&uaria2->requested, request, prev); ug_slinks_remove (&uaria2->responsed, response, prev_response); } completed_changed = uaria2->completed_changed; ug_mutex_unlock (&uaria2->completed_mutex); } return response; } void uget_aria2_recycle (UgetAria2* uaria2, UgJsonrpcObject* jobject) { if (jobject) { ug_jsonrpc_object_clear (jobject); ug_mutex_lock (&uaria2->mutex); *(UgJsonrpcObject**)ug_array_alloc (&uaria2->recycled, 1) = jobject; ug_mutex_unlock (&uaria2->mutex); } } UgValue* uget_aria2_clear_token (UgJsonrpcObject* jobject) { UgValue* rpc_token; if (jobject->params.type == UG_VALUE_ARRAY) { rpc_token = jobject->params.c.array->at; if (rpc_token->type == UG_VALUE_STRING && rpc_token->c.string != NULL && strncmp (rpc_token->c.string, "token:", 6) == 0) { ug_free (rpc_token->c.string); rpc_token->c.string = NULL; rpc_token->type = UG_VALUE_NONE; return rpc_token + 1; } return jobject->params.c.array->at; } return NULL; } uget-2.2.3/uget/Android.mk0000664000175000017500000000142313602733704012267 00000000000000LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libuget LOCAL_CPPFLAGS += -DNDEBUG ## -DNO_RETRY_IF_CONNECT_FAILED LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/../uglib $(LOCAL_PATH)/../curl/include $(LOCAL_PATH)/../openssl/include LOCAL_SRC_FILES := \ UgetSequence.c \ UgetRpc.c \ UgetOption.c \ UgetData.c \ UgetFiles.c \ UgetNode.c \ UgetNode-compare.c \ UgetNode-filter.c \ UgetTask.c \ UgetHash.c \ UgetSite.c \ UgetApp.c \ UgetEvent.c \ UgetPlugin.c \ UgetA2cf.c \ UgetCurl.c \ UgetAria2.c \ UgetMedia.c \ UgetMedia-youtube.c \ UgetPluginCurl.c \ UgetPluginAria2.c \ UgetPluginMedia.c \ UgetPluginAgent.c \ UgetPluginMega.c include $(BUILD_STATIC_LIBRARY) uget-2.2.3/uget/UgetApp.c0000664000175000017500000014026613602733704012100 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #include #ifdef HAVE_CONFIG_H #include #endif #if defined _WIN32 || defined _WIN64 #include // Sleep() #define ug_sleep Sleep #else #include // sleep(), usleep() #define ug_sleep(millisecond) usleep (millisecond * 1000) #endif // _WIN32 || _WIN64 #ifdef HAVE_GLIB #include #else #define _(x) x #endif static struct UgetNodeControl control_real = { // NULL, // struct UgetNodeControl* children; &uget_node_default_notifier, // struct UgetNodeNotifier* notifier; {NULL, FALSE}, // struct UgetNodeSort sort; NULL, // UgetNodeFunc filter; }; static struct UgetNodeControl control_split = { // NULL, // struct UgetNodeControl* children; &uget_node_default_notifier, // struct UgetNodeNotifier* notifier; {NULL, FALSE}, // struct UgetNodeSort sort; uget_node_filter_split, // UgetNodeFunc filter; }; static struct UgetNodeControl control_sorted = { // NULL, // struct UgetNodeControl* children; &uget_node_default_notifier, // struct UgetNodeNotifier* notifier; {NULL, FALSE}, // struct UgetNodeSort sort; uget_node_filter_sorted, // UgetNodeFunc filter; }; static struct UgetNodeControl control_sorted_split = { // NULL, // struct UgetNodeControl* children; &uget_node_default_notifier, // struct UgetNodeNotifier* notifier; {NULL, FALSE}, // struct UgetNodeSort sort; uget_node_filter_split, // UgetNodeFunc filter; }; static struct UgetNodeControl control_mix = { // NULL, // struct UgetNodeControl* children; &uget_node_default_notifier, // struct UgetNodeNotifier* notifier; {NULL, FALSE}, // struct UgetNodeSort sort; uget_node_filter_mix, // UgetNodeFunc filter; }; static struct UgetNodeControl control_mix_split = { // NULL, // struct UgetNodeControl* children; &uget_node_default_notifier, // struct UgetNodeNotifier* notifier; {NULL, FALSE}, // struct UgetNodeSort sort; uget_node_filter_mix_split, // UgetNodeFunc filter; }; void uget_app_init (UgetApp* app) { UgetCommon* common; UgetNode* node; // real and virtual root nodes uget_node_init (&app->real, NULL); uget_node_init (&app->split, &app->real); uget_node_init (&app->sorted, &app->real); uget_node_init (&app->sorted_split, &app->sorted); uget_node_init (&app->mix, &app->real); uget_node_init (&app->mix_split, &app->mix); app->real.control = &control_real; app->split.control = &control_split; app->sorted.control = &control_sorted; app->sorted_split.control = &control_sorted_split; app->mix.control = &control_mix; app->mix_split.control = &control_mix_split; // add virtual category - "All Category" node = uget_node_new (NULL); common = ug_info_realloc(node->info, UgetCommonInfo); common->name = ug_strdup (_("All Category")); uget_node_append (&app->mix, node); uget_task_init (&app->task); ug_array_init (&app->nodes, sizeof (void*), 32); app->uri_hash = NULL; app->config_dir = NULL; // plug-in registry app->plugin_default = NULL; ug_registry_init (&app->plugins); // info registry ug_registry_init (&app->infos); ug_registry_add (&app->infos, UgetCommonInfo); ug_registry_add (&app->infos, UgetFilesInfo); ug_registry_add (&app->infos, UgetProgressInfo); ug_registry_add (&app->infos, UgetProxyInfo); ug_registry_add (&app->infos, UgetHttpInfo); ug_registry_add (&app->infos, UgetFtpInfo); ug_registry_add (&app->infos, UgetLogInfo); ug_registry_add (&app->infos, UgetRelationInfo); ug_registry_add (&app->infos, UgetCategoryInfo); ug_registry_sort (&app->infos); ug_info_set_registry (&app->infos); // counter app->n_error = 0; app->n_moved = 0; app->n_deleted = 0; app->n_completed = 0; } void uget_app_final (UgetApp* app) { ug_array_clear (&app->nodes); uget_task_final (&app->task); uget_app_clear_plugins (app); // clear app->plugins uget_node_clear_children (&app->mix_split); uget_node_clear_children (&app->mix); uget_node_clear_children (&app->sorted_split); uget_node_clear_children (&app->sorted); uget_node_clear_children (&app->split); uget_node_clear_children (&app->real); ug_registry_final (&app->plugins); ug_registry_final (&app->infos); uget_uri_hash_free (app->uri_hash); app->uri_hash = NULL; ug_free(app->config_dir); app->config_dir = NULL; } static UgArrayPtr* uget_app_store_nodes (UgetApp* app, UgetNode* parent) { UgetNode* dnode; UgArrayPtr* array; int index; array = &app->nodes; // array->length = 0; ug_array_alloc (array, parent->n_children); for (index = 0, dnode = parent->children; dnode; dnode = dnode->next) array->at[index++] = dnode->base; return array; } static void uget_app_clear_nodes (UgetApp* app) { app->nodes.length = 0; } static int uget_app_activate (UgetApp* app, UgetNode* cnode, UgetCategory* category) { UgetRelation* relation; UgetNode* dnode; UgetNode* sibling; UgetLog* log; UgArrayPtr* array; int index; // Because this function will change node linking, // program must store active nodes to array. array = uget_app_store_nodes (app, category->active); for (index = 0; index < array->length; index++) { dnode = array->at[index]; uget_node_updated (dnode); relation = ug_info_realloc(dnode->info, UgetRelationInfo); if (relation->group & UGET_GROUP_ACTIVE) { // remove node and insert it again to sort node if (app->mix.control->sort.compare) { sibling = dnode->next; uget_node_remove (cnode, dnode); uget_node_clear_fake (dnode); uget_node_insert (cnode, sibling, dnode); app->n_moved++; } continue; } uget_task_remove (&app->task, dnode); uget_node_remove (cnode, dnode); uget_node_clear_fake (dnode); if (relation->group & UGET_GROUP_COMPLETED) { relation->group |= UGET_GROUP_FINISHED; sibling = category->finished->children; // completed time log = ug_info_realloc (dnode->info, UgetLogInfo); log->completed_time = time(NULL); // get current time app->n_completed++; } else { relation->group |= UGET_GROUP_QUEUING; sibling = category->queuing->children; if (relation->group & UGET_GROUP_ERROR) app->n_error++; } // try to insert download before finished & recycled if (sibling == NULL) sibling = category->finished->children; if (sibling == NULL) sibling = category->recycled->children; // get real sibling if (sibling) sibling = sibling->real; uget_node_insert (cnode, sibling, dnode); app->n_moved++; } uget_app_clear_nodes (app); // clear stored nodes return category->active->n_children; } static void uget_app_queuing (UgetApp* app, UgetNode* cnode, UgetCategory* category) { UgetRelation* relation; UgetNode* dnode; UgArrayPtr* array; int index; // Because uget_app_activate_download() will change node linking, // program must store queuing nodes to array before calling uget_app_activate_download() array = uget_app_store_nodes (app, category->queuing); for (index = 0; index < array->length; index++) { dnode = array->at[index]; if (category->active->n_children >= category->active_limit) break; relation = ug_info_realloc(dnode->info, UgetRelationInfo); if (relation->group & UGET_GROUP_INACTIVE) continue; uget_app_activate_download (app, dnode); app->n_moved++; } uget_app_clear_nodes (app); // clear stored nodes } // return number of active download int uget_app_grow (UgetApp* app, int no_queuing) { UgetCategory* category; UgetNode* cnode; int n_active = 0; // dispatch plug-in event, calc speed uget_task_dispatch (&app->task); // active, queuing, finished, recycled for (cnode = app->real.children; cnode; cnode = cnode->next) { category = ug_info_realloc (cnode->info, UgetCategoryInfo); if (category == NULL) continue; uget_app_activate (app, cnode, category); if (no_queuing == FALSE) uget_app_queuing (app, cnode, category); n_active += category->active->n_children; } return n_active; } int uget_app_trim(UgetApp* app, UgArrayPtr* deleted_nodes) { UgetCategory* category; UgetNode* cnode; UgetNode* dnode; int n_deleted_prev = app->n_deleted; for (cnode = app->real.children; cnode; cnode = cnode->next) { category = ug_info_realloc(cnode->info, UgetCategoryInfo); if (category == NULL) continue; while (category->finished->n_children > category->finished_limit) { dnode = category->finished->last->real; uget_uri_hash_remove_download(app->uri_hash, dnode->info); uget_node_remove(cnode, dnode); uget_node_free(dnode); app->n_deleted++; // add deleted nodes to array if (deleted_nodes) *(void**)ug_array_alloc(deleted_nodes, 1) = dnode; } while (category->recycled->n_children > category->recycled_limit) { dnode = category->recycled->last->real; uget_uri_hash_remove_download(app->uri_hash, dnode->info); uget_node_remove(cnode, dnode); uget_node_free(dnode); app->n_deleted++; // add deleted nodes to array if (deleted_nodes) *(void**)ug_array_alloc(deleted_nodes, 1) = dnode; } } return app->n_deleted - n_deleted_prev; } void uget_app_set_config_dir (UgetApp* app, const char* dir) { ug_free (app->config_dir); app->config_dir = (dir) ? ug_strdup(dir) : NULL; } void uget_app_set_sorting (UgetApp* app, UgCompareFunc compare, int reversed) { UgetNode* node; UgetNode* real; node = app->mix.children; if (app->mix.control->sort.reverse != reversed) { app->mix.control->sort.reverse = reversed; app->mix_split.control->sort.reverse = reversed; app->sorted.control->sort.reverse = reversed; app->sorted_split.control->sort.reverse = reversed; if (app->mix.control->sort.compare == compare && compare) { // reverse first category in app->mix ug_node_reverse ((UgNode*) node); // reverse each category in app->mix_split for (node = app->mix_split.children; node; node = node->next) ug_node_reverse ((UgNode*) node); // reverse each category in app->sorted for (node = app->sorted.children; node; node = node->next) ug_node_reverse ((UgNode*) node); // reverse each category in app->sorted_split for (node = app->sorted_split.children; node; node = node->next) ug_node_reverse ((UgNode*) node); return; } } if (app->mix.control->sort.compare != compare) { app->mix.control->sort.compare = compare; app->mix_split.control->sort.compare = compare; app->sorted.control->sort.compare = compare; app->sorted_split.control->sort.compare = compare; if (compare == NULL) { // reorder first category in app->mix for (real = app->real.last; real; real = real->prev) uget_node_reorder_by_real (node, real); // reorder each category in app->mix_split for (node = app->mix_split.children; node; node = node->next) { uget_node_reorder_by_real (node, NULL); // reorder app->mix by state uget_node_reorder_by_fake (app->mix.children, node); } // reorder each category in app->sorted for (node = app->sorted.children; node; node = node->next) uget_node_reorder_by_real (node, NULL); // reorder each category in app->sorted_split for (node = app->sorted_split.children; node; node = node->next) uget_node_reorder_by_real (node, NULL); } else { // sort first category in app->mix uget_node_sort (node, compare, reversed); // reorder each category in app->mix_split for (node = app->mix_split.children; node; node = node->next) uget_node_reorder_by_real (node, NULL); // sort each category in app->sorted for (node = app->sorted.children; node; node = node->next) uget_node_sort (node, compare, reversed); // reorder each category in app->sorted_split for (node = app->sorted_split.children; node; node = node->next) uget_node_reorder_by_real (node, NULL); } } } void uget_app_set_notification (UgetApp* app, void* data, UgetNodeFunc inserted, UgetNodeFunc removed, UgNotifyFunc updated) { uget_node_default_notifier.inserted = inserted; uget_node_default_notifier.removed = removed; uget_node_default_notifier.updated = updated; uget_node_default_notifier.data = data; } void uget_app_add_category (UgetApp* app, UgetNode* cnode, int save_file) { UgetCategory* category; UgetNode* node; char* path_base; char* path; uget_node_append (&app->real, cnode); uget_uri_hash_add_category (app->uri_hash, cnode); category = ug_info_realloc (cnode->info, UgetCategoryInfo); for (node = cnode->fake; node; node = node->peer) { switch (uget_node_get_group(node)) { case UGET_GROUP_ACTIVE: category->active = node; break; case UGET_GROUP_QUEUING: category->queuing = node; break; case UGET_GROUP_FINISHED: category->finished = node; break; case UGET_GROUP_RECYCLED: category->recycled = node; break; default: break; } } // save new category if (save_file) { path_base = ug_build_filename (app->config_dir, "category", NULL); #if defined _WIN32 || defined _WIN64 path = ug_strdup_printf ("%s%c%.4d.json", path_base, '\\', uget_node_child_position (&app->real, cnode)); #else path = ug_strdup_printf ("%s%c%.4d.json", path_base, '/', uget_node_child_position (&app->real, cnode)); #endif // defined uget_app_save_category ((UgetApp*) app, cnode, path, NULL); ug_free (path_base); ug_free (path); } } int uget_app_move_category (UgetApp* app, UgetNode* cnode, UgetNode* position) { char* path1; char* path2; char* path3; char* path_base; int from_nth; int to_nth; from_nth = uget_node_child_position (&app->real, cnode); if (position) to_nth = uget_node_child_position (&app->real, position); else to_nth = app->real.n_children - 1; if (from_nth == -1 || to_nth == -1) return FALSE; uget_node_move (&app->real, position, cnode); if (app->config_dir == NULL) path_base = ug_strdup ("category"); else path_base = ug_build_filename (app->config_dir, "category", NULL); #if defined _WIN32 || defined _WIN64 path1 = ug_strdup_printf ("%s%c%.4d.json", path_base, '\\', from_nth); path2 = ug_strdup_printf ("%s%c%.4d.json", path_base, '\\', to_nth); path3 = ug_strdup_printf ("%s%cTemp.json", path_base, '\\'); #else path1 = ug_strdup_printf ("%s%c%.4d.json", path_base, '/', from_nth); path2 = ug_strdup_printf ("%s%c%.4d.json", path_base, '/', to_nth); path3 = ug_strdup_printf ("%s%cTemp.json", path_base, '/'); #endif // _WIN32 || _WIN64 ug_rename (path1, path3); ug_rename (path2, path1); ug_rename (path3, path2); ug_free (path1); ug_free (path2); ug_free (path3); ug_free (path_base); return TRUE; } void uget_app_delete_category (UgetApp* app, UgetNode* cnode) { char* path1; char* path2; char* path_base; int position; int count; position = ug_node_child_position ((UgNode*)&app->real, (UgNode*)cnode); if (position == -1) return; uget_app_stop_category (app, cnode); uget_uri_hash_remove_category (app->uri_hash, cnode); uget_node_remove (&app->real, cnode); uget_node_free (cnode); if (app->config_dir == NULL) path_base = ug_strdup ("category"); else path_base = ug_build_filename (app->config_dir, "category", NULL); for (count = position; ; count++) { #if defined _WIN32 || defined _WIN64 path1 = ug_strdup_printf ("%s%c%.4d.json", path_base, '\\', count); path2 = ug_strdup_printf ("%s%c%.4d.json", path_base, '\\', count+1); #else path1 = ug_strdup_printf ("%s%c%.4d.json", path_base, '/', count); path2 = ug_strdup_printf ("%s%c%.4d.json", path_base, '/', count+1); #endif // _WIN32 || _WIN64 ug_unlink (path1); if (ug_rename (path2, path1) == -1) { ug_free (path1); ug_free (path2); break; } ug_free (path1); ug_free (path2); } ug_free (path_base); } // move downloads from active to queuing void uget_app_stop_category (UgetApp* app, UgetNode* cnode) { UgetCategory* category; UgetNode* dnode; UgArrayPtr* array; int index; category = ug_info_realloc (cnode->info, UgetCategoryInfo); // Because uget_app_queue_download() will change node linking, // program must store active nodes to array before calling uget_app_queue_download() array = uget_app_store_nodes (app, category->active); for (index = array->length-1; index >= 0; index--) { dnode = array->at[index]; uget_app_queue_download (app, dnode); } uget_app_clear_nodes (app); // clear stored nodes } // pause active and queuing downloads void uget_app_pause_category (UgetApp* app, UgetNode* cnode) { UgetCategory* category; UgetNode* dnode; UgArrayPtr* array; int index; category = ug_info_realloc (cnode->info, UgetCategoryInfo); // Because uget_app_queue_download() will change node linking, // program must store active nodes to array before calling uget_app_queue_download() // pause all download in queuing ------------ array = uget_app_store_nodes (app, category->queuing); for (index = array->length-1; index >= 0; index--) { dnode = array->at[index]; uget_app_pause_download (app, dnode); } uget_app_clear_nodes (app); // clear stored nodes // pause all download in active ------------- array = uget_app_store_nodes (app, category->active); for (index = array->length-1; index >= 0; index--) { dnode = array->at[index]; uget_app_pause_download (app, dnode); } uget_app_clear_nodes (app); // clear stored nodes } // set (error and paused) downloads in queuing runnable void uget_app_resume_category (UgetApp* app, UgetNode* cnode) { UgetCategory* category; UgetNode* dnode; UgArrayPtr* array; int index; category = ug_info_realloc (cnode->info, UgetCategoryInfo); // Because uget_app_queue_download() will change node linking, // program must store active nodes to array before calling uget_app_queue_download() array = uget_app_store_nodes (app, category->queuing); for (index = array->length-1; index >= 0; index--) { dnode = array->at[index]; uget_app_queue_download (app, dnode); } uget_app_clear_nodes (app); // clear stored nodes } static int ug_match_file_exts (const char* file, char** exts) { const char* beg = NULL; const char* end; int index; // get file ext for (end = file + strlen (file) - 1; end >= file; end--) { if (end[0] == '.') { beg = end + 1; // + '.' break; } } if (beg == NULL) return -1; for (index = 0; *exts; exts++, index++) { if (strcasecmp (beg, *exts) == 0) return index; } return -1; } UgetNode* uget_app_match_category (UgetApp* app, UgUri* uuri, const char* file) { UgetCategory* category; UgetNode* cnode; int count; struct { UgetNode* cnode; int count; } matched; matched.cnode = NULL; matched.count = 0; for (cnode = app->real.children; cnode; cnode = cnode->next) { category = ug_info_realloc (cnode->info, UgetCategoryInfo); if (category == NULL) continue; // null-terminated *(char**)ug_array_alloc (&category->hosts, 1) = NULL; *(char**)ug_array_alloc (&category->schemes, 1) = NULL; *(char**)ug_array_alloc (&category->file_exts, 1) = NULL; category->hosts.length--; category->schemes.length--; category->file_exts.length--; // match download and category count = 0; if (ug_uri_match_hosts (uuri, category->hosts.at) >= 0) count++; if (ug_uri_match_schemes (uuri, category->schemes.at) >= 0) count++; if (ug_uri_match_file_exts (uuri, category->file_exts.at) >= 0) count++; else if (file && ug_match_file_exts (file, category->file_exts.at) >= 0) count++; if (matched.count < count) { matched.count = count; matched.cnode = cnode; if (matched.count == 3) break; } } return matched.cnode; } int uget_app_add_download_uri (UgetApp* app, const char* uri, UgetNode* cnode, int apply) { UgetNode* dnode; UgetCommon* common; dnode = uget_node_new (NULL); common = ug_info_realloc (dnode->info, UgetCommonInfo); common->uri = ug_strdup (uri); return uget_app_add_download (app, dnode, cnode, apply); } int uget_app_add_download (UgetApp* app, UgetNode* dnode, UgetNode* cnode, int apply) { UgetRelation* relation; UgetRelation* relation_c; UgetNode* sibling; UgetLog* log; UgUri* uuri; char* fattch; int value; struct { UgetCommon* common; UgetCategory* category; } temp; temp.common = ug_info_realloc (dnode->info, UgetCommonInfo); // replace invalid characters \/:*?"<>| by _ in filename. if (temp.common->file) ug_str_replace_chars (temp.common->file, "\\/:*?\"<>|", '_'); // decode name, filename, and category if (temp.common->uri) { uuri = ug_malloc(sizeof (UgUri)); ug_uri_init(uuri, temp.common->uri); // set UgetCommon::name if it's name is NULL if (temp.common->name == NULL) { if (temp.common->file) temp.common->name = ug_strdup(temp.common->file); else temp.common->name = uget_name_from_uri(uuri); } // backup file if (ug_uri_is_file(uuri)) { fattch = uget_app_save_attachment(app, dnode->info, temp.common->uri + uuri->path, NULL); if (fattch) { // uuri will failure ug_free(temp.common->uri); temp.common->uri = fattch; } } ug_free(uuri); // if (cnode == NULL) cnode = uget_app_match_category (app, uuri, temp.common->file); } if (cnode == NULL) cnode = app->real.children; if (cnode) { relation = ug_info_realloc(dnode->info, UgetRelationInfo); relation->group &= UGET_GROUP_MAJOR | UGET_GROUP_PAUSED; relation->group |= UGET_GROUP_QUEUING; log = ug_info_realloc (dnode->info, UgetLogInfo); log->added_time = time (NULL); // get current time if (apply) { value = temp.common->keeping.enable; temp.common->keeping.enable = TRUE; temp.common->keeping.uri = TRUE; ug_info_assign (dnode->info, cnode->info, UgetCategoryInfo); temp.common->keeping.enable = value; relation_c = ug_info_realloc(cnode->info, UgetRelationInfo); if (relation_c->group & UGET_GROUP_PAUSED) relation->group |= UGET_GROUP_PAUSED; } temp.category = ug_info_realloc (cnode->info, UgetCategoryInfo); // try to insert download before finished and recycled sibling = temp.category->finished->children; if (sibling == NULL) sibling = temp.category->recycled->children; // get real sibling if (sibling) sibling = sibling->real; uget_node_insert (cnode, sibling, dnode); uget_uri_hash_add_download(app->uri_hash, dnode->info); return TRUE; } return FALSE; } int uget_app_move_download (UgetApp* app, UgetNode* dnode, UgetNode* dnode_position) { UgetNode* cnode; cnode = dnode->parent; if (dnode_position) { if (cnode != dnode_position->parent) return FALSE; } else if (dnode->next == NULL) { return FALSE; } uget_node_move (cnode, dnode_position, dnode); return TRUE; } int uget_app_move_download_to (UgetApp* app, UgetNode* dnode, UgetNode* cnode) { UgetNode* sibling; UgetCategory* category; UgetRelation* relation; if (dnode->parent == cnode) return FALSE; category = ug_info_realloc(cnode->info, UgetCategoryInfo); relation = ug_info_realloc(dnode->info, UgetRelationInfo); switch (relation->group & UGET_GROUP_MAJOR) { case UGET_GROUP_ACTIVE: sibling = category->queuing->children; if (sibling == NULL) sibling = category->finished->children; if (sibling == NULL) sibling = category->recycled->children; break; default: case UGET_GROUP_QUEUING: case UGET_GROUP_FINISHED: sibling = category->finished->children; if (sibling == NULL) sibling = category->recycled->children; break; case UGET_GROUP_RECYCLED: sibling = category->recycled->children; break; } if (sibling) sibling = sibling->real; uget_node_remove (dnode->parent, dnode); uget_node_clear_fake (dnode); uget_node_insert (cnode, sibling, dnode); return TRUE; } // used by uget_app_delete_download() static int delete_files(UgetFiles* files, int has_temp_file) { UgetFile* file1; int n_error; for (n_error = 0, file1 = (UgetFile*)files->list.head; file1; file1 = file1->next) { if (file1->state & UGET_FILE_STATE_DELETED) continue; if (ug_file_is_exist(file1->path) == FALSE) file1->state |= UGET_FILE_STATE_DELETED; else if (ug_remove(file1->path) != 0) n_error++; else if (file1->type != UGET_FILE_TEMPORARY) file1->state |= UGET_FILE_STATE_DELETED; } return (n_error == 0) ? TRUE : FALSE; } // used by uget_app_delete_download() static UgThreadResult delete_files_thread(UgetFiles* files) { int count; #ifdef USE__ANDROID__SAF if (delete_files(files, TRUE) == FALSE) #endif for (count = 0; count < 3; count++) { ug_sleep(2 * 1000); // sleep 2 seconds if (delete_files(files, FALSE)) break; } ug_data_free(files); return UG_THREAD_RESULT; } int uget_app_delete_download (UgetApp* app, UgetNode* dnode, int delete_file) { UgThread thread; UgetFiles* files; int is_active; is_active = uget_task_remove(&app->task, dnode); #ifdef USE__ANDROID__SAF is_active = TRUE; // delete files in thread if program use Android SAF #endif uget_uri_hash_remove_download(app->uri_hash, dnode->info); files = ug_info_set(dnode->info, UgetFilesInfo, NULL); uget_node_free(dnode); if (delete_file == TRUE && files) { if (is_active == TRUE || delete_files(files, TRUE) == FALSE) { // delete files and free 'files' in thread ug_thread_create(&thread, (UgThreadFunc) delete_files_thread, files); ug_thread_unjoin(&thread); return FALSE; } } if (files) ug_data_free(files); return TRUE; } int uget_app_recycle_download (UgetApp* app, UgetNode* dnode) { UgetNode* cnode; UgetNode* sibling; UgetCategory* category; UgetRelation* relation; cnode = dnode->parent; uget_task_remove (&app->task, dnode); uget_node_remove (cnode, dnode); relation = ug_info_realloc(dnode->info, UgetRelationInfo); if (relation->group & UGET_GROUP_RECYCLED) { uget_node_free (dnode); return FALSE; } else { relation->group &= ~UGET_GROUP_MAJOR; relation->group |= UGET_GROUP_RECYCLED; uget_node_clear_fake (dnode); category = ug_info_realloc (cnode->info, UgetCategoryInfo); // try to insert download before recycled sibling = category->recycled->children; if (sibling) sibling = sibling->base; uget_node_insert (cnode, sibling, dnode); return TRUE; } } int uget_app_activate_download (UgetApp* app, UgetNode* dnode) { UgetLog* log; UgetCommon* common; UgetRelation* relation; UgetNode* cnode; UgetNode* sibling; union { UgetCategory* category; UgetPluginInfo* pinfo; } temp; relation = ug_info_realloc(dnode->info, UgetRelationInfo); if (relation->group & UGET_GROUP_ACTIVE) return FALSE; common = ug_info_get (dnode->info, UgetCommonInfo); if (common == NULL || common->uri == NULL) return FALSE; // match plug-in log = ug_info_realloc (dnode->info, UgetLogInfo); temp.pinfo = uget_app_match_plugin (app, common->uri, NULL); if (temp.pinfo == NULL) { // no plug-in support uget_app_queue_download (app, dnode); relation->group |= UGET_GROUP_ERROR; ug_list_prepend (&log->messages, (UgLink*) uget_event_new_error ( UGET_EVENT_ERROR_UNSUPPORTED_SCHEME, NULL)); uget_node_updated (dnode); return FALSE; } else { // clear event message before starting ug_list_foreach (&log->messages, (UgForeachFunc) uget_event_free, NULL); log->messages.size = 0; log->messages.head = NULL; log->messages.tail = NULL; } // start node with plug-in cnode = dnode->parent; if (uget_task_add (&app->task, dnode, temp.pinfo) == FALSE) { // plug-in start failed. uget_app_queue_download (app, dnode); relation->group |= UGET_GROUP_ERROR; uget_node_updated (dnode); return FALSE; } // change node state and move node position uget_node_remove (cnode, dnode); uget_node_clear_fake (dnode); relation->group = UGET_GROUP_ACTIVE; temp.category = ug_info_realloc (cnode->info, UgetCategoryInfo); // try to insert download before queuing, finished, and recycled sibling = temp.category->queuing->children; if (sibling == NULL) sibling = temp.category->finished->children; if (sibling == NULL) sibling = temp.category->recycled->children; // get real sibling if (sibling) sibling = sibling->real; uget_node_insert (cnode, sibling, dnode); return TRUE; } int uget_app_pause_download (UgetApp* app, UgetNode* dnode) { #if 0 UgetCategory* category; UgetRelation* relation; UgetNode* sibling; UgetNode* cnode; UgetNode* fake; relation = ug_info_realloc(dnode->info, UgetRelationInfo); if (relation->group & UGET_GROUP_UNRUNNABLE) return FALSE; uget_task_remove (&app->task, dnode); relation->group |= UGET_GROUP_PAUSED; cnode = dnode->parent; category = ug_info_realloc (cnode->info, UgetCategoryInfo); for (fake = dnode->fake; fake; fake = fake->peer) { if (fake->parent == category->active) { uget_node_remove (cnode, dnode); uget_node_clear_fake (dnode); relation->group |= UGET_GROUP_QUEUING; // try to insert download before queuing, finished, and recycled sibling = category->queuing->children; if (sibling == NULL) sibling = category->finished->children; if (sibling == NULL) sibling = category->recycled->children; // get real sibling if (sibling) sibling = sibling->real; uget_node_insert (cnode, sibling, dnode); break; } } #else UgetRelation* relation; relation = ug_info_realloc(dnode->info, UgetRelationInfo); if (relation->group & UGET_GROUP_ACTIVE) { // uget_task_remove (&app->task, dnode); if (relation && relation->task) uget_plugin_stop (relation->task->plugin); relation->group &= ~UGET_GROUP_ACTIVE; } else if (relation->group & UGET_GROUP_UNRUNNABLE) return FALSE; relation->group |= UGET_GROUP_PAUSED; #endif return TRUE; } int uget_app_queue_download (UgetApp* app, UgetNode* dnode) { UgetNode* cnode; UgetNode* sibling; UgetCategory* category; UgetRelation* relation; relation = ug_info_realloc(dnode->info, UgetRelationInfo); if ((relation->group & UGET_GROUP_ACTIVE) == 0 && (relation->group & UGET_GROUP_UNRUNNABLE) == 0) return FALSE; if (relation->group & UGET_GROUP_QUEUING) relation->group = UGET_GROUP_QUEUING; else { cnode = dnode->parent; uget_node_remove (cnode, dnode); uget_node_clear_fake (dnode); // --- decide sibling position & insert before it --- // if current download is in active, insert it before queuing, // otherwise insert it before finished and recycled. category = ug_info_realloc (cnode->info, UgetCategoryInfo); sibling = NULL; if (relation->group & UGET_GROUP_ACTIVE) { uget_task_remove (&app->task, dnode); sibling = category->queuing->children; } if (sibling == NULL) sibling = category->finished->children; if (sibling == NULL) sibling = category->recycled->children; // get real sibling if (sibling) sibling = sibling->real; relation->group = UGET_GROUP_QUEUING; uget_node_insert (cnode, sibling, dnode); } return TRUE; } void uget_app_reset_download_name (UgetApp* app, UgetNode* dnode) { UgetCommon* common; UgetNode* sibling; UgetNode* cnode = NULL; common = ug_info_realloc(dnode->info, UgetCommonInfo); if (common->file) { if (common->name && strcmp(common->file, common->name) == 0) return; ug_free(common->name); common->name = ug_strdup(common->file); cnode = dnode->parent; } else if (common->uri) { if (common->name && strcmp(common->uri, common->name) == 0) return; common->name = uget_name_from_uri_str(common->uri); cnode = dnode->parent; } // reinsert && resort fake nodes if (cnode) { // cnode = dnode->parent; sibling = dnode->next; uget_node_remove(cnode, dnode); uget_node_clear_fake(dnode); uget_node_insert(cnode, sibling, dnode); } } #ifndef NO_URI_HASH void uget_app_use_uri_hash (UgetApp* app) { UgetNode* cnode; if (app->uri_hash == NULL) app->uri_hash = uget_uri_hash_new (); for (cnode = app->real.children; cnode; cnode = cnode->next) uget_uri_hash_add_category (app->uri_hash, cnode); } char* uget_app_save_attachment(UgetApp* app, UgInfo* info, const char* src_path, const char* rename) { char* dest_path; int count; UgetFile* file1; UgetFiles* files; if (rename == NULL) { rename = strrchr(src_path, UG_DIR_SEPARATOR); #if defined _WIN32 || defined _WIN64 if (rename == NULL) rename = strrchr(src_path, '/'); #endif if (rename == NULL) rename = src_path; else rename++; } dest_path = ug_strdup_printf( "%s" UG_DIR_SEPARATOR_S "attachment" UG_DIR_SEPARATOR_S "%s", app->config_dir, rename); for (count = 0; ug_file_is_exist(dest_path); count++) { ug_free(dest_path); dest_path = ug_strdup_printf( "%s" UG_DIR_SEPARATOR_S "attachment" UG_DIR_SEPARATOR_S "%d) %s", app->config_dir, count, rename); } if (ug_file_copy(src_path, dest_path) == -1) { ug_free(dest_path); return NULL; } // add new path to UgetFiles files = ug_info_realloc(info, UgetFilesInfo); file1 = uget_files_realloc(files, dest_path); file1->type = UGET_FILE_ATTACHMENT; return dest_path; } /* void uget_app_store_attachment(UgetApp* app, UgInfo* info) { int num; char* fname; char* fattch; UgUri* uuri; union { UgetHttp* http; UgetCommon* common; } tmp; tmp.common = ug_info_get(info, UgetCommonInfo); if (tmp.common && tmp.common->uri) { uuri = ug_malloc(sizeof(UgUri)); ug_uri_init(uuri, tmp.common->uri); if (ug_uri_is_file(uuri)) { fattch = uget_app_save_attachment(app, info, tmp.common->uri + uuri->path, NULL); if (fattch) { ug_free(tmp.common->uri); tmp.common->uri = fattch; } } ug_free(uuri); } srand((unsigned int) time(NULL)); num = rand(); tmp.http = ug_info_get(info, UgetHttpInfo); // backup cookie file if (tmp.http && tmp.http->cookie_file) { fname = ug_strdup_printf("%X.cookie", num); fattch = uget_app_save_attachment(app, info, tmp.http->cookie_file, fname); ug_free(fname); if (fattch) { ug_free(tmp.http->cookie_file); tmp.http->cookie_file = fattch; } } // backup post file if (tmp.http && tmp.http->post_file) { fname = ug_strdup_printf("%X.post", num); fattch = uget_app_save_attachment(app, info, tmp.http->post_file, fname); ug_free(fname); if (fattch) { ug_free(tmp.http->post_file); tmp.http->post_file = fattch; } } } */ void uget_app_clear_attachment (UgetApp* app) { UgetNode* dnode; UgetHttp* http; UgetFiles* files; UgetFile* file1; UgDir* dir; void* hash; const char* name; char* folder; char* path; hash = uget_uri_hash_new (); // add attachment for (dnode = app->mix.children->children; dnode; dnode = dnode->next) { // UgetFiles if ((files = ug_info_get(dnode->info, UgetFilesInfo)) != NULL ) { for (file1 = (UgetFile*)files->list.head; file1; file1 = file1->next) { if (file1->type == UGET_FILE_ATTACHMENT) uget_uri_hash_add(hash, file1->path); } } // UgetHttp if ((http = ug_info_get(dnode->info, UgetHttpInfo)) != NULL) { if (http->cookie_file) uget_uri_hash_add(hash, http->cookie_file); if (http->post_file) uget_uri_hash_add(hash, http->post_file); } } folder = ug_build_filename (app->config_dir, "attachment", NULL); #ifdef HAVE_GLIB path = g_filename_from_utf8 (folder, -1, NULL, NULL, NULL); dir = ug_dir_open (path); g_free (path); #else dir = ug_dir_open (folder); #endif // HAVE_GLIB if (dir == NULL) ug_create_dir_all (folder, -1); else { while ((name = ug_dir_read (dir)) != NULL) { path = ug_strdup_printf ("%s" UG_DIR_SEPARATOR_S "%s", folder, name); if (uget_uri_hash_find (hash, path) == FALSE) ug_unlink (path); ug_free (path); } ug_dir_close (dir); } ug_free (folder); uget_uri_hash_free (hash); } #endif // NO_URI_HASH // ---------------------------------------------------------------------------- // plug-in void uget_app_clear_plugins (UgetApp* app) { UgPair* pair; UgPair* pend; pair = app->plugins.at; pend = app->plugins.at + app->plugins.length; for (pair = app->plugins.at; pair < pend; pair++) { if (pair->data) { uget_plugin_global_set(pair->data, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); pair->data = NULL; } } ug_array_clear (&app->plugins); } void uget_app_add_plugin (UgetApp* app, const UgetPluginInfo* pinfo) { UgPair* pair; pair = ug_registry_find (&app->plugins, pinfo->name, NULL); if (pair == NULL || pair->data == NULL) uget_plugin_global_set(pinfo, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); if (pair) pair->data = (void*) pinfo; else ug_registry_add (&app->plugins, (const UgTypeInfo*)pinfo); } void uget_app_remove_plugin (UgetApp* app, const UgetPluginInfo* pinfo) { UgPair* pair; pair = ug_registry_find (&app->plugins, pinfo->name, NULL); if (pair && pair->data) { uget_plugin_global_set(pair->data, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); pair->data = NULL; } } int uget_app_find_plugin (UgetApp* app, const char* name, const UgetPluginInfo** pinfo) { UgPair* pair; pair = ug_registry_find (&app->plugins, name, NULL); if (pair && pair->data) { if (pinfo) *pinfo = pair->data; return TRUE; } return FALSE; } void uget_app_set_default_plugin (UgetApp* app, const UgetPluginInfo* pinfo) { uget_app_add_plugin (app, pinfo); app->plugin_default = (UgetPluginInfo*) pinfo; } UgetPluginInfo* uget_app_match_plugin (UgetApp* app, const char* uri, const UgetPluginInfo* exclude) { UgetPluginInfo* info; int count; UgUri uuri; int index; struct { UgetPluginInfo* info; int count; } matched = {NULL, 0}; if (uri == NULL) return NULL; ug_uri_init (&uuri, uri); if (app->plugin_default && app->plugin_default != exclude) { matched.info = app->plugin_default; matched.count = uget_plugin_match (matched.info, &uuri); if (matched.count >= 3) return matched.info; } for (index = 0; index < app->plugins.length; index++) { info = app->plugins.at[index].data; if (info && info != exclude) { count = uget_plugin_match (info, &uuri); if (matched.count < count) { matched.count = count; matched.info = info; if (matched.count >= 3) break; } } } // detect file type by plug-in if (matched.count == 0) { if (matched.info->file_exts == NULL || matched.info->file_exts[0] == NULL) { return NULL; } } return matched.info; } // ---------------------------------------------------------------------------- // save/load categories // convert old format to new static void remove_file_node(UgetNode* cnode) { UgetNode* dnode; for (dnode = cnode->children; dnode; dnode = dnode->next) { while (dnode->children) uget_node_free(dnode->children); } } int uget_app_save_category (UgetApp* app, UgetNode* cnode, const char* filename, void* jsonfile) { int fd; // fd = open (filename, O_CREAT | O_WRONLY | O_TRUNC, // S_IREAD | S_IWRITE | S_IRGRP | S_IROTH); fd = ug_open (filename, UG_O_CREAT | UG_O_WRONLY | UG_O_TRUNC | UG_O_TEXT, UG_S_IREAD | UG_S_IWRITE | UG_S_IRGRP | UG_S_IROTH); if (fd == -1) return FALSE; return uget_app_save_category_fd (app, cnode, fd, jsonfile); } UgetNode* uget_app_load_category (UgetApp* app, const char* filename, void* jsonfile) { int fd; // fd = open (filename, O_RDONLY, 0); fd = ug_open (filename, UG_O_RDONLY | UG_O_TEXT, 0); if (fd == -1) return NULL; return uget_app_load_category_fd (app, fd, jsonfile); } int uget_app_save_category_fd (UgetApp* app, UgetNode* cnode, int fd, void* jsonfile) { UgJsonFile* jfile; if (jsonfile == NULL) jfile = ug_json_file_new (4096); else jfile = jsonfile; if (ug_json_file_begin_write_fd (jfile, fd, UG_JSON_FORMAT_ALL) == FALSE) { if (jsonfile == NULL) ug_json_file_free (jfile); return FALSE; } ug_json_write_object_head (&jfile->json); ug_json_write_entry (&jfile->json, cnode, UgetNodeEntry); ug_json_write_object_tail (&jfile->json); ug_json_file_end_write (jfile); if (jsonfile == NULL) ug_json_file_free (jfile); return TRUE; } UgetNode* uget_app_load_category_fd (UgetApp* app, int fd, void* jsonfile) { UgJsonFile* jfile; UgJsonError error; UgetNode* cnode; if (jsonfile == NULL) jfile = ug_json_file_new (4096); else jfile = jsonfile; if (ug_json_file_begin_parse_fd (jfile, fd) == FALSE) { if (jsonfile == NULL) ug_json_file_free (jfile); return FALSE; } cnode = uget_node_new (NULL); ug_json_push (&jfile->json, ug_json_parse_entry, cnode, (void*)UgetNodeEntry); ug_json_push (&jfile->json, ug_json_parse_object, NULL, NULL); error = ug_json_file_end_parse (jfile); if (jsonfile == NULL) ug_json_file_free (jfile); if (error == UG_JSON_ERROR_NONE) { uget_app_add_category (app, cnode, FALSE); // create fake node uget_node_make_fake (cnode); // move all downloads from active to queuing in this category uget_app_stop_category (app, cnode); // convert old format to new remove_file_node(cnode); return cnode; } else { uget_node_free (cnode); return NULL; } } int uget_app_save_categories (UgetApp* app, const char* folder) { int count; char* path; char* path_base; char* path_new; UgetNode* cnode; UgJsonFile* jfile; if (folder) path_base = ug_build_filename (folder, "category", NULL); else if (app->config_dir) path_base = ug_build_filename (app->config_dir, "category", NULL); else path_base = ug_strdup ("category"); ug_create_dir_all (path_base, -1); jfile = ug_json_file_new (4096); cnode = app->real.children; for (count = 0; cnode; cnode = cnode->next, count++) { #if defined _WIN32 || defined _WIN64 path = ug_strdup_printf ("%s%c%.4d.temp", path_base, '\\', count); #else path = ug_strdup_printf ("%s%c%.4d.temp", path_base, '/', count); #endif // _WIN32 || _WIN64 uget_app_save_category (app, cnode, path, jfile); #if defined _WIN32 || defined _WIN64 path_new = ug_strdup_printf ("%s%c%.4d.json", path_base, '\\', count); #else path_new = ug_strdup_printf ("%s%c%.4d.json", path_base, '/', count); #endif // _WIN32 || _WIN64 ug_unlink (path_new); ug_rename (path, path_new); ug_free (path_new); ug_free (path); } ug_free (path_base); ug_json_file_free (jfile); return count; } int uget_app_load_categories (UgetApp* app, const char* folder) { int count, fd; char* path; char* path_base; char* path_temp; UgJsonFile* jfile; if (folder) path_base = ug_build_filename (folder, "category", NULL); else if (app->config_dir) path_base = ug_build_filename (app->config_dir, "category", NULL); else path_base = ug_strdup ("category"); jfile = ug_json_file_new (4096); for (count = 0; ; count++) { #if defined _WIN32 || defined _WIN64 path = ug_strdup_printf ("%s%c%.4d.json", path_base, '\\', count); path_temp = ug_strdup_printf ("%s%c%.4d.temp", path_base, '\\', count); #else path = ug_strdup_printf ("%s%c%.4d.json", path_base, '/', count); path_temp = ug_strdup_printf ("%s%c%.4d.temp", path_base, '/', count); #endif // _WIN32 || _WIN64 // fd = open (filename, O_RDONLY, 0); fd = ug_open (path, UG_O_RDONLY | UG_O_TEXT, 0); if (fd != -1) ug_unlink (path_temp); else if (ug_rename (path_temp, path) != -1) fd = ug_open (path, UG_O_RDONLY | UG_O_TEXT, 0); ug_free (path_temp); ug_free (path); if (fd == -1) break; uget_app_load_category_fd (app, fd, jfile); } ug_json_file_free (jfile); ug_free (path_base); return count; } // ---------------------------------------------------------------------------- // keeping status void uget_node_set_keeping (UgetNode* node, int enable) { union { UgetCommon* common; UgetProxy* proxy; UgetHttp* http; UgetFtp* ftp; } temp; temp.common = ug_info_realloc (node->info, UgetCommonInfo); if (temp.common) { temp.common->keeping.enable = enable; if (enable) { if (temp.common->uri) temp.common->keeping.uri = TRUE; if (temp.common->mirrors) temp.common->keeping.mirrors = TRUE; if (temp.common->file) temp.common->keeping.file = TRUE; if (temp.common->folder) temp.common->keeping.folder = TRUE; if (temp.common->user) temp.common->keeping.user = TRUE; if (temp.common->password) temp.common->keeping.password = TRUE; // if (temp.common->connect_timeout) // temp.common->keeping.connect_timeout = TRUE; // if (temp.common->transmit_timeout) // temp.common->keeping.transmit_timeout = TRUE; // if (temp.common->retry_delay) // temp.common->keeping.retry_delay = TRUE; // if (temp.common->retry_limit) // temp.common->keeping.retry_limit = TRUE; // if (temp.common->max_connections) // temp.common->keeping.max_connections = TRUE; if (temp.common->max_upload_speed) temp.common->keeping.max_upload_speed = TRUE; if (temp.common->max_download_speed) temp.common->keeping.max_download_speed = TRUE; if (temp.common->timestamp) temp.common->keeping.timestamp = TRUE; if (temp.common->debug_level) temp.common->keeping.debug_level = TRUE; } } temp.proxy = ug_info_get (node->info, UgetProxyInfo); if (temp.proxy) { temp.proxy->keeping.enable = enable; if (enable) { if (temp.proxy->host) temp.proxy->keeping.host = TRUE; if (temp.proxy->port) temp.proxy->keeping.port = TRUE; if (temp.proxy->type) temp.proxy->keeping.type = TRUE; if (temp.proxy->user) temp.proxy->keeping.user = TRUE; if (temp.proxy->password) temp.proxy->keeping.password = TRUE; } } temp.http = ug_info_get (node->info, UgetHttpInfo); if (temp.http) { temp.http->keeping.enable = enable; if (enable) { if (temp.http->user) temp.http->keeping.user = TRUE; if (temp.http->password) temp.http->keeping.password = TRUE; if (temp.http->referrer) temp.http->keeping.referrer = TRUE; if (temp.http->user_agent) temp.http->keeping.user_agent = TRUE; if (temp.http->post_data) temp.http->keeping.post_data = TRUE; if (temp.http->post_file) temp.http->keeping.post_file = TRUE; if (temp.http->cookie_data) temp.http->keeping.cookie_data = TRUE; if (temp.http->cookie_file) temp.http->keeping.cookie_file = TRUE; // if (temp.http->redirection_limit) // temp.http->keeping.redirection_limit = TRUE; } } temp.ftp = ug_info_get (node->info, UgetFtpInfo); if (temp.ftp) { temp.ftp->keeping.enable = enable; if (enable) { if (temp.ftp->user) temp.ftp->keeping.user = TRUE; if (temp.ftp->password) temp.ftp->keeping.password = TRUE; if (temp.ftp->active_mode) temp.ftp->keeping.active_mode = TRUE; } } } uget-2.2.3/uget/UgetPluginCurl.h0000664000175000017500000001153113602733704013441 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_PLUGIN_CURL_H #define UGET_PLUGIN_CURL_H #include #include #include #include #include //#include // curl_slist #ifdef __cplusplus extern "C" { #endif typedef struct UgetPluginCurl UgetPluginCurl; extern const UgetPluginInfo* UgetPluginCurlInfo; /* ---------------------------------------------------------------------------- UgetPluginCurl: libcurl plug-in that derived from UgetPlugin. UgType | `---UgetPlugin | `--- UgetPluginCurl */ struct UgetPluginCurl { UGET_PLUGIN_MEMBERS; /* // ------ UgType members ------ const UgetPluginInfo* info; // ------ UgetPlugin members ------ UgetEvent* messages; UgMutex mutex; int ref_count; */ // copy these UgData from UgInfo that store in UgetApp UgetCommon* common; UgetFiles* files; UgetProxy* proxy; UgetHttp* http; UgetFtp* ftp; // run-time data // struct curl_slist* ftp_command; struct { char* path; // folder int length; } folder; struct { char* name_fmt; // printf() format string char* path; // folder + filename time_t time; // date and time int64_t size; // total size (0 if size unknown) } file; // aria2 control file struct { char* path; // folder + filename + ".aria2" UgetA2cf ctrl; } aria2; // URI and it's mirror struct { UgList list; UgLink* link; } uri; // segment (split download) struct { UgList list; // list of segment (UgetCurl) int64_t beg; // beginning of undownloaded position int n_max; int n_active; } segment; // progress for uget_plugin_sync() time_t start_time; // base.download = base downloaded size (existing downloaded size) // base.upload = base uploaded size (existing uploaded size) // size.download = downloaded size (base + threads downloaded size) // size.upload = uploaded size (base + threads uploaded size) // speed.download = downloading speed // speed.upload = uploading speed // limit.download = download speed limit // limit.upload = upload speed limit struct { int64_t upload; int64_t download; } base, size, speed, limit; // flags uint8_t limit_changed:1; // speed limit changed by user or program uint8_t file_renamed:1; // has file path? uint8_t synced:1; uint8_t paused:1; // paused by user or program uint8_t stopped:1; // all of downloading thread are stopped uint8_t prepared:1; // prepare to download }; #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { const PluginInfo* const PluginCurlInfo = (const PluginInfo*) UgetPluginCurlInfo; // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct PluginCurlMethod : PluginMethod {}; // This one is for directly use only. You can NOT derived it. struct PluginCurl : PluginCurlMethod, UgetPluginCurl { inline void* operator new(size_t size) { return uget_plugin_new(PluginCurlInfo); } }; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_PLUGIN_CURL_H uget-2.2.3/uget/UgetSite.c0000664000175000017500000000610513602733704012255 00000000000000/* * * Copyright (C) 2017-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include int uget_site_get_id (const char* url) { UgUri uuri; if (ug_uri_init (&uuri, url) == 0) return UGET_SITE_UNKNOWN; if (uuri.scheme_len == 5 && strncmp (url, "https", 5) == 0) { if (uget_site_is_youtube (&uuri) == TRUE) return UGET_SITE_YOUTUBE; if (uget_site_is_mega (&uuri) == TRUE) return UGET_SITE_MEGA; } return UGET_SITE_UNKNOWN; } // youtube.com // https://youtube.com/watch?=xxxxxxxxxxx // https://youtu.be/xxxxxxxxxxx int uget_site_is_youtube (UgUri* uuri) { int length; const char* string; length = ug_uri_host (uuri, &string); if (length >= 11 && strncmp (string + length - 11, "youtube.com", 11) == 0) { if (strncmp (uuri->uri + uuri->file , "watch?", 6) == 0) return TRUE; } else if (length >= 8 && strncmp (string + length - 8, "youtu.be", 8) == 0) { if (uuri->file != -1) return TRUE; } return FALSE; } // mega.co.nz // https://mega.co.nz/#!xxxxxxxx!xxxxxxxxxxxxxxxxxxxxxx // https://mega.nz/#!xxxxxxxx!xxxxxxxxxxxxxxxxxxxxxx int uget_site_is_mega (UgUri* uuri) { int length; const char* string; length = ug_uri_host (uuri, &string); if (length >= 10 && strncmp (string + length - 10, "mega.co.nz", 10) == 0) { if (uuri->path > 0 && strchr (uuri->uri + uuri->path , '!') != NULL) return TRUE; } else if (length >= 7 && strncmp (string + length - 7, "mega.nz", 7) == 0) { if (uuri->path > 0 && strchr (uuri->uri + uuri->path , '!') != NULL) return TRUE; } return FALSE; } uget-2.2.3/uget/UgetCurl.c0000664000175000017500000007073713602733704012272 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #ifdef HAVE_LIBPWMD #include "pwmd.h" #endif // HAVE_LIBPWMD #define PROGRESS_COUNT_LIMIT 2 #define LOW_SPEED_LIMIT 128 #define LOW_SPEED_TIME 60 enum SchemeType { SCHEME_UNKNOWN, SCHEME_HTTP, SCHEME_FTP, }; // curl_easy_perform () -> progress callback -> connect // -> progress callback -> header callback // -> write callback -> progress callback // static size_t uget_curl_header_http0 (char *buffer, size_t size, size_t nmemb, UgetCurl* ugcurl); static size_t uget_curl_header_http (char *buffer, size_t size, size_t nmemb, UgetCurl* ugcurl); static size_t uget_curl_header_ftp0 (char *buffer, size_t size, size_t nmemb, UgetCurl* ugcurl); static size_t uget_curl_output_none (char *buffer, size_t size, size_t nmemb, void* data); static size_t uget_curl_output_default (char *buffer, size_t size, size_t nmemb, void* data); static int uget_curl_progress (UgetCurl* ugcurl, double dltotal, double dlnow, double ultotal, double ulnow); #ifdef HAVE_LIBPWMD static int uget_curl_set_proxy_pwmd (UgetCurl* ugcurl, UgetProxy *proxy); #endif UgetCurl* uget_curl_new (void) { UgetCurl* ugcurl; ugcurl = ug_malloc0 (sizeof (UgetCurl)); ugcurl->self = ugcurl; ugcurl->curl = curl_easy_init (); curl_easy_setopt (ugcurl->curl, CURLOPT_ERRORBUFFER, ugcurl->error_string); // ugcurl->ftp_command = NULL; // ugcurl->ftp_command = curl_slist_append (ugcurl->ftp_command, "REST 10"); return ugcurl; } void uget_curl_free (UgetCurl* ugcurl) { if (ugcurl->curl) curl_easy_cleanup (ugcurl->curl); if (ugcurl->file.output) ug_fclose (ugcurl->file.output); if (ugcurl->file.post) ug_fclose (ugcurl->file.post); if (ugcurl->event) uget_event_free (ugcurl->event); ug_free (ugcurl->header.uri); ug_free (ugcurl->header.filename); ug_free (ugcurl); } static UgThreadResult uget_curl_thread (UgetCurl* ugcurl) { char* tempstr; CURLcode code; // perform do { ugcurl->restart = FALSE; code = curl_easy_perform (ugcurl->curl); curl_easy_getinfo (ugcurl->curl, CURLINFO_RESPONSE_CODE, &ugcurl->response); ugcurl->tested = TRUE; } while (ugcurl->restart); // free event if (ugcurl->event) { uget_event_free (ugcurl->event); ugcurl->event = NULL; } // HTTP response error code: 4xx Client Error, 5xx Server Error if (ugcurl->response >= 400 && ugcurl->scheme_type == SCHEME_HTTP) { ugcurl->state = UGET_CURL_ERROR; tempstr = ug_strdup_printf ("Server response code : %ld", ugcurl->response); ugcurl->event = uget_event_new_error ( UGET_EVENT_ERROR_CUSTOM, tempstr); ug_free (tempstr); // discard data if remote site response error. ugcurl->pos = ugcurl->beg; ugcurl->size[0] = 0; goto exit; } switch (code) { case CURLE_OK: ugcurl->state = UGET_CURL_OK; break; // write error (out of disk space?) (exit) case CURLE_WRITE_ERROR: if (ugcurl->event_code > 0) { ugcurl->state = UGET_CURL_ERROR; ugcurl->event = uget_event_new_error (ugcurl->event_code, NULL); ugcurl->test_ok = FALSE; break; } // Don't break here // out of memory (exit) case CURLE_OUT_OF_MEMORY: ugcurl->state = UGET_CURL_ERROR; ugcurl->event = uget_event_new_error ( UGET_EVENT_ERROR_OUT_OF_RESOURCE, NULL); break; // abort download in progress callback case CURLE_ABORTED_BY_CALLBACK: // segment is completed or paused by user if (ugcurl->paused == FALSE) ugcurl->state = UGET_CURL_OK; else ugcurl->state = UGET_CURL_ABORT; break; // can resume (retry) case CURLE_RECV_ERROR: case CURLE_PARTIAL_FILE: case CURLE_OPERATION_TIMEDOUT: ugcurl->state = UGET_CURL_RETRY; break; // can't resume (retry) case CURLE_RANGE_ERROR: case CURLE_BAD_DOWNLOAD_RESUME: case CURLE_FTP_COULDNT_USE_REST: ugcurl->state = UGET_CURL_NOT_RESUMABLE; ugcurl->resumable = FALSE; break; #ifdef NO_RETRY_IF_CONNECT_FAILED // can't connect (error) case CURLE_COULDNT_CONNECT: ugcurl->state = UGET_CURL_ERROR; ugcurl->event = uget_event_new_error ( UGET_EVENT_ERROR_CONNECT_FAILED, ugcurl->error_string); goto exit; #else case CURLE_COULDNT_CONNECT: case CURLE_COULDNT_RESOLVE_HOST: #endif // retry case CURLE_SEND_ERROR: case CURLE_GOT_NOTHING: case CURLE_BAD_CONTENT_ENCODING: ugcurl->state = UGET_CURL_RETRY; ugcurl->event = uget_event_new_error ( UGET_EVENT_ERROR_CUSTOM, ugcurl->error_string); break; // too many redirection (exit) case CURLE_TOO_MANY_REDIRECTS: ugcurl->state = UGET_CURL_ERROR; ugcurl->event = uget_event_new_error ( UGET_EVENT_ERROR_CUSTOM, ugcurl->error_string); break; // exit case CURLE_UNSUPPORTED_PROTOCOL: ugcurl->state = UGET_CURL_ERROR; ugcurl->event = uget_event_new_error ( UGET_EVENT_ERROR_UNSUPPORTED_SCHEME, ugcurl->error_string); break; // other error (exit) #ifdef NO_RETRY_IF_CONNECT_FAILED case CURLE_COULDNT_RESOLVE_HOST: #endif case CURLE_COULDNT_RESOLVE_PROXY: case CURLE_FAILED_INIT: case CURLE_URL_MALFORMAT: case CURLE_FTP_WEIRD_SERVER_REPLY: case CURLE_REMOTE_ACCESS_DENIED: default: ugcurl->state = UGET_CURL_ERROR; ugcurl->event = uget_event_new_error ( UGET_EVENT_ERROR_CUSTOM, ugcurl->error_string); break; } exit: if (ugcurl->state == UGET_CURL_ERROR) ugcurl->test_ok = FALSE; ugcurl->stopped = TRUE; return UG_THREAD_RESULT; } void uget_curl_run (UgetCurl* ugcurl, int joinable) { CURL* curl; curl = ugcurl->curl; uget_curl_decide_login (ugcurl); ugcurl->pos = ugcurl->beg; ugcurl->state = UGET_CURL_READY; ugcurl->paused = FALSE; ugcurl->stopped = FALSE; // if thread stop, this value will be TRUE. ugcurl->response = 0; ugcurl->event_code = 0; ugcurl->progress_count = PROGRESS_COUNT_LIMIT; // reset download/upload speed ugcurl->speed[0] = 0; ugcurl->speed[1] = 0; // reset downloaded/uploaded size ugcurl->size[0] = 0; ugcurl->size[1] = 0; ug_free (ugcurl->header.uri); ug_free (ugcurl->header.filename); ugcurl->header.uri = NULL; ugcurl->header.filename = NULL; // Others ----------------------------------------------------------------- curl_easy_setopt (curl, CURLOPT_NOSIGNAL, 1L); curl_easy_setopt (curl, CURLOPT_FILETIME, 1L); // disable peer SSL certificate verification curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 0L); // SSL version and cipher // curl_easy_setopt (curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_DEFAULT); // curl_easy_setopt (curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3); // curl_easy_setopt (curl, CURLOPT_SSL_CIPHER_LIST, "ALL:!aNULL:!LOW:!EXPORT:!SSLv2"); // curl_easy_setopt (curl, CURLOPT_SSL_CIPHER_LIST, "ALL"); // curl_easy_setopt (curl, CURLOPT_SSL_CIPHER_LIST, "SSLv3"); // low speed limit for unstable network curl_easy_setopt (curl, CURLOPT_LOW_SPEED_LIMIT, LOW_SPEED_LIMIT); curl_easy_setopt (curl, CURLOPT_LOW_SPEED_TIME, LOW_SPEED_TIME); // resume curl_easy_setopt (ugcurl->curl, CURLOPT_RESUME_FROM_LARGE, (curl_off_t) ugcurl->beg); // Progress -------------------------------------------------------------- curl_easy_setopt (curl, CURLOPT_PROGRESSFUNCTION, (curl_progress_callback) uget_curl_progress); curl_easy_setopt (curl, CURLOPT_PROGRESSDATA, ugcurl); curl_easy_setopt (curl, CURLOPT_NOPROGRESS, FALSE); // Header ----------------------------------------------------------------- if (ugcurl->tested) { switch (ugcurl->scheme_type) { case SCHEME_HTTP: curl_easy_setopt (curl, CURLOPT_HEADERFUNCTION, (curl_write_callback) uget_curl_header_http); curl_easy_setopt (curl, CURLOPT_HEADERDATA, ugcurl); break; default: curl_easy_setopt (curl, CURLOPT_POSTQUOTE, NULL); curl_easy_setopt (curl, CURLOPT_HEADERFUNCTION, NULL); curl_easy_setopt (curl, CURLOPT_HEADERDATA, NULL); break; } } else { // setup by scheme type switch (ugcurl->scheme_type) { case SCHEME_HTTP: curl_easy_setopt (curl, CURLOPT_HEADERFUNCTION, (curl_write_callback) uget_curl_header_http0); curl_easy_setopt (curl, CURLOPT_HEADERDATA, ugcurl); break; case SCHEME_FTP: // curl_easy_setopt (curl, CURLOPT_POSTQUOTE, // ugcurl->ftp_command); curl_easy_setopt (curl, CURLOPT_HEADERFUNCTION, (curl_write_callback) uget_curl_header_ftp0); curl_easy_setopt (curl, CURLOPT_HEADERDATA, ugcurl); break; default: curl_easy_setopt (curl, CURLOPT_HEADERFUNCTION, NULL); curl_easy_setopt (curl, CURLOPT_HEADERDATA, NULL); break; } } // Speed limit ------------------------------------------------------------ if (ugcurl->limit_changed) { curl_easy_setopt (ugcurl->curl, CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t) ugcurl->limit[0]); curl_easy_setopt (ugcurl->curl, CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t) ugcurl->limit[1]); ugcurl->limit_changed = FALSE; } // Output ----------------------------------------------------------------- curl_easy_setopt (curl, CURLOPT_NOBODY, 0L); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, uget_curl_output_default); curl_easy_setopt (curl, CURLOPT_WRITEDATA, ugcurl); ug_thread_create (&ugcurl->thread, (UgThreadFunc)uget_curl_thread, ugcurl); if (joinable == FALSE) ug_thread_unjoin (&ugcurl->thread); } int uget_curl_open_file (UgetCurl* ugcurl, const char* file_path) { FILE* output_file; if (ugcurl->file.output) return TRUE; if (file_path) { output_file = ug_fopen (file_path, "rb+"); if (output_file == NULL) return FALSE; ugcurl->file.output = output_file; } return TRUE; } void uget_curl_close_file (UgetCurl* ugcurl) { if (ugcurl->file.output) { ug_fclose (ugcurl->file.output); ugcurl->file.output = NULL; } } void uget_curl_set_url (UgetCurl* ugcurl, const char* uri) { curl_easy_setopt (ugcurl->curl, CURLOPT_URL, uri); uget_curl_decide_scheme (ugcurl, uri); ugcurl->tested = FALSE; ugcurl->resumable = FALSE; } void uget_curl_set_speed (UgetCurl* ugcurl, int64_t dlspeed, int64_t ulspeed) { ugcurl->limit[0] = dlspeed; ugcurl->limit[1] = ulspeed; ugcurl->limit_changed = TRUE; } void uget_curl_set_common (UgetCurl* ugcurl, UgetCommon* common) { CURL* curl; curl = ugcurl->curl; ugcurl->common = common; if (common == NULL) return; curl_easy_setopt (curl, CURLOPT_CONNECTTIMEOUT, common->connect_timeout); curl_easy_setopt (curl, CURLOPT_URL, common->uri); uget_curl_decide_scheme (ugcurl, common->uri); // debug if (common->debug_level) curl_easy_setopt(ugcurl->curl, CURLOPT_VERBOSE, 1L); // speed control uget_curl_set_speed (ugcurl, common->max_download_speed, common->max_upload_speed); // curl_easy_setopt (curl, CURLOPT_MAX_RECV_SPEED_LARGE, // (curl_off_t) common->max_download_speed); // curl_easy_setopt (curl, CURLOPT_MAX_SEND_SPEED_LARGE, // (curl_off_t) common->max_upload_speed); // I don't set common->user & common->password here because // uget_curl_decide_login() will decide to use one of below login data // common->user & common->password // http->user & http->password // ftp->user & ftp->password } void uget_curl_set_proxy (UgetCurl* ugcurl, UgetProxy* proxy) { #ifdef HAVE_LIBPWMD if (proxy->type == UGET_PROXY_PWMD) { uget_curl_set_proxy_pwmd (ugcurl, proxy); return; } #endif ug_curl_set_proxy (ugcurl->curl, proxy); } int uget_curl_set_http (UgetCurl* ugcurl, UgetHttp* http) { CURL* curl; curl = ugcurl->curl; ugcurl->http = http; curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt (curl, CURLOPT_AUTOREFERER, 1L); curl_easy_setopt (curl, CURLOPT_MAXREDIRS, 30L); if (http) { // if (http->referrer == NULL && ugcurl->uri.part.fragment != -1) { // http->referrer = ug_strndup (temp.common->uri, // ugcurl->uri.part.fragment); // } curl_easy_setopt (curl, CURLOPT_REFERER, http->referrer); // if (http->redirection_limit) curl_easy_setopt (curl, CURLOPT_MAXREDIRS, http->redirection_limit); if (http->user_agent) curl_easy_setopt (curl, CURLOPT_USERAGENT, http->user_agent); // else { // curl_easy_setopt (curl, CURLOPT_USERAGENT, // "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"); // curl_easy_setopt (curl, CURLOPT_USERAGENT, // "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;" // " .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"); // } // cookie if (http->cookie_data) curl_easy_setopt (curl, CURLOPT_COOKIE, http->cookie_data); else if (http->cookie_file) curl_easy_setopt (curl, CURLOPT_COOKIEFILE, http->cookie_file); else curl_easy_setopt (curl, CURLOPT_COOKIEFILE, ""); if (http->post_data) { curl_easy_setopt (curl, CURLOPT_POST, 1L); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, http->post_data); curl_easy_setopt (curl, CURLOPT_POSTFIELDSIZE, strlen (http->post_data)); } else if (http->post_file) { ugcurl->file.post = ug_fopen (http->post_file, "r"); if (ugcurl->file.post == NULL) return FALSE; curl_easy_setopt (curl, CURLOPT_POST, 1L); curl_easy_setopt (curl, CURLOPT_READDATA, ugcurl->file.post); #if defined(_MSC_VER) && !defined(__MINGW32__) // for MS VC only curl_easy_setopt (curl, CURLOPT_READFUNCTION , fread); #endif } } // I don't set http->user & http->password here because // uget_curl_decide_login() will decide to use one of below login data // common->user & common->password // http->user & http->password // ftp->user & ftp->password return TRUE; } void uget_curl_set_ftp (UgetCurl* ugcurl, UgetFtp* ftp) { CURL* curl; curl = ugcurl->curl; ugcurl->ftp = ftp; if (ftp && ftp->active_mode) { // FTP Active Mode // use EPRT and then LPRT before using PORT curl_easy_setopt (curl, CURLOPT_FTP_USE_EPRT, TRUE); // '-' symbol to let the library use your system's default IP address. curl_easy_setopt (curl, CURLOPT_FTPPORT, "-"); } else { // FTP Passive Mode // use PASV command in IPv4 server. (Passive Mode) // don't use EPSV command. (Extended Passive Mode) curl_easy_setopt (curl, CURLOPT_FTP_USE_EPSV, FALSE); // don't use EPRT and LPRT command. curl_easy_setopt (curl, CURLOPT_FTP_USE_EPRT, FALSE); // don't use PORT command. curl_easy_setopt (curl, CURLOPT_FTPPORT, NULL); } // I don't set ftp->user & ftp->password here because // uget_curl_decide_login() will decide to use one of below login data // common->user & common->password // http->user & http->password // ftp->user & ftp->password } void uget_curl_decide_scheme (UgetCurl* ugcurl, const char* uri) { int length; ugcurl->scheme_type = SCHEME_UNKNOWN; if (uri == NULL) return; length = ug_uri_init (&ugcurl->uri.part, uri); if (length >= 3 && strncasecmp (uri, "ftp", 3) == 0) ugcurl->scheme_type = SCHEME_FTP; else if (length >= 4 && strncasecmp (uri, "http", 4) == 0) ugcurl->scheme_type = SCHEME_HTTP; } void uget_curl_decide_login (UgetCurl* ugcurl) { CURL* curl; union { UgetCommon* common; UgetHttp* http; UgetFtp* ftp; } temp; curl = ugcurl->curl; // curl_easy_setopt (curl, CURLOPT_LOGIN_OPTIONS, "AUTH=NTLM"); // ------------------------------------------------------------------------ // common temp.common = ugcurl->common; if (temp.common) { if ((temp.common->user && temp.common->user[0]) || (temp.common->password && temp.common->password[0])) { // set user & password by common data curl_easy_setopt (curl, CURLOPT_USERNAME, (temp.common->user) ? temp.common->user : ""); curl_easy_setopt (curl, CURLOPT_PASSWORD, (temp.common->password) ? temp.common->password : ""); // Don't set CURLOPT_HTTPAUTH to a bitmask // Don't use CURLAUTH_ANY, it causes authentication failed. // curl_easy_setopt (curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); // curl_easy_setopt (curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); // curl_easy_setopt (curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); } else { // clear user & password (for HTTP redirection) curl_easy_setopt (curl, CURLOPT_USERNAME, NULL); curl_easy_setopt (curl, CURLOPT_PASSWORD, NULL); } } // ------------------------------------------------------------------------ // http temp.http = ugcurl->http; if (temp.http && ugcurl->scheme_type == SCHEME_HTTP) { if ((temp.http->user && temp.http->user[0]) || (temp.http->password && temp.http->password[0])) { curl_easy_setopt (curl, CURLOPT_USERNAME, (temp.http->user) ? temp.http->user : ""); curl_easy_setopt (curl, CURLOPT_PASSWORD, (temp.http->password) ? temp.http->password : ""); // Don't set CURLOPT_HTTPAUTH to a bitmask // Don't use CURLAUTH_ANY, it causes authentication failed. // curl_easy_setopt (curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); // curl_easy_setopt (curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); // curl_easy_setopt (curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); return; } } // ------------------------------------------------------------------------ // ftp temp.ftp = ugcurl->ftp; if (temp.ftp && ugcurl->scheme_type == SCHEME_FTP) { // set FTP user & password if ((temp.ftp->user && temp.ftp->user[0]) || (temp.ftp->password && temp.ftp->password[0])) { curl_easy_setopt (curl, CURLOPT_USERNAME, (temp.ftp->user) ? temp.ftp->user : ""); curl_easy_setopt (curl, CURLOPT_PASSWORD, (temp.ftp->password) ? temp.ftp->password : ""); return; } } } void ug_curl_set_proxy (CURL* curl, UgetProxy* proxy) { if (proxy == NULL) return; // proxy type switch (proxy->type) { case UGET_PROXY_NONE: curl_easy_setopt (curl, CURLOPT_PROXYTYPE, 0); break; default: case UGET_PROXY_DEFAULT: case UGET_PROXY_HTTP: curl_easy_setopt (curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); break; case UGET_PROXY_SOCKS4: curl_easy_setopt (curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); break; case UGET_PROXY_SOCKS5: curl_easy_setopt (curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); break; } curl_easy_setopt (curl, CURLOPT_PROXY, proxy->host); if (proxy->port) curl_easy_setopt (curl, CURLOPT_PROXYPORT, proxy->port); else curl_easy_setopt (curl, CURLOPT_PROXYPORT, 80); // proxy user and password if ((proxy->user && proxy->user[0]) || (proxy->password && proxy->password[0]) || proxy->type == UGET_PROXY_SOCKS4 || proxy->type == UGET_PROXY_SOCKS5) { curl_easy_setopt (curl, CURLOPT_PROXYUSERNAME, (proxy->user) ? proxy->user : ""); curl_easy_setopt (curl, CURLOPT_PROXYPASSWORD, (proxy->password) ? proxy->password : ""); } else { curl_easy_setopt (curl, CURLOPT_PROXYUSERNAME, NULL); curl_easy_setopt (curl, CURLOPT_PROXYPASSWORD, NULL); } } // ---------------------------------------------------------------------------- // static functions static size_t uget_curl_header_http (char *buffer, size_t size, size_t nmemb, UgetCurl* ugcurl) { long response; curl_easy_getinfo (ugcurl->curl, CURLINFO_RESPONSE_CODE, &response); // This will abort the transfer and return CURL_WRITE_ERROR. if (response >= 400) { ugcurl->response = response; return 0; } else { // It doesn't need to parse HTTP header now. curl_easy_setopt (ugcurl->curl, CURLOPT_HEADERFUNCTION, (curl_write_callback) NULL); curl_easy_setopt (ugcurl->curl, CURLOPT_HEADERDATA, NULL); } return (size_t)(size * nmemb); } static size_t uget_curl_header_http0 (char *buffer, size_t size, size_t nmemb, UgetCurl* ugcurl) { char* file; char* temp; int length; file = NULL; length = strlen (buffer); if (ugcurl->response == 0) { curl_easy_getinfo (ugcurl->curl, CURLINFO_RESPONSE_CODE, &ugcurl->response); // This will abort the transfer and return CURL_WRITE_ERROR. if (ugcurl->response >= 400) return 0; } if (length > 15 && strncasecmp (buffer, "Accept-Ranges: ", 15) == 0) { buffer += 15; if (strncasecmp (buffer, "none", 4) == 0) ugcurl->resumable = FALSE; else ugcurl->resumable = TRUE; } else if (length > 14 && strncasecmp (buffer, "Content-Type: ", 14) == 0) { buffer += 14; length = strcspn (buffer, "\r\n"); if (length >= 9 && strncasecmp (buffer, "text/html", 9) == 0) ugcurl->html = TRUE; else ugcurl->html = FALSE; } // handle HTTP header "Location:" else if (length > 10 && strncasecmp (buffer, "Location: ", 10) == 0) { // exclude header and character '\r', '\n' buffer += 10; length = strcspn (buffer, "\r\n"); if (ugcurl->header_store) { ug_free (ugcurl->header.uri); ugcurl->header.uri = ug_strndup (buffer, length); uget_curl_decide_scheme (ugcurl, ugcurl->header.uri); } else { temp = ug_strndup (buffer, length); uget_curl_decide_scheme (ugcurl, temp); ug_free (temp); } // decide login data (user & password) by scheme uget_curl_decide_login (ugcurl); // uget_curl_decide_scheme() has called ug_uri_init() // to initialize ugcurl->uri.part // ug_uri_init (&ugcurl->uri.part, ugcurl->header.uri); if (ugcurl->uri.part.file != -1 && ugcurl->header_store) { ug_free (ugcurl->header.filename); ugcurl->header.filename = ug_uri_get_file (&ugcurl->uri.part); } if (ugcurl->scheme_type == SCHEME_FTP) { curl_easy_setopt (ugcurl->curl, CURLOPT_HEADERFUNCTION, (curl_write_callback) uget_curl_header_ftp0); } } // handle HTTP header "Content-Location:" else if (length > 18 && strncasecmp (buffer, "Content-Location: ", 18) == 0) { // exclude header and character '\r', '\n' buffer += 18; temp = ug_strndup (buffer, strcspn (buffer, "\r\n")); ug_uri_init (&ugcurl->uri.part, temp); if (ugcurl->uri.part.file != -1 && ugcurl->header_store) { ug_free (ugcurl->header.filename); ugcurl->header.filename = ug_uri_get_file (&ugcurl->uri.part); } ug_free (temp); } // handle HTTP header "Content-Disposition:" else if (length > 21 && strncasecmp (buffer, "Content-Disposition: ", 21) == 0) { // exclude header and character '\r', '\n' buffer += 21; buffer = ug_strndup (buffer, strcspn (buffer, "\r\n")); // grab filename file = strstr (buffer, "filename="); if (file) { file += 9; // value of "filename=" if (file[0] != '\"') temp = ug_strndup (file, strcspn (file, ";")); else { file += 1; temp = ug_strndup (file, strcspn (file, "\"")); } // grab filename ug_uri_init (&ugcurl->uri.part, temp); if (ugcurl->uri.part.file != -1 && ugcurl->header_store) { ug_free (ugcurl->header.filename); ugcurl->header.filename = ug_uri_get_file (&ugcurl->uri.part); } ug_free (temp); } ug_free (buffer); } return nmemb * size; } static size_t uget_curl_header_ftp0 (char *buffer, size_t size, size_t nmemb, UgetCurl* ugcurl) { // REST command response "350 xxxx" if FTP server support REST if (strncmp (buffer, "350", 3) == 0) { ugcurl->resumable = TRUE; curl_easy_setopt (ugcurl->curl, CURLOPT_HEADERFUNCTION, (curl_write_callback) uget_curl_output_none); curl_easy_setopt (ugcurl->curl, CURLOPT_HEADERDATA, NULL); } return nmemb * size; } static size_t uget_curl_output_none (char *buffer, size_t size, size_t nmemb, void* data) { return nmemb * size; } static size_t uget_curl_output_default (char *buffer, size_t size, size_t nmemb, void* data) { UgetCurl* ugcurl = data; FILE* file; ugcurl->tested = TRUE; // This URL was tested. // prepare if (ugcurl->prepare.func && ugcurl->prepare.func (ugcurl, ugcurl->prepare.data) == FALSE) { return 0; } ugcurl->test_ok = TRUE; // This URL is OK. file = ugcurl->file.output; if (file == NULL) { ugcurl->event_code = UGET_EVENT_ERROR_NO_OUTPUT_FILE; // This will abort the transfer and return CURL_WRITE_ERROR. return 0; } // file offset ug_fseek (file, ugcurl->pos, SEEK_SET); #if defined(_MSC_VER) && !defined(__MINGW32__) // for MS VC only curl_easy_setopt (ugcurl->curl, CURLOPT_WRITEFUNCTION, fwrite); #else curl_easy_setopt (ugcurl->curl, CURLOPT_WRITEFUNCTION, NULL); #endif curl_easy_setopt (ugcurl->curl, CURLOPT_WRITEDATA, file); return fwrite (buffer, size, nmemb, file); } static int uget_curl_progress (UgetCurl* ugcurl, double dltotal, double dlnow, double ultotal, double ulnow) { int64_t dlsize, ulsize; dlsize = (int64_t) dlnow; ulsize = (int64_t) ulnow; ugcurl->pos = ugcurl->beg + dlsize; ugcurl->size[1] = ulsize; if (dlsize > 0 || ulsize > 0) ugcurl->state = UGET_CURL_RUN; ugcurl->progress_count++; if (ugcurl->progress_count > PROGRESS_COUNT_LIMIT) { ugcurl->progress_count = 0; curl_easy_getinfo (ugcurl->curl, CURLINFO_SPEED_UPLOAD, &ulnow); curl_easy_getinfo (ugcurl->curl, CURLINFO_SPEED_DOWNLOAD, &dlnow); ugcurl->speed[0] = (int64_t) dlnow; ugcurl->speed[1] = (int64_t) ulnow; } // speed limit changed if (ugcurl->limit_changed) { curl_easy_setopt (ugcurl->curl, CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t) ugcurl->limit[0]); curl_easy_setopt (ugcurl->curl, CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t) ugcurl->limit[1]); ugcurl->limit_changed = FALSE; } // Returning a non-zero value from this callback will cause libcurl // to abort the transfer and return CURLE_ABORTED_BY_CALLBACK. if (ugcurl->end > 0 && ugcurl->pos >= ugcurl->end) { ugcurl->pos = ugcurl->end; ugcurl->size[0] = ugcurl->pos - ugcurl->beg; return 1; } ugcurl->size[0] = ugcurl->pos - ugcurl->beg; if (ugcurl->paused) return 1; return 0; } // ---------------------------------------------------------------------------- // PWMD // #ifdef HAVE_LIBPWMD static int uget_curl_set_proxy_pwmd (UgetCurl* ugcurl, UgetProxy* proxy) { CURL* curl; struct pwmd_proxy_s pwmd; gpg_error_t rc; curl = ugcurl->curl; memset(&pwmd, 0, sizeof(pwmd)); rc = ug_set_pwmd_proxy_options(&pwmd, proxy); if (rc) goto fail; // proxy host and port curl_easy_setopt (curl, CURLOPT_PROXY, pwmd.hostname); curl_easy_setopt (curl, CURLOPT_PROXYPORT, pwmd.port); // proxy user and password if (pwmd.username || pwmd.password || !strcasecmp(pwmd.type, "socks4") || !strcasecmp(pwmd.type, "socks5")) { curl_easy_setopt (curl, CURLOPT_PROXYUSERNAME, (pwmd.username) ? pwmd.username : ""); curl_easy_setopt (curl, CURLOPT_PROXYPASSWORD, (pwmd.password) ? pwmd.password : ""); } else { curl_easy_setopt (curl, CURLOPT_PROXYUSERNAME, NULL); curl_easy_setopt (curl, CURLOPT_PROXYPASSWORD, NULL); } if (!strcasecmp(pwmd.type, "socks4")) curl_easy_setopt (curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); else if (!strcasecmp(pwmd.type, "socks5")) curl_easy_setopt (curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); ug_close_pwmd(&pwmd); return TRUE; fail: ug_close_pwmd(&pwmd); ugcurl->state = UGET_CURL_ERROR; gchar *e = ug_strdup_printf("Pwmd ERR %u: %s", rc, gpg_strerror(rc)); ugcurl->event = uget_event_new_error (UGET_EVENT_ERROR_CUSTOM, e); g_free(e); return FALSE; } #endif // HAVE_LIBPWMD uget-2.2.3/uget/UgetApp.h0000664000175000017500000002740313602733704012102 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_APP_H #define UGET_APP_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetApp UgetApp; // ---------------------------------------------------------------------------- // UgetApp #define UGET_APP_MEMBERS \ UgetNode real; \ UgetNode split; \ UgetNode sorted; \ UgetNode sorted_split; \ UgetNode mix; \ UgetNode mix_split; \ UgRegistry infos; \ UgRegistry plugins; \ UgetPluginInfo* plugin_default; \ UgetTask task; \ UgArrayPtr nodes; \ void* uri_hash; \ char* config_dir; \ int n_error; \ int n_moved; \ int n_deleted; \ int n_completed struct UgetApp { UGET_APP_MEMBERS; /* // ------ UgetApp members ------ UgetNode real; // real root node for real nodes UgetNode split; // virtual root UgetNode sorted; // virtual root UgetNode sorted_split; // virtual root UgetNode mix; // virtual root UgetNode mix_split; // virtual root UgRegistry infos; UgRegistry plugins; UgetPluginInfo* plugin_default; UgetTask task; UgArrayPtr nodes; void* uri_hash; char* config_dir; int n_error; // uget_app_grow() will count these value: int n_moved; // n_error, n_moved, n_deleted, and int n_deleted; // n_completed int n_completed; // */ }; void uget_app_init (UgetApp* app); void uget_app_final (UgetApp* app); // uget_app_grow() activate queue download // return number of active download int uget_app_grow (UgetApp* app, int no_queuing); // uget_app_trim() remove finished/recycled download that over capacity // return number of trimmed download int uget_app_trim (UgetApp* app, UgArrayPtr* deleted_nodes); void uget_app_set_config_dir (UgetApp* app, const char* dir); void uget_app_set_sorting (UgetApp* app, UgCompareFunc func, int reversed); void uget_app_set_notification (UgetApp* app, void* data, UgetNodeFunc inserted, UgetNodeFunc removed, UgNotifyFunc updated); // category functions // uget_app_move_category() return TRUE or FALSE void uget_app_add_category (UgetApp* app, UgetNode* cnode, int save_file); int uget_app_move_category (UgetApp* app, UgetNode* cnode, UgetNode* position); void uget_app_delete_category (UgetApp* app, UgetNode* cnode); void uget_app_stop_category (UgetApp* app, UgetNode* cnode); void uget_app_pause_category (UgetApp* app, UgetNode* cnode); void uget_app_resume_category (UgetApp* app, UgetNode* cnode); UgetNode* uget_app_match_category (UgetApp* app, UgUri* uuri, const char* file); // download functions: return TRUE or FALSE int uget_app_add_download_uri (UgetApp* app, const char* uri, UgetNode* cnode, int apply); int uget_app_add_download (UgetApp* app, UgetNode* dnode, UgetNode* cnode, int apply); int uget_app_move_download (UgetApp* app, UgetNode* dnode, UgetNode* dnode_position); int uget_app_move_download_to (UgetApp* app, UgetNode* dnode, UgetNode* cnode); int uget_app_delete_download (UgetApp* app, UgetNode* dnode, int delete_file); int uget_app_recycle_download (UgetApp* app, UgetNode* dnode); int uget_app_activate_download (UgetApp* app, UgetNode* dnode); int uget_app_pause_download (UgetApp* app, UgetNode* dnode); int uget_app_queue_download (UgetApp* app, UgetNode* dnode); void uget_app_reset_download_name (UgetApp* app, UgetNode* dnode); #ifdef NO_URI_HASH #define uget_app_use_uri_hash(app) #define uget_app_save_attachment(app, info, file, rename) #define uget_app_clear_attachment(app) #else void uget_app_use_uri_hash (UgetApp* app); char* uget_app_save_attachment(UgetApp* app, UgInfo* info, const char* file, const char* rename); void uget_app_clear_attachment (UgetApp* app); #endif // plug-in functions // uget_app_find_plugin() return TRUE or FALSE void uget_app_clear_plugins (UgetApp* app); void uget_app_add_plugin (UgetApp* app, const UgetPluginInfo* pinfo); void uget_app_remove_plugin (UgetApp* app, const UgetPluginInfo* pinfo); int uget_app_find_plugin (UgetApp* app, const char* name, const UgetPluginInfo** pinfo); void uget_app_set_default_plugin (UgetApp* app, const UgetPluginInfo* pinfo); UgetPluginInfo* uget_app_match_plugin (UgetApp* app, const char* uri, const UgetPluginInfo* exclude); // ---------------------------------------------------------------------------- // save/load categories // uget_app_save_category() return TRUE or FALSE int uget_app_save_category (UgetApp* app, UgetNode* cnode, const char* filename, void* jsonfile); UgetNode* uget_app_load_category (UgetApp* app, const char* filename, void* jsonfile); int uget_app_save_category_fd (UgetApp* app, UgetNode* cnode, int fd, void* jsonfile); UgetNode* uget_app_load_category_fd (UgetApp* app, int fd, void* jsonfile); // return number of category save/load int uget_app_save_categories (UgetApp* app, const char* folder); int uget_app_load_categories (UgetApp* app, const char* folder); // ---------------------------------------------------------------------------- // keeping status void uget_node_set_keeping (UgetNode* node, int enable); #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct AppMethod { inline void init(void) { uget_app_init((UgetApp*)this); } inline void final(void) { uget_app_final((UgetApp*)this); } inline void grow(int noQueuing) { uget_app_grow((UgetApp*)this, noQueuing); } inline void trim(UgArrayPtr* deleted_nodes = NULL) { uget_app_trim((UgetApp*)this, deleted_nodes); } inline void setConfigDir(const char* dir) { uget_app_set_config_dir((UgetApp*)this, dir); } inline void setSorting(UgCompareFunc func, int reversed) { uget_app_set_sorting((UgetApp*)this, func, reversed); } inline void setNotification(void* data, UgetNodeFunc inserted, UgetNodeFunc removed, UgNotifyFunc updated) { uget_app_set_notification((UgetApp*)this, data, inserted, removed, updated); } inline void addCategory(UgetNode* cnode, int saveFile) { uget_app_add_category((UgetApp*)this, cnode, saveFile); } inline void moveCategory(UgetNode* cnode, UgetNode* position) { uget_app_move_category((UgetApp*)this, cnode, position); } inline void deleteCategory(UgetNode* cnode) { uget_app_delete_category((UgetApp*)this, cnode); } inline void stopCategory(UgetNode* cnode) { uget_app_stop_category((UgetApp*)this, cnode); } inline void pauseCategory(UgetNode* cnode) { uget_app_pause_category((UgetApp*)this, cnode); } inline void resumeCategory(UgetNode* cnode) { uget_app_resume_category((UgetApp*)this, cnode); } inline UgetNode* matchCategory(UgUri* uuri, const char* file) { return uget_app_match_category((UgetApp*)this, uuri, file); } inline int addDownload(const char* uri, UgetNode* cnode, int apply) { return uget_app_add_download_uri((UgetApp*)this, uri, cnode, apply); } inline int addDownload(UgetNode* dnode, UgetNode* cnode, int apply) { return uget_app_add_download((UgetApp*)this, dnode, cnode, apply); } inline int moveDownload(UgetNode* dnode, UgetNode* dnode_position) { return uget_app_move_download((UgetApp*)this, dnode, dnode_position); } inline int moveDownloadTo(UgetNode* dnode, UgetNode* cnode) { return uget_app_move_download_to((UgetApp*)this, dnode, cnode); } inline int deleteDownload(UgetNode* dnode, int deleteFile) { return uget_app_delete_download((UgetApp*)this, dnode, deleteFile); } inline int recycleDownload(UgetNode* dnode) { return uget_app_recycle_download((UgetApp*)this, dnode); } inline int activateDownload(UgetNode* dnode) { return uget_app_activate_download((UgetApp*)this, dnode); } inline int pauseDownload(UgetNode* dnode) { return uget_app_pause_download((UgetApp*)this, dnode); } inline int queueDownload(UgetNode* dnode) { return uget_app_queue_download((UgetApp*)this, dnode); } inline void resetDownloadName(UgetNode* dnode) { uget_app_reset_download_name((UgetApp*)this, dnode); } inline void useUriHash(void) { uget_app_use_uri_hash((UgetApp*)this); } inline void clearAttachment(void) { uget_app_clear_attachment((UgetApp*)this); } inline void clearPlugins(void) { uget_app_clear_plugins((UgetApp*)this); } inline void addPlugin(const UgetPluginInfo* pinfo) { uget_app_add_plugin((UgetApp*)this, pinfo); } inline void removePlugin(const UgetPluginInfo* pinfo) { uget_app_remove_plugin((UgetApp*)this, pinfo); } inline int findPlugin(const char* name, const UgetPluginInfo** pinfo) { return uget_app_find_plugin((UgetApp*)this, name, pinfo); } inline void setDefaultPlugin(const UgetPluginInfo* pinfo) { return uget_app_set_default_plugin((UgetApp*)this, pinfo); } inline UgetPluginInfo* matchPlugin(const char* uri, const UgetPluginInfo* exclude) { return uget_app_match_plugin((UgetApp*)this, uri, exclude); } inline int saveCategory(UgetNode* cnode, const char* filename, void* jsonfile) { return uget_app_save_category((UgetApp*)this, cnode, filename, jsonfile); } inline UgetNode* loadCategory(const char* filename, void* jsonfile) { return uget_app_load_category((UgetApp*)this, filename, jsonfile); } // return number of category save/load inline int saveCategories(const char* folder) { return uget_app_save_categories((UgetApp*)this, folder); } inline int loadCategories(const char* folder) { return uget_app_load_categories((UgetApp*)this, folder); } }; // This one is for directly use only. You can NOT derived it. struct App : AppMethod, UgetApp {}; }; // namespace Uget #endif // __cplusplus #endif // UGET_APP_H uget-2.2.3/uget/pwmd.c0000664000175000017500000002001213602733704011464 00000000000000/* Copyright (C) 2011-2016 Ben Kibbey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "pwmd.h" static gpg_error_t alloc_result(const char* s, size_t len, char** result) { char *b; if (!len) { *result = NULL; return 0; } b = pwmd_malloc(len+1); if (!b) return GPG_ERR_ENOMEM; memcpy(b, s, len); b[len] = 0; *result = b; return 0; } static int failure(const char* root, const char* id, gpg_error_t rc, int required) { if (!rc) return 0; if (gpg_err_code (rc) == GPG_ERR_ELEMENT_NOT_FOUND || gpg_err_code (rc) == GPG_ERR_NO_DATA) { if (!required) return 0; fprintf(stderr, "pwmd: ERR(%u): %s%s%s: %s\n", rc, root ? root : "", root ? "^": "", id, gpg_strerror (rc)); } return 1; } gpg_error_t ug_set_pwmd_proxy_options(struct pwmd_proxy_s* pwmd, UgetProxy* proxy) { char *bulk = NULL; const gchar *bresult = NULL; gchar *result = NULL; size_t brlen, len; size_t offset = 0; char *str; gpg_error_t rcs[4] = { 0 }; gpg_error_t rc, brc; pwm_t *pwm = NULL; gchar *path = NULL; const gchar *root = proxy->pwmd.element; gint i; gchar **args = NULL; pwmd->port = 80; if (proxy->pwmd.element) { pwmd->path = path = g_strdup_printf("%s\t", proxy->pwmd.element); for (i = 0; path[i]; i++) { if (path[i] == '^') path[i] = '\t'; } } pwmd_init(); rc = pwmd_new("uget", &pwm); if (rc) goto fail; rc = pwmd_setopt(pwm, PWMD_OPTION_SOCKET_TIMEOUT, 120); if (!rc && proxy->pwmd.socket_args && *proxy->pwmd.socket_args) args = g_strsplit(proxy->pwmd.socket_args, ",", 0); if (!rc) rc = pwmd_connect(pwm, proxy->pwmd.socket, g_strv_length (args) > 0 ? args[0] : NULL, g_strv_length (args) > 1 ? args[1] : NULL, g_strv_length (args) > 2 ? args[2] : NULL, g_strv_length (args) > 3 ? args[3] : NULL, g_strv_length (args) > 4 ? args[4] : NULL, g_strv_length (args) > 5 ? args[5] : NULL, g_strv_length (args) > 6 ? args[6] : NULL, g_strv_length (args) > 7 ? args[7] : NULL ); if (rc) goto fail; rc = pwmd_setopt(pwm, PWMD_OPTION_PINENTRY_DESC, NULL); if (!rc) rc = pwmd_setopt(pwm, PWMD_OPTION_LOCK_TIMEOUT, 100); if (rc) goto fail; rc = pwmd_open(pwm, proxy->pwmd.file, NULL, NULL); if (rc) goto fail; rc = pwmd_bulk_append(&bulk, "NOP", 3, "NOP", NULL, 0, &offset); if (rc) goto fail; rcs[0] = 0; rcs[1] = GPG_ERR_MISSING_ERRNO; str = pwmd_strdup_printf("%stype", path); rc = pwmd_bulk_append_rc(&bulk, rcs, "TYPE", 4, "GET", str, strlen (str), &offset); pwmd_free(str); if (rc) goto fail; rcs[0] = 0; rcs[1] = GPG_ERR_MISSING_ERRNO; str = pwmd_strdup_printf("%shostname", path); rc = pwmd_bulk_append_rc(&bulk, rcs, "HOST", 4, "GET", str, strlen (str), &offset); pwmd_free(str); if (rc) goto fail; rcs[0] = 0; rcs[1] = gpg_err_make (GPG_ERR_SOURCE_USER_1, GPG_ERR_ELEMENT_NOT_FOUND); rcs[2] = GPG_ERR_MISSING_ERRNO; str = pwmd_strdup_printf("%sport", path); rc = pwmd_bulk_append_rc(&bulk, rcs, "PORT", 4, "GET", str, strlen (str), &offset); pwmd_free(str); if (rc) goto fail; rcs[0] = 0; rcs[1] = gpg_err_make (GPG_ERR_SOURCE_USER_1, GPG_ERR_ELEMENT_NOT_FOUND); rcs[2] = gpg_err_make (GPG_ERR_SOURCE_USER_1, GPG_ERR_NO_DATA); rcs[3] = GPG_ERR_MISSING_ERRNO; str = pwmd_strdup_printf("%susername", path); rc = pwmd_bulk_append_rc(&bulk, rcs, "USER", 4, "GET", str, strlen (str), &offset); pwmd_free(str); if (rc) goto fail; rcs[0] = 0; rcs[1] = gpg_err_make (GPG_ERR_SOURCE_USER_1, GPG_ERR_ELEMENT_NOT_FOUND); rcs[2] = gpg_err_make (GPG_ERR_SOURCE_USER_1, GPG_ERR_NO_DATA); rcs[3] = GPG_ERR_MISSING_ERRNO; str = pwmd_strdup_printf("%spassword", path); rc = pwmd_bulk_append_rc(&bulk, rcs, "PASS", 4, "GET", str, strlen (str), &offset); pwmd_free(str); if (rc) goto fail; rc = pwmd_bulk_finalize(&bulk); if (!rc) rc = pwmd_bulk(pwm, &result, &len, NULL, NULL, bulk, strlen (bulk)); if (rc) goto fail; offset = 0; rc = pwmd_bulk_result(result, len, "TYPE", 4, &offset, &bresult, &brlen, &brc); if (failure(root, "type", rc ? rc : brc, 1)) goto fail; else if(brlen) alloc_result (bresult, brlen, &pwmd->type); rc = pwmd_bulk_result(result, len, "HOST", 4, &offset, &bresult, &brlen, &brc); if (failure(root, "hostname", rc ? rc : brc, 1)) goto fail; else if (brlen) alloc_result(bresult, brlen, &pwmd->hostname); rc = pwmd_bulk_result(result, len, "PORT", 4, &offset, &bresult, &brlen, &brc); if (failure(root, "port", rc ? rc : brc, 0)) goto fail; else if (brlen) { char *p; alloc_result(bresult, brlen, &p); pwmd->port = atoi(p); pwmd_free(p); } rc = pwmd_bulk_result(result, len, "USER", 4, &offset, &bresult, &brlen, &brc); if (failure(root, "username", rc ? rc : brc, 0)) goto fail; else if (brlen) alloc_result(bresult, brlen, &pwmd->username); rc = pwmd_bulk_result(result, len, "PASS", 4, &offset, &bresult, &brlen, &brc); if (failure(root, "password", rc ? rc : brc, 0)) goto fail; else if (brlen) alloc_result(bresult, brlen, &pwmd->password); brc = 0; fail: if (args) g_strfreev(args); pwmd_free(result); pwmd_free(bulk); pwmd_close(pwm); return rc ? rc : brc; } void ug_close_pwmd(struct pwmd_proxy_s* pwmd) { pwmd_free(pwmd->type); pwmd_free(pwmd->hostname); pwmd_free(pwmd->username); pwmd_free(pwmd->password); g_free(pwmd->path); } uget-2.2.3/uget/UgetSequence.h0000664000175000017500000000617113602733704013131 00000000000000/* * * Copyright (C) 2016-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_SEQUENCE_H #define UGET_SEQUENCE_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetSequence UgetSequence; typedef struct UgetSeqRange UgetSeqRange; struct UgetSeqRange { // [first, last] // e.g. 0-9, A-Z, a-z, or Unicode uint32_t first; uint32_t last; uint32_t cur; // if digits == 0, use ASCII or Unicode to generate string. int digits; }; struct UgetSequence { UG_ARRAY_MEMBERS (UgetSeqRange); /* // ------ UgArray members ------ UgetSeqRange* at; int length; int allocated; int element_size; */ UgetSeqRange* range_last; // used by uget_sequence_get_list() UgBuffer buf; }; void uget_sequence_init (UgetSequence* useq); void uget_sequence_final (UgetSequence* useq); void uget_sequence_add (UgetSequence* useq, uint32_t first, uint32_t last, int digits); void uget_sequence_clear (UgetSequence* useq); int uget_sequence_count (UgetSequence* useq, const char* pattern); // call uget_sequence_clear_result() to clear result list int uget_sequence_get_list (UgetSequence* useq, const char* pattern, UgList* result); int uget_sequence_get_preview (UgetSequence* useq, const char* pattern, UgList* result); void uget_sequence_clear_result (UgList* result); /* param: pattern is a string that contain wildcard character *. e.g. Number-*.jpg Number-0.jpg, Number-1.jpg ...etc Number-a.jpg, Number-b.jpg ...etc Number-A.jpg, Number-B.jpg ...etc */ #ifdef __cplusplus } #endif #endif // UGET_SEQUENCE_H uget-2.2.3/uget/UgetMedia.h0000664000175000017500000001233513602733704012377 00000000000000/* * * Copyright (C) 2015-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ // YouTube support #ifndef UGET_MEDIA_H #define UGET_MEDIA_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetMedia UgetMedia; typedef struct UgetMediaItem UgetMediaItem; typedef enum UgetMediaMatchMode { UGET_MEDIA_MATCH_0 = 0, UGET_MEDIA_MATCH_1 = 1, UGET_MEDIA_MATCH_2, UGET_MEDIA_MATCH_NEAR, // near quality UGET_MEDIA_N_MATCH_MODE, } UgetMediaMatchMode; // Video Quality typedef enum UgetMediaQuality { UGET_MEDIA_QUALITY_UNKNOWN = 0, UGET_MEDIA_QUALITY_144P, // YouTube tiny UGET_MEDIA_QUALITY_240P, // YouTube small UGET_MEDIA_QUALITY_360P, // YouTube medium UGET_MEDIA_QUALITY_480P, // YouTube large UGET_MEDIA_QUALITY_720P, // YouTube hd720 UGET_MEDIA_QUALITY_1080P, // YouTube hd1080 UGET_MEDIA_N_QUALITY, } UgetMediaQuality; typedef enum UgetMediaType { UGET_MEDIA_TYPE_UNKNOWN = 0, UGET_MEDIA_TYPE_VIDEO = 0x1000, UGET_MEDIA_TYPE_AUDIO = 0x2000, // used by uget_media_match() UGET_MEDIA_TYPE_DEMUX = 0xF000, // include demuxed audio or video UGET_MEDIA_TYPE_MUX = 0x0FFF, // include files that mux audio and video // video/mp4; codecs="avc1.42E01E, mp4a.40.2" // video/webm; codecs="vp8.0, vorbis" UGET_MEDIA_TYPE_MP4 = 0x0001, UGET_MEDIA_TYPE_WEBM = 0x0002, UGET_MEDIA_TYPE_3GPP = 0x0003, UGET_MEDIA_TYPE_FLV = 0x0004, UGET_MEDIA_N_TYPE, // --- Video only --- // video/mp4; codecs="avc1.42E01E" UGET_MEDIA_VIDEO_MP4 = UGET_MEDIA_TYPE_MP4 | UGET_MEDIA_TYPE_VIDEO, // video/webm; codecs="vp8.0" UGET_MEDIA_VIDEO_WEBM = UGET_MEDIA_TYPE_WEBM | UGET_MEDIA_TYPE_VIDEO, UGET_MEDIA_VIDEO_3GPP = UGET_MEDIA_TYPE_3GPP | UGET_MEDIA_TYPE_VIDEO, UGET_MEDIA_VIDEO_FLV = UGET_MEDIA_TYPE_FLV | UGET_MEDIA_TYPE_VIDEO, // --- Audio only --- // audio/mp4; codecs="mp4a.40.2" UGET_MEDIA_AUDIO_MP4 = UGET_MEDIA_TYPE_MP4 | UGET_MEDIA_TYPE_AUDIO, // audio/webm; codecs="opus" UGET_MEDIA_AUDIO_WEBM = UGET_MEDIA_TYPE_WEBM | UGET_MEDIA_TYPE_AUDIO, } UgetMediaType; struct UgetMedia { UG_LIST_MEMBERS(UgetMediaItem); // uintptr_t size; // UgetMediaItem* head; // UgetMediaItem* tail; UgUri uuri; UgUriQuery uquery; int site_id; char* url; char* title; // error message UgetEvent* event; // for internal use only void* data; void* data1; void* data2; void* data3; void* data4; }; UgetMedia* uget_media_new(const char* url, UgetSiteId site_id); void uget_media_free(UgetMedia* umedia); void uget_media_clear(UgetMedia* umedia, int free_items); int uget_media_grab_items(UgetMedia* umedia, UgetProxy* proxy); // return begin of matched items. Don't free it UgetMediaItem* uget_media_match(UgetMedia* umedia, UgetMediaMatchMode mode, UgetMediaQuality quality, UgetMediaType type); // ---------------------------------------------------------------------------- // UgetMediaItem struct UgetMediaItem { UG_LINK_MEMBERS(UgetMediaItem, UgetMediaItem, self); // UgetMediaItem* self; // UgetMediaItem* next; // UgetMediaItem* prev; char* url; int quality; // video - 480p, 720p int sample_rate; // audio int type; // UgetMediaType // for internal use only union { int integer; char* string; void* pointer; } data; union { int integer; char* string; void* pointer; } data1; union { int integer; char* string; void* pointer; } data2; }; UgetMediaItem* uget_media_item_new(UgetMedia* umedia); void uget_media_item_free(UgetMediaItem* umitem); #ifdef __cplusplus } #endif // __cplusplus #endif // End of UGET_MEDIA_H uget-2.2.3/uget/UgetA2cf.c0000664000175000017500000005331513602733704012131 00000000000000/* * * Copyright (C) 2011-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #define INFO_HASH_LEN_MAX 8192 enum { ENDIAN_UNKNOWN, ENDIAN_BE, ENDIAN_LE, }; union un_int16 { uint16_t integer; uint8_t bytes[2]; }; union un_int32 { uint32_t integer; uint8_t bytes[4]; }; union un_int64 { uint64_t integer; uint8_t bytes[8]; }; static int endian_type = ENDIAN_UNKNOWN; int init_endian_type (void) { union un_int16 value; if (endian_type == ENDIAN_UNKNOWN) { value.integer = 1; if (value.bytes[0] == 0) endian_type = ENDIAN_BE; else endian_type = ENDIAN_LE; } return endian_type; } void swap_le_be (uint8_t* dest, const uint8_t* src, int length) { int index; for (index = 0; index < length; index++) { length--; dest[index] = src[length]; dest[length] = src[index]; } } uint16_t uint16_to_be (uint16_t value) { union un_int16 value16; if (endian_type != ENDIAN_BE) { swap_le_be (value16.bytes, (uint8_t*)&value, 2); return value16.integer; } return value; } uint32_t uint32_to_be (uint32_t value) { union un_int32 value32; if (endian_type != ENDIAN_BE) { swap_le_be (value32.bytes, (uint8_t*)&value, 4); return value32.integer; } return value; } uint64_t uint64_to_be (uint64_t value) { union un_int64 value64; if (endian_type != ENDIAN_BE) { swap_le_be (value64.bytes, (uint8_t*)&value, 8); return value64.integer; } return value; } #define uint16_from_be uint16_to_be #define uint32_from_be uint32_to_be #define uint64_from_be uint64_to_be static int find_bit0 (uint8_t* bytes_beg, uint32_t bytes_len, uint32_t* beg_bit); static int find_bit1 (uint8_t* bytes_beg, uint32_t bytes_len, uint32_t* beg_bit); static void fill_bits (uint8_t* bytes, uint32_t nth_bit, uint32_t n_bits); static int test_bit (uint8_t* bytes, uint32_t nth_bit); static void set_bit (uint8_t* bytes, uint32_t nth_bit); // ---------------------------------------------------------------------------- #define A2CF_LAST_PIECE_LEN(a2cf) ((a2cf)->total_size % (a2cf)->piece_len) static UgetA2cfPiece* a2cf_piece_new (uint32_t length) { UgetA2cfPiece* piece; uint32_t bitfield_len; // bitfield_len = length / (16384*8); bitfield_len = length >> (14+3); bitfield_len += (length & (16384*8-1)) ? 1 : 0; piece = ug_malloc0 (sizeof(UgetA2cfPiece) + bitfield_len); // piece->self = piece; piece->length = length; piece->bitfield_len = bitfield_len; return piece; } static int a2cf_piece_read (UgetA2cfPiece* piece, FILE* file) { uint32_t bitfield_len = piece->bitfield_len; ug_fread (file, (char*)&piece->index, 4); ug_fread (file, (char*)&piece->length, 4); ug_fread (file, (char*)&piece->bitfield_len, 4); piece->index = uint32_from_be (piece->index); piece->length = uint32_from_be (piece->length); piece->bitfield_len = uint32_from_be (piece->bitfield_len); if (bitfield_len < piece->bitfield_len) return FALSE; // piece->bitfield = ug_malloc (piece->bitfield_len); ug_fread (file, piece->bitfield, piece->bitfield_len); return TRUE; } static void a2cf_piece_write (UgetA2cfPiece* piece, FILE* file) { union un_int32 value32; value32.integer = uint32_to_be (piece->index); ug_fwrite (file, value32.bytes, 4); value32.integer = uint32_to_be (piece->length); ug_fwrite (file, value32.bytes, 4); value32.integer = uint32_to_be (piece->bitfield_len); ug_fwrite (file, value32.bytes, 4); if (piece->bitfield_len) ug_fwrite (file, piece->bitfield, piece->bitfield_len); } static void a2cf_piece_truncate (UgetA2cfPiece* piece, uint32_t length) { piece->length = length; // piece->bitfield_len = piece->length / (16384*8); piece->bitfield_len = piece->length >> (14+3); // piece->bitfield_len += (piece->length % (16384*8)) ? 1 : 0; piece->bitfield_len += (piece->length & (16384*8-1)) ? 1 : 0; } static int a2cf_piece_filled (UgetA2cfPiece* piece) { uint8_t mask; uint8_t* bytes, *bytes_end; uint32_t n_bits; bytes = piece->bitfield; bytes_end = bytes + piece->bitfield_len; // n_bits = (piece->length / 16384) % 8; n_bits = (piece->length >> 14) & 7; // if (piece->length & 16384-1) { if (piece->length & 16383) { if (n_bits == 7) n_bits = 0; else bytes_end--; } for (; bytes < bytes_end; bytes++) { if (bytes[0] != 0xFF) return FALSE; } for (mask = 0x80; n_bits > 0; n_bits--, mask >>= 1) { if (bytes[0] & mask) continue; return FALSE; } return TRUE; } static int a2cf_piece_lack (UgetA2cfPiece* piece, uint32_t* beg, uint32_t* end) { uint32_t bit_beg, bit_end; uint32_t bit_limit; // bit_limit = (piece->length / 16384) + ((piece->length % 16384) ? 1 : 0); bit_limit = (piece->length >> 14) + ((piece->length & 16383) ? 1 : 0); // bit_beg = beg[0] / 16384; bit_beg = beg[0] >> 14; if (find_bit0 (piece->bitfield, piece->bitfield_len, &bit_beg) == FALSE) return FALSE; if (bit_beg >= bit_limit) return FALSE; // beg[0] = bit_beg * 16384; beg[0] = bit_beg << 14; bit_end = bit_beg + 1; if (find_bit1 (piece->bitfield, piece->bitfield_len, &bit_end) == FALSE) end[0] = piece->length; else { if (bit_end >= bit_limit) end[0] = piece->length; else end[0] = bit_end << 14; // end[0] = bit_end * 16384; } return TRUE; } static uint64_t a2cf_piece_completed (UgetA2cfPiece* piece) { uint32_t bit_beg; uint32_t bit_limit; uint32_t last_bit_len; uint64_t completed; // bit_limit = (piece->length / 16384) + ((piece->length % 16384) ? 1 : 0); bit_limit = (piece->length >> 14) + ((piece->length & 16383) ? 1 : 0); bit_beg = 0; completed = 0; while (find_bit1 (piece->bitfield, piece->bitfield_len, &bit_beg)) { if (bit_beg >= bit_limit) break; if (bit_beg == bit_limit - 1) { last_bit_len = piece->length & 16383; if (last_bit_len) { completed += last_bit_len; break; } } completed += 16384; bit_beg++; } return completed; } // ---------------------------------------------------------------------------- static const uint64_t size_piece[14] = { (uint64_t) 1 * 8 * 16384, // index, shift = 0 (uint64_t) 2 * 8 * 16384, (uint64_t) 4 * 8 * 16384, (uint64_t) 8 * 8 * 16384, // index, shift = 3, 20 [default] (uint64_t) 16 * 8 * 16384, (uint64_t) 32 * 8 * 16384, (uint64_t) 64 * 8 * 16384, // index, shift = 6, 23 (uint64_t) 128 * 8 * 16384, (uint64_t) 256 * 8 * 16384, (uint64_t) 512 * 8 * 16384, // index, shift = 9, 26 (uint64_t) 1024 * 8 * 16384, (uint64_t) 2048 * 8 * 16384, (uint64_t) 4096 * 8 * 16384, // index, shift = 12, 29 (uint64_t) 8192 * 8 * 16384, }; void uget_a2cf_init (UgetA2cf* a2cf, uint64_t size) { int index; uint64_t piece_size; memset (a2cf, 0, sizeof (UgetA2cf)); a2cf->ver = 1; a2cf->total_len = size; // piece size for (index = 0; index < 14; index++) { piece_size = size_piece[index]; if (index < 3) { if (size < piece_size) break; } else if (size < piece_size * UINT32_MAX) break; } // a2cf->piece_len = (uint32_t) (8 * 16384) << index; a2cf->piece_len = (uint32_t) 1 << (3 + 14 + index); // a2cf->bitfield_len = (uint32_t)(size / (8 * a2cf->piece_len)) // a2cf->bitfield_len += (uint32_t)(size % (8 * a2cf->piece_len)) ? 1 : 0; a2cf->bitfield_len = (uint32_t)(size >> (3+3+14+index)); a2cf->bitfield_len += (uint32_t)(size & (8*a2cf->piece_len-1)) ? 1 : 0; a2cf->bitfield = (uint8_t*) ug_malloc0 (a2cf->bitfield_len); // piece // a2cf->piece.index_end = (uint32_t) (size / a2cf->piece_len); // a2cf->piece.index_end += (uint32_t) (size % a2cf->piece_len) ? 1 : 0; a2cf->piece.index_end = (uint32_t) (size >> (3+14+index)); a2cf->piece.index_end += (uint32_t) (size & (a2cf->piece_len-1)) ? 1 : 0; ug_list_init (&a2cf->piece.list); } void uget_a2cf_clear (UgetA2cf* a2cf) { ug_free (a2cf->info_hash); ug_free (a2cf->bitfield); a2cf->info_hash = NULL; a2cf->bitfield = NULL; a2cf->info_hash_len = 0; a2cf->bitfield_len = 0; // piece ug_list_foreach (&a2cf->piece.list, (UgForeachFunc) ug_free, NULL); ug_list_clear (&a2cf->piece.list, FALSE); } int uget_a2cf_load (UgetA2cf* a2cf, const char* filename) { UgetA2cfPiece* piece; FILE* file; uint32_t index; uint32_t n_pieces; uint32_t bitfield_len; init_endian_type (); file = ug_fopen (filename, "rb"); if (file == NULL) return FALSE; // version ug_fread (file, (char*)&a2cf->ver, 2); ug_fread (file, (char*)&a2cf->ext, 4); a2cf->ver = uint16_from_be (a2cf->ver); a2cf->ext = uint32_from_be (a2cf->ext); // check file version - uGet only support version 1 if (a2cf->ver != 1) goto failed; // info hash a2cf->info_hash_len = 0; ug_fread (file, (char*)&a2cf->info_hash_len, 4); a2cf->info_hash_len = uint32_from_be (a2cf->info_hash_len); if (a2cf->info_hash_len > INFO_HASH_LEN_MAX) goto failed; else if (a2cf->info_hash_len == 0) a2cf->info_hash = NULL; else { a2cf->info_hash = ug_malloc (a2cf->info_hash_len); ug_fread (file, a2cf->info_hash, a2cf->info_hash_len); } ug_fread (file, (char*)&a2cf->piece_len, 4); ug_fread (file, (char*)&a2cf->total_len, 8); ug_fread (file, (char*)&a2cf->upload_len, 8); a2cf->piece_len = uint32_from_be (a2cf->piece_len); a2cf->total_len = uint64_from_be (a2cf->total_len); a2cf->upload_len = uint64_from_be (a2cf->upload_len); // bitfield if (ug_fread (file, (char*)&a2cf->bitfield_len, 4) != 4) goto failed; a2cf->bitfield_len = uint32_from_be (a2cf->bitfield_len); // check bitfield_len bitfield_len = (uint32_t)(a2cf->total_len / (8 * a2cf->piece_len)); bitfield_len += (uint32_t)(a2cf->total_len % (8 * a2cf->piece_len)) ? 1 : 0; if (a2cf->bitfield_len == 0 || a2cf->bitfield_len != bitfield_len) { a2cf->bitfield = NULL; goto failed; } else { a2cf->bitfield = ug_malloc (a2cf->bitfield_len); if (ug_fread (file, a2cf->bitfield, a2cf->bitfield_len) != a2cf->bitfield_len) goto failed; } // The number of in-flight pieces. n_pieces = 0; ug_fread (file, (char*)&n_pieces, 4); n_pieces = uint32_from_be (n_pieces); // piece.index_end - calculate number of the last piece a2cf->piece.index_end = (uint32_t) (a2cf->total_len / a2cf->piece_len) + ( (a2cf->total_len % a2cf->piece_len) ? 1 : 0 ); // load in-flight pieces for (index = 0; index < n_pieces; index++) { piece = a2cf_piece_new (a2cf->piece_len); if (a2cf_piece_read (piece, file) == FALSE) { ug_free (piece); break; } ug_list_append (&a2cf->piece.list, (UgLink*) piece); } fclose (file); return TRUE; failed: fclose(file); return FALSE; } int uget_a2cf_save (UgetA2cf* a2cf, const char* filename) { UgetA2cfPiece* piece; FILE* file; uint32_t n_pieces; union { union un_int16 value16; union un_int32 value32; union un_int64 value64; } temp; init_endian_type (); // try to update existing file. file = ug_fopen (filename, "rb+"); if (file == NULL) file = ug_fopen (filename, "wb"); if (file == NULL) return FALSE; temp.value16.integer = uint16_to_be (a2cf->ver); ug_fwrite (file, temp.value16.bytes, 2); temp.value32.integer = uint32_to_be (a2cf->ext); ug_fwrite (file, temp.value32.bytes, 4); temp.value32.integer = uint32_to_be (a2cf->info_hash_len); ug_fwrite (file, temp.value32.bytes, 4); if (a2cf->info_hash) ug_fwrite (file, a2cf->info_hash, a2cf->info_hash_len); temp.value32.integer = uint32_to_be (a2cf->piece_len); ug_fwrite (file, temp.value32.bytes, 4); temp.value64.integer = uint64_to_be (a2cf->total_len); ug_fwrite (file, temp.value64.bytes, 8); temp.value64.integer = uint64_to_be (a2cf->upload_len); ug_fwrite (file, temp.value64.bytes, 8); temp.value32.integer = uint32_to_be (a2cf->bitfield_len); ug_fwrite (file, temp.value32.bytes, 4); if (a2cf->bitfield_len) ug_fwrite (file, a2cf->bitfield, a2cf->bitfield_len); n_pieces = a2cf->piece.list.size; temp.value32.integer = uint32_to_be (n_pieces); ug_fwrite (file, temp.value32.bytes, 4); for (piece = (void*)a2cf->piece.list.head; piece; piece = piece->next) a2cf_piece_write (piece, file); #ifndef __ANDROID__ // ug_ftruncate (file, ug_ftell (file)); // for updating existing file. #endif fclose (file); return TRUE; } int uget_a2cf_lack (UgetA2cf* a2cf, uint64_t* beg, uint64_t* end) { UgetA2cfPiece* piece; uint32_t index; uint32_t piece_beg; uint32_t piece_end; // check if (beg[0] == a2cf->total_len) return FALSE; index = (uint32_t) (beg[0] / a2cf->piece_len); piece_beg = (uint32_t) (beg[0] % a2cf->piece_len); // find begin for (; index < a2cf->piece.index_end; index++) { // test a2cf->bitfield if (test_bit (a2cf->bitfield, index) == TRUE) { piece_beg = 0; continue; } // find begin in piece piece = uget_a2cf_find (a2cf, index); if (piece) { if (a2cf_piece_lack (piece, &piece_beg, &piece_end)) { if (piece_end != piece->length) { beg[0] = (uint64_t)index * a2cf->piece_len; end[0] = beg[0] + piece_end; beg[0] = beg[0] + piece_beg; return TRUE; } } else { piece_beg = 0; continue; } } beg[0] = (uint64_t)index * a2cf->piece_len + piece_beg; // if current piece is the last piece if (index == a2cf->piece.index_end - 1) { end[0] = a2cf->total_len; return TRUE; } break; } if (index >= a2cf->piece.index_end) return FALSE; // find end for (index += 1; index < a2cf->piece.index_end; index++) { // test a2cf->bitfield if (test_bit (a2cf->bitfield, index) == TRUE) { end[0] = (uint64_t)index * a2cf->piece_len; return TRUE; } // find end in piece piece = uget_a2cf_find (a2cf, index); if (piece) { piece_beg = 0; piece_end = piece->length; a2cf_piece_lack (piece, &piece_beg, &piece_end); if (piece_beg != 0) { end[0] = (uint64_t)index * a2cf->piece_len; return TRUE; } if (piece_end != piece->length) { end[0] = (uint64_t)index * a2cf->piece_len + piece_end; return TRUE; } } } end[0] = a2cf->total_len; return TRUE; } static void uget_a2cf_fill_piece (UgetA2cf* a2cf, uint32_t index, uint32_t beg, uint32_t end) { UgetA2cfPiece* piece; uint32_t bit_beg, bit_end; if (test_bit (a2cf->bitfield, index) == FALSE) { if (beg == end) return; piece = uget_a2cf_realloc (a2cf, index); if (end == 0) end = piece->length; // bit_beg = beg / 16384; bit_beg = beg >> 14; bit_end = end >> 14; // piece->bitfield_len * 8 == piece->bitfield_len << 3 if (piece->length == end) { // if (piece->length & (16384-1)) if (piece->length & 16383) bit_end++; } fill_bits (piece->bitfield, bit_beg, bit_end - bit_beg); if (a2cf_piece_filled (piece)) { set_bit (a2cf->bitfield, index); // delete piece ug_list_remove (&a2cf->piece.list, (UgLink*)piece); ug_free (piece); } } } uint64_t uget_a2cf_fill (UgetA2cf* a2cf, uint64_t beg, uint64_t end) { UgetA2cfPiece* piece; uint32_t index; uint32_t index_beg, index_end; uint32_t piece_beg, piece_end; index_beg = (uint32_t) (beg / a2cf->piece_len); index_end = (uint32_t) (end / a2cf->piece_len); piece_beg = (uint32_t) (beg % a2cf->piece_len); piece_end = (uint32_t) (end % a2cf->piece_len); // first piece or only 1 piece if (index_beg == index_end) { uget_a2cf_fill_piece (a2cf, index_beg, piece_beg, piece_end); goto exit; } else if (piece_beg > 0) { uget_a2cf_fill_piece (a2cf, index_beg, piece_beg, 0); piece_beg = 0; index_beg++; } // last piece if (piece_end > 0) { uget_a2cf_fill_piece (a2cf, index_end, 0, piece_end); // piece_end = 0; } // middle for (index = index_beg; index < index_end; index++) { if (test_bit (a2cf->bitfield, index) == TRUE) continue; // delete piece piece = uget_a2cf_find (a2cf, index); if (piece) { ug_list_remove (&a2cf->piece.list, (UgLink*)piece); ug_free (piece); } } fill_bits (a2cf->bitfield, index_beg, index_end - index_beg); exit: if (end == a2cf->total_len) return end; return end & ~16383; } uint64_t uget_a2cf_completed (UgetA2cf* a2cf) { UgetA2cfPiece* piece; uint32_t index; uint32_t last_piece_len; uint64_t completed; completed = 0; piece = (UgetA2cfPiece*) a2cf->piece.list.head; for (index = 0; index < a2cf->piece.index_end; index++) { if (test_bit (a2cf->bitfield, index) == TRUE) { if (index == a2cf->piece.index_end - 1) { last_piece_len = a2cf->total_len % a2cf->piece_len; if (last_piece_len) { completed += last_piece_len; break; } } completed += a2cf->piece_len; continue; } if (piece && piece->index == index) { completed += a2cf_piece_completed (piece); piece = piece->next; } } return completed; } void uget_a2cf_insert (UgetA2cf* a2cf, UgetA2cfPiece* newpiece) { UgetA2cfPiece* piece; if (a2cf->piece.list.head == NULL) { ug_list_prepend (&a2cf->piece.list, (UgLink*)newpiece); return; } for (piece = (void*)a2cf->piece.list.head; piece; piece = piece->next) { if (piece->index > newpiece->index) { ug_list_insert (&a2cf->piece.list, (void*)piece, (void*)newpiece); return; } } ug_list_append (&a2cf->piece.list, (void*)newpiece); } UgetA2cfPiece* uget_a2cf_find (UgetA2cf* a2cf, uint32_t piece_index) { UgetA2cfPiece* piece; for (piece = (void*)a2cf->piece.list.head; piece; piece = piece->next) { if (piece->index == piece_index) return piece; else if (piece->index > piece_index) return NULL; } return NULL; } UgetA2cfPiece* uget_a2cf_realloc (UgetA2cf* a2cf, uint32_t piece_index) { UgetA2cfPiece* piece; piece = uget_a2cf_find (a2cf, piece_index); if (piece == NULL) { piece = a2cf_piece_new (a2cf->piece_len); piece->index = piece_index; if (piece_index == a2cf->piece.index_end - 1) a2cf_piece_truncate (piece, a2cf->total_len % a2cf->piece_len); uget_a2cf_insert (a2cf, piece); } return piece; } // ---------------------------------------------------------------------------- // beg_bit: [in, out] static int find_bit0 (uint8_t* bytes_beg, uint32_t bytes_len, uint32_t* beg_bit) { int counts; uint8_t* bytes; uint8_t* bytes_end; uint8_t mask; bytes_end = bytes_beg + bytes_len; bytes = bytes_beg + (beg_bit[0] >> 3); counts = beg_bit[0] & 7; if (bytes >= bytes_end) return FALSE; if (counts != 0) { for (mask = 0x80 >> counts; counts < 8; counts++, mask >>= 1) { if ((bytes[0] & mask) == 0) { beg_bit[0] = ((bytes - bytes_beg) << 3) + counts; return TRUE; } } bytes++; } for (; bytes < bytes_end; bytes++) { if (bytes[0] != 0xFF) break; } if (bytes < bytes_end) { for (mask = 0x80, counts = 0; counts < 8; counts++, mask >>= 1) { if ((bytes[0] & mask) == 0) { beg_bit[0] = ((bytes - bytes_beg) << 3) + counts; return TRUE; } } } return FALSE; } // beg_bit: [in, out] static int find_bit1 (uint8_t* bytes_beg, uint32_t bytes_len, uint32_t* beg_bit) { int counts; uint8_t* bytes; uint8_t* bytes_end; uint8_t mask; bytes_end = bytes_beg + bytes_len; bytes = bytes_beg + (beg_bit[0] >> 3); counts = beg_bit[0] & 7; if (bytes >= bytes_end) return FALSE; if (counts != 0) { for (mask = 0x80 >> counts; counts < 8; counts++, mask >>= 1) { if (bytes[0] & mask) { beg_bit[0] = ((bytes - bytes_beg) << 3) + counts; return TRUE; } } bytes++; } for (; bytes < bytes_end; bytes++) { if (bytes[0] != 0) break; } if (bytes < bytes_end) { for (mask = 0x80, counts = 0; counts < 8; counts++, mask >>= 1) { if (bytes[0] & mask) { beg_bit[0] = ((bytes - bytes_beg) << 3) + counts; return TRUE; } } } return FALSE; } static void set_bit (uint8_t* bytes, uint32_t nth_bit) { uint8_t cur_bit; // bytes += nth_bit / 8; bytes += nth_bit >> 3; // nth_bit_beg = beg % 8; cur_bit = nth_bit & 7; bytes[0] |= (0x80 >> cur_bit); } static int test_bit (uint8_t* bytes, uint32_t nth_bit) { uint8_t cur_bit; // bytes += nth_bit / 8; bytes += nth_bit >> 3; // cur_bit = nth_bit % 8; cur_bit = nth_bit & 7; if (bytes[0] & (0x80 >> cur_bit)) return TRUE; else return FALSE; } static void fill_bits (uint8_t* bytes, uint32_t nth_bit, uint32_t n_bits) { uint8_t mask; uint8_t counts; // bytes += nth_bit / 8; bytes += nth_bit >> 3; // nth_bit %= 8; nth_bit &= 7; if (nth_bit != 0) { mask = 0x80; if (nth_bit + n_bits >= 8) counts = 8 - nth_bit; else counts = n_bits; for (mask >>= nth_bit; counts > 0; counts--, mask >>= 1) { bytes[0] |= mask; nth_bit++; n_bits--; } bytes++; } for (; n_bits >= 8; n_bits -= 8) *bytes++ = 0xFF; for (mask = 0x80; n_bits > 0; n_bits--, mask >>= 1) bytes[0] |= mask; } uget-2.2.3/uget/UgetFiles.h0000664000175000017500000001376613602733704012433 00000000000000/* * * Copyright (C) 2018-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_FILES_H #define UGET_FILES_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetFile UgetFile; typedef struct UgetFiles UgetFiles; extern const UgDataInfo* UgetFilesInfo; enum UgetFileType { UGET_FILE_REGULAR, UGET_FILE_FOLDER, UGET_FILE_ATTACHMENT, // torrent, metalink, or HTTP POST file UGET_FILE_TEMPORARY, // temporary file. UGET_FILE_ALL, }; enum UgetFileState { // state for torrent or metalink // UGET_FILE_STATE_IGNORE = 0x0001, // UGET_FILE_STATE_SOURCE = 0x0002, // state for output (actually write into storage device) UGET_FILE_STATE_DELETED = 0x0004, // this file was deleted/renamed UGET_FILE_STATE_COMPLETED = 0x0008, UGET_FILE_STATE_ALL = 0x00FF, }; // ---------------------------------------------------------------------------- // UgetFile functions UgetFile* uget_file_new(void); void uget_file_free(UgetFile* file); /* ---------------------------------------------------------------------------- UgetFiles: It derived from UgData and store in UgInfo. UgType | `-- UgData | `-- UgetFiles */ struct UgetFiles { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgData(UgType) member UgList list; int sync_count; }; int uget_files_assign(UgetFiles* files, UgetFiles* src); void uget_files_clear(UgetFiles* files); // sync elements from 'src' to 'files. // 1. all elements in 'src' will insert/replace into 'files'. // 2. remove deleted (state == UGET_FILE_STATE_DELETED) elements in 'src'. // return TRUE if 'files' have added or removed elements. int uget_files_sync(UgetFiles* files, UgetFiles* src); UgetFile* uget_files_find(UgetFiles* files, const char* path, UgetFile** sibling); // realloc struct UgetFile by 'path' in array. UgetFile* uget_files_realloc(UgetFiles* files, const char* path); UgetFile* uget_files_replace(UgetFiles* files, const char* path, int type, int state); // apply state to element if type is matched. void uget_files_apply(UgetFiles* files, int type, int state); // erase element by state if type is matched. void uget_files_erase(UgetFiles* files, int type, int state); #define uget_files_apply_deleted(files) \ uget_files_apply(files, UGET_FILE_ALL, UGET_FILE_STATE_DELETED) #define uget_files_erase_deleted(files) \ uget_files_erase(files, UGET_FILE_ALL, UGET_FILE_STATE_DELETED) #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // UgetFile structure: file information with list link struct UgetFile { UG_LINK_MEMBERS(UgetFile, char, path); /* // ------ UgLink members ------ char* path; // absolute file path UgetFile* next; UgetFile* prev; */ int16_t type; // UgetFileType int16_t state; // UgetFileState // save original index in torrent and metalink file. // int32_t order; // progress int64_t total; int64_t complete; #ifdef __cplusplus inline void* operator new(size_t size) { return uget_file_new(); } inline void operator delete(void* p) { uget_file_free((UgetFile*)p); } #endif // __cplusplus }; // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { const UgDataInfo* const FilesInfo = UgetFilesInfo; // These are for directly use only. You can NOT derived it. typedef struct UgetFile File; struct Files : Ug::DataMethod, UgetFiles { inline void* operator new(size_t size) { return ug_data_new(UgetFilesInfo); } inline int sync(UgetFiles* src) { return uget_files_sync(this, src); } inline UgetFile* find(const char* path, UgetFile** sibling) { return uget_files_find(this, path, sibling); } inline UgetFile* realloc(const char* path) { return uget_files_realloc(this, path); } inline UgetFile* replace(const char* path,int type, int state) { return uget_files_replace(this, path, type, state); } inline void apply(int type, int state) { uget_files_apply(this, type, state); } inline void erase(int type, int state) { uget_files_erase(this, type, state); } inline void apply_deleted(void) { uget_files_apply(this, UGET_FILE_ALL, UGET_FILE_STATE_DELETED); } inline void erase_deleted(void) { uget_files_erase(this, UGET_FILE_ALL, UGET_FILE_STATE_DELETED); } }; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_FILES_H uget-2.2.3/uget/UgetMedia-youtube.c0000664000175000017500000007707013602733704014073 00000000000000/* * * Copyright (C) 2015-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #include #ifdef HAVE_GLIB #include #else #define _(x) x #endif // -------------------------------------------------------- // UgetMedia for YouTube // Youtube: // https://www.youtube.com/watch?v=xxxxxxxxxxx // https://youtu.be/xxxxxxxxxxx typedef struct UgetYouTube UgetYouTube; struct UgetYouTube { UgUriQuery query; char* video_id; // common UgJson json; // Method 1 UgBuffer buffer; char* reason; // error message char* status; // "OK", "UNPLAYABLE" char* title; int use_cipher; // TRUE of FALSE // method 2 UgHtml html; char* js; // JavaScript player URL }; static UgetYouTube* uget_youtube_new(void) { UgetYouTube* uyoutube; uyoutube = ug_malloc0(sizeof(UgetYouTube)); ug_buffer_init(&uyoutube->buffer, 4096); uyoutube->reason = NULL; uyoutube->status = NULL; uyoutube->title = NULL; ug_html_init(&uyoutube->html); ug_json_init(&uyoutube->json); uyoutube->js = NULL; return uyoutube; } static void uget_youtube_free(UgetYouTube* uyoutube) { ug_buffer_clear(&uyoutube->buffer, TRUE); ug_free(uyoutube->reason); ug_free(uyoutube->status); ug_free(uyoutube->title); ug_html_final(&uyoutube->html); ug_json_final(&uyoutube->json); ug_free(uyoutube->js); ug_free(uyoutube); } // ---------------------------------------------------------------------------- // "url_encoded_fmt_stream_map" parser static void uget_youtube_parse_map(UgetYouTube* uyoutube, UgetMedia* umedia, const char* field) { UgetMediaItem* umitem = NULL; char* temp; while (ug_uri_query_part(&uyoutube->query, field)) { // debug // printf(" %.*s=%.*s\n", // uyoutube->query.field_len, field, // uyoutube->query.value_len, uyoutube->query.value); if (umitem == NULL) umitem = uget_media_item_new(umedia); if (strncmp("url", field, uyoutube->query.field_len) == 0) { ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); umitem->url = ug_strdup(uyoutube->query.value); } else if (strncmp("s", field, uyoutube->query.field_len) == 0 || strncmp("sig", field, uyoutube->query.field_len) == 0 || strncmp("signature", field, uyoutube->query.field_len) == 0) { // signature. // If it exist, append "&signature=xxxx" to umitem->url umitem->data1.integer = uyoutube->query.field_len; umitem->data2.string = ug_strndup(uyoutube->query.value, uyoutube->query.value_len); // TODO: decrypt signature } else if (strncmp("type", field, uyoutube->query.field_len) == 0) { ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); if (strncmp("video/webm", uyoutube->query.value, 10) == 0) umitem->type = UGET_MEDIA_TYPE_WEBM; else if (strncmp("video/mp4", uyoutube->query.value, 9) == 0) umitem->type = UGET_MEDIA_TYPE_MP4; else if (strncmp("video/x-flv", uyoutube->query.value, 11) == 0) umitem->type = UGET_MEDIA_TYPE_FLV; else if (strncmp("video/3gpp", uyoutube->query.value, 10) == 0) umitem->type = UGET_MEDIA_TYPE_3GPP; else umitem->type = UGET_MEDIA_TYPE_UNKNOWN; } else if (strncmp(field, "quality", uyoutube->query.field_len) == 0) { // ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); if (strncmp("tiny", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_144P; else if (strncmp("small", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_240P; else if (strncmp("medium", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_360P; else if (strncmp("large", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_480P; else if (strncmp("hd720", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_720P; else if (strncmp("hd1080", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_1080P; else umitem->quality = UGET_MEDIA_QUALITY_UNKNOWN; } if (uyoutube->query.value_next) { // append "&signature=xxxx" to url if (umitem->data1.integer) { temp = ug_strdup_printf("%s" "&signature=%s", umitem->url, umitem->data2.string); ug_free(umitem->url); ug_free(umitem->data2.string); umitem->url = temp; umitem->data1.integer = 0; umitem->data2.string = NULL; } field = uyoutube->query.value_next; umitem = NULL; } else field = uyoutube->query.field_next; } } // ---------------------------------------------------------------------------- // "adaptive_fmts" parser static void uget_youtube_parse_adaptive_fmts(UgetYouTube* uyoutube, UgetMedia* umedia, const char* field) { UgetMediaItem* umitem = NULL; char* temp; while (ug_uri_query_part(&uyoutube->query, field)) { // debug // printf(" %.*s=%.*s\n", // uyoutube->query.field_len, field, // uyoutube->query.value_len, uyoutube->query.value); if (umitem == NULL) umitem = uget_media_item_new(umedia); if (strncmp("url", field, uyoutube->query.field_len) == 0) { ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); umitem->url = ug_strdup(uyoutube->query.value); } else if (strncmp("s", field, uyoutube->query.field_len) == 0 || strncmp("sig", field, uyoutube->query.field_len) == 0 || strncmp("signature", field, uyoutube->query.field_len) == 0) { // signature. // If it exist, append "&signature=xxxx" to umitem->url umitem->data1.integer = uyoutube->query.field_len; umitem->data2.string = ug_strndup(uyoutube->query.value, uyoutube->query.value_len); // TODO: decrypt signature } else if (strncmp("type", field, uyoutube->query.field_len) == 0) { ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); if (strncmp("video/webm", uyoutube->query.value, 10) == 0) umitem->type = UGET_MEDIA_VIDEO_WEBM; else if (strncmp("video/mp4", uyoutube->query.value, 9) == 0) umitem->type = UGET_MEDIA_VIDEO_MP4; else if (strncmp("video/x-flv", uyoutube->query.value, 11) == 0) umitem->type = UGET_MEDIA_VIDEO_FLV; else if (strncmp("video/3gpp", uyoutube->query.value, 10) == 0) umitem->type = UGET_MEDIA_VIDEO_3GPP; else if (strncmp("audio/mp4", uyoutube->query.value, 9) == 0) umitem->type = UGET_MEDIA_AUDIO_MP4; else if (strncmp("audio/webm", uyoutube->query.value, 10) == 0) umitem->type = UGET_MEDIA_AUDIO_WEBM; else umitem->type = UGET_MEDIA_TYPE_UNKNOWN; } else if (strncmp(field, "quality_label", uyoutube->query.field_len) == 0) { // ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); if (strncmp("144p", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_144P; else if (strncmp("240p", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_240P; else if (strncmp("360p", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_360P; else if (strncmp("480p", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_480P; else if (strncmp("720p", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_720P; else if (strncmp("1080p", uyoutube->query.value, uyoutube->query.value_len) == 0) umitem->quality = UGET_MEDIA_QUALITY_1080P; else umitem->quality = UGET_MEDIA_QUALITY_UNKNOWN; } else if (strncmp(field, "audio_sample_rate", uyoutube->query.field_len) == 0) { // ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); umitem->sample_rate = strtol(uyoutube->query.value, NULL, 10); } if (uyoutube->query.value_next) { // append "&signature=xxxx" to url if (umitem->data1.integer) { temp = ug_strdup_printf("%s" "&signature=%s", umitem->url, umitem->data2.string); ug_free(umitem->url); ug_free(umitem->data2.string); umitem->url = temp; umitem->data1.integer = 0; umitem->data2.string = NULL; } field = uyoutube->query.value_next; umitem = NULL; } else field = uyoutube->query.field_next; } } // ---------------------------------------------------------------------------- // "player_response" parser // ---------------------------------------------- // "streamingData" JSON parser static UgJsonError ug_json_parse_mime_type(UgJson* json, const char* name, const char* value, void* umitem_ptr, void* data) { UgetMediaItem* umitem = umitem_ptr; if (strncmp("audio/mp4", value, 9) == 0) umitem->type = UGET_MEDIA_AUDIO_MP4; else if (strncmp("audio/webm", value, 10) == 0) umitem->type = UGET_MEDIA_AUDIO_WEBM; else if (strncmp("video/mp4", value, 9) == 0) { umitem->type = UGET_MEDIA_TYPE_MP4; // if this media doesn't has 2 codec if (strpbrk(value+9, ",") == NULL) umitem->type |= UGET_MEDIA_TYPE_VIDEO; } else if (strncmp("video/webm", value, 10) == 0) { umitem->type = UGET_MEDIA_TYPE_WEBM; // if this media doesn't has 2 codec if (strpbrk(value+10, ",") == NULL) umitem->type |= UGET_MEDIA_TYPE_VIDEO; } else if (strncmp("video/x-flv", value, 11) == 0) umitem->type = UGET_MEDIA_TYPE_FLV; else if (strncmp("video/3gpp", value, 10) == 0) umitem->type = UGET_MEDIA_TYPE_3GPP; else umitem->type = UGET_MEDIA_TYPE_UNKNOWN; return UG_JSON_ERROR_NONE; } static UgJsonError ug_json_parse_quality_label(UgJson* json, const char* name, const char* value, void* umitem_ptr, void* data) { UgetMediaItem* umitem = umitem_ptr; if (strncmp("144p", value, 4) == 0) umitem->quality = UGET_MEDIA_QUALITY_144P; else if (strncmp("240p", value, 4) == 0) umitem->quality = UGET_MEDIA_QUALITY_240P; else if (strncmp("360p", value, 4) == 0) umitem->quality = UGET_MEDIA_QUALITY_360P; else if (strncmp("480p", value, 4) == 0) umitem->quality = UGET_MEDIA_QUALITY_480P; else if (strncmp("720p", value, 4) == 0) umitem->quality = UGET_MEDIA_QUALITY_720P; else if (strncmp("1080p", value, 5) == 0) umitem->quality = UGET_MEDIA_QUALITY_1080P; return UG_JSON_ERROR_NONE; } static UgJsonError ug_json_parse_cipher(UgJson* json, const char* name, const char* value, UgetMediaItem* umitem, void* data) { UgUriQuery uuquery; char* field = (char*)value; while (ug_uri_query_part(&uuquery, field)) { if (strncmp(field, "url", uuquery.field_len) == 0) { ug_free(umitem->url); umitem->url = ug_strndup(uuquery.value, uuquery.value_len); } else if (strncmp("s", field, uuquery.field_len) == 0 || strncmp("sig", field, uuquery.field_len) == 0 || strncmp("signature", field, uuquery.field_len) == 0) { // TODO: decrypt signature and append "&signature=xxxx" to umitem->url } // if (uuquery.value_next) // field = uuquery.value_next; // else field = uuquery.field_next; } return UG_JSON_ERROR_NONE; } static const UgEntry media_item_entry[] = { {"url", offsetof(UgetMediaItem, url), UG_ENTRY_STRING, NULL, NULL}, {"cipher", 0, UG_ENTRY_CUSTOM, (void*) ug_json_parse_cipher, NULL}, {"mimeType", 0, UG_ENTRY_CUSTOM, (void*) ug_json_parse_mime_type, NULL}, {"qualityLabel", 0, UG_ENTRY_CUSTOM, (void*) ug_json_parse_quality_label, NULL}, {"audioSampleRate", offsetof(UgetMediaItem, sample_rate), UG_ENTRY_CUSTOM, (void*) ug_json_parse_int_string, NULL}, {NULL} // null-terminated }; static UgJsonError ug_json_parse_media_item(UgJson* json, const char* name, const char* value, void* umedia, void* data) { UgetMediaItem* umitem; if (json->type != UG_JSON_OBJECT) { // if (json->type == UG_JSON_ARRAY) // ug_json_push (json, ug_json_parse_unknown, NULL, NULL); return UG_JSON_ERROR_TYPE_NOT_MATCH; } umitem = uget_media_item_new((UgetMedia*)umedia); ug_json_push(json, ug_json_parse_entry, umitem, (void*) media_item_entry); return UG_JSON_ERROR_NONE; } static UgJsonError ug_json_parse_formats(UgJson* json, const char* name, const char* value, void* umedia, void* data) { if (json->type != UG_JSON_ARRAY) { // if (json->type == UG_JSON_OBJECT) // ug_json_push (json, ug_json_parse_unknown, NULL, NULL); return UG_JSON_ERROR_TYPE_NOT_MATCH; } ug_json_push(json, ug_json_parse_media_item, umedia, NULL); return UG_JSON_ERROR_NONE; } static const UgEntry streaming_data_entry[] = { {"formats", 0, UG_ENTRY_CUSTOM, (void*) ug_json_parse_formats, NULL}, {"adaptiveFormats", 0, UG_ENTRY_CUSTOM, (void*) ug_json_parse_formats, NULL}, {NULL} // null-terminated }; // ---------------------------------------------- // "playabilityStatus" JSON parser static const UgEntry playability_status_entry[] = { {"status", offsetof(UgetYouTube, status), UG_ENTRY_STRING, NULL, NULL}, {"reason", offsetof(UgetYouTube, reason), UG_ENTRY_STRING, NULL, NULL}, {NULL} // null-terminated }; static UgJsonError ug_json_parse_playability_status(UgJson* json, const char* name, const char* value, void* umedia_ptr, void* data) { UgetMedia* umedia = umedia_ptr; UgetYouTube* uyoutube = umedia->data; if (json->type != UG_JSON_OBJECT) { // if (json->type == UG_JSON_ARRAY) // ug_json_push (json, ug_json_parse_unknown, NULL, NULL); return UG_JSON_ERROR_TYPE_NOT_MATCH; } ug_json_push(json, ug_json_parse_entry, uyoutube, (void*) playability_status_entry); return UG_JSON_ERROR_NONE; } // ---------------------------------------------- // "videoDetails" parser JSON start static const UgEntry video_details_entry[] = { {"title", offsetof(UgetYouTube, title), UG_ENTRY_STRING, NULL, NULL}, {"useCipher", offsetof(UgetYouTube, use_cipher), UG_ENTRY_BOOL, NULL, NULL}, {NULL} // null-terminated }; static UgJsonError ug_json_parse_video_details(UgJson* json, const char* name, const char* value, void* umedia_ptr, void* data) { UgetMedia* umedia = umedia_ptr; UgetYouTube* uyoutube = umedia->data; if (json->type != UG_JSON_OBJECT) { // if (json->type == UG_JSON_ARRAY) // ug_json_push (json, ug_json_parse_unknown, NULL, NULL); return UG_JSON_ERROR_TYPE_NOT_MATCH; } ug_json_push(json, ug_json_parse_entry, uyoutube, (void*) video_details_entry); return UG_JSON_ERROR_NONE; } // ---------------------------------------------- // "player_response" JSON parser static const UgEntry player_response_entry[] = { {"videoDetails", 0, UG_ENTRY_CUSTOM, (void*) ug_json_parse_video_details, NULL}, {"playabilityStatus", 0, UG_ENTRY_CUSTOM, (void*) ug_json_parse_playability_status, NULL}, {"streamingData", 0, UG_ENTRY_OBJECT, (void*) streaming_data_entry, NULL}, {NULL} // null-terminated }; // ---------------------------------------------------------------------------- // method 1 // https://www.youtube.com/get_video_info?video_id=xxxxxxxxxxx // https://www.youtube.com/get_video_info?video_id=xxxxxxxxxxx&el=vevo&el=embedded&asv=3&sts=15902 static void uget_youtube_parse_query(UgetYouTube* uyoutube, UgetMedia* umedia) { if (ug_uri_query_part(&uyoutube->query, uyoutube->buffer.beg) == 0) return; // debug - print field // printf("%.*s\n", uyoutube->query.field_len, uyoutube->buffer.beg); // debug - print value // printf("%.*s\n", uyoutube->query.value_len, uyoutube->query.value); if (uyoutube->query.field_len == 26 && strncmp(uyoutube->buffer.beg, "url_encoded_fmt_stream_map", 26) == 0) { ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); uget_youtube_parse_map(uyoutube, umedia, uyoutube->query.value); } else if (uyoutube->query.field_len == 13 && strncmp(uyoutube->buffer.beg, "adaptive_fmts", 13) == 0) { ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); uget_youtube_parse_adaptive_fmts(uyoutube, umedia, uyoutube->query.value); } /* // deprecated else if (uyoutube->query.field_len == 5 && strncmp(uyoutube->buffer.beg, "title", 5) == 0) { umedia->title = ug_strndup(uyoutube->query.value, uyoutube->query.value_len); ug_decode_uri(umedia->title, uyoutube->query.value_len, umedia->title); } */ else if (uyoutube->query.field_len == 6 && strncmp(uyoutube->buffer.beg, "reason", 6) == 0) { uyoutube->reason = ug_strndup(uyoutube->query.value, uyoutube->query.value_len); ug_decode_uri(uyoutube->reason, uyoutube->query.value_len, uyoutube->reason); } else if (uyoutube->query.field_len == 6 && strncmp(uyoutube->buffer.beg, "status", 6) == 0) { uyoutube->status = ug_strndup(uyoutube->query.value, uyoutube->query.value_len); ug_decode_uri(uyoutube->status, uyoutube->query.value_len, uyoutube->status); } /* // deprecated else if (uyoutube->query.field_len == 9 && strncmp(uyoutube->buffer.beg, "errorcode", 9) == 0) { uyoutube->error_code = strtol(uyoutube->query.value, NULL, 10); } */ else if (uyoutube->query.field_len == 15 && strncmp(uyoutube->buffer.beg, "player_response", 9) == 0) { UgJson* json; int length; length = ug_decode_uri(uyoutube->query.value, uyoutube->query.value_len, uyoutube->query.value); json = &uyoutube->json; ug_json_begin_parse(json); ug_json_push(json, ug_json_parse_entry, umedia, (void*) player_response_entry); ug_json_push(json, ug_json_parse_object, NULL, NULL); ug_json_parse(json, uyoutube->query.value, length); ug_json_end_parse(json); // decide title if (umedia->title == NULL && ((UgetYouTube*)umedia->data)->title) { umedia->title = ((UgetYouTube*)umedia->data)->title; ((UgetYouTube*)umedia->data)->title = NULL; } } } static size_t curl_output_youtube(char* beg, size_t size, size_t nmemb, void* data) { UgetMedia* umedia = data; UgBuffer* buffer = &((UgetYouTube*)umedia->data)->buffer; char* end; char* cur; size *= nmemb; end = beg + size; for (cur = beg; cur < end; cur++) { if (cur[0] == '&') { ug_buffer_write_data(buffer, beg, cur - beg); ug_buffer_write_char(buffer, 0); uget_youtube_parse_query(umedia->data, umedia); // next field buffer->cur = buffer->beg; beg = cur + 1; // + '&' continue; } } if (cur == end) ug_buffer_write_data(buffer, beg, cur - beg); return size; } int uget_media_grab_youtube_method_1(UgetMedia* umedia, UgetProxy* proxy) { CURL* curl; CURLcode code; UgetYouTube* uyoutube; char* string; int retry = FALSE; uyoutube = umedia->data; string = ug_strdup_printf( "https://www.youtube.com/get_video_info?video_id=%s&el=detailpage", uyoutube->video_id); curl = curl_easy_init(); if (proxy) ug_curl_set_proxy(curl, proxy); curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_output_youtube); curl_easy_setopt(curl, CURLOPT_WRITEDATA, umedia); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); do { curl_easy_setopt(curl, CURLOPT_URL, string); code = curl_easy_perform(curl); ug_free(string); string = NULL; switch (code) { case CURLE_OK: if (uyoutube->buffer.beg != uyoutube->buffer.cur) { ug_buffer_write_char(&uyoutube->buffer, 0); uget_youtube_parse_query(umedia->data, umedia); } if (uyoutube->reason != NULL) { umedia->event = uget_event_new_error( UGET_EVENT_ERROR_CUSTOM, uyoutube->reason); goto break_do_loop; } break; case CURLE_OUT_OF_MEMORY: umedia->event = uget_event_new_error( UGET_EVENT_ERROR_OUT_OF_RESOURCE, NULL); goto break_do_loop; default: umedia->event = uget_event_new_error( UGET_EVENT_ERROR_CUSTOM, _("Error occurred during getting video info.")); goto break_do_loop; } #if 0 if (retry == TRUE) { retry = FALSE; // decrypt_signature } else if (uyoutube->status && strcmp(uyoutube->status, "ok") != 0) { if (uyoutube->reason && strstr(uyoutube->reason, "VEVO") == NULL) break; retry = TRUE; // reset data if we need retry ug_buffer_restart(&uyoutube->buffer); ug_free(uyoutube->reason); uyoutube->reason = NULL; ug_free(uyoutube->status); uyoutube->status = NULL; string = ug_strdup_printf( "https://www.youtube.com/get_video_info?video_id=%s&el=vevo&el=embedded&asv=3&sts=15902", uyoutube->video_id); } #endif } while (retry == TRUE); break_do_loop: curl_easy_cleanup(curl); return umedia->size; } // ---------------------------------------------------------------------------- // method 2 // get HTML and parse it // ---------------------------------------------- // "ytplayer.config" JSON parser static UgJsonError ug_json_parse_assets_js(UgJson* json, const char* name, const char* value, void* umedia, void* data) { UgetYouTube* uyoutube; uyoutube = ((UgetMedia*)umedia)->data; uyoutube->js = ug_strdup(value); return UG_JSON_ERROR_NONE; } static UgJsonError ug_json_parse_args_map(UgJson* json, const char* name, const char* value, void* umedia, void* data) { UgetYouTube* uyoutube; uyoutube = ((UgetMedia*)umedia)->data; uget_youtube_parse_map(uyoutube, (void*) umedia, value); return UG_JSON_ERROR_NONE; } static UgJsonError ug_json_parse_args_adaptive_fmts(UgJson* json, const char* name, const char* value, void* umedia, void* data) { UgetYouTube* uyoutube; uyoutube = ((UgetMedia*)umedia)->data; uget_youtube_parse_adaptive_fmts(uyoutube, (void*) umedia, value); return UG_JSON_ERROR_NONE; } static const UgEntry youtube_assets_entry[] = { {"js", 0, UG_ENTRY_CUSTOM, ug_json_parse_assets_js, NULL}, {NULL} // null-terminated }; static const UgEntry youtube_args_entry[] = { {"title", offsetof(UgetMedia, title), UG_ENTRY_STRING, NULL, NULL}, {"url_encoded_fmt_stream_map", 0, UG_ENTRY_CUSTOM, ug_json_parse_args_map, NULL}, {"adaptive_fmts", 0, UG_ENTRY_CUSTOM, ug_json_parse_args_adaptive_fmts, NULL}, {NULL} // null-terminated }; static const UgEntry youtube_config_entry[] = { {"assets", 0, UG_ENTRY_OBJECT, (void*) youtube_assets_entry, NULL}, {"args", 0, UG_ENTRY_OBJECT, (void*) youtube_args_entry, NULL}, {NULL} // null-terminated }; // ---------------------------------------------- // HTML parser static const UgHtmlParser youtube_html_parser; static const UgHtmlParser youtube_script_parser; static void youtube_start_element(UgHtml* uhtml, const char* element_name, const char** attribute_names, const char** attribute_values, void* dest, void* data) { UgetMedia* umedia = dest; if (strcmp(element_name, "script") == 0) ug_html_push(uhtml, &youtube_script_parser, dest, data); else if (strcmp(element_name, "meta") == 0) { // if (attribute_names[0] && strcmp(attribute_names[0], "name")==0 && attribute_values[0] && strcmp(attribute_values[0], "title")==0 && attribute_names[1] && strcmp(attribute_names[1], "content")==0) { if (umedia->title == NULL) umedia->title = ug_strdup(attribute_values[1]); } } } static void youtube_end_element(UgHtml* uhtml, const char* element_name, void* dest, void* data) { if (strcmp(element_name, "script") == 0) ug_html_pop(uhtml); } static void youtube_script_text(UgHtml* uhtml, const char* text, int text_len, UgetMedia* umedia, UgetYouTube* uyoutube) { UgJson* json; char* cur; int cur_len; int diff; // if (strncmp("var ytplayer", text, 12) != 0) // return; for (cur = (char*)text, cur_len = text_len; ; ) { cur = memchr(cur, 'y', cur_len); if (cur == NULL) return; cur_len = text_len - (cur - text); if (cur_len < 15) // strlen("ytplayer.config") return; diff = memcmp(cur, "ytplayer.config", 15); cur++; cur_len--; if (diff != 0) continue; cur = memchr(cur, '=', cur_len); if (cur == NULL) return; cur_len = text_len - (cur - text); cur = memchr(cur, '{', cur_len); if (cur == NULL) return; break; } json = &uyoutube->json; ug_json_begin_parse(json); ug_json_push(json, ug_json_parse_entry, umedia, (void*) youtube_config_entry); ug_json_push(json, ug_json_parse_object, NULL, NULL); ug_json_parse(json, cur, text_len - (cur - text)); ug_json_end_parse(json); } static const UgHtmlParser youtube_script_parser = { NULL, (UgHtmlParserEndElementFunc) youtube_end_element, (UgHtmlParserTextFunc) youtube_script_text }; static const UgHtmlParser youtube_html_parser = { youtube_start_element, NULL, NULL }; // ------------------------------------ // curl static size_t curl_output_youtube_html(char* text, size_t size, size_t nmemb, void* data) { UgetMedia* umedia; UgHtml* uhtml; umedia = data; uhtml = &((UgetYouTube*)umedia->data)->html; size *= nmemb; ug_html_parse(uhtml, text, size); return size; } int uget_media_grab_youtube_method_2(UgetMedia* umedia, UgetProxy* proxy) { CURL* curl; CURLcode code; UgetYouTube* uyoutube; char* string; ug_free(umedia->title); umedia->title = NULL; uyoutube = umedia->data; // create URL string string = ug_strdup_printf("https://www.youtube.com/watch?v=%s", uyoutube->video_id); // setup option curl = curl_easy_init(); if (proxy) ug_curl_set_proxy(curl, proxy); curl_easy_setopt(curl, CURLOPT_URL, string); curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_output_youtube_html); curl_easy_setopt(curl, CURLOPT_WRITEDATA, umedia); // run & parse ug_html_begin_parse(&uyoutube->html); ug_html_push(&uyoutube->html, &youtube_html_parser, umedia, uyoutube); code = curl_easy_perform(curl); ug_html_end_parse(&uyoutube->html); // free URL string ug_free(string); switch (code) { case CURLE_OK: // player URL if (uyoutube->js && strncmp(uyoutube->js, "//", 2) == 0) { string = ug_malloc(strlen(uyoutube->js) + 6 + 1); // "https:" + '\0' string[0] = 0; strcat(string, "https:"); strcat(string, uyoutube->js); ug_free(uyoutube->js); uyoutube->js = string; } break; case CURLE_OUT_OF_MEMORY: umedia->event = uget_event_new_error( UGET_EVENT_ERROR_OUT_OF_RESOURCE, NULL); break; default: umedia->event = uget_event_new_error( UGET_EVENT_ERROR_CUSTOM, _("Error occurred during getting video web page.")); break; } curl_easy_cleanup(curl); return umedia->size; } // ---------------------------------------------------------------------------- // UgetMedia functions int uget_media_is_youtube(UgUri* uuri) { int length; const char* string; // youtube.com // https://youtube.com/watch?=xxxxxxxxxxx // https://youtu.be/xxxxxxxxxxx length = ug_uri_host(uuri, &string); if (length >= 11 && strncmp(string + length - 11, "youtube.com", 11) == 0) { if (strncmp(uuri->uri + uuri->file , "watch?", 6) == 0) return TRUE; } else if (length >= 8 && strncmp(string + length - 8, "youtu.be", 8) == 0) { if (uuri->file != -1) return TRUE; } return FALSE; } int uget_media_grab_youtube(UgetMedia* umedia, UgetProxy* proxy) { int n; char* string; char* video_id_str; int video_id_len; UgUriQuery* query; UgetYouTube* uyoutube; ug_uri_init(&umedia->uuri, umedia->url); query = &umedia->uquery; video_id_str = NULL; video_id_len = 0; // get youtube video_id if (umedia->uuri.query != -1) { // https://www.youtube.com/watch?v=xxxxxxxxxxx string = umedia->url + umedia->uuri.query; while (ug_uri_query_part(query, string)) { if (strncmp("v", string, query->field_len) == 0 && query->value) { video_id_str = query->value; video_id_len = query->value_len; break; } string = query->field_next; } } else { // http://youtu.be/xxxxxxxxxxx video_id_len = ug_uri_file(&umedia->uuri, (const char**)&video_id_str); } if (video_id_str == NULL || video_id_len == 0) { umedia->event = uget_event_new_error(UGET_EVENT_ERROR_CUSTOM, _("No video_id found in URL of YouTube.")); return 0; } uyoutube = uget_youtube_new(); uyoutube->video_id = ug_strndup(video_id_str, video_id_len); umedia->data = uyoutube; n = uget_media_grab_youtube_method_1(umedia, proxy); if (n == 0 && uyoutube->reason != NULL) { // clear data before calling uget_media_grab_youtube_method_2() ug_free(umedia->title); umedia->title = NULL; if (umedia->event) { uget_event_free(umedia->event); umedia->event = NULL; } n = uget_media_grab_youtube_method_2(umedia, proxy); } uget_youtube_free(uyoutube); umedia->data = NULL; return n; } uget-2.2.3/uget/UgetSite.h0000664000175000017500000000410713602733704012262 00000000000000/* * * Copyright (C) 2017-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_SITE_H #define UGET_SITE_H #include #ifdef __cplusplus extern "C" { #endif typedef enum UgetSiteId { UGET_SITE_UNKNOWN = 0, // storage UGET_SITE_MEGA, // media UGET_SITE_MEDIA = 0x10000000, UGET_SITE_YOUTUBE = UGET_SITE_MEDIA, } UgetSiteId; // return UgetSiteId int uget_site_get_id (const char* url); // return TRUE or FALSE int uget_site_is_mega (UgUri* uuri); int uget_site_is_youtube (UgUri* uuri); #ifdef __cplusplus } #endif // __cplusplus #endif // UGET_SITE_H uget-2.2.3/uget/UgetNode-compare.c0000664000175000017500000002543513602733704013671 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include // ---------------------------------------------------------------------------- // compare functions for sorting int uget_node_compare_name (UgetNode* node1, UgetNode* node2) { UgetCommon* common1; UgetCommon* common2; common1 = ug_info_get(node1->info, UgetCommonInfo); common2 = ug_info_get(node2->info, UgetCommonInfo); if (common1 && common1->name) { if (common2->name == NULL) return 1; } else { if (common2 && common2->name) return -1; else return 0; } return strcmp (common1->name, common2->name); } int uget_node_compare_complete (UgetNode* node1, UgetNode* node2) { UgetProgress* progress1; UgetProgress* progress2; node1 = node1->base; node2 = node2->base; progress1 = ug_info_get (node1->info, UgetProgressInfo); progress2 = ug_info_get (node2->info, UgetProgressInfo); if (progress1) { if (progress2 == NULL) return 1; } else { if (progress2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (progress1->complete == progress2->complete) return uget_node_compare_name (node1, node2); // return diff of complete else return (int)(progress1->complete - progress2->complete); } int uget_node_compare_size (UgetNode* node1, UgetNode* node2) { UgetProgress* progress1; UgetProgress* progress2; node1 = node1->base; node2 = node2->base; progress1 = ug_info_get (node1->info, UgetProgressInfo); progress2 = ug_info_get (node2->info, UgetProgressInfo); if (progress1) { if (progress2 == NULL) return 1; } else { if (progress2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (progress1->total == progress2->total) return uget_node_compare_name (node1, node2); // return diff of total else return (int)(progress1->total - progress2->total); } int uget_node_compare_percent (UgetNode* node1, UgetNode* node2) { UgetProgress* progress1; UgetProgress* progress2; node1 = node1->base; node2 = node2->base; progress1 = ug_info_get (node1->info, UgetProgressInfo); progress2 = ug_info_get (node2->info, UgetProgressInfo); if (progress1) { if (progress2 == NULL) return 1; } else { if (progress2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (progress1->percent == progress2->percent) return uget_node_compare_name (node1, node2); // return diff of percent else return progress1->percent - progress2->percent; } int uget_node_compare_elapsed (UgetNode* node1, UgetNode* node2) { UgetProgress* progress1; UgetProgress* progress2; node1 = node1->base; node2 = node2->base; progress1 = ug_info_get (node1->info, UgetProgressInfo); progress2 = ug_info_get (node2->info, UgetProgressInfo); if (progress1) { if (progress2 == NULL) return 1; } else { if (progress2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (progress1->elapsed == progress2->elapsed) return uget_node_compare_name (node1, node2); // return diff of elapsed (consume time) else return (int)(progress1->elapsed - progress2->elapsed); } int uget_node_compare_left (UgetNode* node1, UgetNode* node2) { UgetProgress* progress1; UgetProgress* progress2; node1 = node1->base; node2 = node2->base; progress1 = ug_info_get (node1->info, UgetProgressInfo); progress2 = ug_info_get (node2->info, UgetProgressInfo); if (progress1) { if (progress2 == NULL) return 1; } else { if (progress2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (progress1->left == progress2->left) return uget_node_compare_name (node1, node2); // return diff of left (remain time) else return (int)(progress1->left - progress2->left); } int uget_node_compare_speed (UgetNode* node1, UgetNode* node2) { UgetProgress* progress1; UgetProgress* progress2; node1 = node1->base; node2 = node2->base; progress1 = ug_info_get (node1->info, UgetProgressInfo); progress2 = ug_info_get (node2->info, UgetProgressInfo); if (progress1) { if (progress2 == NULL) return 1; } else { if (progress2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (progress1->download_speed == progress2->download_speed) return uget_node_compare_name (node1, node2); // return diff of download_speed else return (int)(progress1->download_speed - progress2->download_speed); } int uget_node_compare_upload_speed (UgetNode* node1, UgetNode* node2) { UgetProgress* progress1; UgetProgress* progress2; node1 = node1->base; node2 = node2->base; progress1 = ug_info_get (node1->info, UgetProgressInfo); progress2 = ug_info_get (node2->info, UgetProgressInfo); if (progress1) { if (progress2 == NULL) return 1; } else { if (progress2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (progress1->upload_speed == progress2->upload_speed) return uget_node_compare_name (node1, node2); // return diff of upload_speed else return (int)(progress1->upload_speed - progress2->upload_speed); } int uget_node_compare_uploaded (UgetNode* node1, UgetNode* node2) { UgetProgress* progress1; UgetProgress* progress2; node1 = node1->base; node2 = node2->base; progress1 = ug_info_get (node1->info, UgetProgressInfo); progress2 = ug_info_get (node2->info, UgetProgressInfo); if (progress1) { if (progress2 == NULL) return 1; } else { if (progress2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (progress1->uploaded == progress2->uploaded) return uget_node_compare_name (node1, node2); // return diff of uploaded else return (int)(progress1->uploaded - progress2->uploaded); } int uget_node_compare_ratio (UgetNode* node1, UgetNode* node2) { UgetProgress* progress1; UgetProgress* progress2; node1 = node1->base; node2 = node2->base; progress1 = ug_info_get (node1->info, UgetProgressInfo); progress2 = ug_info_get (node2->info, UgetProgressInfo); if (progress1) { if (progress2 == NULL) return 1; } else { if (progress2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (progress1->ratio == progress2->ratio) return uget_node_compare_name (node1, node2); // return diff of ratio else return (int)(progress1->ratio - progress2->ratio); } int uget_node_compare_retry (UgetNode* node1, UgetNode* node2) { UgetCommon* common1; UgetCommon* common2; node1 = node1->base; node2 = node2->base; common1 = ug_info_get (node1->info, UgetCommonInfo); common2 = ug_info_get (node2->info, UgetCommonInfo); if (common1) { if (common2 == NULL) return 1; } else { if (common2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these are the same, compare name if (common1->retry_count == common2->retry_count) return uget_node_compare_name (node1, node2); // return diff of retry_count else return common1->retry_count - common2->retry_count; } int uget_node_compare_parent_name (UgetNode* node1, UgetNode* node2) { return uget_node_compare_name(node1->base->parent, node2->base->parent); } int uget_node_compare_uri (UgetNode* node1, UgetNode* node2) { UgetCommon* common1; UgetCommon* common2; node1 = node1->base; node2 = node2->base; common1 = ug_info_get (node1->info, UgetCommonInfo); common2 = ug_info_get (node2->info, UgetCommonInfo); if (common1) { if (common2 == NULL) return 1; } else { if (common2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } return strcmp (common1->uri, common2->uri); } int uget_node_compare_added_time (UgetNode* node1, UgetNode* node2) { UgetLog* log1; UgetLog* log2; node1 = node1->base; node2 = node2->base; log1 = ug_info_get (node1->info, UgetLogInfo); log2 = ug_info_get (node2->info, UgetLogInfo); if (log1) { if (log2 == NULL) return 1; } else { if (log2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these added_time are the same, compare name if (log1->added_time == log2->added_time) return uget_node_compare_name (node1, node2); // return diff of added_time else return (int)(log1->added_time - log2->added_time); } int uget_node_compare_completed_time (UgetNode* node1, UgetNode* node2) { UgetLog* log1; UgetLog* log2; node1 = node1->base; node2 = node2->base; log1 = ug_info_get (node1->info, UgetLogInfo); log2 = ug_info_get (node2->info, UgetLogInfo); if (log1) { if (log2 == NULL) return 1; } else { if (log2 == NULL) return uget_node_compare_name (node1, node2); // 0 else return -1; } // if these completed_time are the same, compare name if (log1->completed_time == log2->completed_time) return uget_node_compare_name (node1, node2); // return diff of completed_time else return (int)(log1->completed_time - log2->completed_time); } uget-2.2.3/uget/UgetRpc.h0000664000175000017500000000775713602733704012120 00000000000000/* * * Copyright (C) 2015-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_RPC_H #define UGET_RPC_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif enum { UGET_RPC_DO_NOTHING, UGET_RPC_SEND_COMMAND, UGET_RPC_PRESENT, }; typedef struct UgetRpc UgetRpc; typedef struct UgetRpcReq UgetRpcReq; typedef struct UgetRpcCmd UgetRpcCmd; struct UgetRpc { UG_JSONRPC_SOCKET_MEMBERS; /* // ------ UgJsonrpcSocket members ------ UgJson json; UgJsonrpc rpc; UgBuffer buffer; int socket; */ UgSocketServer* server; UgJsonrpcObject jobject; UgJsonrpcArray jarray; UgOption option; UgList queue; UgMutex queue_lock; char* backup_dir; #ifdef USE_UNIX_DOMAIN_SOCKET char* socket_path; int socket_path_len; #endif }; UgetRpc* uget_rpc_new (const char* backup_dir); void uget_rpc_free (UgetRpc* urpc); #ifdef USE_UNIX_DOMAIN_SOCKET void uget_rpc_use_unix_socket (UgetRpc* urpc, const char* path, int path_len); #endif int uget_rpc_do_request (UgetRpc* urpc, UgJsonrpcObject* jobj); void uget_rpc_send_command (UgetRpc* urpc, int argc, char** argv); void uget_rpc_present (UgetRpc* urpc); // return TRUE if server start int uget_rpc_start_server (UgetRpc* urpc, int detect_server); void uget_rpc_stop_server (UgetRpc* urpc); int uget_rpc_has_request (UgetRpc* urpc); UgetRpcReq* uget_rpc_get_request (UgetRpc* urpc); // ---------------------------------------------------------------------------- // UgetRpcReq - Request // UgLink #define UGET_RPC_REQ_MEMBERS \ UG_LINK_INT_MEMBERS (UgetRpcReq, method_id); \ UgDeleteFunc free struct UgetRpcReq { UGET_RPC_REQ_MEMBERS; // UgLink /* // ------ UgetRpcReq members ------ intptr_t method_id; UgetRpcReq* next; UgetRpcReq* prev; UgDeleteFunc free; */ }; UgetRpcReq* uget_rpc_req_new (void); #define uget_rpc_req_free ug_free // ---------------------------------------------------------------------------- // UgetRpcCmd struct UgetRpcCmd { UGET_RPC_REQ_MEMBERS; // UgLink /* // ------ UgetRpcReq members ------ intptr_t method_id; UgetRpcReq* next; UgetRpcReq* prev; UgDeleteFunc free; */ UgetOptionValue value; UgList uris; }; UgetRpcCmd* uget_rpc_cmd_new (void); void uget_rpc_cmd_free (UgetRpcCmd* urcmd); #ifdef __cplusplus } #endif #endif // End of UGET_RPC_H uget-2.2.3/uget/UgetRss.h0000664000175000017500000001051113602733704012121 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_RSS_H #define UGET_RSS_H //#include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetRss UgetRss; typedef struct UgetRssFeed UgetRssFeed; typedef struct UgetRssItem UgetRssItem; typedef enum { UGET_RSS_USER = 0, UGET_RSS_STABLE = 1, // http://feeds.feedburner.com/uget/stable?format=xml UGET_RSS_DEVELMENT = 2, // http://feeds.feedburner.com/uget/development?format=xml UGET_RSS_NEWS = 3, // http://feeds.feedburner.com/uget/news?format=xml UGET_RSS_TUTORIALS = 4, // http://feeds.feedburner.com/uget/tutorials?format=xml UGET_RSS_ALL = 5, // http://feeds.feedburner.com/uget/all?format=xml } UgetRssType; // ---------------------------------------------------------------------------- struct UgetRssItem { UG_LINK_MEMBERS (UgetRssItem, UgetRssItem, self); /* // ------ UgLink members ------ UgetRssItem* self; UgetRssItem* next; UgetRssItem* prev; */ char* title; char* link; time_t updated; // pubDate }; UgetRssItem* uget_rss_item_new (void); void uget_rss_item_free (UgetRssItem* item); // ---------------------------------------------------------------------------- extern const UgEntry UgetRssFeedEntry[]; struct UgetRssFeed { UG_LINK_MEMBERS (UgetRssFeed, UgetRssFeed, self); /* // ------ UgLink members ------ UgetRssFeed* self; UgetRssFeed* next; UgetRssFeed* prev; */ char* title; char* link; time_t updated; // pubDate UgList items; // user data char* url; int type; time_t checked; // don't care item before checked }; UgetRssFeed* uget_rss_feed_new (void); void uget_rss_feed_free (UgetRssFeed* feed); UgetRssItem* uget_rss_feed_find (UgetRssFeed* feed, time_t after_time); void uget_rss_feed_clear (UgetRssFeed* feed, int reserve_user_data); // ---------------------------------------------------------------------------- extern const UgEntry UgetRssEntry[]; struct UgetRss { UgThread thread; UgHtml uhtml; UgList feeds; UgetRssFeed* checked; uint8_t updating; int n_updated; int ref_count; }; UgetRss* uget_rss_new (void); void uget_rss_ref (UgetRss* urss); void uget_rss_unref (UgetRss* urss); void uget_rss_add (UgetRss* urss, UgetRssFeed* feed); void uget_rss_add_url (UgetRss* urss, const char* url); void uget_rss_add_builtin (UgetRss* urss, UgetRssType type); void uget_rss_update (UgetRss* urss, int joinable); UgetRssFeed* uget_rss_find_updated (UgetRss* urss, UgetRssFeed* after_feed); int uget_rss_save_feeds (UgetRss* urss, const char* path); int uget_rss_load_feeds (UgetRss* urss, const char* path); #ifdef __cplusplus } #endif #endif // End of UGET_RSS_H uget-2.2.3/uget/UgetRss.c0000664000175000017500000003463413602733704012130 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #define UGET_RSS_URL_STABLE "http://feeds.feedburner.com/uget/stable?format=xml" #define UGET_RSS_URL_DEVELMENT "http://feeds.feedburner.com/uget/development?format=xml" #define UGET_RSS_URL_NEWS "http://feeds.feedburner.com/uget/news?format=xml" #define UGET_RSS_URL_TUTORIALS "http://feeds.feedburner.com/uget/tutorials?format=xml" #define UGET_RSS_URL_ALL "http://feeds.feedburner.com/uget/all?format=xml" // ---------------------------------------------------------------------------- // link void ug_html_start_element_rss_link (UgHtml* uhtml, const char* element_name, const char** attribute_names, const char** attribute_values, void* dest, void* data) { const char* rel = NULL; const char* href = NULL; const char* type = NULL; int index; // if string already exist if (*(void**)dest) { ug_html_push (uhtml, &ug_html_parser_unknown, dest, NULL); return; } // RSS 2.0 if (attribute_names[0] == NULL) { ug_html_push (uhtml, &ug_html_parser_string, dest, NULL); return; } // Atom for (index = 0; attribute_names[index]; index++) { if (strcmp (attribute_names[index], "rel") == 0) rel = attribute_values[index]; else if (strcmp (attribute_names[index], "href") == 0) href = attribute_values[index]; else if (strcmp (attribute_names[index], "type") == 0) type = attribute_values[index]; if (type == NULL || href == NULL || rel == NULL) continue; if (strcmp (type, "text/html") != 0) continue; if (strcmp (rel, "alternate") != 0) continue; *(char**) dest = ug_strdup (href); } ug_html_push (uhtml, &ug_html_parser_unknown, NULL, NULL); } // ---------------------------------------------------------------------------- // Rss (ATOM ) const UgHtmlEntry UgHtmlEntryRssItem[] = { {"title", offsetof (UgetRssItem, title), &ug_html_parser_string, NULL, NULL}, {"link", offsetof (UgetRssItem, link), &ug_html_parser_custom, ug_html_start_element_rss_link, NULL}, {"updated", offsetof (UgetRssItem, updated), &ug_html_parser_time_rfc3339, NULL, NULL}, {"pubDate", offsetof (UgetRssItem, updated), &ug_html_parser_time_rfc822, NULL, NULL}, {NULL} }; void ug_html_start_element_rss_item (UgHtml* uhtml, const char* element_name, const char** attribute_names, const char** attribute_values, void* dest, void* data) { UgetRssItem* item; item = uget_rss_item_new (); ug_list_append ((UgList*) dest, (UgLink*) item); ug_html_push (uhtml, &ug_html_parser_entry, item, (void*) &UgHtmlEntryRssItem); } // ---------------------------------------------------------------------------- // RSS const UgHtmlEntry UgHtmlEntryRss[] = { {"title", offsetof (UgetRssFeed, title), &ug_html_parser_string, NULL, NULL}, {"link", offsetof (UgetRssFeed, link), &ug_html_parser_string, NULL, NULL}, {"updated", offsetof (UgetRssFeed, updated), &ug_html_parser_time_rfc3339, NULL, NULL}, {"pubDate", offsetof (UgetRssFeed, updated), &ug_html_parser_time_rfc822, NULL, NULL}, {"item", offsetof (UgetRssFeed, items), &ug_html_parser_custom, ug_html_start_element_rss_item, NULL}, {"entry", offsetof (UgetRssFeed, items), &ug_html_parser_custom, ug_html_start_element_rss_item, NULL}, {NULL} }; void ug_html_start_element_rss (UgHtml* uhtml, const char* element_name, const char** attribute_names, const char** attribute_values, void* dest, void* data) { if (strcmp (element_name, "channel") == 0 || strcmp (element_name, "feed") == 0) { ug_html_push (uhtml, &ug_html_parser_entry, dest, (void*) &UgHtmlEntryRss); } } void ug_html_end_element_rss (UgHtml* uhtml, const char* element_name, void* dest, void* data) { if (strcmp (element_name, "channel") == 0 || strcmp (element_name, "feed") == 0) ug_html_pop (uhtml); } const UgHtmlParser ug_html_parser_rss = { (void*) ug_html_start_element_rss, (void*) ug_html_end_element_rss, (void*) NULL }; // ---------------------------------------------------------------------------- // UgetRssItem UgetRssItem* uget_rss_item_new (void) { UgetRssItem* item; item = ug_malloc0 (sizeof (UgetRssItem)); item->self = item; return item; } void uget_rss_item_free (UgetRssItem* item) { ug_free (item->title); ug_free (item->link); ug_free (item); } // ---------------------------------------------------------------------------- // UgetRssFeed const UgEntry UgetRssFeedEntry[] = { {"type", offsetof (UgetRssFeed, type), UG_ENTRY_INT, NULL, NULL}, {"url", offsetof (UgetRssFeed, url), UG_ENTRY_STRING, NULL, NULL}, {"checked", offsetof (UgetRssFeed, checked), UG_ENTRY_CUSTOM, ug_json_parse_time_t, ug_json_write_time_t}, {NULL} }; UgetRssFeed* uget_rss_feed_new (void) { UgetRssFeed* feed; feed = ug_malloc0 (sizeof (UgetRssFeed)); feed->self = feed; feed->checked = -1; return feed; } void uget_rss_feed_free (UgetRssFeed* feed) { uget_rss_feed_clear (feed, FALSE); ug_free (feed); } void uget_rss_feed_clear (UgetRssFeed* feed, int reserve_user_data) { ug_free (feed->title); ug_free (feed->link); ug_list_foreach (&feed->items, (UgForeachFunc) uget_rss_item_free, NULL); ug_list_clear (&feed->items, FALSE); feed->title = NULL; feed->link = NULL; feed->updated = -1; if (reserve_user_data == FALSE) { ug_free (feed->url); feed->url = NULL; feed->type = 0; feed->checked = -1; } } void uget_rss_feed_move (UgetRssFeed* feed, UgetRssFeed* src) { uget_rss_feed_clear (feed, TRUE); feed->title = src->title; feed->link = src->link; feed->updated = src->updated; feed->items = src->items; src->title = NULL; src->link = NULL; src->updated = -1; ug_list_clear (&src->items, FALSE); } UgetRssItem* uget_rss_feed_find (UgetRssFeed* feed, time_t time_after) { UgetRssItem* item; UgetRssItem* result = NULL; if (time_after == -1) result = (UgetRssItem*) feed->items.head; else { for (item = (UgetRssItem*) feed->items.head; item; item = item->next) { if (item->updated > time_after) { if (result == NULL || result->updated > item->updated) result = item; } } } return result; } // ---------------------------------------------------------------------------- // UgetRss UgetRss* uget_rss_new (void) { UgetRss* urss; urss = ug_malloc (sizeof (UgetRss)); ug_html_init (&urss->uhtml); ug_list_init (&urss->feeds); urss->checked = NULL; urss->updating = FALSE; urss->ref_count = 1; return urss; } void uget_rss_ref (UgetRss* urss) { urss->ref_count++; } void uget_rss_unref (UgetRss* urss) { if (--urss->ref_count == 0) { ug_html_final (&urss->uhtml); ug_list_foreach (&urss->feeds, (UgForeachFunc) uget_rss_feed_free, NULL); ug_free (urss); } } void uget_rss_add (UgetRss* urss, UgetRssFeed* feed) { ug_list_append (&urss->feeds, (UgLink*) feed); } void uget_rss_add_builtin (UgetRss* urss, UgetRssType type) { UgetRssFeed* feed; const char* url; switch (type) { case UGET_RSS_STABLE: url = UGET_RSS_URL_STABLE; break; case UGET_RSS_DEVELMENT: url = UGET_RSS_URL_DEVELMENT; break; case UGET_RSS_NEWS: url = UGET_RSS_URL_NEWS; break; case UGET_RSS_TUTORIALS: url = UGET_RSS_URL_TUTORIALS; break; case UGET_RSS_ALL: url = UGET_RSS_URL_ALL; break; default: return; } for (feed = (UgetRssFeed*) urss->feeds.head; feed; feed = feed->next) { if (feed->type == type) { if (strcmp (feed->url, url)) { ug_free (feed->url); feed->url = ug_strdup (url); } return; } } feed = uget_rss_feed_new (); feed->type = type; feed->url = ug_strdup (url); uget_rss_add (urss, feed); } void uget_rss_add_url (UgetRss* urss, const char* url) { UgetRssFeed* feed; feed = uget_rss_feed_new (); feed->url = ug_strdup (url); feed->type = UGET_RSS_USER; ug_list_append (&urss->feeds, (UgLink*) feed); } /* static size_t uget_rss_curl_check (void *ptr, size_t size, size_t nmemb, UgHtml* uhtml) { return nmemb; } */ static size_t uget_rss_curl_write (void *ptr, size_t size, size_t nmemb, UgHtml* uhtml) { ug_html_parse (uhtml, (char*) ptr, size * nmemb); return nmemb; } static UgThreadResult uget_rss_thread (UgetRss* urss) { CURL* curl; CURLcode res; long response_code = 0; UgetRssFeed* feed; UgetRssFeed* temp; UgetRssItem* item; curl = curl_easy_init(); // disable peer SSL certificate verification curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, FALSE); // others curl_easy_setopt (curl, CURLOPT_NOSIGNAL, 1); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, (curl_write_callback) uget_rss_curl_write); curl_easy_setopt (curl, CURLOPT_WRITEDATA, &urss->uhtml); temp = uget_rss_feed_new (); for (feed = (UgetRssFeed*) urss->feeds.head; feed; feed = feed->next) { if (feed->url == NULL) continue; uget_rss_feed_clear (temp, FALSE); ug_html_push (&urss->uhtml, &ug_html_parser_rss, temp, NULL); ug_html_begin_parse (&urss->uhtml); curl_easy_setopt (curl, CURLOPT_URL, feed->url); res = curl_easy_perform (curl); curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &response_code); ug_html_end_parse (&urss->uhtml); if (res != CURLE_OK || response_code >= 400) continue; uget_rss_feed_move (feed, temp); // check item item = (UgetRssItem*) feed->items.head; if (item && item->updated > feed->checked) urss->n_updated++; } uget_rss_feed_free (temp); curl_easy_cleanup (curl); urss->updating = FALSE; uget_rss_unref (urss); return UG_THREAD_RESULT; } void uget_rss_update (UgetRss* urss, int joinable) { if (urss->updating == TRUE) return; urss->n_updated = 0; urss->updating = TRUE; uget_rss_ref (urss); ug_thread_create (&urss->thread, (UgThreadFunc) uget_rss_thread, urss); if (joinable == FALSE) ug_thread_unjoin (&urss->thread); } UgetRssFeed* uget_rss_find_updated (UgetRss* urss, UgetRssFeed* feed_after) { UgetRssItem* item; if (feed_after == NULL) { if (urss->checked) feed_after = urss->checked->next; } if (feed_after == NULL) feed_after = (UgetRssFeed*) urss->feeds.head; for (; feed_after; feed_after = feed_after->next) { item = (UgetRssItem*) feed_after->items.head; if (item && item->updated > feed_after->checked) break; } urss->checked = feed_after; return feed_after; } int uget_rss_save_feeds (UgetRss* urss, const char* path) { UgJsonFile* jfile; jfile = ug_json_file_new (4096); if (ug_json_file_begin_write (jfile, path, UG_JSON_FORMAT_ALL)) { // ug_json_write_array_head (&jfile->json); ug_json_write_entry (&jfile->json, urss, UgetRssEntry); // ug_json_write_array_tail (&jfile->json); ug_json_file_end_write (jfile); ug_json_file_free (jfile); return TRUE; } ug_json_file_free (jfile); return FALSE; } int uget_rss_load_feeds (UgetRss* urss, const char* path) { UgJsonFile* jfile; jfile = ug_json_file_new (0); if (ug_json_file_begin_parse (jfile, path)) { ug_json_push (&jfile->json, ug_json_parse_entry, urss, (void*) UgetRssEntry); // ug_json_push (&jfile->json, ug_json_parse_array, urss, NULL); ug_json_file_end_parse (jfile); ug_json_file_free (jfile); return TRUE; } ug_json_file_free (jfile); return FALSE; } // ------------------------------------ static UgJsonError ug_json_parse_uget_rss_feeds (UgJson* json, const char* name, const char* value, void* rss, void* none) { UgetRss* urss = rss; UgetRssFeed* feed; if (json->type != UG_JSON_OBJECT) { // if (json->type == UG_JSON_ARRAY) // ug_json_push (json, ug_json_parse_unknown, NULL, NULL); return UG_JSON_ERROR_TYPE_NOT_MATCH; } feed = uget_rss_feed_new (); ug_list_append (&urss->feeds, (UgLink*) feed); ug_json_push (json, ug_json_parse_entry, feed, (void*)UgetRssFeedEntry); return UG_JSON_ERROR_NONE; } static void ug_json_write_uget_rss_feeds (UgJson* json, const UgetRss* urss) { UgetRssFeed* feed; for (feed = (UgetRssFeed*) urss->feeds.head; feed; feed = feed->next) { ug_json_write_object_head (json); ug_json_write_entry (json, (void*) feed, UgetRssFeedEntry); ug_json_write_object_tail (json); } } const UgEntry UgetRssEntry[] = { {NULL, 0, UG_ENTRY_ARRAY, ug_json_parse_uget_rss_feeds, ug_json_write_uget_rss_feeds}, {NULL} }; uget-2.2.3/uget/UgetPluginMedia.c0000664000175000017500000003606613602733704013560 00000000000000/* * * Copyright (C) 2016-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #include #include #include #include #include #if defined _WIN32 || defined _WIN64 #include #define ug_sleep Sleep #else #include // usleep() #define ug_sleep(millisecond) usleep(millisecond * 1000) #endif // _WIN32 || _WIN64 #ifdef HAVE_GLIB #include #undef printf #else #define N_(x) x #define _(x) x #endif // ---------------------------------------------------------------------------- // UgetPluginInfo (derived from UgTypeInfo) static void plugin_init (UgetPluginMedia* plugin); static void plugin_final(UgetPluginMedia* plugin); static int plugin_ctrl (UgetPluginMedia* plugin, int code, void* data); static int plugin_accept(UgetPluginMedia* plugin, UgInfo* node_info); static int plugin_sync (UgetPluginMedia* plugin, UgInfo* node_info); static UgetResult global_set(int code, void* parameter); static UgetResult global_get(int code, void* parameter); static const char* schemes[] = {"http", "https", NULL}; static const char* hosts[] = {"youtube.com", "youtu.be", NULL}; static const UgetPluginInfo UgetPluginMediaInfoStatic = { "media", sizeof(UgetPluginMedia), (UgInitFunc) plugin_init, (UgFinalFunc) plugin_final, (UgetPluginSyncFunc) plugin_accept, (UgetPluginSyncFunc) plugin_sync, (UgetPluginCtrlFunc) plugin_ctrl, hosts, schemes, NULL, (UgetPluginGlobalFunc) global_set, (UgetPluginGlobalFunc) global_get }; // extern const UgetPluginInfo* UgetPluginMediaInfo = &UgetPluginMediaInfoStatic; // ---------------------------------------------------------------------------- // global data and it's functions. static struct { UgetMediaMatchMode match_mode; UgetMediaQuality quality; UgetMediaType type; } global = {UGET_MEDIA_MATCH_NEAR, UGET_MEDIA_QUALITY_360P, UGET_MEDIA_TYPE_MP4}; static UgetResult global_set(int option, void* parameter) { switch (option) { case UGET_PLUGIN_MEDIA_GLOBAL_MATCH_MODE: global.match_mode = (intptr_t) parameter; break; case UGET_PLUGIN_MEDIA_GLOBAL_QUALITY: global.quality = (intptr_t) parameter; break; case UGET_PLUGIN_MEDIA_GLOBAL_TYPE: global.type = (intptr_t) parameter; break; default: // call parent's global_set() return uget_plugin_agent_global_set(option, parameter); } return UGET_RESULT_OK; } static UgetResult global_get(int option, void* parameter) { switch (option) { case UGET_PLUGIN_GLOBAL_MATCH: if (uget_site_get_id(parameter) < UGET_SITE_MEDIA) return UGET_RESULT_FAILED; break; default: // call parent's global_get() return uget_plugin_agent_global_get(option, parameter); } return UGET_RESULT_OK; } // ---------------------------------------------------------------------------- // control functions static void plugin_init(UgetPluginMedia* plugin) { // initialize UgetPluginAgent uget_plugin_agent_init((UgetPluginAgent*) plugin); } static void plugin_final(UgetPluginMedia* plugin) { ug_free(plugin->title); uget_plugin_agent_final((UgetPluginAgent*) plugin); } // ---------------------------------------------------------------------------- // plugin_ctrl static UgThreadResult plugin_thread(UgetPluginMedia* plugin); static int plugin_ctrl(UgetPluginMedia* plugin, int code, void* data) { switch (code) { case UGET_PLUGIN_CTRL_START: if (plugin->target_info) { return uget_plugin_agent_start((UgetPluginAgent*)plugin, (UgThreadFunc)plugin_thread); } break; default: // call parent's plugin_ctrl() return uget_plugin_agent_ctrl((UgetPluginAgent*)plugin, code, data); } return FALSE; } // ---------------------------------------------------------------------------- // plugin_sync static int plugin_sync(UgetPluginMedia* plugin, UgInfo* node_info) { UgetFiles* files; UgetCommon* common; UgetProgress* progress; if (plugin->stopped) { if (plugin->synced) return FALSE; plugin->synced = TRUE; } // avoid crash if plug-in failed to start. if (plugin->target_info == NULL) return FALSE; // sync data between plug-in and foreign UgData common = ug_info_realloc(node_info, UgetCommonInfo); // sum retry count common->retry_count = plugin->target_common->retry_count + plugin->retry_count; // change name by title ,item_index, and item_total if (plugin->named == FALSE && plugin->title) { plugin->named = TRUE; ug_free(common->name); // decide to show "(current/total) title" or "title" if (plugin->item_total > 1) { common->name = ug_strdup_printf("(%d/%d) %s", plugin->item_index + 1, plugin->item_total, plugin->title); } else common->name = ug_strdup(plugin->title); } // sync common data (include speed limit) between foreign data and target_info uget_plugin_agent_sync_common((UgetPluginAgent*) plugin, common, plugin->target_common); // downloading file name changed if (plugin->file_renamed == TRUE) { plugin->file_renamed = FALSE; uget_plugin_lock(plugin); ug_free(common->file); common->file = ug_strdup(plugin->target_common->file); uget_plugin_unlock(plugin); } // update UgetFiles files = ug_info_realloc(node_info, UgetFilesInfo); uget_plugin_lock(plugin); uget_files_sync(files, plugin->target_files); uget_plugin_unlock(plugin); // sync progress data from target_info to foreign data progress = ug_info_realloc(node_info, UgetProgressInfo); uget_plugin_agent_sync_progress((UgetPluginAgent*) plugin, progress, plugin->target_progress); // recount progress if plug-in download multiple files if (plugin->item_total > 1) { // recount percent progress->percent = (progress->percent + 100 * plugin->item_index) / plugin->item_total; // recount/speculate left time if (progress->download_speed > 0) { progress->left = (progress->total * (plugin->item_total - plugin->item_index) - progress->complete) / progress->download_speed; } // sum elapsed time progress->elapsed += plugin->elapsed; } // if plug-in was stopped, return FALSE. return TRUE; } // ---------------------------------------------------------------------------- static int plugin_accept(UgetPluginMedia* plugin, UgInfo* node_info) { UgetCommon* common; common = ug_info_get(node_info, UgetCommonInfo); if (common == NULL || common->uri == NULL) return FALSE; plugin->target_info = ug_info_new(8, 0); ug_info_assign(plugin->target_info, node_info, NULL); plugin->target_files = ug_info_realloc(plugin->target_info, UgetFilesInfo); plugin->target_common = ug_info_get(plugin->target_info, UgetCommonInfo); plugin->target_proxy = ug_info_get(plugin->target_info, UgetProxyInfo); plugin->target_progress = ug_info_realloc(plugin->target_info, UgetProgressInfo); return TRUE; } static int is_file_completed(const char* file, const char* folder); static UgThreadResult plugin_thread(UgetPluginMedia* plugin) { UgetPluginInfo* plugin_info; UgetMedia* umedia; UgetMediaItem* umitem; UgetCommon* common; UgetHttp* http; UgetEvent* msg_next; UgetEvent* msg; const char* type = NULL; const char* quality = NULL; common = plugin->target_common; umedia = uget_media_new(common->uri, 0); if (uget_media_grab_items(umedia, plugin->target_proxy) == 0) { if (umedia->event) { uget_plugin_post((UgetPlugin*) plugin, umedia->event); umedia->event = NULL; } else { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_CUSTOM, _("Failed to get media link."))); } goto exit; } // tell plugin_sync() to change foreign UgetCommon::name if (umedia->title) { plugin->title = umedia->title; umedia->title = NULL; plugin->synced = FALSE; } umitem = uget_media_match(umedia, global.match_mode, global.quality, global.type); if (umitem == NULL) { umitem = uget_media_match(umedia, global.match_mode, global.quality, global.type | UGET_MEDIA_TYPE_DEMUX); } if (umitem == NULL) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_CUSTOM, _("No matched media."))); goto exit; } // set item_index and item_total plugin->item_index = 0; plugin->item_total = umedia->size - ug_list_position((UgList*) umedia, (UgLink*) umitem); // set HTTP referrer http = ug_info_realloc(plugin->target_info, UgetHttpInfo); if (http->referrer == NULL) http->referrer = ug_strdup_printf("%s%s", common->uri, "# "); // clear copied common URI ug_free(common->uri); common->uri = NULL; // reset grand total data plugin->elapsed = 0; plugin->retry_count = 0; for (; umitem; umitem = umitem->next) { // stop this loop when user paused this plug-in. if (plugin->paused) break; // Don't increase item_index when running this loop first time. if (type) plugin->item_index++; switch (umitem->type & UGET_MEDIA_TYPE_MUX) { case UGET_MEDIA_TYPE_3GPP: type = "3gpp"; break; case UGET_MEDIA_TYPE_FLV: type = "flv"; break; case UGET_MEDIA_TYPE_MP4: type = "mp4"; break; case UGET_MEDIA_TYPE_WEBM: type = "webm"; break; case UGET_MEDIA_TYPE_UNKNOWN: default: type = "unknown"; break; } switch (umitem->quality) { case UGET_MEDIA_QUALITY_144P: quality = "144p"; break; case UGET_MEDIA_QUALITY_240P: quality = "240p"; break; case UGET_MEDIA_QUALITY_360P: quality = "360p"; break; case UGET_MEDIA_QUALITY_480P: quality = "480p"; break; case UGET_MEDIA_QUALITY_720P: quality = "720p"; break; case UGET_MEDIA_QUALITY_1080P: quality = "1080p"; break; case UGET_MEDIA_QUALITY_UNKNOWN: default: if (umitem->type & UGET_MEDIA_TYPE_AUDIO) quality = "audio"; else quality = "unknown"; break; } // generate file name by title, quality, and type. uget_plugin_lock(plugin); ug_free(common->file); common->file = ug_strdup_printf("%s_%s.%s", (plugin->title) ? plugin->title : "unknown", quality, type); ug_str_replace_chars(common->file, "\\/:*?\"<>|", '_'); uget_plugin_unlock(plugin); plugin->file_renamed = TRUE; // skip completed file if (is_file_completed(common->file, common->folder)) continue; // use media link to replace common->uri common->uri = umitem->url; // tell plugin_sync() to change foreign UgetCommon::name plugin->named = FALSE; // save/reset retry count plugin->retry_count += common->retry_count; common->retry_count = 0; // save/reset elapsed plugin->elapsed += plugin->target_progress->elapsed; plugin->target_progress->elapsed = 0; uget_plugin_agent_global_get(UGET_PLUGIN_AGENT_GLOBAL_PLUGIN, &plugin_info); // create target_plugin to download plugin->target_plugin = uget_plugin_new(plugin_info); uget_plugin_accept(plugin->target_plugin, plugin->target_info); uget_plugin_ctrl_speed(plugin->target_plugin, plugin->limit); if (uget_plugin_start(plugin->target_plugin) == FALSE) { msg = uget_event_new_error(UGET_EVENT_ERROR_THREAD_CREATE_FAILED, NULL); uget_plugin_post((UgetPlugin*) plugin, msg); } do { // sleep 0.5 second ug_sleep(500); // stop target_plugin when user paused this plug-in. if (plugin->paused) { uget_plugin_stop(plugin->target_plugin); break; } if (plugin->limit_changed) { plugin->limit_changed = FALSE; uget_plugin_ctrl_speed(plugin->target_plugin, plugin->limit); } // move event from target_plugin to plug-in msg = uget_plugin_pop((UgetPlugin*) plugin->target_plugin); for (; msg; msg = msg_next) { msg_next = msg->next; msg->prev = NULL; msg->next = NULL; // handle or discard some message switch (msg->type) { case UGET_EVENT_NAME: // tell plugin_sync() to change file name plugin->file_renamed = TRUE; break; case UGET_EVENT_ERROR: // stop downloading if error occurred plugin->paused = TRUE; break; case UGET_EVENT_STOP: case UGET_EVENT_COMPLETED: // discard message uget_event_free(msg); continue; } // post event to plug-in uget_plugin_post((UgetPlugin*) plugin, msg); } // sync data in plugin_sync() plugin->synced = FALSE; uget_plugin_lock(plugin); uget_plugin_sync(plugin->target_plugin, plugin->target_info); uget_plugin_unlock(plugin); } while (uget_plugin_get_state(plugin->target_plugin)); // free target_plugin uget_plugin_unref(plugin->target_plugin); plugin->target_plugin = NULL; } common->uri = NULL; // Don't free common->uri again. if (plugin->paused == FALSE && umitem == NULL) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new(UGET_EVENT_COMPLETED)); } uget_plugin_post((UgetPlugin*)plugin, uget_event_new(UGET_EVENT_STOP)); exit: plugin->stopped = TRUE; uget_media_free(umedia); uget_plugin_unref((UgetPlugin*) plugin); return UG_THREAD_RESULT; } static int is_file_completed(const char* file, const char* folder) { char* path; char* temp; int result = FALSE; if (folder == NULL) path = ug_strdup(file); else path = ug_build_filename(folder, file, NULL); if (ug_file_is_exist(path)) { temp = ug_strdup_printf("%s.%s", path, "aria2"); ug_free(path); path = temp; if (ug_file_is_exist(path) == FALSE) result = TRUE; } // debug // if (result) // printf("%s is completed\n", path); ug_free(path); return result; } uget-2.2.3/uget/UgetRpc.c0000664000175000017500000003556613602733704012112 00000000000000/* * * Copyright (C) 2015-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include // srand() #include // time() #include #include #include #include #include #include #define UGET_RPC_PORT "14777" #define UGET_RPC_ADDR "127.0.0.1" //#define UGET_RPC_NAME "RPC-socket" //#define UGET_RPC_NAME_ABS "com.ugetdm.uget" //#define UGET_RPC_LIMIT 50 static void uget_rpc_on_destroy (void* data); static void on_accepted (UgJsonrpc* jrpc, UgetRpc* urpc, void* data); static void set_invalid_request (UgJsonrpcObject* jobj); static void backup_data_file (UgetOptionValue* uoval, const char* dir); UgetRpc* uget_rpc_new (const char* backup_dir) { UgetRpc* urpc; #if defined _WIN32 || defined _WIN64 WSADATA WSAData; WSAStartup (MAKEWORD (2, 2), &WSAData); #endif urpc = ug_malloc (sizeof (UgetRpc)); ug_jsonrpc_socket_init ((UgJsonrpcSocket*) urpc); urpc->server = NULL; ug_jsonrpc_object_init (&urpc->jobject); ug_jsonrpc_array_init (&urpc->jarray, 8); ug_option_init (&urpc->option); ug_list_init (&urpc->queue); ug_mutex_init (&urpc->queue_lock); if (backup_dir) urpc->backup_dir = ug_strdup (backup_dir); else urpc->backup_dir = NULL; #ifdef USE_UNIX_DOMAIN_SOCKET urpc->socket_path = NULL; urpc->socket_path_len = 0; #endif return urpc; } void uget_rpc_free (UgetRpc* urpc) { if (urpc->server == NULL) uget_rpc_on_destroy (urpc); else { ug_socket_server_stop (urpc->server); ug_socket_server_unref (urpc->server); } } #ifdef USE_UNIX_DOMAIN_SOCKET void uget_rpc_use_unix_socket (UgetRpc* urpc, const char* path, int path_len) { if (path_len > 0 && path[0] == 0) { // for Linux abstract socket urpc->socket_path = ug_malloc (path_len); memcpy (urpc->socket_path, path, path_len); } else { // for unix domain socket if (path_len == -1) path_len = strlen (path); urpc->socket_path = ug_strndup (path, path_len); } urpc->socket_path_len = path_len; } #endif // USE_UNIX_DOMAIN_SOCKET static void uget_rpc_on_destroy (void* data) { UgetRpc* urpc = (UgetRpc*) data; #if defined _WIN32 || defined _WIN64 WSACleanup (); #endif ug_jsonrpc_socket_final ((UgJsonrpcSocket*) urpc); ug_jsonrpc_object_clear (&urpc->jobject); ug_jsonrpc_array_clear (&urpc->jarray, TRUE); ug_option_final (&urpc->option); ug_list_foreach (&urpc->queue, (UgForeachFunc) uget_rpc_cmd_free, NULL); // ug_list_clear (&urpc->queue, FALSE); ug_mutex_clear (&urpc->queue_lock); #ifdef USE_UNIX_DOMAIN_SOCKET // Don't delete file if path is abstract socket names (begin with 0) if (urpc->server && urpc->socket_path[0]) ug_unlink (urpc->socket_path); ug_free (urpc->socket_path); #endif ug_free (urpc->backup_dir); ug_free (urpc); } int uget_rpc_do_request (UgetRpc* urpc, UgJsonrpcObject* jobj) { UgValueArray* array; UgetRpcReq* req; UgetRpcCmd* cmd; UgLink* urilink; const char* method; int index; if (jobj->method_static) method = jobj->method_static; else method = jobj->method; if (method == NULL) { set_invalid_request (jobj); return FALSE; } if (strcmp (method, "uget.present") == 0) { req = uget_rpc_req_new (); req->method_id = UGET_RPC_PRESENT; // add to queue ug_mutex_lock (&urpc->queue_lock); ug_list_append (&urpc->queue, (UgLink*) req); ug_mutex_unlock (&urpc->queue_lock); // response OK // {"jsonrpc": "2.0", "result": true, "id": 1} ug_jsonrpc_object_clear_request (jobj); jobj->result.type = UG_VALUE_BOOL; jobj->result.c.boolean = TRUE; return TRUE; } else if (strcmp (method, "uget.sendCommand") == 0) { if (jobj->params.type != UG_VALUE_ARRAY) { set_invalid_request (jobj); return FALSE; } // parse params cmd = uget_rpc_cmd_new (); ug_option_clear (&urpc->option); ug_option_set_parser (&urpc->option, ug_option_parse_entry, &cmd->value, uget_option_entry); array = jobj->params.c.array; for (index = 0; index < array->length; index++) ug_option_parse (&urpc->option, array->at[index].c.string, -1); // get URIs from command-line for (index = 0; index < urpc->option.others.length; index++) { urilink = ug_link_new(); urilink->data = urpc->option.others.at[index]; urpc->option.others.at[index] = NULL; ug_list_append (&cmd->uris, urilink); } // get URIs from text file if (cmd->value.input_file) ug_file_get_lines (cmd->value.input_file, &cmd->uris); // check arguments if (cmd->uris.size == 0 && uget_option_value_has_ctrl (&cmd->value)) { set_invalid_request (jobj); if (cmd->uris.size == 0) { jobj->error.data.type = UG_VALUE_STRING; jobj->error.data.c.string = ug_strdup ("No URIs"); } uget_rpc_cmd_free (cmd); return FALSE; } // backup cookie and post file if (urpc->backup_dir) backup_data_file (&cmd->value, urpc->backup_dir); // add to queue ug_mutex_lock (&urpc->queue_lock); ug_list_append (&urpc->queue, (UgLink*) cmd); ug_mutex_unlock (&urpc->queue_lock); // response OK // {"jsonrpc": "2.0", "result": true, "id": 1} ug_jsonrpc_object_clear_request (jobj); jobj->result.type = UG_VALUE_BOOL; jobj->result.c.boolean = TRUE; return TRUE; } // {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "1"} ug_jsonrpc_object_clear_request (jobj); ug_free (jobj->error.message); jobj->error.code = -32601; jobj->error.message = ug_strdup ("Method not found"); return FALSE; } void uget_rpc_send_command (UgetRpc* urpc, int argc, char** argv) { UgJsonrpcObject* jobj; UgJsonrpcObject* jres; UgValue* value; int index; if (argc == 0) { if (urpc->server == NULL) uget_rpc_present (urpc); return; } jobj = ug_jsonrpc_object_new (); jobj->method_static = "uget.sendCommand"; ug_value_init_array (&jobj->params, argc); value = ug_value_alloc (&jobj->params, argc); for (index = 0; index < argc; index++, value++) { // value->name = NULL; value->type = UG_VALUE_STRING; #if (defined _WIN32 || defined _WIN64) && defined HAVE_GLIB if (argv[index] && g_utf8_validate (argv[index], -1, NULL) == FALSE) { value->c.string = g_locale_to_utf8 (argv[index], -1, NULL, NULL, NULL); } else #endif // (_WIN32 || _WIN64) && HAVE_GLIB value->c.string = ug_strdup (argv[index]); // replace invalid characters \/:*?"<>| by _ in filename. if (strncmp (value->c.string, "--filename=", 11) == 0) ug_str_replace_chars (value->c.string +11, "\\/:*?\"<>|", '_'); } if (urpc->server) uget_rpc_do_request (urpc, jobj); else { jres = ug_jsonrpc_object_new (); #ifdef USE_UNIX_DOMAIN_SOCKET if (urpc->socket_path) { ug_jsonrpc_socket_connect_unix ((UgJsonrpcSocket*) urpc, urpc->socket_path, urpc->socket_path_len); } else #endif ug_jsonrpc_socket_connect ((UgJsonrpcSocket*) urpc, UGET_RPC_ADDR, UGET_RPC_PORT); ug_jsonrpc_call (&urpc->rpc, jobj, jres); ug_jsonrpc_object_free (jres); } ug_jsonrpc_object_free (jobj); } void uget_rpc_present (UgetRpc* urpc) { UgJsonrpcObject* jobj; UgJsonrpcObject* jres; jobj = ug_jsonrpc_object_new (); jobj->method_static = "uget.present"; if (urpc->server) uget_rpc_do_request (urpc, jobj); else { jres = ug_jsonrpc_object_new (); #ifdef USE_UNIX_DOMAIN_SOCKET if (urpc->socket_path) { ug_jsonrpc_socket_connect_unix ((UgJsonrpcSocket*) urpc, urpc->socket_path, urpc->socket_path_len); } else #endif ug_jsonrpc_socket_connect ((UgJsonrpcSocket*) urpc, UGET_RPC_ADDR, UGET_RPC_PORT); ug_jsonrpc_call (&urpc->rpc, jobj, jres); ug_jsonrpc_object_free (jres); } ug_jsonrpc_object_free (jobj); } int uget_rpc_start_server (UgetRpc* urpc, int detect_server) { SOCKET fd; int result; int in_progress = FALSE; int opt_value; socklen_t opt_length; fd_set fdset; struct timeval timeout; if (urpc->server) { ug_socket_server_start (urpc->server); return TRUE; } // detect server if (detect_server) { #ifdef USE_UNIX_DOMAIN_SOCKET if (urpc->socket_path) { fd = socket (AF_UNIX, SOCK_STREAM, 0); ug_socket_set_blocking (fd, FALSE); result = ug_socket_connect_unix (fd, urpc->socket_path, urpc->socket_path_len); if (errno == EINPROGRESS) in_progress = TRUE; } else #endif // USE_UNIX_DOMAIN_SOCKET { fd = socket (AF_INET, SOCK_STREAM, 0); ug_socket_set_blocking (fd, FALSE); result = ug_socket_connect (fd, UGET_RPC_ADDR, UGET_RPC_PORT); #if (defined _WIN32 || defined _WIN64) if (WSAGetLastError() == WSAEWOULDBLOCK) in_progress = TRUE; #else if (errno == EINPROGRESS) in_progress = TRUE; #endif } // connect with timeout (non-blocking) if (result < 0 && in_progress) { FD_ZERO (&fdset); FD_SET (fd, &fdset); timeout.tv_sec = 1; timeout.tv_usec = 0; // select() return 0 if time limit expired. // select() return -1 if error. if (select (fd+1, NULL, &fdset, NULL, &timeout) > 0) { opt_value = 1; opt_length = sizeof (opt_value); getsockopt (fd, SOL_SOCKET, SO_ERROR, (void*)(&opt_value), &opt_length); if (opt_value == 0) result = 0; // connect OK } } closesocket (fd); if (result != -1) { return FALSE; } } // create server #ifdef USE_UNIX_DOMAIN_SOCKET if (urpc->socket_path) { // Don't delete file if path is abstract socket names (begin with 0) if (urpc->socket_path[0]) ug_unlink (urpc->socket_path); urpc->server = ug_socket_server_new_unix (urpc->socket_path, urpc->socket_path_len); } else #endif urpc->server = ug_socket_server_new_addr (UGET_RPC_ADDR, UGET_RPC_PORT); if (urpc->server == NULL) return FALSE; urpc->server->destroy.func = uget_rpc_on_destroy; urpc->server->destroy.data = urpc; ug_jsonrpc_socket_use_server ((UgJsonrpcSocket*) urpc, urpc->server, (UgJsonrpcServerFunc) on_accepted, urpc, NULL); ug_socket_server_start (urpc->server); return TRUE; } void uget_rpc_stop_server (UgetRpc* urpc) { if (urpc->server) ug_socket_server_stop (urpc->server); } int uget_rpc_has_request (UgetRpc* urpc) { if (urpc->queue.head) return TRUE; else return FALSE; } UgetRpcReq* uget_rpc_get_request (UgetRpc* urpc) { UgetRpcReq* link; ug_mutex_lock (&urpc->queue_lock); link = (UgetRpcReq*) urpc->queue.head; if (link) ug_list_remove (&urpc->queue, (UgLink*) link); ug_mutex_unlock (&urpc->queue_lock); return link; } static void on_accepted (UgJsonrpc* jrpc, UgetRpc* urpc, void* data) { UgJsonrpcObject* jobj; UgJsonType type; int index; type = ug_jsonrpc_receive (jrpc, &urpc->jobject, &urpc->jarray); if (type == UG_JSON_OBJECT) { uget_rpc_do_request (urpc, &urpc->jobject); if (urpc->jobject.id.type != UG_VALUE_NONE) ug_jsonrpc_response (jrpc, &urpc->jobject); ug_jsonrpc_object_clear (&urpc->jobject); } else if (type == UG_JSON_ARRAY) { for (index = 0; index < urpc->jarray.length; index++) { jobj = urpc->jarray.at[index]; uget_rpc_do_request (urpc, jobj); if (jobj->id.type == UG_VALUE_NONE && jobj->error.code == 0) { ug_jsonrpc_object_free (jobj); urpc->jarray.at[index] = NULL; } } ug_jsonrpc_response_batch (jrpc, &urpc->jarray); ug_jsonrpc_array_clear (&urpc->jarray, TRUE); } } static void set_invalid_request (UgJsonrpcObject* jobj) { // {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null} ug_jsonrpc_object_clear_request (jobj); ug_free (jobj->error.message); jobj->error.code = -32600; jobj->error.message = ug_strdup ("Invalid Request"); } static void backup_data_file (UgetOptionValue* uoval, const char* dir) { int num; char* fpath; srand ((unsigned int) time(NULL)); num = rand (); // backup cookie file if (uoval->http.cookie_file) { fpath = ug_strdup_printf ("%s" UG_DIR_SEPARATOR_S "%X.cookie", dir, num); if (ug_file_copy (uoval->http.cookie_file, fpath) == -1) ug_free (fpath); else { ug_free (uoval->http.cookie_file); uoval->http.cookie_file = fpath; fpath = NULL; } } // backup post file if (uoval->http.post_file) { fpath = ug_strdup_printf ("%s" UG_DIR_SEPARATOR_S "%X.post", dir, num); if (ug_file_copy (uoval->http.post_file, fpath) == -1) ug_free (fpath); else { ug_free (uoval->http.post_file); uoval->http.post_file = fpath; fpath = NULL; } } } // ---------------------------------------------------------------------------- // UgetRpcReq UgetRpcReq* uget_rpc_req_new (void) { UgetRpcReq* req; req = ug_malloc0 (sizeof (UgetRpcReq)); req->free = ug_free; return req; } // ---------------------------------------------------------------------------- // UgetRpcCmd UgetRpcCmd* uget_rpc_cmd_new (void) { UgetRpcCmd* cmd; cmd = ug_malloc (sizeof (UgetRpcCmd)); cmd->method_id = UGET_RPC_SEND_COMMAND; cmd->next = NULL; cmd->prev = NULL; cmd->free = (UgDeleteFunc) uget_rpc_cmd_free; uget_option_value_init (&cmd->value); ug_list_init (&cmd->uris); return cmd; } void uget_rpc_cmd_free (UgetRpcCmd* urcmd) { UgLink* urilink; uget_option_value_clear (&urcmd->value); for (urilink = urcmd->uris.head; urilink; urilink = urilink->next) ug_free (urilink->data); ug_list_clear (&urcmd->uris, TRUE); ug_free (urcmd); } uget-2.2.3/uget/UgetSequence.c0000664000175000017500000002026113602733704013120 00000000000000/* * * Copyright (C) 2016-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include typedef struct UgLinkString UgLinkString; struct UgLinkString { UG_LINK_MEMBERS (UgLinkString, char, data); // char* data; // UgLinkString* next; // UgLinkString* prev; char string[1]; }; static UgLink* ug_link_string_new (const char* string, int length) { UgLinkString* link; link = ug_malloc (sizeof (UgLinkString) + length); if (link == NULL) return NULL; link->data = link->string; link->prev = NULL; link->next = NULL; strcpy (link->string, string); return (UgLink*) link; } // ---------------------------------------------------------------------------- // UgetSeqRange static void uget_seq_range_to_first (UgetSeqRange* range) { range->cur = range->first; } static void uget_seq_range_to_last (UgetSeqRange* range) { range->cur = range->last; } // ---------------------------------------------------------------------------- void uget_sequence_init (UgetSequence* useq) { ug_array_init (useq, sizeof (UgetSeqRange), 8); ug_buffer_init (&useq->buf, 128); } void uget_sequence_final (UgetSequence* useq) { ug_array_clear (useq); ug_buffer_clear (&useq->buf, TRUE); } void uget_sequence_add (UgetSequence* useq, uint32_t first, uint32_t last, int digits) { UgetSeqRange* range; range = ug_array_alloc (useq, 1); range->digits = digits; if (first < last) { range->first = first; range->last = last; } else { range->first = last; range->last = first; } range->cur = range->first; } void uget_sequence_clear (UgetSequence* useq) { useq->length = 0; } int uget_sequence_count (UgetSequence* useq, const char* pattern) { UgetSeqRange* range; UgetSeqRange* range_end; const char* pcur; int pcur_len; int count; count = 0; range = useq->at; range_end = useq->at + useq->length; for (pcur = pattern; pcur[0] && range < range_end; pcur++, range++) { pcur_len = strcspn (pcur, "*"); if (pcur[pcur_len] != '*') break; if (count == 0) count = range->last - range->first + 1; else count = count * (range->last - range->first + 1); pcur += pcur_len; // to next '*' } return count; } // generate string by pattern static char* uget_sequence_generate1 (UgetSequence* useq, const char* pattern) { UgetSeqRange* range; char* utf8; int length; const char* pcur; int pcur_len; range = useq->at; useq->buf.cur = useq->buf.beg; for (pcur = pattern; pcur[0]; pcur++) { pcur_len = strcspn (pcur, "*"); ug_buffer_write (&useq->buf, pcur, pcur_len); if (pcur[pcur_len] != '*') break; if (range->digits == 0) { // ASCII or Unicode if (range->cur < 0x80) ug_buffer_write_char (&useq->buf, range->cur); else { utf8 = ug_ucs4_to_utf8 (&range->cur, 1, &length); ug_buffer_write (&useq->buf, utf8, length); ug_free (utf8); } } else { // digits, 0 - 9 #ifdef _MSC_VER // for MS C only length = _scprintf ("%.*u", range->digits, range->cur); #else // for C99 standard length = snprintf (NULL, 0, "%.*u", range->digits, range->cur); #endif sprintf (ug_buffer_alloc (&useq->buf, length + 1), "%.*u", range->digits, range->cur); useq->buf.cur--; // remove null character in tail } if (++range > useq->range_last) range = useq->at; pcur += pcur_len; // to next '*' } ug_buffer_write_char (&useq->buf, 0); return useq->buf.beg; } static int uget_sequence_generate (UgetSequence* useq, const char* pattern, UgetSeqRange* range, UgList* result) { UgLink* link; int count; for (count = 0; range->cur <= range->last; range->cur++) { if (range+1 <= useq->range_last) count += uget_sequence_generate (useq, pattern, range+1, result); else { uget_sequence_generate1 (useq, pattern); link = ug_link_string_new (useq->buf.beg, ug_buffer_length (&useq->buf)); if (link == NULL) break; ug_list_append (result, link); count++; } } range->cur = range->first; return count; } static UgetSeqRange* uget_sequence_decide_range_last (UgetSequence* useq, const char* pattern) { const char* wildcard; int count; if (useq->length == 0) return NULL; // count wildcard character (*) to decide the last UgetSeqRange for (count = 0, wildcard = pattern; wildcard[0]; wildcard++) { if (wildcard[0] == '*') count++; } if (count < useq->length) useq->range_last = useq->at + count -1; else useq->range_last = useq->at + useq->length -1; return useq->range_last; } int uget_sequence_get_list (UgetSequence* useq, const char* pattern, UgList* result) { if (uget_sequence_decide_range_last(useq, pattern) == NULL) return 0; // reset range ug_array_foreach (useq, (UgForeachFunc)uget_seq_range_to_first, NULL); // generate list return uget_sequence_generate (useq, pattern, useq->at, result); } int uget_sequence_get_preview (UgetSequence* useq, const char* pattern, UgList* result) { UgetSeqRange* range_last; UgetSeqRange* range_prev; UgLink* link; int count; // use uget_sequence_get_list() to generate preview if possible. count = uget_sequence_count (useq, pattern); if (count < 6) return uget_sequence_get_list (useq, pattern, result); range_last = uget_sequence_decide_range_last(useq, pattern); // decide previous UgetSeqRange by the last UgetSeqRange for (range_prev = range_last; range_prev != useq->at; range_prev--) { if (range_prev->last - range_prev->first + 1 > 1) break; } // reset range to first ug_array_foreach (useq, (UgForeachFunc)uget_seq_range_to_first, NULL); // create 1st string uget_sequence_generate1 (useq, pattern); link = ug_link_string_new (useq->buf.beg, ug_buffer_length (&useq->buf)); ug_list_append (result, link); // create 2nd string range_prev->cur++; uget_sequence_generate1 (useq, pattern); link = ug_link_string_new (useq->buf.beg, ug_buffer_length (&useq->buf)); ug_list_append (result, link); // create 3rd " ..." link = ug_link_string_new (" ...", 4); ug_list_append (result, link); // reset range to last ug_array_foreach (useq, (UgForeachFunc)uget_seq_range_to_last, NULL); // create 4th string range_prev->cur = range_prev->last - 1; uget_sequence_generate1 (useq, pattern); link = ug_link_string_new (useq->buf.beg, ug_buffer_length (&useq->buf)); ug_list_append (result, link); // create 5th string range_prev->cur = range_prev->last; uget_sequence_generate1 (useq, pattern); link = ug_link_string_new (useq->buf.beg, ug_buffer_length (&useq->buf)); ug_list_append (result, link); return 5; } void uget_sequence_clear_result (UgList* result) { ug_list_foreach_link(result, (UgForeachFunc)ug_free, NULL); ug_list_clear(result, FALSE); } uget-2.2.3/uget/UgetNode.c0000664000175000017500000003722513602733704012245 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #ifdef HAVE_GLIB #include // g_slice_xxx #endif static void uget_node_call_fake_filter (UgetNode* parent, UgetNode* sibling, UgetNode* child); static UgJsonError ug_json_parse_state2group (UgJson* json, const char* name, const char* value, void* node, void* none); static UgJsonError ug_json_parse_name2data (UgJson* json, const char* name, const char* value, void* node, void* none); // ---------------------------------------------------------------------------- // UgetNode struct UgetNodeNotifier uget_node_default_notifier = { NULL, // UgetNodeFunc inserted; NULL, // UgetNodeFunc removed; NULL, // UgNotifyFunc updated; NULL, // void* data; // extra data for user }; struct UgetNodeControl uget_node_default_control = { // NULL, // struct UgetNodeControl* children; &uget_node_default_notifier, // struct UgetNodeNotifier* notifier; {NULL, FALSE}, // struct UgetNodeSort sort; NULL, // UgetNodeFunc filter; }; const UgEntry UgetNodeEntry[] = { {"info", offsetof (UgetNode, info), UG_ENTRY_CUSTOM, ug_json_parse_info_ptr, ug_json_write_info_ptr}, {"children", 0, UG_ENTRY_ARRAY, ug_json_parse_uget_node_children, ug_json_write_uget_node_children}, // deprecated {"name", 0, UG_ENTRY_CUSTOM, ug_json_parse_name2data, NULL}, {"state", 0, UG_ENTRY_CUSTOM, ug_json_parse_state2group, NULL}, {"data", offsetof (UgetNode, info), UG_ENTRY_CUSTOM, ug_json_parse_info_ptr, NULL}, {NULL} // null-terminated }; UgetNode* uget_node_new (UgetNode* node_real) { UgetNode* node; #ifdef HAVE_GLIB node = g_slice_alloc (sizeof (UgetNode)); #else node = ug_malloc (sizeof (UgetNode)); #endif // HAVE_GLIB uget_node_init (node, node_real); return node; } void uget_node_free(UgetNode* node) { uget_node_final(node); #ifdef HAVE_GLIB g_slice_free1(sizeof(UgetNode), node); #else ug_free(node); #endif // HAVE_GLIB } void uget_node_init (UgetNode* node, UgetNode* node_real) { memset (node, 0, sizeof (UgetNode)); node->control = &uget_node_default_control; if (node_real == NULL) { node->base = node; // pointer to self node->info = ug_info_new(8, 2); node->info->at[0].key = (void*) UgetRelationInfo; node->info->at[1].key = (void*) UgetProgressInfo; } else { // this is a fake node. // node->group = 0; node->base = node_real->base; node->real = node_real; node->peer = node_real->fake; node_real->fake = node; node->info = node_real->info; ug_info_ref(node->info); } } void uget_node_final(UgetNode* node) { if (node->parent) uget_node_remove(node->parent, node); if (node->real) uget_node_remove_fake(node->real, node); uget_node_clear_fake(node); uget_node_clear_children(node); // ug_node_unlink((UgNode*)node); ug_info_unref(node->info); } void uget_node_clear_children (UgetNode* node) { UgetNode* next; UgetNode* children; for (children = node->children; children; children = next) { next = children->next; uget_node_free(children); } node->children = NULL; } void uget_node_clear_fake (UgetNode* node) { UgetNode* peer; UgetNode* fake; for (fake = node->fake; fake; fake = peer) { peer = fake->peer; fake->real = NULL; // speed up uget_node_free() uget_node_free(fake); } node->fake = NULL; // speed up uget_node_free() } void uget_node_move (UgetNode* node, UgetNode* sibling, UgetNode* child) { UgetNode* fake_sibling; UgetNode* fake_child; ug_node_remove ((UgNode*) node, (UgNode*) child); ug_node_insert ((UgNode*) node, (UgNode*) sibling, (UgNode*) child); fake_sibling = NULL; for (fake_child = child->fake; fake_child; fake_child = fake_child->peer) { node = fake_child->parent; if (node == NULL) continue; if (sibling) { for (fake_sibling = sibling->fake; fake_sibling; fake_sibling = fake_sibling->peer) { if (fake_sibling->parent == node) break; } if (fake_sibling == NULL) continue; } uget_node_move (node, fake_sibling, fake_child); } } void uget_node_insert (UgetNode* node, UgetNode* sibling, UgetNode* child) { UgetNodeFunc inserted; ug_node_insert ((UgNode*) node, (UgNode*) sibling, (UgNode*) child); child->control = node->control; // child->control = node->control->children; inserted = node->control->notifier->inserted; if (inserted) inserted (node, sibling, child); uget_node_call_fake_filter (node, sibling, child); } static void uget_node_unlink_children_real (UgetNode* node) { for (node = node->children; node; node = node->next) { uget_node_unlink_children_real (node); if (node->real) uget_node_remove_fake (node->real, node); } } static void uget_node_unlink_fake_parent (UgetNode* child) { UgetNode* parent; UgetNode* sibling; UgetNodeFunc removed; for (child = child->fake; child; child = child->peer) { uget_node_unlink_fake_parent (child); parent = child->parent; if (parent == NULL) continue; sibling = child->next; ug_node_remove ((UgNode*) parent, (UgNode*) child); // notify removed = parent->control->notifier->removed; if (removed) removed (parent, sibling, child); } } void uget_node_remove (UgetNode* node, UgetNode* child) { UgetNode* sibling; UgetNodeFunc removed; sibling = child->next; ug_node_remove ((UgNode*)node, (UgNode*)child); uget_node_unlink_fake_parent (child); uget_node_unlink_children_real (child); removed = node->control->notifier->removed; if (removed) removed (node, sibling, child); } void uget_node_append (UgetNode* node, UgetNode* child) { UgetNodeFunc inserted; ug_node_append ((UgNode*) node, (UgNode*) child); child->control = node->control; // child->control = node->control->children; inserted = node->control->notifier->inserted; if (inserted) inserted (node, NULL, child); uget_node_call_fake_filter (node, NULL, child); } void uget_node_prepend (UgetNode* node, UgetNode* child) { UgetNode* sibling; UgetNodeFunc inserted; sibling = node->children; ug_node_prepend ((UgNode*) node, (UgNode*) child); child->control = node->control; // child->control = node->control->children; inserted = node->control->notifier->inserted; if (inserted) inserted (node, sibling, child); uget_node_call_fake_filter (node, sibling, child); } // used by uget_node_sort() static void uget_node_qsort(UgetNode** array, int left, int right, UgCompareFunc compare) { UgetNode* temp; UgetNode* pivot = array[(left + right) / 2]; int i = left, j = right; /* partition */ while (i <= j) { while (compare(array[i], pivot) < 0) i++; while (compare(array[j], pivot) > 0) j--; if (i <= j) { temp = array[i]; array[i] = array[j]; array[j] = temp; i++; j--; } }; /* recursion */ if (left < j) uget_node_qsort(array, left, j, compare); if (i < right) uget_node_qsort(array, i, right, compare); } void uget_node_sort(UgetNode* node, UgCompareFunc compare, int reversed) { int index; UgetNode** array; UgetNode* cur; if (node->n_children == 0) return; array = (UgetNode**) ug_malloc(sizeof(UgetNode*) * node->n_children); for (index = 0, cur = node->children; cur; cur = cur->next, index++) array[index] = cur; uget_node_qsort(array, 0, node->n_children -1, compare); if (reversed) { for (index = node->n_children-1; index >=0; index--) { uget_node_remove(node, array[index]); uget_node_append(node, array[index]); } } else { for (index = 0; index < node->n_children; index++) { uget_node_remove(node, array[index]); uget_node_append(node, array[index]); } } ug_free(array); } /* void uget_node_sort (UgetNode* node, UgCompareFunc compare, int reversed) { UgetNode* beg; UgetNode* cur; UgetNode* unsorted; for (beg = node->children; beg; beg = unsorted->next) { unsorted = beg; if (reversed == FALSE) { for (cur = beg->next; cur; cur = cur->next) { if (compare (cur, unsorted) < 0) unsorted = cur; } } else { for (cur = beg->next; cur; cur = cur->next) { if (compare (unsorted, cur) < 0) unsorted = cur; } } if (unsorted != beg) uget_node_move (node, beg, unsorted); } } */ void uget_node_insert_sorted (UgetNode* node, UgetNode* child) { UgCompareFunc compare; UgetNode* cur; int reverse; compare = node->control->sort.compare; reverse = node->control->sort.reverse; if (compare == NULL) return; if (reverse == FALSE) { for (cur = node->children; cur; cur = cur->next) { if (compare (cur, child) > 0) { uget_node_insert (node, cur, child); return; } } } else { for (cur = node->children; cur; cur = cur->next) { if (compare (child, cur) > 0) { uget_node_insert (node, cur, child); return; } } } uget_node_insert (node, NULL, child); } void uget_node_reorder_by_real (UgetNode* node, UgetNode* real) { UgetNode* sibling; UgetNode* fake; sibling = node->children; if (real == NULL) real = node->real; if (real == NULL) return; for (real = real->children; real; real = real->next) { for (fake = real->fake; fake; fake = fake->peer) { if (fake->parent != node) continue; if (fake == sibling) { sibling = sibling->next; break; } ug_node_remove ((UgNode*) node, (UgNode*) fake); ug_node_insert ((UgNode*) node, (UgNode*) sibling, (UgNode*) fake); break; } } } void uget_node_reorder_by_fake (UgetNode* node, UgetNode* fake) { UgetNode* sibling; UgetNode* real; if (fake == NULL || fake->children == NULL) return; sibling = fake->children->real; for (fake = fake->children; fake; fake = fake->next) { real = fake->real; if (real == NULL || real->parent != node) continue; if (real == sibling) sibling = sibling->next; ug_node_remove ((UgNode*) node, (UgNode*) real); ug_node_insert ((UgNode*) node, (UgNode*) sibling, (UgNode*) real); } } void uget_node_remove_fake (UgetNode* node, UgetNode* fake) { UgetNode* curr; UgetNode* prev; for (prev = NULL, curr = node->fake; curr; curr = curr->peer) { if (curr == fake) { if (prev) prev->peer = curr->peer; else node->fake = curr->peer; curr->real = NULL; curr->peer = NULL; return; } prev = curr; } } void uget_node_make_fake (UgetNode* node) { UgetNode* child; // UgetNode* sibling; if (node->fake == NULL) return; for (child = node->children; child; child = child->next) { uget_node_call_fake_filter (node, NULL, child); uget_node_make_fake (child); } } // fake filter node from real. // If real node inserted a child node, all fake nodes call this to filter. static void uget_node_call_fake_filter (UgetNode* parent, UgetNode* sibling, UgetNode* child) { UgetNode* fake; UgetNodeFunc filter; for (fake = parent->fake; fake; fake = fake->peer) { filter = fake->control->filter; if (filter) filter (fake, sibling, child); } } // ---------------------------------------------------------------------------- // position UgetNode* uget_node_nth_fake (UgetNode* node, int nth) { UgetNode* fake; for (fake = node->fake; fake; fake = fake->peer, nth--) { if (nth == 0) return fake; } return NULL; } int uget_node_fake_position (UgetNode* node, UgetNode* fake) { int position = 0; for (node = node->fake; node; node = node->peer, position++) { if (node == fake) return position; } return -1; } // ---------------------------------------------------------------------------- // notify void uget_node_updated (UgetNode* node) { UgNotifyFunc updated; updated = node->control->notifier->updated; if (updated) updated (node); // update fake node for (node = node->fake; node; node = node->peer) uget_node_updated (node); } // ---------------------------------------------------------------------------- // JSON UgJsonError ug_json_parse_uget_node_children (UgJson* json, const char* name, const char* value, void* node, void* none) { UgetNode* temp; if (json->type != UG_JSON_OBJECT) { // if (json->type == UG_JSON_ARRAY) // ug_json_push (json, ug_json_parse_unknown, NULL, NULL); return UG_JSON_ERROR_TYPE_NOT_MATCH; } temp = uget_node_new (NULL); uget_node_append (node, temp); ug_json_push (json, ug_json_parse_entry, temp, (void*)UgetNodeEntry); return UG_JSON_ERROR_NONE; } void ug_json_write_uget_node_children (UgJson* json, const UgetNode* node) { for (node = node->children; node; node = node->next) { ug_json_write_object_head (json); ug_json_write_entry (json, (void*) node, UgetNodeEntry); ug_json_write_object_tail (json); } } // convert old format to new static UgJsonError ug_json_parse_name2data (UgJson* json, const char* name, const char* value, void* nodev, void* none) { UgetNode* node = nodev; union { UgetCommon* common; UgetFiles* files; } temp; if (json->type != UG_JSON_STRING) return UG_JSON_ERROR_TYPE_NOT_MATCH; // Now root node is category node if (node->parent == NULL || node->parent->parent == NULL) { // category or download node temp.common = ug_info_realloc(node->info, UgetCommonInfo); temp.common->name = ug_strdup(value); } else if (node->parent->parent->parent == NULL) { // file node temp.files = ug_info_realloc(node->parent->info, UgetFilesInfo); uget_files_realloc(temp.files, value); } return UG_JSON_ERROR_NONE; } // convert old format to new static UgJsonError ug_json_parse_state2group (UgJson* json, const char* name, const char* value, void* nodev, void* none) { UgetRelation* relation; UgetNode* node = nodev; int group; if (json->type != UG_JSON_NUMBER) return UG_JSON_ERROR_TYPE_NOT_MATCH; else { group = strtol(value, NULL, 10); if (group != 0) { relation = ug_info_realloc(node->info, UgetRelationInfo); relation->group = group; } } return UG_JSON_ERROR_NONE; } uget-2.2.3/uget/UgetPlugin.h0000664000175000017500000002352713602733704012623 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_PLUGIN_H #define UGET_PLUGIN_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetPlugin UgetPlugin; typedef struct UgetPluginInfo UgetPluginInfo; typedef enum { // input ---------------- UGET_PLUGIN_CTRL_START, UGET_PLUGIN_CTRL_STOP, UGET_PLUGIN_CTRL_SPEED, // int*, int[0] = download, int[1] = upload // state ---------------- UGET_PLUGIN_SET_STATE, // int*, TRUE or FALSE (unused) UGET_PLUGIN_GET_STATE, // int*, TRUE or FALSE } UgetPluginCtrlCode; // global typedef enum { UGET_PLUGIN_GLOBAL_INIT, // get/set, parameter = (intptr_t = FALSE or TRUE) UGET_PLUGIN_GLOBAL_SETTING, // get/set, parameter = (void* custom_struct) UGET_PLUGIN_GLOBAL_SPEED_LIMIT, // get/set, parameter = (int speed[2]) UGET_PLUGIN_GLOBAL_SPEED, // get, parameter = (int speed[2]) UGET_PLUGIN_GLOBAL_ERROR_CODE, // get, parameter = (int* error_code) UGET_PLUGIN_GLOBAL_ERROR_STRING, // get, parameter = (char** error_string) UGET_PLUGIN_GLOBAL_MATCH, // get, parameter = (char* url) UGET_PLUGIN_GLOBAL_DERIVED = 10000, // for derived plug-ins } UgetPluginGlobalOption; typedef enum { UGET_RESULT_OK = 0, UGET_RESULT_ERROR, UGET_RESULT_FAILED, UGET_RESULT_UNSUPPORT, } UgetResult; // accept/sync return TRUE or FALSE typedef int (*UgetPluginSyncFunc)(UgetPlugin* plugin, UgInfo* info); // start/stop...etc return TRUE or FALSE. typedef int (*UgetPluginCtrlFunc)(UgetPlugin* plugin, int, void* data); // global_set/global_get typedef UgetResult (*UgetPluginGlobalFunc)(int option, void* parameter); /* ---------------------------------------------------------------------------- UgetPluginInfo UgTypeInfo | `-- UgetPluginInfo */ struct UgetPluginInfo { UG_TYPE_INFO_MEMBERS; /* // ------ UgTypeInfo members ------ const char* name; uintptr_t size; UgInitFunc init; UgFinalFunc final; */ UgetPluginSyncFunc accept; // pass data to plug-in. UgetPluginSyncFunc sync; // call this to sync/exchange data. UgetPluginCtrlFunc ctrl; // ---------------------------- // Global data and functions // global data is used for matching UgetPlugin and UgInfo const char** hosts; const char** schemes; const char** file_exts; // global set/get function for plug-in special setting. UgetPluginGlobalFunc global_set; UgetPluginGlobalFunc global_get; }; UgetResult uget_plugin_global_set(const UgetPluginInfo* info, int option, void* parameter); UgetResult uget_plugin_global_get(const UgetPluginInfo* info, int option, void* parameter); // return matched count. // return 3 if URI can be matched hosts, schemes, and file_exts. int uget_plugin_match(const UgetPluginInfo* info, UgUri* uuri); /* ---------------------------------------------------------------------------- UgetPlugin: It is base class/struct that used by plug-ins. It derived from UgType. UgType | `-- UgetPlugin accept(info) accept(info) ,----------. -------------> ,-----------. -------------> ,-----------. | | | | | | | User App | | plug-in 1 | | plug-in 2 | | | | | | | `----------' <------------> `-----------' <------------> `-----------' sync(info) sync(info) // create and start plug-in plugin = uget_plugin_new(UgetPluginCurlInfo); uget_plugin_accept(plugin, info); if (uget_plugin_start(plugin) == FALSE) { uget_plugin_unref(plugin); return; } // Running loop sample 1: use uget_plugin_sync() while (uget_plugin_sync(plugin, info)) { // sleep(); // do something here } // Running loop sample 2: use uget_plugin_get_state() do { // sleep(); // do something here // If you don't want to exchange data (e.g. progress) with plug-in, // you do not need to call uget_plugin_sync() at last. uget_plugin_sync(plugin, info); } while (uget_plugin_get_state(plugin)); */ #define UGET_PLUGIN_MEMBERS \ const UgetPluginInfo* info; \ UgetEvent* events; \ UgMutex mutex; \ int ref_count struct UgetPlugin { UGET_PLUGIN_MEMBERS; /* // ------ UgType members ------ const UgetPluginInfo* info; // ------ UgetPlugin members ------ UgetEvent* events; UgMutex mutex; int ref_count; */ }; // UgetPlugin functions UgetPlugin* uget_plugin_new(const UgetPluginInfo* info); void uget_plugin_ref(UgetPlugin* plugin); void uget_plugin_unref(UgetPlugin* plugin); // return TRUE if UgInfo was accepted by plug-in. // return FALSE if UgInfo lacks necessary data. int uget_plugin_accept(UgetPlugin* plugin, UgInfo* info); // return TRUE if plug-in is running or some data need to exchange/sync. // return FALSE if plug-in was stopped and no data need to exchange/sync. int uget_plugin_sync(UgetPlugin* plugin, UgInfo* info); // return TRUE or FALSE. int uget_plugin_ctrl(UgetPlugin* plugin, int code, void* data); #define uget_plugin_start(plugin) \ uget_plugin_ctrl(plugin, UGET_PLUGIN_CTRL_START, NULL) #define uget_plugin_stop(plugin) \ uget_plugin_ctrl(plugin, UGET_PLUGIN_CTRL_STOP, NULL) #define uget_plugin_ctrl_speed(plugin, dl_ul_int_array) \ uget_plugin_ctrl(plugin, UGET_PLUGIN_CTRL_SPEED, dl_ul_int_array) // return > 0 if plug-in is running. int uget_plugin_get_state(UgetPlugin* plugin); void uget_plugin_post(UgetPlugin* plugin, UgetEvent* message); UgetEvent* uget_plugin_pop (UgetPlugin* plugin); #define uget_plugin_lock(plugin) ug_mutex_lock(&(plugin)->mutex) #define uget_plugin_unlock(plugin) ug_mutex_unlock(&(plugin)->mutex) #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct PluginInfoMethod { inline UgetResult globalSet(int option, void* parameter) { return uget_plugin_global_set((UgetPluginInfo*)this, option, parameter); } inline UgetResult globalGet(int option, void* parameter) { return uget_plugin_global_get((UgetPluginInfo*)this, option, parameter); } inline int match(UgUri* uuri) { return uget_plugin_match((UgetPluginInfo*)this, uuri); } }; // This one is for directly use only. You can NOT derived it. struct PluginInfo : PluginInfoMethod, UgetPluginInfo {}; // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct PluginMethod { inline void* operator new(size_t size, const UgetPluginInfo* pinfo) { return uget_plugin_new(pinfo); } inline void operator delete(void* p) { uget_plugin_unref((UgetPlugin*)p); } inline void ref(void) { uget_plugin_ref((UgetPlugin*)this); } inline void unref(void) { uget_plugin_unref((UgetPlugin*)this); } inline int accept(UgInfo* info) { return uget_plugin_accept((UgetPlugin*)this, info); } inline int sync(UgInfo* info) { return uget_plugin_sync((UgetPlugin*)this, info); } inline int ctrl(int code, void* data) { return uget_plugin_ctrl((UgetPlugin*)this, code, data); } inline int ctrlSpeed(int* DL_UL_array) { return uget_plugin_ctrl((UgetPlugin*)this, UGET_PLUGIN_CTRL_SPEED, DL_UL_array); } inline int ctrlSpeed(int dlspeed, int ulspeed) { int DL_UL_array[2] = {dlspeed, ulspeed}; return uget_plugin_ctrl((UgetPlugin*)this, UGET_PLUGIN_CTRL_SPEED, DL_UL_array); } inline int start(void) { return uget_plugin_start((UgetPlugin*)this); } inline int stop(void) { return uget_plugin_stop((UgetPlugin*)this); } inline int getState(void) { return uget_plugin_get_state((UgetPlugin*)this); } inline void post(UgetEvent* message) { uget_plugin_post((UgetPlugin*)this, message); } inline UgetEvent* pop(void) { return uget_plugin_pop((UgetPlugin*)this); } }; // This one is for directly use only. You can NOT derived it. struct Plugin : PluginMethod, UgetPlugin {}; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_PLUGIN_H uget-2.2.3/uget/UgetPluginMega.c0000775000175000017500000005307413602733704013413 00000000000000/* * * Copyright (C) 2016-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef HAVE_CONFIG_H #include #endif // use OpenSSL by default in Windows and Android #if defined _WIN32 || defined _WIN64 || defined __ANDROID__ # if !(defined USE_OPENSSL || defined USE_GNUTLS) # define USE_OPENSSL # endif #endif // OpenSSL #ifdef USE_OPENSSL //#include #include // OPENSSL_VERSION_NUMBER #include // CRYPTO_ctr128_encrypt #include // AES_BLOCK_SIZE // GnuTLS #elif defined USE_GNUTLS #include // mega plug-in must decrypt data #else #error mega plug-in need OpenSSL or GnuTLS to compile. #endif #include #include #include #include #include #include #include #if defined _WIN32 || defined _WIN64 #include #define ug_sleep Sleep #else #include // usleep() #define ug_sleep(millisecond) usleep(millisecond * 1000) #endif // _WIN32 || _WIN64 #ifdef HAVE_GLIB #include #undef printf #else #define N_(x) x #define _(x) x #endif enum { MEGA_INVALID, MEGA_FOLDER, MEGA_FILE, }; // ---------------------------------------------------------------------------- // MEGA site static int mega_parse_url(UgetPluginMega* plugin, const char* url); static int mega_request_info(UgetPluginMega* plugin, const char* id); static int mega_decrypt_file(UgetPluginMega* plugin, int preset_progress); // ---------------------------------------------------------------------------- // UgetPluginInfo (derived from UgTypeInfo) static void plugin_init (UgetPluginMega* plugin); static void plugin_final(UgetPluginMega* plugin); static int plugin_accept(UgetPluginMega* plugin, UgInfo* node_info); static int plugin_sync (UgetPluginMega* plugin, UgInfo* node_info); static int plugin_ctrl (UgetPluginMega* plugin, int code, void* data); static const char* schemes[] = {"https", NULL}; static const char* hosts[] = {"mega.co.nz", "mega.nz", NULL}; static const UgetPluginInfo UgetPluginMegaInfoStatic = { "mega", sizeof(UgetPluginMega), (UgInitFunc) plugin_init, (UgFinalFunc) plugin_final, (UgetPluginSyncFunc) plugin_accept, (UgetPluginSyncFunc) plugin_sync, (UgetPluginCtrlFunc) plugin_ctrl, hosts, schemes, NULL, (UgetPluginGlobalFunc) uget_plugin_agent_global_set, (UgetPluginGlobalFunc) uget_plugin_agent_global_get }; // extern const UgetPluginInfo* UgetPluginMegaInfo = &UgetPluginMegaInfoStatic; // ---------------------------------------------------------------------------- // control functions static void plugin_init(UgetPluginMega* plugin) { // initialize UgetPluginAgent uget_plugin_agent_init((UgetPluginAgent*)plugin); // initialize UgetPluginMega ug_json_init(&plugin->json); ug_value_init_object(&plugin->value, 5); } static void plugin_final(UgetPluginMega* plugin) { // finalize UgetPluginMega ug_free(plugin->id); ug_free(plugin->key); ug_free(plugin->iv); ug_free(plugin->url); ug_free(plugin->file); ug_json_final(&plugin->json); ug_value_clear(&plugin->value); // finalize UgetPluginAgent uget_plugin_agent_final((UgetPluginAgent*)plugin); } // ---------------------------------------------------------------------------- static UgThreadResult plugin_thread(UgetPluginMega* plugin); static int plugin_accept(UgetPluginMega* plugin, UgInfo* node_info) { UgetCommon* common; common = ug_info_get(node_info, UgetCommonInfo); if (common == NULL || common->uri == NULL) return FALSE; // parse MEGA URL if (mega_parse_url(plugin, common->uri) != MEGA_FILE) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_CUSTOM, _("Can't handle this MEGA URL."))); return FALSE; } plugin->target_info = ug_info_new(8, 0); ug_info_assign(plugin->target_info, node_info, NULL); plugin->target_files = ug_info_realloc(plugin->target_info, UgetFilesInfo); plugin->target_proxy = ug_info_get(plugin->target_info, UgetProxyInfo); plugin->target_common = ug_info_get(plugin->target_info, UgetCommonInfo); plugin->target_progress = ug_info_realloc(plugin->target_info, UgetProgressInfo); return TRUE; } int plugin_ctrl(UgetPluginMega* plugin, int code, void* data) { switch (code) { case UGET_PLUGIN_CTRL_START: if (plugin->target_info) { return uget_plugin_agent_start((UgetPluginAgent*)plugin, (UgThreadFunc)plugin_thread); } break; default: // call parent's plugin_ctrl() return uget_plugin_agent_ctrl((UgetPluginAgent*)plugin, code, data); } return FALSE; } static int is_downloaded(UgetPluginMega* plugin, UgetCommon* target_common); static UgThreadResult plugin_thread(UgetPluginMega* plugin) { UgetPluginInfo* plugin_info; UgetCommon* target_common; UgetEvent* msg_next; UgetEvent* msg; // get MEGA download URL & attributes if (mega_request_info(plugin, plugin->id) == FALSE) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_CUSTOM, _("Can't get download URL."))); goto exit; } target_common = plugin->target_common; // set MEGA download URL ug_free(target_common->uri); target_common->uri = plugin->url; plugin->url = NULL; // set MEGA output file name if (target_common->file == NULL) plugin->named = TRUE; else { ug_free(plugin->file); plugin->file = ug_strdup(target_common->file); } ug_free(target_common->file); target_common->file = ug_strdup_printf("%s.enc", plugin->file); // check existed file if (is_downloaded(plugin, target_common) == TRUE) { mega_decrypt_file(plugin, TRUE); goto exit; } uget_plugin_agent_global_get(UGET_PLUGIN_AGENT_GLOBAL_PLUGIN, &plugin_info); // create target_plugin to download plugin->target_plugin = uget_plugin_new(plugin_info); uget_plugin_accept(plugin->target_plugin, plugin->target_info); uget_plugin_ctrl_speed(plugin->target_plugin, plugin->limit); if (uget_plugin_start(plugin->target_plugin) == FALSE) { msg = uget_event_new_error(UGET_EVENT_ERROR_THREAD_CREATE_FAILED, NULL); uget_plugin_post((UgetPlugin*) plugin, msg); goto exit; } do { // sleep 0.5 second ug_sleep(500); // stop target_plugin when user paused this plug-in. if (plugin->paused) { uget_plugin_stop(plugin->target_plugin); break; } if (plugin->limit_changed) { plugin->limit_changed = FALSE; uget_plugin_ctrl_speed(plugin->target_plugin, plugin->limit); } // move event from target_plugin to plug-in msg = uget_plugin_pop((UgetPlugin*) plugin->target_plugin); for (; msg; msg = msg_next) { msg_next = msg->next; msg->prev = NULL; msg->next = NULL; // handle or discard some message switch (msg->type) { case UGET_EVENT_ERROR: // stop downloading if error occurred plugin->paused = TRUE; break; case UGET_EVENT_NORMAL: // ignore "not resumable" event if (msg->value.code == UGET_EVENT_NORMAL_NOT_RESUMABLE) uget_event_free(msg); continue; case UGET_EVENT_STOP: case UGET_EVENT_COMPLETED: // discard message uget_event_free(msg); continue; } // post event to plug-in uget_plugin_post((UgetPlugin*) plugin, msg); } // sync data in plugin_sync() plugin->synced = FALSE; uget_plugin_lock(plugin); uget_plugin_sync(plugin->target_plugin, plugin->target_info); uget_plugin_unlock(plugin); } while (uget_plugin_get_state(plugin->target_plugin)); // free target_plugin uget_plugin_unref(plugin->target_plugin); plugin->target_plugin = NULL; // if downloading completed, decrypt file if (plugin->paused == FALSE) mega_decrypt_file(plugin, FALSE); exit: plugin->synced = FALSE; plugin->stopped = TRUE; uget_plugin_post((UgetPlugin*) plugin, uget_event_new(UGET_EVENT_STOP)); uget_plugin_unref((UgetPlugin*) plugin); return UG_THREAD_RESULT; } static int plugin_sync(UgetPluginMega* plugin, UgInfo* node_info) { UgetFiles* files; UgetCommon* common; UgetProgress* progress; if (plugin->stopped) { if (plugin->synced) return FALSE; plugin->synced = TRUE; } // avoid crash if plug-in failed to start. if (plugin->target_common == NULL) return FALSE; // sync common data (include speed limit) between foreign info and target_info common = ug_info_realloc(node_info, UgetCommonInfo); uget_plugin_agent_sync_common((UgetPluginAgent*) plugin, common, plugin->target_common); // sync progress data from target_info to foreign info progress = ug_info_realloc(node_info, UgetProgressInfo); uget_plugin_agent_sync_progress((UgetPluginAgent*) plugin, progress, plugin->target_progress); if (plugin->decrypting == FALSE) progress->percent = progress->percent * 96 / 100; // update UgetFiles files = ug_info_realloc(node_info, UgetFilesInfo); uget_plugin_lock(plugin); uget_files_sync(files, plugin->target_files); uget_plugin_unlock(plugin); // plug-in has got file name from server. if (plugin->named) { plugin->named = FALSE; ug_free(common->name); common->name = ug_strdup(plugin->file); ug_free(common->file); common->file = ug_strdup(plugin->file); } // if plug-in was stopped, return FALSE. return TRUE; } static int is_downloaded(UgetPluginMega* plugin, UgetCommon* target_common) { char* path; char* temp; // check existed file if (target_common->folder == NULL) path = ug_strdup(target_common->file); else path = ug_build_filename(target_common->folder, target_common->file, NULL); if (ug_file_is_exist(path)) { temp = path; path = ug_strdup_printf("%s.aria2", path); ug_free(temp); if (ug_file_is_exist(path) == FALSE) { ug_free(path); return TRUE; } ug_free(path); } return FALSE; } // ---------------------------------------------------------------------------- // MEGA site static void xor_n(uint8_t* dest, uint8_t* src1, uint8_t* src2, int length) { for (; length > 0; length--) *dest++ = *src1++ ^ *src2++; } static int mega_parse_url(UgetPluginMega* plugin, const char* url) { uint8_t* binary_key; int length; int result; plugin->id = strchr(url, '!'); if (plugin->id == NULL) return MEGA_INVALID; else { // folder or file if (plugin->id != url && *(plugin->id-1) == 'F') result = MEGA_FOLDER; else result = MEGA_FILE; plugin->id++; } plugin->key = strchr(plugin->id, '!'); if (plugin->key == NULL) return MEGA_INVALID; else { plugin->key++; if (plugin->key[0] == 0) return MEGA_INVALID; } // copy string from URL plugin->id = ug_strndup(plugin->id, plugin->key - plugin->id - 1); plugin->key = ug_strdup(plugin->key); ug_str_replace_chars(plugin->key, "-", '+'); ug_str_replace_chars(plugin->key, "_", '/'); ug_str_remove_chars(plugin->key, plugin->key, ","); ug_str_remove_chars(plugin->key, plugin->key, "\n"); binary_key = ug_base64_decode(plugin->key, strlen(plugin->key), &length); plugin->key = ug_realloc(plugin->key, 16); if (length == 16) memcpy(plugin->key, binary_key, 16); else if (length == 32) xor_n((uint8_t*)plugin->key, binary_key, binary_key+16, 16); else { // "Invalid key, please verify your MEGA URL." ug_free(binary_key); return MEGA_INVALID; } plugin->iv = ug_malloc(16); memcpy(plugin->iv, binary_key+16, 8); memset(plugin->iv+8, 0, 8); return result; } // ------------------------------------ // MEGA attributes // MEGA{ // "c":"Yy6d4TsrLpaGN0NwGKf_gwRqgYlZ", // "n":"filename.ext" // } // n is filename static int mega_parse_attributes(UgetPluginMega* plugin, char* attributes) { UgValue* member; char* iv; char* attr; char* buffer; int length; ug_str_replace_chars(attributes, "-", '+'); ug_str_replace_chars(attributes, "_", '/'); ug_str_remove_chars(attributes, attributes, ","); ug_str_remove_chars(attributes, attributes, "\n"); buffer = (char*)ug_base64_decode(attributes, strlen(attributes), &length); iv = ug_malloc0(16); attr = NULL; #ifdef USE_OPENSSL { AES_KEY key; attr = ug_malloc(length); AES_set_decrypt_key((uint8_t*)plugin->key, 128, &key); // AES_cbc_decrypt(temp, attr, length, &key, iv, AES_DECRYPT); CRYPTO_cbc128_decrypt((uint8_t*)buffer, (uint8_t*)attr, length, &key, (uint8_t*)iv, (block128_f)AES_decrypt); } #endif // USE_OPENSSL #ifdef USE_GNUTLS { gcry_cipher_hd_t gchd; gcry_cipher_open(&gchd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0); gcry_cipher_setkey(gchd, plugin->key, 16); gcry_cipher_setiv(gchd, iv, 16); gcry_cipher_decrypt(gchd, buffer, length, NULL, 0); gcry_cipher_close(gchd); attr = buffer; buffer = NULL; } #endif // USE_GNUTLS ug_free(iv); ug_free(buffer); #ifndef NDEBUG printf("%.*s\n", length, attr); #endif // search JSON object buffer = strchr(attr, '{'); if (buffer == NULL) { ug_free(attr); return FALSE; } length -= buffer - attr; // parse JSON object ug_value_clear(&plugin->value); ug_json_begin_parse(&plugin->json); ug_json_push(&plugin->json, ug_json_parse_value, &plugin->value, NULL); ug_json_parse(&plugin->json, buffer, length); ug_json_end_parse(&plugin->json); ug_free(attr); if (plugin->value.type != UG_VALUE_OBJECT) return FALSE; ug_value_sort(&plugin->value, ug_value_compare_name); // get file name member = ug_value_find_name(&plugin->value, "n"); if (member == NULL || member->type != UG_VALUE_STRING) return FALSE; plugin->file = ug_strdup(member->c.string); return TRUE; } // ------------------------------------ // MEGA file info result // [-9] = doesn't exist? // // [ // { // "s":61297757, // "at":"m0n8BXaUMWAU0E62cXP6W7dzE3VZQL-luEZJmnRnbJQPR0RoI9ln720tB3xU4fQPpUzdtm2L6mFUFDVJSljHpum8LsAMZnKTo3ANWEcNIOI9mTAzXTp6_Hg7kyqSIkkV", // "msd":1, // "tl":0, // "g":"http://gfs270n155.userstorage.mega.co.nz/dl/44BKOuGpTz7mogJ8dP7I5tFynclZmBl6aJCoF6E3bqPvmy5SjM0u4qxxzxlvEf0s-Y7Yj3IEKzA8zsrHweCDGlyPvdX6DJc4vX6U9-M4xweMdUM-aiVtqsp8pr3mGw" // } // ] // at is attributes // g is download URL // s is size static size_t curl_output_mega_result(char* text, size_t size, size_t nmemb, UgetPluginMega* plugin) { size *= nmemb; ug_json_parse(&plugin->json, text, size); #ifndef NDEBUG printf("%.*s\n", size, text); #endif return size; } static int mega_request_info(UgetPluginMega* plugin, const char* id) { CURL* curl; CURLcode code; UgValue* member; char* string; ug_json_begin_parse(&plugin->json); ug_json_push(&plugin->json, ug_json_parse_value, &plugin->value, NULL); ug_json_push(&plugin->json, ug_json_parse_array, NULL, NULL); // setup option string = ug_strdup_printf("[{\"a\":\"g\",\"g\":1,\"p\":\"%s\"}]", id); curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, "https://eu.api.mega.co.nz/cs"); curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, string); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(string)); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_output_mega_result); curl_easy_setopt(curl, CURLOPT_WRITEDATA, plugin); ug_curl_set_proxy(curl, plugin->target_proxy); code = curl_easy_perform(curl); ug_free(string); if (code != CURLE_OK) return FALSE; if (ug_json_end_parse(&plugin->json) != UG_JSON_ERROR_NONE) return FALSE; if (plugin->value.type != UG_VALUE_OBJECT) return FALSE; ug_value_sort(&plugin->value, ug_value_compare_name); // get download URL member = ug_value_find_name(&plugin->value, "g"); if (member == NULL || member->type != UG_VALUE_STRING) return FALSE; plugin->url = ug_strdup(member->c.string); // get attributes member = ug_value_find_name(&plugin->value, "at"); if (member == NULL || member->type != UG_VALUE_STRING) return FALSE; // mega_parse_attributes() will call ug_value_clear(&plugin->value); mega_parse_attributes(plugin, member->c.string); return TRUE; } int mega_decrypt_file(UgetPluginMega* plugin, int preset_progress) { UgetFile* file; UgetCommon* target_common; char *path_in, *path_out; FILE *file_in, *file_out; target_common = plugin->target_common; // decrypt input/output file --- if (target_common->folder == NULL) { path_out = ug_strdup(plugin->file); path_in = ug_strdup(target_common->file); } else { path_out = ug_build_filename(target_common->folder, plugin->file, NULL); path_in = ug_build_filename(target_common->folder, target_common->file, NULL); } // decrypt output file --- file_out = ug_fopen(path_out, "wb"); if (file_out == NULL) { ug_free(path_out); ug_free(path_in); return FALSE; } // decrypt input file --- file_in = ug_fopen(path_in, "rb"); if (file_in == NULL) { ug_free(path_out); ug_free(path_in); fclose(file_out); return FALSE; } // preset progress before decrypting if (preset_progress == TRUE) { fseek(file_in, 0L, SEEK_END); plugin->target_progress->percent = 96; plugin->target_progress->complete = ug_ftell(file_in); plugin->target_progress->total = plugin->target_progress->complete; fseek(file_in, 0L, SEEK_SET); // rewind(file_in); } plugin->synced = FALSE; plugin->decrypting = TRUE; uget_plugin_post((UgetPlugin*) plugin, uget_event_new_normal(0, _("decrypting file..."))); #ifdef USE_OPENSSL { AES_KEY aeskey; int length; unsigned int num; unsigned char* data_in; unsigned char* data_out; unsigned char* ecount_buf; data_in = ug_malloc(AES_BLOCK_SIZE * 3); data_out = data_in + AES_BLOCK_SIZE; ecount_buf = data_out + AES_BLOCK_SIZE; // set to zeros before the first call to ctr128_encrypt memset(ecount_buf, 0, AES_BLOCK_SIZE); num = 0; // CTR mode doesn't need separate encrypt and decrypt method. AES_set_encrypt_key((uint8_t*)plugin->key, 128, &aeskey); while (1) { length = fread(data_in, 1, AES_BLOCK_SIZE, file_in); #if OPENSSL_VERSION_NUMBER >= 0x10100000L CRYPTO_ctr128_encrypt(data_in, data_out, length, &aeskey, (uint8_t*)plugin->iv, ecount_buf, &num, (block128_f)AES_encrypt); #else AES_ctr128_encrypt(data_in, data_out, length, &aeskey, (uint8_t*)plugin->iv, ecount_buf, &num); #endif fwrite(data_out, 1, length, file_out); // decrypting progress plugin->target_progress->complete = ug_ftell(file_out); plugin->target_progress->percent = 96 + plugin->target_progress->complete * 4 / plugin->target_progress->total; plugin->synced = FALSE; // check EOF if (length < AES_BLOCK_SIZE) break; } ug_free(data_in); } #endif // USE_OPENSSL #ifdef USE_GNUTLS { char* buffer; int length; gcry_cipher_hd_t gchd; // CTR mode doesn't need separate encrypt and decrypt method. gcry_cipher_open(&gchd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CTR, 0); gcry_cipher_setkey(gchd, plugin->key, 16); gcry_cipher_setiv(gchd, plugin->iv, 16); gcry_cipher_setctr(gchd, plugin->iv, 16); // counter vector buffer = ug_malloc(16); while (1) { length = fread(buffer, 1, 16, file_in); gcry_cipher_encrypt(gchd, buffer, length, NULL, 0); fwrite(buffer, 1, length, file_out); // decrypting progress plugin->target_progress->complete = ug_ftell(file_out); plugin->target_progress->percent = 96 + plugin->target_progress->complete * 4 / plugin->target_progress->total; plugin->synced = FALSE; // check EOF if (length < 16) break; } ug_free(buffer); gcry_cipher_close(gchd); } #endif // USE_GNUTLS // decryption completed fclose(file_out); fclose(file_in); ug_remove(path_in); // update UgetFiles uget_plugin_lock(plugin); file = uget_files_realloc(plugin->target_files, path_in); file->state |= UGET_FILE_STATE_DELETED; file = uget_files_replace(plugin->target_files, path_out, UGET_FILE_REGULAR, UGET_FILE_STATE_COMPLETED); uget_plugin_unlock(plugin); // free path and update progress ug_free(path_in); ug_free(path_out); plugin->target_progress->percent = 100; // post message uget_plugin_post((UgetPlugin*) plugin, uget_event_new_normal(0, _("decryption completed"))); uget_plugin_post((UgetPlugin*) plugin, uget_event_new(UGET_EVENT_COMPLETED)); return TRUE; } uget-2.2.3/uget/UgetA2cf.h0000664000175000017500000000645113602733704012135 00000000000000/* * * Copyright (C) 2011-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ // Aria2 Control File for uGet #ifndef UGET_A2CF_H #define UGET_A2CF_H #include #include #ifdef __cplusplus extern "C" { #endif // A2cf = Aria2 Control File typedef struct UgetA2cf UgetA2cf; typedef struct UgetA2cfPiece UgetA2cfPiece; struct UgetA2cfPiece { UG_LINK_MEMBERS (UgetA2cfPiece, UgetA2cfPiece, self); // UgetA2cfPiece* self; // UgetA2cfPiece* next; // UgetA2cfPiece* prev; uint32_t index; uint32_t length; uint32_t bitfield_len; uint8_t bitfield[1]; }; struct UgetA2cf { uint16_t ver; uint32_t ext; uint32_t info_hash_len; uint8_t* info_hash; uint32_t piece_len; uint64_t total_len; uint64_t upload_len; uint32_t bitfield_len; uint8_t* bitfield; // aria2 control file has this field. // uint32_t n_pieces; // piece struct { UgList list; uint32_t index_end; } piece; }; void uget_a2cf_init (UgetA2cf* a2cf, uint64_t total_size); void uget_a2cf_clear (UgetA2cf* a2cf); // return TRUE if successful. int uget_a2cf_load (UgetA2cf* a2cf, const char* filename); int uget_a2cf_save (UgetA2cf* a2cf, const char* filename); // beg [in, out]: pass search position and return new begin position // end [out] : return end position int uget_a2cf_lack (UgetA2cf* a2cf, uint64_t* beg, uint64_t* end); uint64_t uget_a2cf_fill (UgetA2cf* a2cf, uint64_t beg, uint64_t end); uint64_t uget_a2cf_completed (UgetA2cf* a2cf); void uget_a2cf_insert (UgetA2cf* a2cf, UgetA2cfPiece* piece); UgetA2cfPiece* uget_a2cf_find (UgetA2cf* a2cf, uint32_t piece_index); UgetA2cfPiece* uget_a2cf_realloc (UgetA2cf* a2cf, uint32_t piece_index); #ifdef __cplusplus } #endif // __cplusplus #endif // End of UGET_A2CF_H uget-2.2.3/uget/UgetNode-filter.c0000664000175000017500000001574413602733704013532 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #define N_SPLIT_GROUPS 4 static int split_groups[N_SPLIT_GROUPS] = { UGET_GROUP_ACTIVE, UGET_GROUP_QUEUING, UGET_GROUP_FINISHED, UGET_GROUP_RECYCLED, }; // ---------------------------------------------------------------------------- // callback functions for UgetNode.control.filter // sibling_real, child_real void uget_node_filter_split (UgetNode* node, UgetNode* sibling, UgetNode* child_real) { UgetRelation* relation; UgetNode* child; int group; if (node->parent == NULL) { // node is root. child_real is category for (group=0; group < N_SPLIT_GROUPS; group++) { child = uget_node_new (child_real); uget_node_prepend (node, child); } } else if (node->parent->parent == NULL) { // node is category. child_real is download child = child_real->base; relation = ug_info_realloc(child->info, UgetRelationInfo); group = uget_node_get_group(node); if ((relation->group & UGET_GROUP_MAJOR) == 0) relation->group |= UGET_GROUP_QUEUING; if (group & relation->group) { // insert sorted if (node->control->sort.compare) { uget_node_insert_sorted (node, uget_node_new (child_real)); return; } // original order if (sibling) { for (sibling = sibling->fake; sibling; sibling = sibling->peer) { if (sibling->parent == node) break; } } uget_node_insert (node, sibling, uget_node_new (child_real)); } } } void uget_node_filter_sorted (UgetNode* node, UgetNode* sibling, UgetNode* child) { child = uget_node_new (child); if (node->parent == NULL) { // node is root. uget_node_append (node, child); } else if (node->parent->parent == NULL) { // node is category. // insert sorted if (node->control->sort.compare) { uget_node_insert_sorted (node, child); return; } // original order if (sibling) { for (sibling = sibling->fake; sibling; sibling = sibling->peer) { if (sibling->parent == node) break; } } uget_node_insert (node, sibling, child); } } // sibling_real, child_real void uget_node_filter_mix (UgetNode* node, UgetNode* sibling, UgetNode* child) { UgetNode* fake; UgetRelation* relation_child; UgetRelation* relation_sibling; child = uget_node_new (child); if (node->parent == NULL) { // node is root. uget_node_append (node, child); } else if (node->parent->parent == NULL) { // node is category. // insert sorted node = node->parent->children; if (node->control->sort.compare) { // add all download to first category uget_node_insert_sorted (node, child); return; } // reorder by group relation_child = ug_info_realloc(child->info, UgetRelationInfo); if (sibling) { relation_sibling = ug_info_realloc(sibling->info, UgetRelationInfo); if ((relation_sibling->group & UGET_GROUP_MAJOR) != (relation_child->group & UGET_GROUP_MAJOR)) { sibling = NULL; } } // get inserting position by group if (node->fake && sibling == NULL) { switch (relation_child->group & UGET_GROUP_MAJOR) { case UGET_GROUP_ACTIVE: fake = uget_node_get_split(node, UGET_GROUP_QUEUING); if (fake == NULL || fake->children == NULL) fake = uget_node_get_split(node, UGET_GROUP_FINISHED); if (fake == NULL || fake->children == NULL) fake = uget_node_get_split(node, UGET_GROUP_RECYCLED); break; case UGET_GROUP_QUEUING: default: fake = uget_node_get_split(node, UGET_GROUP_FINISHED); if (fake == NULL || fake->children == NULL) fake = uget_node_get_split(node, UGET_GROUP_RECYCLED); break; case UGET_GROUP_FINISHED: fake = uget_node_get_split(node, UGET_GROUP_RECYCLED); break; case UGET_GROUP_RECYCLED: fake = NULL; break; } // insert into specified position by group if (fake && fake->children) { uget_node_insert (node, fake->children->real, child); return; } } // original order if (sibling) { for (sibling = sibling->fake; sibling; sibling = sibling->peer) { if (sibling->parent == node) break; } } // insert childNode to first (mixed) category uget_node_insert (node, sibling, child); } } void uget_node_filter_mix_split (UgetNode* node, UgetNode* sibling, UgetNode* child_real) { UgetNode* real; // if REAL category node is not first child, this function do nothing. real = node->real; if (real->parent == NULL && real->children != child_real) return; uget_node_filter_split (node, sibling, child_real); } // ---------------------------------------------------------------------------- // helper functions for uget_node_filter_split(), uget_node_filter_mix_split() UgetNode* uget_node_get_split(UgetNode* node, int group) { UgetNodeFunc filter; int nth; for (nth = 0, node = node->fake; node; node = node->peer) { filter = node->control->filter; if (filter == uget_node_filter_split || filter == uget_node_filter_mix_split) { if (split_groups[nth] & group) return node; nth++; // must place here } } return NULL; } int uget_node_get_group(UgetNode* node) { UgetNodeFunc filter; UgetNode* fake; int nth; if (node->real == NULL) return UGET_GROUP_NULL; for (nth = 0, fake = node->real->fake; fake; fake = fake->peer) { filter = fake->control->filter; if (filter == uget_node_filter_split || filter == uget_node_filter_mix_split) { if (fake == node) return split_groups[nth]; nth++; // must place here } } return UGET_GROUP_NULL; } uget-2.2.3/uget/UgetPluginAgent.c0000664000175000017500000002003113602733704013560 00000000000000/* * * Copyright (C) 2016-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #if defined _WIN32 || defined _WIN64 #include #endif // _WIN32 || _WIN64 // ---------------------------------------------------------------------------- // global data static struct { const UgetPluginInfo* default_plugin; int ref_count; } global = {NULL, 0}; // ---------------------------------------------------------------------------- // global functions UgetResult uget_plugin_agent_global_init(void) { if (global.default_plugin == NULL) { #if defined _WIN32 || defined _WIN64 WSADATA WSAData; WSAStartup(MAKEWORD(2, 2), &WSAData); #endif // _WIN32 || _WIN64 if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { #if defined _WIN32 || defined _WIN64 WSACleanup(); #endif return UGET_RESULT_ERROR; } global.default_plugin = UgetPluginCurlInfo; } global.ref_count++; return UGET_RESULT_OK; } void uget_plugin_agent_global_ref(void) { global.ref_count++; } void uget_plugin_agent_global_unref(void) { if (global.default_plugin == NULL) return; global.ref_count--; if (global.ref_count == 0) { global.default_plugin = NULL; curl_global_cleanup(); #if defined _WIN32 || defined _WIN64 WSACleanup(); #endif } } UgetResult uget_plugin_agent_global_set(int option, void* parameter) { switch (option) { case UGET_PLUGIN_GLOBAL_INIT: // do global initialize/finalize here if (parameter) return uget_plugin_agent_global_init(); else uget_plugin_agent_global_unref(); break; case UGET_PLUGIN_AGENT_GLOBAL_PLUGIN: global.default_plugin = parameter; break; default: return UGET_RESULT_UNSUPPORT; } return UGET_RESULT_OK; } UgetResult uget_plugin_agent_global_get(int option, void* parameter) { switch (option) { case UGET_PLUGIN_GLOBAL_INIT: if (parameter) *(int*)parameter = global.ref_count; break; case UGET_PLUGIN_AGENT_GLOBAL_PLUGIN: *(void**)parameter = (void*)global.default_plugin; break; default: return UGET_RESULT_UNSUPPORT; } return UGET_RESULT_OK; } // ---------------------------------------------------------------------------- // instance functions void uget_plugin_agent_init(UgetPluginAgent* plugin) { if (global.ref_count == 0) uget_plugin_agent_global_init(); else uget_plugin_agent_global_ref(); } void uget_plugin_agent_final(UgetPluginAgent* plugin) { // extent data and plug-in if (plugin->target_info) ug_info_unref(plugin->target_info); if (plugin->target_plugin) uget_plugin_unref(plugin->target_plugin); uget_plugin_agent_global_unref(); } int uget_plugin_agent_ctrl(UgetPluginAgent* plugin, int code, void* data) { switch (code) { case UGET_PLUGIN_CTRL_START: return FALSE; case UGET_PLUGIN_CTRL_STOP: plugin->paused = TRUE; return TRUE; case UGET_PLUGIN_CTRL_SPEED: // speed control return uget_plugin_agent_ctrl_speed(plugin, data); // state ---------------- case UGET_PLUGIN_GET_STATE: *(int*)data = (plugin->stopped) ? FALSE : TRUE; return TRUE; default: break; } return FALSE; } int uget_plugin_agent_ctrl_speed(UgetPluginAgent* plugin, int* speed) { UgetCommon* common; int value; // notify plug-in that speed limit has been changed if (plugin->limit[0] != speed[0] || plugin->limit[1] != speed[1]) plugin->limit_changed = TRUE; // decide speed limit by user specified data. if (plugin->target_info) common = ug_info_get(plugin->target_info, UgetCommonInfo); else common = NULL; if (common == NULL) { plugin->limit[0] = speed[0]; plugin->limit[1] = speed[1]; } else { // download value = speed[0]; if (common->max_download_speed) { if (value > common->max_download_speed || value == 0) { value = common->max_download_speed; plugin->limit_changed = TRUE; } } plugin->limit[0] = value; // upload value = speed[1]; if (common->max_upload_speed) { if (value > common->max_upload_speed || value == 0) { value = common->max_upload_speed; plugin->limit_changed = TRUE; } } plugin->limit[1] = value; } return plugin->limit_changed; } // ---------------------------------------------------------------------------- // sync functions void uget_plugin_agent_sync_common(UgetPluginAgent* plugin, UgetCommon* common, UgetCommon* target) { if (target == NULL) target = ug_info_realloc(plugin->target_info, UgetCommonInfo); // sync speed limit from common to target if (target->max_upload_speed != common->max_upload_speed || target->max_download_speed != common->max_download_speed) { target->max_upload_speed = common->max_upload_speed; target->max_download_speed = common->max_download_speed; plugin->limit[1] = common->max_upload_speed; plugin->limit[0] = common->max_download_speed; uget_plugin_agent_ctrl_speed(plugin, plugin->limit); } target->max_connections = common->max_connections; target->retry_limit = common->retry_limit; common->retry_count = target->retry_count; } void uget_plugin_agent_sync_progress(UgetPluginAgent* plugin, UgetProgress* progress, UgetProgress* target) { if (target == NULL) target = ug_info_realloc(plugin->target_info, UgetProgressInfo); // sync progress from target to progress progress->complete = target->complete; progress->total = target->total; progress->download_speed = target->download_speed; progress->upload_speed = target->upload_speed; progress->uploaded = target->uploaded; progress->elapsed = target->elapsed; progress->percent = target->percent; progress->left = target->left; } // ---------------------------------------------------------------------------- // thread functions int uget_plugin_agent_start(UgetPluginAgent* plugin, UgThreadFunc thread_func) { UgThread thread; int ok; // try to start thread plugin->paused = FALSE; plugin->stopped = FALSE; uget_plugin_ref((UgetPlugin*) plugin); ok = ug_thread_create(&thread, (UgThreadFunc) thread_func, plugin); if (ok == UG_THREAD_OK) ug_thread_unjoin(&thread); else { // failed to start thread ----------------- plugin->paused = TRUE; plugin->stopped = TRUE; // post error message and decreases the reference count uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_THREAD_CREATE_FAILED, NULL)); uget_plugin_unref((UgetPlugin*) plugin); return FALSE; } return TRUE; } uget-2.2.3/uget/Makefile.am0000664000175000017500000000265513602733704012422 00000000000000## To enable LFS (Large File Support) in 32bit platform ## add `getconf LFS_CFLAGS` to CFLAGS ## add `getconf LFS_LDFLAGS` to LDFLAGS ## static library --- # lib_LIBRARIES = libuget.a noinst_LIBRARIES = libuget.a libuget_a_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget libuget_a_CFLAGS = @PTHREAD_CFLAGS@ @GLIB_CFLAGS@ libuget_a_SOURCES = \ UgetSequence.c \ UgetRss.c \ UgetRpc.c \ UgetOption.c \ UgetData.c \ UgetFiles.c \ UgetNode.c \ UgetNode-compare.c \ UgetNode-filter.c \ UgetTask.c \ UgetHash.c \ UgetSite.c \ UgetApp.c \ UgetEvent.c \ UgetPlugin.c \ UgetA2cf.c \ UgetCurl.c \ UgetAria2.c \ UgetMedia.c \ UgetMedia-youtube.c \ UgetPluginCurl.c \ UgetPluginAria2.c \ UgetPluginMedia.c \ UgetPluginAgent.c \ UgetPluginMega.c \ UgetPluginEmpty.c noinst_HEADERS = \ UgetSequence.h \ UgetRss.h \ UgetRpc.h \ UgetOption.h \ UgetData.h \ UgetFiles.h \ UgetNode.h \ UgetTask.h \ UgetHash.h \ UgetSite.h \ UgetApp.h \ UgetEvent.h \ UgetPlugin.h \ UgetA2cf.h \ UgetCurl.h \ UgetAria2.h \ UgetMedia.h \ UgetPluginCurl.h \ UgetPluginAria2.h \ UgetPluginMedia.h \ UgetPluginAgent.h \ UgetPluginMega.h \ UgetPluginEmpty.h if WITH_LIBPWMD libuget_a_CFLAGS += @LIBPWMD_CFLAGS@ libuget_a_SOURCES += pwmd.c noinst_HEADERS += pwmd.h endif EXTRA_DIST = \ Android.mk \ CMakeLists.txt uget-2.2.3/uget/UgetFiles.c0000664000175000017500000002242413602733704012415 00000000000000/* * * Copyright (C) 2018-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef HAVE_CONFIG_H #include #endif #ifdef HAVE_GLIB #include // g_slice_xxx #endif // HAVE_GLIB #include #include #include #include #include // ---------------------------------------------------------------------------- // UgetFile UgetFile* uget_file_new(void) { #ifdef HAVE_GLIB return g_slice_alloc0(sizeof(UgetFile)); #else return ug_malloc0(sizeof(UgetFile)); #endif // HAVE_GLIB } void uget_file_free(UgetFile* file) { #ifdef HAVE_GLIB g_slice_free1(sizeof(UgetFile), file); #else ug_free(file); #endif } // ---------------------------------------------------------------------------- // UgetFiles static void uget_files_init(UgetFiles* files); static void uget_files_final(UgetFiles* files); static void uget_files_copy(UgetFiles* files, UgetFiles* src); static void ug_json_write_list(UgJson* json, void* collection); static UgJsonError ug_json_parse_list(UgJson* json, const char* name, const char* value, void* list, void* none); static const UgEntry UgetFilesEntry[] = { {"list", offsetof(UgetFiles, list), UG_ENTRY_ARRAY, ug_json_parse_list, ug_json_write_list}, // deprecated {"collection", offsetof(UgetFiles, list), UG_ENTRY_ARRAY, ug_json_parse_list, NULL}, {NULL} // null-terminated }; static const UgDataInfo UgetFilesInfoStatic = { "files", // name sizeof(UgetFiles), // size (UgInitFunc) uget_files_init, (UgFinalFunc) uget_files_final, (UgAssignFunc) uget_files_assign, UgetFilesEntry, }; // extern const UgDataInfo* UgetFilesInfo = &UgetFilesInfoStatic; static void uget_files_init(UgetFiles* files) { ug_list_init(&files->list); files->sync_count = 0; } static void uget_files_final(UgetFiles* files) { // free UgetFile.path in list ug_list_foreach(&files->list, (UgForeachFunc)ug_free, NULL); ug_list_clear(&files->list, TRUE); } int uget_files_assign(UgetFiles* files, UgetFiles* src) { // free UgetFile.path in list ug_list_foreach(&files->list, (UgForeachFunc)ug_free, NULL); ug_list_clear(&files->list, TRUE); uget_files_copy(files, src); files->sync_count = src->sync_count; return TRUE; } void uget_files_clear(UgetFiles* files) { ug_list_foreach(&files->list, (UgForeachFunc)ug_free, NULL); ug_list_clear(&files->list, TRUE); } // sync UgetFile from 'src' to 'files. // 1. all UgetFile in 'src' will insert/replace into 'files'. // 2. remove deleted (state == UGET_FILE_STATE_DELETED) UgetFile in 'src'. // return TRUE if 'files' have added or removed UgetFile. int uget_files_sync(UgetFiles* files, UgetFiles* src) { UgetFile* sibling; UgetFile* file1; UgetFile* file1_src; UgetFile* src_next; if (files->sync_count == src->sync_count) return FALSE; // sync UgetFile from 'src' for (file1_src = (UgetFile*)src->list.head; file1_src; file1_src = src_next) { src_next = file1_src->next; file1 = uget_files_find(files, file1_src->path, &sibling); // add new UgetFile in files if (file1 == NULL) { file1 = uget_file_new(); ug_list_insert(&files->list, (UgLink*)sibling, (UgLink*)file1); if (file1_src->path) file1->path = ug_strdup(file1_src->path); else file1->path = NULL; } file1->type = file1_src->type; file1->state = file1_src->state; // file1->order = file1_src->order; file1->total = file1_src->total; file1->complete = file1_src->complete; // remove deleted UgetFile in 'src' if (file1_src->type & UGET_FILE_STATE_DELETED) { // delete file from src ug_free(file1_src->path); ug_list_remove(&src->list, (UgLink*)file1_src); uget_file_free(file1_src); } } files->sync_count = src->sync_count; return TRUE; } UgetFile* uget_files_find(UgetFiles* files, const char* path, UgetFile** sibling) { UgetFile* file1; int diff; for (file1 = (UgetFile*)files->list.head; file1; file1 = file1->next) { diff = strcmp(file1->path, path); if (diff > 0) { if (sibling) sibling[0] = file1; return NULL; } if (diff == 0) break; } if (sibling) sibling[0] = file1; return file1; } UgetFile* uget_files_realloc(UgetFiles* files, const char* path) { UgetFile* file1; UgetFile* sibling; file1 = uget_files_find(files, path, &sibling); if (file1 == NULL) { file1 = uget_file_new(); ug_list_insert(&files->list, (UgLink*)sibling, (UgLink*)file1); file1->path = ug_strdup(path); file1->type = 0; file1->state = 0; // file1->order = 0; file1->total = 0; file1->complete = 0; files->sync_count++; } return file1; } UgetFile* uget_files_replace(UgetFiles* files, const char* path, int type, int state) { UgetFile* file1; file1 = uget_files_realloc(files, path); file1->type = type; file1->state = state; files->sync_count++; return file1; } void uget_files_apply(UgetFiles* files, int type, int state) { UgetFile* file1; for (file1 = (UgetFile*)files->list.head; file1; file1 = file1->next) { if (file1->type == type || type == UGET_FILE_ALL) file1->state |= state; } files->sync_count++; } void uget_files_erase(UgetFiles* files, int type, int state) { UgetFile* file1; UgetFile* next; for (file1 = (UgetFile*)files->list.head; file1; file1 = next) { next = file1->next; if (file1->type != type && type != UGET_FILE_ALL) continue; if (file1->state & state) { // delete file from src ug_free(file1->path); ug_list_remove(&files->list, (UgLink*)file1); uget_file_free(file1); } } files->sync_count -= 10; } // copy UgetFile from 'src' to 'files'. static void uget_files_copy(UgetFiles* files, UgetFiles* src) { UgetFile* file1; UgetFile* file1_src; for(file1_src = (UgetFile*)src->list.head; file1_src; file1_src = file1_src->next) { file1 = uget_file_new(); ug_list_append(&files->list, (UgLink*)file1); if (file1_src->path) file1->path = ug_strdup(file1_src->path); else file1->path = NULL; file1->type = file1_src->type; file1->state = file1_src->state; // file1->order = file1_src->order; file1->total = file1_src->total; file1->complete = file1_src->complete; } files->sync_count++; } // ---------------------------------------------------------------------------- // JSON static const UgEntry UgetFileEntry[] = { {"path", offsetof(UgetFile, path), UG_ENTRY_STRING, NULL, NULL}, {"type", offsetof(UgetFile, type), UG_ENTRY_CUSTOM, ug_json_parse_int16, ug_json_write_int16}, {"state", offsetof(UgetFile, state), UG_ENTRY_CUSTOM, ug_json_parse_int16, ug_json_write_int16}, // {"order", offsetof(UgetFile, order), UG_ENTRY_CUSTOM, // ug_json_parse_int32, ug_json_write_int32}, {"total", offsetof(UgetFile, total), UG_ENTRY_INT64, NULL, NULL}, {"complete", offsetof(UgetFile, complete), UG_ENTRY_INT64, NULL, NULL}, {NULL} // null-terminated }; static void ug_json_write_list(UgJson* json, void* list) { UgList* filelist = list; UgetFile* file1; for (file1 = (UgetFile*)filelist->head; file1; file1 = file1->next) { ug_json_write_object_head(json); ug_json_write_entry(json, file1, UgetFileEntry); ug_json_write_object_tail(json); } } static UgJsonError ug_json_parse_list(UgJson* json, const char* name, const char* value, void* list, void* none) { UgList* filelist = list; UgetFile* file1; if (json->type != UG_JSON_OBJECT) { // if (json->type >= UG_JSON_OBJECT) // ug_json_push(json, ug_json_parse_unknown, NULL, NULL); return UG_JSON_ERROR_TYPE_NOT_MATCH; } file1 = uget_file_new(); ug_list_append(filelist, (UgLink*)file1); ug_json_push(json, ug_json_parse_entry, file1, (void*)UgetFileEntry); return UG_JSON_ERROR_NONE; } uget-2.2.3/uget/UgetPluginCurl.c0000664000175000017500000012727013602733704013444 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #ifdef HAVE_CONFIG_H #include #endif #ifdef __ANDROID__ #include #endif #include #include #include #include #include #include #include #if defined _WIN32 || defined _WIN64 #include // Sleep() #include #define ug_sleep Sleep #else #include // posix_fallocate() #include // sleep(), usleep() #define ug_sleep(millisecond) usleep(millisecond * 1000) #endif // _WIN32 || _WIN64 #if defined(_MSC_VER) #define strtoll _strtoi64 // stdlib.h #endif #define MIN_SPLIT_SIZE (10 * 1024 * 1024) // can't less than 16384 x 2 #define MIN_SPEED_LIMIT 256 // speed control #define MAX_REPEAT_DIGITS 5 // + '.' + digits #define MAX_REPEAT_COUNTS 10000 // <= 9999 typedef struct UriLink UriLink; struct UriLink { UG_LINK_MEMBERS(UriLink, UriLink, self); // UriLink* self; // UriLink* next; // UriLink* prev; uint8_t scheme_type; uint8_t resumable:1; uint8_t tested:1; uint8_t ok:1; char uri[1]; }; // ---------------------------------------------------------------------------- // UgetPluginInfo (derived from UgTypeInfo) static void plugin_init (UgetPluginCurl* plugin); static void plugin_final(UgetPluginCurl* plugin); static int plugin_ctrl (UgetPluginCurl* plugin, int code, void* data); static int plugin_accept(UgetPluginCurl* plugin, UgInfo* node_info); static int plugin_sync (UgetPluginCurl* plugin, UgInfo* node_info); static UgetResult global_set(int code, void* parameter); static UgetResult global_get(int code, void* parameter); static const char* schemes[] = {"http", "https", "ftp", "ftps", NULL}; static const UgetPluginInfo UgetPluginCurlInfoStatic = { "curl", sizeof(UgetPluginCurl), (UgInitFunc) plugin_init, (UgFinalFunc) plugin_final, (UgetPluginSyncFunc) plugin_accept, (UgetPluginSyncFunc) plugin_sync, (UgetPluginCtrlFunc) plugin_ctrl, NULL, schemes, NULL, (UgetPluginGlobalFunc) global_set, (UgetPluginGlobalFunc) global_get }; // extern const UgetPluginInfo* UgetPluginCurlInfo = &UgetPluginCurlInfoStatic; // ---------------------------------------------------------------------------- // global data and it's functions. static struct { int initialized; int ref_count; } global = {0, 0}; static UgetResult global_init(void) { if (global.initialized == FALSE) { #if defined _WIN32 || defined _WIN64 WSADATA WSAData; WSAStartup(MAKEWORD(2, 2), &WSAData); #endif // _WIN32 || _WIN64 if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { #if defined _WIN32 || defined _WIN64 WSACleanup(); #endif return UGET_RESULT_ERROR; } global.initialized = TRUE; } global.ref_count++; return UGET_RESULT_OK; } static void global_ref(void) { global.ref_count++; } static void global_unref(void) { if (global.initialized == FALSE) return; global.ref_count--; if (global.ref_count == 0) { global.initialized = FALSE; curl_global_cleanup(); #if defined _WIN32 || defined _WIN64 WSACleanup(); #endif } } static UgetResult global_set(int option, void* parameter) { switch (option) { case UGET_PLUGIN_GLOBAL_INIT: // do global initialize/uninitialize here if (parameter) return global_init(); else global_unref(); break; default: return UGET_RESULT_UNSUPPORT; } return UGET_RESULT_OK; } static UgetResult global_get(int option, void* parameter) { switch (option) { case UGET_PLUGIN_GLOBAL_INIT: if (parameter) *(int*)parameter = global.initialized; break; default: return UGET_RESULT_UNSUPPORT; } return UGET_RESULT_OK; } // ---------------------------------------------------------------------------- // plug-in functions static void plugin_init(UgetPluginCurl* plugin) { if (global.initialized == FALSE) global_init(); else global_ref(); ug_list_init(&plugin->segment.list); plugin->file.time = -1; plugin->synced = TRUE; plugin->paused = TRUE; plugin->stopped = TRUE; } static void plugin_final(UgetPluginCurl* plugin) { if (plugin->common) ug_data_free(plugin->common); if (plugin->files) ug_data_free(plugin->files); if (plugin->proxy) ug_data_free(plugin->proxy); if (plugin->http) ug_data_free(plugin->http); if (plugin->ftp) ug_data_free(plugin->ftp); // free uri.list (UriLink), all link will be freed. ug_list_foreach(&plugin->uri.list, (UgForeachFunc) ug_free, NULL); // curl_slist_free_all(plugin->ftp_command); ug_free(plugin->folder.path); ug_free(plugin->file.name_fmt); ug_free(plugin->file.path); ug_free(plugin->aria2.path); global_unref(); } // ---------------------------------------------------------------------------- // plugin_ctrl static int plugin_ctrl_speed(UgetPluginCurl* plugin, int* speed); static int plugin_start(UgetPluginCurl* plugin); static int plugin_ctrl(UgetPluginCurl* plugin, int code, void* data) { switch (code) { case UGET_PLUGIN_CTRL_START: if (plugin->common) return plugin_start(plugin); break; case UGET_PLUGIN_CTRL_STOP: plugin->paused = TRUE; return TRUE; case UGET_PLUGIN_CTRL_SPEED: // speed control return plugin_ctrl_speed(plugin, data); // state ---------------- case UGET_PLUGIN_GET_STATE: *(int*)data = (plugin->stopped) ? FALSE : TRUE; return TRUE; default: break; } return FALSE; } static int plugin_ctrl_speed(UgetPluginCurl* plugin, int* speed) { UgetCommon* common; int value; // notify plug-in that speed limit has been changed if (plugin->limit.download != speed[0] || plugin->limit.upload != speed[1]) plugin->limit_changed = TRUE; // decide speed limit by user specified data. common = plugin->common; if (common == NULL) { plugin->limit.download = speed[0]; plugin->limit.upload = speed[1]; } else { // download value = speed[0]; if (common->max_download_speed) { if (value > common->max_download_speed || value == 0) { value = common->max_download_speed; plugin->limit_changed = TRUE; } } plugin->limit.download = value; // upload value = speed[1]; if (common->max_upload_speed) { if (value > common->max_upload_speed || value == 0) { value = common->max_upload_speed; plugin->limit_changed = TRUE; } } plugin->limit.upload = value; } return plugin->limit_changed; } // ---------------------------------------------------------------------------- // plugin_sync static int plugin_sync(UgetPluginCurl* plugin, UgInfo* node_info) { UgetCommon* common; UgetFiles* files; UgetProgress* progress; char* name; int speed[2]; if (plugin->stopped) { if (plugin->synced) return FALSE; plugin->synced = TRUE; } // avoid crash if plug-in failed to start. if (plugin->common == NULL) return FALSE; // sync data between plug-in and foreign UgData common = ug_info_realloc(node_info, UgetCommonInfo); common->retry_count = plugin->common->retry_count; // sync changed limit from node_info if (plugin->common->max_upload_speed != common->max_upload_speed || plugin->common->max_download_speed != common->max_download_speed) { // speed control plugin->common->max_upload_speed = common->max_upload_speed; plugin->common->max_download_speed = common->max_download_speed; speed[1] = common->max_upload_speed; speed[0] = common->max_download_speed; plugin_ctrl_speed(plugin, speed); } plugin->common->max_connections = common->max_connections; plugin->common->retry_limit = common->retry_limit; if (common->max_connections > 0) plugin->segment.n_max = common->max_connections; progress = ug_info_realloc(node_info, UgetProgressInfo); progress->upload_speed = plugin->speed.upload; progress->download_speed = plugin->speed.download; progress->uploaded = plugin->size.upload; progress->complete = plugin->size.download; if (plugin->file.size > 0) progress->total = plugin->file.size; else progress->total = progress->complete; if (progress->total > 0) progress->percent = (int) (progress->complete * 100 / progress->total); else progress->percent = 0; // If total size and average speed is unknown, don't calculate remain time. if (progress->download_speed > 0 && progress->total > 0) { progress->left = (progress->total - progress->complete) / progress->download_speed; } // consume time progress->elapsed = time(NULL) - plugin->start_time; // update UgetFiles files = ug_info_realloc(node_info, UgetFilesInfo); uget_plugin_lock(plugin); uget_files_sync(files, plugin->files); uget_plugin_unlock(plugin); // set name if (plugin->file_renamed && plugin->file.path) { plugin->file_renamed = FALSE; // change name #if defined _WIN32 || defined _WIN64 name = strrchr(plugin->file.path, '\\'); #else name = strrchr(plugin->file.path, '/'); #endif if (name && name[1]) { if (common->name == NULL || strcmp(name, common->name)) { ug_free(common->name); common->name = ug_strdup(name + 1); uget_plugin_post((UgetPlugin*) plugin, uget_event_new(UGET_EVENT_NAME)); } ug_free(common->file); common->file = ug_strdup(name + 1); } } return TRUE; } // ---------------------------------------------------------------------------- // plugin_accept/plugin_start static void plugin_decide_uris(UgetPluginCurl* plugin); static void plugin_decide_folder(UgetPluginCurl* plugin); static void plugin_decide_files(UgetPluginCurl* plugin); static UgThreadResult plugin_thread(UgetPluginCurl* plugin); static int plugin_accept(UgetPluginCurl* plugin, UgInfo* node_info) { union { UgetCommon* common; UgetFiles* files; UgetProxy* proxy; UgetHttp* http; UgetFtp* ftp; } temp; int speed[2]; temp.common = ug_info_get(node_info, UgetCommonInfo); if (temp.common == NULL || temp.common->uri == NULL) return FALSE; plugin->common = ug_data_copy(temp.common); plugin_decide_uris(plugin); plugin_decide_folder(plugin); // speed control: decide speed limit before starting plug-in speed[0] = plugin->limit.download; speed[1] = plugin->limit.upload; plugin_ctrl_speed(plugin, speed); temp.files = ug_info_get(node_info, UgetFilesInfo); if (temp.files) plugin->files = ug_data_copy(temp.files); else plugin->files = ug_data_new(UgetFilesInfo); temp.proxy = ug_info_get(node_info, UgetProxyInfo); if (temp.proxy) plugin->proxy = ug_data_copy(temp.proxy); temp.http = ug_info_get(node_info, UgetHttpInfo); if (temp.http) { plugin->http = ug_data_copy(temp.http); // check http->post_file if (temp.http->post_file) { if (ug_file_is_exist(temp.http->post_file) == FALSE) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_POST_FILE_NOT_FOUND, NULL)); return FALSE; } } // check http->cookie_file if (temp.http->cookie_file) { if (ug_file_is_exist(temp.http->cookie_file) == FALSE) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_COOKIE_FILE_NOT_FOUND, NULL)); return FALSE; } } } temp.ftp = ug_info_get(node_info, UgetFtpInfo); if (temp.ftp) plugin->ftp = ug_data_copy(temp.ftp); return TRUE; } static int plugin_start(UgetPluginCurl* plugin) { UgThread thread; int ok; plugin->start_time = time(NULL); // try to start thread plugin->paused = FALSE; plugin->stopped = FALSE; uget_plugin_ref((UgetPlugin*) plugin); ok = ug_thread_create(&thread, (UgThreadFunc) plugin_thread, plugin); if (ok == UG_THREAD_OK) ug_thread_unjoin(&thread); else { // failed to start thread ----------------- plugin->paused = TRUE; plugin->stopped = TRUE; // post error message and decreases the reference count uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error(UGET_EVENT_ERROR_THREAD_CREATE_FAILED, NULL)); uget_plugin_unref((UgetPlugin*) plugin); return FALSE; } return TRUE; } static UriLink* plugin_replace_uri(UgetPluginCurl* plugin, UriLink* old_link, const char* uri, int uri_len) { UriLink* uri_link; if (uri_len == -1) uri_len = strlen(uri); uri_link = ug_malloc(sizeof(UriLink) + uri_len); strncpy(uri_link->uri, uri, uri_len); uri_link->uri[uri_len] = 0; // null terminated uri_link->self = uri_link; uri_link->next = NULL; uri_link->prev = NULL; uri_link->scheme_type = 0; uri_link->resumable = FALSE; uri_link->tested = FALSE; uri_link->ok = FALSE; // add to list if (old_link == NULL) ug_list_append(&plugin->uri.list, (void*) uri_link); else { ug_list_insert(&plugin->uri.list, (void*) old_link, (void*) uri_link); ug_list_remove(&plugin->uri.list, (void*) old_link); if (plugin->uri.link == (void*) old_link) plugin->uri.link = (void*) uri_link; ug_free(old_link); } return uri_link; } static void plugin_decide_uris(UgetPluginCurl* plugin) { UgetCommon* common; const char* curr; const char* prev; common = plugin->common; // uri plugin->uri.link = (void*) plugin_replace_uri(plugin, NULL, common->uri, -1); ug_free(common->uri); common->uri = NULL; // mirrors for (curr = common->mirrors; curr && curr[0];) { // skip space ' ' while (curr[0] == ' ') curr++; prev = curr; curr = curr + strcspn(curr, " "); // add to uri.list plugin_replace_uri(plugin, NULL, prev, curr - prev); } ug_free(common->mirrors); common->mirrors = NULL; } static void plugin_decide_folder(UgetPluginCurl* plugin) { UgetCommon* common; int length; int value; // folder common = plugin->common; if (common->folder == NULL || common->folder[0] == 0) length = 0; else { length = strlen(common->folder); value = common->folder[length - 1]; plugin->folder.path = ug_malloc(length + 2); // + '/' + '\x0' plugin->folder.path[0] = 0; strcpy(plugin->folder.path, common->folder); if (value != '\\' || value != '/') { #if defined _WIN32 || defined _WIN64 strcat(plugin->folder.path, "\\"); #else strcat(plugin->folder.path, "/"); #endif length++; } } plugin->folder.length = length; } static void plugin_decide_files(UgetPluginCurl* plugin) { // update UgetFiles uget_plugin_lock(plugin); // insert/replace file into files if (plugin->aria2.path) { uget_files_replace(plugin->files, plugin->aria2.path, UGET_FILE_TEMPORARY, 0); } uget_files_replace(plugin->files, plugin->file.path, UGET_FILE_REGULAR, 0); uget_plugin_unlock(plugin); } // ---------------------------------------------------------------------------- // plugin_thread #define N_THREAD(plugin) ((plugin)->segment.list.size) static void delay_ms(UgetPluginCurl* plugin, int milliseconds); static int switch_uri(UgetPluginCurl* plugin, UgetCurl* ugcurl, int is_resumable); static int prepare_file(UgetCurl* ugcurl, UgetPluginCurl* plugin); static char* get_repeating_fmt_string(char* filename); static void complete_file(UgetPluginCurl* plugin); static int load_file_info(UgetPluginCurl* plugin); static void clear_file_info(UgetPluginCurl* plugin); static int reuse_download(UgetPluginCurl* plugin, UgetCurl* ugcurl, int next_uri); static int split_download(UgetPluginCurl* plugin, UgetCurl* ugcurl); static void adjust_speed_limit(UgetPluginCurl* plugin); static UgetCurl* create_segment(UgetPluginCurl* plugin); static UgThreadResult plugin_thread(UgetPluginCurl* plugin) { UgetCommon* common; UgetCurl* ugcurl; UgetCurl* ugnext; int counter; int n_active_last = 0; struct { int64_t upload; int64_t download; } size, speed; common = plugin->common; common->retry_count = 0; plugin->segment.n_max = common->max_connections; if (plugin->segment.n_max == 0) plugin->segment.n_max = 1; // create new segment and add it to segment.list ugcurl = create_segment(plugin); if (load_file_info(plugin)) { uget_curl_open_file(ugcurl, plugin->file.path); ugcurl->beg = plugin->segment.beg; uget_a2cf_lack(&plugin->aria2.ctrl, (uint64_t*) &ugcurl->beg, (uint64_t*) &ugcurl->end); plugin->segment.beg = ugcurl->end; // plugin_sync() will set foreign UgetCommon::name plugin->file_renamed = TRUE; plugin->synced = FALSE; } else { clear_file_info(plugin); ugcurl->prepare.func = (UgetCurlFunc) prepare_file; ugcurl->prepare.data = plugin; ugcurl->header_store = TRUE; } ug_list_append(&plugin->segment.list, (void*) ugcurl); // start curl uget_curl_run(ugcurl, FALSE); // main loop for (counter = 0; N_THREAD(plugin) > 0; counter++) { // sleep 0.5 second ug_sleep(500); // reset data, plug-in will count them (in segment loop) later plugin->segment.n_active = 0; size.upload = 0; size.download = 0; speed.upload = 0; speed.download = 0; // segment loop ugcurl = (UgetCurl*) plugin->segment.list.head; for (; ugcurl; ugcurl = ugnext) { ugnext = ugcurl->next; // split download, use these code with split_download() if (ugcurl->split) { if (ugcurl->prev == NULL || ugcurl->prev->end < ugcurl->beg) ugcurl->split = FALSE; else if (ugcurl->beg < ugcurl->prev->pos) { // if previous segment overwrite current one. ugcurl->split = FALSE; ugcurl->paused = TRUE; ugcurl->end = ugcurl->beg; ugcurl->pos = ugcurl->beg; ugcurl->size[0] = 0; #ifndef NDEBUG if (common->debug_level) { printf("\n" "previous segment overwrite at %u KiB\n", (unsigned) (ugcurl->beg / 1024)); } #endif } else if (ugcurl->beg < ugcurl->pos) { // If this segment has downloaded data, // plug-in split new segment from previous one. ugcurl->split = FALSE; ugcurl->prev->end = ugcurl->beg; if (ugcurl->prev->pos > ugcurl->beg) { ugcurl->prev->pos = ugcurl->beg; ugcurl->prev->size[0] = ugcurl->prev->pos - ugcurl->prev->beg; } #ifndef NDEBUG if (common->debug_level) { printf("\n" "split new segment at %u KiB\n", (unsigned) (ugcurl->beg / 1024)); } #endif } } // if user want to stop plug-in, it must stop all UgetCurl in list. if (plugin->paused) { ugcurl->paused = TRUE; plugin->segment.n_max = 0; } // update aria2 control file progress if (plugin->aria2.path) uget_a2cf_fill(&plugin->aria2.ctrl, ugcurl->beg, ugcurl->pos); // progress if (ugcurl->state >= UGET_CURL_OK) { // ugcurl has stopped plugin->base.upload += ugcurl->size[1]; plugin->base.download += ugcurl->size[0]; } else if (ugcurl->state == UGET_CURL_RUN) { size.upload += ugcurl->size[1]; size.download += ugcurl->size[0]; speed.upload += ugcurl->speed[1]; speed.download += ugcurl->speed[0]; } // handle UgetCurl by state switch (ugcurl->state) { default: break; case UGET_CURL_RUN: plugin->segment.n_active++; break; case UGET_CURL_OK: ugcurl->state = UGET_CURL_RESPLIT; // special case for unknown file size if (plugin->file.size == 0 && N_THREAD (plugin) == 1) { complete_file(plugin); // delete download ug_list_remove(&plugin->segment.list, (void*)ugcurl); uget_curl_free(ugcurl); } break; case UGET_CURL_ABORT: // delete download ug_list_remove(&plugin->segment.list, (void*)ugcurl); uget_curl_free(ugcurl); break; case UGET_CURL_ERROR: // if no other downloading segment, plug-in response error if (N_THREAD(plugin) == 1) { // post error message if (ugcurl->event) { uget_plugin_post((UgetPlugin*) plugin, ugcurl->event); ugcurl->event = NULL; } // delete download ug_list_remove(&plugin->segment.list, (void*)ugcurl); uget_curl_free(ugcurl); } else { // try to reuse download reuse_download(plugin, ugcurl, TRUE); } break; case UGET_CURL_RETRY: // if no other downloading segment if (N_THREAD(plugin) == 1) { common->retry_count++; if (common->retry_count < common->retry_limit || common->retry_limit == 0) { ugcurl->beg = ugcurl->pos; delay_ms(plugin, common->retry_delay * 1000); uget_curl_run(ugcurl, FALSE); } else { // delete segment ug_list_remove(&plugin->segment.list, (void*)ugcurl); uget_curl_free(ugcurl); } } else { // try to reuse download reuse_download(plugin, ugcurl, FALSE); } break; case UGET_CURL_NOT_RESUMABLE: // if no other downloading segment if (N_THREAD(plugin) == 1) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_normal( UGET_EVENT_NORMAL_NOT_RESUMABLE, NULL)); common->retry_count++; if (common->retry_count < common->retry_limit || common->retry_limit == 0) { plugin->base.download = 0; plugin->size.download = 0; ugcurl->beg = 0; ugcurl->end = plugin->file.size; delay_ms(plugin, common->retry_delay * 1000); switch_uri(plugin, ugcurl, TRUE); uget_curl_run(ugcurl, FALSE); } else { // delete download ug_list_remove(&plugin->segment.list, (void*)ugcurl); uget_curl_free(ugcurl); } } else { // try to reuse download reuse_download(plugin, ugcurl, TRUE); } break; } } // use completed UgetCurl to split new segment after segment loop ugcurl = (UgetCurl*) plugin->segment.list.head; for (; ugcurl; ugcurl = ugnext) { ugnext = ugcurl->next; if (ugcurl->state == UGET_CURL_RESPLIT) { if (split_download(plugin, ugcurl) == FALSE) { // delete download ug_list_remove(&plugin->segment.list, (void*)ugcurl); uget_curl_free(ugcurl); } } } // progress --------------------- plugin->size.upload = plugin->base.upload + size.upload; plugin->size.download = plugin->base.download + size.download; // Don't update speed when stopping if (plugin->segment.list.size) { plugin->speed.upload = speed.upload; plugin->speed.download = speed.download; } plugin->synced = FALSE; // check file size -------------- if (plugin->file.size) { // response error if file size is different if (plugin->file.size < plugin->size.download) { #if 0 #ifndef NDEBUG if (common->debug_level) { printf("file size is different\n"); printf("plugin->file.size = %d\n", (int)plugin->file.size); printf("plugin->size.download = %d\n", (int)plugin->size.download); } #endif // NDEBUG plugin->size.download = plugin->file.size; #else plugin->paused = TRUE; if (N_THREAD(plugin) > 0) continue; // wait other thread else { if (plugin->aria2.path) ug_unlink(plugin->aria2.path); uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error( UGET_EVENT_ERROR_INCORRECT_SOURCE, NULL)); plugin->synced = FALSE; break; } #endif } // download completed if (plugin->file.size == plugin->size.download) { if (N_THREAD(plugin) > 0) continue; // wait other thread else { complete_file(plugin); plugin->synced = FALSE; break; } } } // timer ------------------------ // adjust speed every 0.5 x 2 = 1 second. if ((counter & 1) == 1 || n_active_last != plugin->segment.n_active) { n_active_last = plugin->segment.n_active; adjust_speed_limit(plugin); } // save aria2 control file every 0.5 x 4 = 2 seconds. if ((counter & 3) == 3 || N_THREAD(plugin) == 0) { if (plugin->aria2.path) uget_a2cf_save(&plugin->aria2.ctrl, plugin->aria2.path); } // split download every 0.5 x 8 = 4 seconds. if ((counter & 7) == 7 && plugin->file.size) { // If some threads are connecting, It doesn't split new segment. if (N_THREAD(plugin) < plugin->segment.n_max && N_THREAD(plugin) == plugin->segment.n_active) { split_download(plugin, NULL); } } // retry ------------------------ if (common->retry_count >= common->retry_limit && common->retry_limit != 0) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_error( UGET_EVENT_ERROR_TOO_MANY_RETRIES, NULL)); plugin->synced = FALSE; plugin->paused = TRUE; } } // count the latest downloaded size if download doesn't complete if ((plugin->file.size != plugin->size.download) && plugin->aria2.path) { plugin->size.download = uget_a2cf_completed(&plugin->aria2.ctrl); plugin->synced = FALSE; } // free segment list ug_list_foreach(&plugin->segment.list, (UgForeachFunc) uget_curl_free, NULL); ug_list_clear(&plugin->segment.list, FALSE); // uget_a2cf_clear(&plugin->aria2.ctrl); plugin->stopped = TRUE; uget_plugin_unref((UgetPlugin*) plugin); return UG_THREAD_RESULT; } static int prepare_existed(UgetCurl* ugcurl, UgetPluginCurl* plugin) { double fsize; long ftime; // file.size if (plugin->file.size) { curl_easy_getinfo(ugcurl->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &fsize); if (plugin->file.size != ugcurl->beg + (int64_t) fsize) { // if remote file size and local file size are not the same, // plug-in will create new download file. if (plugin->prepared == FALSE) { // plugin_thread() has initialized/created some data for this function. // program must clear these data before calling prepare_file() clear_file_info(plugin); uget_curl_close_file(ugcurl); return prepare_file(ugcurl, plugin); } // don't write INCORRECT data to existed file. ugcurl->event_code = UGET_EVENT_ERROR_INCORRECT_SOURCE; ugcurl->size[0] = 0; return FALSE; } } // file.time if (plugin->file.time == -1) { curl_easy_getinfo(ugcurl->curl, CURLINFO_FILETIME, &ftime); plugin->file.time = (time_t) ftime; } if (uget_curl_open_file(ugcurl, plugin->file.path)) { plugin->prepared = TRUE; return TRUE; } else { ugcurl->event_code = UGET_EVENT_ERROR_FILE_OPEN_FAILED; return FALSE; } } static int prepare_file(UgetCurl* ugcurl, UgetPluginCurl* plugin) { UgetCommon* common; int length; int counts; int value; union { long ftime; double fsize; int64_t val64; UriLink* ulink; } temp; // file.time curl_easy_getinfo(ugcurl->curl, CURLINFO_FILETIME, &temp.ftime); plugin->file.time = (time_t) temp.ftime; // file.size curl_easy_getinfo(ugcurl->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &temp.fsize); plugin->file.size = (int64_t) temp.fsize + ugcurl->beg; if (plugin->file.size == -1) plugin->file.size = 0; common = plugin->common; length = plugin->folder.length; // decide filename if (common->file == NULL) { if (ugcurl->header.filename) { common->file = ugcurl->header.filename; ugcurl->header.filename = NULL; } else if (ugcurl->uri.part.file != -1) common->file = ug_uri_get_file(&ugcurl->uri.part); // if it is still no filename, set default one if (common->file == NULL) common->file = ug_strdup("index"); // replace invalid characters \/:*?"<>| by _ in filename. ug_str_replace_chars(common->file, "\\/:*?\"<>|", '_'); } length += strlen(common->file); // path = folder + filename // length + digits + ".aria2" + '\0' plugin->file.path = ug_malloc(length + MAX_REPEAT_DIGITS + 6 + 1); plugin->file.path[0] = 0; // you need this line if common->folder is NULL. if (plugin->folder.path) strcpy(plugin->file.path, plugin->folder.path); strcat(plugin->file.path, common->file); plugin->file.name_fmt = get_repeating_fmt_string(common->file); // create folder if (ug_create_dir_all(plugin->file.path, plugin->folder.length) == -1) { ugcurl->event_code = UGET_EVENT_ERROR_FOLDER_CREATE_FAILED; return FALSE; } // create file for (counts = 0; counts < MAX_REPEAT_COUNTS; counts++) { value = ug_open(plugin->file.path, UG_O_CREATE | UG_O_EXCL | UG_O_WRONLY, UG_S_IREAD | UG_S_IWRITE | UG_S_IRGRP | UG_S_IROTH); // value = ug_open(plugin->file.path, UG_O_CREATE | UG_O_EXCL | UG_O_RDWR, // UG_S_IREAD | UG_S_IWRITE | UG_S_IRGRP | UG_S_IROTH); // check if this path can't access // if (value == -1 && ug_file_is_exist(plugin->file.path) == FALSE) { // ugcurl->event_code = UGET_EVENT_ERROR_FILE_CREATE_FAILED; // return FALSE; // error // } // check exist downloaded file & it's control file strcat(plugin->file.path + length, ".aria2"); if (value == -1) { if (uget_a2cf_load(&plugin->aria2.ctrl, plugin->file.path)) { if (plugin->aria2.ctrl.total_len == plugin->file.size) { plugin->aria2.path = ug_strdup(plugin->file.path); plugin->base.download = uget_a2cf_completed(&plugin->aria2.ctrl); plugin->size.download = plugin->base.download; *(char*) strstr(plugin->file.path + length, ".aria2") = 0; break; } uget_a2cf_clear(&plugin->aria2.ctrl); } } else { // reset downloaded size if plug-in decide to create new file. plugin->base.download = 0; plugin->size.download = 0; // allocate disk space if plug-in known file size if (plugin->file.size) { // preallocate space for a file. #if defined _WIN32 || defined _WIN64 LARGE_INTEGER size; HANDLE handle; handle = (HANDLE) _get_osfhandle(value); size.QuadPart = plugin->file.size; if(SetFilePointerEx(handle ,size, 0, FILE_BEGIN) == FALSE) ugcurl->event_code = UGET_EVENT_ERROR_OUT_OF_RESOURCE; if(SetEndOfFile(handle) == FALSE) ugcurl->event_code = UGET_EVENT_ERROR_OUT_OF_RESOURCE; SetFilePointer(handle, 0, 0, FILE_BEGIN); #elif defined HAVE_FTRUNCATE if (ftruncate(value, plugin->file.size) == -1) ugcurl->event_code = UGET_EVENT_ERROR_OUT_OF_RESOURCE; #elif defined __ANDROID__ && __ANDROID_API__ >= 12 if (ftruncate64(value, plugin->file.size) == -1) ugcurl->event_code = UGET_EVENT_ERROR_OUT_OF_RESOURCE; #elif defined HAVE_POSIX_FALLOCATE if (posix_fallocate(value, 0, plugin->file.size) != 0) ugcurl->event_code = UGET_EVENT_ERROR_OUT_OF_RESOURCE; #elif defined __ANDROID__ && __ANDROID_API__ >= 20 if (posix_fallocate64(value, 0, plugin->file.size) != 0) ugcurl->event_code = UGET_EVENT_ERROR_OUT_OF_RESOURCE; #else if (ug_write(value, "O", 1) == -1) // begin of file ugcurl->event_code = UGET_EVENT_ERROR_OUT_OF_RESOURCE; if (ug_seek(value, plugin->file.size - 1, SEEK_SET) == -1) ugcurl->event_code = UGET_EVENT_ERROR_OUT_OF_RESOURCE; if (ug_write(value, "X", 1) == -1) // end of file ugcurl->event_code = UGET_EVENT_ERROR_OUT_OF_RESOURCE; #endif // _WIN32 || _WIN64 // create aria2 control file if no error if (ugcurl->event_code == 0) { plugin->aria2.path = ug_strdup(plugin->file.path); uget_a2cf_init(&plugin->aria2.ctrl, plugin->file.size); uget_a2cf_save(&plugin->aria2.ctrl, plugin->aria2.path); } } ug_close(value); // remove tail ".aria2" string in file path *(char*) strstr(plugin->file.path + length, ".aria2") = 0; // if error occurred while allocating disk space, delete created download file. if (ugcurl->event_code > 0) { ug_unlink(plugin->file.path); return FALSE; } break; } sprintf(plugin->file.path + plugin->folder.length, plugin->file.name_fmt, counts); } if (counts == MAX_REPEAT_COUNTS) { ugcurl->event_code = UGET_EVENT_ERROR_FILE_CREATE_FAILED; return FALSE; } // set filename if counts > 0 if (counts) { ug_free(common->file); common->file = ug_strdup(plugin->file.path + plugin->folder.length); } plugin->file_renamed = TRUE; // update UgetFiles plugin_decide_files(plugin); // event if (ugcurl->resumable) { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_normal(UGET_EVENT_NORMAL_RESUMABLE, NULL)); } else { uget_plugin_post((UgetPlugin*) plugin, uget_event_new_normal(UGET_EVENT_NORMAL_NOT_RESUMABLE, NULL)); } #ifndef NDEBUG if (common->debug_level) { printf("CURL message = %s\n", ugcurl->error_string); printf("plugin->file.path = %s\n", plugin->file.path); printf("plugin->file.size = %d\n", (int)plugin->file.size); printf("plugin->file.time = %d\n", (int)plugin->file.time); printf("resumable = %d\n", ugcurl->resumable); } #endif // set flags to UriLink if (ugcurl->header.uri) { // HTTP redirection temp.ulink = plugin_replace_uri(plugin, ugcurl->uri.link, ugcurl->header.uri, -1); ugcurl->uri.link = temp.ulink; ug_free(ugcurl->header.uri); ugcurl->header.uri = NULL; } else temp.ulink = ugcurl->uri.link; temp.ulink->scheme_type = ugcurl->scheme_type; temp.ulink->resumable = ugcurl->resumable; temp.ulink->tested = TRUE; temp.ulink->ok = TRUE; // change callback ugcurl->prepare.func = (UgetCurlFunc) prepare_existed; ugcurl->prepare.data = plugin; // prepare to download plugin->prepared = TRUE; // file and it's offset temp.val64 = 0; uget_a2cf_lack(&plugin->aria2.ctrl, (uint64_t*) &temp.val64, (uint64_t*) &ugcurl->end); plugin->segment.beg = ugcurl->end; if (ugcurl->beg == temp.val64) { if (uget_curl_open_file(ugcurl, plugin->file.path) == FALSE) { ugcurl->event_code = UGET_EVENT_ERROR_FILE_OPEN_FAILED; return FALSE; } return TRUE; } else { ugcurl->beg = temp.val64; ugcurl->pos = temp.val64; curl_easy_setopt(ugcurl->curl, CURLOPT_RESUME_FROM_LARGE, (curl_off_t) temp.val64); if (uget_curl_open_file(ugcurl, plugin->file.path)) ugcurl->restart = TRUE; return FALSE; } } // used by get_repeating_fmt_string() enum { EXT_NUMBER = 0x01, EXT_UPPER = 0x02, EXT_LOWER = 0x04, EXT_CAMEL = EXT_UPPER | EXT_LOWER, EXT_ALL = EXT_UPPER | EXT_LOWER | EXT_NUMBER, }; // used by get_repeating_fmt_string() static char* find_dot_ext(const char* filename, const char* end, uint8_t* status) { uint8_t stat = 0; const char* cur = NULL; for (cur = end-1; cur >= filename; cur--) { if (cur[0] == '.') { if (cur == end-1 || cur == filename) break; if (status) status[0] = stat; return (char*)cur; } else if (cur[0] >= '0' && cur[0] <= '9') stat |= EXT_NUMBER; else if (cur[0] >= 'A' && cur[0] <= 'Z') stat |= EXT_UPPER; else if (cur[0] >= 'a' && cur[0] <= 'z') stat |= EXT_LOWER; else break; } return NULL; } static char* get_repeating_fmt_string(char* filename) { char* result; char* dot[3] = {NULL, NULL, NULL}; uint8_t stat[3] = {0, 0, 0}; int index; int length; length = strlen(filename); result = ug_malloc(length + 3 + 1); // + ".%d" + "\0" // dot[0] dot[0] = find_dot_ext(filename, filename + length, &stat[0]); if (dot[0]) dot[1] = find_dot_ext(filename, dot[0], &stat[1]); if (dot[1]) dot[2] = find_dot_ext(filename, dot[1], &stat[2]); for (index = 2; index >= 0; index--) { if (dot[index] == NULL) continue; // replace exist number if (stat[index] == EXT_NUMBER) { // strncpy() doesn't always null-terminated strncpy(result, filename, dot[index] - filename); result[dot[index] - filename] = 0; strcat(result, ".%d"); if (index > 0) strcat(result, dot[index-1]); return result; } // insert number if (index == 2) continue; // strncpy() doesn't always null-terminated strncpy(result, filename, dot[index] - filename); result[dot[index] - filename] = 0; strcat(result, ".%d"); strcat(result, dot[index]); return result; } // append number strcpy(result, filename); strcat(result, ".%d"); // return printf() format string return result; } static int load_file_info(UgetPluginCurl* plugin) { UgetCommon* common; char* path; int length; common = plugin->common; if (common == NULL || common->file == NULL) return FALSE; // folder + filename length = plugin->folder.length; length += strlen(common->file); // path path = ug_malloc(length + 6 + 1); // length + ".aria2" + '\0' path[0] = 0; // you need this line if common->folder is NULL. if (plugin->folder.path) strcpy(path, plugin->folder.path); strcat(path, common->file); if (ug_file_is_exist(path) == FALSE) { ug_free(path); return FALSE; } strcat(path, ".aria2"); // aria2 control file if (uget_a2cf_load(&plugin->aria2.ctrl, path)) { plugin->file.size = plugin->aria2.ctrl.total_len; plugin->file.path = ug_strndup(path, length); plugin->aria2.path = path; plugin->base.download = uget_a2cf_completed(&plugin->aria2.ctrl); plugin->size.download = plugin->base.download; // update UgetFiles plugin_decide_files(plugin); return TRUE; } else { uget_a2cf_clear(&plugin->aria2.ctrl); ug_free(path); return FALSE; } } static void clear_file_info(UgetPluginCurl* plugin) { // update UgetFiles uget_plugin_lock(plugin); uget_files_apply_deleted(plugin->files); uget_plugin_unlock(plugin); uget_a2cf_clear(&plugin->aria2.ctrl); ug_free(plugin->aria2.path); plugin->aria2.path = NULL; ug_free(plugin->file.path); plugin->file.path = NULL; plugin->file.size = 0; plugin->base.download = 0; plugin->size.download = 0; } static int switch_uri(UgetPluginCurl* plugin, UgetCurl* ugcurl, int is_resumable) { UriLink* uri_link; uri_link = (UriLink*) plugin->uri.link; if (uri_link == NULL) uri_link = (UriLink*) plugin->uri.list.head; // set URI and decide it's scheme uget_curl_set_url(ugcurl, uri_link->uri); uri_link->scheme_type = ugcurl->scheme_type; // sync URI flags to UgetCurl ugcurl->uri.link = uri_link; ugcurl->resumable = uri_link->resumable; ugcurl->tested = uri_link->tested; ugcurl->test_ok = uri_link->ok; // pointer current URI to next one plugin->uri.link = (void*) uri_link->next; return TRUE; } static void complete_file(UgetPluginCurl* plugin) { if (plugin->aria2.path) { // update UgetFiles uget_plugin_lock(plugin); uget_files_replace(plugin->files, plugin->file.path, UGET_FILE_REGULAR, UGET_FILE_STATE_COMPLETED); uget_files_replace(plugin->files, plugin->aria2.path, UGET_FILE_ATTACHMENT, UGET_FILE_STATE_DELETED); uget_plugin_unlock(plugin); // delete aria2 control file ug_unlink(plugin->aria2.path); ug_free(plugin->aria2.path); plugin->aria2.path = NULL; } // modify file time if (plugin->common->timestamp == TRUE && plugin->file.time != -1) ug_modify_file_time(plugin->file.path, plugin->file.time); // completed message uget_plugin_post((UgetPlugin*)plugin, uget_event_new(UGET_EVENT_COMPLETED)); uget_plugin_post((UgetPlugin*)plugin, uget_event_new(UGET_EVENT_STOP)); } static int reuse_download(UgetPluginCurl* plugin, UgetCurl* ugcurl, int next_uri) { if (ugcurl->beg == ugcurl->pos) { // delete segment if no downloaded data ug_list_remove(&plugin->segment.list, (void*)ugcurl); uget_curl_free(ugcurl); return FALSE; } else { // reuse this segment if (next_uri == TRUE) switch_uri(plugin, ugcurl, TRUE); ugcurl->beg = ugcurl->pos; uget_curl_run(ugcurl, FALSE); return TRUE; } } static int split_download(UgetPluginCurl* plugin, UgetCurl* ugcurl) { UgetCurl* temp; UgetCurl* sibling = NULL; uint64_t cur; uint64_t end; if (plugin->aria2.path == NULL) return FALSE; // try to find unused space cur = plugin->segment.beg; if (uget_a2cf_lack(&plugin->aria2.ctrl, &cur, &end)) { plugin->segment.beg = end; #ifndef NDEBUG if (plugin->common->debug_level) { printf("\n" "lack %u-%u KiB\n", (unsigned) cur / 1024, (unsigned) end / 1024); } #endif } // if no unused space, try to split downloading segment. else { // cur = segment size; end = the largest segment size; end = 0; for (temp = (void*)plugin->segment.list.head; temp; temp = temp->next) { cur = temp->end - temp->pos; if (end < cur) { end = cur; sibling = temp; } } if (sibling == NULL) return FALSE; cur = (sibling->end - sibling->pos) >> 1; // if segment is too small, don't split it. if (cur < MIN_SPLIT_SIZE) return FALSE; // cur = begin of new segment; end = end of new segment; cur = sibling->end - cur; end = sibling->end; if (cur & 16383) cur += 16384 - (cur & 16383); #ifndef NDEBUG if (plugin->common->debug_level) { printf("\n" "split %u-%u KiB\n", (unsigned) cur / 1024, (unsigned) end / 1024); } #endif } // reuse or create UgetCurl // if this UgetCurl has been inserted in segment.list, remove it. if (ugcurl) ug_list_remove(&plugin->segment.list, (UgLink*) ugcurl); else ugcurl = create_segment(plugin); // add to segment.list if (sibling == NULL) ug_list_append(&plugin->segment.list, (void*) ugcurl); else { ugcurl->split = TRUE; ug_list_insert(&plugin->segment.list, (void*) sibling->next, (void*) ugcurl); } ugcurl->beg = cur; ugcurl->end = end; uget_curl_run(ugcurl, FALSE); return TRUE; } static void delay_ms(UgetPluginCurl* plugin, int milliseconds) { while (plugin->paused == FALSE) { if (milliseconds > 500) { milliseconds -= 500; ug_sleep(500); continue; } ug_sleep(milliseconds); return; } } static UgetCurl* create_segment(UgetPluginCurl* plugin) { UgetCurl* ugcurl; ugcurl = uget_curl_new(); uget_curl_set_common(ugcurl, plugin->common); uget_curl_set_proxy(ugcurl, plugin->proxy); uget_curl_set_http(ugcurl, plugin->http); uget_curl_set_ftp(ugcurl, plugin->ftp); // set speed limit if (plugin->limit.download) ugcurl->limit[0] = plugin->limit.download / (plugin->segment.list.size + 1); if (plugin->limit.upload) ugcurl->limit[1] = plugin->limit.upload / (plugin->segment.list.size + 1); // select URL switch_uri(plugin, ugcurl, FALSE); // set output function ugcurl->prepare.func = (UgetCurlFunc) prepare_existed; ugcurl->prepare.data = plugin; return ugcurl; } // speed control static void adjust_speed_limit_index(UgetPluginCurl* plugin, int idx, int64_t remain) { UgetCurl* ucurl; // balance speed remain = remain / plugin->segment.n_active; for (ucurl = (UgetCurl*) plugin->segment.list.head; ucurl; ucurl=ucurl->next) { if (ucurl->state != UGET_CURL_RUN) continue; ucurl->limit[idx] = ucurl->speed[idx] + remain; if (ucurl->limit[idx] < MIN_SPEED_LIMIT) ucurl->limit[idx] = MIN_SPEED_LIMIT; ucurl->limit_changed = TRUE; } } static void disable_speed_limit(UgetPluginCurl* plugin, int idx) { UgetCurl* ugcurl; ugcurl = (UgetCurl*) plugin->segment.list.head; for (; ugcurl; ugcurl = ugcurl->next) { ugcurl->limit[idx] = 0; ugcurl->limit_changed = TRUE; } } static void adjust_speed_limit(UgetPluginCurl* plugin) { if (plugin->segment.n_active == 0) return; // download if (plugin->limit.download > 0) adjust_speed_limit_index(plugin, 0, plugin->limit.download - plugin->speed.download); else if (plugin->limit_changed) disable_speed_limit(plugin, 0); // upload if (plugin->limit.upload > 0) adjust_speed_limit_index(plugin, 1, plugin->limit.upload - plugin->speed.upload); else if (plugin->limit_changed) disable_speed_limit(plugin, 1); plugin->limit_changed = FALSE; } uget-2.2.3/uget/UgetPluginMedia.h0000664000175000017500000001146313602733704013557 00000000000000/* * * Copyright (C) 2016-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_PLUGIN_MEDIA_H #define UGET_PLUGIN_MEDIA_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetPluginMedia UgetPluginMedia; extern const UgetPluginInfo* UgetPluginMediaInfo; typedef enum { UGET_PLUGIN_MEDIA_GLOBAL = UGET_PLUGIN_AGENT_GLOBAL_DERIVED, // begin UGET_PLUGIN_MEDIA_GLOBAL_MATCH_MODE, // set parameter = (UgetMediaMatchMode) UGET_PLUGIN_MEDIA_GLOBAL_QUALITY, // set parameter = (UgetMediaQuality) UGET_PLUGIN_MEDIA_GLOBAL_TYPE, // set parameter = (UgetMediaType) } UgetPluginMediaGlobalCode; /* ---------------------------------------------------------------------------- UgetPluginMedia: It derived from UgetPluginAgent. It use libcurl to get video info. It use curl/aria2 plug-in to download media file. UgType | `--- UgetPlugin | `--- UgetPluginAgent | `--- UgetPluginMedia */ struct UgetPluginMedia { UGET_PLUGIN_AGENT_MEMBERS; /* // ------ UgType members ------ const UgetPluginInfo* info; // ------ UgetPlugin members ------ UgetEvent* messages; UgMutex mutex; int ref_count; // ------ UgetPluginAgent members ------ // This plug-in use other plug-in to download files, // so we need extra UgetPlugin and UgInfo. // plugin->target_info is a copy of UgInfo that store in UgetApp UgInfo* target_info; // target_plugin use target_info to download UgetPlugin* target_plugin; // speed limit control // limit[0] = download speed limit // limit[1] = upload speed limit int limit[2]; uint8_t limit_changed:1; // speed limit changed by user or program // control flags uint8_t paused:1; // paused by user or program uint8_t stopped:1; // all downloading thread are stopped */ uint8_t synced:1; // used by plugin_sync() uint8_t named:1; // change UgetCommon::name by title uint8_t file_renamed:1; // downloading filename changed // These UgData store in plugin->target_info UgetFiles* target_files; UgetProxy* target_proxy; UgetCommon* target_common; UgetProgress* target_progress; // plug-in use title to rename file char* title; // use these data to recount progress if plug-in download multiple files. int64_t elapsed; int retry_count; int item_index; // downloading nth files int item_total; // number of files to download }; #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Uget { const PluginInfo* const PluginMediaInfo = (const PluginInfo*) UgetPluginMediaInfo; // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct PluginMediaMethod : PluginAgentMethod {}; // This one is for directly use only. You can NOT derived it. struct PluginMedia : PluginMediaMethod, UgetPluginMedia { inline void* operator new(size_t size) { return uget_plugin_new(PluginMediaInfo); } }; }; // namespace Uget #endif // __cplusplus #endif // End of UGET_PLUGIN_MEDIA_H uget-2.2.3/uget/UgetOption.c0000664000175000017500000002473613602733704012633 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif //#include #include #include // ---------------------------------------------------------------------------- void uget_option_value_init (UgetOptionValue* value) { memset (value, 0, sizeof (UgetOptionValue)); value->category_index = -1; value->ctrl.offline = -1; } void uget_option_value_clear (UgetOptionValue* value) { ug_free (value->input_file); ug_free (value->common.folder); ug_free (value->common.file); ug_free (value->common.user); ug_free (value->common.password); ug_free (value->proxy.host); ug_free (value->proxy.user); ug_free (value->proxy.password); ug_free (value->http.user); ug_free (value->http.password); ug_free (value->http.referrer); ug_free (value->http.user_agent); ug_free (value->http.cookie_data); ug_free (value->http.cookie_file); ug_free (value->http.post_data); ug_free (value->http.post_file); ug_free (value->ftp.user); ug_free (value->ftp.password); uget_option_value_init (value); } static int mem_is_zero (char* beg, int len) { char* end; for (end = beg + len; beg < end; beg++) { if (beg[0]) return FALSE; } return TRUE; } int uget_option_value_has_ctrl (UgetOptionValue* value) { if (mem_is_zero ((char*) &value->ctrl, sizeof (value->ctrl)) == FALSE) return TRUE; else return FALSE; } int uget_option_value_to_info (UgetOptionValue* ivalue, UgInfo* info) { union { UgetCommon* common; UgetProxy* proxy; UgetHttp* http; UgetFtp* ftp; } temp; if (mem_is_zero((char*) &ivalue->common, sizeof(ivalue->common)) == FALSE) { temp.common = ug_info_realloc(info, UgetCommonInfo); temp.common->keeping.enable = TRUE; if (ivalue->common.folder) { ug_free(temp.common->folder); temp.common->folder = ivalue->common.folder; temp.common->keeping.folder = TRUE; ivalue->common.folder = NULL; } if (ivalue->common.file) { ug_free(temp.common->file); temp.common->file = ivalue->common.file; temp.common->keeping.file = TRUE; ivalue->common.file = NULL; } if (ivalue->common.user) { ug_free(temp.common->user); temp.common->user = ivalue->common.user; temp.common->keeping.user = TRUE; ivalue->common.user = NULL; } if (ivalue->common.password) { ug_free(temp.common->password); temp.common->password = ivalue->common.password; temp.common->keeping.password = TRUE; ivalue->common.password = NULL; } } if (mem_is_zero((char*) &ivalue->proxy, sizeof(ivalue->proxy)) == FALSE) { temp.proxy = ug_info_realloc(info, UgetProxyInfo); temp.proxy->keeping.enable = TRUE; if (ivalue->proxy.type) { temp.proxy->type = ivalue->proxy.type; temp.proxy->keeping.type = TRUE; ivalue->proxy.type = 0; } if (ivalue->proxy.host) { ug_free(temp.proxy->host); temp.proxy->host = ivalue->proxy.host; temp.proxy->keeping.host = TRUE; ivalue->proxy.host = NULL; } if (ivalue->proxy.port) { temp.proxy->port = ivalue->proxy.port; temp.proxy->keeping.port = TRUE; ivalue->proxy.port = 0; } if (ivalue->proxy.user) { ug_free(temp.proxy->user); temp.proxy->user = ivalue->proxy.user; temp.proxy->keeping.user = TRUE; ivalue->proxy.user = NULL; } if (ivalue->proxy.password) { ug_free(temp.proxy->password); temp.proxy->password = ivalue->proxy.password; temp.proxy->keeping.password = TRUE; ivalue->proxy.password = NULL; } } if (mem_is_zero((char*) &ivalue->http, sizeof(ivalue->http)) == FALSE) { temp.http = ug_info_realloc(info, UgetHttpInfo); temp.http->keeping.enable = TRUE; if (ivalue->http.user) { ug_free(temp.http->user); temp.http->user = ivalue->http.user; temp.http->keeping.user = TRUE; ivalue->http.user = NULL; } if (ivalue->http.password) { ug_free(temp.http->password); temp.http->password = ivalue->http.password; temp.http->keeping.password = TRUE; ivalue->http.password = NULL; } if (ivalue->http.referrer) { ug_free(temp.http->referrer); temp.http->referrer = ivalue->http.referrer; temp.http->keeping.referrer = TRUE; ivalue->http.referrer = NULL; } if (ivalue->http.user_agent) { ug_free(temp.http->user_agent); temp.http->user_agent = ivalue->http.user_agent; temp.http->keeping.user_agent = TRUE; ivalue->http.user_agent = NULL; } if (ivalue->http.cookie_data) { ug_free(temp.http->cookie_data); temp.http->cookie_data = ivalue->http.cookie_data; temp.http->keeping.cookie_data = TRUE; ivalue->http.cookie_data = NULL; } if (ivalue->http.cookie_file) { ug_free(temp.http->cookie_file); temp.http->cookie_file = ivalue->http.cookie_file; temp.http->keeping.cookie_file = TRUE; ivalue->http.cookie_file = NULL; } if (ivalue->http.post_data) { ug_free(temp.http->post_data); temp.http->post_data = ivalue->http.post_data; temp.http->keeping.post_data = TRUE; ivalue->http.post_data = NULL; } if (ivalue->http.post_file) { ug_free(temp.http->post_file); temp.http->post_file = ivalue->http.post_file; temp.http->keeping.post_file = TRUE; ivalue->http.post_file = NULL; } } if (mem_is_zero((char*) &ivalue->ftp, sizeof(ivalue->ftp)) == FALSE) { temp.ftp = ug_info_realloc(info, UgetFtpInfo); temp.ftp->keeping.enable = TRUE; if (ivalue->ftp.user) { ug_free(temp.ftp->user); temp.ftp->user = ivalue->ftp.user; temp.ftp->keeping.user = TRUE; ivalue->ftp.user = NULL; } if (ivalue->ftp.password) { ug_free(temp.ftp->password); temp.ftp->password = ivalue->ftp.password; temp.ftp->keeping.password = TRUE; ivalue->ftp.password = NULL; } } return TRUE; } UgOptionEntry uget_option_entry[] = { {"help", "?", offsetof (UgetOptionValue, version), UG_ENTRY_BOOL, "Show help options", NULL, NULL}, {"version", "V", offsetof (UgetOptionValue, version), UG_ENTRY_BOOL, "display the version of uGet and exit.", NULL, NULL}, {"quiet", NULL, offsetof (UgetOptionValue, quiet), UG_ENTRY_BOOL, "add download directly. Don't show dialog.", NULL, NULL}, {"category-index", NULL, offsetof (UgetOptionValue, category_index), UG_ENTRY_INT, "add download to Nth category.", "N", NULL}, {"input-file", "i", offsetof (UgetOptionValue, input_file), UG_ENTRY_STRING, "add URLs found in FILE.", "FILE", NULL}, {"set-offline", NULL, offsetof (UgetOptionValue, ctrl.offline), UG_ENTRY_INT, "set offline mode to N. (0=Disable)", "N", NULL}, {"folder", NULL, offsetof (UgetOptionValue, common.folder), UG_ENTRY_STRING, "placed download file in FOLDER.", "FOLDER", NULL}, {"filename", NULL, offsetof (UgetOptionValue, common.file), UG_ENTRY_STRING, "set download filename to FILE.", "FILE", NULL}, {"user", NULL, offsetof (UgetOptionValue, common.user), UG_ENTRY_STRING, "set both ftp and http user to USER.", "USER", NULL}, {"password", NULL, offsetof (UgetOptionValue, common.password), UG_ENTRY_STRING, "set both ftp and http password to PASS.", "PASS", NULL}, {"proxy-type", NULL, offsetof (UgetOptionValue, proxy.type), UG_ENTRY_INT, "set proxy type to N. (0=Don't use)", "N", NULL}, {"proxy-host", NULL, offsetof (UgetOptionValue, proxy.host), UG_ENTRY_STRING, "set proxy host to HOST.", "HOST", NULL}, {"proxy-port", NULL, offsetof (UgetOptionValue, proxy.port), UG_ENTRY_INT, "set proxy port to PORT.", "PORT", NULL}, {"proxy-user", NULL, offsetof (UgetOptionValue, proxy.user), UG_ENTRY_STRING, "set USER as proxy username.", "USER", NULL}, {"proxy-password", NULL, offsetof (UgetOptionValue, proxy.password), UG_ENTRY_STRING, "set PASS as proxy password.", "PASS", NULL}, {"http-user", NULL, offsetof (UgetOptionValue, http.user), UG_ENTRY_STRING, "set http user to USER.", "USER", NULL}, {"http-password", NULL, offsetof (UgetOptionValue, http.password), UG_ENTRY_STRING, "set http password to PASS.", "PASS", NULL}, {"http-referer", NULL, offsetof (UgetOptionValue, http.referrer), UG_ENTRY_STRING, "include `Referer: URL' header in HTTP request.", "URL", NULL}, {"http-user-agent", NULL,offsetof (UgetOptionValue, http.user_agent), UG_ENTRY_STRING, "identify as AGENT instead of default.", "AGENT", NULL}, {"http-cookie-data",NULL,offsetof (UgetOptionValue, http.cookie_data), UG_ENTRY_STRING, "load cookies from STRING.", "STRING", NULL}, {"http-cookie-file",NULL, offsetof (UgetOptionValue, http.cookie_file), UG_ENTRY_STRING, "load cookies from FILE.", "FILE", NULL}, {"http-post-data", NULL, offsetof (UgetOptionValue, http.post_data), UG_ENTRY_STRING, "use the POST method; send STRING as the data.", "STRING", NULL}, {"http-post-file", NULL, offsetof (UgetOptionValue, http.post_file), UG_ENTRY_STRING, "use the POST method; send contents of FILE", "FILE", NULL}, {"ftp-user", NULL, offsetof (UgetOptionValue, ftp.user), UG_ENTRY_STRING, "set ftp user to USER.", "USER", NULL}, {"ftp-password", NULL, offsetof (UgetOptionValue, ftp.password), UG_ENTRY_STRING, "set ftp password to PASS.", "PASS", NULL}, {NULL} }; uget-2.2.3/uget/UgetOption.h0000664000175000017500000000525113602733704012627 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_OPTION_H #define UGET_OPTION_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetOptionValue UgetOptionValue; extern UgOptionEntry uget_option_entry[]; struct UgetOptionValue { int version; int quiet; int category_index; // default = -1 char* input_file; struct { int offline; // default = -1 } ctrl; struct { char* folder; char* file; char* user; char* password; } common; struct { int type; char* host; int port; char* user; char* password; } proxy; struct { char* user; char* password; char* referrer; char* user_agent; char* cookie_data; char* cookie_file; char* post_data; char* post_file; } http; struct { char* user; char* password; } ftp; }; void uget_option_value_init (UgetOptionValue* value); void uget_option_value_clear (UgetOptionValue* value); int uget_option_value_has_ctrl (UgetOptionValue* value); int uget_option_value_to_info (UgetOptionValue* ivalue, UgInfo* info); #ifdef __cplusplus } #endif #endif // UGET_OPTION_H uget-2.2.3/uget/UgetEvent.c0000664000175000017500000001535713602733704012443 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef HAVE_CONFIG_H #include #endif #include #include // va_list, va_start(), va_end() #include #include #include #ifdef HAVE_GLIB #include // g_slice_xxx #include #else #define N_(x) x #endif // UGET_EVENT_NORMAL static const char* normal_msg[] = { NULL, // UGET_EVENT_NORMAL_CUSTOM N_("Connecting..."), // UGET_EVENT_NORMAL_CONNECT N_("Transmitting..."), // UGET_EVENT_NORMAL_TRANSMIT, N_("Retry"), // UGET_EVENT_NORMAL_RETRY, N_("Download completed"), // UGET_EVENT_NORMAL_COMPLETE, N_("Finished"), // UGET_EVENT_NORMAL_FINISH, // resumable N_("Resumable"), // UGET_EVENT_NORMAL_RESUMABLE, N_("Not Resumable"), // UGET_EVENT_NORMAL_NOT_RESUMABLE, }; static const int n_normal_msg = sizeof (normal_msg) / sizeof (char*); // UGET_EVENT_WARNING static const char* warning_msg[] = { NULL, // UGET_EVENT_WARNING_CUSTOM N_("Output file can't be renamed."), // UGET_EVENT_WARNING_FILE_RENAME_FAILED }; static const int n_warning_msg = sizeof (warning_msg) / sizeof (char*); // UGET_EVENT_ERROR static const char* error_msg[] = { NULL, // UGET_EVENT_ERROR_CUSTOM N_("couldn't connect to host."), // UGET_EVENT_ERROR_CONNECT_FAILED N_("Folder can't be created."), // UGET_EVENT_ERROR_FOLDER_CREATE_FAILED N_("File can't be created (bad filename or file exist)."), // UGET_EVENT_ERROR_FILE_CREATE_FAILED N_("File can't be opened."), // UGET_EVENT_ERROR_FILE_OPEN_FAILED N_("Unable to create thread."), // UGET_EVENT_ERROR_THREAD_CREATE_FAILED, N_("Incorrect source (different file size)."), // UGET_EVENT_ERROR_INCORRECT_SOURCE, N_("Out of resource (disk full or run out of memory)."), // UGET_EVENT_ERROR_OUT_OF_RESOURCE N_("No output file."), // UGET_EVENT_ERROR_NO_OUTPUT_FILE N_("No output setting."), // UGET_EVENT_ERROR_NO_OUTPUT_SETTING N_("Too many retries."), // UGET_EVENT_ERROR_TOO_MANY_RETRIES N_("Unsupported scheme (protocol)."), // UGET_EVENT_ERROR_UNSUPPORTED_SCHEME N_("Unsupported file."), // UGET_EVENT_ERROR_UNSUPPORTED_FILE N_("post file not found."), // UGET_EVENT_ERROR_POST_FILE_NOT_FOUND N_("cookie file not found."), // UGET_EVENT_ERROR_COOKIE_FILE_NOT_FOUND }; static const int n_error_msg = sizeof (error_msg) / sizeof (char*); // extern const UgEntry UgetEventEntry[] = { {"string", offsetof (UgetEvent, string), UG_ENTRY_STRING, NULL, NULL}, {"type", offsetof (UgetEvent, type), UG_ENTRY_INT, NULL, NULL}, {"time", offsetof (UgetEvent, time), UG_ENTRY_CUSTOM, ug_json_parse_time_t, ug_json_write_time_t}, {NULL} // null-terminated }; UgetEvent* uget_event_new (UgetEventType type, ...) { UgetEvent* event; va_list arg_list; #ifdef HAVE_GLIB event = g_slice_alloc0 (sizeof (UgetEvent)); #else event = ug_malloc0 (sizeof (UgetEvent)); #endif event->self = event; event->time = time (NULL); event->type = type; event->string = NULL; va_start (arg_list, type); switch (type) { case UGET_EVENT_ERROR: event->value.code = va_arg (arg_list, int); event->string = va_arg (arg_list, char*); if (event->string) event->string = ug_strdup (event->string); else if (event->value.code < n_error_msg) { #ifdef HAVE_GLIB event->string = ug_strdup (gettext (error_msg[event->value.code])); #else event->string = ug_strdup (error_msg[event->value.code]); #endif // HAVE_GLIB } break; case UGET_EVENT_NORMAL: event->value.code = va_arg (arg_list, int); event->string = va_arg (arg_list, char*); if (event->string) event->string = ug_strdup (event->string); else if (event->value.code < n_normal_msg) { #ifdef HAVE_GLIB event->string = ug_strdup (gettext (normal_msg[event->value.code])); #else event->string = ug_strdup (normal_msg[event->value.code]); #endif // HAVE_GLIB } break; case UGET_EVENT_WARNING: event->value.code = va_arg (arg_list, int); event->string = va_arg (arg_list, char*); if (event->string) event->string = ug_strdup (event->string); else if (event->value.code < n_warning_msg) { #ifdef HAVE_GLIB event->string = ug_strdup (gettext (warning_msg[event->value.code])); #else event->string = ug_strdup (warning_msg[event->value.code]); #endif // HAVE_GLIB } break; default: break; } va_end (arg_list); return event; } void uget_event_free (UgetEvent* event) { ug_free (event->string); #ifdef HAVE_GLIB g_slice_free1 (sizeof (UgetEvent), event); #else ug_free (event); #endif } uget-2.2.3/uget/UgetData.c0000664000175000017500000006267113602733704012234 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include // ---------------------------------------------------------------------------- // UgetCommon static void uget_common_init(UgetCommon* common); static void uget_common_final(UgetCommon* common); static int uget_common_assign(UgetCommon* common, UgetCommon* src); static const UgEntry UgetCommonEntry[] = { {"name", offsetof(UgetCommon, name), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"uri", offsetof(UgetCommon, uri), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"mirrors", offsetof(UgetCommon, mirrors), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"file", offsetof(UgetCommon, file), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"folder", offsetof(UgetCommon, folder), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"user", offsetof(UgetCommon, user), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"password", offsetof(UgetCommon, password), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"connect-timeout", offsetof(UgetCommon, connect_timeout), UG_ENTRY_UINT, NULL, NULL}, {"transmit-timeout", offsetof(UgetCommon, transmit_timeout), UG_ENTRY_UINT, NULL, NULL}, {"retry-delay", offsetof(UgetCommon, retry_delay), UG_ENTRY_INT, NULL, NULL}, {"retry-limit", offsetof(UgetCommon, retry_limit), UG_ENTRY_INT, NULL, NULL}, {"retry-count", offsetof(UgetCommon, retry_count), UG_ENTRY_INT, NULL, NULL}, {"max-connections", offsetof(UgetCommon, max_connections), UG_ENTRY_UINT, NULL, NULL}, {"max-upload-speed", offsetof(UgetCommon, max_upload_speed), UG_ENTRY_INT, NULL, NULL}, {"max-download-speed", offsetof(UgetCommon, max_download_speed), UG_ENTRY_INT, NULL, NULL}, {"timestamp", offsetof(UgetCommon, timestamp), UG_ENTRY_INT, NULL, NULL}, {NULL} // null-terminated }; static const UgDataInfo UgetCommonInfoStatic = { "common", // name sizeof(UgetCommon), // size (UgInitFunc) uget_common_init, (UgFinalFunc) uget_common_final, (UgAssignFunc) uget_common_assign, UgetCommonEntry, }; // extern const UgDataInfo* UgetCommonInfo = &UgetCommonInfoStatic; static void uget_common_init(UgetCommon* common) { common->connect_timeout = 15; common->transmit_timeout = 30; common->retry_delay = 6; common->retry_limit = 99; common->max_connections = 1; common->timestamp = TRUE; #ifndef NDEBUG common->debug_level = 1; #endif } static void uget_common_final(UgetCommon* common) { ug_free(common->name); ug_free(common->uri); ug_free(common->mirrors); ug_free(common->file); ug_free(common->folder); ug_free(common->user); ug_free(common->password); } static int uget_common_assign(UgetCommon* common, UgetCommon* src) { #if 0 // Program can NOT copy UgetCommon::name to other one. if (common->keeping.enable == FALSE || common->keeping.name == FALSE) { ug_free(common->name); common->name = (src->name) ? ug_strdup(src->name) : NULL; } #endif if (common->keeping.enable == FALSE || common->keeping.uri == FALSE) { ug_free(common->uri); common->uri = (src->uri) ? ug_strdup(src->uri) : NULL; common->keeping.uri = src->keeping.uri; } if (common->keeping.enable == FALSE || common->keeping.mirrors == FALSE) { ug_free(common->mirrors); common->mirrors = (src->mirrors) ? ug_strdup(src->mirrors) : NULL; common->keeping.mirrors = src->keeping.mirrors; } if (common->keeping.enable == FALSE || common->keeping.file == FALSE) { ug_free(common->file); common->file = (src->file) ? ug_strdup(src->file) : NULL; common->keeping.file = src->keeping.file; } if (common->keeping.enable == FALSE || common->keeping.folder == FALSE) { ug_free(common->folder); common->folder = (src->folder) ? ug_strdup(src->folder) : NULL; common->keeping.folder = src->keeping.folder; } if (common->keeping.enable == FALSE || common->keeping.user == FALSE) { ug_free(common->user); common->user = (src->user) ? ug_strdup(src->user) : NULL; common->keeping.user = src->keeping.user; } if (common->keeping.enable == FALSE || common->keeping.password == FALSE) { ug_free(common->password); common->password = (src->password) ? ug_strdup(src->password) : NULL; common->keeping.password = src->keeping.password; } // timeout if (common->keeping.enable == FALSE || common->keeping.connect_timeout == FALSE) { common->connect_timeout = src->connect_timeout; common->keeping.connect_timeout = src->keeping.connect_timeout; } if (common->keeping.enable == FALSE || common->keeping.transmit_timeout == FALSE) { common->transmit_timeout = src->transmit_timeout; common->keeping.transmit_timeout = src->keeping.transmit_timeout; } // retry if (common->keeping.enable == FALSE || common->keeping.retry_delay == FALSE) { common->retry_delay = src->retry_delay; common->keeping.retry_delay = src->keeping.retry_delay; } if (common->keeping.enable == FALSE || common->keeping.retry_limit == FALSE) { common->retry_limit = src->retry_limit; common->keeping.retry_limit = src->keeping.retry_limit; } // max connections if (common->keeping.enable == FALSE || common->keeping.max_connections == FALSE) { common->max_connections = src->max_connections; common->keeping.max_connections = src->keeping.max_connections; } // speed if (common->keeping.enable == FALSE || common->keeping.max_upload_speed == FALSE) { common->max_upload_speed = src->max_upload_speed; common->keeping.max_upload_speed = src->keeping.max_upload_speed; } if (common->keeping.enable == FALSE || common->keeping.max_download_speed == FALSE) { common->max_download_speed = src->max_download_speed; common->keeping.max_download_speed = src->keeping.max_download_speed; } // timestamp if (common->keeping.enable == FALSE || common->keeping.timestamp == FALSE) { common->timestamp = src->timestamp; common->keeping.timestamp = src->keeping.timestamp; } if (common->keeping.enable == FALSE || common->keeping.debug_level == FALSE) { common->debug_level = src->debug_level; common->keeping.debug_level = src->keeping.debug_level; } if (common->keeping.enable == FALSE) common->keeping = src->keeping; return TRUE; } // helper functions char* uget_name_from_uri_str(const char* uri) { UgUri uuri; ug_uri_init(&uuri, uri); return uget_name_from_uri(&uuri); } char* uget_name_from_uri(UgUri* uuri) { const char* filename; char* name = NULL; int length; if (uuri->scheme_len == 6 && strncmp(uuri->uri, "magnet", 6) == 0) { length = 0; filename = strstr(uuri->uri + uuri->file, "dn="); if (filename) { filename = filename + 3; length = strcspn(filename, "&"); name = ug_malloc(length + 1); ug_decode_uri(filename, length, name); if (ug_utf8_get_invalid(name, NULL) != -1) name = ug_strndup(filename, length); } } if (name == NULL) { length = ug_uri_file(uuri, &filename); if (length == 0) name = ug_strdup(uuri->uri); else name = ug_uri_get_file(uuri); } return name; } // ---------------------------------------------------------------------------- // UgetProgress static const UgEntry UgetProgressEntry[] = { {"complete", offsetof(UgetProgress, complete), UG_ENTRY_INT64, NULL, NULL}, {"total", offsetof(UgetProgress, total), UG_ENTRY_INT64, NULL, NULL}, {"elapsed", offsetof(UgetProgress, elapsed), UG_ENTRY_INT64, NULL, NULL}, {"uploaded", offsetof(UgetProgress, uploaded), UG_ENTRY_INT64, NULL, NULL}, {"percent", offsetof(UgetProgress, percent), UG_ENTRY_INT, NULL, NULL}, // {"ratio", offsetof(UgetProgress, ratio), UG_ENTRY_DOUBLE, NULL, NULL}, {NULL} // null-terminated }; static const UgDataInfo UgetProgressInfoStatic = { "progress", // name sizeof(UgetProgress), // size (UgInitFunc) NULL, (UgFinalFunc) NULL, (UgAssignFunc) NULL, UgetProgressEntry, }; // extern const UgDataInfo* UgetProgressInfo = &UgetProgressInfoStatic; // ---------------------------------------------------------------------------- // UgetProxy static void uget_proxy_final (UgetProxy* proxy); static int uget_proxy_assign (UgetProxy* proxy, UgetProxy* src); #ifdef HAVE_LIBPWMD static const UgEntry UgetProxyPwmdEntry[] = { {"socket", offsetof(struct UgetProxyPwmd, socket), UG_ENTRY_STRING, NULL, NULL}, {"socket-args", offsetof(struct UgetProxyPwmd, socket_args), UG_ENTRY_STRING, NULL, NULL}, {"file", offsetof(struct UgetProxyPwmd, file), UG_ENTRY_STRING, NULL, NULL}, {"element", offsetof(struct UgetProxyPwmd, element), UG_ENTRY_STRING, NULL, NULL}, }; #endif // End of HAVE_LIBPWMD static const UgEntry UgetProxyEntry[] = { {"host", offsetof(UgetProxy, host), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"port", offsetof(UgetProxy, port), UG_ENTRY_UINT, NULL, NULL}, {"type", offsetof(UgetProxy, type), UG_ENTRY_UINT, NULL, NULL}, {"user", offsetof(UgetProxy, user), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"password", offsetof(UgetProxy, password), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, #ifdef HAVE_LIBPWMD {"pwmd", offsetof(UgetProxy, pwmd), UG_ENTRY_OBJECT, (void*) UgetProxyPwmdEntry, NULL}, #endif {NULL}, // null-terminated }; static const UgDataInfo UgetProxyInfoStatic = { "proxy", // name sizeof(UgetProxy), // size (UgInitFunc) NULL, (UgFinalFunc) uget_proxy_final, (UgAssignFunc) uget_proxy_assign, UgetProxyEntry, // entry }; // extern const UgDataInfo* UgetProxyInfo = &UgetProxyInfoStatic; static void uget_proxy_final(UgetProxy* proxy) { ug_free(proxy->host); ug_free(proxy->user); ug_free(proxy->password); #ifdef HAVE_LIBPWMD ug_free(proxy->pwmd.socket); ug_free(proxy->pwmd.socket_args); ug_free(proxy->pwmd.file); ug_free(proxy->pwmd.element); #endif // HAVE_LIBPWMD } static int uget_proxy_assign(UgetProxy* proxy, UgetProxy* src) { if (proxy->keeping.enable == FALSE || proxy->keeping.host == FALSE) { ug_free(proxy->host); proxy->host = (src->host) ? ug_strdup(src->host) : NULL; proxy->keeping.host = src->keeping.host; } if (proxy->keeping.enable == FALSE || proxy->keeping.port == FALSE) { proxy->port = src->port; proxy->keeping.port = src->keeping.port; } if (proxy->keeping.enable == FALSE || proxy->keeping.type == FALSE) { proxy->type = src->type; proxy->keeping.type = src->keeping.type; } if (proxy->keeping.enable == FALSE || proxy->keeping.user == FALSE) { ug_free(proxy->user); proxy->user = (src->user) ? ug_strdup(src->user) : NULL; proxy->keeping.user = src->keeping.user; } if (proxy->keeping.enable == FALSE || proxy->keeping.password == FALSE) { ug_free(proxy->password); proxy->password = (src->password) ? ug_strdup(src->password) : NULL; proxy->keeping.password = src->keeping.password; } #ifdef HAVE_LIBPWMD if (proxy->keeping.enable == FALSE || proxy->pwmd.keeping.socket == FALSE) { ug_free(proxy->pwmd.socket); proxy->pwmd.socket = (src->pwmd.socket) ? ug_strdup(src->pwmd.socket) : NULL; proxy->pwmd.keeping.socket = src->pwmd.keeping.socket; } if (proxy->keeping.enable == FALSE || proxy->pwmd.keeping.socket_args == FALSE) { ug_free(proxy->pwmd.socket_args); proxy->pwmd.socket_args = (src->pwmd.socket_args) ? ug_strdup(src->pwmd.socket_args) : NULL; proxy->pwmd.keeping.socket_args = src->pwmd.keeping.socket_args; } if (proxy->keeping.enable == FALSE || proxy->pwmd.keeping.file == FALSE) { ug_free(proxy->pwmd.file); proxy->pwmd.file = (src->pwmd.file) ? ug_strdup(src->pwmd.file) : NULL; proxy->pwmd.keeping.file = src->pwmd.keeping.file; } if (proxy->keeping.enable == FALSE || proxy->pwmd.keeping.element == FALSE) { ug_free(proxy->pwmd.element); proxy->pwmd.element = (src->pwmd.element) ? ug_strdup(src->pwmd.element) : NULL; proxy->pwmd.keeping.element = src->pwmd.keeping.element; } #endif // HAVE_LIBPWMD if (proxy->keeping.enable == FALSE) proxy->keeping = src->keeping; return TRUE; } // --------------------------------------------------------------------------- // UgetHttp static void uget_http_init (UgetHttp* http); static void uget_http_final (UgetHttp* http); static int uget_http_assign (UgetHttp* http, UgetHttp* src); static const UgEntry UgetHttpEntry[] = { {"user", offsetof(UgetHttp, user), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"password", offsetof(UgetHttp, password), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"referrer", offsetof(UgetHttp, referrer), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"user-agent", offsetof(UgetHttp, user_agent), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"post-data", offsetof(UgetHttp, post_data), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"post-file", offsetof(UgetHttp, post_file), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"cookie-data", offsetof(UgetHttp, cookie_data), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"cookie-file", offsetof(UgetHttp, cookie_file), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"redirection-limit", offsetof(UgetHttp, redirection_limit),UG_ENTRY_UINT, NULL, NULL}, {NULL}, // null-terminated }; static const UgDataInfo UgetHttpInfoStatic = { "http", // name sizeof(UgetHttp), // size (UgInitFunc) uget_http_init, (UgFinalFunc) uget_http_final, (UgAssignFunc) uget_http_assign, UgetHttpEntry, // entry }; // extern const UgDataInfo* UgetHttpInfo = &UgetHttpInfoStatic; static void uget_http_init(UgetHttp* http) { http->redirection_limit = 30; } static void uget_http_final(UgetHttp* http) { ug_free(http->user); ug_free(http->password); ug_free(http->referrer); ug_free(http->user_agent); ug_free(http->post_data); ug_free(http->post_file); ug_free(http->cookie_data); ug_free(http->cookie_file); } static int uget_http_assign(UgetHttp* http, UgetHttp* src) { if (http->keeping.enable == FALSE || http->keeping.user == FALSE) { ug_free(http->user); http->user = (src->user) ? ug_strdup(src->user) : NULL; http->keeping.user = src->keeping.user; } if (http->keeping.enable == FALSE || http->keeping.password == FALSE) { ug_free(http->password); http->password = (src->password) ? ug_strdup(src->password) : NULL; http->keeping.password = src->keeping.password; } if (http->keeping.enable == FALSE || http->keeping.referrer == FALSE) { ug_free(http->referrer); http->referrer = (src->referrer) ? ug_strdup(src->referrer) : NULL; http->keeping.referrer = src->keeping.referrer; } if (http->keeping.enable == FALSE || http->keeping.user_agent == FALSE) { ug_free(http->user_agent); http->user_agent = (src->user_agent) ? ug_strdup(src->user_agent) : NULL; http->keeping.user_agent = src->keeping.user_agent; } if (http->keeping.enable == FALSE || http->keeping.post_data == FALSE) { ug_free(http->post_data); http->post_data = (src->post_data) ? ug_strdup(src->post_data) : NULL; http->keeping.post_data = src->keeping.post_data; } if (http->keeping.enable == FALSE || http->keeping.post_file == FALSE) { ug_free(http->post_file); http->post_file = (src->post_file) ? ug_strdup(src->post_file) : NULL; http->keeping.post_file = src->keeping.post_file; } if (http->keeping.enable == FALSE || http->keeping.cookie_data == FALSE) { ug_free (http->cookie_data); http->cookie_data = (src->cookie_data) ? ug_strdup(src->cookie_data) : NULL; http->keeping.cookie_data = src->keeping.cookie_data; } if (http->keeping.enable == FALSE || http->keeping.cookie_file == FALSE) { ug_free(http->cookie_file); http->cookie_file = (src->cookie_file) ? ug_strdup(src->cookie_file) : NULL; http->keeping.cookie_file = src->keeping.cookie_file; } if (http->keeping.enable == FALSE || http->keeping.redirection_limit == FALSE) { http->redirection_limit = src->redirection_limit; http->keeping.redirection_limit = src->keeping.redirection_limit; } if (http->keeping.enable == FALSE) http->keeping = src->keeping; return TRUE; } // --------------------------------------------------------------------------- // UgetFtp static void uget_ftp_final (UgetFtp* ftp); static int uget_ftp_assign (UgetFtp* ftp, UgetFtp* src); static const UgEntry UgetFtpEntry[] = { {"user", offsetof(UgetFtp, user), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"password", offsetof(UgetFtp, password), UG_ENTRY_STRING, NULL, UG_ENTRY_NO_NULL}, {"active-mode", offsetof(UgetFtp, active_mode), UG_ENTRY_INT, NULL, NULL}, {NULL}, // null-terminated }; static const UgDataInfo UgetFtpInfoStatic = { "ftp", // name sizeof(UgetFtp), // size (UgInitFunc) NULL, (UgFinalFunc) uget_ftp_final, (UgAssignFunc) uget_ftp_assign, UgetFtpEntry, // entry }; // extern const UgDataInfo* UgetFtpInfo = &UgetFtpInfoStatic; static void uget_ftp_final(UgetFtp* ftp) { ug_free(ftp->user); ug_free(ftp->password); } static int uget_ftp_assign(UgetFtp* ftp, UgetFtp* src) { if (ftp->keeping.enable == FALSE || ftp->keeping.user == FALSE) { ug_free(ftp->user); ftp->user = (src->user) ? ug_strdup(src->user) : NULL; ftp->keeping.user = src->keeping.user; } if (ftp->keeping.enable == FALSE || ftp->keeping.password == FALSE) { ug_free(ftp->password); ftp->password = (src->password) ? ug_strdup(src->password) : NULL; ftp->keeping.password = src->keeping.password; } if (ftp->keeping.enable == FALSE || ftp->keeping.active_mode == FALSE) { ftp->active_mode = src->active_mode; ftp->keeping.active_mode = src->keeping.active_mode; } if (ftp->keeping.enable == FALSE) ftp->keeping = src->keeping; return TRUE; } // --------------------------------------------------------------------------- // UgetLog static void uget_log_final(UgetLog* log); static void ug_json_write_list_message(UgJson* json, UgList* list); static UgJsonError ug_json_parse_list_message(UgJson* json, const char* name, const char* value, void* list, void* none); static const UgEntry UgetLogEntry[] = { {"added-time", offsetof(UgetLog, added_time), UG_ENTRY_CUSTOM, ug_json_parse_time_t, ug_json_write_time_t}, {"completed-time", offsetof(UgetLog, completed_time), UG_ENTRY_CUSTOM, ug_json_parse_time_t, ug_json_write_time_t}, {"messages", offsetof(UgetLog, messages), UG_ENTRY_ARRAY, ug_json_parse_list_message, ug_json_write_list_message}, {NULL}, // null-terminated }; static const UgDataInfo UgetLogInfoStatic = { "log", // name sizeof(UgetLog), // size (UgInitFunc) NULL, (UgFinalFunc) uget_log_final, (UgAssignFunc) NULL, UgetLogEntry, // entry }; // extern const UgDataInfo* UgetLogInfo = &UgetLogInfoStatic; static void uget_log_final(UgetLog* log) { ug_list_foreach(&log->messages, (UgForeachFunc) uget_event_free, NULL); } static UgJsonError ug_json_parse_list_message(UgJson* json, const char* name, const char* value, void* list, void* none) { UgetEvent* event; if (json->type != UG_JSON_OBJECT) return UG_JSON_ERROR_TYPE_NOT_MATCH; event = uget_event_new(UGET_EVENT_EMPTY); ug_list_append(list, (UgLink*) event); ug_json_push(json, ug_json_parse_entry, event, (void*) UgetEventEntry); return UG_JSON_ERROR_NONE; } void ug_json_write_list_message(UgJson* json, UgList* list) { UgetEvent* link; for (link = (void*)list->head; link; link = link->next) { ug_json_write_object_head(json); ug_json_write_entry(json, link, UgetEventEntry); ug_json_write_object_tail(json); } } // ---------------------------------------------------------------------------- // UgetRelation static void uget_relation_init(UgetRelation* relation); static void uget_relation_final(UgetRelation* relation); // deprecated static UgJsonError ug_json_parse_task_priority (UgJson* json, const char* name, const char* value, void* prelation, void* none); static const UgEntry UgetRelationEntry[] = { {"group", offsetof(UgetRelation, group), UG_ENTRY_INT, NULL, NULL}, {"priority", offsetof(UgetRelation, priority), UG_ENTRY_INT, NULL, NULL}, // deprecated {"task", 0, UG_ENTRY_CUSTOM, ug_json_parse_task_priority, NULL}, {NULL} // null-terminated }; static const UgDataInfo UgetRelationInfoStatic = { "relation", // name sizeof(UgetRelation), // size (UgInitFunc) uget_relation_init, (UgFinalFunc) uget_relation_final, (UgAssignFunc) NULL, UgetRelationEntry, }; // extern const UgDataInfo* UgetRelationInfo = &UgetRelationInfoStatic; static void uget_relation_init(UgetRelation* relation) { relation->priority = UGET_PRIORITY_NORMAL; } static void uget_relation_final(UgetRelation* relation) { ug_free(relation->task); } // deprecated - convert old format to new static UgJsonError ug_json_parse_task_priority (UgJson* json, const char* name, const char* value, void* prelation, void* none) { UgetRelation* relation = prelation; if (strcmp(name, "task") == 0 && json->type == UG_JSON_OBJECT) ug_json_push(json, ug_json_parse_task_priority, relation, none); else if (strcmp(name, "priority") == 0 && json->type == UG_JSON_NUMBER) relation->priority = strtol(value, NULL, 10); return UG_JSON_ERROR_NONE; } // ---------------------------------------------------------------------------- // UgetCategory static void uget_category_init(UgetCategory* category); static void uget_category_final(UgetCategory* category); static int uget_category_assign(UgetCategory* category, UgetCategory* src); static void ug_array_str_copy(UgArrayStr* dest, UgArrayStr* src); static const UgEntry UgetCategoryEntry[] = { {"hosts", offsetof(UgetCategory, hosts), UG_ENTRY_ARRAY, ug_json_parse_array_string, ug_json_write_array_string}, {"schemes", offsetof(UgetCategory, schemes), UG_ENTRY_ARRAY, ug_json_parse_array_string, ug_json_write_array_string}, {"file-exts", offsetof(UgetCategory, file_exts), UG_ENTRY_ARRAY, ug_json_parse_array_string, ug_json_write_array_string}, {"active-limit", offsetof(UgetCategory, active_limit), UG_ENTRY_INT, NULL, NULL}, {"finished-limit", offsetof(UgetCategory, finished_limit), UG_ENTRY_INT, NULL, NULL}, {"recycled-limit", offsetof(UgetCategory, recycled_limit), UG_ENTRY_INT, NULL, NULL}, {NULL} // null-terminated }; static const UgDataInfo UgetCategoryInfoStatic = { "category", // name sizeof(UgetCategory), // size (UgInitFunc) uget_category_init, (UgFinalFunc) uget_category_final, (UgAssignFunc) uget_category_assign, UgetCategoryEntry, }; // extern const UgDataInfo* UgetCategoryInfo = &UgetCategoryInfoStatic; static void uget_category_init(UgetCategory* category) { ug_array_init(&category->hosts, sizeof(char*), 8); ug_array_init(&category->schemes, sizeof(char*), 8); ug_array_init(&category->file_exts, sizeof(char*), 8); category->active_limit = 3; category->finished_limit = 300; category->recycled_limit = 300; } static void uget_category_final(UgetCategory* category) { ug_array_foreach_str(&category->hosts, (UgForeachFunc) ug_free, NULL); ug_array_foreach_str(&category->schemes, (UgForeachFunc) ug_free, NULL); ug_array_foreach_str(&category->file_exts, (UgForeachFunc) ug_free, NULL); ug_array_clear(&category->hosts); ug_array_clear(&category->schemes); ug_array_clear(&category->file_exts); } static int uget_category_assign(UgetCategory* category, UgetCategory* src) { category->active_limit = src->active_limit; category->finished_limit = src->finished_limit; category->recycled_limit = src->recycled_limit; ug_array_str_copy(&category->schemes, &src->schemes); ug_array_str_copy(&category->hosts, &src->hosts); ug_array_str_copy(&category->file_exts, &src->file_exts); return TRUE; } static void ug_array_str_copy(UgArrayStr* dest, UgArrayStr* src) { int index; ug_array_foreach_str(dest, (UgForeachFunc) ug_free, NULL); dest->length = 0; for (index = 0; index < src->length; index++) *(char**) ug_array_alloc(dest, 1) = ug_strdup(src->at[index]); } uget-2.2.3/uget/pwmd.h0000664000175000017500000000217113602733704011477 00000000000000/* Copyright (C) 2011-2016 Ben Kibbey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02110-1301 USA */ #ifndef PWMD_H #define PWMD_H #include #include "UgetData.h" struct pwmd_proxy_s { gchar* hostname; gchar* username; gchar* password; gchar* type; gchar* path; gint port; }; gpg_error_t ug_set_pwmd_proxy_options(struct pwmd_proxy_s*, UgetProxy*); void ug_close_pwmd(struct pwmd_proxy_s*); #endif uget-2.2.3/uget/UgetPluginEmpty.c0000664000175000017500000001621513602733704013631 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include // ---------------------------------------------------------------------------- // UgetPluginInfo (derived from UgTypeInfo) static void plugin_init (UgetPluginEmpty* plugin); static void plugin_final(UgetPluginEmpty* plugin); static int plugin_ctrl (UgetPluginEmpty* plugin, int code, void* data); static int plugin_accept(UgetPluginEmpty* plugin, UgInfo* node_info); static int plugin_sync (UgetPluginEmpty* plugin, UgInfo* node_info); static UgetResult global_set(int code, void* parameter); static UgetResult global_get(int code, void* parameter); static const char* schemes[] = {"http", "ftp", NULL}; static const char* types[] = {"torrent", NULL}; static const UgetPluginInfo UgetPluginEmptyInfoStatic = { "empty", sizeof(UgetPluginEmpty), (UgInitFunc) plugin_init, (UgFinalFunc) plugin_final, (UgetPluginSyncFunc) plugin_accept, (UgetPluginSyncFunc) plugin_sync, (UgetPluginCtrlFunc) plugin_ctrl, NULL, schemes, types, (UgetPluginGlobalFunc) global_set, (UgetPluginGlobalFunc) global_get }; // extern const UgetPluginInfo* UgetPluginEmptyInfo = &UgetPluginEmptyInfoStatic; // ---------------------------------------------------------------------------- // global data and it's functions. static struct { int initialized; int ref_count; } global = {0, 0}; static UgetResult global_init(void) { if (global.initialized == FALSE) { // // your global initialized code // if initialization failed, // return UGET_RESULT_ERROR; // global.initialized = TRUE; puts("UgetPluginEmpty global initialize"); } global.ref_count++; return UGET_RESULT_OK; } static void global_ref(void) { global.ref_count++; } static void global_unref(void) { if (global.initialized == FALSE) return; global.ref_count--; if (global.ref_count == 0) { global.initialized = FALSE; // // your global finalized code // puts("UgetPluginEmpty global finalize"); } } static UgetResult global_set(int option, void* parameter) { switch (option) { case UGET_PLUGIN_GLOBAL_INIT: // do global initialize/uninitialize here if (parameter) return global_init(); else global_unref(); break; default: return UGET_RESULT_UNSUPPORT; } return UGET_RESULT_OK; } static UgetResult global_get(int option, void* parameter) { switch (option) { case UGET_PLUGIN_GLOBAL_INIT: if (parameter) *(int*)parameter = global.initialized; break; case UGET_PLUGIN_GLOBAL_ERROR_CODE: if (parameter) *(int*)parameter = 0; break; default: return UGET_RESULT_UNSUPPORT; } return UGET_RESULT_OK; } // ---------------------------------------------------------------------------- // control functions static void plugin_init(UgetPluginEmpty* plugin) { if (global.initialized == FALSE) global_init(); else global_ref(); // // your initialized code. // } static void plugin_final(UgetPluginEmpty* plugin) { // // your finalized code. // // clear UgetCommon if (plugin->common) ug_data_free(plugin->common); global_unref(); } // ---------------------------------------------------------------------------- // plugin_ctrl static int plugin_ctrl_speed(UgetPluginEmpty* plugin, int* speed); static int plugin_start(UgetPluginEmpty* plugin); static void plugin_stop(UgetPluginEmpty* plugin); static int plugin_ctrl(UgetPluginEmpty* plugin, int code, void* data) { switch (code) { case UGET_PLUGIN_CTRL_START: if (plugin->common) return plugin_start(plugin); break; case UGET_PLUGIN_CTRL_STOP: plugin_stop(plugin); return TRUE; case UGET_PLUGIN_CTRL_SPEED: // speed control return plugin_ctrl_speed(plugin, data); // state ---------------- case UGET_PLUGIN_GET_STATE: *(int*)data = FALSE; return TRUE; default: break; } return FALSE; } static int plugin_ctrl_speed(UgetPluginEmpty* plugin, int* speed) { UgetCommon* common; int value; // notify plug-in that speed limit has been changed if (plugin->limit[0] != speed[0] || plugin->limit[1] != speed[1]) plugin->limit_changed = TRUE; // decide speed limit by user specified data. if (plugin->common == NULL) { plugin->limit[0] = speed[0]; plugin->limit[1] = speed[1]; } else { common = plugin->common; // download value = speed[0]; if (common->max_download_speed) { if (value > common->max_download_speed || value == 0) { value = common->max_download_speed; plugin->limit_changed = TRUE; } } plugin->limit[0] = value; // upload value = speed[1]; if (common->max_upload_speed) { if (value > common->max_upload_speed || value == 0) { value = common->max_upload_speed; plugin->limit_changed = TRUE; } } plugin->limit[1] = value; } return plugin->limit_changed; } // ---------------------------------------------------------------------------- // plugin_accept/plugin_sync // return TRUE if UgInfo was accepted by plug-in. // return FALSE if UgInfo is lack of necessary data. static int plugin_accept(UgetPluginEmpty* plugin, UgInfo* node_info) { UgetCommon* common; common = ug_info_get(node_info, UgetCommonInfo); if (common == NULL || common->uri == NULL) return FALSE; plugin->common = ug_data_copy(plugin->common); return TRUE; } // return TRUE if plug-in is running or some data need to sync. // return FALSE if plug-in was stopped and no data need to sync. static int plugin_sync(UgetPluginEmpty* plugin, UgInfo* node_info) { return FALSE; } // ---------------------------------------------------------------------------- static int plugin_start(UgetPluginEmpty* plugin) { return TRUE; } static void plugin_stop(UgetPluginEmpty* plugin) { } uget-2.2.3/uget/UgetCurl.h0000664000175000017500000001306213602733704012263 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGET_CURL_H #define UGET_CURL_H #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #ifdef HAVE_CONFIG #include #endif #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgetCurl UgetCurl; typedef int (*UgetCurlFunc) (UgetCurl* ugcurl, void* data); // UgetCurlState flow: // // UGET_CURL_READY // | // `--> UGET_CURL_RUN -+-> UGET_CURL_OK ---> UGET_CURL_RESPLIT // | // +-> UGET_CURL_ABORT // | // +-> UGET_CURL_ERROR // | // +-> UGET_CURL_RETRY // | // `-> UGET_CURL_NOT_RESUMABLE enum UgetCurlState { UGET_CURL_RESPLIT, // used by curl plug-in UGET_CURL_READY, UGET_CURL_RUN, UGET_CURL_OK, UGET_CURL_ABORT, // paused by user UGET_CURL_ERROR, UGET_CURL_RETRY, UGET_CURL_NOT_RESUMABLE, // redownload + retry }; // ---------------------------------------------------------------------------- // UgetCurl: used by UgetPluginCurl struct UgetCurl { UG_LINK_MEMBERS (UgetCurl, UgetCurl, self); // UgetCurl* self; // UgetCurl* next; // UgetCurl* prev; UgThread thread; CURL* curl; int64_t beg; int64_t end; int64_t pos; // current position UgetCommon* common; UgetHttp* http; UgetFtp* ftp; UgetEvent* event; // struct curl_slist* ftp_command; struct { UgUri part; void* link; } uri; // size[0] = downloaded size // size[1] = uploaded size // speed[0] = downloading speed // speed[1] = uploading speed // limit[0] = download speed limit // limit[1] = upload speed limit int64_t size[2]; int64_t speed[2]; int64_t limit[2]; // file stream struct { FILE* output; FILE* post; } file; // if user specify prepare.func, // UgetCurl will call prepare.func to open file in write function. struct { UgetCurlFunc func; void* data; } prepare; // HTTP header response data // set header_store = TRUE to enable this. struct { char* uri; char* filename; } header; long response; // from HTTP or FTP int event_code; // for CURLE_WRITE_ERROR (UGET_CURL_ERROR) uint8_t state; // UgetCurlState uint8_t progress_count; uint8_t scheme_type:4; uint8_t restart:1; // flags uint8_t limit_changed:1; // speed limit changed uint8_t header_store:1; // save uri and filename from header. uint8_t resumable:1; // get resumable in header callback uint8_t stopped:1; // downloading thread is stopped uint8_t paused:1; // paused by user uint8_t tested:1; // URI tested uint8_t test_ok:1; // URI test ok uint8_t split:1; // split previous segment uint8_t html:1; // "Content-Type: text/html" char error_string[CURL_ERROR_SIZE]; }; UgetCurl* uget_curl_new (void); void uget_curl_free (UgetCurl* ugcurl); void uget_curl_run (UgetCurl* ugcurl, int joinable); int uget_curl_open_file (UgetCurl* ugcurl, const char* filename); void uget_curl_close_file (UgetCurl* ugcurl); void uget_curl_set_url (UgetCurl* ugcurl, const char* uri); void uget_curl_set_speed (UgetCurl* ugcurl, int64_t dlspeed, int64_t ulspeed); void uget_curl_set_common (UgetCurl* ugcurl, UgetCommon* common); void uget_curl_set_proxy (UgetCurl* ugcurl, UgetProxy* proxy); int uget_curl_set_http (UgetCurl* ugcurl, UgetHttp* http); void uget_curl_set_ftp (UgetCurl* ugcurl, UgetFtp* ftp); void uget_curl_decide_scheme (UgetCurl* ugcurl, const char* uri); void uget_curl_decide_login (UgetCurl* ugcurl); #define uget_curl_join_thread(ugcurl) ug_thread_join (&(ugcurl)->thread) void ug_curl_set_proxy (CURL* curl, UgetProxy* proxy); #ifdef __cplusplus } #endif #endif // End of UGET_CURL_H uget-2.2.3/configure0000775000175000017500000077215413602733761011344 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for uget 2.2.3. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='uget' PACKAGE_TARNAME='uget' PACKAGE_VERSION='2.2.3' PACKAGE_STRING='uget 2.2.3' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS WITH_LIBPWMD_FALSE WITH_LIBPWMD_TRUE LIBPWMD_LIBS LIBPWMD_CFLAGS GSTREAMER_LIBS GSTREAMER_CFLAGS APP_INDICATOR_LIBS APP_INDICATOR_CFLAGS LIBNOTIFY_LIBS LIBNOTIFY_CFLAGS LIBCRYPTO_LIBS LIBCRYPTO_CFLAGS LIBGCRYPT_LIBS LIBGCRYPT_CFLAGS LIBGCRYPT_CONFIG CURL_LIBS CURL_CFLAGS CURL_CONFIG LFS_LDFLAGS LFS_CFLAGS GETCONF PTHREAD_LIBS PTHREAD_CFLAGS GLIB_LIBS GLIB_CFLAGS GTK_LIBS GTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS MSGFMT_OPTS EGREP GREP CPP GETTEXT_PACKAGE ALL_LINGUAS INTLTOOL_PERL GMSGFMT MSGFMT MSGMERGE XGETTEXT INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE intltool__v_merge_options_0 intltool__v_merge_options_ INTLTOOL_V_MERGE_OPTIONS INTLTOOL__v_MERGE_0 INTLTOOL__v_MERGE_ INTLTOOL_V_MERGE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE USE_NLS RANLIB ac_ct_AR AR am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_nls with_gnutls with_openssl enable_notify enable_appindicator enable_gstreamer enable_pwmd enable_rss_notify enable_unix_socket ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBCRYPTO_CFLAGS LIBCRYPTO_LIBS LIBNOTIFY_CFLAGS LIBNOTIFY_LIBS APP_INDICATOR_CFLAGS APP_INDICATOR_LIBS GSTREAMER_CFLAGS GSTREAMER_LIBS LIBPWMD_CFLAGS LIBPWMD_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures uget 2.2.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/uget] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of uget 2.2.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-nls do not use Native Language Support --disable-notify Disable libnotify support. --enable-appindicator=[no/auto/yes] Build support for application indicators. --disable-gstreamer Disable GStreamer audio support. --enable-pwmd Enable pwmd support. --disable-rss-notify Disable RSS Notify. --enable-unix-socket Enable UNIX Domain Socket. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnutls=[no/auto/yes] Enable GnuTLS support. (default is auto) --with-openssl=[no/yes] Enable OpenSSL support. Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config LIBCRYPTO_CFLAGS C compiler flags for LIBCRYPTO, overriding pkg-config LIBCRYPTO_LIBS linker flags for LIBCRYPTO, overriding pkg-config LIBNOTIFY_CFLAGS C compiler flags for LIBNOTIFY, overriding pkg-config LIBNOTIFY_LIBS linker flags for LIBNOTIFY, overriding pkg-config APP_INDICATOR_CFLAGS C compiler flags for APP_INDICATOR, overriding pkg-config APP_INDICATOR_LIBS linker flags for APP_INDICATOR, overriding pkg-config GSTREAMER_CFLAGS C compiler flags for GSTREAMER, overriding pkg-config GSTREAMER_LIBS linker flags for GSTREAMER, overriding pkg-config LIBPWMD_CFLAGS C compiler flags for LIBPWMD, overriding pkg-config LIBPWMD_LIBS linker flags for LIBPWMD, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF uget configure 2.2.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by uget $as_me 2.2.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ## Use automake (add automake to autogen.sh) am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='uget' VERSION='2.2.3' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ## --- Use config.h (autogen.sh add autoheader) ac_config_headers="$ac_config_headers config.h" ## --- Determine a C compiler to use. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ## --- Check C compiler -c -o options. ## --- Determine a C++ compiler to use. # AC_PROG_CXX ## --- Check for the ar command to use if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac ## Use library (static library) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi ## --- Check function posix_fallocate() for ac_func in posix_fallocate do : ac_fn_c_check_func "$LINENO" "posix_fallocate" "ac_cv_func_posix_fallocate" if test "x$ac_cv_func_posix_fallocate" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_POSIX_FALLOCATE 1 _ACEOF fi done ## --- Check function ftruncate() for ac_func in ftruncate do : ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" if test "x$ac_cv_func_ftruncate" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FTRUNCATE 1 _ACEOF fi done ## ---------------------------------------------- ## L10N (add intltoolize to autogen.sh) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n ""; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= " >&5 $as_echo_n "checking for intltool >= ... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error $? "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile ## replace ALL_LINGUAS with po/LINGUAS # ALL_LINGUAS="" GETTEXT_PACKAGE="$PACKAGE" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" cat >>confdefs.h <<_ACEOF #define LOCALEDIR "$localedir" _ACEOF ## Use AM_GLIB_DEFINE_LOCALEDIR with AC_CONFIG_HEADERS ## ---------------------------------------------- ## GTK+ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 $as_echo_n "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= 3.4" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= 3.4" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= 3.4" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= 3.4" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-3.0 >= 3.4) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi ## ---------------- ## glib (add HAVE_GLIB definition to config.h) if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then have_glib="yes" else have_glib="no" fi if test x$have_glib = xyes ; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 $as_echo_n "checking for GLIB... " >&6; } if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLIB_LIBS"; then pkg_cv_GLIB_LIBS="$GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0" 2>&1` else GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLIB_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glib-2.0) were not met: $GLIB_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLIB_CFLAGS and GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLIB_CFLAGS and GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define HAVE_GLIB 1" >>confdefs.h fi ## ---------------- ## pthread { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 $as_echo_n "checking for pthread_create in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_create+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_create (); int main () { return pthread_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_create=yes else ac_cv_lib_pthread_pthread_create=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 $as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPTHREAD 1 _ACEOF LIBS="-lpthread $LIBS" else as_fn_error $? "required library pthread missing" "$LINENO" 5 fi PTHREAD_CFLAGS="-pthread" PTHREAD_LIBS="-pthread" ## ---------------- ## LFS # Extract the first word of "getconf", so it can be a program name with args. set dummy getconf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GETCONF+:} false; then : $as_echo_n "(cached) " >&6 else case $GETCONF in [\\/]* | ?:[\\/]*) ac_cv_path_GETCONF="$GETCONF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GETCONF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GETCONF=$ac_cv_path_GETCONF if test -n "$GETCONF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETCONF" >&5 $as_echo "$GETCONF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$GETCONF" != "x" ; then LFS_CFLAGS=`$GETCONF LFS_CFLAGS` LFS_LDFLAGS=`$GETCONF LFS_LDFLAGS` fi ## ---------------- ## cURL # Extract the first word of "curl-config", so it can be a program name with args. set dummy curl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CURL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $CURL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_CURL_CONFIG="$CURL_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CURL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CURL_CONFIG=$ac_cv_path_CURL_CONFIG if test -n "$CURL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CURL_CONFIG" >&5 $as_echo "$CURL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$CURL_CONFIG" = "x" ; then as_fn_error please install libcurl "Unable to find curl-config" "$LINENO" 5 fi CURL_CFLAGS=`$CURL_CONFIG --cflags` CURL_LIBS=`$CURL_CONFIG --libs` let CURL_VERNUM=0x0`$CURL_CONFIG --vernum` let CURL_VERMIN=0x071301 # 7.19.1 if test $CURL_VERNUM -lt $CURL_VERMIN; then as_fn_error $? "Requires libcurl version >= 7.19.1" "$LINENO" 5 fi ## ---------------- ## GnuTLS # Check whether --with-gnutls was given. if test "${with_gnutls+set}" = set; then : withval=$with_gnutls; with_gnutls="$withval" else with_gnutls="no" fi if test "x$with_gnutls" != "xno"; then # AC_CHECK_HEADER(gcrypt.h, [USE_GNUTLS_GCRYPT=1], [USE_GNUTLS_GCRYPT=0]) # if test "$USE_GNUTLS_GCRYPT" = "1"; then # LIBGCRYPT_CFLAGS="" # AC_SUBST(LIBGCRYPT_CFLAGS) # fi # AC_CHECK_HEADER(gcrypt/gcrypt.h, [USE_GNUTLS_GCRYPT=1], [USE_GNUTLS_GCRYPT=0]) # if test "$USE_GNUTLS_GCRYPT" = "1"; then # LIBGCRYPT_CFLAGS="" # AC_SUBST(LIBGCRYPT_CFLAGS, [""]) # fi # AC_CHECK_LIB(gcrypt, gcry_control, [USE_GNUTLS_GCRYPT=1], [USE_GNUTLS_GCRYPT=0]) # if test "$USE_GNUTLS_GCRYPT" = "1"; then # LIBGCRYPT_LIBS="-lgcrypt" # AC_SUBST(LIBGCRYPT_LIBS, ["-lgcrypt"]) # fi # Extract the first word of "libgcrypt-config", so it can be a program name with args. set dummy libgcrypt-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LIBGCRYPT_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $LIBGCRYPT_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG if test -n "$LIBGCRYPT_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5 $as_echo "$LIBGCRYPT_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$LIBGCRYPT_CONFIG" = "x" ; then if test "x$with_gnutls" = "xyes"; then as_fn_error please install libgcrypt "Unable to find libgcrypt-config" "$LINENO" 5 fi else LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags` LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs` $as_echo "#define USE_GNUTLS 1" >>confdefs.h fi fi ## ---------------- ## OpenSSL # Check whether --with-openssl was given. if test "${with_openssl+set}" = set; then : withval=$with_openssl; with_openssl="$withval" else with_openssl="yes" fi if test "x$LIBGCRYPT_CONFIG" = "x" ; then if test "x$with_openssl" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBCRYPTO" >&5 $as_echo_n "checking for LIBCRYPTO... " >&6; } if test -n "$LIBCRYPTO_CFLAGS"; then pkg_cv_LIBCRYPTO_CFLAGS="$LIBCRYPTO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcrypto\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcrypto") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBCRYPTO_CFLAGS=`$PKG_CONFIG --cflags "libcrypto" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBCRYPTO_LIBS"; then pkg_cv_LIBCRYPTO_LIBS="$LIBCRYPTO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcrypto\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcrypto") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBCRYPTO_LIBS=`$PKG_CONFIG --libs "libcrypto" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBCRYPTO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcrypto" 2>&1` else LIBCRYPTO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcrypto" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBCRYPTO_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libcrypto) were not met: $LIBCRYPTO_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBCRYPTO_CFLAGS and LIBCRYPTO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBCRYPTO_CFLAGS and LIBCRYPTO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBCRYPTO_CFLAGS=$pkg_cv_LIBCRYPTO_CFLAGS LIBCRYPTO_LIBS=$pkg_cv_LIBCRYPTO_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define USE_OPENSSL 1" >>confdefs.h fi fi ## ---------------- ## libnotify # Check whether --enable-notify was given. if test "${enable_notify+set}" = set; then : enableval=$enable_notify; enable_notify="$enableval" else enable_notify="yes" fi if test "x$enable_notify" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNOTIFY" >&5 $as_echo_n "checking for LIBNOTIFY... " >&6; } if test -n "$LIBNOTIFY_CFLAGS"; then pkg_cv_LIBNOTIFY_CFLAGS="$LIBNOTIFY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBNOTIFY_CFLAGS=`$PKG_CONFIG --cflags "libnotify" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBNOTIFY_LIBS"; then pkg_cv_LIBNOTIFY_LIBS="$LIBNOTIFY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBNOTIFY_LIBS=`$PKG_CONFIG --libs "libnotify" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBNOTIFY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnotify" 2>&1` else LIBNOTIFY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnotify" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBNOTIFY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libnotify) were not met: $LIBNOTIFY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBNOTIFY_CFLAGS and LIBNOTIFY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBNOTIFY_CFLAGS and LIBNOTIFY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBNOTIFY_CFLAGS=$pkg_cv_LIBNOTIFY_CFLAGS LIBNOTIFY_LIBS=$pkg_cv_LIBNOTIFY_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define HAVE_LIBNOTIFY 1" >>confdefs.h # for ArchLinux fi ## ---------------- ## appindicator # Check whether --enable-appindicator was given. if test "${enable_appindicator+set}" = set; then : enableval=$enable_appindicator; enable_appindicator=$enableval else enable_appindicator="auto" fi if test x$enable_appindicator = xauto ; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"appindicator3-0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "appindicator3-0.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then enable_appindicator="yes" else enable_appindicator="no" fi fi if test x$enable_appindicator = xyes ; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for APP_INDICATOR" >&5 $as_echo_n "checking for APP_INDICATOR... " >&6; } if test -n "$APP_INDICATOR_CFLAGS"; then pkg_cv_APP_INDICATOR_CFLAGS="$APP_INDICATOR_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"appindicator3-0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "appindicator3-0.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_APP_INDICATOR_CFLAGS=`$PKG_CONFIG --cflags "appindicator3-0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$APP_INDICATOR_LIBS"; then pkg_cv_APP_INDICATOR_LIBS="$APP_INDICATOR_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"appindicator3-0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "appindicator3-0.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_APP_INDICATOR_LIBS=`$PKG_CONFIG --libs "appindicator3-0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then APP_INDICATOR_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "appindicator3-0.1" 2>&1` else APP_INDICATOR_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "appindicator3-0.1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$APP_INDICATOR_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (appindicator3-0.1) were not met: $APP_INDICATOR_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables APP_INDICATOR_CFLAGS and APP_INDICATOR_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables APP_INDICATOR_CFLAGS and APP_INDICATOR_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else APP_INDICATOR_CFLAGS=$pkg_cv_APP_INDICATOR_CFLAGS APP_INDICATOR_LIBS=$pkg_cv_APP_INDICATOR_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define HAVE_APP_INDICATOR 1" >>confdefs.h fi ## ---------------- ## gstreamer # Check whether --enable-gstreamer was given. if test "${enable_gstreamer+set}" = set; then : enableval=$enable_gstreamer; enable_gstreamer="$enableval" else enable_gstreamer="yes" fi if test "x$enable_gstreamer" = "xyes"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gstreamer-1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then enable_gstreamer1="yes" else enable_gstreamer1="no" fi fi if test "x$enable_gstreamer1" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSTREAMER" >&5 $as_echo_n "checking for GSTREAMER... " >&6; } if test -n "$GSTREAMER_CFLAGS"; then pkg_cv_GSTREAMER_CFLAGS="$GSTREAMER_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gstreamer-1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GSTREAMER_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GSTREAMER_LIBS"; then pkg_cv_GSTREAMER_LIBS="$GSTREAMER_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gstreamer-1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GSTREAMER_LIBS=`$PKG_CONFIG --libs "gstreamer-1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GSTREAMER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gstreamer-1.0" 2>&1` else GSTREAMER_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gstreamer-1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GSTREAMER_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gstreamer-1.0) were not met: $GSTREAMER_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GSTREAMER_CFLAGS and GSTREAMER_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GSTREAMER_CFLAGS and GSTREAMER_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GSTREAMER_CFLAGS=$pkg_cv_GSTREAMER_CFLAGS GSTREAMER_LIBS=$pkg_cv_GSTREAMER_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define HAVE_GSTREAMER 1" >>confdefs.h # for ArchLinux elif test "x$enable_gstreamer" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSTREAMER" >&5 $as_echo_n "checking for GSTREAMER... " >&6; } if test -n "$GSTREAMER_CFLAGS"; then pkg_cv_GSTREAMER_CFLAGS="$GSTREAMER_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-0.10\""; } >&5 ($PKG_CONFIG --exists --print-errors "gstreamer-0.10") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GSTREAMER_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-0.10" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GSTREAMER_LIBS"; then pkg_cv_GSTREAMER_LIBS="$GSTREAMER_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-0.10\""; } >&5 ($PKG_CONFIG --exists --print-errors "gstreamer-0.10") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GSTREAMER_LIBS=`$PKG_CONFIG --libs "gstreamer-0.10" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GSTREAMER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gstreamer-0.10" 2>&1` else GSTREAMER_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gstreamer-0.10" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GSTREAMER_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gstreamer-0.10) were not met: $GSTREAMER_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GSTREAMER_CFLAGS and GSTREAMER_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GSTREAMER_CFLAGS and GSTREAMER_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GSTREAMER_CFLAGS=$pkg_cv_GSTREAMER_CFLAGS GSTREAMER_LIBS=$pkg_cv_GSTREAMER_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define HAVE_GSTREAMER 1" >>confdefs.h # for ArchLinux fi ## ----------------- ## libpwmd # Check whether --enable-pwmd was given. if test "${enable_pwmd+set}" = set; then : enableval=$enable_pwmd; enable_pwmd="$enableval" else enable_pwmd="no" fi if test "x$enable_pwmd" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPWMD" >&5 $as_echo_n "checking for LIBPWMD... " >&6; } if test -n "$LIBPWMD_CFLAGS"; then pkg_cv_LIBPWMD_CFLAGS="$LIBPWMD_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpwmd-8.0 >= 8.3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpwmd-8.0 >= 8.3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBPWMD_CFLAGS=`$PKG_CONFIG --cflags "libpwmd-8.0 >= 8.3.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBPWMD_LIBS"; then pkg_cv_LIBPWMD_LIBS="$LIBPWMD_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpwmd-8.0 >= 8.3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpwmd-8.0 >= 8.3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBPWMD_LIBS=`$PKG_CONFIG --libs "libpwmd-8.0 >= 8.3.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBPWMD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpwmd-8.0 >= 8.3.0" 2>&1` else LIBPWMD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpwmd-8.0 >= 8.3.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBPWMD_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libpwmd-8.0 >= 8.3.0) were not met: $LIBPWMD_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBPWMD_CFLAGS and LIBPWMD_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBPWMD_CFLAGS and LIBPWMD_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBPWMD_CFLAGS=$pkg_cv_LIBPWMD_CFLAGS LIBPWMD_LIBS=$pkg_cv_LIBPWMD_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define HAVE_LIBPWMD 1" >>confdefs.h fi if test "x$enable_pwmd" = "xyes"; then WITH_LIBPWMD_TRUE= WITH_LIBPWMD_FALSE='#' else WITH_LIBPWMD_TRUE='#' WITH_LIBPWMD_FALSE= fi ## ----------------- ## RSS Notify # Check whether --enable-rss-notify was given. if test "${enable_rss_notify+set}" = set; then : enableval=$enable_rss_notify; enable_rss_notify="$enableval" else enable_rss_notify="yes" fi if test "x$enable_rss_notify" = "xyes"; then $as_echo "#define HAVE_RSS_NOTIFY 1" >>confdefs.h fi ## ----------------- ## UNIX Domain Socket # Check whether --enable-unix-socket was given. if test "${enable_unix_socket+set}" = set; then : enableval=$enable_unix_socket; enable_unix_socket="$enableval" else enable_unix_socket="no" fi if test "x$enable_unix_socket" = "xyes"; then $as_echo "#define USE_UNIX_DOMAIN_SOCKET 1" >>confdefs.h fi ## ---------------------------------------------- ## output ac_config_files="$ac_config_files Makefile doc/Makefile tests/Makefile uget/Makefile uglib/Makefile ui-gtk/Makefile ui-gtk-1to2/Makefile pixmaps/Makefile sounds/Makefile po/Makefile.in Windows/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" if test -z "${WITH_LIBPWMD_TRUE}" && test -z "${WITH_LIBPWMD_FALSE}"; then as_fn_error $? "conditional \"WITH_LIBPWMD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by uget $as_me 2.2.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ uget config.status 2.2.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "uget/Makefile") CONFIG_FILES="$CONFIG_FILES uget/Makefile" ;; "uglib/Makefile") CONFIG_FILES="$CONFIG_FILES uglib/Makefile" ;; "ui-gtk/Makefile") CONFIG_FILES="$CONFIG_FILES ui-gtk/Makefile" ;; "ui-gtk-1to2/Makefile") CONFIG_FILES="$CONFIG_FILES ui-gtk-1to2/Makefile" ;; "pixmaps/Makefile") CONFIG_FILES="$CONFIG_FILES pixmaps/Makefile" ;; "sounds/Makefile") CONFIG_FILES="$CONFIG_FILES sounds/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "Windows/Makefile") CONFIG_FILES="$CONFIG_FILES Windows/Makefile" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi uget-2.2.3/aclocal.m40000664000175000017500000023347613602733757011301 00000000000000# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl AU_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ], [[$0: This macro is deprecated. You should use upstream gettext instead.]]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 42 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' AC_SUBST(INTLTOOL_V_MERGE) AC_SUBST(INTLTOOL__v_MERGE_) AC_SUBST(INTLTOOL__v_MERGE_0) INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) AC_SUBST(intltool__v_merge_options_) AC_SUBST(intltool__v_merge_options_0) INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29.1) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.1]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR uget-2.2.3/pixmaps/0000775000175000017500000000000013602733774011162 500000000000000uget-2.2.3/pixmaps/Makefile.in0000664000175000017500000004406713602733761013156 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = pixmaps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_ugetpixmap_DATA) \ $(nobase_dist_icons_DATA) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(ugetpixmapdir)" "$(DESTDIR)$(iconsdir)" DATA = $(dist_ugetpixmap_DATA) $(nobase_dist_icons_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_INDICATOR_CFLAGS = @APP_INDICATOR_CFLAGS@ APP_INDICATOR_LIBS = @APP_INDICATOR_LIBS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_CONFIG = @CURL_CONFIG@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETCONF = @GETCONF@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LFS_CFLAGS = @LFS_CFLAGS@ LFS_LDFLAGS = @LFS_LDFLAGS@ LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@ LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBPWMD_CFLAGS = @LIBPWMD_CFLAGS@ LIBPWMD_LIBS = @LIBPWMD_LIBS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # icons installing path: # $(datadir)/icons/hicolor/16x16/apps/uget-icon.png # $(datadir)/icons/hicolor/22x22/apps/uget-icon.png # $(datadir)/icons/hicolor/24x24/apps/uget-icon.png # $(datadir)/icons/hicolor/32x32/apps/uget-icon.png # $(datadir)/icons/hicolor/48x48/apps/uget-icon.png # $(datadir)/icons/hicolor/64x64/apps/uget-icon.png # $(datadir)/icons/hicolor/96x96/apps/uget-icon.png # $(datadir)/icons/hicolor/128x128/apps/uget-icon.png # $(datadir)/icons/hicolor/scalable/apps/uget-icon.svg # iconsdir = $(datadir) nobase_dist_icons_DATA = \ icons/hicolor/16x16/apps/uget-icon.png \ icons/hicolor/22x22/apps/uget-icon.png \ icons/hicolor/24x24/apps/uget-icon.png \ icons/hicolor/32x32/apps/uget-icon.png \ icons/hicolor/48x48/apps/uget-icon.png \ icons/hicolor/64x64/apps/uget-icon.png \ icons/hicolor/96x96/apps/uget-icon.png \ icons/hicolor/128x128/apps/uget-icon.png \ icons/hicolor/scalable/apps/uget-icon.svg \ icons/hicolor/16x16/apps/uget-tray-default.png \ icons/hicolor/22x22/apps/uget-tray-default.png \ icons/hicolor/24x24/apps/uget-tray-default.png \ icons/hicolor/32x32/apps/uget-tray-default.png \ icons/hicolor/48x48/apps/uget-tray-default.png \ icons/hicolor/16x16/apps/uget-tray-downloading.png \ icons/hicolor/22x22/apps/uget-tray-downloading.png \ icons/hicolor/24x24/apps/uget-tray-downloading.png \ icons/hicolor/32x32/apps/uget-tray-downloading.png \ icons/hicolor/48x48/apps/uget-tray-downloading.png \ icons/hicolor/16x16/apps/uget-tray-error.png \ icons/hicolor/22x22/apps/uget-tray-error.png \ icons/hicolor/24x24/apps/uget-tray-error.png \ icons/hicolor/32x32/apps/uget-tray-error.png \ icons/hicolor/48x48/apps/uget-tray-error.png # pixmaps # ugetpixmapdir = $(datadir)/pixmaps/uget dist_ugetpixmap_DATA = logo.png # icons/hicolor/index.theme is needed by gtk_icon_theme_append_search_path() # EXTRA_DIST = icons/hicolor/index.theme all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pixmaps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pixmaps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-dist_ugetpixmapDATA: $(dist_ugetpixmap_DATA) @$(NORMAL_INSTALL) @list='$(dist_ugetpixmap_DATA)'; test -n "$(ugetpixmapdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(ugetpixmapdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(ugetpixmapdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(ugetpixmapdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(ugetpixmapdir)" || exit $$?; \ done uninstall-dist_ugetpixmapDATA: @$(NORMAL_UNINSTALL) @list='$(dist_ugetpixmap_DATA)'; test -n "$(ugetpixmapdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(ugetpixmapdir)'; $(am__uninstall_files_from_dir) install-nobase_dist_iconsDATA: $(nobase_dist_icons_DATA) @$(NORMAL_INSTALL) @list='$(nobase_dist_icons_DATA)'; test -n "$(iconsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iconsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iconsdir)" || exit 1; \ fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo " $(MKDIR_P) '$(DESTDIR)$(iconsdir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(iconsdir)/$$dir"; }; \ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(iconsdir)/$$dir'"; \ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(iconsdir)/$$dir" || exit $$?; }; \ done uninstall-nobase_dist_iconsDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_dist_icons_DATA)'; test -n "$(iconsdir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ dir='$(DESTDIR)$(iconsdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(ugetpixmapdir)" "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_ugetpixmapDATA \ install-nobase_dist_iconsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_ugetpixmapDATA \ uninstall-nobase_dist_iconsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dist_ugetpixmapDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-nobase_dist_iconsDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-dist_ugetpixmapDATA uninstall-nobase_dist_iconsDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/pixmaps/logo.png0000664000175000017500000001640613602733703012547 00000000000000‰PNG  IHDRÃ]Ò™tEXtSoftwareAdobe ImageReadyqÉe<¨IDATxÚì] |EÖ¯îé™É}@À@€pŠ.X!HV•CD]@ÖUEa/ˆ œŠr|âò±è" ¸à¢Ÿ°²îzs(7¸BBÂrÎÑ]ß«N÷LMOOŽ™ž+Lϯ~“ôÌt½®~ÿ÷þ¯êUƒÿ`êy®1¸ŽÿkNbŒB‡öÀÊO¿3 0˜*µ‚"t4^00*…uq¾±Dé•„á'0¼¶o´Ï˜u×f¥¢ë$°Š¿³‡(>/ õ¹RÕFì$ Êè¨ÂÉç<Ù)¥cÿôž:=¥oŲLL£} Âp‚Õ"œ\ø»í+CéÙêsTÑË»+³mϔёqÆA‚Œ[í¡`—ÁÛZU Â`À^l÷¼»¶()‘(†‡æ÷èÔîîÔçÀÜç Yö`QtöÈ6Mö~tº¨‘ÇHA༤yÙ[-"õbšEDLÚpï ‘ñÆ'–‰Ù@„Ò££à­øè4¸õh’ DoÐ)'½Éˆ9ÙïëÃtÙ¡ÇA…ŒØ>!4bšÄÐ@èÿdÇ}Çem‡¸ %¹‡£ªÌl µB#¤I³{lu¢FÃòº·¿ý¾V²:&5„çãú¥ŠêP+42Ï0§Ç‡Nô¨çè̤Ž9i¯3:”ªe]`M°š„†EÄXrEnW?d°€øƒÁ£Ã©L(fДÝó‡/¹žZWr|Ï…ÅŸ,úñ0ª°²"Ï«©ôm{¥$þ~YoŸAsèh$žáåÑ]¨"þ¸®_nXŒþaoÄ•¥¦ëðf‚b–áiÿ¼Lëµø6® a¡1Æ ¶µŽýÓâSÚÅÏñÖsoƒ$È`à5]Ì âô¬5„…gð”fØ(ÒÀg;ÿQ§gÚxˆÇ ¬Rá52ž÷¥ga¡y†¹½¶9Îmz$EEŇöæSf†NËÜïF`ïA¤Z ¹vHCCžÁCÏ ‚á·ÈêÉꯎ'¨][ËúBhÁSŠ$‚!6%¼?”I«:±ô 6¹CGàÐ60„Gúûåùâ½Vè¸5=C‡þÍ£"µó¶µ ѤÐáQÌéåë‹€0DpºPS‡Žàô XÛ®Õ&i‘Q¾XÑA­Íê…ëøtUŠÐ ƒ&½Öû‡ü¤Ì˜4Q íh„Bã ¡ÚcÏ­óÉÓÅ¡:txÉ3,èózM.™ùõPV5@‡­À`[­@àð]¶Rú>Fµ¬ç“˜y-fÀâձϓ“BèóêZ¼«nÃoÏœA„QÇ âý1:Fðå=\(ªM1Ýž ¢?®Vý ôµ­T—ñTzz6½xWm‡¼”‰¼ø•seØG6Nû˜ÁtcçÓ¬U½QÇ«–@ZYP™æ+¢À\‘^ÆS  æÞ@œÈ2rq÷,NÏÆX-‚NœéUËÁrŒÀ+>S–ÿÅŠ…Òi^iƒ8fÀâý0ÈÄ[…Ã@•Øú¥ý{¡½oZMÂ÷WÏ——Ií((ž‘Ná¹ý ’‘žHŬjÆKr3”ì §ð Ü„-÷ü>¦YørT³:C½æãϘ«ù_½óßËJKA¨vŽ3ØøÞ~½¥/²¯öÇjø€•Ê%//)¨xm=²O–ò‡’aJ™d9iFà0™Ëϲª6ç%<±ìÛÉÝÕP H¢urfLªYë§1­'+©•jLÖK–¶Ze½Äg3é¯ïJjû ñJ˜Ç¬?…ÄPÄ“)}yõ¸Ýû¨v 8Yä&ÓiAnÞÌœŸóq n'0𠸻ÖÔ\eå(EÁ4ÉO#ªÔ‹˜¢.ÞVÐÑÚ²z&ë¾d)ˆL’å(вªÐg-;§ ΀´º=‹E¨‰/µŠƒ8f`|Ò†ÄaqfÞ$èÍߊ29÷>¤¬ ÌPô )cñ(´»ÖTueñÕ8ƒ÷r“è–*Þ ItÜ Pu³V+ÏÚÀ‘IA™@•Õ¡¡±À(c?ÎV÷8ƒèö“ÚÆ„õŸÒþKÏ VÌ ¼ 9XKVáàMå–’Oæ>%BJ=2T^S*G6 ‰Qõ!}vðîœK†ì.ã­uû"Ô­¯Lõ÷¢iÕ=!.¥}ì¿|¢`V|ÞzQÞ‚ñ¥‡m V¹<`@µ‚Á+îêwAž›$‚ÁTiå|åÝ€¼¶M7–^®â:"Œz¸~æ8 s¹ÔdãÔã.¢]6Lðæ&Ùâ+„>´tº¿istçÅjÚ3øj¼F#Çpk{†F3ˆ!Ÿ®› o%4¯õgµ[ž!ØÁà ×Ã~æÞœé†‘o-ê¥×"õÀµšÀ§I¸v0„Ž€=£€lãOÖaÏ9û%K:š„nK!E׎¶1ö¯Ëôîhßz†Š«¦jÅ^ ‚ŽQ9È4‰alã96@pªt@ó˜ÁG³ÄXçJ´«×·n¿ªÔböÝlP“ë^ p> cÇ0‡D=m<ƒŸ{“Hâ˜â¡h7Ó%cHþ]QO@ §Iæ*þä¹ýÅËt•e‰ÅfÆÃD qpPÏò”ó‡®P(•˜ÔxþPÉ~uotO)Õ“õpÍàC¾Ç[®Å‰3 Ậ†ÈSr¶|yiaåµ’)D>WúÁr¬@äæ­ÂUdϸŚ÷&a?S Ç8äÕOÚÕ{X¯ÝÒqȧ3Ý$`{lTx óï³úÙ7pá‘gC‘®RÍŒÐî7“ìåݨîôÛ†0P S?½÷¸I®7 +Žl{éG2 jFöMjp-²+S^°‹Þ$´#М}ª¤P«ÊMjø5!È‹ï04yίß^W|ª¼RzÁ…Ûsà€yµ™nÊLM¥õåú<“1Mg`2°†œ»a5½}˜MVy‚ŒMe§~‘SçÍ/°ÇºÕx¦FX¨Õâ׿3Ò…gp§ÔÅuZôál·Á ²ÞhÒ*B¯°þ2?4+¼†ÿ=õYOìɽB®çüZ©:Í.êGÃWt¯îQý¶£7 éRzJOtFkÝó vç¾÷ÞYíÆP²Ò^Àªxd hU¿ xE4?eûNi™Ø&r‘7ÚB¤"Mîaå¬ÿïïÑ9´yÜ>‰<].&Å8kð‚'>yâKä¸4 ~òÓ¸þr¸w¨Ô× þ¡ Š8 ®ëÈÔä6ýÖAýÞY‚?pç38ôy"£[úç-Ï€=|Õ3¸ýb°>©cÔ²C’’ˆ³ ‚X†(%F¾}I@ §‚™Œ]F¦Ìa¥ÝLµx9wkžgÔäôµg@Þƒ'1C¹íž¨Óî“¶LR<=²¯_ļ;x/ãKžLµm°hÄê΢t#5«Cµ7I¸F* Ý€—'¿­Mb†ô ÒKɵ¾ë rðæ3¯ð—!û”Ëp-jß/6=l¡–õ ¤]péUÃà˜µÚ`9?€Æî,ØWr †ÅV̺{Me‰jj˜>pnÛ^]ëX?d?£U®ŠX‡‚eæ$&6kµL§–õI [™µ´4«Ž÷^ÒŠœ²ðp^K«™Ò5ze·GSÓ”ñÃú¡û½?k+Æô‰™‘‘ÙO§¯…HÕ¾ÆàèZe9Æi­Õ`õ šö&YM‚̡鼽`ÅšÎ&ñCÖf¯ÜtéiŃàÿwèôø'wz«Ë…^ïÔpÏ ¹0¶ŸWzx\Œ@7tÐÍR-œ¼øSé2ÎÀZÅ´²,$YbÑ“F€kèô OÒ´/);@§ÀüagwìÉÀ ;™¹Z¥i:m1ñDIÂ$…Á2x« Ó:ßIÅÞ?üŽG?~êø …›æµ®ë¯÷ÿä'ünaÛ~MõS¼—ÉŠ5év,ÂÍ-8í«¬U­´;÷ž!khÓ¿CñªÀô•d˜uï¼6?ýsÎé¯h@€ò cwtÓ¤ÂtŠ’»DÇ&¶X UEx«Û»H;h¨ÕÈ+ê‘ ¢9]ËÓt‘š{løon‰èº2þÐõ‘§øARb­ HЇ÷Ÿ•±¸rKßo¹Á§yLÇ92õ´ÈNû/xÊõMÌà⇖YCþ pœ2~eFc¶ßŽ50¶ñ„Ü…™Ò™ÞÞo#¬ÞÉ×Àzõ‘l6´×²VK/Tÿdò϶¬Ub@»¯ èZ%[¡F–µj{¦ ëÏÁæäü¥„¶á«ÛÞ—¤ÄûÃ×Û;ï*ÇÈõz>“¶’áPš¯îÇ[i-Z²"9Rd­ú ÚÐ$NÙef5 —ƒ)fp Pìíc’×V—ZÇŸÿ®´„êaâÿ6ìzôãÎµÞØ¦áG• Š@¸u»É\8;Ðû@+ÎÞä)/ˆQÒ$·ÇÜéMÒ87ÉÖw|pcáãAéॠczwŸü Ü‹Q?e¯‡5¦½‚aÀ‚Œ‘ÉúY¾¿gDj›»«òöoëò¤žÐ" –—[Êù]Á;¯*gÞmýu­ñÃÃ)é‘áŽÇS23×ûZ~ÌãÒ窫”."iö0¶ $š¤:{ìÜ×7^ïP¬Þ⇰ĬðU·õ‹KTô‹3Œ8æäÈ9ä¼e«1c@ÜRh¡¦¾–_àqñµ3Uf¤˜Ïˆ´§ ˆ4¢À`ùñݳ¥ç«_À¶ê¨³qÔäŽ'’×Åg„E!Å~Ä›G·Í «Ä Æ!k2§åêëùfÕú•B4Éû4‰&2 ÌŸO;óQå5Ëò`æÂØÞ}^lñœZü°eä Æ!ô¦ðæ´ümdSýtÉÍ›„ÈqŽ€Ôí€Fc§´ ,:ÖJ-Ò1ä%QH1ýãéSK¯Ÿ«š´t ^añº§ûÍk9@-~A'àéo<)£iÇð7ý)su™u5šn÷,trÖ€&ÙV·ÓBmÝì€ Ùˆ¦Ý3ÎnËÿOi_ªwe@Mæ´ _Òîþ„TEü œ„¤'”ªõ€¸ ˤúSæÒ|Ó^dÏ.•A!°úšŒÜ@z™Àu‡ÞØX v#BM-r“ä ñ´{W^:ïOöœÖüͦ#Æ‚] 'êôL:£câű“°|I‡R;ŽJxçʱŠQ×­V6˜-Nè9£ùŸX#“íÏg¬ÕÂ÷×£A –'«LÚf8¢LŠ}PÃS‹hŠÞàæW•Á­a*×ç…åÔ!çMÁÕöVþm£!C×·YnŒÖ ñ׃«,¶¼ñÙ¤_—"ûµ2Œ}g§÷kÖ%b“ô¿ß޲‹æé»¦žý+üI6+¡{”tTÖ¨2cÔ·ãlÎóè•7tU$Dr”®©-Z¬µ ¶v:Fnm‡N|x•ƸÚZ–t± Ç…_-Šs¢É]"Ë#›éGøKÑôº^)wFýzö‹ÒSˆZ ½ãèÄ–-ûÆnéO V|áÀªËÏ—_¶T"Çt± %Pks_ùùóPF%nzæm\ƒ!ë¡ÔA*'k@n[ å sÊs¢ù_Ý,È«gnó—Âct¿1Æpÿ¾|¨¢Œ€!&ÝuçÓI«YÓÞß”ãfé¥#ïÿ$y嚲ȅaòG¡ŸµÇ\]…2ázÜ£æ2¨ºØ[Ú:Ûöð/L=~ËÔâE^Þ:7.¥ë¸¦{ ÖHò/7 ‡ö¼pþÑòB³%wy«‰Q)†iþ‰vŒ;= þ¬Böõ[å슂2~×ãowu±¾÷§¹ ª• ß’©Y«}üð)ºû’to†å,i1"¶¥q­?•¯¢È²¡¢Ør´YLjEÐ zÊ‚tíç¯å€ÎGŽnøh›—Ðá0P€°åü@ä®lõ ÄyþÓ@19²â„?¡´øXåØo^»ø-²¯,î1ÿEöDVÑE«åÄ09n^ðGm©œºžxÅÑKÊ3»ž9÷ö u·¥‡ç'3@f„?Í.æqÑ…ïË9°²è¨‚y¢´Œlp¦L™20&&¦kiiéžçKV­ZõÜÒ¥K]mó„ž{î9–ê±’÷HsÂØ±c“’““³/_¾¼wãÆE4 àú~Ux¸·Ñ]{£A¶¹ÚÕ_¾X0³ì¢yf0gÈz°ú`Ù¥½¿—€`Bα¸ #(ÃØ%K–ä§¥¥m5÷¤¦¦¾ÞªU«=óçÏ_‹êî:ÖÍš5k2(tªYöGUo{5mÚôïä5‚…%|êÜÜo}Fö¢µ©ºjE_L;ÿ—œ7Ò+£S KýÍÝ}Ö…jÁ'¯/žÿeY r±ÙJ-Ê. Ë†E¶äâoÇŒÓôu«ÕZpèСܭ[·’mÀØiÓ¦åèõzq÷! CÅp:é·2àEäÎ(J6„¨„UUUF1ð·ZÆ ¤ëËÀf)yÅkа’3È>†ÂJ¿“é¢|œÔ.VʃÊã H9Ö’)¢•ºVÃÁà­C„lùäÆ{¦ü­ëM÷¦÷ŽšË…³¹`^?ôNñª¢Ã•7) ØbÊh¨Zä©S§öjÖ¬Ùü+W®Ì^¾|ù7Dy,XðyeeåöW_}u]ëÖ­§³,SPP0€pHª-[¶l;EWõ“&Mê“’’ògð½Ífó±›7ono²%//ïÉÈÈÈGÈázÇ>0{öì— ””ý|¿œ+­¨¨ø™’‹È°®ñ}TTÔ݃¡“Édú¶¤¤äSæ ¹Ž¢¢¢Ù+W®üš¦^žþùÇ€Ò=N~ ;ÔîÅ‹ï:Ö!33s¹ ©®sdÿþý3wîÜYmÑÚâÕòòòo£££1 r} uçõ†Hr|sàÀI;vì¸X |B“èòà­•;éð_Šÿ»süÙ±%Ç«²V _62ZÄÃ=í*Ü_‘»ëOùK7T¨Û¦v§L2wšb…l&YD½ô?™»aä8®%Xö‚·ß~{—ԾΆKE´ì¹¹¹Í6mÓét­.^¼8“x <ëž}öÙûòóóÿVÿ;R|¶”r¹n¯^½Þ rõêÕ5pî³ØØØ‘”\¢ ñññ”ßÀïfÁwM[r±.\ȃÏ;ƒâÊ+¨Ó‡~ÆŒcHý‚ Ü`À€æ:tØJݧ°°p©7""âQåjr?ðý$¸noÂcׯ_ßtãÆÍ‚ p­… ×®]{äÜ©S§ õ1ü¾  mÇdàüJ»4Û@Ò7ó/‘Í­¿ê<6¡eò‘÷¢Ùº06›aPtÐôX¨”7 '¬Õøéºõà¥}ßÿ²ýFr¹·Ñ"Ò&õiw¢$ô;²¯H!öî€îÖð;™bÌ™3g(ÄpPp¬0sæÌ¡Ýºu{¬hìéÓ§ÿ¼~ýzšÏºŒ¥ê¶bÅŠÝ/¾øâ9rÍ5kÖÏnN˜0á·pÝ»Aÿ¾·ŠÔ$ñ-x†-à!’z!>y €™õ“ ¼¥}!'*lï‘G ß!Û••“HBs@ŽÉØtפ·Þzk#ÑW¹ÞÑ£G·ƒßˆÆ‚ø…Òçá ßseee[-ZDäàà}txxx_I×MC“\ÂaTIItG7^=e9Å9™÷DǤtÌàŒL˜1ŽkQQdùŲ¢Xb…‘¹\(¡Ï—ž5þüÑõ"À•#©N»’’¶Ð ‡D å6`P–·ãââF€2Ž"V,ž|9++k=ÝóçÅQ]òšƒenBþKûT“3Å9J©ê5Iá8e=jÁØ[ϹèÎçˆÂƒÇ!‚T<&‰>Ùä:ø¡t½\oBBBeJäz¥8æ¬$'G¼ª}SvÿƒR 9ïéL'Šïçÿ]VåJ-c$ÞtiŒË ×SP¦½2Ñr¥Ë'Þaòäɹ@•vÌ;—P #XÙ;•2oÚ´©ÛÁƒ ¨,5ˉ‰G£é¨¨–ò³€:êJ©qÙ ŠÎQ»x€÷J§‚oDa ð›7o&Ô’+ßJÔdº2Ä×£¾z·q@t‰¥€¢ÜÜ\ÞâVÞæÖ$¡].U*¥Ú‹E­µ:MTQn+zr¯îAVL8HÌ=lذ,Qsqcpó™3gÞ Ü;55uö¨Q£ºJ±B˜le‰ `… Eƒž + €eØÄ‰[K×’eã °Ì{È5…ÿcúôéÓ¬ó£n>nÝ”)Sz“à|úôéäz¸ººú3PòAãÇïÿÇ=ñÄ]ᾚ^¹råßäíÛ·ÿ39ß·oßtäB©Þ}÷ÝýpOšö©z‰¾ø…n#{.¯°È“S_Kˆk9çIû gϞݗ””t,==}%(Ôh˜’^–‚‚‚Þ{ï½ã`]g@¹´{÷î?téÒå[ M-‘h‹iíڵ߽òÊ+›@¡Ÿ^¸páÝ$~ ŸƒužŸ/‚ë‰Ù™ðÙnð4{fÏžÁé«Mš4Yü€˜Q8N¦2ͪ™ˆd§ZâÿÒgâÿPoXõ!p“ÿw:uj6 ”¡|÷ô-‰O€Í¯öÄk€ÞMY:9IOYqq1U«–ê–e@õ#piR+àmŠfÃŽ;.Aé5uêÔ\P’ÛA1Þo°oçΗä¸x7 &·Ê#Ð`a€R_]½zõ>É{á—_~ùÉI“&­ż>»QTTôãÆɘ„‚àUÓ¦M;Ù ”’,*le\9vìØ=Í›7Ï!ß¿páÂ!ð>é%%%ß ï–——Ÿ‘ã ø–$³8&ñÆf³Ù¼Ÿ|÷èÑ£ïtîÜ]ºt‰Øõ’ÇNpOÁòwƒï¾¹lÙ²ÿ#àž7oÞ s›,'Üï 6ˆrB$>ï{%e7Õ!‡[<8töAçÑñˆ«ï¨å&Ñ“jâsåõyŠV³.â#å"Ö¬Â"Ëñ@]§®:qr*ó£˜:äÀµå&ý¿~,é¹ÐÓ¢VIEND®B`‚uget-2.2.3/pixmaps/Makefile.am0000664000175000017500000000364413602733703013135 00000000000000# icons installing path: # $(datadir)/icons/hicolor/16x16/apps/uget-icon.png # $(datadir)/icons/hicolor/22x22/apps/uget-icon.png # $(datadir)/icons/hicolor/24x24/apps/uget-icon.png # $(datadir)/icons/hicolor/32x32/apps/uget-icon.png # $(datadir)/icons/hicolor/48x48/apps/uget-icon.png # $(datadir)/icons/hicolor/64x64/apps/uget-icon.png # $(datadir)/icons/hicolor/96x96/apps/uget-icon.png # $(datadir)/icons/hicolor/128x128/apps/uget-icon.png # $(datadir)/icons/hicolor/scalable/apps/uget-icon.svg # iconsdir = $(datadir) nobase_dist_icons_DATA = \ icons/hicolor/16x16/apps/uget-icon.png \ icons/hicolor/22x22/apps/uget-icon.png \ icons/hicolor/24x24/apps/uget-icon.png \ icons/hicolor/32x32/apps/uget-icon.png \ icons/hicolor/48x48/apps/uget-icon.png \ icons/hicolor/64x64/apps/uget-icon.png \ icons/hicolor/96x96/apps/uget-icon.png \ icons/hicolor/128x128/apps/uget-icon.png \ icons/hicolor/scalable/apps/uget-icon.svg \ icons/hicolor/16x16/apps/uget-tray-default.png \ icons/hicolor/22x22/apps/uget-tray-default.png \ icons/hicolor/24x24/apps/uget-tray-default.png \ icons/hicolor/32x32/apps/uget-tray-default.png \ icons/hicolor/48x48/apps/uget-tray-default.png \ icons/hicolor/16x16/apps/uget-tray-downloading.png \ icons/hicolor/22x22/apps/uget-tray-downloading.png \ icons/hicolor/24x24/apps/uget-tray-downloading.png \ icons/hicolor/32x32/apps/uget-tray-downloading.png \ icons/hicolor/48x48/apps/uget-tray-downloading.png \ icons/hicolor/16x16/apps/uget-tray-error.png \ icons/hicolor/22x22/apps/uget-tray-error.png \ icons/hicolor/24x24/apps/uget-tray-error.png \ icons/hicolor/32x32/apps/uget-tray-error.png \ icons/hicolor/48x48/apps/uget-tray-error.png # pixmaps # ugetpixmapdir = $(datadir)/pixmaps/uget dist_ugetpixmap_DATA = logo.png # icons/hicolor/index.theme is needed by gtk_icon_theme_append_search_path() # EXTRA_DIST = icons/hicolor/index.theme uget-2.2.3/pixmaps/icons/0000775000175000017500000000000013602733774012275 500000000000000uget-2.2.3/pixmaps/icons/hicolor/0000775000175000017500000000000013602733774013734 500000000000000uget-2.2.3/pixmaps/icons/hicolor/16x16/0000775000175000017500000000000013602733774014521 500000000000000uget-2.2.3/pixmaps/icons/hicolor/16x16/apps/0000775000175000017500000000000013602733774015464 500000000000000uget-2.2.3/pixmaps/icons/hicolor/16x16/apps/uget-icon.png0000664000175000017500000000121413602733703017772 00000000000000‰PNG  IHDRóÿatEXtSoftwareAdobe ImageReadyqÉe<.IDATxÚ”“ËnÓ@†ÿOlœ"hR‚Š$Ô„ÒEYð ñ </ѾoÁÑMÅŠJ«T¨4Ò–^r±{.fÆ(* É–|Î|ÿœóÏ1yóöÕ‹B©M²†9–†Þ¥ž÷šI.¶ž¬t:ÑÍÚ<<âd²¶wøe‹)¥: á2>K  !,Ëòœ#ÎÇÿ${ßøøu~¥‚¢(0ÍSh 0æ! #,ÝZÄú³UX–qÎ!%ŸÁÓ$Ç»mÐÐÃý ‰—ÏŸºøÎö> º˜R…ˆGޱ,ã"‡¸&p:8‡2›D’L]þóþÄÂÜ%1bÊÅ,ëL´J7ñ«74"¦ŠlÎr\„ȎLj´q5s-*bÔ®òÒDYöiLo>(Ç9xèGЩ¹6"¾öÜž(c¨·ÇX–Ù2øµ9°+jT°Ú¨ÿwŒ¥æ…²UÈn|™¶Ã›ë_È&–eÔS'W›Zê•y#‡~@6þ0 SdÙ'AÆ×IEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/16x16/apps/uget-tray-downloading.png0000664000175000017500000000104513602733703022326 00000000000000‰PNG  IHDRóÿatEXtSoftwareAdobe ImageReadyqÉe<ÇIDATxÚbì8Å@ `Â"æ Äçø?1˜M³Íÿÿ ;!?¼øæÝΩïÃ$•MÅùSuT5 ðíãÏf.~v¸«€½¸wö%ÜZÒ @ª§ß?ÿVç323þ†Ñ-ÿ⎇oÑý 2`&”]ùÿïf|vûäó;Ïo¿‡øûçß¿ Ò@œ;'_LàÆâº.r%¹ï!¹ðÜ ïŸå d'‹Š˜¿Î0€öìëדko?ýùíÏYYma¸øÙÍ÷ÞÜ<úì–Œ¶0¯Ž“¬$®tÀ (ÅÍ-¡*°éøª[“‘ÅÏlºwüþù×M*fœpoC” ~}û³îß¿ÿ<¬\ >ý‰‰Ñȼ†dóß?ÿv3³09b¤D6.– ˜f°#çßßÿ6™<0±ÿÿþ×#k«»vàÉ‹/ï~üÀæfV&¥ÿ/‚r½)«] #—±‹©[Kñ'L°7`dbdDS7hP"3#²àÛÇŸ¿2"çÆ ãeºúîò‹Ý2õT„eyqÆé¯ïþÜ=ýò톎Ó{ѳ3Ð3 •ÄJx’ÄW > ÄS õE©Ü?IEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/16x16/apps/uget-tray-default.png0000664000175000017500000000061213602733703021444 00000000000000‰PNG  IHDRóÿatEXtSoftwareAdobe ImageReadyqÉe<,IDATxÚbì8Å@ `Â"æÄWø?1˜M³Íÿÿ [±LØß>þl&E3†ß?ÿV&5 @^8ÄØóÿßÿÌÈ’/¾y·sêÅû„ 01îœ|!. Á" ô΋{g_‚£©vOp;'³:6Ààýó¯03þFó-ûÇ—ßN¬,ÄD#Vðïï?vbÓVpûø‹Ç×}fDÎÆËtõÝ廦ë)‹ÈóòàÒøëûŸ?ÀtófMÓÉíŒèÙhˆJ¹å_ø0O0X>pf’¤ýêIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/16x16/apps/uget-tray-error.png0000664000175000017500000000106413602733703021153 00000000000000‰PNG  IHDRóÿatEXtSoftwareAdobe ImageReadyqÉe<ÖIDATxÚbì8Å@ `Â"¦Äçø?1˜M³ýÿÿ ;8ÈrÁ/¿{IÑ (.ø÷ï¿Ú¡E×ïÝ8òì=LLÅ\BÀ)Y[ùÓëï?Ö6Ÿ¼þûÇß0¹Ð 3¡üÊÿÿ3[G©KðŠr–¯¬9v $xïìKý¯ï4Þ;ûêÎó[ï«B?AâUÛªùĸŒ± †;'_hIª žádçºä£Pø&H®Âx™º TûjY;HÅ ïŸå &F! !‡´{ ¨q’OKašqE#$<þü¼¼ç‘ºøã+oí ¥†?¿þý[Z~ä ßB—›¿sÛÅŸa ï&_ÃÎÍÂÒ¼¼òÈÙ뇞¦3ÀˆEA  Ø´Õ Ç{¯xòÅ6.– 6f–Ý3/]¿zàI*Páe¨T 0q­ÿ÷÷ÿ [ê K+ŽLzuïã'ÆèN›§*¼ aN^6VR#±ˆ£ç*§ÑjmÉÄÌÈDŒæ×>}f:µ&ŒoC 5Ç>AKIJMŸ‘‰‘—Æ7>ÛÐqz#zvb¤b€XO4ƒ÷O0”~Ŭº+ªIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/64x64/0000775000175000017500000000000013602733774014527 500000000000000uget-2.2.3/pixmaps/icons/hicolor/64x64/apps/0000775000175000017500000000000013602733774015472 500000000000000uget-2.2.3/pixmaps/icons/hicolor/64x64/apps/uget-icon.png0000664000175000017500000001053113602733703020002 00000000000000‰PNG  IHDR@@ªiqÞtEXtSoftwareAdobe ImageReadyqÉe<ûIDATxÚä[KŒ×u½÷UU¦gøRCŠ4II$£Ø‰EEEÁ ,Av ¤ìl8Ù(” d¡EZ(‰Zdo‡Ð&A"Œ8AÁdZRþ‹¶8ERœ5äü§»«êݼ½W]ÝžaD&„»YSÍêú¼{ß¹ç~Þm$"øU~1øÅòÏää$H$ "¬¬¬ÀÉŸœd<'êtÚô­o}Ò4çÝ/X±cM’¾ó¿„z½,B<ú壼Õj9Y÷ïß(ÿsùòeèv»Ðn·áùçŸÏŸ?/¯‘[”°Hœ}N¯-Oy.>-ÉíСCøÚk¯eFjµ8p@#@jãìÙ³pìØ±ºPBrä÷ýæŸí¥­›GÂæ}q¤µÛ ·Î}÷¯_uü?Οþq¼‹â—Ž`x€ú¨LÊ&e”WH™°ðóB ¹Ö¨ <=K¸s$Á‹¨¾GOÓès/@_ži?H“B"ÙïÈœ¥Ç,e³7²2ÇBäp"£€jÖ'O·ÌûfÐku±ð)´—ÓʘJ>Ÿ ,ÿrU Ó(n†è©À~÷i ÇðÈ—¶;Þ’·æÞým—TÌ8qu"̯ D5öÓÁõçàôN‡L‹ÏŒ1qj œËgr7¨ŒjD€*7dâžB!ò¾r“×ò6A³ÃC_Úæn&e’ϰ¢¹@8\©KFϹ ÑÒ˜Èy‡ Ï9ýæexûÍKGÐÜW ÐEµ…ä•ó\?Šc}•`f] . ÷TŸ%2„|ùmAx úf’–­*ò§0W3/•Àœ X»á$Çå±þø‡—`âÜGP°"—PO‘³V¥’3Ï=ᩞB.Ö×8*™½T†ÞĽŸy›AÜ!cZ6àJ6(±FÜ9;è›Ó°‚hQ«+8àËSpîâH¶Ä€qá.ÈÙ¨x‰è:osø“?ýŠ2õ¼þéõw`îö²ž;?BqÒoÉA¢P$:PÂc&2~ l¬±'Ú¬­0*æW+E@-`]2 (¨±³–ÂOÞþÄ#Â6#ôlVCVMš8³Ó„È4Ö—ØŒ£DæÉÜ>)?`¡ïÌ ´L†ÑÛ¨ù&ah¡èAÀp©†‘ç Š×/.ÍÀ*‚%>Ácmq§\Àq‘¯›õCb”³«•)F«Ý³x£™ tH#È)—®( ÷0*ÀÓ´Ö”‚”{kŸ€Î'Xø óŒtò£Y {Âа€‚¼R±6B¾ÎÙw4FèÛ¦õJT†º=Îu|hMb0 &ÐC>Þ‡"êõ|+k’AU €¥2¼£“O¼Z> ÐQ6QÁ§ösÉæu©n4efRÝ ¬­sgaô×ÍrÇÔXšxfÜ—Ü“QÂF ²èàmQ@Á³50/úƒ:Ö±†¡$k =&GÈzK*E„½ƒÏ¤õ™yBê=¶P) PˆZ,M×¼@€÷æÊ\ó¾&P “<›A«y; fª,ÅÜó²­x¾zèèlƒPNÈ14Dkö¾ÜŽŽÈqƒudd´äÛúÙ¿ óÓ«^+™œ`ëö!8üû ù™ÂxaNÖÚÍÄóx=þøèt²ðÞ€ ŒæçÖ ùp CµÄ9ëÑl¬ ºYÑq@Áö'®CšòÀ'gKâœU‚'ÿ‘R¤Š>á»ÐÕr¢Ÿ³¬ß:°½ïwܼbŒmÌOÁÌ[¹z zu…ƒkìn@œçAºÐK!»‘…B0‡`÷0âÏ`UŠzÒcòâú† û&CÖ X% á~Ö³ l%WÑžõåÄû7B3¦Ñ ö–ùðoÇ/ÀÂì*”òs——ÈLˆâ(7f°u¬ _þ£½¦¢!뙀L°ªô„–pБnp+å%ÌŒðöè›m¬’¸Š)¬$)øñ°E—MŒb™qJY—sH¯ä=µ-) V€çjCiIŒ§§y¾ƒú™”—±9ã·a*®?¯Ú¶êI⑨y3Ù¡Jc!PÙ‡ì“TÉQ–«}Ť,ÚÂ:/ö$((¹SoºÚ3ûX¸?ôýù!lf[Á±ÜîuÂ%Âì„ 6;~°Ü`HÐÇaU(l²&™  ‰ù=!¬Ýù%4ß "Ç€ýAe€ÌzÚÙXû±žØ)BbE,¢Ó"(*+ šUÌÃmÑ ´¸BX²{VDshm@‹<+«Ai5 ªjÉ)ô†<çÁÌÜÉûÌÛ×a¡Û³a‚U2*“´lT‰€RMT„gk^@dàH¶ÞNŽÑ©8_FguõQ¡„ÝuX°=÷/SŠït»òóÛp}vâ&+r,V ´L‚dk¹áµA5A/Îäú˜Ë§]Ðâ# Ë‚¦¸úÒ§…ñ–¸ˆím®zÆ¢Fµ±`áãóó0¶¿;??²aË_ºÝ çok¡ö6¬"íöëÄÃâ¨mP(Œ¶,n«ª*+ì¡X½EÍ¢Ñνó D­ê;k îrZÈøi›}˵$âJ8ûƒøÊŽ mMÖ-<é÷™w®ˆ™×BMfRlS·2É–58ý¯7('å˜sî*²å¯R wRÍÝ5h=ÒTûxˆAàdÝu=Ežlæð` ØD8óÏS‚ÌJ•ÌÛû§¦a•g‚P‹ò:jÎSVV2ƒBøb%ç½ë¬\øä”kWhÖê¤Ý$uÀKͰ˜ìH–x4‹ Da;'»Ö$þÆÂF#„–ºpñ‡3.O´]ÿÅ<\»¹¨²R{6¸øª#¿¢¬Þ†àú{ °:ܾ½ÑccÔS¬òl>NV ™""U“qzü€H[wÄpåÂÜøéÒ@Æ—þþÂÏB4Ì\”0rÕ&wcd(BaªF@°TM<Øö=<õz\Ê#l½½®Ý«…Ró,»—HÐJšUBÉX'¦`ñÓ6ðŠwše0ñî”@˜°ïˆõæÔX]H«aUV„ŠE!‹c‡mƒV+.—öBƒR7 b©Þ+Êi—™«˜ ×M(òø‡Sÿx½’~úÞMhGâÜÃçVl6:Up±ÆÐhÜ#GáÓ%CÊîd¦VT`åߦ°ó'ÁÍ™5˜¿Õ WµÌ RqѧskºhÎMFh–×'`®½‹ŒGE ´šÀÂåU„ëðÄîöz azaM“k¿•×eJ^]©HAÖrxà7Z®6hIÐTºppøKÔÅ‚£¼Nfrc;°cÇPÀœ~³Ò»ãÓÐNó¢L­ã™=5ÍbcÂ=®Ä0yv¶ïkÂÞßÚ+ )L~Ø‚-{êÁØ•,d£’þeqmÊ6f¶+°X<˜ˆù%РE¢Èöík â¸ruÙCoØnIäõ ak"ªŒdæ(…O°ºU¨lÆKÒãK9ìÛ;»„Às} u¨ŸgŠÇAÑ7î]‚&]â Mÿˆ½MR%Žzpw6‰üà“OVáÖ|7ì-"/¯°éC¢½]îW’$/áQf×!Ø$Òí}‚;Z›bÕ çϾsÏèu£õYdºKL»"“8SØ‘¥ÖÐ&7$<ÇÁƒ#v9,̧e|Cݤý:P­«nм µI '¶énXе$Èu­OŠ…¥8²ªKÌ´£-§è÷†¹FôÊ¡ö H>PûÌ»FÝúïm’õû]S'áÀ¥1—Bêtسo© ,Vé2ȦÊXÑÁ{·^b Ô"Ma{Œ¯¨~ Ze-ˆ\noûM_5%‚re÷^ý²ˆW""l“…ÅDU·ÊZc&Е—Ê£Ž¡í— ‹ü.)•º¢y¹{˜zÛ9!è>õŠ{~«ìÎ;avæ¦êÀKWx·Vdž MGaÙÝ‘gõèõ]ЪžÏ~¯¼²cœú³„ ʲ®ÍTý”ÌNGŽÉNœ8‘EY´tkríæž]#{Ú‹‚²Eìkãl WBaÝt>€r¸ókÙX\©žÔ24OZ ›ž\º)¦%‘eRf§€v»GQÔæn¾ÿúÍSÛÚÙk$™ˆ«yÐ%V¸@æ5Í ¦ŽQ÷œ¹_¡`Vq¿G)H_{>QÈúÜçÿRc<³µÙ,•²I¥¬Rf§€F£‘åy¾ÇñµÅkS?úö•áßüêŽÇ·hn­µâšª¹»N1Yö‹¼õA]ƒGô¢d®¿=¥ùÇ•{4{ÛÃë*xÄ‹¢à¸ ÐÝòºÎó#UðÈÝ™NŽÎJÖ½qyéöûߟ9·t½{JʘeÙ¢”Y#ÄülîØ±cµÓ§OïJ’ø×Ò4{T|÷ë"$C†»ÇæxGܱ!§É©ÍSš/ Ù~&dûùáÇo?~¼+6§ Núâ‹/v_xá…Y 8‰çÅ…WÄÔŒˆ «÷ñ+bQ7Š`ILäŒ~JÌüœ”UÊì`:Ûét$’‰‰‰aÉʾ³Þ{?¿¤­Ëddõ‰'žX3ŸÖëu÷ÓY¥ÿÇÓËËËðÖ[oA¤™‚½üòË(•óY55Ý‹—«ò•W^!1ë\p\þÌ3ÏÀððpðãéÿ`ÀrªÊ¥*¸æIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/scalable/0000775000175000017500000000000013602733774015502 500000000000000uget-2.2.3/pixmaps/icons/hicolor/scalable/apps/0000775000175000017500000000000013602733774016445 500000000000000uget-2.2.3/pixmaps/icons/hicolor/scalable/apps/uget-icon.svg0000664000175000017500000004366713602733703021010 00000000000000 image/svg+xml uget-2.2.3/pixmaps/icons/hicolor/24x24/0000775000175000017500000000000013602733774014517 500000000000000uget-2.2.3/pixmaps/icons/hicolor/24x24/apps/0000775000175000017500000000000013602733774015462 500000000000000uget-2.2.3/pixmaps/icons/hicolor/24x24/apps/uget-icon.png0000664000175000017500000000227213602733703017775 00000000000000‰PNG  IHDRàw=øtEXtSoftwareAdobe ImageReadyqÉe<\IDATxÚ´VMoU=ïcÆö8NšRÒU‰STZ$$Ä*›ŠŠÛŠnØÁ_`ß-â/ÐĆ¢BB @ªZ膠|@œ@bB\šÄùòØ3oÞî}vܴNôì™ñ{çÜ{νïEäyŽçyiþX[[ósssú ÿ'fZ«Õ¾©V«œ|vç“÷.ÌNÝÔ:¬ŠÿˆÌZdYº¶±¾uóÆüŸö „¥[ß~¼ã`&užœß=xOêPaô÷¯~x…Þµuï÷‚Ôr&nC ECÂÑK‰.ÉþÞ!¶ÿÞ…1Æ?»Ü!wÎGÌs…ÐRùÆ'†qyvl†1iô Df ,-¢Ð!%-âÕ„ÿÕ—?`q³†RT„°Iœ"é$DC*’K!J……<Äìä^¾p ÝÕ=“ùÁØÎ:‰u£è{w°ô×*Â3E¨ñÊ‹³xsþõ¾,õzŸ}yÁÁ3B 9m0Ö“Ò8ÊÀò$'30Å2™/Ë4ES¤ô'ºYö.kذþÆeȤ…Í-Ë+üd6ϼ ¬¥ â´1L÷ªk:ûîèäâ{[ˆ€îC ­4²¡ì©“%¸óý¶wv¡œÄõw¯AЯ’%£Áfò•ÙGg^ÅëowcWŽ ”`¬‚„X:T¨²ezR°Ùd¤4aHä”UvJ¢Ý|÷ã}è2Í#K*ÂKç΢226H@ BüÎG-,ù`)uIZ)žYïŒJóTi’`÷°‰0 "(*8"‰“7ÛSL¶Tzyï=¥lõ¿*-1^Åìù) —"2ñä*W"Ì¿ñZ6Fíh *T½*Jú&ËGPÔ@l¤ i2ªH肦¨DÅce–õG±¤Q½x[úžJúŽ6§2è$&ñÚíë÷~]‚-Ø®ÑCKÖÑ:NÈd÷ظûÓ"ZºC(_m$$kÀÒ$Ž #¨ìê‡ ä:÷um••ßbmƒz…’²ãQ[Ý@½õz˜Š@+¿Ýqé2ÖAj:¸03K¤Msd‘Å6É‘PÊÕFSbù÷º÷§Ù<Â/›kУÚËÃHûF$Œ5`rJµ[ qõ­W) ‰öqŠÆ?M¬ï7ÈT$0AŠõƒÊÛ–7룲 î·iêþƒ•j€4K;ÙRY"§'™b¨RÄÅÊ$’…õ5_¤¼ *ýyeÕ/§…:¹WFbnú,Éë±;™ö"é¼Ñ–Vúm˜ÆÜås˜ŽÇSF*Ÿ.ÑiŠeÊžl§èÙ£Awô°³Sž'x+$G—@øí›g*~ÚÀA3qiZ´M«wèähí¤;'“O+ßlß¾rmúñÉ‘qIZ0¢o&áCHyBÕ;½x×äl­åMÒùç {Û‡{ŒÅ˜}:¤;tà´uÿ7z¼tªºžõâ¨Wh|Á˜^§çýoË¿ [ªKòì`!¤ ãlTÊbiÌ-®0^ÖGРáÓ€T&Œÿìæû—v=|‰¬Æ6FSž[Yìö‰çÆ}4\Ùpøüæû£ ®U!‹™«.A·àßßÿÌ-xy÷ƒ›¸²Š;7ë' µYŒ‘‰áYÉôõÃÏäFì·O¿>aø$í@ªʾ²ï1Q†uxo\¤”Є7`XpçÔ 3ˆ£†këZ ÃL”.šðZ`*¢NNþðâ« ºбæD稞?¹úöó/¿Ï¡ËYvó< +“ŒŽ³œ¨Œ– Hìïï¬$•Eª\@W5œXs{6†Ko41³0Í–Tà%:'ó‰rJ¢$O.Vþ¬îéĽΰ°EŠƒË~ý[ ´„¯Àr žžåtE1Ò33£ýÿÿëÌ:dq`p,cac’&˜n}vhþ¢•‘±èbärŠ™•É]ÙŸßÿ~aø–Kß=ùâjè¥ É¡ŒŒÚ2 a>°X4”,U€jÊc¸ãñå7×áz@e6# } vù.¢Õ*ÏÀC#þýó”šd€á.†.wíÀ“‹Š̸ 6Ítç•o˜oì«$^ ¡ƒ¯ïþ¼°ãÁó]Ó.Íþùíw¬Â!dDq ‹HÍo€x3ƒ’Ùxm9<ªLZú Àt}ßMˆ±NIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/24x24/apps/uget-tray-default.png0000664000175000017500000000075413602733703021451 00000000000000‰PNG  IHDRàw=øtEXtSoftwareAdobe ImageReadyqÉe<ŽIDATxÚbüÿÿ?-­-}2›æ>`!¤ ãlTÊbiÌÍ­0^6… @Ãg©4R]}ýÐS}‚‘ 4\‹ÃAàß¿ÿÿZðüörÑ‘°o'+åüûÿÿëûŸŸ0"™íPnô•}14_ÜùðÙòª£·…oðàæÑgêÖR`6Ðpml:ùŹî)G¨ƒ–©(–¬¦¢ƒåäÇWßêà’»uü¹)M‹Š_ßÿü¥©LÌŒðæd>QNIB†LÛ¹H½ ª6S2 R‘#©¨ÓIÄ&®` j Œ\’JGxÝ;÷ê&( Ó¬°;¸àÚš×÷?ùz)H€s##£¶ƒŒˆ&ÕЇ—ÞÜ…çjP™Íˆ0THÁЦˆV«<R ¿vàÉ‹EŇ@yåÈlô8¸Å`°¢úØÏO¯¾çû*Is ²³ã3øÃ‹¯ß.îxø|׌KsA†ãò6Ê­@,B(ïA‹ˆUÐâR[ù*“‘ÖÍ€Wg¥ßʶôIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/24x24/apps/uget-tray-error.png0000664000175000017500000000141013602733703021144 00000000000000‰PNG  IHDRàw=øtEXtSoftwareAdobe ImageReadyqÉe<ªIDATxÚbüÿÿ?-­-}2›æ>`!¤ ãlTÊb9Ì-¨0^6‘ @Ãg©4R]}çä S‚‘ 4ÜŒÃAàïŸ,ƒèåÝ’Ü¿o{þY\RUODž—Ä~óðó—ç·ßB–W6“!*>¿ù!'"ÇÇtãð³5g·Ü{çâg×͘ãÈÄÌÄ4;sïú/¿]„Éé¹ÉKiÙËäcµ$í@ªʾyô 3+sH½ybh£…50Ò.ƒ$¾}üÉ97gÿ?^ áÙ ·@õkýû÷ÿ0#óï`ÄÁS/ `ì+ûkÃØŒLŒ¼ÿþþß 4@*ôhp>šár@Ã÷ ñ9xY™IÊÉLÌŒâ × ‚… ’áÒ@¹@Ã%à‘üû+ÉEÅŸ…€Á¦ˆ.ô­Ôϯ¿%(*‹~}ÿógQñ¡óó°ÙH€-b(›-®×.OËAF‚Ã/ïyôliùGPb³°s±VÙ'h%z*HJqsã2ôëûŸ??¿ýþ̯wϼ4ݰ ¯Ð8 bo –Çãð7 òˆñ*Pš×–ãʤ¥/ ýYGæà׬\IEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/22x22/0000775000175000017500000000000013602733774014513 500000000000000uget-2.2.3/pixmaps/icons/hicolor/22x22/apps/0000775000175000017500000000000013602733774015456 500000000000000uget-2.2.3/pixmaps/icons/hicolor/22x22/apps/uget-icon.png0000664000175000017500000000205113602733703017764 00000000000000‰PNG  IHDRÄ´l;tEXtSoftwareAdobe ImageReadyqÉe<ËIDATxÚ¤•ËnE†ÿª¾¹g;L0Ä6Lä8!V({ÄŠ% Þ‰G@€Ä°@¬Xà ‰!a%Qœh'a’ø’™±=»ëÆ9U=›R­êkõ×çüçÒ¢ÝnƒÇââbF‡Ï7Jâ|"üí/ß|újkîr'çž‹ªÕíÎúãËŸ]úü;A×ù×Ë_þa’bÉ8A„ß?Óp~çÀ[$"D*»óÅG_½Óí¬Ã%£ Ê‹ŸÍ@á˜íP¸‘ÔKÌd°(ô²‚J)ýBæªRã·k×±µ×ƒ¶–¦6ÆZ•´>K3$qŠFVÇ—Þ†v¥—؃µak‰$-A$Ý4Îâû—±mzÈ’ ³YgOµ`h-»¾ö¸ƒG£M$.E 9\$é™Ë9Kcu°€6+5Ý^}€­¢ ™°3S \¸¸8‘`ççlõ –àlaoàY²²X1•¾ùhÒâI¯A@ž’¬a‡le@ˆ— ‘£©ÙJÖj’L=•‚¿'põêM(rõÌÂBÐ1~ Óc¯ïx´^ŸG£žƒd„V:kPJá÷[w0JUÈsb#U(£y,µVÞõ¬žáÂ;¯…¾A®ýº²Š=9"9JêeRâÊ­ØO‹ªŸ߬œ¶85ÓðPfM*/Ô?Ý B …ÔúôzïÍÖïnb8,B`yG¥›éx¢5õpÌÍž@ÚäMq\ãâ@’P ( õ )¸„¥q¡uâŸÛ¦ ïºðú²Tc°í?ö^XÈšI’°¨À¡áÿ Õ÷a󑡃‡E™ ÞX»²ýÓéf>ÎgÒ' þ?ýBBÃí–ý?¯í,3ÓÿóèGú]|Bó ß=ÿßàF²JóbÞüK€9*V%#;úIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/22x22/apps/uget-tray-downloading.png0000664000175000017500000000124313602733703022320 00000000000000‰PNG  IHDRÄ´l;tEXtSoftwareAdobe ImageReadyqÉe<EIDATxÚbüÿÿ?-­-\ 2“…¢Ž³QŠ@ʈyˆ0óf…ñ²ƒ  ™ÔR 'Ö¥ß>þ<¤ñüÿßÿJF&F¸¡Wö=~¾¤ôðM_NO„;k¾›)²žO¯¿ËÀØ8 þñõw'/œÏ-Àþæ0 PöRÛPÖ‘`ª`faBæ]ÿ”dA Ó @ʈ_#À‡‘R<¹îÎÃs[œEûóëïi ƒß<üì""Ï«ýýÓ¯OèÞÂ"Z¬øD99Å~~ûó­ÅuªÁ¿ý+ú÷÷? 1^}v󽤰,¯6Jä½ùñ—`äÁÀ‹;>]ØþàÅ/¿Ï!‹_;øäýÓëïnñŠp²YGª+€Ä~}ÿÃMt–Wâçåâg_xbÍíÙÈâç·=¸}tÅ­R]gÙD•¬ìÌ,ÀˆL¦ Fhj`´ŽR/нFSú¹ép¨Ÿ—^ƒÿþþ÷D³q±€ïLfV&f¤¤'ü÷Ï¿õÐÜKEÞ ŒŒ¥K·c+nýùí÷o<éÚ˜› †Ê#yz’üúþÇgxº•DŒŒ`_ƒb¸]RU@Œ“ÅÐKAÌ4@Y‹þ@ßÕ}d‚.±¶ùääÓîæÍD2¤A9˜…É9ªÝ¦NËAF‚P]ÿoÇ” ·-º ä^Åe0r0•Š)ñ(‰ñqò°bMš.¿ýüòî‡Ï_?ü솕„ †I Å<7ù[@üÄ(•MkZ`¬íŸ_Ó¼#IEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/22x22/apps/uget-tray-default.png0000664000175000017500000000107213602733703021437 00000000000000‰PNG  IHDRÄ´l;tEXtSoftwareAdobe ImageReadyqÉe<ÜIDATxÚbüÿÿ?-­-\ 2“…¢Ž³Qê@ʈù‰0óZ…ñ²#  Ù€ÔR !Ö¥_Þýؤ¼ñ†ñ¿¿ÿ«H1Þ?ÿ*C0ò~~ûF“TÁÂÊ$B‰Á,Ha:HÙñ `ø#–YáËoÞíœzñ>>Ã~ÿü³Ãà7?»ˆÈójÿôë6MŒŒ /î}b×íégec’GWóëÇ_Æf絨ÿþõ—iXS #3ã u ÄþûûŸ1›8ºšwO¿|¦(çýýý— ›8ÐÅ\üéÕ÷O¯|ú ôÝ?‚‘¬ìÌ,ÀˆLz%òعX9âÆ öÒò#»ÿø#Ölå 6¼ ú ¢Ù¸X@ g2³¢zFL‘OH±£;mˆOÇÇVÜ< Ì¿)I»?¿üþŽáâs[ï÷±˜”º 8³¡—‚˜i€²,)_Øùð(¶0¾ Ä~Ïn¾ÆùôÆ;Wnö- Bþùõïß®éoŸÙxw6¾[ݺUÿþÿN!Áþvÿ¶`Ÿû ØgÀþvÿ¶Hüwùòe燧NÊöŒ å#î“­tN•ñÑ“ÝK—.9w|üñÇSxˆ/ˆ]ã#–ÄÏÆ>ú3 §Œ6§e“3y5À!õ‚èUÁ€ÚX<öÿú877û\5®/Dae|ŸÆþ­ÛëlµÚ;WWWïüçïÿò·þ¬¹ÝÞ‚ËéÚÌ0µEªš ¾£ ~±_ýæÏþ¿þ³ß«OžØý©áC(Ȼ۶w6¯¼øÿþ›ÏÿåΉ—|ìp´U¤1@š!á•jtðoÿûO_šŸZØfwaµw šÐF‰‹-h@VØŸXáv{æÂÏÀX0 ›[Wã§ÿø:­îmþqƒ­Ì †é©É1ù'ÿÛ¿716±°Ú½ W;ÿ[ìôXÃôÚkP†ñÒñÝuèç­_“ÿÚÅ4´4´4´4Íè+imù€HÚ~a~fæçgžÛfëp«ûQ“BÆ+´$R¿MNÙ'ìÛïÚÕp-ùË¿á£É‡0! uÍ< ”L&hfbzâÐ 7;éÍùs”C?rœ=dö¿üŠë¶i¢ACAKASIÛHÒÚÒ€,ÖZP‹ã¸Öl7À†ŠP{F†t£ö9î±[ût¶ì¼QÓ4´z‚ÖU6Y->p1 T@<‡è:.Ä÷›õT&SDУ$Cë}» R’Y9UÁéPÑ‚ #:RŠ>ħ„˜K ´fäÖ|ŒÍ ‘jÿÉIvß+AKASM4ô<¿¬ÄnÛf§øÉŒð4 ‘é¾²ÿUFÀŽXa@ú]ê…"HÓÕÚgÏQW@Lßɾ‚š¤ ÅŒÃ¡eDÈë ‹´dÆ{ä0G”ÓrX4Éðîhxwíg°pQ.yFƒý¢/P/z®AÕB“ø¤E† 1„¼j çˆÐ&  >afùóŸFm?Ùæo­·`s­©ËŸÓ PÒš'€öù`&Ýf̯ë2å´‘Éÿ;|bZŠ3öõýú*~r‡›¨JNr&Õ' ‰°tš=¸øöŸÀÇ?Z-¢æ ývä™·j>‰AÔ…E¼ÖF"9E°€èˆâ²ãSá‰Sâ#;Ÿ_ùgàØ³Z^ýÏhpk e®Èã¦ÑN`yƒÂéÈKTŽÙ?çÖë2xçWàôË‹@!ƒ`<€ÚB A Ÿ\cÊëÓ¢0"%~*A€ù{.¨ÇUÁæ94vZ@–éÉž1¯uëë„MéÇÜ¢¡7FÒ“,ü¹¿³¹º/û,Ý\‡ÊlÑt‚zóï âc&iéy‰çƒ©êÌ`‚”~ ÅÕiÄ/4L×Õcw93ÒÏÀÒ‚2'ìc2g*®Ø}ùN œ:( åZ@n¤håÚ&¼ø×ga‡µ¡v¬ Ñ0•ú ¸x“øùÅÓ±¼òóªYÅT À+J¤?Éͪyò<ÂJ`ÅPŽ0tp'l‡¡¶U·Ã3ir3eš. /¿Û„ï}ëmèñ¼»~„:L¤>¿ÐLò¥3`9ãj¦&jé9²2ÉWœ­b„Ðon¶ ÛáÇ ”Æ ¸Ê8—¹ËH+LZ*v†<ŠdvËJ¨H‘~ó±IÑ’‰ ñÔø…?z1ƒêᢙ°¢À»%’/žzâxöÙ'wz~ÿ_ÎÂõ¥;ÖùoävÀ&áÉ Æ SDhi-û18"H¸f@ä ü »™ØR"‡=EKÍϾ|înnCõXœØ}¬è’OdÉŸ–¥T+À.›ÊZ+ènö ¨¢’b$–Š#6TTû&%°¨‡Øè©Ô€Š¦@ÈrHh8W–Ñ6ÉÐÓµmßmÁé[„Ê\ñ‚Hî‘9}"-æVsé,ôívz%Ø`Ûék³Ä„iÑ; ¥!õä0÷äIÌ ô<#ÀŒ£j0©§€z*.¤Ÿˆ,wëJµÿïµ›@1qÉÑÿ^ 87¤"Ü3ì~&ý)ÀE»Ö€\ÇÄo¢bzÌ‹À<ˆÓ¤ÞŠ/”äLKâÈrÂý5ÀDCuWŠN¾Úµ1trÿGg–!šŠ ãì ±(ïZTž«šG˜_ì®ûZó’¢ÊKtH½jÐza®¹ †®Ò—ä„É“'f– 1Êbþ&¬¯lAýD5µ½™ý”vŸeΕoSa—Uée°[ ð¤G¤J=9ß7÷' ###‚œE&œEƒàåˆ96¢º[t&]MjrÓT Ò —ÈNxÈÁYñ»—%6¯ä{~ÓÐ\²á*Õ ” Ëz“‚ÇDÉ]ƒ<>BÃÑÐiõ’_ÅŠhõ8;ÐSo¢=¤¿J–A%ßa‘R Ï­L‡"Í„™vñè¸b,"Ü`\c­ A¨V7HŸ4d£"Ê#å·I‘.‚];aÕk!é•/ôI½!ݨfËä†ë ï2{îÒ†Šð¢EnЭÇÃGazBÝîS^…P5A^!Ùp19=ÌÒ¯›TN¸#B·´‘ñ§‡ó#8a; B]-œ# t"óè2™‰H;N7‡HrÈ(¢ZiÚ}”³½Ä'lÊ‚3y5#EA¨;aæ°¾N’jþ€ Ãã*MNKÆõ©cA\5ä#Óþï^òs%»pä5;ä1¸DVìS¶,8û9á #´Ï{é­[Ðmµ`pôZ˜„ƒÇ'‚—&?”XšÓ¥>†`Oêø'>wfw&“œ$o!/:™6þ3‚µ;[9tU¨ÃÜÁqÝ%)–Ld½(¯öâëËðÚ?/B4¥Ð±§’T«À¯ýî3Ög:.ÄÕ×,ÚÙ¦³º¶Kôů/ ™êš§ˆ@3=FD7R"æ0Aº]–¿þh áDè(á¥QˆI*"«¸áA¦¨yo6½¨¼]“Ü&h¸D¬G=¿„ ȹÆuj"à œ HJ–ahCC<}¦§Ÿ©AФìÞÞÏ€BôLX‡° -‡.IÚ2jŒÒú‚ÛªàVF(f…¨Êiš!_™tIÐ^´û®/oC{§c4°yÃüÂ8ˆJ'sä#vEd>@½(—tÔÀ²ü=(>3ítÑQ æQh”ÿÊ,aíR^ýθ¶x±0 ‰JLŸ;ËÞüÅßú:& D‰4b&ìëŽÏˆ‡igGÛçÁIGê<Õ‰!z¤ß‹{¤rä<ŒG0µÃ1Äã¼ç#¾Úꃶ›W´zéE(° !£ Ætå§f O1$;QÙD"=ƒ,ïní‹PZÝ®±ˆÁ ”~[™bŠûf£dÂF=@  Öw2éw%O9fo`&vÇ"ÇÌ—NÛ=ÄÍ`€묡íüú°ôlÄqÀBC¡À‚΄Xy‚¨œœFé „—,uFPý¾@wvˆ~áÝ ,eKIÖ¤E%Åø²ãD²®m&b0BE¬o= ƒ2J(¢¡äŸ¹4K¨;˜UÚ5­HÁ` õÔ˜–€^È[SÈ€úûCͤû.à^åK»F£Ñê EÙögjA?3„žj]Ñåa·¤ô1A½’ ™¤³ ìX?ûLp]èh‰ÝáË_Z,óZ-Úµøê/„n%á¨ÝGÐéöà‡o\P²O?mri@F˰ r&b–£tµsa§ÛÈݨ!Ûh´á“ëëðãŸ?2>3ê69_-ýüõ—.CãÆÔ‰!ŒÃB ¬–Aµ£ÏLÄÊL›—=þǬÉEdI9ÊX3bËçE2æšæ)”ª-êÅç/,ÃÌT9>}_À· ¯~—^¿Õã~>˜œ¯³ÜMŽÇ€.zà×€Àç„ È1EøU…P­®æƒ•–=–pEd¨8åt„õÞ|ãc¸{{kÜÃÁàöGpæû× 2_*×’°åç…è8oBkùv%“ôw)ú™ç ´3ï¡”‘–á¢bP͵$LºgÝÉX¸ªDê&xûÍkÐkw ÞãÑnváç?‚ð@õ£Uˆ&ÃdŽ‚^º4L09_,”AþVœˆnÔܧb„kùw–¼(ü^7¾sÍTdÛè½¶"uÓ)l/ŠòšÙ#¢-q2Dž×äÊ6Õ¸Oªh5€Å›k0}¡ÇŸš½§vÿü+ËpãÒ]¨.T!>AcAÕD#]„ÄU÷Š—äDTýŒæ)š àý‹·àÀ\ &Twg÷¯ïÀÿÅ“-nŠyjÁXÀ…™yVCq´H*L •6† –Í’ Ê2a}mˆÂ&†Õ´¢+He¦Ò îCÚþ¾˜PÕÙ ¶б Ô™Ó7¡Óî9\ß`­í.¼õOסÂCÍÄîsGz™M™B»X"¯I‡ÝÉÈ…³1l&,9È‹ñ¥³1|‰QÑ×iá:þ•/ŒœÛÁ)w‘9j›·¢¼vy$§›ÌÊá&´9aªGãdn²°,Ÿ%cwO{<©BIÆôßnµ”¢+ÂúKß›;1Un©Ë¬È` <Ý·I¹úhŒ>d©±×.¯-ý¾¶ ËWsÉçy²UEÍgަ5ò±]DÐh¤Q­¤+"( J1“'žžnƒ¾­œaYš«ïG¾ïZ M–Ê^tañl®µÎuW>Ú‚þãTsâs»5L49$S|G—ÊS^ã¼ùc},*Å—†5AhJ½ùwò+307UåLè%¡Ü§ZP‘Ò&"*¬ðîÙ%hwRô¶llóxÿ49+‡C¨ãÏD:CSHh–xZ°9²`tì³4 6ÚÓ <ÉZÌàéŸ9 3Õ °³»\}è`bYœþVHû\LÌ1îDœ¹]*üÔ#xç»7 Ã£œªpºSA&«³t„­F弋ßâµêòäcÈa|²â¥ œ k9ŸÞÉ,Þ†Ü~ñë‡á‰“SqSĺT̤6ë™*5Õ8Aµ:Ãú mˆØ}e§ ×7¼Òþ•Ûp‹Çû1wºn÷Åz™Ägàt¸U5ƒ‚ÉÉȘtÂbyŒA—«qõE;Vá¶øØ©I8úø4Ö[I¼¸¹ÑNS¶À݃ÓhtàÆÍFv¡ì &WוŕçI#07E/ßi¡OÇÚWV?Þ†^Y†±<Ù:%ë«+Ÿ€ÚF©j:å‘Üà¢Ø94¦Wà ”®ÌÒFåöÙW²Ótñlò@œdÊSSqÈ9šYÄLÉÿw ¢99YÁ¤yZaÀ‘& Ûxï¹ÏüÔ¨TSî·]xý®@t0€ÊÑpÒ™ù@%ç º{Ÿj<Éœ› GKýpø0¼Aœý1 `.g-W’1¿qâœ8> Ýõ.õj—á&ïKW#¦(œtªÜܼ·’ÿÖ›Ï_….÷õG«P9¥Xò‰Ô2e~3ìä+ç´ð蘶ġŸbC6çfö­L\]Љ”¹ñ¨}ªUäXªìÔWfaey¶·zP‘裿{Ê>=ri˜Èbî¶[píà ؼÑL~cìd-)/æÅ*é2ÚQÈgúø6ÏÍÝÜ|UY'ˆ\e«ŒÃA¶´Û+bæèXˆõ]0(†øì'Ž›Šm€^“•çd…¿”Õž o.òƒÅkpåú&ÔOÖ’x?ÿœÇJ¿›|Ÿõ¾ïgcz2†Ç›tTÂÜ4¾-ÅÕN¦ J4D: ÔôÁÑÒ¢ˆm2ÙƒKäÓÏ‚so­@›‡‡a=aò, \n,„ñ…š„ÀƒÂô8¿eH½ÒŒåš’:5Ãg?;™S#±êÔÉëËòè²ËdËz!Ï*dÇr¿`Ûv½^çæçKÏÎÃt%‚î–’Ô ’Ø–å ì¦Hl€î›20ݱ¾ÒŒsñ¥GÕàɧ&e„ÇYgÔ…\ah 4¡¶*®eãóIª¤¬¤XˆNϹp±q<úÜ×fáöÕmøøÚtƬÀž•Ñe§õÆÍRå±>Ç1D´óîpgçâüî ~éƒbƒ/ؤ%bY}'Ð1€<™"mµDLÓgt­-aó õd¬ÝjÁêJ 6x¾ÐæRšä ØÇááªkÙ1ﺄcõƸÍÌÄ03W)Pb°‰¯GJ¤ðÝÒ€Òötm¹šÌô ˜œW,U†`ßÚ `‚¶ËÇQ“ôŸÀ^[ ¼Î¾y€;GÅœ òSZ÷'Ió„ªzØî#áÍ,¹|fD}Õ>*“µ¹H_‚@_9{‘æÜЙP=¸´'op®'ZèÁ}h€uÝ} È›sÍ9¾€:Pf¹ ,¬0Á«ŒýâþK|ß÷I-´ËNuCGÈnF: uJcÙ”±bÉZ¼ÉwŸ¥ÝUc>=FødX5;lI§‘|å·ê°1´oâDiÌŸÖGý‹u?~€úBôN½paÕE:=œhmöZÁTÉã T&”(úñ‡ÆÐ`ìò4(£¤e)qéÒ%SwgãfónAIÏ}ÿH—™êlßïQ~ŽVdâžóà9¶ ¡ %¤·0ìfxŒ¤¹¦]¹“àÖöÒ{ësOŽ7;è±^‰š:Ö Õæ#Œ` èw×HÿU„AÚ (h éíl[ #ÀÅ€žÜiçÂ÷Vß=òåÉ“³ÕgÄÚdý cù#ú]@ÿÌ ?5bî}Ô”Î91LÌïÅ5AKASIÛžÉí·ùê²ÌÏõÆé¿ºñÖ3ß<öÕÙ“õ™+²~›•”{³€rSÏkõîzù»ˆÚÌ}Tt¤8¦Ë·€µÌ±oó"ÓÕ'ShM…æ>d˜%r˜)2ì#¸óÑΚ ¡ ¥ ©¤m[ÒÚb@KªÉKön,u&^ù£+Í'¿1÷cG~bb~êXu2ž¬ÄY4Ps_kEÙt9KÊç©è;åÞEk®–·ÄÊöBÔïX™â€è„6ôȘ­NÆçd”MH]‡š¤Ï”õàÌ0¨„¢â³öf§½q£µùÉÙÆÊÅWÏóÝùGW%M7S$óýŽÚ‚!â¶«ó|œàã(be»cPÜŽµû[Ù&lük|ÜÄ¿ÉÇ>VÄûÜ'&HÜQ[ CÅœ [R3®ÈmÊ/Žï3`(lI³#$_ÜÎ|ÒÛ™wûåÛ†O ¸é¶k¥Ùóþ–3MétïJ³#hØPhëgçP® mÉ€©N¹°OãÒ)!}[½aJ~ßLXš£uÉ€Hû ŒÙhI¡ Rµ¡¥zmÎܧq)͆J6þ_€¿¨[bÊûï¥IEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/48x48/0000775000175000017500000000000013602733774014533 500000000000000uget-2.2.3/pixmaps/icons/hicolor/48x48/apps/0000775000175000017500000000000013602733774015476 500000000000000uget-2.2.3/pixmaps/icons/hicolor/48x48/apps/uget-icon.png0000664000175000017500000000627213602733703020015 00000000000000‰PNG  IHDR00Wù‡tEXtSoftwareAdobe ImageReadyqÉe< \IDATxÚÌZ]Œ]U^{ïsîÏ\îüô_è%¤j ¡šÚ„˜Àƒ‰ò` $<`´& ¾}’ø¤« F 1±‰"áE„­HCV j§Ò™;ÿ÷ž³÷v­½öÞçœé)MáNöÜ;wîÙçÛk}ë[kí}ʼn'€ÖZB€ÄŸ±‡]Š5Yò†˜››ƒ……E{àÀȲž_‹ý”ðò½Ó´wß}74› Ñjµ« ˜ÅñãÇÁ333⡇~d_}íU5<2¸ñÜøDúY2ý†M볩Éé³;oÝ©yä—¢Ýn[)%¢P¯×·íÚ-»0wÕ¾ïg;nÞ~—RªIèo±Jüèïi2°ÖzaôÈñgõ“ßý´­Ó/¿ò’©Õê6éõzðÀªÉ© íÿæ{¿ØyÇöoŸ¬Ô+€«Iñ¾‹Fµv~ýó÷<(ïkþüû¿ý.bžyôÑGó$Ë2xî¹çT­žîØvÓÚ;ßš{]›Ü‰?U¸âÿ¼€ª?Œ5±Ùm7]'aEÌG{žô0PZµ<ÏÖ,èòÞ( Ê”"Â…7Äj,ÂFüÖÿˆÒ2þÖ’0*™¬©¤5ÄÞMž|âI˜QƒƒCu Zhk@ZYZ½Å‹%OdÖÂê*“eآϭóFä~}zº£{Òív½ŒÒuF¸‹­u·"€þý"*þWÁ¬~‹ð=bðÞ‚†«ž„„`)lKàéI•øoükÑ'"è1?Ý…÷ß:cÓÐ[Ô1ÑX?'YiÜ_Õ0Ü0æ•Ͻ¦k) }µä+ßÜVâæq«»?—”Ì ¬Ñ(Yøe gÄk Fƒ,1²ä ÿ—Î ¼øÔ(üó•“©À¤“ Òk€Ñèvœ—†£¹­ò¦% $ÙI’Bš$¨ƒÐ0êI 7~mÔšÄÄÁóDû%½uvvÃ8Çy2šA‹nF£ÂÓ¿? cãCíª¿… È5ÇÅ‹ÞpÇY•p‹N )z"Ásº‹6bîÙT¼—v°Â a$É1  ¸a7UÞŸ…Ó““®E«£v! @â]Ðwî¸slÞ6²,÷ß{gþö×cx-ÏOœµ(€6±™í‘õÀ§Åi#S,õ€ ŒÇ àÌOœ*ÙTµºsaŽýk ’É7wTà] Ùy 2'/™åƒW6… PVms¦­MxN~Ûc².+—C0)+G;Û™ÜÅ‚ª–”WÇß9 ²)™_Â߉Š+òyp}—QXfÆ:u¶<;Ñ–©ÂÆcA êÈd²ý(’ècÜŒŸJ–Ò çƒpé…©Y¾ro®Š(¯>+, ô?/~î—&ù ªX®ƒ¬eê° Îk})d5/€%‰Ù.8 9ÈuDªqbâ< ðÏqø€4.V튅ƒð¿™~_ä#4ú]8àn@c½,…Dø° ·"R§Ft¬/À["ZÝ?KáãAxr‰gžS,‘gënu ¶÷€÷„O¯ Yç#B Ìuáõ§?(²- C¢`ïwvø+DA!Q~.b"Ô4Ë=Ömjîۮ/Ñ­.±áb463·Jh¯Kc 8ŒÑt q’pÜà ì\X€÷?<ÿ›ÏjèMd°çÛ7úì‰÷‘^Çý³ô¯¥Ï¦¶P¾öPÇÆ¾ÔbËçQ)Á¢B‰¬O»ÀpÁãÙNYµÉÉû²É ‘;w²òÙ"”B,ø ŽN»DŸý £‡N”ýò6‘˜iR-à¦o\ ªÆJ®]ÆOV=ÀõЦ-®¶®"¿MëgÑPU QÊ\° UËâåÓ8ñ›$5ìƒU†ð¦lßµ7Õ(JC"»Ø6J– 9ÅñÑz@6 —áÄCÑ­Û"QxÅUŒÚe[ö:@}s xn³ ²\CPØ@ɲSË¥„tå"=Ô;"Z:ȦbÏ…sžéÞ¾ª .0ve¥kUCòÇ¥Ÿà8’K’\IJìpÃÅÀEyÀMa\3ü¥h°^PŠÊÃÓ"è©bd™§Úò¹¦ÖAùêmµâZí:\sõÎä~êÌTÕ«xí1 _–÷Md®ôöº –KßJ’ÜôpŠ/'.TÜÉ µ-…kv¬©î(¬#plõ÷°0zlÜqWxAš!$0~¶KªÑˆÓút ÅJ /%ŸøP»žªO o<õŒŒÔaxSã²»²sÿ™…w1 å€Œs ò¦ ô¾¯sB–UÈцTÆX_^¼;@Å…"¨öC ª–„WžƒÅ™œ µO8æ§{pè¥Qº €2m¹&qØ4TUHV2±¡,g½ÛM”C±„Ög‹àa ºÚpÍÍ ÐÈå£OŸs}Ä'9‚zíÅS Sž§H„E‰ÁµiHhý31«k)Á¹ËQ¨D™bˇ ÿððh ôÕ7ÖœÅé34¹ª£Öa½šKøø4öÇŸ‚«w ^’:£‡ÏÂdwÔ€bJ*nŠˆ>¡T'åÑTŸQ6v¶»X…,øm ‹ÿÈ¡‹tÇ´¶6¸;hqR ƒ-¤]âK×#o{Þ?Ô¡«RÙZ_>Ÿš…“c ¹"©ˆBLÑþNŽ)b™xT¢Kî䊥‰H.I]œ #Àâz¨4¹Ý$ç&Ç%d¨è hµ!Gÿ2Ýy.Ñ—ŽÙN޾9²¥¢q eIìÂb%Ê}TŠJMÁµáPÆ*ìK·nk—2«pÔ ‡SãÛ=Ã#ÃÉ37ÀËÖh‹¸¨üéŒëÊ?$×o¼~r ~‘zª”G¨f%[<©ó¢}«SÁ-« -võumØ‚‹žN1rB­AÒ6¤\÷:×rb¡ H“fà&\ÿÆ»ož‡9½o*ªx)på±g–Øä§.!\¶oC#8xùôÕA×Ý0[·´¡»˜Ç´À%ªÍÑ žÐTAr*ƒIס'f%¼ýÂ8ÆB Ö_Û‚‰±985>1•@l†Ë¬kWÈ8Ë‚†u×§¾„0žʶ¬x@x­å¢‰_Sñ”Ô©v¯¹q…«ák0<\ƒMØX¦ˆ·ý¡}žh"7bV]+áµ?ÁÔ¹E½€ÉJ•¢¯¤÷"îDC¶ˆt™Ë`ó—‹e<Âô÷ï²çš«u¸'&dÒ7'®U [ ø¸vû ,¢g&;=O+å}'RJpÍ-uÈ;99tÔÅûœ1Ñøý¦pûAz*ƒ_†Z[ÆÝÇÒ%¥I¥©§O_¹2¤«H•~ïQ”2 p®¾ñ CðáÉ98sfÁµ€¾Ž-®[D A*M¶HÊ7ö{CxkÜl %¯ýò0 ®OCG\\cVˆ·yíBŸ!ʸ ae¿ØÞÕ%ËmCn_¹¹ ã °0oªô¸ô!LÜ+m6Œ¬­A£%XíÛG‘ò[‹ýwæBÓÀT åx•pÒ*ü6Kyw´¤Á´·\~Wö‚-7Váï°™j‹sƒŠdq’·Â‹O ¿¥ZDš°…åWá¸r°äÔ†Ý츻íF›ÁóóóAÉ$¥km‹áv©…SÉp* cé´:gd¦|ÔaÙt¦rJÃí·;“@ìòöÛwC½Þ C‰<_´ £ ­;ÚÄ rËRªý¶^î†^¥á“+Ù9iiß&zFÂJ˜ »Ü½{·h5rÝÓ§_ž9ÙL±‚[[ë–Í­¯-÷ëÕ^Ê•€¸ÄèsíÒy}÷ÇIÓ†[6ÂHX 3aOè«Y/ŸWJ<öljgpÍ­·aÙH’x6é|ƇNZE8±þÜV$I«Œ›¥áXýJÜç4•C ¥Ýg·;­ãq Llù¿ŸùøôèóÏVÂLØÝW žþy¸ÿþû±r/ P7§MqN5ðI¾Épyÿ±—ñîEߘÏì{Hª#øç[=öع½{÷òW è±ÿ~¹ÿ¯‡z½Œöú†pÔ>cßT¡ožtjµôì¾}?èìÛ·-@kíN<‡VZçÉã?¡è\|ÊßV!RÑ&×½÷Þ£•Jò[n¹EïÙ³'bþ¯»ç—À¸žIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/48x48/apps/uget-tray-downloading.png0000664000175000017500000000217413602733703022344 00000000000000‰PNG  IHDR00Wù‡tEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbüÿÿ?ÃPL CŒz`Ô#Ý,ÈFFF’ è8E‘*Œ—‘¬¹ä^1@°â b~Åà}`l)QÕ@ËÙ€Ô4 N¦C` Q5€ŽçR»€Ø—š÷Ͼ~ýóëï?|æðsppò²±²ï×·?œÔNBuø‹K]}vóý7|j"Û¬ÕôÝå¥zàÇŸ¿Tó0ôT)!uÀ}¤^àSÃÌÂ$?™8d7!Ef*SRg:ïÆ§æÁ…×G€”"!³€EüªUd?¿ý6#FÝïŸXh³ÉòÀ·¿†tSX êŠ ˜IU°TH€Ék°þýg¦–>¿ùþþõƒOŸ ©ûøòÛ{¢<t<ºEíz ‚x€zM¥åGö‚ª"”¾"6°†îŸ_ÿ¸i” @»E„ºÇDyà⎇ú˜EóÛÇŸiáz`ŒË)c"”Šbk¹²`)"±&ÿhÖr%Ö*ƒ²CóôÆ;UbÔÛTƒÒ¿üå$ÎÿiÙ`xxñÍ»O¯¿ý@Í7_>Ò÷äêÛ{À¢%)‰ ñqp ÅÀ_šz€•ƒ™yeíñ;hÍç—î9úxõmé;wHÉÂøêÖRü:N²’tïÔK© ò'OsÈ$ü‰­—aêÅ”øDuX+12avÎq5æ¨ÚØR4³‹3@]´*²½@}ÌÐI]RZdbPS‹Ì’Íúâ\¢ÀPš bÿøò[_/ÔBb+ þNdeæ ¤ªiÚ¡áäcãRi 6Á.¬Oâ"/¤æÓA"* Ý;ûê°ÌýG…¤©È$ 4ª±ÔL ZàÂŽ¿^Üùð‘Jù¡—@~肎)QµCósû¤ó7¨  Zv5Ž’4–OtýóÏb=ðçîé—'–W½üöñç¯Tð(æ`iÀÍ'©Í}ÿÓ{R2ñŒ«ûkñ{>1.VY^”j˜‰™cºmõ˜˜‰-†C€¸ˆû ±²ŽÔòþô†»×Hñ¨ƒQ Ä9Ÿ^}Sâßè Îl¼ûÄ,HEŽ7´ñq Ž%²ùŒÒκ¼çÑa¬Ã-ÈCÕ8†×Ae¾zÚfacî˘ëj(£%$H‚[>’òo~þ2+cïE` fB›(ÃëÄxHz"&¸Î\ÙÐSAšMmPÈ/­8rèø£@n9Ò¨U<À- A-HëHuiAInN9^l1bÀ÷Ï¿~yûãÇ£Ëo>Ü8ò ”l@÷dóµ=óD´H¤8Í;ÐÆ¥¨æð°³­ õ„4´ïJn#ñt”â"Ôñgp ¬QφïÙP\71:Ñ=ê @€É£z¾†Ê9ÑIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/48x48/apps/uget-tray-default.png0000664000175000017500000000165613602733703021467 00000000000000‰PNG  IHDR00Wù‡tEXtSoftwareAdobe ImageReadyqÉe<PIDATxÚbüÿÿ?ÃPL CŒz`Ô#Ý,ÈFFF’ è8E‘*Œ—‘¬¹ä^1@pâL vb~Åà5`liSÕ@ËÙ€Ô Ž¥C` Q5€ŽçR»€Ø†Iå뇟¼Ô.…ZèåxHÎe`¤š€¡¯¤ò‡r=ÄÌCÖ¿¾ÿqÒ5ñ÷O¿$‡´þüþ'0¨+2`&UÁR!=V$¯Á¿ÿDyüý³¯_ÿüúûýøòÛ{¢<t<ºEíz ÂW¤¡ƒåÕG¯=ºôæ+•û±1€µtùóë7©6²²1?R/¨äÇDyà⎇úò ß>þ¤Hª†^ 3Rg:oGU~KXŽDãΓp ÁLüóÛo¬éûß?ªµ\ùÉp<H ŠÍõÃOÈ,º…~}ýÃA޾ÿ3  ù>1 #Óö' ç`ìR Þ?ÿúöõƒOŸá!ÈÌÈ$,ËË=d<°¡ýô P™ã‹Èór”¬óµ ¹ĹDÍŒ™ ö/¿)i̽â[p°2ƒÌ¢½8ùØø€TˆÍÁÃJ”OÅI v¾Qˆ¿þqQ5Ü;ûꇑÒ?6&Š38Ð Bj˜Y˜¨[ ]Øñà׳›ï>¶òþ?މ lÞÿ¹sêÅÀÖç¿Áäoý Öîž~yt^Îþóo~þ2X<ðêþÇ·ØÄ‘cipW ˆAOŒ‹UD–¥ýÌÄÌ1ݶz 2œ^˜Ÿw`åÍ£Ï" É‰`)*æò€¸ôÓ«o*@ü]Áùm÷Ÿû*ÉÒÃñ@‡¿âc¤ÄJÄbè¥*K_ÚLC-!AZ:þÙÍ÷ÉùÊ—w?€Ü;è1@Œp,6æððfK]9)Z8˜ß,«8rã뇟; C™ Ôô;·ƒzŽj–’|–ajÒ"r¼\@ÌÃÈDÆL ¨¤ùôë××w?~>ºüæÃÕýOÞ^;øäPø2Wñgj{–‡@c¤>4JA‡¸ˆ¿¢Õ Tó¸ixðbPwQ…‚fú;h[é"…ÒØ*5êy`€jåáÓ¥dÁå³Ñ>ñ¨Fˆ ÷‘1êÓ¿ XIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/48x48/apps/uget-tray-error.png0000664000175000017500000000253213602733703021166 00000000000000‰PNG  IHDR00Wù‡tEXtSoftwareAdobe ImageReadyqÉe<üIDATxÚìZ}L[Uo__ -ÐάØê6ÍÌ †%³ýáÔE“ý1ñ+™aÙ]ÌܨÁ¯%F—ctšA¦d32‰q†¨‘9°’ —5€Ï2Baý-ÐÒï/Ï…«)å½Ç{åµÐÉI~»íã¾÷~¿{î=çÜÛ‰#‘ˆ(•¥¸- Xð@F‹Å¼ð¡þÙ¨ÜTÏûžèÈysy`V (”V'ȃƒà­AÀËeÐ| (KÂ`ç êLþ à‰dL•€7(: Hù™…+NŒ>šëϧr(-‹K@Ð.Mõ0šþÐ[Çšk¨!¶ŽY9éÒUÅ…i ©4fÂßn7LZ=~¶û7?³îö [óW * Kó²ó23ÆŒN¯Ãê°õ÷8üÔ •n$eĴǾPè´¶ên™`»O¦ ‰œÕY¼=‹ô.hT1—G!‘˜£#‚J£8³CZóró¾Ñ»—á+z/™ªê+/ÏÝr?ºðÃQ}·ÀÇwvÚ ¯:½¬vÛ±´ ©’— Ÿ M@ó§ï;猒œ,®øzûqø¸ 6C½£ÂÕ§ßl£€äJã_F¸¬…wuÑÕB8Çœlù÷škÂç庈%4äÑœese àºû0!4‡¨æá@yñ"Ïò¼:ÀÓ³H‘·<ÐÕ4”N×Ñft¬gi<‰Ë ¦Ük‡ás+K?ôŒ9’DJp›B>w€¶g8Ì)äî„ûqKîÊ< ²…sGZ"&’µ¡A>ˆ#»WBó:ãb•d2wdoÞæAþµxD'zCs¾÷$µ˜›wçÑaµU•4üĵÿ[›t]g‡®/ ŒtÛǿا3ý¡;8×ú¾P.äˆÞkm×-‹*ÀÜ?á¨ÝÓLù‹(\ò¸õ@ãWÎ_C°(ù{¥üî Í X˜a·£¾ƒðsu:ƒu`Ò!x5ºB£X ¤j¦ßг“œÓurëŸSvo'.‚, [¸Ì dP{ñl¸üä£o-P)ó€\)SâLYtRÒÞ/ËuŒ›\˜¼á¨@üð# ˆi«¼^ì®ÝÓBMZÜÞ Æ÷¢Z‹(Ó€uÚF¦®¢¸ä ]oü‚OVZXB§ erêøîsf—{=ÌI@gÓß~£aŒÓBÔ[m0_‡Q¡äí Ýáó€µ ‚è yñ xu°¯Ýl›)&C!ºŽâèc:|´HæªuP‹?»‹ZL1Î#;•3Iýh18zÕ~¡®â·.Y–ŠÛ°sœ«å>C[Zô%o}v†,üO¬æN•â©C&S$º&ÈÖÅz€)ŒqeˆÊâõ#›köB·8ו¬R>œ«Iù¾ßÍ7€|ÄÚ@ZÔ÷|y–ìÝŸoÝW¤¾%‘äQRC!¢Ò+h¿ë®èL+SÛw½Wr7Û±ÇB¬÷’ÉÚPu±’[ > )eÔ÷ 5òÈKEyšU&Sÿe³08… ÂÓêUÀã šA:@5Nn¢D˜þ¢rS=Z#»p¹@à6C£lô£ã#<ú4›,†Ý¼¿‘¥âÿ›Xþ¡{YÀíä#2˜íKIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/128x128/0000775000175000017500000000000013602733774014671 500000000000000uget-2.2.3/pixmaps/icons/hicolor/128x128/apps/0000775000175000017500000000000013602733774015634 500000000000000uget-2.2.3/pixmaps/icons/hicolor/128x128/apps/uget-icon.png0000664000175000017500000002512113602733703020145 00000000000000‰PNG  IHDR€€Ã>aËtEXtSoftwareAdobe ImageReadyqÉe<)óIDATxÚì}iŒ%×uÞ9Uõ^oÓÓ=3$gåˆä"mÉ´EÛ¢ODIH$–ÿŠ’ˆIA ° „€ …ü3€?ƒ1h1“ÈKd)¦I{Dj.æÎ9rسtÏÖ{÷ÛîɽU÷V»ÔòzºÉ™á¼AÍë®·tÕ=çžóïœ{.\|xÑõ!¸®××àúãº\|(‰ùáøñãÞ‹Bˆ¢z½<ÿüóÐï÷!IÒ úoÿþýðíoüñë#ù=>÷¹ÏÁ7¿ùM:uê”9EFN÷Üs´Z­\ŽîãСC€& )€y=z|ðAc1b­æÙ×̃Ø1`ÏâÑG…{ï½·ôƒA`³<}9rzè!\]]U'ÛòèÊ£w}ܯØGËÈi||¼ÿÈ#ÐáÇó¹|•$žO/ÎÌÌÀc=“““ðãÿ8–ÂoéÙ¿²ç–]ÿÁoZté¦8J¦ã8ž@Pöå:¡ðþ?IøÁ`°2ýù¨sGþ깿?ûÎ…“òÅq)·ø»ßýnïË_þò`ii xà8pà@pŸúôiøÞ÷¾‡úõ‘‘Ñvkbzl¼ÕJîúê}é+ÿê¿ø/»@Fp$iI…ÃëXò´ÿBšãt¨ÓoμmïýÓ¿üa¯×Ÿ]™_[=vìXòï|§£&ÿ§>õ)R À1¥æ¤t ¨M‰:≩±ÉÏÿër×á/þκíÖƒ¿¶¿ ™ëXÞD7f`~(Äæß÷åzD¼åŸýáá?¾íãï>òÓgÿôgßêÎzwA»åî•ë&=ðôÓO§>ßÌ~y,&­ø7ïó÷üçÛo½õ0Jì·48+t :b úÐQZHÊ mÀ†8{m*@Õ™Fß#gj„‰ÓH4¸¦“AÊéÓôy=þ££"ßô”<¶«7ík_K1Á}÷ÝV€'žx~øa”þ¢­µví›úµ/í ÿâÖC·|¡/Å}ní]˜§I ûÔ•gzÙul@˜¸W®Eá7S ”œw‰4Ô µaæhU,ácû'”¼¤ÜÞüÁ#}éÂé#¶¥\Å7¾ñŽt ô™Ï|&ûÜÿý ãÉ–‚-ªÙßûÒ¿ÿô¿ý£ÿòoþx¥×Û;?8s½Ô¡láHö÷ƒÂj:·‘߉¾ÍkK†ï•*DÈzdQ`:0‚tSëVœŽ÷ÂD«uæ¿ýÉŸý׿üÿ?•;—ríH¹®ìß¿¿÷ä“OúQ€|¥ÄòMÆüGrªè@oïÚ`.IèÑ:¶q¬‘§œ$¨òñT„WïR)ÄT½r1êÏ+¹(ù(9À8$­©½J~Z–-)WÅÄRÎ}ó%I`JFÌÿ·GFÆvJt óƒ9èSǹÿF(¿x.xd7JìUr~úðaxÊîŽk1^\ìŸBS9)yí‚iPò“''ôǺZ¾X¦cûRßnlkÉS«â ¤:ÅòQ•÷g;f>VÌök٠تŽÎ¼/s˜è|–ND%ŸèÃ*^%7%?yzL¿y•ÉXx }„¡xcFbz²/#A"E!3Uúþò›ÎâÌ®ìšöÿdM"´ÆÑªP" ÚNL£2 ÎÓáTòÓ€^Ùj9ûQ€ôܨ×ùõ‘€ü´P_,CÍÈóÛ‚™ý°[°må&/» !G#BmîðZÇ™ðå@Z÷ l\|ãæ üq×ãME*±:ièk¹FZζ|õ«_…^x˜ÓŽ2 ˜Ò‹¦ôûë¼µ«Ážç"M íw œ¡š¿q5pŽ¢6ôÍ„ìÝ ¡ŸÐh6  9éf2 #[%g%o•äËà™gžÉ|H,}È`P(Œñ…3 LºNìB‘RÍ÷. ;AZW¨ÄŠ«ÂÌC0ÀKÏçúO@%t:Ø‹„MCB²b‡TnGc€*ùªô¾‘·ÇJá[ÊjbL¥™¹%`·ˆÎ-£g” ’ÍÍPqíÒ·ä[>³®dAzÄÐñÊÀM;‘é\íÉ….ß‹T$Éc 9ù† lÒÈ\K>;±Ä7YgØ/ì~J °–8Á«böc…°üˆ ø‰Æ‘`-#'Ñ ¸Nê­é¹GŽF‡Ù+äÃL“#6h}k¸¯k…Äd/9tö»ÀÜ3›LÝ ´-¹áF€,ºø3åìU£Ô|‹ûɱT \=sþòÝ…К0!¢Ò‰‚¶¼jØå¤°R&Èö|QA@¶øwäP¿è€È&óÅ}¬­táí—gáø+³pqv9 ³„€s§! ]k¸8î—‡­m¡Z/–^búòßÍëÖ3ÿ2uN]S_Ê¢Kp÷gÀýÞéŒ9Üb+}l¨ Œ|mš’³Ñ¼¸äo ^>võùò³ïÎÃ3¿o½z„ X1– K“2Çadψ5ÐÞ_ *U„ê¹3„õçJh »¸6ddX@ÔDìè/I¥>¹ÄÄNŽKF-'4Ó¶²n3©¹l,"Êâ–ñRF °",, ,ṘòÇÊÂ:üìG/ÁÛoÍB4A¼+Epe ]‹™ùiØU¢&º ¿àÝ 6W‚ðsÀëXƒ59r*ßí3Yø1-+‚ªyV¥XLEäùŸœDð ž_ûbÏj²’D…ðÉw*ùC™ùŸ=ö"ta­-ˆFäŒWÂ×ý¼úê ÄÛ•ðµŸ61 .u ¯L¢ééé Hb)cΪ¬AŬÇLxÊ --¯AWúh@;JGDZU–ÀÄÏžëRÙ8²s3ä()q$°q"ˆŠpB8”C1]gLÉ *4Úc÷lMLÙ·_›…#Oƒx2J…Ÿšü!X¹|•°{‚©/ý»ß‚ñm#›Ûÿüo^†ãoÏúºŒd+T»÷u“(K…–DÀËhÈò5…±:€–àaƒN+Šb†é8ÿ9x>§#¹É'' rÀcq­ÝNžü¯A¼M $ |l`òõ ¡âhJ-ôal¬µ5kY„¶}†_ÖkÏž+ȳ„znyàI–BqŒì\™òËÊÿ"ƒTÈØ ;´rÈK(Ä~Q)æÊñÈÏ߀Õ^bmöÑ*9 bðçt’H-V)å¶ä!ÒJ[ÿº¨ w‘Àz=®æ9ôù` çá®ÑW¿(ôUI#ÿïü ‘_Üç‡Ä«0¾Ìf—áµ×N¥ˆ?ù\GaqÊ H ÐYïA{4Ùtùßä³x2-à \ϱT$™ˆ9h_V44@; Ï•ú%/aŽ0ÑbÜÜÒP $B²Çk/Î@4šÅøµh?`òíבM½ŒXٚ匔³¡ÁkÅ@ŠÔ¸,Ü%"z÷•Ë}pj¬3:.€‚£S®!æ¡d^û—ù&´‚¼¢â…r&ˆÞ߯ÿ¡ % cÇÎdqþË€r¢%Àɧ>t+€j˜ì +àMÿ2 ›|äd;× ÌZ$MLš ÈϹ¶;©[Ôœ´tòó[•lë™™è‰ÄQ\‘À"-â"›U[aÄÜb£÷ò°[/»¸ÞÊÜ=#·ÎX¸Ñ@É›„®naUÚþÉNr¢Ã#„.qæ½ ™ßëÍ}í9N¸DÚ*å€uÓ€…ä±âÚ c:oÜ@þt£ ²ü¾åB,.hØ0ЙBº&МŀRÎÊ?¬Ìaƒì)Ìϯ5Ž÷›ºrÉœ­¬3i XäP®.PdþžÈ›©vÞ…LN¥!`HÈ·Ÿ† "?ycì?+±êuFÄëØƒ®ÈDNàr¹À+ÍÚÁa@rã~ x,g&»VÀÌds½äW  ù3c+´Üœ+ò WRÂhƒM_1·zÙÛEçò:&ÈÁÏ Çßµ•Ž[=^åEKÌ[':Ø 8€á¯Æ* áà=ä4Ù÷ÀrMVØÇ˜‘“ð…ïÙ•¤™OÓ‚¦¢<$/ã¢ßP^6)áYF*©XYí^–pgò00GÒ[äជ°„îXÙxÐAS˜GT[OYŸ $Ãï¯KÄêüì”iJ8 MÐ/'†.R•smÖu‹+BŒä–„q¥á´—÷ax€¨|bæ÷b­©Ðr£áŠB½p<÷'T¬mæ ÔéÑ>©÷‰< Q—óc¯Eº é»;0ã ¼e<€6tŠÂ9‚Ò\åV‹òÔpaìˆßÎ šØMØlQ0ùU§P2ÿO†ÜuJM‹e\dk%˜ XÐ6÷×èÂpâ<ZÝëÑÍ|î»õ 9i'\Mˆ tƒ‘£IVf˜›{•Ïšx;\V}£„è­!ôÆ Ã~ö>]¸©Ô­pÅuà-†q¤&Ð0_‡À×þY5ÀÄyräV&Ûê\@šA2´Éq Ÿ*é^㺷F“ºá¸%Nü¾€ÁºÐZcPutå(‰ªoL]Á@ê€üÞÑv vߺÝǯþfKïJ3e `…ªeÜ _èqšoûåOŽÃ‹OÎÔ¦YÓïQõí‚;ïÙ _üw—cª™5È­C1ùøDtÏmøìïߟÝAŽ[µë2í†[þI-·PØ8 ` ^SŒèðòßÉ“ó0ºo¤6q£Ò±iQÆÒN¼~nëy¼zV‘G úÂ/Ì- yÑ :JPøËÌøõeä¥rÓ/ÚCK¥Xë -(«oÏ~u9•zV¥ÌB”°WvkëP6 ïj kÉ­ ÞPIXÁ-£­ö&™%ˆFbŠê8+2ÑŽ@DÔ¬4{+†zËÂÀ˱Œó=aR˜à5Ù{…»<¼ôæÑ U;ÓèðPé«­sŒç¯B¸ò k,ç߯°g>ñÑQrùUJ_, zi˜OÕHþ»áþ£²¿Qšó)”‘ЧÆXW `EsÚP5[LŠén[ûxï °p~­~<„ ëòžI,…¦áØ®›Çá†lÓÑÃÜ8cyùݰT0&0_tè¬"°Cîº0ÎEãþQ4‰BQ–DXXž­°Çþñ e.ÃBµc¥l§g¦€VU÷å“ÄO7š†Ïþ‡;€¯ä©zbD‹†VÒ°jËB%€@A~»Œ÷®÷ÍVÓÄ&“tˆ‰ÌKÛ¶BTëÈî¶üýØ¿‚ÐrÃY®&ç;X%è/ `u¥lÑÁyš¼–3Ìç8!ÞÌ ì•P¥>¹±‡„@èv¶ñgNÙ÷…*lB^À® Ù¬GºRy*)ø C—R%pÀœW—·DÚ#`@Eé·Û8‹OO› GªùúóòtnUAd¹¿q¬KeÃ…*ƒ€ ¬À@µ:9]°ê++ÖÐÀ¾`q^Èç¶úîú+ÂO;9‚¦m6ð"¯,É0@H¬ô.Ö ‡ãqõ8‚'¨ÎöÕšT(ͰY51[xÁÕGIX½8µŒ|‰WbtÂFÓÈ#•[Áµl¬&ôò0Ë MS• a-Ê,lÂà¦ä¶¬à}x$í(ÈØa Á0TM †ˆ Ár\¹aWò;7u‚gCÔBIWª õ—æ¶æín+Æ¡lm í÷ Ž£Pa‹³jËéíTÆ…Ö6ˆ° bEÝU}8´–NóïÃæÓÝn¹‚<ðVrÁ¥*~U^åûZóhŽÜ"0‡`¹òk 6Ò ¢h]VÕ> üµso¼ÉDµ/ÅÚÙßÈ¿ã¸5 ¨cä+sßV3éß“‘„5ëÝê€ìçü6<P`ÒBˆ‘>žÜä˜÷zAŠÛݪÝ:!çõ‘N õTÍ!…ó*›åÔß”L ƒ¢‚=è4®ÓŒ1R ÿ;‡y•Ñpë\ˆòyJ6MYô nþjÞêw¾ › _¸èì¾aÆG[ŒTA°»oAú>±C@ÿƨg[oºq$­¨º.B­uMW=!œ=·~¿6Ü5a·©Ä&ò‰|±µþÒ[ê?Œ È „ %rÚ¶à¨-$š¯#j-S\²6€£žÓŸâE‘vd(Ù¸çŸÞü#ôC¿~#jøÞó–áä©‹Åò·Ø’3£l± Öp žQö¹  Ë"‚Ì"C«±³8Ä›éCT{•ÏD¬%}ÔHˆÞÞyé욇þöî«"”ëuðÌSïdísb;±…X³‰&× œ¾<  M ‚[in÷*à¡È «¬/Ñ2¼L¤Ä’(3ªºƒÆI$ŸýÉ ˜œ…=‡¶_ÑÂÒm=ýøÛ°ºÞƒxÜ$|ì0BÛ}ñ1‰ÕØvY¸À¼*¸rqhT‡g³š@aUQžt*¢½‘Êš¸°tpþ]¢X­C~?ú¿GI Ñh ñ¶’‰žúñqX:¿n×v¼ñÜY˜=·œÒº¦JÙ^ÐfŸSO³˦¢½ñ'G>iò(›¾•±o­XÍ!ôCr7г©ì¼øÄ[œ×|uºUuIÆbhM%i×ÐŽð‹ÏÐþ÷ ´‘õ±_ÍI…Û@TuPÓ(ÈÌuŒÜœÇ† GZh­£ iuTñ3C­È¾‹ßÖäò6pR T.QJ0À¥‹ëðâÏftC +çèupäoßŬÝ]TŸØªE>òœT"·z €a"ˆP°ã ô±Zqayƒ‚ŒÁúdP¾îOšÓxB……IZ8ñÚ/ÏÁ®pàcÓWŒß?úĻГXE9˜`ù=Ö™P¹À(ï֚ɭ´ $}[Ì–†’°¢ÞÏËâÿ†AUM(5Þ“<›M(gU²MþÐS%xîÿž‚é½ã0±£ý+ÀKGÏÀÙóËL2á_ž7q~´â¬ð–¯$Ü´:¬ODØeWd•_aà¨"†¬( á¡°”êœH@Ø’ƒÜÞCWÂ×£þîŽæf–àĉ R9ã´ÇqÖ¦¦hWcßVß«@“«a¢v. ðú}çx/­ÚÈÿ3Wèkìo×P†*¦ŽÇ¥lO ½£.¬Á ÒvÝïç±¶Úƒ£ÿpp<²üþå[ø‚5é´^Cªr. ÊÂuˆfל—å9ÁJ$癬;˜’m,MÉb(xiÚJâdB¯§ë¼ýâ%¸é¶m°÷®÷—PΟ‘~_ŒÄ£Žß¯JA}2“Üî nÊž ­7X˜ó$„Ý“Žùn·9œíóÆ0ÆQj #~úß_êfTs”ÈóÒL¶%’ï(Šx$ªÀŸ@E«š4Dl)<€ ÍÞxá§g`zߌN&þÜ,\\^OM?&Q%ˆ §aü–q>"Öq‰Â»‡ˆñN‹[Å* „£.ÞÔcY §:“ÌL';XÅ>¬&X°õaEô`©ÓÍøq¤JDLÈÌœC«Ðp4Jñ@kGýH¢ðLñÀ°øb#ÇìÉE8ñÎ¥ô>­x?rò·…9ÇQΡd¥yÞø;BèUµ2Hk—°öÕ±V”…‘ã xÚ_Þ`¬ZÀJ7@ÛR¸ªÕ1ëŽ-dk ëÛ§xÔd‘á”+˜ŸëÀ+?Ÿ…ßøÂÖæ Ö–{ð³g ×Îëü~©5€š\8õ6AdÚûl4‡i‚(¼Š–ðAt_R™6ÿT›;µÐßt)*ýý‰ÝL Ý\ƒÆ¨ð@ŸÒý³O¼¬ðÀì¾}Û–ÅûÏÿâ JJ+ä Uƒ(+gs­`pÇ %ñª¯·V7S @ä·&g´cãžW²íÝŠÃá†Ã_D¾5µXÉ¿¿iüLÅËçgr –ÎwòkßÌã­WÏÃ%é÷ã±Ènt¹™UhlÜ‹\ÓÃàPýÊ Ú $«° äÀâêÍ×o›l•{› &%{Îç B3,,`|ðóéŽbÒ+hMÇ ÚÏþŸS)J‡ú|UãcnfŽ;Ÿñü­ž?ªùÝl?8Oh×x9î´Ü7n´«V—0¾oV12WÓzPÚà Ê-Ap_G²wÌ.òãlK¸8…±R >—:ðâOÏnÚÌ_Yì‹ÏM…ïÅû‚W,Ém4ÅÄI6㹌2¹U¯ ˆªÈ¸jJ‘§©(Oß³gÿDi·*2 ×@MŒ[;gYÌ|°£„)§¡¡tÓêHàä púõÅÀ6 Ãýëõðì‘èµEfúÚz¸ÈŸ÷ÿ6$¬¦’[Õ!$¸ê"ªIà ±•ÁV¼IE_ø©mmÅåyàP8ʲ•Tl¨â‡WcÀø ²¹a‘03w•*Aí­4:xî¯NÃòÅÎe)À¯^:Ëý¾~œrõ‡¯[\\~ŸJ¦£R‰³6þ“t¼BÈ•T…6#&I{…‡E©¸úý×îÚa/énRŠ\h¨b];<g£[7=¢Ï+P(ñ€Ú„ªµS*ì³ÿKâŽØëŸ=¹ ïÎ,dÛÚ´0ìÓ«Ø>€Êec¼Â9­”‡Š¢Bã_ÈÆü.jÇ0ªÊrX ¬ðv2ÿ¦vµáà €…¸™r@vW4½œì3‘õz6+D^mmÌ”*D)ø´¯‘Ä ]xõñÙ¡yþ¥‰#žŸMÉžtS+¾AÕ`Û¾”¾.eë¥aîšW>w†¸òñ×Q”æyÜ2 4ÌœYΠ„?\‚5ABËÌ‘¬Nয·wù9Qkù#HúR Öc8ñò<ì¼yö¬Y¾@Åû/=3—ZÔïG5÷Z“ÇÈ×\•Xƒ4¦WÖ¦ö´:{É>ÙTZQÐ Î'¤S$Xü™Wñ¨5ìrÜvûÜ~Ëĺnèò{âY'²ž¼è€ìÌ"_ôÁ#žyÌ-H]A¢ð€…ÏþÅ ,_hƼñüyXêv› ÿ22~9Ï¡Ö?HáS`ÇþQ+þÏÉ:Qµ3®"e¾U#kn{UqFöœ€O~jÜr`°§º[ ÒöpªÛ¥èT]‘Ò¶©â€¢¬Àò ­†É¶˜¢–œDÑ׬xúd2Ã(-ÂÑ?zòˆE(îqVúý÷Î,B2ˆ³ïX\%|5>££1ŒLÅ–_4r §6“9€¡WY\°Íöe¤>i9½i„ÙET^çAéÞ²=ýËƒŠ—{ée¬.÷åï"l'£,,Z±úÜÅUfÆ)æ€I%´Í©Õ ÄÝÆ]^cÊÙ÷¥¬'°x¶ o<9 ÿç{‚ñ<ß…×_¹ ‹:Ñ^ÃCº€Ðµ;;ˆ¤BYZ[M Û~k»cÍìÍaíŽáÃÕ–¹@¶” ½¢$ lo.RU»lŸn§?oŸj{^Ü"³k#0wnÕnêÀ ­IìÝç3%°¶´Ñ¼‘ÕØÂ(AŠvH<ÐáWÏ]€ñ©Üö»;½Ayõ¹s0¡´òhû’ƒYØ(Yצ§¯~"aÏãÀ TÜä»ËÖîy?DIïKçò¼‰xe/{Y²YD¾c*ÿs(s·{ט]Òe«{8|¹‹,*‹ôþº‰Æ;’4}üÒßž…Źuëz^—бÔëå™Ì¡qÍám~Òjªu°<€[>> qÌX?V¢çñpÚèºôLcñŒb¬# „öOÂø$Ç‘.bP½†à£wv\R%C/^VQSæòß#È©b•+hßÐJ SŽ>6Ýõ,2ûÞ Ìœ]Ò¹ 7’£b³{t½…JJ7Pà+#ßYçíÁÜJ2ã§wŽÀíÙoŸ\´¹ka)ü¶@¸ûð 01ݲÆ1°·ÌV¯F«Ptý‚MYX€O €ÉöwD¶-&ÕrͺJlßÑ‚»s'¼sbÎÏwÒ8>ýŽÈù |cƒfÖ•mo‡h|Qy°PU žº”†z{n…ƒwmƒÖH”ƒm§òÜ⇓x™€-2(¹Þã§Øä¼:ZÅý\àþF’M§W"C±Û?: û–ÇàÌé58wq=«*Ž Z°tù–÷QË¥þÈ8y»{,ek²2a Íå÷(]·°SÎö}ò~¶íl±÷’‚Qù¼0Fp ÈÖbÎ)›Rld€/÷÷Úì˜ #­NÂÄzÞ#:€‘Ãô #Ì9ê ECk¾åv¶/0· P´ïÕã]´Š¾ÛÃP"È›Dd_q“¤úôä‚g7b‹ätוð–ÃMS5ÀJ®ÌGùN’‚„Gé’ÃvºÛóš–=¼NRpKALC*`£-cÒ&aN ¹s•²¾4t €–=ö7ž F×Ôƒªiz‚ÀæO¡¸ßw¼.ÃôjãûäJ@d½°v“%Ð0ôvöНÙGp¯T'ð¡ •¡À*]*S/Ü(äMJã[„nWd¼>òRVµ Q3~B{{[;yÃCt·ZÿP<Š8e@©È¸;<‡i¥ÚÑÁ£(arµþ²¹ …ù¦¼ È:¹$pƒ#È 'QL|#$r¯iÙç7gðÂóY0º…Xk\·A#'"*jx6È¢pö¤³([Ÿ0?M'ˈãa³‡œ1ÐLã0¤úU$usŸn)Œ{4É&X0sžB½‚íc\f`…¡PòÇ¬Ü ‘…¹ø7‰!pD×ð´/¶Ú¼BÏ{*ˆÔŒ‰†šÂüFÙ@;€ö…#(rVÍ¢»VFV¢ˆSPÆ\‹‘Y‘y1•í(Í’¼(H˜A ÑÆäDtYÙ@Ðy,ö¨QONÕT9Š`qV”ídÍ“ Ü/³IÜ|­(A‰} áݹ(ùÉOÒ /¼@½^«)õVõEál´U²”×MA†ÀnÀG^Ëá@_Õá([©“Ï;5ÌJnJ~\žJø­V‹>ñ‰O¤Êiåïÿû OšC©É »¹T‡3ñiè0ˆ®j»P«¡~Ë%JÎä¹BŠã,-º6·¾¬ägd©å:Ðrö ßïáôè««§NüÝÂÛ¿qóèÝíñ$’Åþ`@ä«l¼®õj‚a31‹Šme¶ÞTÿ¨1o+úÍM¯“Çà ¡ÎÐf-Z“$Æ(I »:JnJ~úƒ=3¹µœƒ Ð,ÆRo^“ß».œ9ydñØÔGF¦÷ýÎö}ã7µÛQ/BåKHW§æÈÐ}ȬD8r ` ¶ÖNÜÍ+@p¨¸Ãß…*ª–j>³¡]‘×÷yןӧéÚ ð0jŰ:×íž~vñ´’›’Ÿ’£Óš–k¾à.¤Æ÷wå±*?tI>ï~dîØÿ¾ð†úc?=}s2E‘ú¨ˆ$sF˜×úšŽ]yQ¨)Ì(Λsæýæ_Î:Û§ g›&U½Š·™b ³¤ !Üb޼·!‘³ù5ߪ5°‡ÙÅ™Á÷{?º½‹ÏóÅ¢Å.B|M ÜJ_œ~nñŒ’—’›<»¨å¸ªå:àzf)À©S§”ft¥èJ3¡>°(‹òís˳½ÑWþìÍ¿Ýé¼jÏäžöÈØŽV{t*Iwíà>´f7:bÖEÚ¼1Åv^ÿÏzÐYß‹Å7çI'´…¹»q䉪°9wû!닜+ñªËVbk'xûÖü}Äš\š6;Œã'(ÛÔn›ÒÄÒš¯/ôaíR¯»t¶Û9ùäÂÙ™§ßê,f”ÜRùer\Õríj9û ð­o} ~øáÎìììr6î¨êÇåÏÛT+œÎÒ`þøß\ZZ|¯s`tg2ÑÞO´Ç£Qˆ¥AÐõÞ\@Öšw÷¡SZ£ S<šµˆhW=ͱ{µãaCnÈ[²< à ,÷ÀÓää`§È‹<ŘSgo 5h!º«b]Îö•õ‹ý•s¯­ÎÈWÞ•Çyœ“Çy9Fóò—¥ð—wïÞÝQr.,¬¾øãǧÏO?ý4<ôÐCÉÒÒ’ê¤8!ä¡ZkNÉAÜ%ß®~Þ!1yŒÊ£­ÃÉK%=PûseÚ×n“Ç%)§Y)'¥ ò˜UJ •ÉÉÉåGy¤ß}÷¥>tè¯êqôèQ|ðÁÇ´UÕ;nÒÏmG®?>˜W€®úœ~6‡ ×}ôѵ{ï½7Ÿ¨J, $dTð³*Ã5ƒë¤ïP±COŸ[×J¡ÊWG´àu9| ”¢|G£|%ìy5ã¥ÜV•Ù×p]Ë5—³‡ÌÉ}ûöÁ׿þu’&cí‡?üáàÍ7ßìê/X‘cI >ÑJ_W€\ŒèéH9­I9u¿ãŽ;Ö¿ò•¯t¥KOåÊåÄòCŠÌßpäÈ… ¢ÕÕU3ÛÛZè±6ý1"6¢<¯?6ã>Ю`ÀÂøîøøxGú|qøðaNöåò-ÅîCb˜œYŸ+Àu pEX®©5>¤Ï/ý`­_¡2„Ï?ÿ¼Ñžœe‘!J ÃÇ{ìÃý"À<@ÒB“ ÝóxUʉÔ,¿çž{TæÏòù®ü¬]ëE~¹ªIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/32x32/0000775000175000017500000000000013602733774014515 500000000000000uget-2.2.3/pixmaps/icons/hicolor/32x32/apps/0000775000175000017500000000000013602733774015460 500000000000000uget-2.2.3/pixmaps/icons/hicolor/32x32/apps/uget-icon.png0000664000175000017500000000362113602733703017772 00000000000000‰PNG  IHDR szzôtEXtSoftwareAdobe ImageReadyqÉe<3IDATxÚ´WMlTU>÷Þ73)ýµF„‘ jŒXWš˜¸vcD,؉ÄÄ5‰A\É‚…¸råJîj4hE~´DÁ¶¢(¶@§3Óé̼wïõ;çÞymiQÑ0ÃåMßÏýÎùÎ9ß9O“RŠðÑX®Z­’sŽîÇGkMƒƒƒ9–÷žŸ››£#‡ßwõÙ™•££ç+NÇóy\ÇÇÿOXE샋Eµuë–f_ïÀôƒoR¹\&uþüyµwïÞ®˜Ù÷ÚÁ—ÞQ5 ”fJ/q“ÿöñ þgàtÓÏœ8üé!Ó8vüø‡J=z”öïß¿éØ©·O·þìk‚ C+ùþŸø`੯K3×÷=ûî3ÀKÆÆÆ)IÌšj{ª'm8“%d…µðu P÷äwøÅ{ø®!^ùškP¡­{ØcÉÈÈs£}€Ò4|µˆþ{aBåž+9úÀ¿,> ,˘Œ”ŠE¾E!ó•çì÷Z6`ºt7*xÕie4:r™nN6¨^oIõ8\p6ÃÑ-ÊWÎøÄ$`7!ƒ£Êˆ6o¢uÛûI°€ÉØI°”ó–à<¬´øË¸#6ÂËÆµÛsôÉG§hÖ·©XƃÆëxJ›)¡jäY¾OEº‚çKšCK%|‹øêÔP£Ö–û+02Œ‰¢¬³Ñ øŒƒU>7‚Ýüôã3ÔÔmJxóW2EÛž\KOïZ·$'>ø‚Zd±‡£® `˜QXŒÉ÷F˜\ÀÒN“SÌ‚–è±—/NÑ­ZƒŠ«> /‰Œmíì\ê8›ð$¦p" &yàÄQ“+‰Ge9ñ¢‰¹Û- Û·š¤Š¸OÏ/… Ðð˦¡g!‹93 Y.ÞóR1ü/é>O$ ÃEØî}®íVÊXRJðA§ åµ¶ú™öc„±œ¬Vd^‹æ7u†`]:{“~‡‚­0bç€D77@BIÊÕk-ªg-2=†:³YHöÕ¨ÐBº+Öº[&S×”±§*ÁsXõê2™þ¡Îh1ì#{ÂeÈÞ´0  J,æªåòRI`A-É+dýÒœ9ù+µA¿ìgJ¥Ò"mjÒú¡ɵ%¤åÂô°GÊçÔ‰>p Èv¶œ"žÙ]ª€¤ˆ$þºÞ—¡ -,r¹[çç ˆ˽WXº»J¬UNq×ûb™Ö¯YÐÔ¿ª´l¶?·Fª#ƒ\ümRTQaNÆ 5±Û.¨‚Œð~^Œ$v\:™Å Í5-@í#OôÅ·”Ƕ= ǯ>ÿ%”l\l¬”âBºíKê3Ê©ÒA&BpàwX(ôû©Jý+KTîOîÚ~úö:MÎÌB¼ ò<;ÃBÄ9e½ÊûFÌg„Ÿ=e!bñõüìÈtãvƒ¨dän…sªÏÐ…³UJÓL’ðÎ5yµF?_ºIÉ”³À¡ ""{‹ØI˜…€'+¶Â`@¦kodBCº-áá’G–{š8WU²`µf;ôÝÉ+” h? ––ªa¤jº8Ý®ÙMBi©¸0´®B4‡›Zˆ|6?Vp¨y¥¸¯ãR²EK·vm¢!†u×é/¯’­°ñ&j€Î5ÃÚh¨ : ¤[DC,Ï𯌆³m×õ:E=m8ÛBC-DÉgØ›t²6µ}‹²JJ—jT½…ß öâÙ)ª¦`«TR‰\ÚSHs©ÃÀ,J‘ëEI(p'ý«ÖöЃkW‡NóáägPk΢n¹[Âè´ÖðÅðÃ÷“´ac?]¾^£ùÁåJQGØóN»C½ÈÄC:0°`xÑóÍÈQæ6þfÑÈÐ@XV·í~˜’œob“9PÚvBkj]›&]6,'(ìaÅ5qÿ4üNiÃS½²·`¸e”­Â¤$ï°S¢ã¥vBÉ$+ˆžyaˆ®\¨S vê.˜¯ò! 8þ ç%T0ôèæ Xq"NÊQW¼¢ª8p½³eÜ6Y¹$õâLÃÀÒºvKï¿É£JJùÉðèbÅ©¸-”ç9Ï‚6 hëò7šy—Ÿ~ÿþÝ)äñ ‹…^±Ü„iL3¶Þ±s›ÒN[>S …·<¢JƒîJK¶heàšWW÷ï;ï³÷àyKvÆÈ Á&c'oÚÀ&ž˜ÞúêCÏCýŒ–^ %´ŠÃy~ìŽê:W/¡‘ÉüOaö ó‚ËKm]µªdG?šfLÆNvíÜM{öìùyxxøÐï_OUì5ƒòD|;Zô’ùïŠ~éan $•îÌÚ*N}ɘŒ­&&&äíø½#‡Í¥‰_+ß|3’X—Ý—×sÏwìx.[¿ñ±æ[Z~;þK€ ‰¿?2ñIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/32x32/apps/uget-tray-downloading.png0000664000175000017500000000153213602733703022323 00000000000000‰PNG  IHDR szzôtEXtSoftwareAdobe ImageReadyqÉe<üIDATxÚbüÿÿ?Ã@&†£`1éj1,í±¢©ãl”JbE ì>Xa¼lFay8ÐÑ €ÅA‰Ïß?ûª¤HsÐr×ÿÿþ/adbDQvó½Çg7ß…®ÞÀC^Ô,HE›Y_ÞÿÁšð_ßþLdãbÁTËÈpôÞÙ—õè¦Êu@*š¤DˆÇ÷¢@J›'/Û u ]œ›å3Õ²áS/è’ ‘R¹4”û˜Z/|}÷S€TC¿¾ÿùéõƒO¡ ÉÍõéõ÷÷8ðç׿…,lLnH’?³ñ. ©XÛ|rÈ>,R² iœxý𓲤*Bßé w…É)Ÿ€Ç%õ”€!Ë@r9@ x|õ­›¬¶pÖràùWe µ’¦uÁç7ß…pÉ}y÷C”ärœßþàéË;¾‚Û‡ŸW±©¹~èéÕG—Þ€³§¨§±¯’,Ùå:д•æ80ÿZñË»`G\Ʀ˜v6©\üì,Åk}¦Rµ:æàaÎ_î Je[€ø!e ñ-5{‚¹Ù¥Èv€¦t°Š¹„'†&fF?`J¯ Ò˜˜ã(* y„8ª$¸s±×ç ­@KlpX®þïßÿÉ$Åo~MlT˦¿¿ÿ­‚ÖÈ– ýýóo+Ð÷lØ[" ÿp:àÀ‚kk>¾üöXG0³2I-[ ´”&tÔf&eœÙðý8sÁ“«oçOŒØfjè­¨ÇÊÎ 7ÔÄOYJDž—«#X˜mP•\Šw í‹ÏÑ.¼>‹’°¶R›ˆm„FÞŠ™!õÀÄÇ„#=üj¯Æ{ Π‚ûç_½™²ÇTœÀíÅâlÀÐ2Tu¡w‘±6°²"«ôY¾¨èÐüïŸ~•"7J‰u8 Jq×ÙÅj*sÑU󇟿¯xòöÖñ绀Ü þI®@TÆûCib¨Õtˆ¯bk–“êÚõ ª“:Ú70ÀÇ'nø·ÕIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/32x32/apps/uget-tray-default.png0000664000175000017500000000121213602733703021435 00000000000000‰PNG  IHDR szzôtEXtSoftwareAdobe ImageReadyqÉe<,IDATxÚbüÿÿ?Ã@&†£`1éj1,í±¢©ãl”4ŠbE ìÞZa¼lFayÐÑsÅA‰Ïß>ù" ¤HsÐrW å‹–Sœf>¿ù.Fr"üõíÏDjXŽ7âñ=(È4,>¸ðZ‰.Ùê[ % åþ¦Ö ïž~P0ŪùëûŸ?¿}üù‹Ä4ð§þüú·…É ÉAòg6ÞÅJv>¸½¹ûì1=}§^?ü¤,©*çŸÞpW_ù$"Ë{H¥#9¸H pÀw`È2\~~ûÆÎÅŠ×oeÃõ4© þüüG°úüö‡èhmHRAD ¸zàñN^6f&&- Š i'üç×_>b°®åT(HpóÐ@±x„8ªñÉ«[K…³^8ÕÒ0‹¼¦yCäßÿ8p`Áµ5_~ûNK|ÿüë Î(xrõíü‰ÛL ½õXÙ™™aâ&~ÊR"ò¼<ÔpÀ“/N!óam3¤6!'Û1LÀÈ[13´Á“‘‰²†ãí“/^ÏÍÚgdÞÀ×&EÁ.ds[ï?eãd‘÷)6ÖVVd•·Ž?µ¤ìð,å„Bp–å­7R‘”â&º]øåÝ_×=}tÀF · Tb#·ŠIq¸bPu-I‚çß1(Þ¯bk–“êÚõ ª“:Z+ÌIÖ‚†ãIEND®B`‚uget-2.2.3/pixmaps/icons/hicolor/32x32/apps/uget-tray-error.png0000664000175000017500000000165313602733703021153 00000000000000‰PNG  IHDR szzôtEXtSoftwareAdobe ImageReadyqÉe<MIDATxÚbüÿÿ?Ã@ÆQ 022ÒÕb¸½¤8 ãl”Šbu ì>Xa¼lÌ^bu-êYt'%>ÿì« Zã³i¹Ðò•@ËY) ú/ïˆ 󙈰œùϯ¿³¨a96@пü1bac§Ub$/½1T1“`8½áîãóÛ¼B——Tàò.4Rgbf{æÚ'/Ž,»ù]+3Sâ$C’ðõÝO^mè¥ ðñÕ·„=3/?A–¿wö¥Â¯ïºƒªÍtoþjiÅ‘Iÿ[‹¬FX–—5k¾[$ÿ1üÃé`|oRÞHBòw<„(dcæuNÑYî’¦k ÌFwÔ܆Î÷¯ïN¸súÅ& å@1KŠ×ùÌcbbô±|ýý gx~ûƒ2h°0J©ÅÄ(ö÷Ï¿Ý@‡Š¢ÔákŸ$ýúö§Ýr Ú. å‰0>Ë_’!:`faRø÷÷ÿ ÁBhRøšå@ªÅBfFVŠ5D èˆ]@ 8ñdß U‡E/;Åoª<½þN—üã«oí±‰ÿû÷Ÿ™bÜÏÙûöOŽÙñ—š©q;·^ÜùðņÏ?ýú5/gÿþ—w?¤¹ïð(²ºáxï½³¯ÞíM;é`m! ÿûç_¿:ôôÆ» ÷ZœcÔ~ý›° ÿÀ܇ß¼#Ë uget-2.2.3/Windows/CodeBlocks/ui-gtk.cbp0000664000175000017500000001454413602733703014751 00000000000000 uget-2.2.3/Windows/CodeBlocks/uglib.cbp0000664000175000017500000001147513602733703014653 00000000000000 uget-2.2.3/Windows/CodeBlocks/test-uget-cxx.cbp0000664000175000017500000000334213602733703016264 00000000000000 uget-2.2.3/Windows/CodeBlocks/test-plugin+app.cbp0000664000175000017500000000327313602733703016575 00000000000000 uget-2.2.3/Windows/CodeBlocks/test-uglib-cxx.cbp0000664000175000017500000000307613602733703016426 00000000000000 uget-2.2.3/Windows/CodeBlocks/test-uglib.cbp0000664000175000017500000000302613602733703015621 00000000000000 uget-2.2.3/Windows/CodeBlocks/test-uget.cbp0000664000175000017500000000323013602733703015460 00000000000000 uget-2.2.3/Windows/CodeBlocks/test-json.cbp0000664000175000017500000000270213602733703015470 00000000000000 uget-2.2.3/Windows/CodeBlocks/ui-gtk-1to2.cbp0000664000175000017500000000663513602733703015536 00000000000000 uget-2.2.3/Windows/CodeBlocks/mingw-config.txt0000664000175000017500000000030213602733703016173 00000000000000--- include dir --- ../../uglib D:/msys64/mingw32/include/glib-2.0 D:/msys64/mingw32/lib/glib-2.0/include --- lib dir --- D:/msys64/mingw32/lib Debug Release --- lib --- uglib glib-2.0.dll uget-2.2.3/Windows/CodeBlocks/uget.workspace0000664000175000017500000000117413602733703015742 00000000000000 uget-2.2.3/Windows/CodeBlocks/uget.cbp0000664000175000017500000001117513602733703014512 00000000000000 uget-2.2.3/Windows/Makefile.in0000664000175000017500000003254613602733760013125 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = Windows ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_INDICATOR_CFLAGS = @APP_INDICATOR_CFLAGS@ APP_INDICATOR_LIBS = @APP_INDICATOR_LIBS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_CONFIG = @CURL_CONFIG@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETCONF = @GETCONF@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LFS_CFLAGS = @LFS_CFLAGS@ LFS_LDFLAGS = @LFS_LDFLAGS@ LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@ LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBPWMD_CFLAGS = @LIBPWMD_CFLAGS@ LIBPWMD_LIBS = @LIBPWMD_LIBS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ resources/uget.rc \ resources/uget-icon.ico \ msvc/msvc-config.txt \ msvc/stdint.h \ msvc/test-json.vcxproj \ msvc/test-jsonrpc.vcxproj \ msvc/test-plugin+app.vcxproj \ msvc/test-uget.vcxproj \ msvc/test-uglib.vcxproj \ msvc/uget.sln \ msvc/uget.vcxproj \ msvc/uglib.vcxproj \ msvc/ui-gtk.vcxproj \ CodeBlocks/mingw-config.txt \ CodeBlocks/test-json.cbp \ CodeBlocks/test-jsonrpc.cbp \ CodeBlocks/test-plugin+app.cbp \ CodeBlocks/test-uget.cbp \ CodeBlocks/test-uget-cxx.cbp \ CodeBlocks/test-uglib.cbp \ CodeBlocks/test-uglib-cxx.cbp \ CodeBlocks/uget.cbp \ CodeBlocks/uglib.cbp \ CodeBlocks/ui-gtk.cbp \ CodeBlocks/ui-gtk-1to2.cbp \ CodeBlocks/uget.workspace all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Windows/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Windows/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/Windows/resources/0000775000175000017500000000000013602733774013145 500000000000000uget-2.2.3/Windows/resources/uget.rc0000664000175000017500000000115613602733703014352 00000000000000MAINICON ICON DISCARDABLE "uget-icon.ico" 1 VERSIONINFO FILEVERSION 2,2,1,0 PRODUCTVERSION 2,2,1,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "CompanyName", "uget.ugetdm.com" VALUE "FileDescription", "uGet download manager" VALUE "FileVersion", "2.2.1" VALUE "InternalName", "uGet" VALUE "LegalCopyright", "Copyright (C) 2005-2020 by C.H. Huang" VALUE "OriginalFilename", "uget.exe" VALUE "ProductName", "uGet" VALUE "ProductVersion", "2.2.1" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END uget-2.2.3/Windows/resources/uget-icon.ico0000664000175000017500000010510513602733703015445 00000000000000 hV ˆ ¾  ¨F00 ¨%î ¯E–D(  ^4NW.ÚS-ÿS-ÿS-ÿS-ÿS-ÿS-ÿS-ÿS-ÿS-ÿS-ÿS-ÿS-ÿW.Ú^4N[2Ù*Fÿ.ŒNÿ.ŒNÿ.ŒNÿ.ŒNÿ.ŒNÿ.ŒNÿ.ŒNÿ.ŒNÿ.ŒNÿ.ŒNÿ.ŒNÿ.ŒNÿ*Fÿ[2Ù!]5ÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ4‘Rÿ!]5ÿ&a:ÿ:•Xÿ:•Xÿ:•Xÿ:•Xÿ/|Fÿ l+ÿ q*ÿ r+ÿ p*ÿ o*ÿ q*ÿ&s6ÿ9’Vÿ:•Xÿ&a:ÿ*f>ÿ@™^ÿ=“Zÿ-u@ÿ,t?ÿo$ÿ{%ÿ ƒ'ÿ%w2ÿ+v>ÿx$ÿ{%ÿ"„)ÿ2{Bÿ@™^ÿ*f>ÿ/lCÿEžcÿ%j2ÿk ÿo!ÿw$ÿ%‚+ÿ3…:ÿB–]ÿEžcÿ%o2ÿx$ÿ&ƒ,ÿ6BÿEžcÿ/lCÿ4pHÿK¡hÿ"f,ÿl!ÿ-s<ÿ{%ÿ0„7ÿCŒYÿK¡hÿK¡hÿF˜aÿ n)ÿ%,ÿ9€EÿK¡hÿ4pHÿ9uMÿQ¥mÿ#g.ÿl!ÿA‰Wÿw&ÿ5{CÿJ–bÿQ¥mÿQ¥mÿJ™dÿ6{Iÿ!y(ÿ:FÿQ¥mÿ9uMÿ?zTÿW©sÿ%i.ÿk ÿEŒ[ÿp!ÿ'y,ÿ7{AÿW©sÿW©sÿ5vEÿfÿ t%ÿ;}FÿW©sÿ?zTÿDXÿ]­xÿ/o<ÿ$i-ÿJ_ÿgÿ p&ÿ5x?ÿ]­xÿ]­xÿM“cÿ=}Nÿ?PÿP•fÿ]­xÿDXÿI…]ÿc±~ÿc±~ÿc±~ÿN‘cÿbÿl#ÿ5u?ÿc±~ÿc±~ÿ;xJÿ`ÿl#ÿ={Gÿc±~ÿI…]ÿPŠcÿiµƒÿiµƒÿiµƒÿbªzÿ` ÿh"ÿ6s>ÿiµƒÿiµƒÿ>zMÿaÿ&m*ÿA|KÿiµƒÿPŠcÿViÿo¹‡ÿo¹‡ÿo¹‡ÿo¹‡ÿV–iÿ-l5ÿ2q;ÿ0o9ÿ&h0ÿ&g/ÿ)k3ÿ5s?ÿH‚Uÿo¹‡ÿViÿ\—pÿ}À“ÿu¾Œÿu¾Œÿu¾Œÿu¾Œÿu¾Œÿu¾Œÿu¾Œÿu¾Œÿu¾Œÿu¾Œÿu¾Œÿu¾Œÿ}À“ÿ\—pÿ_šsÒŒ¿žÿ™Êªÿ™Êªÿ™Êªÿ™Êªÿ™Êªÿ™Êªÿ™Êªÿ™Êªÿ™Êªÿ™Êªÿ™Êªÿ™ÊªÿŒ¿žÿ_šsÒd wEauÑbvÿbvÿbvÿbvÿbvÿbvÿbvÿbvÿbvÿbvÿbvÿbvÿauÑd wE(0 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÜÜ+{£¥¥¥¥¥¥¥¥¥¥¥¥¥¥£{+ÜÜÜÿÿÿÿÿÿ4¢,yFí:’Xÿ>“Zÿ@”\ÿD•_ÿE–`ÿH—bÿJ˜eÿM™fÿM™fÿJ˜eÿH—bÿE–`ÿD•_ÿ@”\ÿ>“Zÿ:’Xÿ,yFí4¢ÿÿÿÿÿÿ )xCë/ŒNÿ0ŒNÿ1Oÿ3ŽQÿ4Rÿ5Rÿ5Rÿ5Rÿ5Rÿ5Rÿ5Rÿ5Rÿ5Rÿ4Rÿ3ŽQÿ1Oÿ0ŒNÿ/ŒNÿ)xCë ÿÿÿÿÿÿ"1Pÿ4Rÿ8’Vÿ=”Zÿ?•\ÿA–]ÿA–]ÿ;ŒUÿ5€Kÿ7…Nÿ7…Nÿ7…Nÿ7„Nÿ7…Nÿ2|Fÿ6„Mÿ<’Xÿ8’Vÿ4Rÿ1Pÿ"ÿÿÿÿÿÿ!6‘Uÿ:“XÿA–]ÿG˜bÿJšdÿJšeÿ*l9ÿ]ÿgÿk ÿg ÿ`ÿbÿfÿgÿh ÿc!ÿ4Iÿ:“Xÿ6‘Uÿ!ÿÿÿÿÿÿ 9”Xÿ?˜]ÿFšbÿH–aÿBŠXÿ1t@ÿdÿu#ÿ~&ÿ €'ÿq%ÿ>ˆRÿ!j)ÿq"ÿw$ÿ{%ÿ}%ÿ"k(ÿ:ŽUÿ9”Xÿ ÿÿÿÿÿÿ@˜^ÿ<ŠUÿV ÿ[ÿ`ÿhÿt"ÿ}%ÿ&‚,ÿ*{0ÿ9|GÿT¡nÿJ’`ÿb ÿr"ÿ{%ÿ#)ÿ(z.ÿ5zEÿ@˜^ÿÿÿÿÿÿÿHdÿ(i6ÿ`ÿl!ÿm"ÿr#ÿ{%ÿ%,ÿ/4ÿ8xAÿV¢pÿW£qÿW£qÿ=€Oÿcÿv#ÿ#)ÿ+|2ÿ6zEÿHdÿÿÿÿÿÿÿP kÿ&f2ÿdÿg!ÿ3{?ÿn$ÿ!|(ÿ)~/ÿ3s9ÿWœlÿ\¥sÿ\¥sÿ\¥sÿ\¥sÿ0n;ÿiÿ {'ÿ,|2ÿ:|GÿP kÿÿÿÿÿÿÿW¥rÿ(g4ÿdÿ`!ÿ]¨vÿ g'ÿ!x'ÿ(r-ÿP“cÿ^¨wÿ^¨wÿ^¨wÿ^¨wÿ^¨wÿ[¤sÿ"e*ÿt#ÿ,y1ÿ<|IÿW¥rÿÿÿÿÿÿÿ]©wÿ*h5ÿcÿ^ ÿbªzÿb%ÿq#ÿ/y7ÿJ‹YÿT”fÿb«yÿb«yÿb«yÿZŸoÿAPÿ7|Eÿo!ÿ*v/ÿ=}Jÿ]©wÿÿÿÿÿÿÿd¬|ÿ*i6ÿcÿ\ ÿe¬}ÿ^%ÿm ÿ q%ÿ'l,ÿAzMÿe¬~ÿe¬~ÿe¬~ÿPdÿKÿ^ÿl ÿ'p,ÿ={Jÿd¬|ÿÿÿÿÿÿÿj°€ÿ,i7ÿ_ÿXÿh¯ÿ\$ÿj ÿr%ÿ)r.ÿC~Oÿi¯ÿi¯ÿi¯ÿW–jÿ#Y)ÿ%d-ÿ&h.ÿ0k7ÿE‚Tÿj°€ÿÿÿÿÿÿÿp³‡ÿ6qDÿ#]+ÿ%[.ÿj±‚ÿZ$ÿeÿm!ÿ'n,ÿD}Pÿk±ƒÿk±ƒÿk±ƒÿfª}ÿX™lÿX›lÿXœlÿWœkÿY¢pÿp³‡ÿÿÿÿÿÿÿw·Œÿd°~ÿj±‚ÿm³…ÿo´†ÿV#ÿcÿk ÿ%l*ÿD}Pÿo´‡ÿo´‡ÿo´‡ÿW”jÿEÿTÿZÿ ]%ÿ>wJÿw·Œÿÿÿÿÿÿÿ}º‘ÿh±ÿm´…ÿp¶ˆÿr¶‰ÿ%\-ÿ^ÿhÿ$h)ÿD|Oÿs¶‰ÿs¶‰ÿs¶‰ÿ[–lÿOÿbÿi!ÿ'k,ÿB|Nÿ}º‘ÿÿÿÿÿÿÿ‚¼–ÿl´„ÿo¶†ÿt·Šÿu·ŒÿHVÿSÿdÿ!f&ÿC~Oÿu¸Œÿu¸Œÿu¸Œÿ]›oÿTÿcÿ k&ÿ*k0ÿE}Qÿ‚¼–ÿÿÿÿÿÿÿˆ¿›ÿn·†ÿq¸‰ÿuºÿvºÿw»Žÿ9oDÿQÿ["ÿX#ÿNÿFÿDÿIÿSÿ\ÿ$c(ÿ*b/ÿE{Qÿˆ¿›ÿÿÿÿÿÿÿŸÿp¹‰ÿsº‹ÿu»ÿv¼Œÿw¼Žÿw¼Žÿiª~ÿVeÿQ‹`ÿQ‹`ÿOŠ^ÿMˆ]ÿMˆ\ÿO‰^ÿP‹_ÿScÿSŒcÿ` uÿŸÿÿÿÿÿÿÿ ‹¾Þ|¾“ÿu¼ÿu¼ÿv½Žÿv½Žÿv½Žÿv½Žÿv½Žÿv½Žÿv½Žÿv½Žÿv½Žÿv½Žÿv½Žÿv½Žÿu¼ÿu¼ÿ|¾“ÿ‹¾Þ ÿÿÿÿÿÿÜÜÜx¢…\“ĤܙȨÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È©ÿ™È¨ÿ“ĤÜx¢…\ÜÜÜÿÿÿÿÿÿÜÜÜÜÜÜ ÜÜÜÜÜÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ€€€€€€€€€€€€€€€€€€€Ààÿÿÿ( @ ÜÜÜÓÓÓ]_^<;< <;< ]_^ÓÓÓÜÜÜÓÓÓAAA >| Œ Š ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ ‹ Š Œ|>AAA ÓÓÓ–˜—0:¹&™Lü& Nÿ'ŸPÿ) Qÿ+ Rÿ-¡Tÿ.¡Uÿ0¢Vÿ1¢Wÿ2£Xÿ3£Yÿ5¤Yÿ6¤Zÿ6¤Zÿ5¤Yÿ3£Yÿ2£Xÿ1¢Wÿ0¢Vÿ.¡Uÿ-¡Tÿ+ Rÿ) Qÿ'ŸPÿ& Nÿ&™Lü:¹0–˜—srrU&›Lú&´Tÿ$©Pý%«Qþ%«Qþ%«Qþ&«Rþ&«Rþ&«Rþ&«Rþ&«Rþ%«Qþ%«Qþ%«Qþ%«Qþ%«Qþ%«Qþ&«Rþ&«Rþ&«Rþ&«Rþ&«Rþ%«Qþ%«Qþ%«Qþ$©Pý&´Tÿ&›LúUsrr:79\'£Qþ&ªSþ&ªRþ'ªTÿ(ªTÿ(«Uÿ)«Uÿ*«Uÿ*«Uÿ*«Uÿ*«Uÿ*«Uÿ*«Uÿ*«Vÿ*«Vÿ*«Uÿ*«Uÿ*«Uÿ*«Uÿ*«Uÿ*«Uÿ)«Uÿ(«Uÿ(ªTÿ'ªTÿ&ªRþ&ªSþ'£Qþ\:79@=?Z*¤Rþ)®Vÿ)«Vþ+­Vÿ,­Wÿ-­Xÿ-­Xÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ.®Yÿ-­Xÿ-­Xÿ,­Wÿ+­Vÿ)«Vþ)®Vÿ*¤RþZ@=??<>Y+¦Uþ,°Yÿ,®Xþ-¯Zÿ/¯[ÿ1°\ÿ2°\ÿ2°\ÿ2°\ÿ0ªXÿ#<ÿp.ÿj(ÿl(ÿm(ÿn(ÿm(ÿl(ÿl(ÿk(ÿp-ÿ!y4ÿ$„>ÿ.¬Yÿ-¯Zÿ,®Xþ,°Yÿ+¦UþY?<>?<>X-§Wþ.²[ÿ/¯[þ2°\ÿ3°]ÿ4°_ÿ5°_ÿ6±_ÿ2¤Xÿa$ÿhÿr"ÿw$ÿ{%ÿ{%ÿv$ÿq#ÿt#ÿw#ÿw#ÿv$ÿu$ÿp"ÿk'ÿ/¦Vÿ/¯[þ.²[ÿ-§WþX?<>?<>W/©Yþ1´_ÿ2°]þ4²_ÿ6²aÿ7²bÿ8³cÿ8³cÿg(ÿm ÿw$ÿ|%ÿ€&ÿ!‚(ÿ!~(ÿs)ÿ-—Lÿk!ÿx$ÿ{%ÿ|%ÿ&ÿ 'ÿ!|(ÿ$t3ÿ2°]þ1´_ÿ/©YþW?<>?<>W2ª[þ3¶aÿ5²_þ,•Mÿg*ÿg)ÿh)ÿl)ÿk!ÿv$ÿ{%ÿ 'ÿ%„,ÿ)ƒ/ÿ&q,ÿ5£Xÿ;µdÿ(„@ÿk ÿx$ÿz%ÿ~&ÿ!(ÿ'ƒ.ÿ(s,ÿ0šQþ3¶aÿ2ª[þW?<>?<>U3ª^ý6¶cÿ1 VþYÿiÿn!ÿp"ÿr"ÿv$ÿz%ÿ ~&ÿ'ƒ-ÿ-…3ÿ.y3ÿ4“Pÿ=¶hÿ=¶hÿ=¶hÿ!p0ÿn!ÿy$ÿ|%ÿ#)ÿ)„/ÿ+z1ÿ/Jþ6¶cÿ3ª^ýU?<>><=T7­`ý8¸eÿ'@þbÿq"ÿr"ÿp"ÿr#ÿy%ÿ}&ÿ$+ÿ,…3ÿ06ÿ4„Fÿ@·jÿ@·jÿ@·jÿ@·jÿ<®dÿd$ÿq"ÿ{%ÿ!(ÿ)„/ÿ,z2ÿ1Mþ8¸eÿ7­`ýT><=><=T9¯cý:ºhÿ'€@þdÿq"ÿj ÿ(‚<ÿ"v/ÿu"ÿ"~(ÿ(.ÿ-~3ÿ1z=ÿAµjÿB¹lÿB¹lÿB¹lÿB¹lÿB¹lÿ7ŸYÿaÿt"ÿ|%ÿ'-ÿ,x1ÿ3Oþ:ºhÿ9¯cýT><=><=Q=°eý<»iÿ)€Bþcÿq"ÿcÿEºnÿ.ˆGÿn"ÿ"|(ÿ&z-ÿ*q2ÿA¬fÿEºoÿEºoÿEºoÿEºoÿEºoÿEºoÿEºoÿ,ƒEÿeÿw$ÿ%~,ÿ+w1ÿ5Qþ<»iÿ=°eýQ><=><=Q?±hý>½kÿ)Bþaÿp"ÿ^ÿF¼pÿ.…Fÿj ÿ!x'ÿ#o(ÿ:›XÿG¼qÿG¼qÿG¼qÿG¼qÿG¼qÿG¼qÿG¼qÿG¼qÿG¼qÿ$t4ÿn!ÿ%{+ÿ+u0ÿ6‘Qþ>½kÿ?±hýQ><=><=PC³lý@¾nÿ+‚Dþbÿo!ÿ\ÿJ½sÿ/…Gÿhÿs"ÿ&y1ÿ8•Sÿ:‘TÿA£bÿJ½sÿJ½sÿJ½sÿJ½sÿJ½sÿ4ŒPÿ3‹Mÿ1ŒIÿl!ÿ$y*ÿ*s/ÿ7’Sþ@¾nÿC³lýP><==<<OD´lüB¿oÿ,‚Eþaÿn ÿZÿK¾uÿ/…Gÿdÿp!ÿo"ÿ!m'ÿ&h+ÿ5„KÿK¾uÿK¾uÿK¾uÿK¾uÿK¾uÿTÿ[ÿcÿn ÿ"w(ÿ(q.ÿ7PþB¿oÿD´lüO=<<=<<NH¶qüEÁrÿ-ƒFþ`ÿm!ÿYÿN¿wÿ1…Hÿaÿn!ÿq"ÿ#u)ÿ)q.ÿ8ˆMÿNÀwÿNÀwÿNÀwÿNÀwÿNÀwÿT!ÿYÿ_ÿcÿ j%ÿ&e*ÿ6ŠPþEÁrÿH¶qüN=<<=<<MJ·rüFÃsÿ.‚Gþ[ÿgÿTÿPÁyÿ2„Jÿ^ÿj ÿm!ÿ!r'ÿ)p.ÿ:ˆOÿQÁzÿQÁzÿQÁzÿQÁzÿQÁzÿ9Tÿ7Pÿ6ŽQÿ7Qÿ8‘Rÿ9‘UÿB«hþFÃsÿJ·rüM=<<=<<LN¸uüHÃvÿ6Tþ_)ÿ e+ÿ _,ÿRÂ|ÿ3„Kÿ[ÿh ÿk!ÿ!p'ÿ)n.ÿ;ˆPÿRÂ|ÿRÂ|ÿRÂ|ÿRÂ|ÿRÂ|ÿE¨iÿD¦gÿE§gÿE¨fÿE©fÿD©fÿGµpþHÃvÿN¸uüL=<<=<<JQºyüJÅxÿMÂyþQÃ{ÿRÃ}ÿSÃ}ÿTÃ~ÿ4ƒKÿXÿeÿi ÿ n&ÿ'l,ÿ;‡OÿTÃ~ÿTÃ~ÿTÃ~ÿTÃ~ÿTÃ~ÿNÿOÿTÿXÿ]ÿ Z$ÿ:UþJÅxÿQºyüJ=<<=<<IT¼{ûLÇzÿPÃ{þSÄ~ÿUÅÿVÅÿWÅ€ÿ9‹RÿVÿdÿhÿm$ÿ&i)ÿ;‡PÿWÅ€ÿWÅ€ÿWÅ€ÿWÅ€ÿWÅ€ÿV"ÿ^ÿcÿgÿ m%ÿ&g*ÿ=’WþLÇzÿT¼{ûI=<<<<<HW½~ûNÈ}ÿRÄþTÅ€ÿVÆ€ÿWÆÿXƃÿCždÿPÿbÿfÿk$ÿ#f(ÿ9…PÿXƃÿXƃÿXƃÿXƃÿXƃÿV"ÿ]ÿcÿgÿ"m(ÿ&h,ÿ?“ZþNÈ}ÿW½~ûH<<<<<<GY¾€ûPÉ~ÿSÆ~þWÇ‚ÿXÈ‚ÿZÈ„ÿ[È„ÿZÆ„ÿ ^+ÿZÿdÿh"ÿ d%ÿ<ŒRÿ[È…ÿ[È…ÿ[È…ÿ[È…ÿ[È…ÿ[$ÿ^ÿcÿh"ÿ&m*ÿ)h.ÿ@”ZþPÉ~ÿY¾€ûG<<<<<<F\ÀƒûRÊÿTÇþWɃÿYÉ…ÿZÉ„ÿ\Ɇÿ\ɆÿS·xÿX%ÿWÿ` ÿc$ÿ]"ÿSÿMÿKÿJÿMÿWÿ^ÿb ÿ"g'ÿ(k-ÿ+e/ÿ>WþRÊÿ\ÀƒûF<<<=<=E_Á…ûSÌ‚ÿWȃþXÉ…ÿYÉ„ÿ[Ɇÿ]ɇÿ]ʇÿ]ʇÿYÂÿ:ŠSÿ.t?ÿ&g2ÿ'h3ÿ'g1ÿ#d/ÿ!c-ÿ!b-ÿ!b-ÿ!b-ÿ#d/ÿ'g3ÿ+k7ÿ/n:ÿ/j;ÿE›cþSÌ‚ÿ_Á…ûE=<=766DaÇúU΃ÿWÉ„þXÊ…ÿZˆÿ[ˇÿ\ˇÿ\ˇÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ\ˇÿ\ˇÿ[ˇÿZˆÿXÊ…ÿWÉ„þU΃ÿaÇúD766onnBcÈúU΃ýYʆýYˆþZˇþ[ˈþ[ˇþ\ˇþ\ˇþ\ˈþ\ˈþ\ˈþ\ˈþ\ˈþ\ˈþ\ˈþ\ˈþ\ˈþ\ˈþ\ˇþ\ˇþ[ˇþ[ˈþZˇþYˆþYʆýU΃ýcÈúBonn”””&xʘòaÙ‘ÿXЇÿYщÿYщÿZщÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿ[ÑŠÿZщÿYщÿYщÿXЇÿaÙ‘ÿxʘò&”””ÓÓÓ755(A2hu·“ãvÁ”òx•óx•ôx–ôx–ôy–ôy–ôy–ôy–ôy–ôy–ôy–ôy–ôy–ôy–ôy–ôy–ôy–ôy–ôx–ôx–ôx•ôx•óvÁ”òu·“ã(A2h755ÓÓÓÜÜÜÓÓÓ`]_QRR$$$$$$QRR`]_ÓÓÓÜÜÜÛÛÛÜÜÜÜÜÜÜÜÜÌÌÌÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÌÌÌÜÜÜÜÜÜÜÜÜÛÛÛÀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€@àßÿÿû(0` ÜÜÜÙÙÙÜÜÜhhhdee                                    deehhhÜÜÜÙÙÙÜÜÜÜÜÜÜÜÜqqq(7====================================7(qqqÜÜÜÜÜÜÛÛÛšššCw  § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § wCšššÛÛÛÎÎÎ 8‹^.à&™Lû)¡Qÿ*¡Qÿ+¡Rÿ,¢Sÿ/¢Uÿ0£Vÿ2£Wÿ3¤Xÿ4¤Yÿ5¤Yÿ7¤[ÿ7¤[ÿ9¥\ÿ:¥^ÿ<¦`ÿ>¦`ÿ>§`ÿ@§aÿ@§aÿ>§`ÿ>¦`ÿ<¦`ÿ:¥^ÿ9¥\ÿ7¤[ÿ7¤[ÿ5¤Yÿ4¤Yÿ3¤Xÿ2£Wÿ0£Vÿ/¢Uÿ,¢Sÿ+¡Rÿ*¡Qÿ)¡Qÿ&™Lû^.à‹8 ÎÎÎÙÙÙY_0×*¹Zÿ%ªQÿ$ªPÿ$ªPÿ$ªPÿ%ªRÿ%ªRÿ&ªRÿ&ªRÿ&ªRÿ&ªSÿ&ªSÿ&ªSÿ&ªSÿ&«Sÿ&«Sÿ'«Sÿ'«Sÿ'«Sÿ'«Sÿ'«Sÿ'«Sÿ'«Sÿ'«Sÿ&«Sÿ&ªSÿ&ªSÿ&ªSÿ&ªSÿ&ªSÿ&ªRÿ&ªRÿ&ªRÿ%ªRÿ%ªQÿ%ªQÿ$ªPÿ$ªPÿ%ªQÿ*¹Zÿ_0×YÙÙÙœœœn%šKø%«Qþ$¨Oþ$¨Oÿ%©Oÿ%©Pÿ%©Pÿ&ªPÿ&ªPÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªQÿ&ªPÿ&©Pÿ%©Pÿ%©Pÿ%©Pÿ$¨Oÿ$¨Oþ%«Qþ%šKønœœœ_`` r&¢Oý&¬Rÿ&ªQÿ&ªQÿ&ªRÿ'ªTÿ'«Rÿ'«Sÿ(«Sÿ(«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ)«Uÿ(«Uÿ(«Sÿ'«Sÿ'«Sÿ&ªRÿ&ªSÿ&ªQÿ&ªQÿ&¬Rÿ&¢Oý r_``ijj p'£Qü'­Uÿ'ªUÿ'«Uÿ(«Vÿ)¬Vÿ*¬Vÿ+¬Vÿ+¬Vÿ+¬Wÿ,¬Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,­Wÿ,¬Wÿ+¬Wÿ+¬Vÿ+¬Vÿ*¬Vÿ)¬Vÿ(«Vÿ'«Uÿ'ªUÿ'­Uÿ'£Qü pijjhhh p(¤Rü)®Vÿ*«Vÿ*¬Vÿ+¬Vÿ,­Wÿ,­Xÿ-­Yÿ.­Xÿ.®Yÿ.®Zÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ/®Yÿ.®Zÿ.®Yÿ.­Xÿ-­Yÿ,­Xÿ,­Wÿ+­Vÿ*¬Vÿ*«Vÿ)®Vÿ(¤Rü phhhhhh o(¤Sü*¯Wÿ*¬Wÿ,®Wÿ,®Yÿ-®Yÿ/®Yÿ/¯[ÿ0¯[ÿ1¯[ÿ1¯\ÿ1¯\ÿ2¯\ÿ2¯\ÿ2¯\ÿ0©Wÿ'‘Bÿ%‡9ÿ%‰9ÿ%‰9ÿ%Š9ÿ%Š9ÿ%Š9ÿ%Š9ÿ%Š9ÿ%‰9ÿ%‰9ÿ%‰9ÿ%‰9ÿ%‰9ÿ$‰9ÿ$ˆ9ÿ'‘Bÿ-¤Sÿ/¯[ÿ/®Zÿ-®Yÿ,®Yÿ,®Wÿ*¬Wÿ*¯Wÿ(¤Sü ohhhhhh n+¤Uü,°Zÿ,®Zÿ-°Zÿ/°[ÿ0°\ÿ2°\ÿ2°\ÿ3°]ÿ3°]ÿ3°]ÿ4°_ÿ3°]ÿ2®\ÿ'=ÿt$ÿt#ÿw$ÿx$ÿz%ÿ{%ÿ{&ÿv$ÿq#ÿu#ÿy%ÿy%ÿx$ÿx$ÿx$ÿy%ÿ{%ÿ{&ÿx$ÿv,ÿ+›Nÿ0°\ÿ/°[ÿ-°Zÿ,®Zÿ,°Zÿ+¤Uü nhhhhhh m,¦Uü/±\ÿ/¯[ÿ0°\ÿ1°\ÿ2°\ÿ3±^ÿ4°_ÿ5±_ÿ6±`ÿ6±`ÿ6±`ÿ5¯^ÿ#‚4ÿs#ÿt#ÿw$ÿy%ÿ{%ÿ}&ÿ ~&ÿz%ÿdÿUÿe ÿw#ÿz%ÿy%ÿy%ÿy%ÿz%ÿ|%ÿ~&ÿ 'ÿ|&ÿi#ÿ+—Mÿ1°\ÿ0°\ÿ/¯[ÿ/±\ÿ,¦Uü mhhhhhh m-¦Xü0²^ÿ0°\ÿ2°]ÿ2°^ÿ4±_ÿ5±`ÿ7±bÿ7±bÿ8²bÿ8³cÿ8²cÿ'Š<ÿr"ÿs"ÿu#ÿx$ÿ{%ÿ}%ÿ€&ÿ}%ÿk ÿGÿ@ÿ1žTÿm%ÿw#ÿy$ÿx$ÿy$ÿz$ÿ{%ÿ~%ÿ€&ÿ ‚'ÿ!y&ÿ^$ÿ/£Vÿ2°]ÿ0°\ÿ0²^ÿ-¦Xü mhhhhhh l.¨Wü2´_ÿ1±]ÿ3²_ÿ4²_ÿ6³aÿ5ª\ÿ1¢Uÿ1¢Uÿ1£Vÿ2¤Vÿ2¢Sÿs$ÿs"ÿu#ÿw$ÿz%ÿ}&ÿ €'ÿ €'ÿ t%ÿTÿ4ÿ.’Oÿ9´dÿ.—Oÿm!ÿw$ÿx$ÿx$ÿy$ÿ{%ÿ}&ÿ€&ÿ"ƒ)ÿ$+ÿ!i'ÿ%t:ÿ3²_ÿ1±]ÿ2´_ÿ.¨Wü lhhhhhh k/©Xü2µ`ÿ3²^ÿ5³`ÿ6±aÿ(>ÿp#ÿo"ÿo"ÿp"ÿp"ÿq"ÿr#ÿt#ÿw$ÿz%ÿ}&ÿ €'ÿ$‚+ÿ%{,ÿ `%ÿ>ÿ(t>ÿ;µdÿ;µdÿ;µdÿ(…?ÿo"ÿv$ÿw$ÿx$ÿz%ÿ}&ÿ €'ÿ#‚*ÿ(„/ÿ&r+ÿ P&ÿ5³`ÿ3²^ÿ2µ`ÿ/©Xü khhhhhh j0ªZü4¶bÿ5³`ÿ5´bÿ)ŽAÿn!ÿn!ÿo!ÿo!ÿp!ÿq"ÿr"ÿt#ÿw#ÿy$ÿ|%ÿ €&ÿ%ƒ+ÿ).ÿ&k+ÿ J#ÿ$Z1ÿ=´fÿ=¶gÿ=¶gÿ=¶gÿ<µfÿ r-ÿq!ÿv#ÿw#ÿy$ÿ|%ÿ &ÿ$‚*ÿ)…/ÿ(u-ÿ!M$ÿ2¦[ÿ5³`ÿ4¶bÿ0ªZü jhhhhhh h2ª]ü7¶cÿ6´bÿ6°_ÿo#ÿl!ÿm!ÿn!ÿp"ÿq"ÿr"ÿs#ÿv#ÿx$ÿ{%ÿ~&ÿ$+ÿ)‚0ÿ)r/ÿ&T(ÿ$L+ÿ=­dÿ?¶iÿ?¶iÿ?¶iÿ?¶iÿ?¶iÿ9¨_ÿi%ÿq"ÿu#ÿw$ÿz%ÿ}&ÿ#*ÿ)„/ÿ(s.ÿ#N&ÿ3ŸWÿ6´bÿ7¶cÿ2ª]ü hhhhhhh h6«_ü8·eÿ8µcÿ3£Vÿk!ÿl!ÿm!ÿi ÿ`ÿ`ÿk ÿs#ÿw$ÿz%ÿ}&ÿ#€*ÿ).ÿ*w0ÿ(\,ÿ%E)ÿ9™Zÿ@·kÿ@·kÿ@·kÿ@·kÿ@·kÿ@·kÿ@·kÿ4™Tÿf ÿr#ÿu$ÿx%ÿ|&ÿ#)ÿ)ƒ/ÿ)s/ÿ$O&ÿ5 Yÿ8µcÿ8·eÿ6«_ü hhhhhhh h8¬aü8¸fÿ9¶eþ2¡Uÿk ÿl ÿm!ÿ_ÿBÿ>ÿZÿq"ÿx$ÿ{%ÿ!}'ÿ&€,ÿ(z.ÿ'b+ÿ%G'ÿ4~KÿB¸kÿB¸kÿB¸kÿB¸kÿB¸kÿB¸kÿB¸kÿB¸kÿB¸kÿ+ƒAÿiÿs"ÿv#ÿz$ÿ"~(ÿ(.ÿ)s.ÿ%O'ÿ5 [ÿ9¶eþ8¸fÿ8¬aü hhhhhhh f;®cü:ºhÿ;·hþ4¢Wÿj ÿk ÿm!ÿZÿ 2ÿDºmÿCºmÿ'„8ÿw$ÿz%ÿ"})ÿ%y,ÿ%f)ÿ!I$ÿ,`:ÿDºmÿDºmÿDºmÿDºmÿDºmÿDºmÿDºmÿDºmÿDºmÿDºmÿC¸lÿ"p0ÿj ÿs#ÿw$ÿ{&ÿ&-ÿ(q.ÿ$N'ÿ8¡\ÿ;·hþ:ºhÿ;®cü fhhhhhh e=°eû;ºiÿ<·jþ6¢Wÿiÿk ÿm ÿZÿ 2ÿEºoÿEºnÿ'„8ÿw#ÿy$ÿ!y'ÿ!i&ÿJ ÿ!F'ÿB¯iÿEºpÿEºpÿEºpÿEºpÿEºpÿEºpÿEºpÿEºpÿEºpÿEºpÿEºpÿ@®gÿe#ÿo!ÿu#ÿy$ÿ&~,ÿ(p-ÿ%N'ÿ:¡]ÿ<·jþ;ºiÿ=°eû ehhhhhh  e?°hû=¼jÿ=¹jþ6£Xÿi ÿk ÿm!ÿZÿ 2ÿF¼pÿF¼qÿ(„9ÿv#ÿx$ÿ q$ÿZ!ÿCÿ>¤aÿF¼qÿF¼qÿF¼qÿF¼qÿF¼qÿF¼qÿF¼qÿF¼qÿF¼qÿF¼qÿF¼qÿF¼qÿF¼qÿ:¢\ÿj!ÿt#ÿx$ÿ&},ÿ(o-ÿ%N'ÿ:£^ÿ=¹jþ=¼jÿ?°hû  ehhhhhh  dA±iû>½kÿ?ºkþ8¤Zÿi ÿj ÿl!ÿZÿ 2ÿH½qÿH½rÿ(„9ÿs#ÿu$ÿn#ÿa!ÿ7“PÿI½qÿI½qÿI½qÿI½qÿI½qÿI½qÿI½qÿI½qÿI½qÿI½qÿI½qÿI½qÿI½qÿI½qÿH½rÿ0‘Hÿq#ÿv$ÿ$z+ÿ&m,ÿ$L&ÿ<¤`ÿ?ºkþ>½kÿA±iû  dhhhhhh  dD²lû?½nÿB»mþ8¥Zÿiÿj ÿl ÿYÿ 1ÿJ½sÿJ½sÿ(‚8ÿq"ÿs"ÿr"ÿ!t(ÿ2Eÿ4‘Gÿ4ŠHÿ2xDÿCªgÿJ½sÿJ½sÿJ½sÿJ½sÿJ½sÿJ½sÿJ½sÿ?§`ÿ+„?ÿ,„?ÿ,‡@ÿ-‹Aÿr#ÿt#ÿ#y)ÿ&l+ÿ#K&ÿ=¤`ÿB»mþ?½nÿD²lû  dhhhhhh  bF³nû@¾nÿC¼oþ:¥]ÿh ÿi ÿk!ÿXÿ 1ÿK½tÿK¾uÿ(8ÿn"ÿp"ÿr#ÿt$ÿ!v'ÿ&x,ÿ'l,ÿ"K%ÿ@`ÿK¾uÿK¾uÿK¾uÿK¾uÿK¾uÿK¾uÿK¾uÿ8šUÿdÿeÿgÿj ÿn!ÿr#ÿ#w)ÿ&j+ÿ#J&ÿ>¥cÿC¼oþ@¾nÿF³nû  bhhhhhh  `I´pûB¿oÿE½qþ;¥]ÿhÿiÿj ÿXÿ 0ÿL¿wÿM¿wÿ'€8ÿl ÿn!ÿp!ÿr"ÿ t%ÿ$w*ÿ&k+ÿ"K%ÿ@žbÿL¿wÿL¿wÿL¿wÿL¿wÿL¿wÿL¿wÿL¿wÿ8˜Uÿ\ÿ]ÿ`ÿcÿfÿiÿ n%ÿ#b(ÿ F#ÿ?¥cÿE½qþB¿oÿI´pû  `hhhhhh  `K¶rûCÀpÿE½rþ;¦^ÿgÿh ÿi ÿVÿ /ÿN¿wÿNÀwÿ(~8ÿi ÿk!ÿm!ÿo"ÿr%ÿ$u*ÿ&j+ÿ"J%ÿCŸcÿOÀxÿOÀxÿOÀxÿOÀxÿOÀxÿOÀxÿOÀxÿ8‘Tÿ@ÿAÿCÿEÿGÿJÿOÿJ ÿ< ÿ?¥dÿE½rþCÀpÿK¶rû  `hhhhhh  `M·tûEÂqÿG¿sþ=¦^ÿ`ÿaÿaÿPÿ - ÿPÁyÿPÀyÿ(~8ÿhÿiÿl ÿn!ÿp#ÿ#t)ÿ&i*ÿ"J%ÿDŸdÿPÀyÿPÀyÿPÀyÿPÀyÿPÀyÿPÀyÿPÀyÿA bÿ&g8ÿ'g8ÿ'g8ÿ'i8ÿ'i8ÿ&k8ÿ*m<ÿ,n?ÿ-k?ÿG¹pÿG¿sþEÂqÿM·tû  `hhhhhh  ^P·wûEÂsÿI¿uþ<¡^ÿEÿEÿEÿ9ÿ $ ÿQÁ{ÿQÁ{ÿ)}9ÿfÿhÿj ÿl ÿo#ÿ"s(ÿ&h*ÿ"J%ÿE eÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁ{ÿQÁzÿPÁyÿLÁwÿKÀwÿJÀvÿI¿uþEÂsÿP·wû  ^hhhhhh  ^S¹xûGÃuÿJÁwþE³mÿ%d7ÿ&d8ÿ&d8ÿ&c8ÿ)g<ÿSÃ}ÿSÃ}ÿ){8ÿdÿeÿgÿjÿm!ÿ"q'ÿ%f(ÿ!I$ÿF¡fÿSÃ}ÿSÃ}ÿSÃ}ÿSÃ}ÿSÃ}ÿSÃ}ÿSÃ}ÿJ²nÿ:–Uÿ:—Uÿ:—Uÿ;˜Uÿ:™Uÿ;›Uÿ<œWÿ;™Vÿ=˜[ÿI½tÿJÁwþGÃuÿS¹xû  ^hhhhhh  ]UºzúHÄvÿKÂwþMÃxÿNÃyÿQÃ{ÿRÃ}ÿSÃ}ÿSÃ}ÿTÃ~ÿTÃ~ÿ(z8ÿbÿdÿfÿiÿl!ÿ!p'ÿ$e(ÿ!H$ÿG¡gÿTÃ~ÿTÃ~ÿTÃ~ÿTÃ~ÿTÃ~ÿTÃ~ÿTÃ~ÿ=šZÿ[ÿ^ÿ`ÿcÿfÿiÿm#ÿ a%ÿC ÿD©gÿKÂwþHÄvÿUºzú  ]hhhhhh \W»|úJÅxÿMÃyþNÃzÿQÃ{ÿSÄ|ÿTÄ~ÿTÄ~ÿTÄÿUÄÿVÄÿ*{;ÿaÿcÿeÿhÿj ÿ n&ÿ#d(ÿ G#ÿH¡gÿVÄÿVÄÿVÄÿVÄÿVÄÿVÄÿVÄÿ?›[ÿ[ÿ]ÿ`ÿcÿfÿj ÿn%ÿ#b(ÿC!ÿE©iÿMÃyþJÅxÿW»|ú \hhhhhh [Z¼~úKÆzÿNÃ{þPÄ|ÿRÄ~ÿTÄÿUÅÿUÅÿWÅÿWÅÿWÅÿ,}>ÿ_ÿaÿcÿfÿhÿ l%ÿ"a'ÿE!ÿH¡iÿWÅÿWÅÿWÅÿWÅÿWÅÿWÅÿWÅÿ?›\ÿ[ÿ]ÿ_ÿbÿfÿi ÿ"m'ÿ$b'ÿ D#ÿGªkÿNÃ{þKÆzÿZ¼~ú [hhhhhh Y\½úLÇ|ÿPÄ}þRÅ}ÿRÅ~ÿSÅ€ÿVÆ€ÿWÆÿXÆ‚ÿXƃÿXƃÿ8Pÿ]ÿ`ÿcÿeÿgÿk$ÿ!`&ÿCÿI¢jÿXƃÿXƃÿXƃÿXƃÿXƃÿXƃÿXƃÿ@œ]ÿ[ÿ]ÿ`ÿcÿfÿi#ÿ$n)ÿ&c*ÿ"F%ÿI«lÿPÄ}þLÇ|ÿ\½ú YhhhhhhY^½‚úMÈ}ÿQÅ}þRÆ~ÿTÆ€ÿVÆÿWÇÿXÇ‚ÿYǃÿYǃÿYÇ„ÿOµuÿTÿ^ÿbÿdÿfÿi#ÿb%ÿM ÿJ¦kÿYÇ„ÿYÇ„ÿYÇ„ÿYÇ„ÿYÇ„ÿYÇ„ÿYÇ„ÿAž^ÿ\ÿ^ÿ`ÿcÿfÿj%ÿ&n+ÿ&c+ÿ#E&ÿI¬mÿQÅ}þMÈ}ÿ^½‚úYhhhhhhX`¿„úNÉ}ÿRÅ~þRÇÿVÈ€ÿWÈ€ÿXÇ‚ÿYɃÿZÉ„ÿ[É„ÿ\É…ÿ\É…ÿ2}FÿTÿ`ÿcÿeÿh"ÿ h%ÿ a%ÿJªiÿ[É…ÿ[É…ÿ[É…ÿ[É…ÿ[É…ÿ[É…ÿ[É…ÿC¡_ÿ\ÿ_ÿaÿdÿg"ÿ"k'ÿ'o,ÿ'b+ÿ#E%ÿI­nÿRÅ~þNÉ}ÿ`¿„úXhhhhhhWbÀ†úPÊ€ÿSÇþTÈÿVÉÿXȃÿYÉ…ÿYÉ„ÿZÉ„ÿ\É…ÿ\É…ÿ\Ɇÿ\Ç…ÿ&e4ÿMÿVÿ[ÿ` ÿb#ÿc$ÿc$ÿ` ÿ^ÿ\ÿZÿYÿXÿVÿVÿXÿYÿ\ÿ^ÿb#ÿ#e(ÿ'h,ÿ(],ÿ#C%ÿJ­pÿSÇþPÊ€ÿbÀ†úWhhhhhhWdÀˆúQÊ€ÿTÇþUÉÿVÉ‚ÿXÉ…ÿYÉ…ÿZÉ„ÿ[É…ÿ\Ɇÿ]Ɇÿ]Ɇÿ]Ɇÿ[Ńÿ1uEÿ;ÿ@ÿEÿGÿIÿIÿFÿDÿBÿAÿ@ÿ@ÿ?ÿ?ÿ@ÿAÿCÿGÿKÿ N#ÿ$Q&ÿ$K&ÿ!:#ÿK­pÿTÇþQÊ€ÿdÀˆúWhhhhhhVg‰úRÌ‚ÿVɃþVÉ‚ÿXÉ…ÿXÊ…ÿZʆÿZÊ…ÿ[ʆÿ]ʇÿ]ʇÿ]ʈÿ]ʈÿ]ʈÿ]ʈÿV¼~ÿ@\ÿ2rGÿ/jAÿ0kBÿ0kBÿ/jAÿ.i@ÿ,h>ÿ+f=ÿ+f=ÿ+f=ÿ+f=ÿ+f=ÿ+f=ÿ,h>ÿ.i@ÿ1lCÿ2nDÿ3oEÿ5qHÿ5pHÿ5mHÿR¾{ÿVɃþRÌ‚ÿg‰úVhhhgggThÃŒúS̓ÿWÉ„þVÊ„ÿXÊ…ÿXË„ÿYˆÿZˇÿ[ˆÿ\ˆÿ\ˇÿ\ˇÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ]ˈÿ\ˇÿ\ˇÿ\ˆÿ[ˆÿZˇÿYˆÿXÊ…ÿXÊ…ÿVÊ„ÿWÉ„þS̓ÿhÃŒúTgggnnnTjÄùT΃ÿXÊ…þXË„ÿXË„ÿXË„ÿZˆÿZˇÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿ\̇ÿZˇÿZˆÿXË„ÿXË„ÿXË„ÿXÊ…þT΃ÿjÄùTnnnËÌË MmÄøVφÿYˆþY̆ÿY̆ÿŻÿŻÿ[̈ÿ\̉ÿ\̉ÿ\͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ]͉ÿ\͉ÿ\̉ÿ\̉ÿ[̈ÿŻÿŻÿY̆ÿY̆ÿYˆþVφÿmÄø M ËÌËÑÑÑ;|Ç™óXφüVË„ýX̆þX̆þX̆þẊþẎþẎþẎþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþŻþẎþẎþẎþẊþX̆þX̆þX̆þVË„ýXφü|Ç™ó;ÑÑÑÖÖÖEEEi–zªŽÚ³ÿcÐŽÿ`Òÿ`ÒÿaÒŽÿaÒŽÿaÒŽÿaÒŽÿaÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿbÒŽÿaÒŽÿaÒŽÿaÒŽÿaÒŽÿaÒŽÿ`Òÿ`ÒÿcÐŽÿŽÚ³ÿi–zªEEEÖÖÖÜÜÜÕÖÖ i”{¡ŽÈ¥ë‘˨ô“ͪô“ͪô“ͪô“ͪô“ͪô“ͪô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô”Í«ô“ͪô“ͪô“ͪô“ͪô“ͪô“ͪô‘˨ôŽÈ¥ëi”{¡ ÕÖÖÜÜÜÛÛÛÙÙÙÌÌÌ?>>?>>ÌÌÌÙÙÙÛÛÛÜÜÜÛÛÛÜÜÜÜÜÜÑÑÑÉÈÈsrrmmmnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnmmmmmsrrÉÈÈÑÑÑÜÜÜÜÜÜÛÛÛÜÜÜÜÜÜÜÜÜÛÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛÛÛÜÜÜÜÜÜðÀÀ€€€€€€€€€€€€€€€€€€€€€€€€€Ð çÿÿÿÿçø‰PNG  IHDR\r¨f IDATxœí}y¸ÝÆußo€»¿ûv’4%Q¢dQ %Ùµl9²%Ë’ãMn/Û|qš¦iÚ¦I›&iú%M›8é×/iä5qê:v’úk¼5Ž9ÞbÙÚ,Y²%Ë’¬•âN‘||$ß{÷½»Ó?\ €` îòˆ?ðáÎŽÁœ3çœ93räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽã 2„:5»^çÊ‘ã|e.sgM€€Î\ZÆõåȱ`0˜‹fUQV @P´ÿæ³|ŽÉAa1®ýW)T§ dÿåÕU€%8j@Ž9,8â¿  þ¬oè@!#PE„@³p$‡ðsäÈ!GüçÍü=XŒ µ½@(Â"~˜HÈ‘#G<83×Þæ„ÅBÀ›õu Ÿ¼õ½·ìxç/Üúžù-ó¯©U'v•‹•Y]ÓË„h¹dã¼¥¦i˜F»Ým-ol¬ZZ<óà>þÍÏ|ãs÷/"¨ZðJ=;,’2/¡;¿‹¾t¥_¹ãg~ìõozõ¯n™[øG„¿Špžã|6ƒdfØ{PJ{KgN=zß×üà‡ó¯Bp–ïh2¿Æ»S“Œ@  W§×ìßì¬_ºæU—íøíý»ÿ¾sûÎ[2ƳüùL¤ãŠMÂ\(5_ò;/ü¥ßùìDurÁŸÙ¤=œX?€SÍÃhö’UÆm¢‚\9qoN$dÉ™AòœÕBÛª»°cb74ŽÍ¼ÙÚ8ù«ïü½Ÿ~îñà x™€  ÁTÞ„„Ã숯Á%ø\kÀäÓÜñ?^²ý‚[ý—ZGqxõ)tÌ$+ñ26ù‘àɈžYƒSÉâ·4ݳ•´ vM]­• qGŽþÊϾú?ÿ]ÉÜÙ¾ `þ7™{!dlE¸_‚ëô£Ã"~í_þö;®¾ñõ¯þ÷`h‚âÐê“8¼ö4 Ë.¸º™tjB¼—TÙÙüË1ä¾9â[ ÒÙ ÚÃÙÖ ôhÓå­ž¸ÉúäîÓKKÿ°ï‰#k°$pÇú¯Ãu'&Ø](êpŸ†Õû·Àf ¿ùõ¾ÉúÔKØLûÎ=‚SÍ#Åû¡˜ðI´±''ÔÍ…dï“'!“w2FÎ2š½5ÌWvº%¢]|åŽ]û‰o~îj€3ÛëpýØ{.¢Öç‹ðúX5  ×ܸgû–m ×Q¸ÿŽ4žÁéÖqÏ&g¹‹H¥s LCˆ{qó{­ÀñÛ™_ãzI½ûˆñc•cA®Þtcìtë8Ž4žKc ;¶¿âêW^²ÍnF®Nƒk¬wV „aNAl¡ÓÎýOþ­ïÖ4¢; [íœÆ±Æs RéB»²ÏžyùXîÍðâ-0å—škï,GÚéžáXãY¬vN÷€¦i…wüâßÝoºE“ìdíÜ'fì¬$0Wu˜ÞýÒ ¯e3^{*¬>䄪ÐT=.(Ÿëõ£…A¼Ð¼!¶yµ ¾ÁâðÚÓžß»¯ØuÜɸK2w*rßÙ~ÏE˜o>Çr‘ ¦’Ùé¹é‡;×>…F÷\H‘~Èw?BôBâurüÁ’ûè€ cxïUvåÁÉHïŒ9Î* mM²”,Ýeœk/b¦lIþÓ3S;ÌX…e움åX4ÛaîÛ¼2ûÑÇIÇ®Ô*•Ê´ÓIŽÞ/¹Yt•`Ʀç¤sÀ•ÃÃfrGPè£#@Tgùà÷Ñ£…›ŽÐ‡‹~ìdLàLëDU Z­LÃuÇ_ƒ¥¦aþ L%Bc¿ˆxÅUæ~ ô‚^ Ô‘x;Eҧ‹žõÝü$œUøÒøÓñjò–³™rÐtßÉ1vì°¡a㇓¦˜FˆÇ–Û'Aé5½Pphs ,ƒ cù/Ø÷Î \ÊD @Ü;>Î@hö~þ¶±®Á•2|ŸùƒÞþ—)‹—F :ˆŠã‹ ‘uçÈò²›—Fù“Pì÷ää¥áKrL ž$Ð5ÚèM”ô*4­–†³AÏ„Åfà0ØñÏÀ0 Àk@pV*ý4öƒw O¿„Ä"î‹ËñÇsÊ-"[φòú¸òâ¿ÿ]»ôd²ŒÀ+ ðmY0ŽÑBI«ø (Ãr*1ášï^šø3:iûþ2ƒÓì®ÙQò:eøÞ\”žŒ÷åg~ŠÒˆÊT‰ÌUã±@ý*©Þ±ã À ¨ç·˜pâ¶•ï»c¶yŠHÖ¾ÇfןŽ=ˆ#°ª@ß.à<¼y|y8—Ïü~_FÐàþæÏôbÎDN®ãñä½Cû½s™Z†3²}$™Hg& ^[X[³%˜%zn×D1 ƒ·`»!¡Ö—¨–ÈŸùƒyÅ¢~ðåÊŒƒ\”<’¨Á• î$à‘体J˜jÀU b3IU€²ÎE}ˆˆ=´Ð8gôqÅ ç¡cÎí᱉ˆ_ŽðãìP‰{3,=d´(ó^¢˜[†—È1‚a2 îóE‰û±%öÐ>ÿ} u~Ÿ¥ŸW¬7ÜKü<O¤í€CpÁW7@l ­cÐL,\ÿ§ÂÊÎì~UÒ?ž\“ÏdüáØ¢iG·±@¼Öôÿú[Ϻ)«ó»á"=Ÿ ç¼P·º ¦EúKÏ1|ÄYk÷êúâ%D/SŸu¦œ(›€l›Åqjfe ®^”Ò£Åþh‘?ZÔÎô"õ")rö ÉL1˦žqàg^]ß;Éø¥‘] Jˆ95úZ?|Ð1’¼UÄÏŸõù#?¥"ÇÀ§ÿÃÈÞãH6sKÄ6Álb»@:&ËYL4HSKN§Éò¤(ÎÇÓùyú¾×T@ú霶ôc&&zY?·ú¤×þ!¾Àe~i€öƒýL€oÙ ÂZhcr(´˜`;Bú±ˆ—‹MoÞæëû”Ÿ·_¶ßŠëÏ|)Ÿ€œ ¯ALx4Ä2äˆú<ë=õäòNè”“Ž“7¶=€—Ö„LJ `EŒÀ}_¸¢¿ìsg–wê‹ü}q?NÜþðˆ6el©gic¨~Z ôŸWœ·B‚ŒÀ§Û{Dvg6÷æï“¾4a§³PêiW(}F!®À·Â “Ä)8Dïg‰?p' ~ ÂÔÑôq&ÈAcÐ}Ü®HàiídÞpBLÀIÇ0[$²H#’=HФémýU¶ƒ<ñ¢Pïgˆ?Ü6`?ûE‚¿ÇVÀøùÏ‘ÌC-DoAôÎh0šyñµÿ~&Ë6à· ðˆ™e‘öŽ“¬A‚ÃðBá×zc4(ÂË-|ö Ü4þ™?RZLþ¢:sâ-ȼïŒí†ú˜e'ƒÑ>TÏÐÉgý(¨+3 °ÕqÇ 6L„“sˆˆC\Ë-)hðóûDé­Ö—áÆq[+~¹9† yâò ö6ú¬ àúüó®ß8è7 ºª˜Ù]Þ .ì3-¡&ûì©¢ÂUÉvøDÿ@t„Þwæ÷—Ço)¿í9‘6ÂÞxiú~ÁýݧßKJ±íG‹yŸM7"*€Ì*€øUøÃ,ž0«V×o|?9 w¼DßÿÍ4­—7€‚2A EΔ£Û4`ÔÖƒÑó~ئÓìýž,E»Ñ Y«Á|ŠRP“¢µîýF†Ù£h®w<Øíhoô˜qMÑëèlôúõ@§ÕƒÑ6<éºmÝŽáTi?Cfbj¡ŠŸ¹ãF]<èËÞU€TPhˆ‹dTÄ¿õÛ/Òû%ˆ)#¢-ãFè­õÌEg£ £g¢×2Ñmèu t[V\{½jRôzfPÖ€î¶\Êê´{èu\âë6{0ºîïNÓ€Élg£ëŽP ž8BÓôªl¦é%l½¨Ä7S–ƒ›ÚH1`¼ Á0J|_Ä"”P£ :ñml§ž°~Z xˆ]›  ÄMG)…VÒ¡S­Ÿ ek›þ¹»ÖàE¸À?(([qNpuu&ÌsGiØ?Ä“‰zâܲ=_àä Zåˆ~0œš«K-œ{qg5°z¦…•66V;h­vÑltA kðQPè% Ä"€` A¬AM -Ø¢i€hLïsä Ñ HÙý­MjžÇÖŠ—vP,2‰Šh"âÍ–,#`ã]ÏVF²õüvüéh [aìYµÂo£®ýÀcH…ô@öç>ƒ¯µ té™ßoK¯; P“âä¾úáiýѬžjÁ0Lè:´ ´he Z™@ÛJ ï,`¢\Š.xÓƒ÷~|LŸãâËêá¬^ïÜ;ñŽŠîþ¶Ór÷úgeõç`TTÙùß]£X¢eí³Þ4N‡úî=ïÛWCüþrܶò _$—¤ŒqùľÿÅý8ôƒÓ(Ì@f4”.( ¾§>(Þ3’H§ãò,MAFÀ.²qÒL‚0'?SŽU;âYâIê™­ù_òf7 ï2ˆJøgxö–%,i›€¯¬¨ã¢ە³-Üõ±§púè*Š—”0ùºI¨/5žGàÐ"B8á™ø¥(&`'Xúy A%–#i$˜I]IÿžÕ‰-gØ¡!Ë!¬ÞîÕûÃô{ž¾ïê\Þ¬bƒLàÓ¿Ô§¾} |fÊWTPídêòÎwø™EøÉ?^‰ ð×éWxDÏ–%^*óÚ"᥵ MÆÀ@VxÜœ3‡órroA‘³…hæXÿ3’½{ßúøÓ8ºoõ×NBó[´s(AØa~ïˆ °e¹¢=G è—”­CЬkPHÍLF§QÕt®îï¹gƒXï÷§å!à¯Èfqfe±‰/þþ#Ð.Ô1ùêz5l^¤! Ña^‰0\§÷†»“o”à™ýW!²@(œuð‘`~¢s¡iÃfDéývXÄÌŸ¥×ßñ§—ñÕ=êuçB?מƒƒ({€Ôwvå3¾­)D’,qÓÿü/VAy`͈i¡ÌP$„¯ýR{æ`þ>¯å4bíÿÑå$Ãß8Ї¿°õ& ×„iݼ€–.òÓOüñÍØ¡"<øR€¯¾ZÁÒHŸ:Jž€1 B„®åßîý!UpòÆmS(¥¸ûãÏàÐóg0uó¤åa–¹¹@ b‘ß›FÄܯ*)Dùô«t+•9}G µ’tmÒ¿öï¼MB^½_:Wì,(¥øÊ?Ž3uÔ_9‘ª¬É ÃDùÒä9õIÖW~;€EkÜU€ØPà Èü m9_ÿ¦æ{è° q¼Á~ò¥lg"Ä/5ÆF§ï†¡°4tÑœgµ×ã ê¾ €á/{ñºQð(…ݳ/<| åkÊc³Ê7ì÷3ªÔ!ql¢0'|„vÚˆÉØÈgŠWG–0º&šk]LWGÇß?#Òw›²€Ç­@B㊠@°ÿ¦-ˆƒA®õÇ•–®¡0;Ä煮H1b‰ÿ"2, Á°$5e%=T³/ÐX6‰ ûØðЊsú~‹óÅa'ž=2=‚²h“ÎO +ÝŸwüWXš žÏS äl.ÝõWòœõˆXP· €Á/±I‘¯ëË@– œØ·‚âlalôàü"wlÐįÈó±Øy£§ž(RµÄlÊüiaͺ.J£\:w|úT® $Æ%ë.›Æ˜æÉËk§´ÏFÀ@Fu‰tÐ^ï¢R¬I—5ªÏ8Vt¢º !¹¬ “„lØ}(3ÊD1º+ĽÀ}/&1‰Rt›¦ÝsòÏ;”ïY5A©šµãaÀúø¦êØkvK‚,}ðüý96Q[(š0€Aù8º¹‚­?iL€Æ™´š> i]áàVVÒæ€Jb—)ÊO#©l£â@¹Ül8àÎö`}¹ ­’Èèšcwlg=,èð·3èHÃg±B X_îe¥­É1`Pбåß”/o'zšÔ«NSÒôeRÖáJ’é¡q¦RÓÑ“Cˆ(±º¿õ=¡´«rªR¹£$€ÀfF~SÜÅ@•p‹œÞïO%Á–r®õsmhåñÛÿ?vRZFZLÑWÂ]|>C[‡?.¬ Ô—NÂü&Vg×Á•€ ´=h¹0–(Ìlˆ ÏÀrb·Åú£h“rÒyƒD«Ñ…69~À¸òè>†=,ä–û=é=„æ VŸ?ØKkAšŒô6 ¯¹Q@(ÇŒÙüöz¤4ìј#.ÂÆÀ8ŒaªèN `ÚãœÖà^°\ÉÝ–ri|Îp0^C\-²›qÊUg  ŠI#¤ï•<"”†þŠZ.ófìuÍô_ûÍ1ÈLLþ±ëÛGc\³p¼"í–%ýŒÄ^€‘CÄgži*ýÚsyðú}0NÂ’ÈLDÍ"ÀÛ×$¸=™)(¥æØ-©Qå{5 J)@ƭ׳D¿'"è“6±ƒÔ€io0¡ÔTª°«úA_ÎÒ&¥R:¼ wáà È©ŠFEM%ÈöI@Màä‹t$òmò~™˜cž löé.-”}hXC+š 3ÉÈøýfi˜èœî*/7а]ï?o|À+Ã(㳯r#&íÿ— ¿ 8:ˆ"ù´R5GéiÏìzù<:+†Ò2¹³¸`f‰Ú“Ža <æà„m¿q«Ú¶Éˆƒdž€|‡—tµ³/F´YAŒMC#ñº_Ü£¼L>QÎú"€?»–·¬G™ï²9Ó©cÌ@J(<0­€5XWNlàñ/¨uúŽË#¬+̾gÂì¦4ïàçyàåo¿sñ>íe½;q0½9¶”x³¿ÿ7 Är‡9ð¾šM}Ô¯KÖ@ â0®•1ÙçÁÅX=ÙÄÁ§Ï¢zy ±³DÏ ƒ—ÈýôΓ&šÏ5±çu ±€iRŒ4±çˆÂx3BÁÇAýô)F@0¬#¶÷•¦uTw–BÄm}s‘ÏØ0ð$€Þ‹ÝØ¢˜Ù6¡rê[$½)÷6,™TxTœ(åy'™1c¹@NÚˆ^¶a"¥ë6 SÉYÊ9†€÷.þ‹ò O’¡½ÌÐCGÖ²ŠœiPë“ÐQA!a\ßDö!'º—I'›7ªM*iMÙf ä–ÉðE;JìÕŽdOa­$xV BÏIßñµÛ$!Œ€:GÀ£q²‰YRdjóßg\?i˽hÕL†M¸á£°([¤Ú⨉‘lWŽIæPPß^€Qœ]‚Ò…Ô#aºbîN;zHóuŸ¡£´ÛòÏBÙ‡ALšê=ÊKž?æ‰B1ÛM ÓÚ”'ÓH ”Ò܃‘ƒ¨ñz†çeã)'œ+Ü ÑaÌU´È1€ÐÝFî×fTy'ñ‰‹R{ý×*?¢&x¿- F»ûm¢!Ê‚‘Âܚ€ŒéŽýR+óÒ+²¸› ¢v†b4 ÝÀáFÆØ¥™Vy#Lÿ9Ra˜äð? €jÝØ¿ù×ÿ7(ˆ÷pC“ží®–ŸäÄçþ㣖†"Ýl»Eƒ‚›„À£]Š7þÆ•ØqÕTú¶+¤µÔ§Ë,2p–òdËPuzp\Å%2ㇹM„ža`îöYeåEŸÝßO÷îüó–ÇÛD)ÅêC ˜¦X^Žãà‹‹-ö³P`To‚ý¸A}Þ.ƒ°²_:ðÐ Õ:jŽìe4Æ™È@î¥P§~u‘“.˜×éÓ𺩠è¤WfHe{¨*úwàÈǵˆû=ƒ±ö{úOØñš¦ÉŠ‘£s§’`:J¡éDnê«­ˆ €±ƒ¦-jhˆ÷nã>ç¸r‹DŠ®¶ÿ5 @AY ©Má*@ò †Ý(.#Ê,(Jã–ÍUðõŠ, P0¾0¾,:dˆ?ó ŒR¢¦Ð0"@øºg‚Òú2¶¤mƒ³7 ßž(#¡/ÄŒ¢ï8ÓäûX ñÌϱú§©ß•ÔØT±s…gÒ@¸Ÿ¤ùòÑ?Ÿ?kL"”­_Ä]e6変”óîTͦ¡Ÿ3)ô"àðò…–5R~4p³iÑïø!œ*Í0Àž°ËŨ3eƒB+¨Ú{Ïp†ôßèKÙ³É-ûñÊD¼v+wàÀ_òmÈÌÔ´‚ëç%èGù˜£#Ø 1107€¾Óõ09F@ ˆËœå×QŸqxÈ9@\©ÂÓAï K!Ìï`™æ7(t]S² €6|`›Ð ™EE›}"~Ëxz™@l FÚQÃ8·]1Ï%.!‡U”ØoðŒsjPhE'ÐþËUŸEFB6…çÓt©º%î·%FÃ(&’!(0ÔÙeㇷVIvMò–Ѹ½§ôË@q¿R BÃA2ÿ…8NC±‘ñïù_-ÄFÜlzÉY´.ÿŠY¼VðÊH {¢E–„%ƒ]‘—ý Ä0&±ägÊr¡°¿²‚“iêV¡8Ù_V¶@ƒÂ ‹”¾ÁÚbZ/Í@c‰ñ•Tu9—pñ>=Nga–@€µ ÊŽ §ÿp«ŸGHê¸Å”4†ÔŸÛÇ\G0åð‰æ¬7`ÊÎsVBªãð£¨:C @ÑYåÞaÕWq.€Ór/A…_yÇØJÙ XÓ­¯2•“Ùž£Ef¹m%ŽŽçûð~‹ÂØ:TÙ’ZòÇgxöm ”¿¶Á@Ú[Ž`Yª¯l½lS]ÄíHÚŸ-£Òf,eÿNÕ÷PМƒ ø*ëTÂIÃèH¾… öÄ Âü¶,Vwø­²üvkñ8>;¨5ã«\tÝ ¿v • +Üxe†=É.w%_ô} Dùņrx”íß¹3£‘žF” 8jðª¡_Zê6þ¢¹ôèÉCAûþ×á~0ܾÕÂ1ë€S¯Â‰¿?‹½o{ ævÚñýž IDATÕ2©cì9ƒb™`zG@9vÞÆRG]Æ“_;Žù·Íðöé+`ðì ÁÞÃ@Üü¿üÒ<%+:tSøó xÎÂÝ3H`æõÓøÖ‡žGgÃP_AŽ>ê[ËØsÛ‚µ˜Sà¬è€òf(?£ƒÚ‚ªz–æÒbäV4‰¨LåέðŠ \ÿ]• +0g4<òÙ#Ù=Ïy£câ¾?Û‡Ù[¦-G! ø?š¼r ½4r¤@ PÊ› ½¤Ò Æˆ*pÀêÖ÷ƒV¥ øûIÐO#Bîy¿û 5)LüF¡0 (s€ ÁügpÿÇà­ï»•Éâ°›44t[îùÈ>ÌÞ6 "ôº’Ôgš®Á?¯…µˆ  ¿ àƒŸ>¥†h¦%IºÛñ’_†‰$Êe—>U@ý•uÜûáý:©x4ñDmïг£Ç©[LŸa[üPfTÕh¢WÌNxùõ1f©qžC‘Uu¨^\Ao‚àñ/¼8ì¦ Ï|ãÍ.j{DË¢}}9þY5öxÇžZ# …:‰;©+pÿž‚ý0ˆ€ÈžwÈû¼x|xGØK' rzà0uÃ$Üy {êØqÍÔ°›30œÞ¿Ž§¿y[rÖuÙ#6c0¨u|¹"€w~¨ö‰‘û.€^Ö@{ñKJò AJ}å$ÊÓòݰ±ÔQÆì”‚s?>>yoùoW¢:7z¢°jt=Üû§û1ûæëpψZÅJ³ÊEííÀQäï–uk`I}k†L³£_R¡¤vó Ήkkh5L´d,ªNÓ/( 6]I)@ŸÐ1ýÚ)Üýðæ÷]a¹ŸnRP Üó¡ý¨¿²Žb > PSæLÀx+Q Hõ’Ó÷ËÊLŠzA5h¨`#ôÅñéô~õ€Â+”¶QÚ’ºÉ#…Êet»øþ§Žâ†Ÿ»hØÍÉ ?üü‹èÕ¦w§óóø³»Ìì:ç±c±go’‘ö¹EüNe–‰q5 mFL½¢Ž“8üݳÃnJ&8ùÔ*=¶Œ©›dŒmd´.Æ H{€¦Ô¨ŽÖRKfߨðhp›}úgqF¿([ÁfÁÜ­ÓxäsÇ0³«Š©—¤Ÿ%G­s=<ø‰C˜ÿ‰ùàB@…«Ü~÷(´ñ„»¶³ 5€'øË7]#`*ŒÜyN™Þ€Ï-¶ã$—qR¿té%ÉáÍ@ZUÇìm3¸÷#`tcSÉfâÛwìÃôMÓ(„íï—„ìYÒçMúÇŸã$×£ön@u™Í@΂¤JNJ Ìr[F„d™OÒ‹wá×pQ^(¡tyßýóÃÃnŠ|ïSG í,¡rAüïú1¨ÏPÓTº¬ÿqPÏ0’@uº£á¬ ŸÆ“{kX^iãù»–†Ý”T8üÝeœ:¼©ëë1$0ñ50S¥Ôoc–­†0ŸWÅUkst× ¦ˆy!vƒóÆpË žúÛ“˜ßUÃÜeY}y8;¬oãÑÏû-ÙHª”ª@ÀQOß±TÛaª9WeÇÕçÊ0Öÿ+z‡q™P*Æ¥`&ÄEŠóožÃýÿë:ñúòp¯eâÞíÇÜf@Ê)Öb³ølÀtMI­¥Ò9ãô(·—€’yïñ0±µ£aÄPÉiªxK°Ÿ!q ÓL¾z ÷|hŒ6 Qàþ?9€êµ(m+¥(GŽð£&±Ä“œo¬¤—”iÔÄ%=:‡bˆJ?{aÆÙ^šf%k`QhlT/©€Îhxì3džÝ)<ù¥hëWø6ù2å_ÖÀDÒj ©ytl}?€´j€Ã´(fwWÑ]ê ê‹öàúý§õ!Ø$L`êU“8zçÌ?¼Œ‹n˜vs„8ñä*^x茭÷û—…Õ×Ç»23µÔ˜×œ&{uwo^y?dT–û¿B)”4À€ô®À‘ÀèúR—Ì¿y?øì14N¶³êTX?ÕÆCq[oŸSâì3LÐnߤî¼i¡À ›knw­mwo¿QNú¼À$×A¯h˜ýñÜýÁýèµFëÓÃFÛÄÝØÙÛ¦¡×Ò¯É@‰[ð…`£m¢Xӳ볔P椗߲Ï4#«îßKöF¾gÁBy[ Õ½øÎŸvS<øîÇ£¼§ŠÊvIgŸM l:£^³m¢\Ï`·âúsžÉü£ ÿ-ì@÷D'ÑÙ€œþv¾£~eÝžùÚ¢Òw—ôß3_[Äj³‹Ék'†.y¥?N~£e¢4¡)í'–æ$ê õg¦í8熗¿a V¾·–ºIÁ:2dÃÖñc^³¯ŸÆs÷œÆÒsŒ:D‹Ï6ðÜ=§1{ËôÀêÌtØ0ZF: ã‰l¤?3{åíÛÐ=ÚAg¹›Llƒ8]fö€1Ñ ¶¼eþïÃhžã¯¼dær}ü0¶Ü>r¢¯Zx‰ßûi¤Œï”•ŽÀhQT³P!s@C~…¥M'¸ñ_ŸƒÙåçMbHš~³¢0UÀôÍÓ¸çŽý0ýœŒ.Å=ïß™[¦Q¨˜óÆÝƵy‰ ϤÂËãûMÛ&JSÈŽýAHÅßTÿoþ²*®ý‰,ýýYæË¼1ÚuÖ›ýoô0X] zQÅK+øîÇgþNÙ~ì —UQ¹°’¹ä%ãög,¸UÓ@˜sÑE©®gÖi—»>å2†ÿ3á¼k÷ͳØuÍNãl)7‚ÜU…„•j+™Ú¦È\“/«cu½‹g¿:˜Ï?}ç"­¦¯›ÈôÑ‹¹òrýà0³a ¾¥k¼KÑ{¿TÓDcQÏ»²4¸î§v`祓8óµ³V?{Zã%d?!Åá”BN«d„d ƒzþÖì»ï N>¥ÞøÊâÄ«ØÿÐ2æ^¯ÎÑ™áý—t~Î8I»Ð[éabKŠ} ÑàѤôhšP†(ýÿ²÷ìÀÅ×NãÔç–Ð[swµe!‹fÞ•åì5h~Ct‚-o›Çß<ŠÆb6ž‚k'ZøÞÿ9fyúÅ4ú‰ˆÜ3V2ê`Y_6Ù4Qš GEíT° Ø×-ÊK}éX\õ0·»†‡?q“×Õ­5cÍ—ž»Ï_ÅGDíÝd>zÍò¼çûñ¦÷ížv.ƒ^ÓÀ=<€¹7Í@«iñ !#É*‹ÙŸšD#ž’y%FÅsËNÞ,¼Ù(‹ÌEabûÕuÜþ‡{0[.àøÿ=…•ﭡ׈Þ80T®;lñ æUÙQBíº:îÿÈA¨{w÷ø &^QG9Íö^ÅH3.Âòv×zöZ²¤‰t±ʰ¹ßW(kxù?Û½o_ÀáïžÃožA{ÝDik…-gŠ(LP˜Ô 5Ň2ž¨_UÃòRþ$®û©í©Ëûá_‡1¥cfÏøJÄ:W0à¶Ž¶±pÅÔÍ×ê¡îà ž0 Ñ9h”ÅI?01J5/½m/½mÔ X>ܹ#M¬ê ñ| kg»è¶ »]ǃ’¸ïN¯Z ÒŠ´"VÓ¡Õ5hU…)ëõ¯Ð¨ÆìÍÓ8öÅÓ˜û^¾*¹—Þ¡ï,ãÄ l{û€¿ÄÁ÷E3xÒo@²åuŽw±ýö¹P¹?Tú€j©Ì@@ĉð¾ô0\œsût‚ÙÝUÌîvêýœ2»ë@nÛ@¯e¢½ÒÃú™.Zçºh,u°öä––º(Îè(í(¡¾·6°kC¶Þ>‡Ç>µù"æ.?{Ÿy~OÞ¹ˆ…ŸÚ2R¾§¡Ä¯ãmÌ_Vë×µ3îÃFkq¡`:KòNò0I!LpFâƒ=—Ìä-NX£³X·GéÎ2¶r²®ŸêàäÖðìOcÛ»·@‹c$CMD«hØúö9<ðÑ#¸õ·.ÁÄVyý½±ØÆƒ;‚mïœSúuœ4ˆK<"ñ?Tÿ_颉9ÕèJÍ’³ZZc‘ôãÒiî­¾ô–9¬=¶n}Ìô<@eG õ&qï#·i›÷Þq“7N„ÅŸ¹Œçð%Êà wÂh¢ùl—¼f6ÓgRA{©]“,\8_5‹-&ùÒÑ`˜Lù+¦çXe¦ˆËo›Ã¹ûW¥óŒ;&.«B¿¸Œ>zD<¹QàAñ²*&.MéãŸòê~d&YëÿÙûVpÅ[¶€”´Øc>î%xri¨;È™¦ç7•L§îâõ˜\^jšÜ‹—vÏ›¶€¬hNà57DÂHsM½¢Ž&1ñÃÏàöÉc}íÅäË&â÷IBdµY&ÞÎiëg{¸üM[b÷}ÈÒEJ¨±Ê(ÿº‡Gpè` ®˜ÀÞwnó}NÝL{"™‚dÓU°%{L›°d$£{³Ä̳/x‰; `KokÂJØuÓ,´¢†'?·„…wÎCŸØü{‰H—hˆš¬ŸøM`ñÎ3Øyy W¿38óS^>N¼ÿ>n{G‚Dös"ýžÉiä O/Þ+Þ õ.xõ4Š|ê$¶½c Š3L`\U‚Ñ5ts‘”øÍ.Å©/Á{ëØûÎàN‘Ô"Œµ}C%ý¡ ¶öœôtPÊúûQ“ÎÑÒ­À¹Lq™  TT–È«úZ¸f7þÒ8õÅÓh-vùZÚ&³Œ2\¯N\ñè­8ùéSØsóŒøUŒkùËKkéFÑP”Ó¸<Òû"X& .5 .…‚ F%f/©â–ÿ´ çþaëOodRG1¼îFœxMü̓M,~æ®ïv\rˬ'¥(Ot»†4 €°½¬I¸_3 ÷ôòäeÒ²áÞò™p nx0“>ÊëL½—PÛVÂ~w7Œƒ-,ß³2o‚ÿöBÒs¢Ù<´GqöÞe¬?¼†[g7¶^]çCÑXŒç¸tâÏËØÜRÉŽC<8,2&'! Xéׄ85$¸‚Ð+núõ‹1¿¥ˆ“Ÿ;å9Ù8Gñ\‰£‰ÝS6gÖwêt°±¯‰ãu;vVpÛï^‚ÊlL“Yè²ãh ½}~HM±Á.Â(2öyœ|ç‘;¦äú}Dãùó¿(—â¯Û{ÉPFüŽ`"€'%„¶UÁþk¶^57üþn¼øÈ^|t'¾Ù†iPë: Óèu (kЫôŠ­¢A«:¿µÛÓi!£®Š ³m¢{¶‡î¹.zçzèžê sº­H0I—_?m?·…j°e‰? iwRûD@ÄxëŠ"åÞÞC)%DJaéã2££ƒ!̾ØùÊ:v¾²Þj¯ô°¾ÔAsÙ@wÝ@«a ³ÚCû„V£‡NÃDwÄiIF) •ˆF U±ô!ÖÆ$€8 D'Öñç% °µ½äûÌ’F‡ž’¢•Ÿ…^öž)Ô¤0;üñb¶ÍþÑífËìžÑ¶©nv)hÇíRЖ ³mÂX7ÑÛ0A{–=ªP!¨/1½£Œ©=5LÝ6‡é¥¾„åKܼ‹‰?\ô—/—^Žjà¯Û|ŽÄƒ1Îñ óň%@ø‡AãÛ¬|ɘ€Óž°°~Þþ„·Oe‡çÌ$ˆÊPqãµ.)ñK@vöWõPuŸ§>uUÀ)RŠ ¡Ò€tvÿ ÈÐ8W ©WR¶$kË0ÔIÀ³2ôýÏ$8€ Ò0N~á ¦¡—Â0€½9$‘Ðå0|I0zÖ¥KJü¹9éúôæ8<ðœ"¡@ðO"€”*“ XµGKt¾8Ҫʨø¹æ†Ì욆ð­pQÁÉ¥ðzÒODÝ ¨š Ë a€˜ÐGË GRÄ#&‘Þ*o ´ÂE¨%~ÕPÇ‘’`Ò2 †k¯ÀâÇ0íËÉH|dM¡å«"ü²¤Û"‚BT™#Pj@ X>pjï”å „ô“($ÚÜO`¸êÿÄ.¹ñ‰|éªóð‘ÆØjŠÝ ùg–^ e¢mþòÊtR¶ùŒ>zHÄdS®Ç« þ¤“ƒè¸ Ç8Ùšd,&T‚0Û¾ˆ²ås³ä3úøB‰ŽŠY_j9l?€ÔSa,'¡iÀjP¸w_øî%AgæK~㇫4©?fŠ'‘Ttè6ULÀ) ˆf¤jU½ä—3” †°¬*¯¡§·!Ä.O¢U6·Áž (,#&R17!Í܇`(ˆÛëª _ºL)Eä¯p0­q,öžŒkŸ¨Có9{<– ÔmåMQö€‘žô`B‡F@@h:ÄìÌíÍ®øËŽ]>”.nÆÂ83žÑîAįC›õ-8tÀ¢½”HͺmÃ(Õt !°>Ä™‰¥«Rå³Õ¥½q!¢qBVK†ÊêŠ!œ‘Ñm½´å¥fÍå^³XÓ‹€Õ8JÕ|î*é6bÕ€W£ÊrDC ñ¥°×d%ò¢õKÞ8Ói¦-Ott*õýåÝdõXkÕnÑl¥Ôþ—,3u¯”õ'ù—#=†Òÿ)ÇM–ï¿O_öä¶r¼³×ˆ½ytËmT”Àfb+èOó§žZ?}Á Ó8¿u¢£§@ ð6"¡4Ð/ ¾ÃOZäL`Œ he&ëw®ïIÏK?j,1?YÑ›Ç b1Ów¯èµKuœÈC÷.¹î½Û¯ÑKšXvh0©¹ùú!_—?ÿ x)vÌ^× ö§é¬ºŒ®i¾ÿÜQ&I.}ví¿,Æb†ïÞa3è놱rü±µÅ n˜~‰¦iE˜&`*f€BFÐ/Ó/9SØ<ÈÐïbPRžFth¤à©ïø£k'; c…IÖ²ÿšà3.1†IJö}@ À†ý›X}úó§¿äú©šFˆC˜R„A¡\p œx OøbsÆ‘FÈjêNtè¤P×ÿŸÔ|ê󋇬¢A ‹& ,FÀÒ®sÏÕËEŸ¡ªö=P±ï‹&ìø:€2€Në\o¦¾P*Í^Ra R'º½4˜}‡åûYc„O@PÔJеà}àîå#î:{ À;h Àû~î½wæ_G ™ìM&c‡ _cîÏ2÷‹?øó¬k²" ‹ ” ´¢Ò?r |Ž,0èqEˆ†‚VD©PÆ¡—Õ#­•Ç>ùâ‹Lð6 sï¨=$€°is®0W Ø kæ'öÚá€kêÛÊõÿ£K¯/M*VáÄ~(·PJ-Û@¿S%<ùÂf÷¨™?Šé¤+;4aÝ]vTáÑ*©Hnð‡§‰’Ãëˆ*;4:´l^œ',E»¥vçŸFô­°åtÖzí»~kÿ#k'Úkž„«ï? «“ÚØÙ;p'é&, €°R0cßWLÛ÷³¶Û÷Û\È„_¶íª‰ú¿±ëºòt¡ÌcN•ìàt;’×Oñü²™pòò9¼‘^IDAT‘l7¯l+žWvøsûÓðA™;æÞCÁ4^:áÅó‹Ë«?¼lî ÖçÍòÞ²9mˆ,;ø,à¶›W¶×YíµîÿŸ‡Ÿ8ýÌzÀ –ídG8Ë'œ³ïWàëÏÁ’û„¬ k¦×`©5X£§ ‹è°tiX¶}}©[:úÀ¹“[¯©OWgŠ–$ ˜ˆ<:Þ‹xy³aQÌ/› ‰S·ŒDÀÏ%‘$±ÚnÃû`Œÿ^EÙª±r¤µrÏïüá¹ÃÍ&,"?eG5áÚºv`Ñ®£ pmÈ|CºÄÜ—í¿=Söý€yØ+&ºféнˋ¥ ³»ª“šG™áoä\x^™xq/žß®°tñÛ‹€I°Oúñ‚<¼x'œýço]8MDÄóVV䑎çÆ;Š fÚ4e+ŠÒ jøÖÙ£Üqè™öj¯kV?hG›öÃÕóOÀšœ ×v·ÁìD3Ö ± ©Â’œåÀ’Ý®Š°  L TOü`mùð}gOT犅úöRè£c=FM-$p#O¸·®8Hü¢µÿG?®/†öïI°À¨ C’õƒêŠÏ+&¨2„W.ÿyâiÿ¹9ù <ý’´ß Ý~‰óvœ¼´ŸËß®ú!ц8åxK‰×€ÂìRãÅï­,>ø¡#OøÖÙSÔ…¥Ï`šyC,‚wÔƒ 7í8!dä–*,ƒ `1Ç. Ã2:ë;áÚ`€¾‹p¹^Ð/ºifëÂÞ‰™© *õÚ\©R¨h¢-\ŸÁÃòŠãýq‚Ù^¹$HÙ¼²êˆ7^®Ÿ’é§ñõîp=ži@Bòzó'·?p€PzˆŠ÷—ÍÏKMjöZfoãl§µr´Õ8õ£Æò‘﬜n7z¬Í1¸â=œð¢}߃%8³ü2¼’@ !U\fàú \¿€€]L9 °˜ø áJ9räGÀax-ø‹p‰ŸÚñŽŽß‚kì1÷BÈØœÂ¢ïÀ5vaq›)XL`ù­ÙùÎÀòÐá.æÈ‘ƒáEèÎÀ!¸@ K2p˜CîÊ`Ùã"wåÅ!Æš}–40ב¨KÜw~—ÁŸù5;mÍN£C쌔#ÇùÇé® k&o H¸+°t~G´§öïSÆY¸jÀ:˜ý:aˆ;OÁ](ÁZûwʨÀb%_úí&cÖ“#GKr>¯nAf° ×êß×0q5«;ö€",&àÌâ,‚Ÿñå+Ã’¦`s5 GŽ (¬Y} ÖŒÞöÅ/ò8‚i‡±.¿+ˆ^œì# !jp‹8Î@ª°¼'%%”ì2rfã|…¥tì‹G¼ë°ŸµèwaÙ œÕgù/ÖiQP5ûjpgwXj@ ¿B”#Çy€.,Âo"èËï0„ÔÇm©¿‹°D}¿ XL¢‹ìºs»@Ž– @azîù›~ta©]N\"d¥a©¥ ëÈ‘ã|…%ú·¡ðdMœ3(Â]öË‘#G8œeÁ®}¥?°@€aÌÎ:Üõÿ\:È‘ÃÝÃl@^Ÿ#GŽ9räÈŽÿº¨ÞËi RÀIEND®B`‚uget-2.2.3/Windows/msvc/0000775000175000017500000000000013602733774012103 500000000000000uget-2.2.3/Windows/msvc/uget.vcxproj0000664000175000017500000001534313602733703014402 00000000000000 Debug Win32 Release Win32 {A98D36E8-7119-4AC4-8820-65B902C6B69E} uget Win32Proj StaticLibrary Unicode true StaticLibrary Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ Disabled ..\..\uglib;..\..\uget;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;D:\devpack\gtk3-msvc\include;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;_DEBUG;_LIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue ..\..\uglib;..\..\uget;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;D:\devpack\gtk3-msvc\include;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase uget-2.2.3/Windows/msvc/test-jsonrpc.vcxproj0000664000175000017500000001161113602733703016063 00000000000000 Debug Win32 Release Win32 {BE2BF360-69F6-406F-A89D-77B0F9A92C04} Win32Proj testjsonrpc Application true Unicode Application false Unicode true false ..\..\uglib;..\..\uget;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) Level3 Disabled WIN32;HAVE_GLIB;inline=__inline;_DEBUG;%(PreprocessorDefinitions) uglib.lib;glib-2.0.lib;%(AdditionalDependencies) D:\devpack\gtk3-msvc\lib;D:\devpack\curl-msvc\lib\Debug;Debug;%(AdditionalLibraryDirectories) true uglib.lib;uget.lib;Ws2_32.lib;curllib.lib;glib-2.0.lib;intl.lib;%(AdditionalDependencies) Console ..\..\uglib;..\..\uget;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) Level3 WIN32;HAVE_GLIB;inline=__inline;NDEBUG;%(PreprocessorDefinitions) uglib.lib;glib-2.0.lib;%(AdditionalDependencies) D:\devpack\gtk3-msvc\lib;D:\devpack\curl-msvc\lib\Release;Release;%(AdditionalLibraryDirectories) true uglib.lib;uget.lib;Ws2_32.lib;curllib.lib;glib-2.0.lib;intl.lib;%(AdditionalDependencies) Console uget-2.2.3/Windows/msvc/test-plugin+app.vcxproj0000664000175000017500000001367213602733703016470 00000000000000 Debug Win32 Release Win32 {CAD0E048-8211-4F6B-9975-215A526AC645} testjson Win32Proj Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ true $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ false Disabled ..\..\uglib;..\..\uget;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;_DEBUG;_CONSOLE;HAVE_GLIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue uglib.lib;uget.lib;Ws2_32.lib;curllib.lib;glib-2.0.lib;intl.lib;%(AdditionalDependencies) D:\devpack\curl-msvc\lib\Debug;D:\devpack\gtk3-msvc\lib;Debug;%(AdditionalLibraryDirectories) true Console MachineX86 MaxSpeed true ..\..\uglib;..\..\uget;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;NDEBUG;_CONSOLE;HAVE_GLIB;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase uglib.lib;uget.lib;Ws2_32.lib;curllib.lib;glib-2.0.lib;intl.lib;%(AdditionalDependencies) D:\devpack\curl-msvc\lib\Release;D:\devpack\gtk3-msvc\lib;Release;%(AdditionalLibraryDirectories) true Console true true MachineX86 {8e8a46b4-6b62-4bd0-bcaf-ba9cf1090dea} false uget-2.2.3/Windows/msvc/stdint.h0000664000175000017500000001706013602733703013475 00000000000000// ISO C9x compliant stdint.h for Microsoft Visual Studio // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 // // Copyright (c) 2006-2008 Alexander Chemeris // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // 3. The name of the author may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////////// #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_STDINT_H_ // [ #define _MSC_STDINT_H_ #if _MSC_VER > 1000 #pragma once #endif #include // For Visual Studio 6 in C++ mode and for many Visual Studio versions when // compiling for ARM we should wrap include with 'extern "C++" {}' // or compiler give many errors like this: // error C2733: second C linkage of overloaded function 'wmemchr' not allowed #ifdef __cplusplus extern "C" { #endif # include #ifdef __cplusplus } #endif // Define _W64 macros to mark types changing their size, like intptr_t. #ifndef _W64 # if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 # define _W64 __w64 # else # define _W64 # endif #endif // 7.18.1 Integer types // 7.18.1.1 Exact-width integer types // Visual Studio 6 and Embedded Visual C++ 4 doesn't // realize that, e.g. char has the same size as __int8 // so we give up on __intX for them. #if (_MSC_VER < 1300) typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #else typedef signed __int8 int8_t; typedef signed __int16 int16_t; typedef signed __int32 int32_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; #endif typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; // 7.18.1.2 Minimum-width integer types typedef int8_t int_least8_t; typedef int16_t int_least16_t; typedef int32_t int_least32_t; typedef int64_t int_least64_t; typedef uint8_t uint_least8_t; typedef uint16_t uint_least16_t; typedef uint32_t uint_least32_t; typedef uint64_t uint_least64_t; // 7.18.1.3 Fastest minimum-width integer types typedef int8_t int_fast8_t; typedef int16_t int_fast16_t; typedef int32_t int_fast32_t; typedef int64_t int_fast64_t; typedef uint8_t uint_fast8_t; typedef uint16_t uint_fast16_t; typedef uint32_t uint_fast32_t; typedef uint64_t uint_fast64_t; // 7.18.1.4 Integer types capable of holding object pointers #ifdef _WIN64 // [ typedef signed __int64 intptr_t; typedef unsigned __int64 uintptr_t; #else // _WIN64 ][ typedef _W64 signed int intptr_t; typedef _W64 unsigned int uintptr_t; #endif // _WIN64 ] // 7.18.1.5 Greatest-width integer types typedef int64_t intmax_t; typedef uint64_t uintmax_t; // 7.18.2 Limits of specified-width integer types #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 // 7.18.2.1 Limits of exact-width integer types #define INT8_MIN ((int8_t)_I8_MIN) #define INT8_MAX _I8_MAX #define INT16_MIN ((int16_t)_I16_MIN) #define INT16_MAX _I16_MAX #define INT32_MIN ((int32_t)_I32_MIN) #define INT32_MAX _I32_MAX #define INT64_MIN ((int64_t)_I64_MIN) #define INT64_MAX _I64_MAX #define UINT8_MAX _UI8_MAX #define UINT16_MAX _UI16_MAX #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX // 7.18.2.2 Limits of minimum-width integer types #define INT_LEAST8_MIN INT8_MIN #define INT_LEAST8_MAX INT8_MAX #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MIN INT32_MIN #define INT_LEAST32_MAX INT32_MAX #define INT_LEAST64_MIN INT64_MIN #define INT_LEAST64_MAX INT64_MAX #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX // 7.18.2.3 Limits of fastest minimum-width integer types #define INT_FAST8_MIN INT8_MIN #define INT_FAST8_MAX INT8_MAX #define INT_FAST16_MIN INT16_MIN #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST64_MIN INT64_MIN #define INT_FAST64_MAX INT64_MAX #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX // 7.18.2.4 Limits of integer types capable of holding object pointers #ifdef _WIN64 // [ # define INTPTR_MIN INT64_MIN # define INTPTR_MAX INT64_MAX # define UINTPTR_MAX UINT64_MAX #else // _WIN64 ][ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX #endif // _WIN64 ] // 7.18.2.5 Limits of greatest-width integer types #define INTMAX_MIN INT64_MIN #define INTMAX_MAX INT64_MAX #define UINTMAX_MAX UINT64_MAX // 7.18.3 Limits of other integer types #ifdef _WIN64 // [ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX #else // _WIN64 ][ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX #endif // _WIN64 ] #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX #ifndef SIZE_MAX // [ # ifdef _WIN64 // [ # define SIZE_MAX _UI64_MAX # else // _WIN64 ][ # define SIZE_MAX _UI32_MAX # endif // _WIN64 ] #endif // SIZE_MAX ] // WCHAR_MIN and WCHAR_MAX are also defined in #ifndef WCHAR_MIN // [ # define WCHAR_MIN 0 #endif // WCHAR_MIN ] #ifndef WCHAR_MAX // [ # define WCHAR_MAX _UI16_MAX #endif // WCHAR_MAX ] #define WINT_MIN 0 #define WINT_MAX _UI16_MAX #endif // __STDC_LIMIT_MACROS ] // 7.18.4 Limits of other integer types #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 // 7.18.4.1 Macros for minimum-width integer constants #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 #define INT32_C(val) val##i32 #define INT64_C(val) val##i64 #define UINT8_C(val) val##ui8 #define UINT16_C(val) val##ui16 #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 // 7.18.4.2 Macros for greatest-width integer constants #define INTMAX_C INT64_C #define UINTMAX_C UINT64_C #endif // __STDC_CONSTANT_MACROS ] #endif // _MSC_STDINT_H_ ] uget-2.2.3/Windows/msvc/test-json.vcxproj0000664000175000017500000001332213602733703015357 00000000000000 Debug Win32 Release Win32 {D0C49F36-9ECC-4B87-9360-A7EE570DA73C} testjson Win32Proj Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ true $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ false Disabled ..\..\uglib;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;_DEBUG;_CONSOLE;HAVE_GLIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue uglib.lib;glib-2.0.lib;%(AdditionalDependencies) D:\devpack\gtk3-msvc\lib;Debug;%(AdditionalLibraryDirectories) true Console MachineX86 MaxSpeed true ..\..\uglib;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;NDEBUG;_CONSOLE;HAVE_GLIB;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase uglib.lib;glib-2.0.lib;%(AdditionalDependencies) D:\devpack\gtk3-msvc\lib;Release;%(AdditionalLibraryDirectories) true Console true true MachineX86 {8e8a46b4-6b62-4bd0-bcaf-ba9cf1090dea} false uget-2.2.3/Windows/msvc/uget.sln0000664000175000017500000001151313602733703013476 00000000000000 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual C++ Express 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uglib", "uglib.vcxproj", "{8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-json", "test-json.vcxproj", "{D0C49F36-9ECC-4B87-9360-A7EE570DA73C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uget", "uget.vcxproj", "{A98D36E8-7119-4AC4-8820-65B902C6B69E}" ProjectSection(ProjectDependencies) = postProject {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA} = {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-plugin+app", "test-plugin+app.vcxproj", "{CAD0E048-8211-4F6B-9975-215A526AC645}" ProjectSection(ProjectDependencies) = postProject {A98D36E8-7119-4AC4-8820-65B902C6B69E} = {A98D36E8-7119-4AC4-8820-65B902C6B69E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ui-gtk", "ui-gtk.vcxproj", "{9D164547-3F37-4C14-BCCE-91EB2F3DC317}" ProjectSection(ProjectDependencies) = postProject {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA} = {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA} {A98D36E8-7119-4AC4-8820-65B902C6B69E} = {A98D36E8-7119-4AC4-8820-65B902C6B69E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-jsonrpc", "test-jsonrpc.vcxproj", "{BE2BF360-69F6-406F-A89D-77B0F9A92C04}" ProjectSection(ProjectDependencies) = postProject {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA} = {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA} {A98D36E8-7119-4AC4-8820-65B902C6B69E} = {A98D36E8-7119-4AC4-8820-65B902C6B69E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-uglib", "test-uglib.vcxproj", "{A5591A27-B27A-4FF2-88E6-E6C534C96E02}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-uget", "test-uget.vcxproj", "{FFAC27EA-E43A-4A78-924D-41E868A4F27F}" ProjectSection(ProjectDependencies) = postProject {A98D36E8-7119-4AC4-8820-65B902C6B69E} = {A98D36E8-7119-4AC4-8820-65B902C6B69E} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA}.Debug|Win32.ActiveCfg = Debug|Win32 {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA}.Debug|Win32.Build.0 = Debug|Win32 {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA}.Release|Win32.ActiveCfg = Release|Win32 {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA}.Release|Win32.Build.0 = Release|Win32 {D0C49F36-9ECC-4B87-9360-A7EE570DA73C}.Debug|Win32.ActiveCfg = Debug|Win32 {D0C49F36-9ECC-4B87-9360-A7EE570DA73C}.Debug|Win32.Build.0 = Debug|Win32 {D0C49F36-9ECC-4B87-9360-A7EE570DA73C}.Release|Win32.ActiveCfg = Release|Win32 {D0C49F36-9ECC-4B87-9360-A7EE570DA73C}.Release|Win32.Build.0 = Release|Win32 {A98D36E8-7119-4AC4-8820-65B902C6B69E}.Debug|Win32.ActiveCfg = Debug|Win32 {A98D36E8-7119-4AC4-8820-65B902C6B69E}.Debug|Win32.Build.0 = Debug|Win32 {A98D36E8-7119-4AC4-8820-65B902C6B69E}.Release|Win32.ActiveCfg = Release|Win32 {A98D36E8-7119-4AC4-8820-65B902C6B69E}.Release|Win32.Build.0 = Release|Win32 {CAD0E048-8211-4F6B-9975-215A526AC645}.Debug|Win32.ActiveCfg = Debug|Win32 {CAD0E048-8211-4F6B-9975-215A526AC645}.Debug|Win32.Build.0 = Debug|Win32 {CAD0E048-8211-4F6B-9975-215A526AC645}.Release|Win32.ActiveCfg = Release|Win32 {CAD0E048-8211-4F6B-9975-215A526AC645}.Release|Win32.Build.0 = Release|Win32 {9D164547-3F37-4C14-BCCE-91EB2F3DC317}.Debug|Win32.ActiveCfg = Debug|Win32 {9D164547-3F37-4C14-BCCE-91EB2F3DC317}.Debug|Win32.Build.0 = Debug|Win32 {9D164547-3F37-4C14-BCCE-91EB2F3DC317}.Release|Win32.ActiveCfg = Release|Win32 {9D164547-3F37-4C14-BCCE-91EB2F3DC317}.Release|Win32.Build.0 = Release|Win32 {BE2BF360-69F6-406F-A89D-77B0F9A92C04}.Debug|Win32.ActiveCfg = Debug|Win32 {BE2BF360-69F6-406F-A89D-77B0F9A92C04}.Debug|Win32.Build.0 = Debug|Win32 {BE2BF360-69F6-406F-A89D-77B0F9A92C04}.Release|Win32.ActiveCfg = Release|Win32 {BE2BF360-69F6-406F-A89D-77B0F9A92C04}.Release|Win32.Build.0 = Release|Win32 {A5591A27-B27A-4FF2-88E6-E6C534C96E02}.Debug|Win32.ActiveCfg = Debug|Win32 {A5591A27-B27A-4FF2-88E6-E6C534C96E02}.Debug|Win32.Build.0 = Debug|Win32 {A5591A27-B27A-4FF2-88E6-E6C534C96E02}.Release|Win32.ActiveCfg = Release|Win32 {A5591A27-B27A-4FF2-88E6-E6C534C96E02}.Release|Win32.Build.0 = Release|Win32 {FFAC27EA-E43A-4A78-924D-41E868A4F27F}.Debug|Win32.ActiveCfg = Debug|Win32 {FFAC27EA-E43A-4A78-924D-41E868A4F27F}.Debug|Win32.Build.0 = Debug|Win32 {FFAC27EA-E43A-4A78-924D-41E868A4F27F}.Release|Win32.ActiveCfg = Release|Win32 {FFAC27EA-E43A-4A78-924D-41E868A4F27F}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal uget-2.2.3/Windows/msvc/uglib.vcxproj0000664000175000017500000001577713602733703014553 00000000000000 Debug Win32 Release Win32 {8E8A46B4-6B62-4BD0-BCAF-BA9CF1090DEA} uglib Win32Proj StaticLibrary Unicode true StaticLibrary Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ Disabled ..\..\uglib;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\include\glib-2.0;D:\devpack\gtk3-msvc\lib\glib-2.0\include;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;_DEBUG;_LIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue ..\..\uglib;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\include\glib-2.0;D:\devpack\gtk3-msvc\lib\glib-2.0\include;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase uget-2.2.3/Windows/msvc/test-uget.vcxproj0000664000175000017500000001366313602733703015362 00000000000000 Debug Win32 Release Win32 {FFAC27EA-E43A-4A78-924D-41E868A4F27F} testuget Win32Proj Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ true $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ false Disabled ..\..\uglib;..\..\uget;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;_DEBUG;_CONSOLE;HAVE_GLIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue uglib.lib;uget.lib;Ws2_32.lib;curllib.lib;glib-2.0.lib;intl.lib;%(AdditionalDependencies) D:\devpack\curl-msvc\lib\Debug;D:\devpack\gtk3-msvc\lib;Debug;%(AdditionalLibraryDirectories) true Console MachineX86 MaxSpeed true ..\..\uglib;..\..\uget;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;NDEBUG;_CONSOLE;HAVE_GLIB;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase uglib.lib;uget.lib;Ws2_32.lib;curllib.lib;glib-2.0.lib;intl.lib;%(AdditionalDependencies) D:\devpack\curl-msvc\lib\Release;D:\devpack\gtk3-msvc\lib;Release;%(AdditionalLibraryDirectories) true Console true true MachineX86 {8e8a46b4-6b62-4bd0-bcaf-ba9cf1090dea} false uget-2.2.3/Windows/msvc/ui-gtk.vcxproj0000664000175000017500000002334513602733703014637 00000000000000 Debug Win32 Release Win32 ui-gtk {9D164547-3F37-4C14-BCCE-91EB2F3DC317} ugetgtk Win32Proj Application Unicode true Application Unicode <_ProjectFileVersion>10.0.40219.1 $(SolutionDir)$(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ true $(SolutionDir)$(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ false Disabled ..\..\uglib;..\..\uget;..\..\ui-gtk;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;D:\devpack\gtk3-msvc\lib\gtk-3.0\include;D:\devpack\gtk3-msvc\include\gtk-3.0;D:\devpack\gtk3-msvc\include\gdk-pixbuf-2.0;D:\devpack\gtk3-msvc\include\pango-1.0;D:\devpack\gtk3-msvc\include\atk-1.0;D:\devpack\gtk3-msvc\include\cairo;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;_DEBUG;_CONSOLE;DATADIR_WIN_PROG;HAVE_PLUGIN_ARIA2;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue glib-2.0.lib;gthread-2.0.lib;gmodule-2.0.lib;gobject-2.0.lib;gio-2.0.lib;gtk-win32-3.0.lib;gdk-win32-3.0.lib;gdk_pixbuf-2.0.lib;pango-1.0.lib;pangocairo-1.0.lib;pangowin32-1.0.lib;atk-1.0.lib;intl.lib;cairo.lib;libcurl.lib;Ws2_32.lib;winmm.lib;uget.lib;uglib.lib;%(AdditionalDependencies) D:\devpack\gtk3-msvc\lib;D:\devpack\curl-msvc;Debug;%(AdditionalLibraryDirectories) true Console MachineX86 MaxSpeed true ..\..\uglib;..\..\uget;..\..\ui-gtk;D:\devpack\curl-msvc\include;D:\devpack\gtk3-msvc\include;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;D:\devpack\gtk3-msvc\lib\gtk-3.0\include;D:\devpack\gtk3-msvc\include\gtk-3.0;D:\devpack\gtk3-msvc\include\gdk-pixbuf-2.0;D:\devpack\gtk3-msvc\include\pango-1.0;D:\devpack\gtk3-msvc\include\atk-1.0;D:\devpack\gtk3-msvc\include\cairo;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;NDEBUG;_WINDOWS;DATADIR_WIN_PROG;HAVE_PLUGIN_ARIA2;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase glib-2.0.lib;gthread-2.0.lib;gmodule-2.0.lib;gobject-2.0.lib;gio-2.0.lib;gtk-win32-3.0.lib;gdk-win32-3.0.lib;gdk_pixbuf-2.0.lib;pango-1.0.lib;pangocairo-1.0.lib;pangowin32-1.0.lib;atk-1.0.lib;cairo.lib;intl.lib;libcurl.lib;Ws2_32.lib;winmm.lib;uget.lib;uglib.lib;%(AdditionalDependencies) D:\devpack\gtk3-msvc\lib;D:\devpack\curl-msvc\;Release;%(AdditionalLibraryDirectories) true Windows true true MachineX86 uget-2.2.3/Windows/msvc/test-uglib.vcxproj0000664000175000017500000001332413602733703015512 00000000000000 Debug Win32 Release Win32 {A5591A27-B27A-4FF2-88E6-E6C534C96E02} testuglib Win32Proj Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ true $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ false Disabled ..\..\uglib;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;_DEBUG;_CONSOLE;HAVE_GLIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue uglib.lib;glib-2.0.lib;%(AdditionalDependencies) D:\devpack\gtk3-msvc\lib;Debug;%(AdditionalLibraryDirectories) true Console MachineX86 MaxSpeed true ..\..\uglib;D:\devpack\gtk3-msvc\lib\glib-2.0\include;D:\devpack\gtk3-msvc\include\glib-2.0;%(AdditionalIncludeDirectories) WIN32;HAVE_GLIB;inline=__inline;NDEBUG;_CONSOLE;HAVE_GLIB;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase uglib.lib;glib-2.0.lib;%(AdditionalDependencies) D:\devpack\gtk3-msvc\lib;Release;%(AdditionalLibraryDirectories) true Console true true MachineX86 {8e8a46b4-6b62-4bd0-bcaf-ba9cf1090dea} false uget-2.2.3/Windows/msvc/msvc-config.txt0000664000175000017500000000400613602733703014767 00000000000000--- include dir --- (C/C++ - General - Additional Include Directories) ..\..\uglib;..\..\uget;..\..\ui-gtk;D:\devpack\gtk3\lib\glib-2.0\include;D:\devpack\gtk3\include\glib-2.0; ..\..\uglib;..\..\uget;..\..\ui-gtk;D:\devpack\curl-msvc\include;D:\devpack\gtk3\include;D:\devpack\gtk3\lib\glib-2.0\include;D:\devpack\gtk3\include\glib-2.0;D:\devpack\gtk3\lib\gtk-3.0\include;D:\devpack\gtk3\include\gtk-3.0;D:\devpack\gtk3\include\gdk-pixbuf-2.0;D:\devpack\gtk3\include\pango-1.0;D:\devpack\gtk3\include\atk-1.0;D:\devpack\gtk3\include\cairo; --- lib dir --- (Linker - General - Additional Library Directories) D:\devpack\gtk3\lib;D:\devpack\curl-msvc; --- lib --- (Linker - Input - Additional Dependencies) glib-2.0.lib;gthread-2.0.lib;gmodule-2.0.lib;gobject-2.0.lib;gtk-win32-3.0.lib;gdk-win32-3.0.lib;gdk_pixbuf-2.0.lib;pango-1.0.lib;pangocairo-1.0.lib;pangowin32-1.0.lib;atk-1.0.lib;intl.lib;cairo.lib;libcurl.lib;Ws2_32.lib;winmm.lib;uget.lib;uglib.lib; --- project (solution) --- 1. Caeate Name : ProjectName Location : path\ProjectDir Don't "Create directory for solution" 2. Rename path\ProjectDir\ProjectName to path\ProjectDir\msvc 3. Commit follow file only *.sln *.vcxproj (old vc is *.vcproj) --- project type --- 1. Windows Console (Linker - System - SubSystem) - Select "Console" (C/C++ - Preprocessor - Preprocessor Definitions) - add "_CONSOLE", remove "_WINDOWS" 2. Windows GUI (Linker - System - SubSystem) - Select "Windows" (C/C++ - Preprocessor - Preprocessor Definitions) - add "_WINDOWS", remove "_CONSOLE" 3. Windows Dynamic Library (DLL) (General - Configuration Type) - Select "Dynamic Library (.dll)" (C/C++ - Preprocessor - Preprocessor Definitions) - add "_USRDLL" 4. Windows Static Library (LIB) (General - Configuration Type) - Select "Static Library (.lib)" (C/C++ - Preprocessor - Preprocessor Definitions) - add "_LIB" --- debug --- (Debug - Environment) - add "PATH=C:\Program Files\Common Files\GTK\2.0\bin" or add "PATH=D:\devpack\gtk2\bin" uget-2.2.3/Windows/Makefile.am0000664000175000017500000000145213602733703013101 00000000000000EXTRA_DIST = \ resources/uget.rc \ resources/uget-icon.ico \ msvc/msvc-config.txt \ msvc/stdint.h \ msvc/test-json.vcxproj \ msvc/test-jsonrpc.vcxproj \ msvc/test-plugin+app.vcxproj \ msvc/test-uget.vcxproj \ msvc/test-uglib.vcxproj \ msvc/uget.sln \ msvc/uget.vcxproj \ msvc/uglib.vcxproj \ msvc/ui-gtk.vcxproj \ CodeBlocks/mingw-config.txt \ CodeBlocks/test-json.cbp \ CodeBlocks/test-jsonrpc.cbp \ CodeBlocks/test-plugin+app.cbp \ CodeBlocks/test-uget.cbp \ CodeBlocks/test-uget-cxx.cbp \ CodeBlocks/test-uglib.cbp \ CodeBlocks/test-uglib-cxx.cbp \ CodeBlocks/uget.cbp \ CodeBlocks/uglib.cbp \ CodeBlocks/ui-gtk.cbp \ CodeBlocks/ui-gtk-1to2.cbp \ CodeBlocks/uget.workspace uget-2.2.3/ChangeLog0000664000175000017500000000000013024175375011154 00000000000000uget-2.2.3/uget-gtk.desktop0000664000175000017500000000045013602733704012533 00000000000000[Desktop Entry] Name=uGet GenericName=Download Manager Comment=Download multiple URLs and apply it to one of setting/queue. Exec=env GDK_BACKEND=x11 uget-gtk %u Icon=uget-icon Terminal=false Type=Application Categories=Network;FileTransfer; Keywords=filetransfer;download files;download manager; uget-2.2.3/missing0000755000175000017500000001533012676613141011013 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: uget-2.2.3/config.h.in0000664000175000017500000000554213602733773011451 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* Have AppIndicator */ #undef HAVE_APP_INDICATOR /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if glib support is required. */ #undef HAVE_GLIB /* Define to 1 if gstreamer support is required. */ #undef HAVE_GSTREAMER /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if libnotify support is required. */ #undef HAVE_LIBNOTIFY /* Define to 1 if you have the `pthread' library (-lpthread). */ #undef HAVE_LIBPTHREAD /* Define to 1 if libpwmd support is required. */ #undef HAVE_LIBPWMD /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `posix_fallocate' function. */ #undef HAVE_POSIX_FALLOCATE /* Define to 1 to enable RSS Notify. */ #undef HAVE_RSS_NOTIFY /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define the location where the catalogs will be installed */ #undef LOCALEDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if gnutls support is required. */ #undef USE_GNUTLS /* Define to 1 if openssl support is required. */ #undef USE_OPENSSL /* Define to 1 to use UNIX Domain Socket. */ #undef USE_UNIX_DOMAIN_SOCKET /* Version number of package */ #undef VERSION uget-2.2.3/sounds/0000775000175000017500000000000013602733774011014 500000000000000uget-2.2.3/sounds/Makefile.in0000664000175000017500000003550613602733761013006 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = sounds ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(soundsdir)" DATA = $(sounds_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_INDICATOR_CFLAGS = @APP_INDICATOR_CFLAGS@ APP_INDICATOR_LIBS = @APP_INDICATOR_LIBS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_CONFIG = @CURL_CONFIG@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETCONF = @GETCONF@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LFS_CFLAGS = @LFS_CFLAGS@ LFS_LDFLAGS = @LFS_LDFLAGS@ LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@ LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBPWMD_CFLAGS = @LIBPWMD_CFLAGS@ LIBPWMD_LIBS = @LIBPWMD_LIBS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ soundsdir = $(datadir)/sounds/uget sounds_DATA = notification.wav EXTRA_DIST = $(sounds_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sounds/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sounds/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-soundsDATA: $(sounds_DATA) @$(NORMAL_INSTALL) @list='$(sounds_DATA)'; test -n "$(soundsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(soundsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(soundsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(soundsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(soundsdir)" || exit $$?; \ done uninstall-soundsDATA: @$(NORMAL_UNINSTALL) @list='$(sounds_DATA)'; test -n "$(soundsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(soundsdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(soundsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-soundsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-soundsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-soundsDATA install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-soundsDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/sounds/notification.wav0000664000175000017500000002540013602733704014133 00000000000000RIFFø*WAVEfmt D¬ˆXdataÔ*ëÿEÝÿQÃÿ¼ÿJîÿÒÿK¿ÿÑÿFÇÿ&0Ïÿ^$ìÿróÿýÿA¥ÿ=ÉÿW*Óÿ{ êÿu(0¶ÿ;7òÿVéÿíÿlüÿ=aÚÿZ>óÿj|%@èÿg!ÕÿwþÿóÿoÇÿuµÿ:_ÎÿG.iåÿðÿ;ÜÿSTÊÿe=Üÿ_ûÿßÿ9¾ÿJÁÿÛÿØÿÌÿ×ÿ@ÿ«ÿ3½ÿŽÿýÿ58Æÿ. ®ÿàÿíÿ'¯ÿèÿ¤ÿîÿØÿcÑÿ½ÿS®ÿèÿ?¢ÿ#îÿ€Ãÿ›ÿuÅÿñËÿ¤ÿªÿ4ùÿŸÿ¢DÂÿUÖÿðÿK¤ÿ/I‡ÿ?u&A»ÿuvÿõÿÎ&ýÿ3Y·ÿõÿq±ÿðÿ@©5ˆÿtKÊÿ>øÿ+0±ÿ2ržÿ2{žÿ/sòÿ*¦ÿêÿÓ¶ÿ­ÿh…ÿ¾ÿ9¸ÿ ÚÿÈÿ^­ÿ®ÿ2ÔÿÊÿwÿ ZÿYýÿÊÿ)Æÿ*Íÿ^ÿ².GÿCÀÿ™ÿWÖÿõÿÐÿPÿ3åÿâÿΈÿ¢ÿ ]ÿÁÿb_ÿ`P]ÿQ˜ÿÿ˜2€ÿ¯ÿÜÿÅþy¸ÿÒþend…8ÿïÿˆŒÿ,)ºÿOÅÿÅÿÑÿåÿãþ£ÀÿŸÿ“ÿ?þæÿøÿÅÿ7àÿÞÿ²õÿ×ÿ†ìÿ‚áÿôÿòÿ+‘”ÿˆÿ‡k¨(oÿÜݰÿ<óÿ´ÿž0dÃÿNXªÿ™`Gÿ¯ÿÔÿy<öÿ–ÿ;ùÿËÿèÿŸê8ÿÿF*KÿìÿÉÿLØÿT;¬ÿøÿÚÿËÿ(Dx(Z]ÿ~ÿÏÿÕÿ—Òÿ³ÿX™W]ÿøÿûØÿ*Õkÿ•ÿîÿÅÿðÿ}¹ÿÕÿH¿ÿfjÿ¢Îÿÿ¢×ÿÿI Õÿ1ÿ07Ìÿdæÿqúÿ¿ÛÿÿíÿQÿOZÿÌþ<ïÿZÿBÒÿõ“ÿÒÀÿ„>ÿp|fþXÞþG²tÿ2ÿ€ÞÿŠÿ‹…ÿëëÿÿƒÿ¨þ ;ŸÿÉLÿ+p7þ£ÿybÿ.ÍÿNÿáÿ|ÿ[£ÿ™ÿ!ÿÿòÿ£ÿ°ÿF¸¯ÿ¸™þ©þ uÿK–hÿ3 Tÿ dÿ¥ÿª‘ÿMÿ¯ÿ‰ÿ¾ÿ>ÿ ÿáÿÓþUu¦þ±ðˆþ•ÿxÿ˜þÊÿ_ÿµéþ&êýéÿ þ“ÿHÿ ÿ„•zÿyÿOþ?·#þj›ZþSÿ£&ÞþÒÿ ÷þ.ÿ®@hÿþLÁòýK8þån\ÿjàÿ•ÿBG5Ôÿ ýVÿ1Xþÿ…FÄŸþ«þ ©þ3xbÿ(ÿZþ|Ïîý“þÌÿƒ6%þÑSçý6ÿ$[þ¦sªþrþÏçþŸ%þQÿ]°þ+ûåÿ Ôþ`ÿ þ ÿ yÿ[þÚþeN-þWþôÀü2ýv/Ôý¹L ÿ&ýÿƒü?þV¦HEþLÿLþÈÿÕ£þ\üž0%qþœû±z\üŽû^ÿŸÿÍÿþÿ òý,ÿßûþ9ÿ)|¬…ÿöü$ðñÿnýSìýXúC4kûèú™ÿ”oÅû ý!üüúJ"ÿ‰ü®Öú4ÿE.ûkþCþÔÀþFü5áüœûÿUýxøü¶ÿêÿ üíüUæù—þ—Ãÿ·ýÚþdpIÿãþÇÿ‰û þõþ˜úúïBöù "™Ì•úQ‡þ( ·ÿÎõ] ±eú@þþ Àü+üËæýíúûVþ9<û2qÿËô–}ùÕbû@¹˜Î{û›ùǘµ Æ7uEgÿÚÆIýû¨Øÿ{£ ³þ+üX¼µù”p²&âøêÿx 0ÿ&û…aZÿ úõ¸§«ÿßüŘ2ª=[ÿü#NÛùð·‰ú ¹ÿ«û©9×ýÚN\úm¿ÿiæ ûKõ¢ý,ö/ûa'—Yðùæú Êzü/ÉÚúÉdVù/ÿùú)¿oþzýÎîÿ5ùÁü-ýµúÄüæ#hÒøþ+ý:ùýÌ”ñýÿ) jÿ ýOüŠøÑü€ÿ†ýÔ‰Ú›ÿƒÆbòýÿâ>ôeûq[ýIÿé} _ ®þéþz”ýYý ±ÿ2ü€ ʨqóG¼8ú`ùª Û‰øÀúJãò? þ7gJ . z­ùoüì í ¶•´ d ®è³Yr'u¯ÿY Ž „þ-ô†÷Zü÷Éköú ÌhýŒý‘Ò¹\ “û£×éýþú¾ÿ¢ þ+ðà÷iö§ýûKýËáYÿÅœâýûøoóØû7O·÷EÿûIòå# “Ôò×'çÎe÷9ñ¦çÆì°ý„êúÿ® üþ”øÛýEûVô¼{ ë+ýŸÝâÅ.nì$Ï“ñ‘ü> ‘ åôð[óS *WåMæãYúXß^Ÿô¢ ©Cø9ÙÖë.k ûäèú‘üËóB’¢ëçóÉó°ö†$ðÎú˜ø|÷oÕLKÛ…ê*öÍä6î­ôÁàúûÓÀZFçÔóÚ °öü[ !êbâVÞûÙ¹úºôîÆìuÿ’½ûŒí_I¸ÝµØë ,«æFË”)±Ò 'ß Ý¡öIÙĉ3/ÉÄÎþ` àª'€ dù-âÖ9+2X½™_?èâVèRóãZÔxd3C®ö#8£è õð'˜)lå½á—þ•ò±%K/ÐöâÃöÂ&»3?üÚ>'êÒ-#Ô¤ìaéì×hÖì奀ä2ßMÌóúû—'âúÂïÜ4A®C=ÏÜå_#AåAÿÙGË]Þ)¶Û"w1<<à=ÃëBŽ_<¤ðÁtU] ÕÜÀv?ùh=1AЖ¼"k¬Qâð!³Æ‹vm¸üóOéËÜÊ1+èf/¼)“}A§+˜²äÇ^ [:¬ñ¿õò-5gþä ‹=W]Ù-ê;Xâ øÊ"¾þÐþ)ܵÝ9ƒ?6úNó¼ÉõÒ½‡ïm'›Þ¦ÑG4œ|éÓ$¸ÚÒ?ôDÍ[ädûëÑ!ŸJ5J‰vÕÚ_¸=Å ËûðÐÅíÝä:>ð m¡¡çlKÓqÛ¯ïDýð7Îý®È[M8q{êºõÖBÏö2Íý/ÛSââÎàø£0GC'`ß’•&÷ò•ÿM“$¦·À8÷oþýY©Í@âV€ó×$žÞùËaæ>PÝýhøÿú-ßݳ$4ó è†3®ùäú:*cÚ×ìÏ4Ù!µ 6Öœ>!Lïæ”ñ7¹$K!$ ¶&é.?ÚPO@S@,çÅêü-›( ø: –ÿýÊYfb. ŸƒïÇK<4ñÛ·8ÇýP(¿ˆÍÂ7 µ?B_ìÒ(Æt5\)º å!>A?Wëõ÷„Kï ÌèQUl‘òÖïûöI5°ËփȞ(ûÝí›ðêÍ6<Zé¦÷Yϧå±,¹â˜¦o Ï2`ï*Ò–Æ7Éååññ®ö6 ã¹ÏC x!cÐyŸÐËãÞ7¾ŸÏé„Ó+ú°)ÐìºÓÙþŽË`©$» ‹ëÓÙÚ_ ¸ü;µ.”tá}hØ ÆéÐéÔŒù[¤òɨ «þxÀÉHû¯MIÙØÇ3!cÁ€Ü¶F¥ÝÅá P LÖ5ëÇBÁ¶#Ã>ëí˜å/õ:Î!V“*Ã6ÿ Äùö[œþ/íYä&Þ½ãqêÌð ¦)õëé™ýi°¡ì[<£`¼ߊ gJIGÁO.%c¸ÀÄÒ,†%_Ù2ß!ÓUé–óD#¤4)cÿ"Øþ8%ð¼ÿ ïßEßjó}\ÇøÒJd+X9%õ°öÿ¸JÒ÷ß $ãsÆ…'! TòYÿ ÿ§çíEüöÁ )ÅÿHú)°þ ÔèÛN÷ÕÕÔ¼¼ê G #iÔôPÚß Ò™¯*¼›æ/èŠæÉôûš¾3ÞRÅ—ã€õÆóCòUëáéì òHÊ•Tõæèéëà?ò< EJ“ý˜* 0ú—ßaÛJÜTãèé,äÏøHшïÔè‰Ó›Ñáà¤Î„È4îhø9åjêzõ†¡[8õûþhîÙÔ´áÞ¶ÆÿÔnòÓaÁŒA0ƒ7˜= Oí¥ªn0‡GBG7§0&)&\=INçEê8:°ImD04Ú>Ó:¯ôXŸùó ‡ ~Ý[Ý[ ;Ø"ölîíäÈÓ¥ÒÑZÁ8Ìýâ+ÕȼŰ£®Ê¸ ®²/²ª$Í3ÙG¶ï»pÂ#§P®#¾G²¿­±á¼¹Èd»¶ÒIë«æÿÛÙêþ…ûœôÙèéãöéöÍëæõ|õŒø­ õ0ÿ«­ =µ È‘-Ÿ%é~óX®ëº÷)÷ˆÂ,îßÿ) ‡öoîöôYõÇÿý®ÌýÁ»Ä§xË%à*Еæ ðªÜާӿǼñºûËÎßøÔ ÌÄÌPÆÿ¿B¾=È?ÐáÔöóÕ 'äôêì÷éÄù:£Áq= £D- $=)­4>„5Ì9ú9(/"CfF ',37Kl5¯!Ï!¤&í7XE§B:P38b:ä&¤"?½ÉÔ×îƒâ˜êaá¢ÜþëÜñ‡óõ ?ëíÝÜëìèë¤ÛEÔ¼Øê?îåæë,èëØäðU÷©«$@8 ¿Ó *¶áÉ Lh&*R*g?ü>·D´NþO¦LªK!TîO=;#BØXœPA=à9?;gAœMjPKöG®Bê;];J5Û!Uð3áZ.ß6 , v «ötåüì:è¦ýæöhð‰éKí*ëzÞjÞçé¶ô¢ûùó¶õŸý¼µü§û,Ä-ÿ÷ÿz 2•,ô&õ ~/QC›H9L6,B::t.è.±7|O’YÁGG?PFKQ‡Uö?\-87·?#7Âs D'-6+Í ÷üjì&×ù ÿå ÇXåöίãûþ´ô%æ`êwðpù-þíð¶àœá7÷sðÔØåààú¿0öÿãˆòç<—§“ «* 6b)Œhn-2%Vl(ÆUU|-y+kB‰H™7# š1ö8ï4†!” Pg!´ Òµ ªT°eò.óˆp ×ðÎÛàòŸûeïžÛ7à‡ùüÍÝ É(ÒçÑûÌû`äQÚé¸òfêóÝXâúv mjø‘ð<ýÄO ½… ø_ m 1d+×0J-\$Õ#¸)r(QP‡Q+*‹¬ æ +’üž Ô ñ‡ýòÃënìœð¥ðkíêçÕäwí±ô¬èÛÙjÜýæ”è#Þ:Ó±ÔLßÜå¾àÀÓêÎ%ÚÉåFçNætæ&èpðkøÜóïéÞêÙö”\ù*÷¹ÿÀ ìŸM¨¢ ´"•HKà ÑO|ûU­ ÌýðpñúÃñqßñÝ2å\èåêæçiß•ÛQÝæÝ·ÓÏÇüÐ*à Þ†Ù=ÒêÇšÏ×ÙEΓÆÕ§åqçvÜnÒÓÒ°ß‘ò*õAçãäaðUûgÿ$ø7ô\ÿ¹ Ù°} ¨Ø ´è7LL Ž4•Ç “þ]úìúîüô‹ê¯óoúòóë é“çrëFì-émãפÑÞÕÃÔÑ×OÝ€ÛpØ·ÒUÌÕáá)ÜëÔ°Ý æçååÂà'Ý}âì»ï!êXè1ñï÷ûî¨Ç ù \S z 9 ;È ßùbè øË Š Í Üþøù{þ¯úÝðñf÷±÷{ðç`áæßEß{ÝgÚ(Ú8ÛgÙšÜåãBáÙÖ£ØoÞ£ÝÔOÕ¸ß)ãöáîãâç¼ë€ë?éOíÀô¨ö¹÷Yþ?@³Ð n åðp¦‘ – _¦#²#!0W1èŠÿúå¥ïýõù‹ø]ú<úŽùÙø€ðpäMÞØÜ‡Þ‚ÞÙÿÖ@ÙáØ>ÙÚf×ö×fÜSÞ+Þ7ß'â³ä´çUïˆôgóÃô–ó†ëDì>õöøäûXÿY¡ tir ë'Fbd_†$!¨ì!“!ØL–Ýš” M ™ D å@nûøzñïˆî+èªà/à¢ä'æ å•â'ÞOâôéNã/ÜááàŒÜfß‘ä ç|äÁäÆñ.úöö÷Rû.ùªøü1 " ‚ 5™®Å Oö¶â a#Å!ó÷!%ú"sÁ5Æ; ' Ô 9  Ê"ýîóö4ùûõò=î3íÝícéèä-æèè¸åyá.ßÇÞÏàæâýâvç¶ïCô[õŸóñò=ô¡öèùTúüž]„¸ ñ 9K£¸cÝyIð'ûÈÀÏ?”e Ë='0  ­óü/ù³ôÐóHô‘ò½ñ ñ4ïñî‘îÄí@ïï‰ìÐìíùêÕë\îœï©ô²ú·ù¸öŸ÷âøÐøqù¾û€ib = 2 { ÙŸÃ`Ñ’Í)7?ñaxdø,›¥‰ÃØ ‚Â=Æðü¼ûŽùö ô«ô‹ö§öËô7óÏðkíÒìÖíGî ñæóüóömùóùûÛü üHÿW¨³·¡+  " ­Â²h]¾H1eÆB]çGÛ„@Í Ç L | ö 8šÍz4°ÿtþ‰üçùÃöLóíñpòòEò#ò9òƒñOïî›íÏìï›òÂòóåõò÷•ù»ü›ARSi^ Ö ´ & ÛB×¥ ªœ$ÍÎÁÒ8(1àóš ©Ôr|Du dþ[üˆûËùJøp÷_ôžò·ôÖóOð€ñ¶ôQôþñÍð~ð±ïðdó$ö‡÷–úVü[ûÃýÿËœ•ç¨ Ù ~¬­rΦ¯Õ–="äzè“Dé N s ” ¦ ³qçåJQ>ÿúõ÷$ø4÷Ïôòñóõžô“òð®îkð†ò|òòSò6ñ‘òvõÊöÔ÷Eù™úý©ÿ“"¦ÿp"6 â r c "j¬Œ½Œ—» \   Í ¯ Á |®žÉÅýý6þâýsú˜÷¾÷ÕöÎóñòMóÓññð¶íjí ñjò]ñcñ^ñIðÁï1ñ{óôLô©ö5ø³öOö}ùÂü®þk?Yj´n€T ƒ ’ •ouf  ¹ i ¥ ± à- † •ûWöœÑý<ü¼û;úÿønúíú`÷Zõpødú ÷ ó_óDöÇöõ@ôWô{ôõïõIö÷Ü÷÷Úö¬÷úxüeþÅÿUoôG2  5 b ¥ S j5o x C š • j †ø!Ac\êÿçû'ý£ýþúú;ùæ÷øQøaø ÷½ôùó÷òîñæòØò{òCôÄõ ÷ÿ÷6÷g÷˜÷ öyöÏ÷†ø-û´ý þñþÄïÿS¨Œ +V— ù Ð ½ ä è*¼  4  : _ , œÐyø¿&§ÿ±þªü9û¡ú/úÃøèöÆöøøö[ôWóó8ôXõ:õ¼õîö”÷ðö*öm÷ùøç÷UùDú¦û»üÿü®þÐ/¢ …)›ó1Î< v Á Y Óm¤+¹]±,dQ ‚¥Qþýþ_ýëúéùCù!ø­øùn÷—ö=ö½ô>óóÒó ô(ôJõrö$÷¨÷3ø¤ùŠúúúúûùÕûîý’ÿŸUkrµZ)»ø ¶ " 5v_¬zÝ›iíÑï4»Æ/i[ÿçû›úvú¿øàøIùÄ÷÷÷ö¿õEôôŠô˜ó¾óôôÙôÙõö ÷(øù²úiúœûIþ£þþ™þ§ÿ¤\Ñý ës¿d 7 è„  S 2 Q Co'LGDÀ¤)€@|þáý$üêùGùŽøø›ø+øp÷)øƒø@÷\ö ö÷¾÷¢øÛøVø0øMù-ûßû^û5ûêû¼ýýÿÞÚ(­-»ÀÉèŒ+³•:‰ó>í+Z`|SY×8‰ðÿýÿbÿÀýºüÿûøúiúèúšû²ú«ø{÷Gö+õûõ'÷÷ÒöÖö×÷UùÆùúúµú¸ûùüNý<þ>ÿGÿùþ"ÿM—6-pmV d>!vQf; "L€h'¦‡½;.-ÇÿDþºüüûûbûjú~úËúúzùüùœúúBù ùÇùÛøŸøù#ùÇùú¸ùÌúžüÞü£üáýzÿ»ÿ`ÿ$öÄÓ…þ°–Îc Q ½åº ªÿãW/˜¾þqþ'ÿ¸þ“ý ýèüÌûÞúBû8ûËú4ûôúAú«ú#újù“úñúõùoùùfúPü²ûÍûŠýýÛüþÜý=þ+R„•¸0¸Ù °„¨?ºä:•¼¿Š»<[ ‹ÓjÿþWþ ý‘û ûü÷ùbøŸøöø—ùú3ùüøeùÿøøøãùúºù«ùKú‡û´ûƒû‡ü6ý.ýËý²þÜÿí9’Pˆµ¬úkDà7œóu á^r\Õ˜¸ç{5]4ÿIÿîþtÿ'ÿÆüküý*ûú3úù×øú%ûgûŠúÒù’úû«útú^ú—ûÀü×ûPûÄü4þhþhþbÿñÿý ©†Ëœ= Îá²Ó >W~5üÙšÞBäÆü>ÿgÿ :ÿdýý÷ü üìû8ü üü~ûÞú¹úÀúîúõú\û/ü·û™ûýPý³üþýVÿ(ÿÿ±§×Z®—³BÎð±2ºbSÎsÃeK §FŒ…Ÿ—]ÿ¤ÿjÿ}þóýpýiüÝûüãûÕûÍûXûIûcû û£úíúÜû]üü´üíý þþÍþÿ®x›üUuߦ}¢Æñ’Ü„‡Ó8‰Ž}NOò­»wÍû%ß¡ Ç.Œÿ'ÿhþ«ýKýýªüjûmú¨údûÛû]ûËú4û`û'ûDûÈúàú‘û,û…ûÅüŽüòüÔþ©ÿšÿÿäÿñó°äòb‘”3;È“Ìi–FJ´(äo$=ßc8ÿîþ¸þZþ×ýýÇýîýŸýYýLýÌüçûëû|üÓûçúWû üüûüüäûõûôüþ;þûý:þ0ÿo;U`Ü¥Le ž. iD¿áB×<V2¼ÖDºÿ‰ÿõþùþÿÍþœþþýüküüæû5üöü€ý¦ü ûzúªúàú3ûkûßûVü:üüJüEüjü`üAüùüœýåýíþÐÿÛÿ(µ-ªkñظÌð5O ³ÌÍÁ „¢Âƒ|7°ÿOþ#þ±ý"ý÷üXüñû-üöûLûÔúƒú>úŒúxû‚ûwúú9úCú û.û½úOû‹ûtû5üZü€üjýrý˜ý”þüþ­ÿ’ÂðÜÇo#tˆKø@ÚŽðJ¨õ×m¢Ê ™”µ@ÿ·þÙþ®þ?þ÷ýþ]ýüBü£üKüõûQûüú¤ûÜûÂûöûúûüMüXüŠü©üãüCý#ý5ýžýòýáþ^ÿnÿYéö îM9YÒ,‚7ÒĈÔm§oÊ8-rIÿsþ,þþýý¡ýûü˜ü¾ü~üjü@übüÚüœüüüæûZüü2ü}üïü6ýôý€þŽþÂþÂþ¢þ‰þùþ {‡ úÃKUD¯œqŠ­IÄiåEÈ\½­dû™äÿLÿrÿyÿ.ÿÿ¡þþ£ýRýý&ýNýýü&üSüÑü7ýýšüóüý·ý8þèþ(ÿ}ÿ·ÿwÿ“ÿ <þÿ´ÿôÿ~¹¹Ï¶BñØŸ²ãðä¼$'PFáo)EÎÿÝÿ¶ÿØþ‡þ¿þ‘þ}þBþÿýcþpþÛý±ý§ývý×ýqþ£þwþŒþÿþÿÇþ÷þ|ÿ Ñ9saX‚±Ù|Ù>8âÒ¸h\ÀýèwŽùÿ¯ÿ(ÿ ÿ ÿÿ¯þXþ2þþþßýNýiý±ýeý@ý™ý³ý§ý.ýÁü4ýýRý>ý]ýŒý¿ýFþíþÿÿfÿ…ÿÏÿhc[qs;Éé  áJ-6$ Œ0®ÿyÿâÿ¹ÿIÿÿÑþ§þ“þVþyþuþùý‡ýbýšýþýþ>þ…þJþMþSþþþþþ¹þåþ…þéþeÿ§ÿ"(Q–zõ ì9;Oxx,ýB2̽eÚ˳cÿ:ÿ3ÿÄþˆþªþÂþÞþëþ¸þpþEþ^þ}þþ½ýêý×ý½ý$þeþ‘þšþqþ‡þÂþÖþ ÿIÿ…ÿÜÿÝÿ¿ÿ¡(21ƒœ£ÜGp\’ÁŒnZ[²‹óÌÆ‚P6í£T[JÉÿAÿÿæþ­þ‰þ6þåý!þ‘þ£þ€þ@þ1þNþcþFþ[þyþuþnþkþˆþäþ=ÿ3ÿ6ÿ‰ÿÚÿ%O9 7£}ß ðªhT› ,ýÒˆ`kò±¿œsy<ôÿôÿÍÿ„ÿ%ÿ¸þšþ¿þÈþ«þ?þÏýþmþbþ@þZþRþþ\þöþ>ÿnÿ¤ÿŽÿŒÿÂÿÿpÿ¤ÿÿÿS\f·‹sµä÷éʬêw·ˆ`C8 âáÇYW“}@êÿûÿÆÿ›ÿuÿ}ÿˆÿyÿuÿIÿÝþ®þ´þêþÿÿÉþœþÂþÿ@ÿ2ÿrÿðÿjbúÿ|˜œŸ¤¿ò 6+*†À‹PsHïû,#(<ÕÂìÚ‚O-A^!ïÿòÿÊÿˆÿyÿ‰ÿwÿ`ÿ@ÿMÿjÿEÿÿÿ8ÿSÿjÿUÿ=ÿkÿ—ÿÆÿ÷ÿ 0a±æÞÿRz‘ž¶ÃÑë#"'èÕ­f[I63÷ØþäÆÒÉ¥mF#óÿÛÿÄÿ¾ÿŠÿDÿ3ÿ+ÿ:ÿUÿÿÎþñþ°þmþžþÁþ×þÿ;ÿrÿsÿFÿbÿŸÿµÿÇÿkk¶%8&J›zgš¹ËÚÚ§—ˆ3Û¹½šWYTìÿ¸ÿ¬ÿ²ÿÿsÿ[ÿrÿDÿÿAÿmÿXÿOÿ-ÿ+ÿDÿÿúþóþÄþãþ0ÿGÿvÿÿ‚ÿsÿsÿÿÑÿÞÿÒÿåÿ`fŒ»ÍZF4g~¯È»©5-:/þ×­T && ×ÿÆÿ×ÿ¿ÿ£ÿ”ÿmÿ[ÿYÿZÿzÿvÿ?ÿ6ÿZÿ‡ÿ¶ÿ¬ÿ“ÿeÿ^ÿzÿ|ÿ`ÿ€ÿ­ÿÇÿÆÿºÿÁÿëÿ Üÿìÿ,;C{»×ØÌçõîèµbBcocnœ–:Ãÿ¦ÿÞÿØÿÿ]ÿeÿMÿÿñþéþäþéþíþÿ%ÿìþÇþÄþÈþÊþÜþ ÿ=ÿjÿqÿkÿzÿŒÿžÿÄÿåÿ.5 Sˆ˜ub^g„®Ì©•§ñ%6Oa:Ò½ª„¡áÖ„=31éÿÖÿ¸ÿ–ÿ‹ÿiÿBÿ)ÿ ÿõþòþþþðþÓþÙþõþÿ2ÿRÿsÿhÿ]ÿcÿ¯ÿÜÿæÿÏÿÛÿ 8 8RQg{rnzx…¨Úؤ\Qƒ ŒŒ¶Ä’fhrH18%çÿŸÿŒÿ”ÿ¢ÿ|ÿ'ÿñþúþÿÿÿþÝþÔþÄþÃþÐþëþÿ7ÿrÿ¤ÿµÿ¢ÿŸÿ¨ÿ ÿšÿÌÿ 4;Juywq„Ÿ¢¡•°ÐÕ¯§»‘X=M>-E^O*êÿÍÿªÿ˜ÿŒÿÿvÿ€ÿ•ÿ ÿuÿSÿJÿMÿ:ÿÿ&ÿLÿqÿ’ÿ®ÿ°ÿÿžÿµÿØÿïÿ!#,?Obv{‚­¥—„‡©YVSN( äÿ¦ÿ‚ÿxÿwÿqÿvÿ€ÿrÿhÿnÿtÿ\ÿKÿIÿYÿPÿRÿhÿsÿaÿSÿgÿŽÿŽÿ•ÿ•ÿ˜ÿ—ÿ¡ÿ¡ÿÿÂÿúÿëÿôÿ3b€}s\„¾ÕÏâê»|\cdsjR5=8"  áÿµÿ¡ÿ”ÿÿ³ÿÑÿ°ÿoÿZÿ`ÿ]ÿTÿ}ÿ¥ÿ©ÿ¨ÿ»ÿ½ÿ‘ÿˆÿ´ÿÏÿºÿ±ÿÈÿÅÿ²ÿ¤ÿÀÿÞÿûÿûÿóÿëÿ"1_…¨ï#ú0ùóÜÙ·~7 ýÿêÿãÿÇÿ¡ÿ•ÿ¥ÿšÿkÿPÿ_ÿvÿwÿgÿVÿVÿfÿiÿPÿQÿqÿŠÿ‡ÿ|ÿqÿmÿgÿzÿ›ÿÄÿçÿ<f†Ÿš‚j~ŸÌÓÍ»uget-2.2.3/sounds/Makefile.am0000664000175000017500000000014113602733704012755 00000000000000soundsdir = $(datadir)/sounds/uget sounds_DATA = notification.wav EXTRA_DIST = $(sounds_DATA) uget-2.2.3/ui-gtk-1to2/0000775000175000017500000000000013602733774011464 500000000000000uget-2.2.3/ui-gtk-1to2/UgData-download.h0000664000175000017500000001670013602733704014524 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ // define UgDatalist-based structure for downloading. // UgData // | // `- UgDatalist // | // +- UgCommon // | // +- UgProxy // | // +- UgProgress // | // +- UgHttp // | // +- UgFtp // | // `- UgLog #ifndef UG_DATA_DOWNLOAD_H #define UG_DATA_DOWNLOAD_H #include #include "UgData1.h" #ifdef HAVE_CONFIG_H #include #endif #ifdef __cplusplus extern "C" { #endif // interface address for UgDataset #define UgCommonInfo &ug_common_iface #define UgProxyInfo &ug_proxy_iface #define UgProgressInfo &ug_progress_iface #define UgHttpInfo &ug_http_iface #define UgFtpInfo &ug_ftp_iface #define UgLogInfo &ug_log_iface typedef struct UgCommon UgCommon; typedef struct UgProxy UgProxy; typedef struct UgProgress UgProgress; typedef struct UgHttp UgHttp; typedef struct UgFtp UgFtp; typedef struct UgLog UgLog; typedef enum UgProxyType UgProxyType; extern const UgData1Interface ug_common_iface; extern const UgData1Interface ug_proxy_iface; extern const UgData1Interface ug_progress_iface; extern const UgData1Interface ug_http_iface; extern const UgData1Interface ug_ftp_iface; extern const UgData1Interface ug_log_iface; // ---------------------------------------------------------------------------- // UgCommon // UgData // | // `- UgDatalist // | // `- UgCommon struct UgCommon { UG_DATALIST_MEMBERS (UgCommon); // const UgData1Interface* iface; // UgCommon* next; // UgCommon* prev; // common data gchar* name; gchar* url; gchar* mirrors; gchar* file; gchar* folder; gchar* user; gchar* password; // timeout guint connect_timeout; // second guint transmit_timeout; // second // retry guint retry_delay; // second guint retry_limit; // limit of retry_count guint retry_count; // count of UG_MESSAGE_INFO_RETRY guint max_connections; // max connections per server gint64 max_upload_speed; // bytes per seconds gint64 max_download_speed; // bytes per seconds // Retrieve timestamp of the remote file if it is available. gboolean retrieve_timestamp; guint debug_level; // gint64 resume_offset; struct UgCommonKeeping { gboolean name:1; gboolean url:1; gboolean mirrors:1; gboolean file:1; gboolean folder:1; gboolean user:1; gboolean password:1; gboolean timestamp:1; gboolean connect_timeout:1; gboolean transmit_timeout:1; gboolean retry_delay:1; gboolean retry_limit:1; gboolean max_connections:1; gboolean max_upload_speed:1; gboolean max_download_speed:1; gboolean retrieve_timestamp:1; gboolean debug_level:1; } keeping; }; // --------------------------------------------------------------------------- // UgProxy // UgData // | // `- UgDatalist // | // `- UgProxy enum UgProxyType { UG_PROXY_NONE, UG_PROXY_DEFAULT, // Decided by plug-ins UG_PROXY_HTTP, UG_PROXY_SOCKS4, UG_PROXY_SOCKS5, #ifdef HAVE_LIBPWMD UG_PROXY_PWMD, #endif UG_PROXY_N_TYPE, }; struct UgProxy { UG_DATALIST_MEMBERS (UgProxy); // const UgData1Interface* iface; // UgProxy* next; // UgProxy* prev; gchar* host; guint port; UgProxyType type; gchar* user; gchar* password; struct UgProxyKeeping { gboolean host:1; gboolean port:1; gboolean type:1; gboolean user:1; gboolean password:1; } keeping; #ifdef HAVE_LIBPWMD struct UgProxyPwmd { gchar* socket; gchar* socket_args; gchar* file; gchar* element; struct UgProxyPwmdKeeping { gboolean socket:1; gboolean socket_args:1; gboolean file:1; gboolean element:1; } keeping; } pwmd; #endif // HAVE_LIBPWMD }; // --------------------------------------------------------------------------- // UgProgress // UgData // | // `- UgDatalist // | // `- UgProgress struct UgProgress { UG_DATALIST_MEMBERS (UgProgress); // const UgData1Interface* iface; // UgProgress* next; // UgProgress* prev; gint64 complete; gint64 total; gdouble percent; gdouble consume_time; // Elapsed (seconds) gdouble remain_time; // Left (seconds) gint64 download_speed; gint64 upload_speed; // torrent gint64 uploaded; // torrent gdouble ratio; // torrent // guint n_segments; // 1 segment = 1 offset + 1 length // gint64* segments; // offset1, length1, offset2, length2 }; // --------------------------------------------------------------------------- // UgHttp // UgData // | // `- UgDatalist // | // `- UgHttp struct UgHttp { UG_DATALIST_MEMBERS (UgHttp); // const UgData1Interface* iface; // UgHttp* next; // UgHttp* prev; gchar* user; gchar* password; gchar* referrer; gchar* user_agent; gchar* post_data; gchar* post_file; gchar* cookie_data; gchar* cookie_file; guint redirection_limit; // limit of redirection_count guint redirection_count; // count of UG_MESSAGE_DATA_HTTP_LOCATION struct UgHttpKeeping { gboolean user:1; gboolean password:1; gboolean referrer:1; gboolean user_agent:1; gboolean post_data:1; gboolean post_file:1; gboolean cookie_data:1; gboolean cookie_file:1; gboolean redirection_limit:1; } keeping; }; // --------------------------------------------------------------------------- // UgFtp // UgData // | // `- UgDatalist // | // `- UgFtp struct UgFtp { UG_DATALIST_MEMBERS (UgFtp); // const UgData1Interface* iface; // UgFtp* next; // UgFtp* prev; gchar* user; gchar* password; gboolean active_mode; struct UgFtpKeeping { gboolean user:1; gboolean password:1; gboolean active_mode:1; } keeping; }; // --------------------------------------------------------------------------- // UgLog // UgData // | // `- UgDatalist // | // `- UgLog struct UgLog { UG_DATALIST_MEMBERS (UgLog); // const UgData1Interface* iface; // UgLog* next; // UgLog* prev; time_t added_on; time_t completed_on; }; #ifdef __cplusplus } #endif #endif // UG_DATA_DOWNLOAD_H uget-2.2.3/ui-gtk-1to2/UgDataset.c0000664000175000017500000002406613602733704013432 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include // uglib #include "UgDataset.h" #include "UgCategory.h" #include "UgData-download.h" // ---------------------------------------------------------------------------- // UgDataset static void ug_dataset_init (UgDataset* dataset); static void ug_dataset_finalize (UgDataset* dataset); static void ug_dataset_assign (UgDataset* dataset, UgDataset* src); static void ug_dataset_in_markup (UgDataset* dataset, GMarkupParseContext* context); static void ug_dataset_to_markup (UgDataset* dataset, UgMarkup* markup); static const UgDataEntry ug_dataset_entry[] = { {"DataList", 0, UG_TYPE_CUSTOM, ug_dataset_in_markup, ug_dataset_to_markup}, {NULL} // null-terminated }; const UgData1Interface ug_dataset_iface = { sizeof (UgDataset), // instance_size "dataset", // name ug_dataset_entry, // entry (UgInitFunc) ug_dataset_init, (UgFinalizeFunc) ug_dataset_finalize, (UgAssign1Func) ug_dataset_assign, }; static void ug_dataset_init (UgDataset* dataset) { dataset->ref_count = 1; // for macros ug_dataset_alloc_list (dataset, UgCommonInfo); // UG_DATASET_COMMON 0 ug_dataset_alloc_list (dataset, UgProxyInfo); // UG_DATASET_PROXY 1 ug_dataset_alloc_list (dataset, UgProgressInfo); // UG_DATASET_PROGRESS 2 ug_dataset_alloc_list (dataset, UgRelationInfo); // UG_DATASET_RELATION 3 } static void ug_dataset_finalize (UgDataset* dataset) { guint index; if (dataset->destroy.func) dataset->destroy.func (dataset->destroy.data); for (index = 0; index < dataset->data_len; index += 2) ug_datalist_free (dataset->data[index]); g_free (dataset->data); } static void ug_dataset_assign (UgDataset* dataset, UgDataset* src) { const UgData1Interface* iface; UgDatalist** data_list; guint index; for (index = 0; index < src->data_len; index += 2) { iface = src->key[index]; if (iface == NULL || iface->assign == NULL) continue; // assign list data_list = ug_dataset_get_list (dataset, iface); if (data_list == NULL) data_list = ug_dataset_alloc_list (dataset, iface); *data_list = ug_datalist_assign (*data_list, src->data[index]); } } UgDataset* ug_dataset_new (void) { return ug_data1_new (&ug_dataset_iface); } void ug_dataset_ref (UgDataset* dataset) { dataset->ref_count++; } void ug_dataset_unref (UgDataset* dataset) { dataset->ref_count--; if (dataset->ref_count == 0) ug_data1_free (dataset); } // Gets the element at the given position in a list. gpointer ug_dataset_get (UgDataset* dataset, const UgData1Interface* iface, guint nth) { UgDatalist** list; list = ug_dataset_get_list (dataset, iface); if (list == NULL) return NULL; return ug_datalist_nth (*list, nth); } void ug_dataset_remove (UgDataset* dataset, const UgData1Interface* iface, guint nth) { UgDatalist** list; UgDatalist* link; list = ug_dataset_get_list (dataset, iface); if (list == NULL || *list == NULL) return; if (nth == 0) { link = *list; *list = link->next; } else link = ug_datalist_nth (*list, nth); if (link) { ug_datalist_unlink (link); ug_data1_free (link); } } // If nth instance of iface exist, return nth instance. // If nth instance of iface not exist, alloc new instance in tail and return it. gpointer ug_dataset_realloc (UgDataset* dataset, const UgData1Interface* iface, guint nth) { UgDatalist** list; UgDatalist* link; // assert (iface != NULL); list = ug_dataset_get_list (dataset, iface); if (list == NULL) list = ug_dataset_alloc_list (dataset, iface); if (*list == NULL) { *list = ug_data1_new (iface); return *list; } for (link = *list; ; link = link->next, nth--) { if (nth == 0) return link; if (link->next == NULL) { link->next = ug_data1_new (iface); link->next->prev = link; return link->next; } } } gpointer ug_dataset_alloc_front (UgDataset* dataset, const UgData1Interface* iface) { UgDatalist** list; UgDatalist* link; // assert (iface != NULL); list = ug_dataset_get_list (dataset, iface); if (list == NULL) list = ug_dataset_alloc_list (dataset, iface); link = ug_data1_new (iface); *list = ug_datalist_prepend (*list, link); return link; } gpointer ug_dataset_alloc_back (UgDataset* dataset, const UgData1Interface* iface) { UgDatalist** list; UgDatalist* link; // assert (iface != NULL); list = ug_dataset_get_list (dataset, iface); if (list == NULL) list = ug_dataset_alloc_list (dataset, iface); link = ug_data1_new (iface); *list = ug_datalist_append (*list, link); return link; } // ---------------------------------------------- // UgDataset list functions guint ug_dataset_list_length (UgDataset* dataset, const UgData1Interface* iface) { UgDatalist** list; list = ug_dataset_get_list (dataset, iface); return ug_datalist_length (*list); } UgDatalist** ug_dataset_alloc_list (UgDataset* dataset, const UgData1Interface* iface) { guint data_len = dataset->data_len; if (dataset->alloc_len == data_len) { dataset->alloc_len += 8 * 2; dataset->data = g_realloc (dataset->data, sizeof (gpointer) * dataset->alloc_len); dataset->key = (const UgData1Interface**) dataset->data + 1; } dataset->key[data_len] = iface; dataset->data[data_len] = NULL; dataset->data_len += 2; return &dataset->data[data_len]; } UgDatalist** ug_dataset_get_list (UgDataset* dataset, const UgData1Interface* iface) { guint index; for (index = 0; index < dataset->data_len; index += 2) { if (dataset->key[index] == iface) return &dataset->data[index]; } return NULL; } // free old list in dataset and set list with new_list. void ug_dataset_set_list (UgDataset* dataset, const UgData1Interface* iface, gpointer new_list) { UgDatalist** list; UgDatalist* old_list; list = ug_dataset_get_list (dataset, iface); if (list == NULL) list = ug_dataset_alloc_list (dataset, iface); old_list = *list; *list = new_list; ug_datalist_free (old_list); } // Cuts the element at the given position in a list. gpointer ug_dataset_cut_list (UgDataset* dataset, const UgData1Interface* iface, guint nth) { UgDatalist** list; UgDatalist* link; list = ug_dataset_get_list (dataset, iface); if (list == NULL) return NULL; if (nth == 0) { link = *list; *list = NULL; } else { // nth > 0 link = ug_datalist_nth (*list, nth); if (link) { ((UgDatalist*)link)->prev->next = NULL; ((UgDatalist*)link)->prev = NULL; } } return link; } // ---------------------------------------------------------------------------- // UgMarkup parse/write static void ug_dataset_parser_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, UgDataset* dataset, GError** error) { const UgData1Interface* iface; UgDatalist* datalist; guint index; if (strcmp (element_name, "DataClass") != 0) { g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); return; } for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "name") != 0) continue; // find registered data interface (UgData1Interface) iface = ug_data1_interface_find (attr_values[index]); if (iface) { // Create new instance by UgData1Interface and prepend it to list. datalist = ug_dataset_alloc_front (dataset, iface); g_markup_parse_context_push (context, &ug_data1_parser, datalist); } else { // Skip unregistered interface, don't parse anything. g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); } break; } } static GMarkupParser ug_dataset_parser = { (gpointer) ug_dataset_parser_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; static void ug_dataset_in_markup (UgDataset* dataset, GMarkupParseContext* context) { g_markup_parse_context_push (context, &ug_dataset_parser, dataset); } static void ug_dataset_to_markup (UgDataset* dataset, UgMarkup* markup) { const UgData1Interface* iface; UgDatalist* datalist; guint index; for (index = 0; index < dataset->data_len; index += 2) { // output from tail to head datalist = ug_datalist_last (dataset->data[index]); for (; datalist; datalist = datalist->prev) { iface = datalist->iface; if (iface->entry == NULL) continue; ug_markup_write_element_start (markup, "DataClass name='%s'", iface->name); ug_data1_write_markup ((UgData1*)datalist, markup); ug_markup_write_element_end (markup, "DataClass"); } } } uget-2.2.3/ui-gtk-1to2/UgRegistry1.c0000664000175000017500000000644513602733704013737 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include //#include #include "UgRegistry1.h" static GHashTable* registry_hash = NULL; //static GStaticMutex registry_mutex = G_STATIC_MUTEX_INIT; void ug_registry1_insert (const char* key, const void* value) { GList* list; if (registry_hash == NULL) registry_hash = g_hash_table_new (g_str_hash, g_str_equal); list = g_hash_table_lookup (registry_hash, key); // if key doesn't exist in registry_hash, duplicate it. if (list == NULL) key = g_strdup (key); // add value to list and update list in registry_hash. list = g_list_prepend (list, (gpointer) value); g_hash_table_insert (registry_hash, (gpointer) key, list); } void ug_registry1_remove (const char* key, const void* value) { GList* list; gpointer orig_key; if (registry_hash == NULL) return; list = g_hash_table_lookup (registry_hash, key); if (list) { // remove specified value from list list = g_list_remove (list, value); // if list has data, use new list instead of old one. // otherwise key and value must be removed. if (list) g_hash_table_insert (registry_hash, (gpointer) key, list); else { // the original key must be freed. g_hash_table_lookup_extended (registry_hash, key, &orig_key, NULL); g_hash_table_remove (registry_hash, key); g_free (orig_key); } } } int ug_registry1_exist (const char* key, const void* value) { GList* list; if (registry_hash) { list = g_hash_table_lookup (registry_hash, key); if (g_list_find (list, value)) return TRUE; } return FALSE; } void* ug_registry1_find (const char* key) { GList* list; if (registry_hash) { list = g_hash_table_lookup (registry_hash, key); if (list) return list->data; } return NULL; } uget-2.2.3/ui-gtk-1to2/Makefile.in0000664000175000017500000006177313602733761013463 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = uget-gtk-1to2$(EXEEXT) subdir = ui-gtk-1to2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_uget_gtk_1to2_OBJECTS = uget_gtk_1to2-UgCategory.$(OBJEXT) \ uget_gtk_1to2-UgData1.$(OBJEXT) \ uget_gtk_1to2-UgData-download.$(OBJEXT) \ uget_gtk_1to2-UgDataset.$(OBJEXT) \ uget_gtk_1to2-UgMarkup.$(OBJEXT) \ uget_gtk_1to2-UgRegistry1.$(OBJEXT) \ uget_gtk_1to2-UgSetting.$(OBJEXT) \ uget_gtk_1to2-Ugtk1to2.$(OBJEXT) \ ../ui-gtk/uget_gtk_1to2-UgtkSetting.$(OBJEXT) \ uget_gtk_1to2-main.$(OBJEXT) uget_gtk_1to2_OBJECTS = $(am_uget_gtk_1to2_OBJECTS) uget_gtk_1to2_DEPENDENCIES = $(top_builddir)/uget/libuget.a \ $(top_builddir)/uglib/libuglib.a uget_gtk_1to2_LINK = $(CCLD) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = am__depfiles_maybe = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(uget_gtk_1to2_SOURCES) DIST_SOURCES = $(uget_gtk_1to2_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_INDICATOR_CFLAGS = @APP_INDICATOR_CFLAGS@ APP_INDICATOR_LIBS = @APP_INDICATOR_LIBS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_CONFIG = @CURL_CONFIG@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETCONF = @GETCONF@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LFS_CFLAGS = @LFS_CFLAGS@ LFS_LDFLAGS = @LFS_LDFLAGS@ LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@ LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBPWMD_CFLAGS = @LIBPWMD_CFLAGS@ LIBPWMD_LIBS = @LIBPWMD_LIBS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = subdir-objects no-dependencies uget_gtk_1to2_CPPFLAGS = \ -DDATADIR='"$(datadir)"' \ -I$(top_srcdir)/ui-gtk \ -I$(top_srcdir)/uget \ -I$(top_srcdir)/uglib uget_gtk_1to2_CFLAGS = \ @GTK_CFLAGS@ uget_gtk_1to2_LDADD = \ $(top_builddir)/uget/libuget.a \ $(top_builddir)/uglib/libuglib.a \ @GTK_LIBS@ uget_gtk_1to2_SOURCES = \ UgCategory.c \ UgData1.c \ UgData-download.c \ UgDataset.c \ UgMarkup.c \ UgRegistry1.c \ UgSetting.c \ Ugtk1to2.c \ ../ui-gtk/UgtkSetting.c \ main.c noinst_HEADERS = \ UgCategory.h \ UgData1.h \ UgData-download.h \ UgDataset.h \ UgMarkup.h \ UgRegistry1.h \ UgSetting.h \ Ugtk1to2.h \ ../ui-gtk/UgtkSetting.h all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ui-gtk-1to2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ui-gtk-1to2/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) ../ui-gtk/$(am__dirstamp): @$(MKDIR_P) ../ui-gtk @: > ../ui-gtk/$(am__dirstamp) ../ui-gtk/uget_gtk_1to2-UgtkSetting.$(OBJEXT): \ ../ui-gtk/$(am__dirstamp) uget-gtk-1to2$(EXEEXT): $(uget_gtk_1to2_OBJECTS) $(uget_gtk_1to2_DEPENDENCIES) $(EXTRA_uget_gtk_1to2_DEPENDENCIES) @rm -f uget-gtk-1to2$(EXEEXT) $(AM_V_CCLD)$(uget_gtk_1to2_LINK) $(uget_gtk_1to2_OBJECTS) $(uget_gtk_1to2_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../ui-gtk/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(AM_V_CC)$(COMPILE) -c -o $@ $< .c.obj: $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` uget_gtk_1to2-UgCategory.o: UgCategory.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgCategory.o `test -f 'UgCategory.c' || echo '$(srcdir)/'`UgCategory.c uget_gtk_1to2-UgCategory.obj: UgCategory.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgCategory.obj `if test -f 'UgCategory.c'; then $(CYGPATH_W) 'UgCategory.c'; else $(CYGPATH_W) '$(srcdir)/UgCategory.c'; fi` uget_gtk_1to2-UgData1.o: UgData1.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgData1.o `test -f 'UgData1.c' || echo '$(srcdir)/'`UgData1.c uget_gtk_1to2-UgData1.obj: UgData1.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgData1.obj `if test -f 'UgData1.c'; then $(CYGPATH_W) 'UgData1.c'; else $(CYGPATH_W) '$(srcdir)/UgData1.c'; fi` uget_gtk_1to2-UgData-download.o: UgData-download.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgData-download.o `test -f 'UgData-download.c' || echo '$(srcdir)/'`UgData-download.c uget_gtk_1to2-UgData-download.obj: UgData-download.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgData-download.obj `if test -f 'UgData-download.c'; then $(CYGPATH_W) 'UgData-download.c'; else $(CYGPATH_W) '$(srcdir)/UgData-download.c'; fi` uget_gtk_1to2-UgDataset.o: UgDataset.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgDataset.o `test -f 'UgDataset.c' || echo '$(srcdir)/'`UgDataset.c uget_gtk_1to2-UgDataset.obj: UgDataset.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgDataset.obj `if test -f 'UgDataset.c'; then $(CYGPATH_W) 'UgDataset.c'; else $(CYGPATH_W) '$(srcdir)/UgDataset.c'; fi` uget_gtk_1to2-UgMarkup.o: UgMarkup.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgMarkup.o `test -f 'UgMarkup.c' || echo '$(srcdir)/'`UgMarkup.c uget_gtk_1to2-UgMarkup.obj: UgMarkup.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgMarkup.obj `if test -f 'UgMarkup.c'; then $(CYGPATH_W) 'UgMarkup.c'; else $(CYGPATH_W) '$(srcdir)/UgMarkup.c'; fi` uget_gtk_1to2-UgRegistry1.o: UgRegistry1.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgRegistry1.o `test -f 'UgRegistry1.c' || echo '$(srcdir)/'`UgRegistry1.c uget_gtk_1to2-UgRegistry1.obj: UgRegistry1.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgRegistry1.obj `if test -f 'UgRegistry1.c'; then $(CYGPATH_W) 'UgRegistry1.c'; else $(CYGPATH_W) '$(srcdir)/UgRegistry1.c'; fi` uget_gtk_1to2-UgSetting.o: UgSetting.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgSetting.o `test -f 'UgSetting.c' || echo '$(srcdir)/'`UgSetting.c uget_gtk_1to2-UgSetting.obj: UgSetting.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-UgSetting.obj `if test -f 'UgSetting.c'; then $(CYGPATH_W) 'UgSetting.c'; else $(CYGPATH_W) '$(srcdir)/UgSetting.c'; fi` uget_gtk_1to2-Ugtk1to2.o: Ugtk1to2.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-Ugtk1to2.o `test -f 'Ugtk1to2.c' || echo '$(srcdir)/'`Ugtk1to2.c uget_gtk_1to2-Ugtk1to2.obj: Ugtk1to2.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-Ugtk1to2.obj `if test -f 'Ugtk1to2.c'; then $(CYGPATH_W) 'Ugtk1to2.c'; else $(CYGPATH_W) '$(srcdir)/Ugtk1to2.c'; fi` ../ui-gtk/uget_gtk_1to2-UgtkSetting.o: ../ui-gtk/UgtkSetting.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o ../ui-gtk/uget_gtk_1to2-UgtkSetting.o `test -f '../ui-gtk/UgtkSetting.c' || echo '$(srcdir)/'`../ui-gtk/UgtkSetting.c ../ui-gtk/uget_gtk_1to2-UgtkSetting.obj: ../ui-gtk/UgtkSetting.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o ../ui-gtk/uget_gtk_1to2-UgtkSetting.obj `if test -f '../ui-gtk/UgtkSetting.c'; then $(CYGPATH_W) '../ui-gtk/UgtkSetting.c'; else $(CYGPATH_W) '$(srcdir)/../ui-gtk/UgtkSetting.c'; fi` uget_gtk_1to2-main.o: main.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c uget_gtk_1to2-main.obj: main.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uget_gtk_1to2_CPPFLAGS) $(CPPFLAGS) $(uget_gtk_1to2_CFLAGS) $(CFLAGS) -c -o uget_gtk_1to2-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f ../ui-gtk/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/ui-gtk-1to2/UgSetting.c0000664000175000017500000005252013602733704013456 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include "UgData-download.h" #include "UgSetting.h" static void ug_string_list_in_markup (GList** string_list, GMarkupParseContext* context); static void ug_string_list_to_markup (GList** string_list, UgMarkup* markup); static void ug_schedule_state_in_markup (guint (*state)[7][24], GMarkupParseContext* context); static void ug_schedule_state_to_markup (guint (*state)[7][24], UgMarkup* markup); // ---------------------------------------------------------------------------- // UgDownloadColumnSetting static const UgDataEntry ug_download_column_setting_entry[] = { {"completed", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, completed), UG_TYPE_INT, NULL, NULL}, {"total", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, total), UG_TYPE_INT, NULL, NULL}, {"percent", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, percent), UG_TYPE_INT, NULL, NULL}, {"elapsed", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, elapsed), UG_TYPE_INT, NULL, NULL}, {"left", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, left), UG_TYPE_INT, NULL, NULL}, {"speed", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, speed), UG_TYPE_INT, NULL, NULL}, {"UploadSpeed", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, upload_speed), UG_TYPE_INT, NULL, NULL}, {"uploaded", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, uploaded), UG_TYPE_INT, NULL, NULL}, {"ratio", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, ratio), UG_TYPE_INT, NULL, NULL}, {"retry", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, retry), UG_TYPE_INT, NULL, NULL}, {"category", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, category), UG_TYPE_INT, NULL, NULL}, {"URL", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, url), UG_TYPE_INT, NULL, NULL}, {"AddedOn", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, added_on), UG_TYPE_INT, NULL, NULL}, {"CompletedOn", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, completed_on), UG_TYPE_INT, NULL, NULL}, {"sort-nth", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, sort.nth), UG_TYPE_INT, NULL, NULL}, {"sort-order", G_STRUCT_OFFSET (struct UgDownloadColumnSetting, sort.order), UG_TYPE_INT, NULL, NULL}, {NULL} // null-terminated }; static const UgData1Interface ug_download_column_setting_iface = { sizeof (struct UgDownloadColumnSetting), "DownloadColumnSetting", ug_download_column_setting_entry, NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // UgSummarySetting static const UgDataEntry ug_summary_setting_entry[] = { {"name", G_STRUCT_OFFSET (struct UgSummarySetting, name), UG_TYPE_INT, NULL, NULL}, {"folder", G_STRUCT_OFFSET (struct UgSummarySetting, folder), UG_TYPE_INT, NULL, NULL}, {"category", G_STRUCT_OFFSET (struct UgSummarySetting, category), UG_TYPE_INT, NULL, NULL}, {"URL", G_STRUCT_OFFSET (struct UgSummarySetting, url), UG_TYPE_INT, NULL, NULL}, {"message", G_STRUCT_OFFSET (struct UgSummarySetting, message), UG_TYPE_INT, NULL, NULL}, {NULL} // null-terminated }; static const UgData1Interface ug_summary_setting_iface = { sizeof (struct UgSummarySetting), "SummarySetting", ug_summary_setting_entry, NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // UgWindowSetting static const UgDataEntry ug_window_setting_entry[] = { {"Toolbar", G_STRUCT_OFFSET (struct UgWindowSetting, toolbar), UG_TYPE_INT, NULL, NULL}, {"Statusbar", G_STRUCT_OFFSET (struct UgWindowSetting, statusbar), UG_TYPE_INT, NULL, NULL}, {"Category", G_STRUCT_OFFSET (struct UgWindowSetting, category), UG_TYPE_INT, NULL, NULL}, {"Summary", G_STRUCT_OFFSET (struct UgWindowSetting, summary), UG_TYPE_INT, NULL, NULL}, {"Banner", G_STRUCT_OFFSET (struct UgWindowSetting, banner), UG_TYPE_INT, NULL, NULL}, {"x", G_STRUCT_OFFSET (struct UgWindowSetting, x) , UG_TYPE_INT, NULL, NULL}, {"y", G_STRUCT_OFFSET (struct UgWindowSetting, y), UG_TYPE_INT, NULL, NULL}, {"width", G_STRUCT_OFFSET (struct UgWindowSetting, width), UG_TYPE_INT, NULL, NULL}, {"height", G_STRUCT_OFFSET (struct UgWindowSetting, height), UG_TYPE_INT, NULL, NULL}, {"maximized", G_STRUCT_OFFSET (struct UgWindowSetting, maximized), UG_TYPE_INT, NULL, NULL}, {NULL}, // null-terminated }; static const UgData1Interface ug_window_setting_iface = { sizeof (struct UgWindowSetting), "WindowSetting", ug_window_setting_entry, NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // UgUserInterfaceSetting static const UgDataEntry ug_user_interface_setting_entry[] = { {"CloseConfirmation", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, close_confirmation), UG_TYPE_INT, NULL, NULL}, {"CloseAction", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, close_action), UG_TYPE_INT, NULL, NULL}, {"DeleteConfirmation", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, delete_confirmation), UG_TYPE_INT, NULL, NULL}, {"ShowTrayIcon", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, show_trayicon), UG_TYPE_INT, NULL, NULL}, {"StartInTray", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, start_in_tray), UG_TYPE_INT, NULL, NULL}, {"StartInOfflineMode", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, start_in_offline_mode), UG_TYPE_INT, NULL, NULL}, {"StartNotification", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, start_notification), UG_TYPE_INT, NULL, NULL}, {"SoundNotification", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, sound_notification), UG_TYPE_INT, NULL, NULL}, {"ApplyRecently", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, apply_recently), UG_TYPE_INT, NULL, NULL}, #ifdef HAVE_APP_INDICATOR {"AppIndicator", G_STRUCT_OFFSET (struct UgUserInterfaceSetting, app_indicator), UG_TYPE_INT, NULL, NULL}, #endif {NULL}, // null-terminated }; static const UgData1Interface ug_user_interface_setting_iface = { sizeof (struct UgUserInterfaceSetting), "UserInterfaceSetting", ug_user_interface_setting_entry, NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // UgClipboardSetting static const UgDataEntry ug_clipboard_setting_entry[] = { {"pattern", G_STRUCT_OFFSET (struct UgClipboardSetting, pattern), UG_TYPE_STRING, NULL, NULL}, {"monitor", G_STRUCT_OFFSET (struct UgClipboardSetting, monitor), UG_TYPE_INT, NULL, NULL}, {"quiet", G_STRUCT_OFFSET (struct UgClipboardSetting, quiet), UG_TYPE_INT, NULL, NULL}, {"NthCategory", G_STRUCT_OFFSET (struct UgClipboardSetting, nth_category), UG_TYPE_INT, NULL, NULL}, {NULL}, // null-terminated }; static const UgData1Interface ug_clipboard_setting_iface = { sizeof (struct UgClipboardSetting), "ClipboardSetting", ug_clipboard_setting_entry, NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // UgSpeedLimitSetting static const UgDataEntry ug_speed_limit_setting_entry[] = { {"NormalUpload", G_STRUCT_OFFSET (struct UgSpeedLimitSetting, normal.upload), UG_TYPE_UINT, NULL, NULL}, {"NormalDownload", G_STRUCT_OFFSET (struct UgSpeedLimitSetting, normal.download), UG_TYPE_UINT, NULL, NULL}, {"SchedulerUpload", G_STRUCT_OFFSET (struct UgSpeedLimitSetting, scheduler.upload), UG_TYPE_UINT, NULL, NULL}, {"SchedulerDownload", G_STRUCT_OFFSET (struct UgSpeedLimitSetting, scheduler.download), UG_TYPE_UINT, NULL, NULL}, {NULL}, // null-terminated }; static const UgData1Interface ug_speed_limit_setting_iface = { sizeof (struct UgSpeedLimitSetting), "SpeedLimitSetting", ug_speed_limit_setting_entry, NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // SchedulerSetting static const UgDataEntry ug_scheduler_setting_entry[] = { {"enable", G_STRUCT_OFFSET (struct UgSchedulerSetting, enable), UG_TYPE_INT, NULL, NULL}, {"state", G_STRUCT_OFFSET (struct UgSchedulerSetting, state), UG_TYPE_CUSTOM, ug_schedule_state_in_markup, ug_schedule_state_to_markup}, {NULL}, // null-terminated }; static const UgData1Interface ug_scheduler_setting_iface = { sizeof (struct UgSchedulerSetting), "SchedulerSetting", ug_scheduler_setting_entry, NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // PluginSetting static const UgDataEntry ug_plugin_setting_entry[] = { {"aria2-enable", G_STRUCT_OFFSET (struct UgPluginSetting, aria2.enable), UG_TYPE_INT, NULL, NULL}, {"aria2-launch", G_STRUCT_OFFSET (struct UgPluginSetting, aria2.launch), UG_TYPE_INT, NULL, NULL}, {"aria2-shutdown", G_STRUCT_OFFSET (struct UgPluginSetting, aria2.shutdown), UG_TYPE_INT, NULL, NULL}, {"aria2-path", G_STRUCT_OFFSET (struct UgPluginSetting, aria2.path), UG_TYPE_STRING, NULL, NULL}, {"aria2-args", G_STRUCT_OFFSET (struct UgPluginSetting, aria2.args), UG_TYPE_STRING, NULL, NULL}, {"aria2-uri", G_STRUCT_OFFSET (struct UgPluginSetting, aria2.uri), UG_TYPE_STRING, NULL, NULL}, {NULL}, // null-terminated }; static const UgData1Interface ug_plugin_setting_iface = { sizeof (struct UgPluginSetting), "PluginSetting", ug_plugin_setting_entry, NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // CommandlineSetting static const UgDataEntry ug_commandline_setting_entry[] = { {"quiet", G_STRUCT_OFFSET (struct UgCommandlineSetting, quiet), UG_TYPE_INT, NULL, NULL}, {"CategoryIndex", G_STRUCT_OFFSET (struct UgCommandlineSetting, category_index), UG_TYPE_INT, NULL, NULL}, {NULL}, // null-terminated }; static const UgData1Interface ug_commandline_setting_iface = { sizeof (struct UgCommandlineSetting), "CommandlineSetting", ug_commandline_setting_entry, NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // UgSetting static const UgDataEntry ug_setting_data_entry[] = { {"LaunchApp", G_STRUCT_OFFSET (UgSetting, launch.active), UG_TYPE_INT, NULL, NULL}, {"LaunchAppTypes", G_STRUCT_OFFSET (UgSetting, launch.types), UG_TYPE_STRING, NULL, NULL}, {"AutoSave", G_STRUCT_OFFSET (UgSetting, auto_save.active), UG_TYPE_INT, NULL, NULL}, {"AutoSaveInterval",G_STRUCT_OFFSET (UgSetting, auto_save.interval),UG_TYPE_INT, NULL, NULL}, {"DownloadColumn", G_STRUCT_OFFSET (UgSetting, download_column), UG_TYPE_STATIC, NULL, NULL}, {"Summary", G_STRUCT_OFFSET (UgSetting, summary), UG_TYPE_STATIC, NULL, NULL}, {"Window", G_STRUCT_OFFSET (UgSetting, window), UG_TYPE_STATIC, NULL, NULL}, {"UserInterface", G_STRUCT_OFFSET (UgSetting, ui), UG_TYPE_STATIC, NULL, NULL}, {"Clipboard", G_STRUCT_OFFSET (UgSetting, clipboard), UG_TYPE_STATIC, NULL, NULL}, {"SpeedLimit", G_STRUCT_OFFSET (UgSetting, speed_limit), UG_TYPE_STATIC, NULL, NULL}, {"Scheduler", G_STRUCT_OFFSET (UgSetting, scheduler), UG_TYPE_STATIC, NULL, NULL}, {"Commandline", G_STRUCT_OFFSET (UgSetting, commandline), UG_TYPE_STATIC, NULL, NULL}, {"Plug-in", G_STRUCT_OFFSET (UgSetting, plugin), UG_TYPE_STATIC, NULL, NULL}, // {"OfflineMode", G_STRUCT_OFFSET (UgSetting, offline_mode), UG_TYPE_INT, NULL, NULL}, // {"Shutdown", G_STRUCT_OFFSET (UgSetting, shutdown), UG_TYPE_INT, NULL, NULL}, {"FolderList", G_STRUCT_OFFSET (UgSetting, folder_list), UG_TYPE_CUSTOM, ug_string_list_in_markup, ug_string_list_to_markup}, {NULL}, // null-terminated }; static const UgData1Interface ug_setting_iface = { sizeof (UgSetting), // instance_size "UgSetting", // name ug_setting_data_entry, // entry NULL, NULL, NULL, }; // ---------------------------------------------------------------------------- // "FolderList" UgMarkup functions // static void ug_string_list_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** string_list, GError** error) { guint index; for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "value") == 0) *string_list = g_list_prepend (*string_list, g_strdup (attr_values[index])); } // skip end_element() one times. g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); } // GList** user_data static GMarkupParser ug_string_list_parser = { (gpointer) ug_string_list_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; static void ug_string_list_in_markup (GList** string_list, GMarkupParseContext* context) { g_markup_parse_context_push (context, &ug_string_list_parser, string_list); } static void ug_string_list_to_markup (GList** string_list, UgMarkup* markup) { GList* link; for (link = g_list_last (*string_list); link; link = link->prev) { ug_markup_write_element_start (markup, "string value='%s'", link->data); ug_markup_write_element_end (markup, "string"); } } // ---------------------------------------------------------------------------- // "UgSchedulerSetting" UgMarkup functions // void ug_schedule_state_text (GMarkupParseContext *context, const gchar *text, gsize text_len, guint (*state)[7][24], GError **error) { guint weekdays, dayhours; for (weekdays = 0; weekdays < 7; weekdays++) { for (dayhours = 0; dayhours < 24; dayhours++) { (*state)[weekdays][dayhours] = atoi (text); text = strchr (text, ','); if (text) text++; } } } // guint (*state)[7][24] static GMarkupParser ug_schedule_state_parser = { (gpointer) NULL, (gpointer) g_markup_parse_context_pop, (gpointer) ug_schedule_state_text, NULL, NULL }; static void ug_schedule_state_in_markup (guint (*state)[7][24], GMarkupParseContext* context) { g_markup_parse_context_push (context, &ug_schedule_state_parser, state); } static void ug_schedule_state_to_markup (guint (*state)[7][24], UgMarkup* markup) { guint weekdays, dayhours; GString* gstr; gstr = g_string_sized_new (2 * 7 * 24 + 1); for (weekdays = 0; weekdays < 7; weekdays++) { for (dayhours = 0; dayhours < 24; dayhours++) { g_string_append_printf (gstr, "%u,", (*state)[weekdays][dayhours]); } } ug_markup_write_text (markup, gstr->str, gstr->len); g_string_free (gstr, TRUE); } // ---------------------------------------------------------------------------- // "UgSetting" UgMarkup functions // static void ug_setting_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, UgSetting* setting, GError** error) { guint index; // if (strcmp (element_name, "UgSetting") != 0) { // g_set_error (error, G_MARKUP_ERROR, // G_MARKUP_ERROR_UNKNOWN_ELEMENT, "Unknown element"); // return; // } for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "version") != 0) continue; if (strcmp (attr_values[index], "1") == 0) { g_markup_parse_context_push (context, &ug_data1_parser, setting); return; } } g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, "Unknown element"); } // UgSetting* user_data static GMarkupParser ug_setting_parser = { (gpointer) ug_setting_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; // ---------------------------------------------------------------------------- // "UgSetting" functions // void ug_setting_init (UgSetting* setting) { guint weekdays, dayhours; setting->iface = &ug_setting_iface; // "SummarySetting" setting->summary.iface = &ug_summary_setting_iface; setting->summary.name = TRUE; setting->summary.folder = TRUE; setting->summary.category = FALSE; setting->summary.url = FALSE; setting->summary.message = TRUE; // "DownloadColumnSetting" setting->download_column.iface = &ug_download_column_setting_iface; setting->download_column.changed_count = 1; setting->download_column.completed = TRUE; setting->download_column.total = TRUE; setting->download_column.percent = TRUE; setting->download_column.elapsed = TRUE; setting->download_column.left = TRUE; setting->download_column.speed = TRUE; setting->download_column.upload_speed = TRUE; setting->download_column.uploaded = FALSE; setting->download_column.ratio = TRUE; setting->download_column.retry = TRUE; setting->download_column.category = FALSE; setting->download_column.url = FALSE; setting->download_column.added_on = TRUE; setting->download_column.completed_on = FALSE; // default sorted column setting->download_column.sort.nth = 0; setting->download_column.sort.order = 0; // "WindowSetting" setting->window.iface = &ug_window_setting_iface; setting->window.toolbar = TRUE; setting->window.statusbar = TRUE; setting->window.category = TRUE; setting->window.summary = TRUE; setting->window.banner = TRUE; setting->window.x = 0; setting->window.y = 0; setting->window.width = 0; setting->window.height = 0; setting->window.maximized = FALSE; // "UserInterfaceSetting" setting->ui.iface = &ug_user_interface_setting_iface; setting->ui.close_confirmation = TRUE; setting->ui.close_action = 0; setting->ui.delete_confirmation = TRUE; setting->ui.show_trayicon = TRUE; setting->ui.start_in_tray = FALSE; setting->ui.start_in_offline_mode = FALSE; setting->ui.start_notification = TRUE; setting->ui.sound_notification = TRUE; setting->ui.apply_recently = TRUE; #ifdef HAVE_APP_INDICATOR setting->ui.app_indicator = TRUE; #endif // "ClipboardSetting" setting->clipboard.iface = &ug_clipboard_setting_iface; g_free (setting->clipboard.pattern); setting->clipboard.pattern = g_strdup (UG_APP_GTK_CLIPBOARD_PATTERN); setting->clipboard.monitor = TRUE; setting->clipboard.quiet = FALSE; setting->clipboard.nth_category = 0; // "SpeedLimitSetting" setting->speed_limit.iface = &ug_speed_limit_setting_iface; setting->speed_limit.normal.upload = 0; setting->speed_limit.normal.download = 0; setting->speed_limit.scheduler.upload = 0; setting->speed_limit.scheduler.download = 0; // "SchedulerSetting" setting->scheduler.iface = &ug_scheduler_setting_iface; setting->scheduler.enable = FALSE; for (weekdays = 0; weekdays < 7; weekdays++) { for (dayhours = 0; dayhours < 24; dayhours++) setting->scheduler.state[weekdays][dayhours] = UG_SCHEDULE_NORMAL; } // "CommandlineSetting" setting->commandline.iface = &ug_commandline_setting_iface; setting->commandline.quiet = FALSE; setting->commandline.category_index = -1; // "PluginSetting" setting->plugin.iface = &ug_plugin_setting_iface; setting->plugin.aria2.enable = FALSE; setting->plugin.aria2.launch = TRUE; setting->plugin.aria2.shutdown = TRUE; setting->plugin.aria2.path = g_strdup ("aria2c"); setting->plugin.aria2.args = g_strdup ("--enable-rpc=true -D --check-certificate=false"); setting->plugin.aria2.uri = g_strdup ("http://localhost:6800/rpc"); // "FolderList" setting->folder_list = NULL; // Others setting->offline_mode = FALSE; setting->when_complete = 0; setting->launch.active = TRUE; setting->launch.types = g_strdup (UG_APP_GTK_LAUNCH_APP_TYPES); setting->auto_save.active = TRUE; setting->auto_save.interval = 3; } gboolean ug_setting_save (UgSetting* setting, const gchar* file) { UgMarkup* markup; markup = ug_markup_new (); if (ug_markup_write_start (markup, file, TRUE)) { ug_markup_write_element_start (markup, "UgSetting version='1'"); ug_data1_write_markup ((UgData1*) setting, markup); ug_markup_write_element_end (markup, "UgSetting"); ug_markup_write_end (markup); return TRUE; } return FALSE; } gboolean ug_setting_load (UgSetting* setting, const gchar* file) { return ug_markup_parse (file, &ug_setting_parser, setting); } uget-2.2.3/ui-gtk-1to2/Ugtk1to2.c0000664000175000017500000004025713602733704013171 00000000000000/* * * Copyright (C) 2013-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #include "Ugtk1to2.h" #include "UgData-download.h" #define UGTK_APP_DIR "uGet" #define UGTK_APP_SETTING_FILE "Setting.json" #define UGTK_APP_SETTING_FILE1 "Setting.xml" #define UGTK_APP_CATEGORY_FILE "CategoryList.xml" #define UGTK_APP_DOWNLOAD_FILE "DownloadList.xml" static void ugtk_setting_set_by_v1 (UgtkSetting* setting, UgSetting* setting1) { int weekdays, dayhours; GList* glink; UgLink* ulink; int length; ugtk_setting_init (setting); ugtk_setting_reset (setting); // WindowSetting setting->window.toolbar = setting1->window.toolbar; setting->window.statusbar = setting1->window.statusbar; setting->window.category = setting1->window.category; setting->window.summary = setting1->window.summary; setting->window.banner = setting1->window.banner; setting->window.toolbar = setting1->window.toolbar; setting->window.x = setting1->window.x; setting->window.y = setting1->window.y; setting->window.width = setting1->window.width; setting->window.height = setting1->window.height; setting->window.maximized = setting1->window.maximized; // SummarySetting setting->summary.name = setting1->summary.name; setting->summary.folder = setting1->summary.folder; setting->summary.category = setting1->summary.category; setting->summary.uri = setting1->summary.url; setting->summary.message = setting1->summary.message; // DownloadColumn setting->download_column.complete = setting1->download_column.completed; setting->download_column.total = setting1->download_column.total; setting->download_column.percent = setting1->download_column.percent; setting->download_column.elapsed = setting1->download_column.elapsed; setting->download_column.left = setting1->download_column.left; setting->download_column.speed = setting1->download_column.speed; setting->download_column.upload_speed = setting1->download_column.upload_speed; setting->download_column.uploaded = setting1->download_column.uploaded; setting->download_column.ratio = setting1->download_column.ratio; setting->download_column.category = setting1->download_column.category; setting->download_column.uri = setting1->download_column.url; setting->download_column.added_on = setting1->download_column.added_on; setting->download_column.completed_on = setting1->download_column.completed_on; setting->download_column.sort.type = setting1->download_column.sort.order; setting->download_column.sort.nth = setting1->download_column.sort.nth + 1; // UserInterface setting->ui.exit_confirmation = setting1->ui.close_confirmation; switch (setting1->ui.close_action) { default: case 0: // close_action == 0, Let user decide. setting->ui.exit_confirmation = TRUE; break; case 1: // close_action == 1, Minimize to tray. setting->ui.close_to_tray = TRUE; break; case 2: // close_action == 2, Exit Uget. setting->ui.close_to_tray = FALSE; } setting->ui.delete_confirmation = setting1->ui.delete_confirmation; setting->ui.show_trayicon = setting1->ui.show_trayicon; setting->ui.start_in_tray = setting1->ui.start_in_tray; setting->ui.start_in_offline_mode = setting1->ui.start_in_offline_mode; setting->ui.start_notification = setting1->ui.start_notification; setting->ui.sound_notification = setting1->ui.sound_notification; setting->ui.apply_recent = setting1->ui.apply_recently; #ifdef HAVE_APP_INDICATOR setting->ui.app_indicator = TRUE; #endif // ClipboardSetting ug_free (setting->clipboard.pattern); setting->clipboard.pattern = setting1->clipboard.pattern; setting1->clipboard.pattern = NULL; setting->clipboard.monitor = setting1->clipboard.monitor; setting->clipboard.quiet = setting1->clipboard.quiet; setting->clipboard.nth_category = setting1->clipboard.nth_category; if (setting->clipboard.nth_category == -1) setting->clipboard.nth_category = 0; // SchedulerSetting setting->scheduler.enable = setting1->scheduler.enable; for (weekdays = 0; weekdays < 7; weekdays++) { for (dayhours = 0; dayhours < 24; dayhours++) { setting->scheduler.state.at[weekdays*24 + dayhours] = setting1->scheduler.state[weekdays][dayhours]; } } // CommandlineSetting setting->commandline.quiet = setting1->commandline.quiet; setting->commandline.nth_category = setting1->commandline.category_index; if (setting->commandline.nth_category == -1) setting->commandline.nth_category = 0; // PluginSetting setting->plugin_order = setting1->plugin.aria2.enable; setting->aria2.launch = setting1->plugin.aria2.launch; setting->aria2.shutdown = setting1->plugin.aria2.shutdown; ug_free (setting->aria2.path); setting->aria2.path = setting1->plugin.aria2.path; setting1->plugin.aria2.path = NULL; ug_free (setting->aria2.args); setting->aria2.args = setting1->plugin.aria2.args; setting1->plugin.aria2.args = NULL; ug_free (setting->aria2.uri); // aria2 URI length = strlen (setting1->plugin.aria2.uri); if (setting1->plugin.aria2.uri[length-3] == 'r' && setting1->plugin.aria2.uri[length-2] == 'p' && setting1->plugin.aria2.uri[length-1] == 'c') { setting->aria2.uri = ug_malloc (length + 4 + 1); // + "json" + '\0' setting->aria2.uri[length-3] = 0; strncpy (setting->aria2.uri, setting1->plugin.aria2.uri, length-3); strcat (setting->aria2.uri, "jsonrpc"); } else { setting->aria2.uri = setting1->plugin.aria2.uri; setting1->plugin.aria2.uri = NULL; } // AutoSaveSetting setting->auto_save.enable = setting1->auto_save.active; setting->auto_save.interval = setting1->auto_save.interval; // FolderHistory for (glink = setting1->folder_list; glink; glink = glink->next) { ulink = ug_link_new (); ulink->data = glink->data; glink->data = NULL; ug_list_append (&setting->folder_history, ulink); } // completion setting->completion.remember = TRUE; } static void uget_node_set_by_dataset (UgetNode* node, UgDataset* dataset) { union { UgProgress* progress; UgRelation* relation; UgCommon* common; UgProxy* proxy; UgHttp* http; UgFtp* ftp; } old; union { UgetProgress* progress; UgetRelation* relation; UgetCommon* common; UgetProxy* proxy; UgetHttp* http; UgetFtp* ftp; } new; old.relation = ug_dataset_get (dataset, UgRelationInfo, 0); if (old.relation) { new.relation = ug_info_realloc (node->info, UgetRelationInfo); if (old.relation->hints & UG_HINT_PAUSED) new.relation->group |= UGET_GROUP_PAUSED; if (old.relation->hints & UG_HINT_ERROR) new.relation->group |= UGET_GROUP_ERROR; if (old.relation->hints & UG_HINT_COMPLETED) new.relation->group |= UGET_GROUP_COMPLETED; if (old.relation->hints & UG_HINT_FINISHED) new.relation->group |= UGET_GROUP_FINISHED; else if (old.relation->hints & UG_HINT_RECYCLED) new.relation->group |= UGET_GROUP_RECYCLED; else new.relation->group |= UGET_GROUP_QUEUING; } old.common = ug_dataset_get (dataset, UgCommonInfo, 0); if (old.common) { new.common = ug_info_realloc (node->info, UgetCommonInfo); new.common->name = old.common->name; old.common->name = NULL; if (new.common->name == NULL && old.common->file) new.common->name = ug_strdup (old.common->file); new.common->uri = old.common->url; old.common->url = NULL; new.common->mirrors = old.common->mirrors; old.common->mirrors = NULL; new.common->folder = old.common->folder; old.common->folder = NULL; new.common->file = old.common->file; old.common->file = NULL; new.common->user = old.common->user; old.common->user = NULL; new.common->password = old.common->password; old.common->password = NULL; new.common->connect_timeout = old.common->connect_timeout; new.common->transmit_timeout = old.common->transmit_timeout; new.common->max_connections = old.common->max_connections; new.common->max_upload_speed = old.common->max_upload_speed; new.common->max_download_speed = old.common->max_download_speed; new.common->timestamp = old.common->retrieve_timestamp; new.common->retry_delay = old.common->retry_delay; new.common->retry_limit = old.common->retry_limit; new.common->retry_count = old.common->retry_count; } old.proxy = ug_dataset_get (dataset, UgProxyInfo, 0); if (old.proxy) { new.proxy = ug_info_realloc (node->info, UgetProxyInfo); new.proxy->host = old.proxy->host; old.proxy->host = NULL; new.proxy->port = old.proxy->port; new.proxy->type = old.proxy->type; new.proxy->user = old.proxy->user; old.proxy->user = NULL; new.proxy->password = old.proxy->password; old.proxy->password = NULL; } old.http = ug_dataset_get (dataset, UgHttpInfo, 0); if (old.http) { new.http = ug_info_realloc (node->info, UgetHttpInfo); new.http->user = old.http->user; old.http->user = NULL; new.http->password = old.http->password; old.http->password = NULL; new.http->referrer = old.http->referrer; old.http->referrer = NULL; new.http->user_agent = old.http->user_agent; old.http->user_agent = NULL; new.http->post_data = old.http->post_data; old.http->post_data = NULL; new.http->post_file = old.http->post_file; old.http->post_file = NULL; new.http->cookie_data = old.http->cookie_data; old.http->cookie_data = NULL; new.http->cookie_file = old.http->cookie_file; old.http->cookie_file = NULL; new.http->redirection_limit = old.http->redirection_limit; new.http->redirection_count = old.http->redirection_count; } old.ftp = ug_dataset_get (dataset, UgFtpInfo, 0); if (old.ftp) { new.ftp = ug_info_realloc (node->info, UgetFtpInfo); new.ftp->user = old.ftp->user; old.ftp->user = NULL; new.ftp->password = old.ftp->password; old.ftp->password = NULL; new.ftp->active_mode = old.ftp->active_mode; } old.progress = ug_dataset_get (dataset, UgProgressInfo, 0); if (old.progress) { new.progress = ug_info_realloc (node->info, UgetProgressInfo); new.progress->complete = old.progress->complete; new.progress->total = old.progress->total; new.progress->complete = old.progress->complete; new.progress->percent = old.progress->percent; new.progress->uploaded = old.progress->uploaded; new.progress->ratio = old.progress->ratio; new.progress->elapsed = old.progress->consume_time; new.progress->left = old.progress->remain_time; } } static UgetNode* uget_node_from_category (UgCategory* category1) { GList* link; UgetNode* node; UgetNode* dnode; UgetCommon* common; UgetCategory* category; node = uget_node_new (NULL); uget_node_set_by_dataset (node, category1->defaults); category = ug_info_realloc (node->info, UgetCategoryInfo); category->active_limit = category1->active_limit; category->finished_limit = category1->finished_limit; category->recycled_limit = category1->recycled_limit; common = ug_info_realloc(node->info, UgetCommonInfo); common->name = category1->name; category1->name = NULL; // other *(char**)ug_array_alloc (&category->schemes, 1) = ug_strdup ("http"); *(char**)ug_array_alloc (&category->schemes, 1) = ug_strdup ("ftp"); *(char**)ug_array_alloc (&category->hosts, 1) = ug_strdup (".com"); *(char**)ug_array_alloc (&category->hosts, 1) = ug_strdup (".org"); *(char**)ug_array_alloc (&category->file_exts, 1) = ug_strdup ("torrent"); *(char**)ug_array_alloc (&category->file_exts, 1) = ug_strdup ("metalink"); // for (link = category1->indices; link; link = link->next) { dnode = uget_node_new (NULL); uget_node_set_by_dataset (dnode, (UgDataset*) link->data); uget_node_append (node, dnode); } return node; } Ugtk1to2* ugtk_1to2_new (const char* config_path) { Ugtk1to2* u1t2; u1t2 = g_malloc0 (sizeof (Ugtk1to2)); ug_setting_init (&u1t2->setting1); uget_node_init (&u1t2->real, NULL); u1t2->config_path = g_strdup (config_path); return u1t2; } void ugtk_1to2_free (Ugtk1to2* u1t2) { g_free (u1t2); } int ugtk_1to2_load_setting (Ugtk1to2* u1t2) { gchar* path; int result; // load setting path = g_build_filename (u1t2->config_path, UGTK_APP_SETTING_FILE1, NULL); result = ug_setting_load (&u1t2->setting1, path); g_free (path); if (result == TRUE) ugtk_setting_set_by_v1 (&u1t2->setting, &u1t2->setting1); return result; } int ugtk_1to2_save_setting (Ugtk1to2* u1t2) { gchar* path; int result; // save setting path = g_build_filename (u1t2->config_path, UGTK_APP_SETTING_FILE, NULL); result = ugtk_setting_save (&u1t2->setting, path); g_free (path); return result; } int ugtk_1to2_load_category (Ugtk1to2* u1t2) { UgetNode* cnode; GList* category_list; GList* download_list; GList* link; gchar* file; // load all download from file file = g_build_filename (u1t2->config_path, UGTK_APP_DOWNLOAD_FILE, NULL); download_list = ug_download_list_load (file); g_free (file); // load all categories file = g_build_filename (u1t2->config_path, UGTK_APP_CATEGORY_FILE, NULL); category_list = ug_category_list_load (file); g_free (file); // link and add tasks to categories ug_category_list_link (category_list, download_list); // convert old category from ver1 to ver2 for (link = category_list; link; link = link->next) { cnode = uget_node_from_category ((UgCategory*) link->data); uget_node_append (&u1t2->real, cnode); } // free list g_list_foreach (category_list, (GFunc) ug_category_free, NULL); g_list_free (category_list); g_list_foreach (download_list, (GFunc) ug_dataset_unref, NULL); g_list_free (download_list); return u1t2->real.n_children; } int ugtk_1to2_save_category (Ugtk1to2* u1t2) { int count; char* path; char* path_base; char* path_new; UgetNode* cnode; UgJsonFile* jfile; path_base = g_build_filename (u1t2->config_path, "category", NULL); ug_create_dir_all (path_base, -1); jfile = ug_json_file_new (4096); cnode = u1t2->real.children; for (count = 0; cnode; cnode = cnode->next, count++) { #if defined _WIN32 || defined _WIN64 path = ug_strdup_printf ("%s%c%.4d.temp", path_base, '\\', count); #else path = ug_strdup_printf ("%s%c%.4d.temp", path_base, '/', count); #endif // _WIN32 || _WIN64 if (ug_json_file_begin_write (jfile, path, UG_JSON_FORMAT_ALL) == FALSE) { ug_free (path); break; } ug_json_write_object_head (&jfile->json); ug_json_write_entry (&jfile->json, cnode, UgetNodeEntry); ug_json_write_object_tail (&jfile->json); ug_json_file_end_write (jfile); #if defined _WIN32 || defined _WIN64 path_new = ug_strdup_printf ("%s%c%.4d.json", path_base, '\\', count); #else path_new = ug_strdup_printf ("%s%c%.4d.json", path_base, '/', count); #endif // _WIN32 || _WIN64 ug_unlink (path_new); ug_rename (path, path_new); ug_free (path_new); ug_free (path); } ug_free (path_base); ug_json_file_free (jfile); return count; } uget-2.2.3/ui-gtk-1to2/UgMarkup.h0000664000175000017500000000543613602733704013311 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ // utilities for g_markup_xxx #ifndef UG_MARKUP_H #define UG_MARKUP_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgMarkup UgMarkup; // If you want to skip next element_start() // g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); extern GMarkupParser ug_markup_skip_parser; // ---------------------------------------------------------------------------- // UgMarkup : write markup to file, parse markup file by GMarkupParseContext // UgMarkup* ug_markup_new (void); void ug_markup_free (UgMarkup* markup); // write markup to file gboolean ug_markup_write_start (UgMarkup* markup, const gchar* filename, gboolean formating); void ug_markup_write_end (UgMarkup* markup); // write text. If text_len == -1, text is null-terminated. void ug_markup_write_text (UgMarkup* markup, const gchar* text, gint text_len); // write element void ug_markup_write_element_start (UgMarkup* markup, const gchar* printf_format, ...); void ug_markup_write_element_end (UgMarkup* markup, const gchar* element_name); // parse gboolean ug_markup_parse (const gchar* filename, const GMarkupParser* parser, gpointer data); #ifdef __cplusplus } #endif #endif // UG_MARKUP_H uget-2.2.3/ui-gtk-1to2/UgData1.c0000664000175000017500000003044513602733704012775 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include "UgData1.h" #include "UgRegistry1.h" #if defined(_MSC_VER) #define strtoll _strtoi64 #endif // ---------------------------------------------------------------------------- // UgData1Interface void ug_data1_interface_register (const UgData1Interface* iface) { gchar* key; key = g_strconcat ("data.", iface->name, NULL); ug_registry1_insert (key, iface); g_free (key); } void ug_data1_interface_unregister (const UgData1Interface* iface) { gchar* key; key = g_strconcat ("data.", iface->name, NULL); ug_registry1_remove (key, iface); g_free (key); } const UgData1Interface* ug_data1_interface_find (const gchar* name) { gpointer iface; gchar* key; key = g_strconcat ("data.", name, NULL); iface = ug_registry1_find (key); g_free (key); return iface; } // ----------------------------------------------------------------------------- // UgData : UgData is a base structure. // UgData* ug_data1_new (const UgData1Interface* iface) gpointer ug_data1_new (const UgData1Interface* iface) { UgInitFunc init; UgData1* data; // data = g_malloc0 (iface->instance_size); data = g_slice_alloc0 (iface->instance_size); data->iface = iface; init = iface->init; if (init) init (data); return data; } // void ug_data1_free (UgData* data) void ug_data1_free (gpointer data) { UgFinalizeFunc finalize; finalize = ((UgData1*)data)->iface->finalize; if (finalize) finalize (data); // g_free (data); g_slice_free1 (((UgData1*)data)->iface->instance_size, data); } // UgData* ug_data1_copy (UgData* data) gpointer ug_data1_copy (gpointer data) { const UgData1Interface* iface; UgAssign1Func assign; gpointer new_data; if (data) { iface = ((UgData1*)data)->iface; assign = iface->assign; if (assign) { // new_data = g_malloc0 (iface->instance_size); new_data = g_slice_alloc0 (iface->instance_size); ((UgData1*)new_data)->iface = iface; assign (new_data, data); return new_data; } } return NULL; } //void ug_data1_assign (UgData* dest, UgData* src) void ug_data1_assign (gpointer data, gpointer src) { UgAssign1Func assign; if (data) { assign = ((UgData1*)data)->iface->assign; if (assign) assign (data, src); } } // ------------------------------------ // UgData-base XML input and output static void ug_data1_parser_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, UgData1* data, GError** error); // UgData* user_data GMarkupParser ug_data1_parser = { (gpointer) ug_data1_parser_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; void ug_data1_write_markup (UgData1* data, UgMarkup* markup) { const UgDataEntry* entry; union { gpointer src; gchar* v_string; gint v_int; guint v_uint; gint64 v_int64; gdouble v_double; } value; entry = data->iface->entry; if (entry == NULL) return; for (; entry->name; entry++) { value.src = ((guint8*) data) + entry->offset; switch (entry->type) { case UG_TYPE_STRING: value.v_string = *(gchar**)value.src; if (value.v_string) { // ug_markup_write_element_start() must use with ug_markup_write_element_end() ug_markup_write_element_start (markup, "%s value='%s'", entry->name, value.v_string); ug_markup_write_element_end (markup, entry->name); } break; case UG_TYPE_INT: value.v_int = *(gint*)value.src; // if (value.v_int) { // ug_markup_write_element_start() must use with ug_markup_write_element_end() ug_markup_write_element_start (markup, "%s value='%d'", entry->name, value.v_int); ug_markup_write_element_end (markup, entry->name); // } break; case UG_TYPE_UINT: value.v_uint = *(guint*)value.src; // if (value.v_int) { // ug_markup_write_element_start() must use with ug_markup_write_element_end() ug_markup_write_element_start (markup, "%s value='%u'", entry->name, value.v_uint); ug_markup_write_element_end (markup, entry->name); // } break; case UG_TYPE_INT64: value.v_int64 = *(gint64*)value.src; // if (value.v_int64) { // ug_markup_write_element_start() must use with ug_markup_write_element_end() //#if defined (_MSC_VER) || defined (__MINGW32__) // ug_markup_write_element_start (markup, "%s value='%I64d'", entry->name, value.v_int64); //#else // C99 Standard ug_markup_write_element_start (markup, "%s value='%lld'", entry->name, value.v_int64); //#endif ug_markup_write_element_end (markup, entry->name); // } break; case UG_TYPE_DOUBLE: value.v_double = *(gdouble*)value.src; // if (value.v_double) { // ug_markup_write_element_start() must use with ug_markup_write_element_end() ug_markup_write_element_start (markup, "%s value='%f'", entry->name, value.v_double); ug_markup_write_element_end (markup, entry->name); // } break; case UG_TYPE_INSTANCE: value.src = *(gpointer*) value.src; if (value.src == NULL) break; case UG_TYPE_STATIC: ug_markup_write_element_start (markup, entry->name); ug_data1_write_markup (value.src, markup); ug_markup_write_element_end (markup, entry->name); break; case UG_TYPE_CUSTOM: // ug_markup_write_element_start() must use with ug_markup_write_element_end() if (entry->writer) { ug_markup_write_element_start (markup, entry->name); ((UgWriteFunc) entry->writer) (value.src, markup); ug_markup_write_element_end (markup, entry->name); } break; default: break; } // End of switch (entry->type) } } // UgData* user_data static void ug_data1_parser_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, UgData1* data, GError** error) { const UgDataEntry* entry; const gchar* src; gpointer dest; guint index; entry = data->iface->entry; if (entry == NULL) { // don't parse anything. g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); return; } // data parser for (; entry->name; entry++) { if (strcmp (entry->name, element_name) != 0) continue; src = NULL; for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "value") == 0) { src = attr_values[index]; break; } } dest = ((guint8*) data) + entry->offset; switch (entry->type) { case UG_TYPE_STRING: if (src) { g_free (*(gchar**) dest); *(gchar**) dest = g_strdup (src); } break; case UG_TYPE_INT: if (src) *(gint*) dest = strtol (src, NULL, 10); break; case UG_TYPE_UINT: if (src) *(guint*) dest = (guint) strtoul (src, NULL, 10); break; case UG_TYPE_INT64: // C99 Standard if (src) *(gint64*) dest = strtoll (src, NULL, 10);; break; case UG_TYPE_DOUBLE: if (src) *(gdouble*) dest = strtod (src, NULL); break; case UG_TYPE_INSTANCE: if (entry->parser == NULL) break; if (*(gpointer*) dest == NULL) *(gpointer*) dest = ug_data1_new (entry->parser); dest = *(gpointer*) dest; case UG_TYPE_STATIC: g_markup_parse_context_push (context, &ug_data1_parser, dest); return; case UG_TYPE_CUSTOM: if (entry->parser) { ((UgParseFunc) entry->parser) (dest, context); return; } // g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, "Unknow element"); break; default: break; } // End of switch (entry->type) break; } // don't parse anything. g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); } // ----------------------------------------------------------------------------- // UgDatalist functions #define UG_DATALIST_CAST(instance) ((UgDatalist*)(instance)) void ug_datalist_free (gpointer datalist) { UgDatalist* next; while (datalist) { next = UG_DATALIST_CAST (datalist)->next; ug_data1_free (datalist); datalist = next; } } guint ug_datalist_length (gpointer datalist) { guint len = 0; while (datalist) { datalist = UG_DATALIST_CAST (datalist)->next; len++; } return len; } gpointer ug_datalist_first (gpointer datalist) { if (datalist) { while (UG_DATALIST_CAST (datalist)->prev) datalist = UG_DATALIST_CAST (datalist)->prev; } return datalist; } gpointer ug_datalist_last (gpointer datalist) { if (datalist) { while (UG_DATALIST_CAST (datalist)->next) datalist = UG_DATALIST_CAST (datalist)->next; } return datalist; } gpointer ug_datalist_nth (gpointer datalist, guint nth) { for (; datalist && nth; nth--) datalist = UG_DATALIST_CAST (datalist)->next; return datalist; } gpointer ug_datalist_prepend (gpointer datalist, gpointer link) { if (link) { if (datalist) UG_DATALIST_CAST (datalist)->prev = link; UG_DATALIST_CAST (link)->next = datalist; return link; } return datalist; } gpointer ug_datalist_append (gpointer datalist, gpointer link) { UgDatalist* last_link; if (datalist == NULL) return link; last_link = ug_datalist_last (datalist); UG_DATALIST_CAST (last_link)->next = link; UG_DATALIST_CAST (link)->prev = last_link; return datalist; } gpointer ug_datalist_reverse (gpointer datalist) { UgDatalist* temp; for (temp = datalist; temp; ) { datalist = temp; temp = UG_DATALIST_CAST (datalist)->next; UG_DATALIST_CAST (datalist)->next = UG_DATALIST_CAST (datalist)->prev; UG_DATALIST_CAST (datalist)->prev = temp; } return datalist; } void ug_datalist_unlink (gpointer datalink) { if (datalink) { if (UG_DATALIST_CAST (datalink)->next) UG_DATALIST_CAST (datalink)->next->prev = UG_DATALIST_CAST (datalink)->prev; if (UG_DATALIST_CAST (datalink)->prev) UG_DATALIST_CAST (datalink)->prev->next = UG_DATALIST_CAST (datalink)->next; UG_DATALIST_CAST (datalink)->next = NULL; UG_DATALIST_CAST (datalink)->prev = NULL; } } gpointer ug_datalist_copy (gpointer datalist) { UgDatalist* newlist; UgDatalist* newdata; UgDatalist* src; newlist = NULL; for (src = ug_datalist_last (datalist); src; src = src->prev) { if (src->iface->assign) { newdata = ug_data1_copy (src); newlist = ug_datalist_prepend (newlist, newdata); } } return newlist; } gpointer ug_datalist_assign (gpointer datalist, gpointer src) { UgDatalist* newlink; UgDatalist* srclink; for (newlink = datalist, srclink = src; srclink; srclink = srclink->next) { if (newlink == NULL) { newlink = ug_data1_copy (srclink); datalist = ug_datalist_append (datalist, newlink); } else ug_data1_assign (newlink, srclink); newlink = newlink->next; } return datalist; } uget-2.2.3/ui-gtk-1to2/UgMarkup.c0000664000175000017500000001476213602733704013306 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include "UgMarkup.h" enum UgMarkupState { UG_MARKUP_ELEMENT_START, // 0 : element is not ended. eg. or UG_MARKUP_ELEMENT_TEXT, // 2 : element follows text. eg. text }; static gboolean ug_markup_close_element (UgMarkup* markup, gboolean element_end); // ---------------------------------------------------------------------------- // UgMarkup : write markup to file, parse markup file by GMarkupParseContext // struct UgMarkup { guint output_state; // UgMarkupState gboolean formating; guint level; FILE* file; }; UgMarkup* ug_markup_new (void) { UgMarkup* markup; markup = g_malloc0 (sizeof (UgMarkup)); return markup; } void ug_markup_free (UgMarkup* markup) { if (markup->file) fclose (markup->file); g_free (markup); } // ---------------------------------------------- // write markup to file gboolean ug_markup_write_start (UgMarkup* markup, const gchar* filename, gboolean formating) { markup->output_state = UG_MARKUP_ELEMENT_END; markup->formating = TRUE; markup->file = ug_fopen (filename, "w"); if (markup->file) { fputs ("\n", markup->file); return TRUE; } return FALSE; } void ug_markup_write_end (UgMarkup* markup) { if (markup->file) { fputc ('\n', markup->file); fclose (markup->file); markup->file = NULL; } } // ---------------------------------------------- // write text. If text_len == -1, text is null-terminated. void ug_markup_write_text (UgMarkup* markup, const gchar* text, gint len) { char* esc_text; if (text) { if (len == -1) len = strlen (text); if (len == 0) return; ug_markup_close_element (markup, FALSE); esc_text = g_markup_escape_text (text, len); fputs (esc_text, markup->file); markup->output_state = UG_MARKUP_ELEMENT_TEXT; g_free (esc_text); } } // ---------------------------------------------- // write element void ug_markup_write_element_start (UgMarkup* markup, const gchar* printf_format, ...) { FILE* file = markup->file; char* esc_text; va_list arg_list; ug_markup_close_element (markup, FALSE); if (markup->formating) { if (markup->level > 0) fprintf (file, "\n%*c", markup->level * 2, ' '); markup->level++; } fputc ('<', file); va_start (arg_list, printf_format); esc_text = g_markup_vprintf_escaped (printf_format, arg_list); va_end (arg_list); fputs (esc_text, file); g_free (esc_text); markup->output_state = UG_MARKUP_ELEMENT_START; } void ug_markup_write_element_end (UgMarkup* markup, const gchar* element_name) { FILE* file = markup->file; gboolean element_end; element_end = ug_markup_close_element (markup, TRUE); if (markup->formating) { markup->level--; if (markup->output_state != UG_MARKUP_ELEMENT_TEXT && element_end == FALSE) { fputc ('\n', file); if (markup->level > 0) fprintf (file, "%*c", markup->level * 2, ' '); } } if (element_end == FALSE) fprintf (file, "", element_name); markup->output_state = UG_MARKUP_ELEMENT_END; } static gboolean ug_markup_close_element (UgMarkup* markup, gboolean element_end) { char* string; if (markup->output_state == UG_MARKUP_ELEMENT_START) { // markup->output_state = UG_MARKUP_ELEMENT_END; string = (element_end) ? "/>" : ">"; fputs (string, markup->file); return TRUE; } return FALSE; } // ---------------------------------------------------------------------------- // parse gboolean ug_markup_parse (const gchar* filename, const GMarkupParser* parser, gpointer data) { GMarkupParseContext* context; gchar* buffer; gint fd; gint size; gboolean retval = FALSE; // fd = open (filename, O_RDONLY | O_TEXT, S_IREAD); fd = ug_open (filename, UG_O_READONLY | UG_O_TEXT, UG_S_IREAD); if (fd == -1) return FALSE; buffer = g_malloc (4096); context = g_markup_parse_context_new (parser, 0, data, NULL); do { // size = read (fd, buffer, 4096); size = ug_read (fd, buffer, 4096); if (size > 0) retval = g_markup_parse_context_parse (context, buffer, size, NULL); } while (size > 0 && retval); retval = g_markup_parse_context_end_parse (context, NULL); g_markup_parse_context_free (context); g_free (buffer); // close (fd); ug_close (fd); return retval; } // ---------------------------------------------- // ug_markup_skip_parser // static void ug_markup_skip_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, gpointer data, GError** error) { g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); } GMarkupParser ug_markup_skip_parser = { (gpointer) ug_markup_skip_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; uget-2.2.3/ui-gtk-1to2/Ugtk1to2.h0000664000175000017500000000443613602733704013175 00000000000000/* * * Copyright (C) 2013-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UGTK_1TO2_H #define UGTK_1TO2_H #include #include #include "UgSetting.h" #include "UgCategory.h" #ifdef __cplusplus extern "C" { #endif typedef struct Ugtk1to2 Ugtk1to2; struct Ugtk1to2 { UgSetting setting1; UgtkSetting setting; UgetNode real; char* config_path; }; Ugtk1to2* ugtk_1to2_new (const char* config_path); void ugtk_1to2_free (Ugtk1to2* u1t2); // return TRUE/FALSE int ugtk_1to2_load_setting (Ugtk1to2* u1t2); int ugtk_1to2_save_setting (Ugtk1to2* u1t2); // return number of category load/save int ugtk_1to2_load_category (Ugtk1to2* u1t2); int ugtk_1to2_save_category (Ugtk1to2* u1t2); #ifdef __cplusplus } #endif #endif // UGTK_1TO2_H uget-2.2.3/ui-gtk-1to2/UgCategory.h0000664000175000017500000001467413602733704013633 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UG_CATEGORY_H #define UG_CATEGORY_H #include "UgDataset.h" #ifdef __cplusplus extern "C" { #endif // interface address for UgDataset #define UgRelationInfo ug_relation_iface_pointer typedef struct UgCategory UgCategory; typedef struct UgCategoryFuncs UgCategoryFuncs; typedef enum UgCategoryHints UgCategoryHints; typedef struct UgRelation UgRelation; typedef void (*UgCategoryAddFunc) (UgCategory* category, UgDataset* dataset); typedef GList* (*UgCategoryGetAllFunc) (UgCategory* category); typedef GList* (*UgCategoryGetTasksFunc)(UgCategory* category); typedef void (*UgCategoryChangedFunc) (UgCategory* category, UgDataset* dataset); extern const UgData1Interface ug_category_iface; extern const UgData1Interface ug_relation_iface; extern const UgData1Interface* ug_category_iface_pointer; extern const UgData1Interface* ug_relation_iface_pointer; // ---------------------------------------------------------------------------- // UgCategory // UgData // | // `- UgCategory struct UgCategory { const UgData1Interface* iface; // for UgMarkup parse/write const UgCategoryFuncs* funcs; // functions gchar* name; // limit guint active_limit; guint finished_limit; // finished: completed and paused guint recycled_limit; // default setting of UgDataset UgDataset* defaults; // used when program save/load file GList* indices; // call destroy.func(destroy.data) when destroying. struct { UgNotifyFunc func; gpointer data; } destroy; }; UgCategory* ug_category_new (void); void ug_category_free (UgCategory* category); void ug_category_init (UgCategory* category); void ug_category_finalize (UgCategory* category); // add dataset to category and increase reference count of dataset. void ug_category_add (UgCategory* category, UgDataset* dataset); // get all tasks(UgDataset) in this category. // To free the returned value, use g_list_free (list). GList* ug_category_get_all (UgCategory* category); // get queuing tasks(UgDataset) in this category. // This function should be noticed UgCategory::active_limit, because // application will try to activate all returned dataset. // To free the returned value, use g_list_free (list). GList* ug_category_get_tasks (UgCategory* category); // used to notify category that it's dataset was changed. // It may change hints and switch dataset to another internal queue of category. void ug_category_changed (UgCategory* category, UgDataset* dataset); // ------------------------------------ // UgCategoryHints enum UgCategoryHints { // UG_HINT_QUEUING = 1 << 0, UG_HINT_PAUSED = 1 << 1, UG_HINT_DOWNLOADING = 1 << 2, UG_HINT_ERROR = 1 << 3, UG_HINT_COMPLETED = 1 << 4, // Download completed only UG_HINT_UPLOADING = 1 << 5, // reserved UG_HINT_FINISHED = 1 << 6, // Download completed, uget will not use it in future. UG_HINT_RECYCLED = 1 << 7, // Download will be deleted. UG_HINT_ACTIVE = UG_HINT_DOWNLOADING | UG_HINT_UPLOADING, UG_HINT_INACTIVE = UG_HINT_PAUSED | UG_HINT_ERROR, UG_HINT_UNRUNNABLE = UG_HINT_PAUSED | UG_HINT_ERROR | UG_HINT_FINISHED | UG_HINT_RECYCLED, }; // ---------------------------------------------------------------------------- // CategoryList // Before calling ug_category_list_load(), user must register data interface of UgCategory. GList* ug_category_list_load (const gchar* filename); void ug_category_list_link (GList* category_list, GList* download_list); // ---------------------------------------------------------------------------- // DownloadList // ug_download_list_load() load file and return list of newly-created UgDataset. // To free the return value, use: // g_list_foreach (list, (GFunc) ug_dataset_unref, NULL); // g_list_free (list); // Before calling ug_download_list_load(), user must register data interface of UgetRelation. GList* ug_download_list_load (const gchar* filename); // Below utility functions can be used by g_list_foreach() gboolean ug_download_create_attachment (UgDataset* dataset, gboolean force); gboolean ug_download_assign_attachment (UgDataset* dataset, UgDataset* src); void ug_download_complete_data (UgDataset* dataset); void ug_download_delete_temp (UgDataset* dataset); // ---------------------------------------------------------------------------- // UgetRelation : relation of UgCategory, UgDataset, and UgPlugin. // UgData // | // `- UgDatalist // | // `- UgRelation struct UgRelation { UG_DATALIST_MEMBERS (UgRelation); // const UgData1Interface* iface; // UgRelation* next; // UgRelation* prev; // category UgCategoryHints hints; UgCategory* category; // use index when program save/load file. guint index; // attachment struct { gchar* folder; guint stamp; } attached; // call destroy.func(destroy.data) when destroying. struct { UgNotifyFunc func; gpointer data; } destroy; }; #ifdef __cplusplus } #endif #endif // UG_CATEGORY_H uget-2.2.3/ui-gtk-1to2/UgDataset.h0000664000175000017500000001070113602733704013426 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ // UgDataset collection of all UgDatalist-based instance // UgData // | // `- UgDataset #ifndef UG_DATASET_H #define UG_DATASET_H #include #include "UgData1.h" #ifdef __cplusplus extern "C" { #endif // These macro is for internal use only. // use ug_dataset_get(dataset, UgetCommonInfo, 0) to instead UG_DATASET_COMMON(dataset) #define UG_DATASET_COMMON(dataset) ( (UgCommon*)((dataset)->data[0]) ) #define UG_DATASET_PROXY(dataset) ( (UgProxy*) ((dataset)->data[2]) ) #define UG_DATASET_PROGRESS(dataset) ( (UgProgress*) ((dataset)->data[4]) ) #define UG_DATASET_RELATION(dataset) ( (UgRelation*) ((dataset)->data[6]) ) typedef struct UgDataset UgDataset; // collection of all UgDatalist-based instance extern const UgData1Interface ug_dataset_iface; // ---------------------------------------------------------------------------- // UgDataset : collection of all UgDatalist-based instance. struct UgDataset { const UgData1Interface* iface; // for UgMarkup parse/write UgDatalist** data; const UgData1Interface** key; unsigned int data_len; unsigned int alloc_len; unsigned int ref_count; // call destroy.func(destroy.data) when destroying. struct { UgNotifyFunc func; gpointer data; } destroy; struct { gpointer pointer; gpointer data; } user; }; UgDataset* ug_dataset_new (void); void ug_dataset_ref (UgDataset* dataset); void ug_dataset_unref (UgDataset* dataset); // Gets the element at the given position in a list. gpointer ug_dataset_get (UgDataset* dataset, const UgData1Interface* iface, guint nth); // Removes the element at the given position in a list. void ug_dataset_remove (UgDataset* dataset, const UgData1Interface* iface, guint nth); // If nth instance of data_interface exist, return nth instance. // If nth instance of data_interface not exist, alloc new instance in tail and return it. gpointer ug_dataset_realloc (UgDataset* dataset, const UgData1Interface* iface, guint nth); gpointer ug_dataset_alloc_front (UgDataset* dataset, const UgData1Interface* iface); gpointer ug_dataset_alloc_back (UgDataset* dataset, const UgData1Interface* iface); // ------------------------------------ // UgDataset list functions guint ug_dataset_list_length (UgDataset* dataset, const UgData1Interface* iface); UgDatalist** ug_dataset_alloc_list (UgDataset* dataset, const UgData1Interface* iface); UgDatalist** ug_dataset_get_list (UgDataset* dataset, const UgData1Interface* iface); // free old list in dataset and set list with new_list. void ug_dataset_set_list (UgDataset* dataset, const UgData1Interface* iface, gpointer new_list); // Cuts the element at the given position in a list. //UgDatalist* ug_dataset_cut_list (UgDataset* dataset, const UgData1Interface* iface, guint nth); gpointer ug_dataset_cut_list (UgDataset* dataset, const UgData1Interface* iface, guint nth); #ifdef __cplusplus } #endif #endif // UG_DATASET_H uget-2.2.3/ui-gtk-1to2/Makefile.am0000664000175000017500000000137113602733704013433 00000000000000AUTOMAKE_OPTIONS = subdir-objects no-dependencies bin_PROGRAMS = uget-gtk-1to2 uget_gtk_1to2_CPPFLAGS = \ -DDATADIR='"$(datadir)"' \ -I$(top_srcdir)/ui-gtk \ -I$(top_srcdir)/uget \ -I$(top_srcdir)/uglib uget_gtk_1to2_CFLAGS = \ @GTK_CFLAGS@ uget_gtk_1to2_LDADD = \ $(top_builddir)/uget/libuget.a \ $(top_builddir)/uglib/libuglib.a \ @GTK_LIBS@ uget_gtk_1to2_SOURCES = \ UgCategory.c \ UgData1.c \ UgData-download.c \ UgDataset.c \ UgMarkup.c \ UgRegistry1.c \ UgSetting.c \ Ugtk1to2.c \ ../ui-gtk/UgtkSetting.c \ main.c noinst_HEADERS = \ UgCategory.h \ UgData1.h \ UgData-download.h \ UgDataset.h \ UgMarkup.h \ UgRegistry1.h \ UgSetting.h \ Ugtk1to2.h \ ../ui-gtk/UgtkSetting.h uget-2.2.3/ui-gtk-1to2/UgCategory.c0000664000175000017500000002656013602733704013623 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include "UgRegistry1.h" #include "UgCategory.h" #include "UgData-download.h" // ---------------------------------------------------------------------------- // UgCategory // UgCategory.indices parse/write for UgMarkup static void ug_int_list_in_markup (GList** list, GMarkupParseContext* context); static void ug_int_list_to_markup (GList** list, UgMarkup* markup); static const UgDataEntry ug_category_entry[] = { {"name", G_STRUCT_OFFSET (UgCategory, name), UG_TYPE_STRING, NULL, NULL}, {"ActiveLimit", G_STRUCT_OFFSET (UgCategory, active_limit), UG_TYPE_UINT, NULL, NULL}, {"FinishedLimit", G_STRUCT_OFFSET (UgCategory, finished_limit), UG_TYPE_UINT, NULL, NULL}, {"RecycledLimit", G_STRUCT_OFFSET (UgCategory, recycled_limit), UG_TYPE_UINT, NULL, NULL}, {"DownloadDefault", G_STRUCT_OFFSET (UgCategory, defaults), UG_TYPE_INSTANCE, &ug_dataset_iface, NULL}, {"DownloadIndices", G_STRUCT_OFFSET (UgCategory, indices), UG_TYPE_CUSTOM, ug_int_list_in_markup, ug_int_list_to_markup}, {NULL}, // null-terminated }; // extern const UgData1Interface ug_category_iface = { sizeof (UgCategory), // instance_size "category", // name ug_category_entry, // entry (UgInitFunc) ug_category_init, (UgFinalizeFunc) ug_category_finalize, (UgAssign1Func) NULL, }; // extern const UgData1Interface* ug_category_iface_pointer = &ug_category_iface; void ug_category_init (UgCategory* category) { // category->iface = ug_category_iface_pointer; category->defaults = ug_dataset_new (); category->active_limit = 3; category->finished_limit = 300; category->recycled_limit = 300; } void ug_category_finalize (UgCategory* category) { if (category->destroy.func) category->destroy.func (category->destroy.data); g_free (category->name); if (category->defaults) ug_dataset_unref (category->defaults); } UgCategory* ug_category_new (void) { return ug_data1_new (ug_category_iface_pointer); } void ug_category_free (UgCategory* category) { ug_data1_free (category); } // add dataset to category and increase reference count of dataset. void ug_category_add (UgCategory* category, UgDataset* dataset) { UgLog* datalog; // added on datalog = ug_dataset_realloc (dataset, UgLogInfo, 0); datalog->added_on = time (NULL); } // ---------------------------------------------------------------------------- // Category.indices load/save // static void ug_int_list_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** list, GError** error) { guint index; int value; for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "value") != 0) continue; value = atoi (attr_values[index]); *list = g_list_prepend (*list, GINT_TO_POINTER (value)); } g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); } static GMarkupParser ug_int_list_parser = { (gpointer) ug_int_list_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; static void ug_int_list_in_markup (GList** list, GMarkupParseContext* context) { g_markup_parse_context_push (context, &ug_int_list_parser, list); } static void ug_int_list_to_markup (GList** list, UgMarkup* markup) { GList* link; guint value; for (link = g_list_last (*list); link; link = link->prev) { value = GPOINTER_TO_INT (link->data); ug_markup_write_element_start (markup, "int value='%d'", value); ug_markup_write_element_end (markup, "int"); } } // ---------------------------------------------------------------------------- // CategoryList load/save // static void ug_category_data_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** list, GError** error) { UgCategory* category; if (strcmp (element_name, "category") != 0) { g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); return; } // user must register data interface of UgCategory. category = ug_data1_new (ug_category_iface_pointer); *list = g_list_prepend (*list, category); g_markup_parse_context_push (context, &ug_data1_parser, category); } static GMarkupParser ug_category_data_parser = { (gpointer) ug_category_data_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; static void ug_category_list_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** list, GError** error) { // guint index; // if (strcmp (element_name, "UgCategoryList") == 0) { // for (index=0; attr_names[index]; index++) { // if (strcmp (attr_names[index], "version") != 0) // continue; // if (strcmp (attr_values[index], "1") == 0) { g_markup_parse_context_push (context, &ug_category_data_parser, list); return; // } // // others... // break; // } // } // g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); } static GMarkupParser ug_category_list_parser = { (gpointer) ug_category_list_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; GList* ug_category_list_load (const gchar* file) { GList* category_list; category_list = NULL; ug_markup_parse (file, &ug_category_list_parser, &category_list); return category_list; } void ug_category_list_link (GList* list, GList* download_list) { GPtrArray* array; UgCategory* category; GList* link; guint index; // create array from download_list array = g_ptr_array_sized_new (g_list_length (download_list)); for (link = download_list; link; link = link->next) array->pdata[array->len++] = link->data; // link tasks in category for (; list; list = list->next) { category = list->data; // get tasks from array by index for (link = category->indices; link; link = link->next) { index = GPOINTER_TO_INT (link->data); if (index < array->len) link->data = g_ptr_array_index (array, index); } } // free array g_ptr_array_free (array, TRUE); } // ---------------------------------------------------------------------------- // DownloadList load/save // static void ug_download_data_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** list, GError** error) { UgDataset* dataset; if (strcmp (element_name, "download") != 0) { g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); return; } dataset = ug_dataset_new (); *list = g_list_prepend (*list, dataset); g_markup_parse_context_push (context, &ug_data1_parser, dataset); } static GMarkupParser ug_download_data_parser = { (gpointer) ug_download_data_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; static void ug_download_list_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** list, GError** error) { // guint index; // if (strcmp (element_name, "UgDownloadList") == 0) { // for (index=0; attr_names[index]; index++) { // if (strcmp (attr_names[index], "version") != 0) // continue; // if (strcmp (attr_values[index], "1") == 0) { g_markup_parse_context_push (context, &ug_download_data_parser, list); return; // } // others... // break; // } // } // g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); } static GMarkupParser ug_download_list_parser = { (gpointer) ug_download_list_start_element, (gpointer) g_markup_parse_context_pop, NULL, NULL, NULL }; GList* ug_download_list_load (const gchar* download_file) { // UgRelation* relation; GList* list; // GList* link; list = NULL; ug_markup_parse (download_file, &ug_download_list_parser, &list); // attachment // for (link = list; link; link = link->next) { // relation = UG_DATASET_RELATION ((UgDataset*) link->data); // ug_attachment_ref (relation->attached.stamp); // } return list; } // ---------------------------------------------------------------------------- // UgRelation : relation of UgCategory, UgDataset, and UgPlugin. // static void ug_relation_final (UgRelation* relation); static const UgDataEntry ug_relation_entry[] = { {"hints", G_STRUCT_OFFSET (UgRelation, hints), UG_TYPE_UINT, NULL, NULL}, {NULL}, // null-terminated }; // extern const UgData1Interface ug_relation_iface = { sizeof (UgRelation), // instance_size "relation", // name ug_relation_entry, // entry (UgInitFunc) NULL, (UgFinalizeFunc) ug_relation_final, (UgAssign1Func) NULL, }; // extern const UgData1Interface* ug_relation_iface_pointer = &ug_relation_iface; static void ug_relation_final (UgRelation* relation) { if (relation->destroy.func) relation->destroy.func (relation->destroy.data); g_free (relation->attached.folder); // ug_attachment_unref (relation->attached.stamp); } uget-2.2.3/ui-gtk-1to2/UgRegistry1.h0000664000175000017500000000407213602733704013736 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UG_REGISTRY1_H #define UG_REGISTRY1_H #include #ifdef __cplusplus extern "C" { #endif // This registry can store a key with multiple value // Program will use last added one by default. void ug_registry1_insert (const char* key, const void* value); void ug_registry1_remove (const char* key, const void* value); int ug_registry1_exist (const char* key, const void* value); void* ug_registry1_find (const char* key); #ifdef __cplusplus } #endif #endif // UG_REGISTRY1_H uget-2.2.3/ui-gtk-1to2/UgData-download.c0000664000175000017500000002172113602733704014516 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include // uglib #include #include "UgRegistry1.h" #include "UgData-download.h" // ---------------------------------------------------------------------------- // UgCommon static void ug_common_init (UgCommon* common); static void ug_common_final (UgCommon* common); static const UgDataEntry ug_common_entry[] = { {"name", G_STRUCT_OFFSET (UgCommon, name), UG_TYPE_STRING, NULL, NULL}, {"url", G_STRUCT_OFFSET (UgCommon, url), UG_TYPE_STRING, NULL, NULL}, {"mirrors", G_STRUCT_OFFSET (UgCommon, mirrors), UG_TYPE_STRING, NULL, NULL}, {"file", G_STRUCT_OFFSET (UgCommon, file), UG_TYPE_STRING, NULL, NULL}, {"folder", G_STRUCT_OFFSET (UgCommon, folder), UG_TYPE_STRING, NULL, NULL}, {"user", G_STRUCT_OFFSET (UgCommon, user), UG_TYPE_STRING, NULL, NULL}, {"password", G_STRUCT_OFFSET (UgCommon, password), UG_TYPE_STRING, NULL, NULL}, {"ConnectTimeout", G_STRUCT_OFFSET (UgCommon, connect_timeout), UG_TYPE_UINT, NULL, NULL}, {"TransmitTimeout", G_STRUCT_OFFSET (UgCommon, transmit_timeout), UG_TYPE_UINT, NULL, NULL}, {"RetryDelay", G_STRUCT_OFFSET (UgCommon, retry_delay), UG_TYPE_UINT, NULL, NULL}, {"RetryLimit", G_STRUCT_OFFSET (UgCommon, retry_limit), UG_TYPE_UINT, NULL, NULL}, {"MaxConnections", G_STRUCT_OFFSET (UgCommon, max_connections), UG_TYPE_UINT, NULL, NULL}, {"MaxUploadSpeed", G_STRUCT_OFFSET (UgCommon, max_upload_speed), UG_TYPE_INT64, NULL, NULL}, {"MaxDownloadSpeed", G_STRUCT_OFFSET (UgCommon, max_download_speed), UG_TYPE_INT64, NULL, NULL}, {"RetrieveTimestamp", G_STRUCT_OFFSET (UgCommon, retrieve_timestamp), UG_TYPE_INT, NULL, NULL}, {NULL} // null-terminated }; // extern const UgData1Interface ug_common_iface = { sizeof (UgCommon), // instance_size "common", // name ug_common_entry, // entry (UgInitFunc) ug_common_init, (UgFinalizeFunc) ug_common_final, (UgAssign1Func) NULL, }; static void ug_common_init (UgCommon* common) { common->retrieve_timestamp = TRUE; common->connect_timeout = 30; common->transmit_timeout = 30; common->retry_delay = 6; common->retry_limit = 99; common->max_connections = 1; } static void ug_common_final (UgCommon* common) { g_free (common->name); g_free (common->url); g_free (common->mirrors); g_free (common->file); g_free (common->folder); g_free (common->user); g_free (common->password); } // ---------------------------------------------------------------------------- // UgProxy static void ug_proxy_final (UgProxy* proxy); static const UgDataEntry ug_proxy_entry[] = { {"host", G_STRUCT_OFFSET (UgProxy, host), UG_TYPE_STRING, NULL, NULL}, {"port", G_STRUCT_OFFSET (UgProxy, port), UG_TYPE_UINT, NULL, NULL}, {"type", G_STRUCT_OFFSET (UgProxy, type), UG_TYPE_UINT, NULL, NULL}, {"user", G_STRUCT_OFFSET (UgProxy, user), UG_TYPE_STRING, NULL, NULL}, {"password", G_STRUCT_OFFSET (UgProxy, password), UG_TYPE_STRING, NULL, NULL}, #ifdef HAVE_LIBPWMD {"pwmd-socket", G_STRUCT_OFFSET (UgProxy, pwmd.socket), UG_TYPE_STRING, NULL, NULL}, {"pwmd-socket-args", G_STRUCT_OFFSET (UgProxy, pwmd.socket_args), UG_TYPE_STRING, NULL, NULL}, {"pwmd-file", G_STRUCT_OFFSET (UgProxy, pwmd.file), UG_TYPE_STRING, NULL, NULL}, {"pwmd-element",G_STRUCT_OFFSET (UgProxy, pwmd.element),UG_TYPE_STRING, NULL, NULL}, #endif {NULL}, // null-terminated }; // extern const UgData1Interface ug_proxy_iface = { sizeof (UgProxy), // instance_size "proxy", // name ug_proxy_entry, // entry (UgInitFunc) NULL, (UgFinalizeFunc) ug_proxy_final, (UgAssign1Func) NULL, }; static void ug_proxy_final (UgProxy* proxy) { g_free (proxy->host); g_free (proxy->user); g_free (proxy->password); #ifdef HAVE_LIBPWMD g_free(proxy->pwmd.socket); g_free(proxy->pwmd.socket_args); g_free(proxy->pwmd.file); g_free(proxy->pwmd.element); #endif // HAVE_LIBPWMD } // ---------------------------------------------------------------------------- // UgProgress static const UgDataEntry ug_progress_entry[] = { {"complete", G_STRUCT_OFFSET (UgProgress, complete), UG_TYPE_INT64, NULL, NULL}, {"total", G_STRUCT_OFFSET (UgProgress, total), UG_TYPE_INT64, NULL, NULL}, {"percent", G_STRUCT_OFFSET (UgProgress, percent), UG_TYPE_DOUBLE, NULL, NULL}, {"elapsed", G_STRUCT_OFFSET (UgProgress, consume_time), UG_TYPE_DOUBLE, NULL, NULL}, {"uploaded", G_STRUCT_OFFSET (UgProgress, uploaded), UG_TYPE_INT64, NULL, NULL}, {"ratio", G_STRUCT_OFFSET (UgProgress, ratio), UG_TYPE_DOUBLE, NULL, NULL}, {NULL}, // null-terminated }; // extern const UgData1Interface ug_progress_iface = { sizeof (UgProgress), // instance_size "progress", // name ug_progress_entry, // entry (UgInitFunc) NULL, (UgFinalizeFunc) NULL, (UgAssign1Func) NULL, }; // --------------------------------------------------------------------------- // UgHttp static void ug_http_init (UgHttp* http); static void ug_http_final (UgHttp* http); static const UgDataEntry ug_http_entry[] = { {"user", G_STRUCT_OFFSET (UgHttp, user), UG_TYPE_STRING, NULL, NULL}, {"password", G_STRUCT_OFFSET (UgHttp, password), UG_TYPE_STRING, NULL, NULL}, {"referrer", G_STRUCT_OFFSET (UgHttp, referrer), UG_TYPE_STRING, NULL, NULL}, {"UserAgent", G_STRUCT_OFFSET (UgHttp, user_agent), UG_TYPE_STRING, NULL, NULL}, {"PostData", G_STRUCT_OFFSET (UgHttp, post_data), UG_TYPE_STRING, NULL, NULL}, {"PostFile", G_STRUCT_OFFSET (UgHttp, post_file), UG_TYPE_STRING, NULL, NULL}, {"CookieData", G_STRUCT_OFFSET (UgHttp, cookie_data), UG_TYPE_STRING, NULL, NULL}, {"CookieFile", G_STRUCT_OFFSET (UgHttp, cookie_file), UG_TYPE_STRING, NULL, NULL}, {"RedirectionLimit", G_STRUCT_OFFSET (UgHttp, redirection_limit), UG_TYPE_UINT, NULL, NULL}, {"RedirectionCount", G_STRUCT_OFFSET (UgHttp, redirection_count), UG_TYPE_UINT, NULL, NULL}, {NULL}, // null-terminated }; // extern const UgData1Interface ug_http_iface = { sizeof (UgHttp), // instance_size "http", // name ug_http_entry, // entry (UgInitFunc) ug_http_init, (UgFinalizeFunc) ug_http_final, (UgAssign1Func) NULL, }; static void ug_http_init (UgHttp* http) { http->redirection_limit = 30; } static void ug_http_final (UgHttp* http) { g_free (http->user); g_free (http->password); g_free (http->referrer); g_free (http->user_agent); g_free (http->post_data); g_free (http->post_file); g_free (http->cookie_data); g_free (http->cookie_file); } // --------------------------------------------------------------------------- // UgFtp // static void ug_ftp_final (UgFtp* ftp); static const UgDataEntry ug_ftp_entry[] = { {"user", G_STRUCT_OFFSET (UgFtp, user), UG_TYPE_STRING, NULL, NULL}, {"password", G_STRUCT_OFFSET (UgFtp, password), UG_TYPE_STRING, NULL, NULL}, {"ActiveMode", G_STRUCT_OFFSET (UgFtp, active_mode), UG_TYPE_INT,NULL, NULL}, {NULL}, // null-terminated }; // extern const UgData1Interface ug_ftp_iface = { sizeof (UgFtp), // instance_size "ftp", // name ug_ftp_entry, // entry (UgInitFunc) NULL, (UgFinalizeFunc) ug_ftp_final, (UgAssign1Func) NULL, }; static void ug_ftp_final (UgFtp* ftp) { g_free (ftp->user); g_free (ftp->password); } // --------------------------------------------------------------------------- // UgLog // static const UgDataEntry ug_log_entry[] = { {NULL}, // null-terminated }; // extern const UgData1Interface ug_log_iface = { sizeof (UgLog), // instance_size "log", // name ug_log_entry, // entry (UgInitFunc) NULL, (UgFinalizeFunc) NULL, (UgAssign1Func) NULL, }; uget-2.2.3/ui-gtk-1to2/UgData1.h0000664000175000017500000001503313602733704012776 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UG_DATA1_H #define UG_DATA1_H #include #include "UgMarkup.h" #ifdef __cplusplus extern "C" { #endif typedef struct UgDataEntry UgDataEntry; typedef struct UgData1Interface UgData1Interface; typedef struct UgData1 UgData1; typedef struct UgDatalist UgDatalist; typedef enum UgType1 UgType1; // UgData1Interface typedef void (*UgInitFunc) (void* instance); typedef void (*UgFinalizeFunc) (void* instance); typedef void (*UgAssign1Func) (void* instance, void* src_instance); typedef void (*UgParseFunc) (void* instance, void* user_data); typedef void (*UgWriteFunc) (void* instance, void* user_data); // UgParseMarkup : how to parse data in markup. // UgWriteMarkup : how to write data to markup. typedef void (*UgParseMarkup) (void* instance, GMarkupParseContext* context); typedef void (*UgWriteMarkup) (void* instance, UgMarkup* markup); // notify callback typedef void (*UgNotifyFunc) (void* user_data); enum UgType1 { UG_TYPE_NONE, UG_TYPE_STRING, UG_TYPE_INT, UG_TYPE_UINT, UG_TYPE_INT64, UG_TYPE_DOUBLE, // used by UgDataEntry // UgData-based pointer. if pointer is NULL, it use UgData1Interface to create data. UG_TYPE_INSTANCE, // UgDataEntry.parser set to UgData1Interface // UgData-based data that must be initialized. UG_TYPE_STATIC, // User defined type. // UgDataEntry.parser set to UgParseFunc (or UgParseMarkup) // UgDataEntry.writer set to UgWriteFunc (or UgWriteMarkup) // You must use it with UgParseMarkup & UgWriteMarkup in UgDataEntry. UG_TYPE_CUSTOM, }; // ---------------------------------------------------------------------------- // UgDataEntry: defines a single XML element and it's offset of data structure. // typedef struct // { // gchar* user; // gchar* pass; // } Foo; // // static UgDataEntry foo_tags[] = // { // { "user", G_STRUCT_OFFSET (Foo, user), UG_TYPE_STRING, NULL, NULL}, // { "pass", G_STRUCT_OFFSET (Foo, pass), UG_TYPE_STRING, NULL, NULL}, // { NULL } // }; // // // struct UgDataEntry { char* name; // tag name int offset; UgType1 type; const void* parser; // How to parse data. const void* writer; // How to write data. }; // ---------------------------------------------------------------------------- // UgData1Interface: All UgData-based structure must use it to save and load from XML file. struct UgData1Interface { unsigned int instance_size; const char* name; const UgDataEntry* entry; // To disable file parse/write, set entry = NULL. UgInitFunc init; UgFinalizeFunc finalize; UgAssign1Func assign; // overwrite dest by src }; void ug_data1_interface_register (const UgData1Interface* iface); void ug_data1_interface_unregister(const UgData1Interface* iface); const UgData1Interface* ug_data1_interface_find (const gchar* name); // ---------------------------------------------------------------------------- // UgData1 : UgData is a base structure. // It can save and load from XML file by UgDataEntry in UgData1Interface. struct UgData1 { const UgData1Interface* iface; }; // ------------------------------------ // UgData* ug_data1_new (const UgData1Interface* iface); // void ug_data1_free (UgData* data); gpointer ug_data1_new (const UgData1Interface* iface); void ug_data1_free (gpointer data); // UgData* ug_data1_copy (UgData* data); //void ug_data1_assign (UgData* data, UgData* src); gpointer ug_data1_copy (gpointer data); void ug_data1_assign (gpointer data, gpointer src); // overwrite (or merge) // ------------------------------------ // XML parse and write extern GMarkupParser ug_data1_parser; // UgData* user_data void ug_data1_write_markup (UgData1* data, UgMarkup* markup); // ---------------------------------------------------------------------------- // UgDatalist : UgDatalist is a UgData structure include Doubly-Linked Lists. // All UgDatalist-base structure can store in UgDataset. // UgData // | // `- UgDatalist #define UG_DATALIST_MEMBERS(Type) \ const UgData1Interface* iface; \ Type* next; \ Type* prev struct UgDatalist { UG_DATALIST_MEMBERS (UgDatalist); // const UgData1Interface* iface; // UgDatalist* next; // UgDatalist* prev; }; // --- UgDatalist functions are similar to GList functions. //void ug_datalist_free (UgDatalist* datalist); void ug_datalist_free (gpointer datalist); guint ug_datalist_length (gpointer datalist); gpointer ug_datalist_first (gpointer datalist); gpointer ug_datalist_last (gpointer datalist); gpointer ug_datalist_nth (gpointer datalist, guint nth); gpointer ug_datalist_prepend (gpointer datalist, gpointer datalink); gpointer ug_datalist_append (gpointer datalist, gpointer datalink); gpointer ug_datalist_reverse (gpointer datalist); void ug_datalist_unlink (gpointer datalink); // --- copy UgDatalist to a new UgDatalist if UgData1Interface::assign exist. gpointer ug_datalist_copy (gpointer datalist); gpointer ug_datalist_assign (gpointer datalist, gpointer src); #ifdef __cplusplus } #endif #endif // UG_DATA1_H uget-2.2.3/ui-gtk-1to2/UgSetting.h0000664000175000017500000001373513602733704013470 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UG_SETTING_H #define UG_SETTING_H #ifdef HAVE_CONFIG_H #include #endif #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "1.10.5" #endif #include "UgData1.h" #ifdef __cplusplus extern "C" { #endif #define UG_APP_GTK_NAME "uGet" #define UG_APP_GTK_VERSION PACKAGE_VERSION " (stable branch)" // default setting #define UG_APP_GTK_CLIPBOARD_PATTERN "BIN|ZIP|GZ|7Z|Z|TAR|TGZ|BZ2|LZH|A[0-9]?|RAR|R[0-9][0-9]|3GP|AAC|FLAC|M4A|M4P|MP3|OGG|WAV|WMA|MP4|OGV|MKV|AVI|MOV|WMV|FLV|F4V|MPG|MPEG|RMVB|RPM|DEB|EXE" #define UG_APP_GTK_LAUNCH_APP_TYPES "torrent" typedef struct UgSetting UgSetting; typedef enum UgScheduleState UgScheduleState; enum UgScheduleState { UG_SCHEDULE_TURN_OFF, UG_SCHEDULE_UPLOAD_ONLY, // reserve UG_SCHEDULE_LIMITED_SPEED, UG_SCHEDULE_NORMAL, UG_SCHEDULE_N_STATE, }; // struct UgSetting { const UgData1Interface* iface; // for UgMarkup parse/write // "DownloadColumnSetting" struct UgDownloadColumnSetting { const UgData1Interface* iface; // for UgMarkup parse/write guint changed_count; // sync with UgDownloadWidget.changed_count gboolean completed; gboolean total; gboolean percent; gboolean elapsed; // consuming time gboolean left; // remaining time gboolean speed; gboolean upload_speed; gboolean uploaded; gboolean ratio; gboolean retry; gboolean category; gboolean url; gboolean added_on; gboolean completed_on; struct { gint nth; gint order; // sort order } sort; } download_column; // "SummarySetting" struct UgSummarySetting { const UgData1Interface* iface; // for UgMarkup parse/write gboolean name; gboolean folder; gboolean category; gboolean url; gboolean message; } summary; // "WindowSetting" struct UgWindowSetting { const UgData1Interface* iface; // for UgMarkup parse/write // visible gboolean toolbar; gboolean statusbar; gboolean category; gboolean summary; gboolean banner; gint x; // window position gint y; gint width; gint height; gboolean maximized; } window; struct UgUserInterfaceSetting { const UgData1Interface* iface; // for UgMarkup parse/write // close_action == 0, Let user decide. // close_action == 1, Minimize to tray. // close_action == 2, Exit Uget. // close_confirmation == FALSE, Remember this action. // close_confirmation == TRUE, Always confirm. gboolean close_confirmation; gint close_action; gboolean delete_confirmation; gboolean show_trayicon; gboolean start_in_tray; gboolean start_in_offline_mode; gboolean start_notification; gboolean sound_notification; gboolean apply_recently; #ifdef HAVE_APP_INDICATOR gboolean app_indicator; #endif } ui; // "ClipboardSetting" struct UgClipboardSetting { const UgData1Interface* iface; // for UgMarkup parse/write gchar* pattern; gboolean monitor; gboolean quiet; gint nth_category; } clipboard; // "SpeedLimitSetting" - global speed limits struct UgSpeedLimitSetting { const UgData1Interface* iface; // for UgMarkup parse/write struct { guint upload; // KiB / second guint download; // KiB / second } normal; struct { guint upload; // KiB / second guint download; // KiB / second } scheduler; } speed_limit; // "SchedulerSetting" struct UgSchedulerSetting { const UgData1Interface* iface; // for UgMarkup parse/write gboolean enable; guint state[7][24]; // 1 week, 7 days, 24 hours } scheduler; // "CommandlineSetting" struct UgCommandlineSetting { const UgData1Interface* iface; // for UgMarkup parse/write gboolean quiet; // --quiet gint category_index; // --category-index } commandline; // "PluginSetting" struct UgPluginSetting { const UgData1Interface* iface; // for UgMarkup parse/write struct { gboolean enable; gboolean launch; gboolean shutdown; gchar* path; gchar* args; gchar* uri; } aria2; } plugin; gboolean offline_mode; guint when_complete; // when downloads complete // "FolderList" GList* folder_list; // Others struct UgLaunchSetting { gboolean active; gchar* types; } launch; struct UgAutoSave { gboolean active; guint interval; } auto_save; }; void ug_setting_init (UgSetting* setting); gboolean ug_setting_save (UgSetting* setting, const gchar* file); gboolean ug_setting_load (UgSetting* setting, const gchar* file); #ifdef __cplusplus } #endif #endif // End of UG_SETTING_H uget-2.2.3/ui-gtk-1to2/main.c0000664000175000017500000000613413602733704012471 00000000000000/* * * Copyright (C) 2013-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include "UgCategory.h" #include "UgData-download.h" #include "Ugtk1to2.h" static void register_iface (void) { // data ug_data1_interface_register (&ug_common_iface); ug_data1_interface_register (&ug_proxy_iface); ug_data1_interface_register (&ug_progress_iface); ug_data1_interface_register (&ug_http_iface); ug_data1_interface_register (&ug_ftp_iface); ug_data1_interface_register (&ug_log_iface); // category ug_data1_interface_register (&ug_category_iface); ug_data1_interface_register (&ug_relation_iface); } int main (int argc, char** argv) { Ugtk1to2* u1t2; char* path; int n; path = g_build_filename (g_get_user_config_dir (), "uGet", NULL); puts ("\n" "Convert uGet for GTK+ data file from 1.10.x to 2.x" "\n"); puts ("Usage:"); printf (" %s [config directory]" "\n\n", argv[0]); printf ("e.g." "\n" " %s \"%s\"" "\n\n", argv[0], path); g_free (path); if (argc == 1) return EXIT_SUCCESS; // starting convert register_iface (); u1t2 = ugtk_1to2_new (argv[1]); // setting n = ugtk_1to2_load_setting (u1t2); if (n == TRUE) { puts ("Load setting OK."); n = ugtk_1to2_save_setting (u1t2); if (n == TRUE) puts ("Save setting OK."); else puts ("Failed to save setting."); } // category and download n = ugtk_1to2_load_category (u1t2); printf ("Load %d category\n", n); if (n == 0) { puts ("No category exists"); return EXIT_FAILURE; } n = ugtk_1to2_save_category (u1t2); printf ("Save %d category\n", n); ugtk_1to2_free (u1t2); return EXIT_SUCCESS; } uget-2.2.3/tests/0000775000175000017500000000000013602733774010643 500000000000000uget-2.2.3/tests/Makefile.in0000664000175000017500000005742113602733761012635 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : noinst_PROGRAMS = test-json$(EXEEXT) test-jsonrpc$(EXEEXT) \ test-plugin+app$(EXEEXT) test-info$(EXEEXT) \ test-uglib$(EXEEXT) test-uget$(EXEEXT) @WITH_LIBPWMD_TRUE@am__append_1 = @LIBPWMD_LIBS@ subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_test_info_OBJECTS = test-info.$(OBJEXT) test_info_OBJECTS = $(am_test_info_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) test_info_DEPENDENCIES = $(top_builddir)/uglib/libuglib.a \ $(am__DEPENDENCIES_2) am_test_json_OBJECTS = test-json.$(OBJEXT) test_json_OBJECTS = $(am_test_json_OBJECTS) test_json_DEPENDENCIES = $(top_builddir)/uglib/libuglib.a \ $(am__DEPENDENCIES_2) am_test_jsonrpc_OBJECTS = test-jsonrpc.$(OBJEXT) test_jsonrpc_OBJECTS = $(am_test_jsonrpc_OBJECTS) test_jsonrpc_DEPENDENCIES = $(top_builddir)/uget/libuget.a \ $(top_builddir)/uglib/libuglib.a $(am__DEPENDENCIES_2) am_test_plugin_app_OBJECTS = \ test_plugin_app-test-plugin+app.$(OBJEXT) test_plugin_app_OBJECTS = $(am_test_plugin_app_OBJECTS) test_plugin_app_DEPENDENCIES = $(top_builddir)/uget/libuget.a \ $(top_builddir)/uglib/libuglib.a $(am__DEPENDENCIES_2) am_test_uget_OBJECTS = test-uget.$(OBJEXT) test_uget_OBJECTS = $(am_test_uget_OBJECTS) test_uget_DEPENDENCIES = $(top_builddir)/uget/libuget.a \ $(top_builddir)/uglib/libuglib.a $(am__DEPENDENCIES_2) am_test_uglib_OBJECTS = test-uglib.$(OBJEXT) test_uglib_OBJECTS = $(am_test_uglib_OBJECTS) test_uglib_DEPENDENCIES = $(top_builddir)/uglib/libuglib.a \ $(am__DEPENDENCIES_2) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(test_info_SOURCES) $(test_json_SOURCES) \ $(test_jsonrpc_SOURCES) $(test_plugin_app_SOURCES) \ $(test_uget_SOURCES) $(test_uglib_SOURCES) DIST_SOURCES = $(test_info_SOURCES) $(test_json_SOURCES) \ $(test_jsonrpc_SOURCES) $(test_plugin_app_SOURCES) \ $(test_uget_SOURCES) $(test_uglib_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_INDICATOR_CFLAGS = @APP_INDICATOR_CFLAGS@ APP_INDICATOR_LIBS = @APP_INDICATOR_LIBS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_CONFIG = @CURL_CONFIG@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETCONF = @GETCONF@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LFS_CFLAGS = @LFS_CFLAGS@ LFS_LDFLAGS = @LFS_LDFLAGS@ LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@ LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBPWMD_CFLAGS = @LIBPWMD_CFLAGS@ LIBPWMD_LIBS = @LIBPWMD_LIBS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # test-uglib-cxx test-uget-cxx TESTS_LIBS = @PTHREAD_LIBS@ @CURL_LIBS@ @GLIB_LIBS@ $(am__append_1) # set the include path found by configure AM_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget AM_CFLAGS = @PTHREAD_CFLAGS@ @LFS_CFLAGS@ @CURL_CFLAGS@ @GLIB_CFLAGS@ AM_LDFLAGS = @LFS_LDFLAGS@ # test_json_CPPFLAGS = -I$(top_srcdir)/uglib test_json_LDADD = $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_json_SOURCES = test-json.c # test_jsonrpc_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget test_jsonrpc_LDADD = $(top_builddir)/uget/libuget.a $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_jsonrpc_SOURCES = test-jsonrpc.c test_plugin_app_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget @LIBGCRYPT_CFLAGS@ @LIBCRYPTO_CFLAGS@ test_plugin_app_LDADD = $(top_builddir)/uget/libuget.a $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) @LIBGCRYPT_LIBS@ @LIBCRYPTO_LIBS@ test_plugin_app_SOURCES = test-plugin+app.c # test_info_CPPFLAGS = -I$(top_srcdir)/uglib test_info_LDADD = $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_info_SOURCES = test-info.c # test_uglib_CPPFLAGS = -I$(top_srcdir)/uglib test_uglib_LDADD = $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_uglib_SOURCES = test-uglib.c # test_uget_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget test_uget_LDADD = $(top_builddir)/uget/libuget.a $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_uget_SOURCES = test-uget.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) test-info$(EXEEXT): $(test_info_OBJECTS) $(test_info_DEPENDENCIES) $(EXTRA_test_info_DEPENDENCIES) @rm -f test-info$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_info_OBJECTS) $(test_info_LDADD) $(LIBS) test-json$(EXEEXT): $(test_json_OBJECTS) $(test_json_DEPENDENCIES) $(EXTRA_test_json_DEPENDENCIES) @rm -f test-json$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_json_OBJECTS) $(test_json_LDADD) $(LIBS) test-jsonrpc$(EXEEXT): $(test_jsonrpc_OBJECTS) $(test_jsonrpc_DEPENDENCIES) $(EXTRA_test_jsonrpc_DEPENDENCIES) @rm -f test-jsonrpc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_jsonrpc_OBJECTS) $(test_jsonrpc_LDADD) $(LIBS) test-plugin+app$(EXEEXT): $(test_plugin_app_OBJECTS) $(test_plugin_app_DEPENDENCIES) $(EXTRA_test_plugin_app_DEPENDENCIES) @rm -f test-plugin+app$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_plugin_app_OBJECTS) $(test_plugin_app_LDADD) $(LIBS) test-uget$(EXEEXT): $(test_uget_OBJECTS) $(test_uget_DEPENDENCIES) $(EXTRA_test_uget_DEPENDENCIES) @rm -f test-uget$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_uget_OBJECTS) $(test_uget_LDADD) $(LIBS) test-uglib$(EXEEXT): $(test_uglib_OBJECTS) $(test_uglib_DEPENDENCIES) $(EXTRA_test_uglib_DEPENDENCIES) @rm -f test-uglib$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_uglib_OBJECTS) $(test_uglib_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-json.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-jsonrpc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-uget.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-uglib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_plugin_app-test-plugin+app.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` test_plugin_app-test-plugin+app.o: test-plugin+app.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_app_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_plugin_app-test-plugin+app.o -MD -MP -MF $(DEPDIR)/test_plugin_app-test-plugin+app.Tpo -c -o test_plugin_app-test-plugin+app.o `test -f 'test-plugin+app.c' || echo '$(srcdir)/'`test-plugin+app.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_plugin_app-test-plugin+app.Tpo $(DEPDIR)/test_plugin_app-test-plugin+app.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-plugin+app.c' object='test_plugin_app-test-plugin+app.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_app_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_plugin_app-test-plugin+app.o `test -f 'test-plugin+app.c' || echo '$(srcdir)/'`test-plugin+app.c test_plugin_app-test-plugin+app.obj: test-plugin+app.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_app_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_plugin_app-test-plugin+app.obj -MD -MP -MF $(DEPDIR)/test_plugin_app-test-plugin+app.Tpo -c -o test_plugin_app-test-plugin+app.obj `if test -f 'test-plugin+app.c'; then $(CYGPATH_W) 'test-plugin+app.c'; else $(CYGPATH_W) '$(srcdir)/test-plugin+app.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_plugin_app-test-plugin+app.Tpo $(DEPDIR)/test_plugin_app-test-plugin+app.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-plugin+app.c' object='test_plugin_app-test-plugin+app.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_app_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_plugin_app-test-plugin+app.obj `if test -f 'test-plugin+app.c'; then $(CYGPATH_W) 'test-plugin+app.c'; else $(CYGPATH_W) '$(srcdir)/test-plugin+app.c'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile #test_uglib_cxx_CPPFLAGS = -I$(top_srcdir)/uglib #test_uglib_cxx_CXXFLAGS = -std=c++11 #test_uglib_cxx_LDADD = $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) #test_uglib_cxx_SOURCES = test-uglib-cxx.cxx #test_uget_cxx_CXXFLAGS = -std=c++11 #test_uget_cxx_LDADD = $(top_builddir)/uget/libuget.a $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) #test_uget_cxx_SOURCES = test-uget-cxx.cxx # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: uget-2.2.3/tests/test-uglib.c0000664000175000017500000003103213602733704012776 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #include #include #include #include #include #if defined _WIN32 || defined _WIN64 #include #include #include // ShellExecuteW() void test_launch (void) { uint16_t* pathutf16; uint16_t* parmutf16; int result; pathutf16 = ug_utf8_to_utf16 ("C:\\Program Files\\uGet\\bin\\aria2c", -1, NULL); parmutf16 = ug_utf8_to_utf16 ("--enable-rpc=true", -1, NULL); wprintf (L"%s %s", pathutf16, parmutf16); result = (int)ShellExecuteW (NULL, L"open", pathutf16, parmutf16, NULL, SW_HIDE); if (result > 32) puts ("ShellExecuteW - OK"); free (parmutf16); free (pathutf16); } #else void test_launch (void) { } #endif // ---------------------------------------------------------------------------- // test UgUri void dump_uri (UgUri* uri) { } void test_uri (void) { char* temp; char* hosts[] = {"ftp.you.com", ".your.org", ".edu", NULL}; char* exts[] = {"png", "bmp", "jpg", NULL}; char* schemes[] = {"ftp", "http", "git", NULL}; // const char* uri = "ftp://i.am.ftp.you.com/file.bmp"; const char* uri = "http://my.and.your.org/file%200.png?field1=value1&field2=value2&field3"; // const char* uri = "git://this.edu/file.jpg"; const char* query; UgUriQuery uquery; UgUri uuri; int index; puts ("\n--- test_uri:"); ug_uri_init (&uuri, uri); index = ug_uri_match_hosts (&uuri, hosts); printf ("ug_uri_match_hosts () return %d\n", index); index = ug_uri_match_schemes (&uuri, schemes); printf ("ug_uri_match_schemes () return %d\n", index); index = ug_uri_match_file_exts (&uuri, exts); printf ("ug_uri_match_file_exts () return %d\n", index); temp = ug_uri_get_file (&uuri); puts (temp); ug_free (temp); query = uri + uuri.query; while ((index = ug_uri_query_part (&uquery, query)) > 0) { printf ("ug_uri_query_part() return %d, %.*s=%.*s\n", index, uquery.field_len, query, uquery.value_len, uquery.value); query = uquery.field_next; } temp = ug_strdup ("file%2020%%20100%2f%20.jpg"); index = ug_decode_uri (temp, -1, temp); printf ("ug_decode_uri() return %d, output - '%s'\n", index, temp); ug_free (temp); } // ---------------------------------------------------------------------------- // test UgList static UgLink link[4]; void test_list (void) { UgLink* temp; UgList list; uintptr_t index; ug_list_init (&list); for (index = 0; index < 4; index++) link[index].data = (void*) index; ug_list_append (&list, link + 0); ug_list_append (&list, link + 1); ug_list_append (&list, link + 2); ug_list_append (&list, link + 3); ug_list_remove (&list, link + 2); ug_list_insert (&list, link + 3, link + 2); for (temp = list.head; temp; temp = temp->next) { printf ("%d, %p, %p\n", (int)(intptr_t)temp->data, temp->prev, temp->next); } } // ---------------------------------------------------------------------------- // test UgNode void dump_node (UgNode* root) { UgNode* cur; printf ("node->next : %p\n", root->next); printf ("node->prev : %p\n", root->prev); printf ("node->parent : %p\n", root->parent); printf ("node->children : %p\n", root->children); printf ("node->n_children : %d\n", root->n_children); for (cur = root->children; cur; cur = cur->next) printf ("%u\n", (unsigned)(uintptr_t)cur->data); } void test_node (void) { UgNode* root; UgNode* node1; UgNode* node2; UgNode* node3; UgNode* node4; puts ("\n--- test_node:"); root = ug_node_new (); node1 = ug_node_new (); node1->data = (void*)(uintptr_t) 1; node2 = ug_node_new (); node2->data = (void*)(uintptr_t) 2; node3 = ug_node_new (); node3->data = (void*)(uintptr_t) 3; node4 = ug_node_new (); node4->data = (void*)(uintptr_t) 4; ug_node_append (root, node3); printf ("ug_node_append (3)\n"); ug_node_prepend (root, node1); printf ("ug_node_prepend (1)\n"); ug_node_insert (root, node3, node2); printf ("ug_node_insert (2) before 3\n"); ug_node_append (root, node4); printf ("ug_node_append (4)\n"); printf ("root.n_children : %d\n", root->n_children); dump_node (root); ug_node_unlink (node2); dump_node (node2); ug_node_free (root); ug_node_free (node1); ug_node_free (node2); ug_node_free (node3); ug_node_free (node4); } // ---------------------------------------------------------------------------- // UgBuffer void test_buffer () { UgBuffer buffer; puts ("\n--- test_buffer:"); ug_buffer_init (&buffer, 3); ug_buffer_write (&buffer, "This is test string.", -1); ug_buffer_write_char (&buffer, 'K'); *ug_buffer_alloc (&buffer, 1) = 'S'; *ug_buffer_alloc (&buffer, 1) = 'D'; ug_buffer_write_char (&buffer, 'K'); ug_buffer_write_char (&buffer, '\0'); puts ((char*)buffer.beg); ug_buffer_clear (&buffer, 1); } // ---------------------------------------------------------------------------- // UgSLink static void slinks_add_range (UgSLinks* slinks, char** strings, int beg, int end) { for (; beg < end; beg++) { strings[beg] = ug_strdup_printf ("%.3d", beg); ug_slinks_add (slinks, strings[beg]); } } static void slinks_remove_range (UgSLinks* slinks, char** strings, int beg, int end) { for (; beg < end; beg++) { ug_slinks_remove (slinks, strings[beg], NULL); ug_free (strings[beg]); strings[beg] = NULL; } } void test_slink () { char** strings; UgSLinks slinks; puts ("\n--- test_slink:"); ug_slinks_init (&slinks, 16); strings = ug_malloc0 (sizeof (char*) * 100); slinks_add_range (&slinks, strings, 40, 60); slinks_add_range (&slinks, strings, 0, 20); slinks_add_range (&slinks, strings, 80, 100); slinks_add_range (&slinks, strings, 20, 40); slinks_add_range (&slinks, strings, 60, 80); slinks_remove_range (&slinks, strings, 0, 10); slinks_remove_range (&slinks, strings, 90, 100); slinks_remove_range (&slinks, strings, 70, 90); slinks_remove_range (&slinks, strings, 10, 30); slinks_remove_range (&slinks, strings, 30, 50); slinks_remove_range (&slinks, strings, 50, 70); slinks_add_range (&slinks, strings, 0, 20); slinks_add_range (&slinks, strings, 80, 100); slinks_remove_range (&slinks, strings, 0, 10); slinks_remove_range (&slinks, strings, 90, 100); ug_slinks_foreach (&slinks, (void*)puts, NULL); slinks_remove_range (&slinks, strings, 10, 20); slinks_remove_range (&slinks, strings, 80, 90); ug_free (strings); ug_slinks_final (&slinks); } // ---------------------------------------------------------------------------- // UgUtil void test_base64 () { const char* test_string = "This is a test string."; char* base64; char* orig; int len; puts ("\n--- test_base64:"); base64 = ug_base64_encode ((uint8_t*)test_string, strlen (test_string), &len); printf ("%.*s\n", len, base64); puts (base64); orig = (char*) ug_base64_decode(base64, len, NULL); printf ("%.*s\n", len, orig); ug_free (base64); ug_free (orig); } // ---------------------------------------------------------------------------- // Utility void test_utility () { char* temp; time_t res; int n; res = ug_str_rfc822_to_time ("Sat, 07 Sep 2002 00:00:01 GMT"); if (res != -1) puts (ctime (&res)); res = ug_str_rfc3339_to_time ("2013-09-12T22:50:20+08:00"); if (res != -1) puts (ctime (&res)); temp = ug_build_filename ("basedir", "path", "file", NULL); printf ("ug_build_filename() - %s\n", temp); ug_free (temp); temp = ug_strdup ("\nThis\n one\r"); puts ("--- ug_str_remove_crlf () --- start ---"); puts (temp); n = ug_str_remove_crlf (temp, temp); puts (temp); printf ("--- ug_str_remove_crlf () return %d --- end ---", n); ug_free (temp); } // ---------------------------------------------------------------------------- // Option struct Opt { int index; char* name; }; UgOptionEntry opt_entry[] = { {"category-index", "ci", offsetof (struct Opt, index), UG_ENTRY_INT, "", "=N", NULL}, {"category-name", "cn", offsetof (struct Opt, name), UG_ENTRY_STRING, "", "=name", NULL}, {NULL} }; int print_option_callback (UgOption* option, const char* name, const char* value, void* dest, void* data) { printf ("%s = %s\n", name, value); return TRUE; } void test_option (void) { UgOption option; struct Opt dest; ug_option_init (&option); // ug_option_set_parser (&option, print_option_callback, NULL, NULL); ug_option_set_parser (&option, ug_option_parse_entry, &dest, opt_entry); ug_option_parse (&option, "--category-index=1", -1); ug_option_parse (&option, "-cn=hhk", -1); ug_option_final (&option); } void test_cmd_arg (void) { const char* cmd = "--enable --file=\"\" --arg "; char** argv; int argc; int count; argv = ug_argv_from_cmd (cmd, &argc, 0); for (count = 0; count < argc; count++) puts (argv[count]); ug_argv_free (argv); } // ---------------------------------------------------------------------------- // HTML void start_element (UgHtml* uhtml, const char* element_name, const char** attribute_names, const char** attribute_values, void* dest, void* data) { int index; printf ("<%s", element_name); for (index = 0; attribute_names[index]; index++) printf (" %s=%s", attribute_names[index], attribute_values[index]); printf (">"); } void end_element (UgHtml* uhtml, const char* element_name, void* dest, void* data) { printf ("\n", element_name); } void text (UgHtml* uhtml, const char* text, int text_len, void* dest, void* data) { printf ("%s", text); } UgHtmlParser testparser = { start_element, end_element, text }; void test_html (void) { UgHtml* uhtml; uhtml = ug_html_new (); ug_html_begin_parse (uhtml); ug_html_push (uhtml, &testparser, NULL, NULL); ug_html_parse (uhtml, "< p attr1=\"value1\" attr2=val2/> < &xxxxx; ", -1); ug_html_end_parse (uhtml); puts("\n"); } void test_unicode (void) { const char* utf8_name = "\xE9\xBB\x83\xE6\xAD\xA3\xE9\x9B\x84"; char* utf8_str; uint32_t* ucs4_str; int len; int idx; ucs4_str = ug_utf8_to_ucs4 (utf8_name, -1, &len); for (idx = 0; idx < len; idx++) printf ("\\x%X", ucs4_str[idx]); puts (""); utf8_str = ug_ucs4_to_utf8 (ucs4_str, -1, &len); for (idx = 0; idx < len; idx++) printf ("\\x%X", (unsigned)(uint8_t)utf8_str[idx]); puts (""); ug_free (ucs4_str); ug_free (utf8_str); } // ---------------------------------------------------------------------------- // main int main (void) { test_unicode (); test_html (); test_cmd_arg (); test_option (); test_list (); test_node (); test_uri (); test_buffer (); test_slink (); // test_launch (); test_base64 (); test_utility (); return 0; } uget-2.2.3/tests/test-uget.c0000664000175000017500000003370413602733704012650 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #include //#include #include #include #include #include #include // ---------------------------------------------------------------------------- // UgetNode UgEntry NodeChildrenEntry[] = { {NULL, 0, UG_ENTRY_ARRAY, (UgJsonParseFunc) ug_json_parse_uget_node_children, (UgJsonWriteFunc) ug_json_write_uget_node_children}, {NULL} }; void init_node (UgetNode* parent) { UgetNode* newone; UgetNode* newtwo; newone = uget_node_new (NULL); uget_node_append (parent, newone); newtwo = uget_node_new (NULL); uget_node_append (parent, newtwo); parent = newtwo; newone = uget_node_new (NULL); uget_node_append (parent, newone); newtwo = uget_node_new (NULL); uget_node_append (parent, newtwo); } // "01-03-02" void dump_int_array (UgArrayInt* array) { int index; for (index = 0; index < array->length; index++) { if (index) printf ("-"); printf ("%.2d", array->at[index]); } puts (""); } void dump_fake_path (UgetNode* node, UgArrayInt* array) { UgetNode* cur; int index; for (index = 0, cur = node->fake; cur; cur = cur->peer, index++) { *(int*) ug_array_alloc(array, 1) = index; dump_int_array (array); dump_fake_path (cur, array); array->length--; } } void print_fake_path (UgetNode* node) { UgArrayInt array; ug_array_init(&array, sizeof (int), 20); dump_fake_path (node, &array); ug_array_clear (&array); } void test_fake_path () { UgetNode* node; UgetNode* fake0; UgetNode* fake1; UgetNode* fake2; node = uget_node_new (NULL); fake0 = uget_node_new (node); fake1 = uget_node_new (node); fake2 = uget_node_new (node); uget_node_new (fake0); uget_node_new (fake1); uget_node_new (fake1); uget_node_new (fake2); uget_node_new (fake2); uget_node_new (fake2); print_fake_path (node); uget_node_free (node); } void parse_node (UgetNode* parent) { int code; UgJson json; const char* json_string = { "[" " {" " \"name\": null," " \"type\": 1," " \"info\": {" " }," " \"children\": [" " ]" " }," " {" " \"name\": null," " \"type\": 2," " \"info\": {" " }," " \"children\": [" " {" " \"name\": null," " \"type\": 3," " \"info\": {" " }," " \"children\": [" " ]" " }," " {" " \"name\": null," " \"type\": 4," " \"info\": {" " }," " \"children\": [" " ]" " }" " ]" " }" "]" }; ug_json_init (&json); ug_json_begin_parse (&json); #if 1 // method 1: use UgEntry to parse start of array ug_json_push (&json, ug_json_parse_entry, parent, NodeChildrenEntry); #else // method 2: push ug_json_parse_array() to parse start of array ug_json_push (&json, ug_json_parse_uget_node_children, parent, NULL); ug_json_push (&json, ug_json_parse_array, NULL, NULL); #endif code = ug_json_parse (&json, json_string, -1); printf ("ug_json_parse response %d\n", code); code = ug_json_end_parse (&json); printf ("ug_json_end_parse response %d\n", code); ug_json_final (&json); } // UgBufferFunc static int buffer_to_file (UgBuffer* buffer) { FILE* file = buffer->data; printf ("write %d bytes to file\n", ug_buffer_length (buffer)); fwrite (buffer->beg, 1, ug_buffer_length(buffer), file); buffer->cur = buffer->beg; return 0; } void write_node_to_file (UgetNode* node, char* filename) { UgBuffer buffer; UgJson json; FILE* file; file = fopen (filename, "w"); ug_buffer_init (&buffer, 128); buffer.more = buffer_to_file; buffer.data = file; ug_json_init (&json); ug_json_begin_write (&json, UG_JSON_FORMAT_INDENT, &buffer); #if 1 // method 1: use UgEntry to write start of object ug_json_write_entry (&json, node, NodeChildrenEntry); #else // method 2: call ug_json_write_object_head() to write start of object ug_json_write_array_head (&json); ug_json_write_uget_node_children (&json, node); ug_json_write_array_tail (&json); #endif ug_json_end_write (&json); ug_json_final (&json); ug_buffer_clear (&buffer, 1); fclose (file); } void test_uget_node () { UgetNode* root; root = uget_node_new (NULL); #if 0 init_node (root); #else parse_node (root); #endif write_node_to_file (root, "test-UgetNode.json"); } // ---------------------------------------------------------------------------- // UgetA2cf void print_bitfield (uint8_t* bytes, int length) { int count; int index; int temp; for (index = 0; index < length; index++) { for (count = 0; count < 8; count++) { temp = (bytes[0] << count) & 0x80; if (temp) printf ("1"); else printf ("0"); } printf ("\n"); bytes++; } } void print_a2cf (UgetA2cf* a2cf) { UgetA2cfPiece* piece; if (a2cf == NULL) return; printf ("ver : %d\n", (int)a2cf->ver); printf ("ext : %d\n", (int)a2cf->ext); printf ("info_hash_len : %d\n", (int)a2cf->info_hash_len); printf ("piece_len : %d\n", (int)a2cf->piece_len); printf ("total_len : %d\n", (int)a2cf->total_len); printf ("upload_len : %d\n", (int)a2cf->upload_len); printf ("bitfield_len : %d\n", (int)a2cf->bitfield_len); if (a2cf->bitfield_len) { printf ("bitfield:\n"); print_bitfield (a2cf->bitfield, a2cf->bitfield_len); } printf ("n_pieces : %d\n", (int)a2cf->piece.list.size); for (piece = (void*)a2cf->piece.list.head; piece; piece = piece->next) { printf ("index : %d\n", (int)piece->index); printf ("length : %d\n", (int)piece->length); printf ("bitfield_length : %d\n", (int)piece->bitfield_len); printf ("bitfield:\n"); print_bitfield (piece->bitfield, piece->bitfield_len); } } void test_uget_a2cf (void) { UgetA2cf a2cf; const char* fname; uint64_t beg, end; memset (&a2cf, 0, sizeof (UgetA2cf)); fname = "D:\\Downloads\\TestData-Aria2\\npp.6.4.2.Installer.exe.aria2-1"; printf ("%s\n", fname); uget_a2cf_load (&a2cf, fname); print_a2cf (&a2cf); uget_a2cf_clear (&a2cf); fname = "D:\\Downloads\\TestData-Aria2\\npp.6.4.2.Installer.exe.aria2-2"; printf ("%s\n", fname); uget_a2cf_load (&a2cf, fname); // fill beg = 3145728 + 16384 * 2; end = 5242880 + 16384 * 4 + 1; // beg = 7340032; // + 16384 * 2; // end = 7401344; printf ("fill %d - %d\n", (int)beg, (int)end); printf ("fill result %d\n", (int)uget_a2cf_fill (&a2cf, beg, end)); // lack beg = 0; // beg = 3145728 - 16384 * 2; // beg = 5242880; // beg = 7340032; // beg = 7401344; if (uget_a2cf_lack (&a2cf, &beg, &end)) printf ("lack %d - %d\n", (int)beg, (int)end); print_a2cf (&a2cf); // completed printf ("completed: %u\n", (unsigned)uget_a2cf_completed (&a2cf)); // clear uget_a2cf_clear (&a2cf); fname = "D:\\Downloads\\TestData-Aria2\\npp.6.4.3.Installer.exe.aria2"; printf ("%s\n", fname); uget_a2cf_load (&a2cf, fname); print_a2cf (&a2cf); // lack beg = 0; uget_a2cf_lack (&a2cf, &beg, &end); printf ("lack %d - %d\n", (int)beg, (int)end); uget_a2cf_clear (&a2cf); fname = "D:\\Downloads\\TestData-Aria2\\ubuntu-13.04-desktop-amd64.iso.aria2"; printf ("%s\n", fname); uget_a2cf_load (&a2cf, fname); print_a2cf (&a2cf); uget_a2cf_clear (&a2cf); fname = "D:\\Downloads\\TestData-Aria2\\eclipse-cpp-kepler-R-win32.zip.aria2"; printf ("%s\n", fname); uget_a2cf_load (&a2cf, fname); print_a2cf (&a2cf); uget_a2cf_clear (&a2cf); } // ---------------------------------------------------------------------------- // UgetCurl void test_uget_curl (void) { UgetCurl* ugcurl; ugcurl = uget_curl_new (); uget_curl_set_url (ugcurl, "http://msysgit.googlecode.com/files/Git-1.8.5.2-preview20131230.exe"); uget_curl_open_file (ugcurl, NULL); ugcurl->header_store = TRUE; uget_curl_run (ugcurl, TRUE); ug_thread_join (&ugcurl->thread); uget_curl_free (ugcurl); } // ---------------------------------------------------------------------------- // UgetRss void test_uget_rss (void) { UgetRss* urss; UgetRssFeed* feed; UgetRssItem* item = NULL; urss = uget_rss_new (); uget_rss_add_builtin (urss, UGET_RSS_STABLE); uget_rss_update (urss, TRUE); ug_thread_join (&urss->thread); feed = uget_rss_find_updated (urss, NULL); if (feed) item = uget_rss_feed_find (feed, -1); if (item) printf ("title %s\n", item->title); uget_rss_unref (urss); } // ---------------------------------------------------------------------------- // UgetMedia void test_media (void) { UgetMedia* umedia; UgetMediaItem* umitem; int count; char* uri; uri = "https://www.youtube.com/watch?v=y2004Xaz2HU"; count = uget_site_get_id (uri); umedia = uget_media_new (uri, UGET_SITE_YOUTUBE); count = uget_media_grab_items (umedia, NULL); printf ("\nget %d media item\n", count); umitem = uget_media_match (umedia, UGET_MEDIA_MATCH_1, UGET_MEDIA_QUALITY_UNKNOWN, UGET_MEDIA_TYPE_MP4); // umitem = uget_media_match (umedia, // UGET_MEDIA_MATCH_0, // UGET_MEDIA_QUALITY_UNKNOWN, // UGET_MEDIA_TYPE_MP4); for (; umitem; umitem = umitem->next) { // printf ("URL %s" "\n", umitem->url); printf ("quality %d, type %d, has_url %d\n", umitem->quality, umitem->type, (umitem->url) ? 1 : 0); } uget_media_free (umedia); } // ---------------------------------------------------------------------------- // UgetSeq void test_seq (void) { UgetSequence useq; UgList list; UgLink* link; ug_list_init (&list); uget_sequence_init (&useq); // digits uget_sequence_add (&useq, 0, 5, 2); // ASCII or Unicode uget_sequence_add (&useq, 'a', 'b', 0); uget_sequence_add (&useq, 0x7532, 0x7535, 0); printf (" --- sequence --- count = %d\n", uget_sequence_count (&useq, "http://sample/*-*-*.mp4")); uget_sequence_get_list (&useq, "http://sample/*-*-*.mp4", &list); for (link = list.head; link; link = link->next) puts (link->data); uget_sequence_clear_result(&list); puts (" --- preview ---"); uget_sequence_get_preview (&useq, "http://sample/*-*.mp4", &list); for (link = list.head; link; link = link->next) puts (link->data); uget_sequence_clear_result(&list); uget_sequence_final (&useq); } // ---------------------------------------------------------------------------- // UgetFiles void test_files_json(UgetFiles* files) { UgJson json; UgBuffer buffer; UgJsonError code; UgetFiles* files2; ug_json_init(&json); ug_buffer_init(&buffer, 4096); // write ug_json_begin_write(&json, UG_JSON_FORMAT_INDENT, &buffer); ug_json_write_object_head(&json); ug_json_write_entry(&json, files, files->info->entry); ug_json_write_object_tail(&json); ug_json_end_write(&json); ug_buffer_write_char(&buffer, '\0'); puts("\n--- print files ---"); puts(buffer.beg); files2 = ug_data_new(UgetFilesInfo); // parse ug_json_begin_parse(&json); ug_json_push(&json, ug_json_parse_entry, files2, (void*)files2->info->entry); ug_json_push(&json, ug_json_parse_object, NULL, NULL); code = ug_json_parse(&json, buffer.beg, -1); ug_json_end_parse(&json); printf("\n" "parse return %d\n", code); // write buffer.cur = buffer.beg; ug_json_begin_write(&json, UG_JSON_FORMAT_INDENT, &buffer); ug_json_write_entry(&json, files2, files2->info->entry); ug_json_end_write(&json); ug_buffer_write_char(&buffer, '\0'); puts("\n--- print files2 ---"); puts(buffer.beg); ug_data_free(files2); ug_buffer_clear(&buffer, TRUE); ug_json_final(&json); } void test_files(void) { UgetFiles* files; UgetFiles* src; UgetFile* element; files = ug_data_new(UgetFilesInfo); src = ug_data_new(UgetFilesInfo); element = uget_files_realloc(files, "0.mp4"); element = uget_files_realloc(files, "1.mp4"); element = uget_files_realloc(files, "2.mp4"); element = uget_files_realloc(files, "xyz.mp4"); test_files_json(files); element = uget_files_realloc(src, "0.mp4"); element = uget_files_realloc(src, "1.mp4"); element = uget_files_realloc(src, "2.mp4"); element = uget_files_realloc(src, "3.mp4"); element = uget_files_realloc(src, "foo.mp4"); element = uget_files_realloc(src, "xxx.apk"); uget_files_sync(files, src); test_files_json(files); element->state |= UGET_FILE_STATE_DELETED; src->sync_count++; uget_files_sync(files, src); test_files_json(files); ug_data_free(files); ug_data_free(src); } // ---------------------------------------------------------------------------- // main int main (void) { // test_uget_node (); // test_fake_path (); // test_uget_a2cf (); // test_uget_curl (); // test_uget_rss (); // test_media (); // test_seq (); test_files(); return 0; } uget-2.2.3/tests/test-json.c0000664000175000017500000005777613602733704012674 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include #include #include #include #include #include #include #include #include // ---------------------------------------------------------------------------- // WorkedId typedef struct { int worked; char* id; } WorkedId; UgJsonError worked_id_custom_parse (UgJson* json, const char* name, const char* value, void* dest, void* none); void worked_id_custom_write (UgJson* json, void* data); UgEntry WorkedIdEntry[] = { {"worked", offsetof (WorkedId, worked), UG_ENTRY_BOOL, NULL, NULL}, {"id", offsetof (WorkedId, id), UG_ENTRY_STRING, NULL, NULL}, {NULL}, }; // used by test_json_object_custom() UgEntry WorkedIdCustomEntry[] = { {NULL, 0, UG_ENTRY_CUSTOM, (UgJsonParseFunc) worked_id_custom_parse, (UgJsonWriteFunc) worked_id_custom_write }, {NULL} }; // ------------------------------------ // WorkedId functions void worked_id_init (WorkedId* wid) { wid->worked = 0; wid->id = NULL; } void worked_id_final (WorkedId* wid) { ug_free (wid->id); } WorkedId* worked_id_new (void) { WorkedId* wid; wid = ug_malloc (sizeof (WorkedId)); worked_id_init(wid); return wid; } void worked_id_free (WorkedId* wid) { worked_id_final (wid); } // UgEntry.type = UG_ENTRY_CUSTOM // UgEntry.param1 = (UgJsonParseFunc) worked_id_custom_parse UgJsonError worked_id_custom_parse (UgJson* json, const char* name, const char* value, void* dest, void* none) { // WorkedId's type is UG_JSON_OBJECT if (json->type != UG_JSON_OBJECT) { // if (json->type == UG_JSON_ARRAY) // ug_json_push (json, ug_json_parse_unknown, NULL, NULL); return UG_JSON_ERROR_TYPE_NOT_MATCH; } // initialize WorkedId. If you have initialized it, don't initialize again. // worked_id_init (dest); // push JSON parser, only UG_JSON_OBJECT or UG_JSON_ARRAY need to push parser. ug_json_push (json, ug_json_parse_entry, dest, WorkedIdEntry); // return error code return UG_JSON_ERROR_NONE; } // UgEntry.type = UG_ENTRY_CUSTOM // UgEntry.param2 = (UgJsonWriteFunc) worked_id_custom_write void worked_id_custom_write (UgJson* json, void* data) { ug_json_write_object_head (json); ug_json_write_entry (json, data, WorkedIdEntry); ug_json_write_object_tail (json); } // ---------------------------------------------------------------------------- // WorkedIdArray typedef UG_ARRAY (WorkedId) WorkedIdArray; UgJsonError worked_id_array_parse (UgJson* json, const char* name, const char* value, void* array, void* none) { WorkedId* wid; // WorkedId's type is UG_JSON_OBJECT if (json->type != UG_JSON_OBJECT) { // if (json->type == UG_JSON_ARRAY) // ug_json_push (json, ug_json_parse_unknown, NULL, NULL); return UG_JSON_ERROR_TYPE_NOT_MATCH; } wid = ug_array_alloc (array, 1); worked_id_init (wid); // push JSON parser, only UG_JSON_OBJECT or UG_JSON_ARRAY need to push parser. ug_json_push (json, ug_json_parse_entry, wid, WorkedIdEntry); // return error code return UG_JSON_ERROR_NONE; } void worked_id_array_write (UgJson* json, void* array) { WorkedId* cur; WorkedId* end; cur = ((WorkedIdArray*)array)->at; end = ((WorkedIdArray*)array)->at + ((WorkedIdArray*)array)->length; for (; cur < end; cur++) worked_id_custom_write (json, cur); } // ---------------------------------------------------------------------------- // SampleJs typedef struct { char* name; struct Info { struct FtpInfo { char* user; char* password; int active_mode; } ftp; struct HttpInfo { char* user_agent; char* referrer; } http; UgArrayStr sarray; UgArrayInt iarray; UG_ARRAY(WorkedId) oarray; } info; } SampleJs; // SampleJs.Info.FtpInfo UgEntry FtpInfoEntry[] = { {"user", offsetof (struct FtpInfo, user), UG_ENTRY_STRING, NULL, NULL}, {"password", offsetof (struct FtpInfo, password), UG_ENTRY_STRING, NULL, NULL}, {"active-mode",offsetof (struct FtpInfo, active_mode),UG_ENTRY_BOOL, NULL, NULL}, {NULL}, }; // SampleJs.Info.HttpInfo UgEntry HttpInfoEntry[] = { {"user-agent", offsetof (struct HttpInfo, user_agent), UG_ENTRY_STRING, NULL, NULL}, {"referrer", offsetof (struct HttpInfo, referrer), UG_ENTRY_STRING, NULL, NULL}, {NULL}, }; // SampleJs.Info UgEntry InfoEntry[] = { {"ftp", offsetof (struct Info, ftp), UG_ENTRY_OBJECT, FtpInfoEntry, (UgInitFunc) NULL}, {"http", offsetof (struct Info, http), UG_ENTRY_OBJECT, HttpInfoEntry, (UgInitFunc) NULL}, {"sarray", offsetof (struct Info, sarray), UG_ENTRY_ARRAY, ug_json_parse_array_string, ug_json_write_array_string}, {"iarray", offsetof (struct Info, iarray), UG_ENTRY_ARRAY, ug_json_parse_array_int, ug_json_write_array_int}, {"oarray", offsetof (struct Info, oarray), UG_ENTRY_ARRAY, worked_id_array_parse, worked_id_array_write}, {NULL}, }; // SampleJs UgEntry SampleJsEntry[] = { {"name", offsetof (SampleJs, name), UG_ENTRY_STRING, NULL, NULL}, {"info", offsetof (SampleJs, info), UG_ENTRY_OBJECT, InfoEntry, (UgInitFunc) NULL}, {NULL}, }; // used by sample_js_parse() UgEntry SampleJsObjectEntry[] = { {NULL, 0, UG_ENTRY_OBJECT, SampleJsEntry, (UgInitFunc) NULL}, {NULL} }; // ------------------------------------ // SampleJs functions SampleJs* sample_js_new (void) { SampleJs* samplejs; samplejs = calloc (1, sizeof (SampleJs)); ug_array_init (&samplejs->info.sarray, sizeof (char*), 0); ug_array_init (&samplejs->info.iarray, sizeof (int), 0); ug_array_init (&samplejs->info.oarray, sizeof (WorkedId), 0); return samplejs; } void sample_js_free (SampleJs* samplejs) { ug_array_clear (&samplejs->info.sarray); ug_array_clear (&samplejs->info.iarray); ug_array_clear (&samplejs->info.oarray); free (samplejs); } // UgJsonParseFunc UgJsonError json_debug_parser (UgJson* json, const char* name, const char* value, void* dest, void* none) { printf ("scope : %s\n", (json->scope == UG_JSON_ARRAY) ? "A" : "O"); if (json->type == UG_JSON_ARRAY || json->type == UG_JSON_OBJECT) ug_json_push (json, json_debug_parser, NULL, NULL); // UgJson.index[0] : index of name // UgJson.index[1] : index of value // debug if (json->index[0]) printf ("'%s' : ", json->buf.at + json->index[0]); switch (json->type) { case UG_JSON_NULL: // null printf ("NULL '%s'", json->buf.at + json->index[1]); break; case UG_JSON_TRUE: // true printf ("TRUE '%s'", json->buf.at + json->index[1]); break; case UG_JSON_FALSE: // false printf ("FALSE '%s'", json->buf.at + json->index[1]); break; case UG_JSON_NUMBER: // 1234, 0.567 printf ("NUMBER '%s'", json->buf.at + json->index[1]); break; case UG_JSON_STRING: // "string" printf ("STRING '%s'", json->buf.at + json->index[1]); break; case UG_JSON_OBJECT: // { printf ("OBJECT"); break; case UG_JSON_ARRAY: // [ printf ("ARRAY"); break; } printf ("\n"); return 0; } static const char* sample_js_string = { "{" " \"name\": \"\\u5927\\u4E2Dfile.torrent\"," " \"info\":" " {" " \"ftp\":" " {" " \"user\": \"anonymous\"," " \"password\": \"guest@unknown\"," " \"active-mode\": false" " }," " \"http\":" " {" " \"user-agent\": \"Browser\\/version\"," " \"referrer\": \"http:\\/\\/127.0.0.1\\/\" " " }," " \"sarray\":" " [" " \"element1\", \"element2\"," " \"element3\", \"element\\n4\" " " ]," " \"iarray\":" " [" " 1234, 2012," " 4567, 2011 " " ]," " \"oarray\":" " [" " { \"worked\" : false, \"id\": \"KMan\" }," " { \"worked\" : true , \"id\": \"Kimi\" }," " { \"worked\" : false, \"id\": \"XMan\" }," " { \"worked\" : true , \"id\": \"WMan\" }" " ]" " }" "}" }; void sample_js_parse (SampleJs* samplejs) { UgJson json; int code; // JSON string for SampleJs const char* json_string = sample_js_string; memset (&json, 0, sizeof (json)); ug_json_init (&json); ug_json_begin_parse (&json); #if 1 // method 1: use UgEntry to parse start of object ug_json_push (&json, ug_json_parse_entry, samplejs, SampleJsObjectEntry); #elif 1 // method 2: push ug_json_parse_object() to parse start of object ug_json_push (&json, ug_json_parse_entry, samplejs, SampleJsEntry); ug_json_push (&json, ug_json_parse_object, NULL, NULL); #else // debug ug_json_push (&json, json_debug_parser, NULL, NULL); ug_json_push (&json, ug_json_parse_object, NULL, NULL); #endif code = ug_json_parse (&json, json_string, -1); printf ("ug_json_parse response %d\n", code); code = ug_json_end_parse (&json); printf ("ug_json_end_parse response %d\n", code); ug_json_final (&json); } void sample_js_reparse (SampleJs* samplejs) { UgJson json; UgValue value; ug_value_init (&value); memset (&json, 0, sizeof (json)); ug_json_init (&json); ug_json_begin_parse (&json); ug_json_push (&json, ug_json_parse_value, &value, NULL); ug_json_parse (&json, sample_js_string, -1); ug_json_end_parse (&json); // convert UgValue to UgEntry ug_json_begin_parse (&json); ug_json_push (&json, ug_json_parse_entry, samplejs, SampleJsObjectEntry); ug_json_parse_by_value (&json, &value); ug_json_end_parse (&json); ug_json_final (&json); ug_value_clear (&value); } void sample_js_print (SampleJs* samplejs) { UgJson json; UgBuffer buffer; printf ("\n" "obj.info.ftp.user: %s\n" "obj.info.ftp.password: %s\n" "obj.info.ftp.active_mode: %d\n" "obj.info.http.user_agent: %s\n" "obj.info.http.referrer: %s\n", samplejs->info.ftp.user, samplejs->info.ftp.password, samplejs->info.ftp.active_mode, samplejs->info.http.user_agent, samplejs->info.http.referrer ); printf ("obj.info.sarray[0]: %s\n" "obj.info.sarray[1]: %s\n" "obj.info.sarray[2]: %s\n" "obj.info.sarray[3]: %s\n", samplejs->info.sarray.at[0], samplejs->info.sarray.at[1], samplejs->info.sarray.at[2], samplejs->info.sarray.at[3]); printf ("obj.info.iarray[0]: %d\n" "obj.info.iarray[1]: %d\n" "obj.info.iarray[2]: %d\n" "obj.info.iarray[3]: %d\n", samplejs->info.iarray.at[0], samplejs->info.iarray.at[1], samplejs->info.iarray.at[2], samplejs->info.iarray.at[3]); printf ("obj.info.oarray[0].worked: %d\n" "obj.info.oarray[0].id: %s\n" "obj.info.oarray[1].worked: %d\n" "obj.info.oarray[1].id: %s\n" "obj.info.oarray[2].worked: %d\n" "obj.info.oarray[2].id: %s\n" "obj.info.oarray[3].worked: %d\n" "obj.info.oarray[3].id: %s\n", samplejs->info.oarray.at[0].worked, samplejs->info.oarray.at[0].id, samplejs->info.oarray.at[1].worked, samplejs->info.oarray.at[1].id, samplejs->info.oarray.at[2].worked, samplejs->info.oarray.at[2].id, samplejs->info.oarray.at[3].worked, samplejs->info.oarray.at[3].id); ug_json_init (&json); ug_buffer_init (&buffer, 1024); ug_json_begin_write (&json, UG_JSON_FORMAT_INDENT, &buffer); #if 1 // method 1: use UgEntry to write start of object ug_json_write_entry (&json, samplejs, SampleJsObjectEntry); #else // method 2: call ug_json_write_object_head() to write start of object ug_json_write_object_head (&json); ug_json_write_entry (&json, samplejs, SampleJsEntry); ug_json_write_object_tail (&json); #endif ug_json_end_write (&json); ug_buffer_write_char (&buffer, '\0'); puts ((char*)buffer.beg); ug_buffer_clear (&buffer, 1); ug_json_final (&json); } // UgBufferFunc static int buffer_to_file (UgBuffer* buffer) { FILE* file = buffer->data; printf ("write %d bytes to file\n", ug_buffer_length (buffer)); fwrite (buffer->beg, 1, ug_buffer_length(buffer), file); buffer->cur = buffer->beg; return 0; } void sample_js_to_file (SampleJs* samplejs, const char* filename) { UgBuffer buffer; UgJson json; FILE* file; file = fopen (filename, "w"); ug_buffer_init (&buffer, 128); buffer.more = buffer_to_file; buffer.data = file; ug_json_init (&json); ug_json_begin_write (&json, UG_JSON_FORMAT_INDENT, &buffer); #if 1 // method 1: use UgEntry to write start of object ug_json_write_entry (&json, samplejs, SampleJsObjectEntry); #else // method 2: call ug_json_write_object_head() to write start of object ug_json_write_object_head (&json); ug_json_write_entry (&json, samplejs, SampleJsEntry); ug_json_write_object_tail (&json); #endif ug_json_end_write (&json); ug_json_final (&json); fclose (file); } // ---------------------------------------------------------------------------- // JSON object sample void test_json_object_custom (void) { UgBuffer buffer; WorkedId worked; int code; UgJson json; const char* json_string = { "{ \"worked\" : true , \"id\": \"C.H. Huang\" }" }; puts ("\n--- test_json_object_custom:"); worked_id_init (&worked); ug_json_init (&json); ug_buffer_init (&buffer, 128); // parse ug_json_begin_parse (&json); #if 1 // method 1: use UgEntry to parse start of object ug_json_push (&json, ug_json_parse_entry, &worked, WorkedIdCustomEntry); #else // method 2: push ug_json_parse_object() to parse start of object ug_json_push (&json, ug_json_parse_entry, &worked, WorkedIdEntry); ug_json_push (&json, ug_json_parse_object, NULL, NULL); #endif code = ug_json_parse (&json, json_string, -1); printf ("ug_json_parse response %d\n", code); code = ug_json_end_parse (&json); printf ("ug_json_end_parse response %d\n", code); // write ug_json_begin_write (&json, UG_JSON_FORMAT_INDENT, &buffer); #if 1 // method 1: use UgEntry to write start of object ug_json_write_entry (&json, &worked, WorkedIdCustomEntry); #else // method 2: call ug_json_write_object_head() to write start of object ug_json_write_object_head (&json); ug_json_write_entry (&json, &worked, WorkedIdEntry); ug_json_write_object_tail (&json); #endif ug_json_end_write (&json); ug_buffer_write_char (&buffer, '\0'); puts (buffer.beg); ug_buffer_clear (&buffer, 1); ug_json_final (&json); worked_id_final (&worked); } // ---------------------------------------------------------------------------- // JSON array sample // use UgArray to store JSON number array void test_json_int_array (void) { // method 1 const UgEntry intArrayEntry[] = { {NULL, 0, UG_ENTRY_ARRAY, ug_json_parse_array_int, ug_json_write_array_int}, {NULL} }; // common UgJson json; UgArrayInt array; UgJsonError code; char* teststr = "[12,22,34,56]"; int index; puts ("\n--- test_json_int_array:"); memset (&json, 0, sizeof (json)); ug_array_init (&array, sizeof (int), 0); // JSON begin ug_json_init (&json); // JSON parse ug_json_begin_parse (&json); #if 1 // method 1: use UgEntry to parse start of array ug_json_push (&json, ug_json_parse_entry, &array, (void*)intArrayEntry); #else // method 2: push ug_json_parse_array() to parse start of array ug_json_push (&json, ug_json_parse_array_int, &array, NULL); ug_json_push (&json, ug_json_parse_array, NULL, NULL); #endif code = ug_json_parse (&json, teststr, -1); printf ("ug_json_parse response %d\n", code); code = ug_json_end_parse (&json); printf ("ug_json_end_parse response %d\n", code); // JSON end ug_json_final (&json); printf ("array.length = '%d'\n" "array.allocated = '%d'\n\n", array.length, array.allocated); for (index = 0; index < array.length; index++) printf ("array.at[%d] = %d\n", index, array.at[index]); ug_array_clear (&array); } // use UgList to store JSON string and number array void test_json_array_by_list (void) { // method 1 const UgEntry stringListEntry[] = { {NULL, 0, UG_ENTRY_ARRAY, ug_json_parse_list_string, ug_json_write_list_string}, {NULL} }; const UgEntry intListEntry[] = { {NULL, 0, UG_ENTRY_ARRAY, ug_json_parse_list_int, ug_json_write_list_int}, {NULL} }; // common UgJson json; UgList list; UgLink* link; UgJsonError code; UgBuffer buffer; char* jarraystr = "[\"Str1\",\"Str2\",\"Str3\",\"Str4\"]"; char* jarrayint = "[21,32,43,54]"; puts ("\n--- test_json_array_by_list:"); memset (&json, 0, sizeof (json)); ug_list_init (&list); // JSON begin ug_json_init (&json); ug_buffer_init (&buffer, 4096); puts ("\n parse JSON string array:"); // JSON parse - string array ug_json_begin_parse (&json); #if 1 // method 1: use UgEntry to parse start of array ug_json_push (&json, ug_json_parse_entry, &list, (void*)stringListEntry); #else // method 2: push ug_json_parse_array() to parse start of array ug_json_push (&json, ug_json_parse_list_string, &list, NULL); ug_json_push (&json, ug_json_parse_array, NULL, NULL); #endif code = ug_json_parse (&json, jarraystr, -1); printf ("ug_json_parse response %d\n", code); code = ug_json_end_parse (&json); printf ("ug_json_end_parse response %d\n", code); printf ("list.size = '%d'\n", (int)list.size); for (link = list.head; link; link = link->next) printf ("link->data = \"%s\"\n", (char*)link->data); // JSON write - string array ug_json_begin_write (&json, 0, &buffer); #if 1 // method 1: use UgEntry to write start of array ug_json_write_entry (&json, &list, (void*)stringListEntry); #else // method 2: call ug_json_write_array_head() to write start of array ug_json_write_array_head (&json); ug_json_write_list_string (&json, &list); ug_json_write_array_tail (&json); #endif ug_json_end_write (&json); puts ("ug_json_write_list_string:"); ug_buffer_write_char (&buffer, '\0'); puts (buffer.beg); // free strings in list ug_list_foreach (&list, (UgForeachFunc) ug_free, NULL); ug_list_clear (&list, TRUE); puts ("\n parse JSON int array:"); // JSON parse - int array ug_json_begin_parse (&json); #if 1 // method 1: use UgEntry to parse start of array ug_json_push (&json, ug_json_parse_entry, &list, (void*)intListEntry); #else // method 2: push ug_json_parse_array() to parse start of array ug_json_push (&json, ug_json_parse_list_int, &list, NULL); ug_json_push (&json, ug_json_parse_array, NULL, NULL); #endif code = ug_json_parse (&json, jarrayint, -1); printf ("ug_json_parse response %d\n", code); code = ug_json_end_parse (&json); printf ("ug_json_end_parse response %d\n", code); printf ("list.size = '%d'\n", (int)list.size); for (link = list.head; link; link = link->next) printf ("link->data = %d\n", (int)(intptr_t)link->data); // JSON write - int array buffer.cur = buffer.beg; ug_json_begin_write (&json, 0, &buffer); #if 1 // method 1: use UgEntry to write start of array ug_json_write_entry (&json, &list, (void*)intListEntry); #else // method 2: call ug_json_write_array_head() to write start of array ug_json_write_array_head (&json); ug_json_write_list_int (&json, &list); ug_json_write_array_tail (&json); #endif ug_json_end_write (&json); puts ("ug_json_write_list_int:"); ug_buffer_write_char (&buffer, '\0'); puts (buffer.beg); // free list ug_list_clear (&list, TRUE); ug_buffer_clear (&buffer, 1); // JSON end ug_json_final (&json); } // ---------------------------------------------------------------------------- // JSON value sample void test_json_value (void) { UgJson json; int code; #if 0 const char* json_string = "1234"; #elif 0 const char* json_string = "-100"; #elif 0 const char* json_string = "\"This is string.\""; #elif 0 const char* json_string = "\"This is"; // uncompleted string #elif 0 const char* json_string = "true"; #elif 0 const char* json_string = "tr"; // uncompleted true #elif 0 const char* json_string = "{"; // uncompleted object #else // "Sam a tűzoltó - Világcsúcs kísérletek" const char* json_string = "\"Sam a t\\u0171zolt\\u00f3 - Vil\\u00e1gcs\\u00facs k\\u00eds\\u00e9rletek\""; #endif puts ("\n--- test_json_value:"); ug_json_init (&json); ug_json_begin_parse (&json); #if 1 // debug ug_json_push (&json, json_debug_parser, NULL, NULL); #endif code = ug_json_parse (&json, json_string, -1); printf ("ug_json_parse response %d\n", code); code = ug_json_end_parse (&json); printf ("ug_json_end_parse response %d\n", code); ug_json_final (&json); } // ---------------------------------------------------------------------------- // test JSON writer void test_json_writer (void) { UgJson json; UgBuffer buffer; puts ("\n--- test_json_writer:"); ug_json_init (&json); ug_buffer_init (&buffer, 4096); ug_json_begin_write (&json, UG_JSON_FORMAT_INDENT, &buffer); // --- object1 begin ug_json_write_object_head (&json); // --- array1 begin ug_json_write_array_head (&json); ug_json_write_array_tail (&json); // --- array1 end // --- object2 begin ug_json_write_object_head (&json); ug_json_write_string (&json, "name1"); // --- array2 begin ug_json_write_array_head (&json); ug_json_write_int (&json, 1205); ug_json_write_int (&json, 2011); ug_json_write_int (&json, 1102); ug_json_write_array_tail (&json); // --- array2 end ug_json_write_string (&json, "name2"); // ug_json_write_string (&json, "value2"); ug_json_write_string (&json, "Sam a tűzoltó - Világcsúcs kísérletek"); ug_json_write_object_tail (&json); // --- object2 end ug_json_write_object_tail (&json); // --- object1 end ug_json_end_write (&json); ug_buffer_write_char (&buffer, '\0'); puts (buffer.beg); ug_buffer_clear (&buffer, 1); ug_json_final (&json); } // ---------------------------------------------------------------------------- // test UgArray void test_array (void) { UgArrayChar array; char* str = "This one is test string."; puts ("\n--- test_array:"); ug_array_init (&array, sizeof (char), 0); ug_array_append (&array, str, strlen (str)); ug_array_end0 (&array); printf ("\n" "array.at = '%s'\n" "array.length = '%d'\n" "array.allocated = '%d'\n", array.at, array.length, array.allocated); } // ---------------------------------------------------------------------------- // test main function int main (void) { SampleJs* samplejs; // g_mem_set_vtable (glib_mem_profiler_table); // test UgArray test_array (); // test JSON writer test_json_writer (); // test simple JSON value test_json_value (); // use Custom type (WorkedId) to store JSON object test_json_object_custom (); // use UgArray(int) to store JSON number array test_json_int_array (); // use UgList to store JSON string and number array test_json_array_by_list (); puts ("\n--- SampleJs functions:"); // C struct sample code: parse, print, and save file. samplejs = sample_js_new (); sample_js_parse (samplejs); sample_js_print (samplejs); sample_js_to_file (samplejs, "test-SampleJs.json"); sample_js_free (samplejs); samplejs = sample_js_new (); sample_js_reparse (samplejs); sample_js_print (samplejs); sample_js_free (samplejs); // g_mem_profile (); return 0; } uget-2.2.3/tests/Makefile.am0000664000175000017500000000406613602733704012616 00000000000000noinst_PROGRAMS = \ test-json test-jsonrpc test-plugin+app test-info \ test-uglib test-uget # test-uglib-cxx test-uget-cxx TESTS_LIBS = @PTHREAD_LIBS@ @CURL_LIBS@ @GLIB_LIBS@ if WITH_LIBPWMD TESTS_LIBS += @LIBPWMD_LIBS@ endif # set the include path found by configure AM_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget AM_CFLAGS = @PTHREAD_CFLAGS@ @LFS_CFLAGS@ @CURL_CFLAGS@ @GLIB_CFLAGS@ AM_LDFLAGS = @LFS_LDFLAGS@ # test_json_CPPFLAGS = -I$(top_srcdir)/uglib test_json_LDADD = $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_json_SOURCES = test-json.c # test_jsonrpc_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget test_jsonrpc_LDADD = $(top_builddir)/uget/libuget.a $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_jsonrpc_SOURCES = test-jsonrpc.c test_plugin_app_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget @LIBGCRYPT_CFLAGS@ @LIBCRYPTO_CFLAGS@ test_plugin_app_LDADD = $(top_builddir)/uget/libuget.a $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) @LIBGCRYPT_LIBS@ @LIBCRYPTO_LIBS@ test_plugin_app_SOURCES = test-plugin+app.c # test_info_CPPFLAGS = -I$(top_srcdir)/uglib test_info_LDADD = $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_info_SOURCES = test-info.c # test_uglib_CPPFLAGS = -I$(top_srcdir)/uglib test_uglib_LDADD = $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_uglib_SOURCES = test-uglib.c # test_uget_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget test_uget_LDADD = $(top_builddir)/uget/libuget.a $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) test_uget_SOURCES = test-uget.c ## test C++ standard-layout #test_uglib_cxx_CPPFLAGS = -I$(top_srcdir)/uglib #test_uglib_cxx_CXXFLAGS = -std=c++11 #test_uglib_cxx_LDADD = $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) #test_uglib_cxx_SOURCES = test-uglib-cxx.cxx ## test_uget_cxx_CPPFLAGS = -I$(top_srcdir)/uglib -I$(top_srcdir)/uget #test_uget_cxx_CXXFLAGS = -std=c++11 #test_uget_cxx_LDADD = $(top_builddir)/uget/libuget.a $(top_builddir)/uglib/libuglib.a $(TESTS_LIBS) #test_uget_cxx_SOURCES = test-uget-cxx.cxx uget-2.2.3/tests/test-jsonrpc.c0000664000175000017500000003015613602733704013360 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #if defined _WIN32 || defined _WIN64 #include #else #include // sleep() #endif #if defined _WIN32 || defined _WIN64 #define ug_sleep Sleep #else #define ug_sleep(millisecond) usleep (millisecond * 1000) #endif static void socket_receiver (UgSocketServer* server, SOCKET client_fd, void* data) { char buf[5]; ug_socket_server_ref (server); // ug_socket_recv (client_fd, buf, 5, 0); recv (client_fd, buf, 5, 0); puts ("socket server: get ping"); // ug_socket_send (client_fd, "pong", 4, 0); send (client_fd, "pong", 4, 0); // ug_socket_close (client_fd); closesocket (client_fd); ug_socket_server_unref (server); } void test_socket_server_client (SOCKET server_fd, SOCKET client_fd) { UgSocketServer* server; char buf[5]; server = ug_socket_server_new (server_fd); ug_socket_server_set_receiver (server, socket_receiver, NULL); ug_socket_server_start (server); // --- client begin --- // ug_socket_send (client_fd, "ping", 4, 0); send (client_fd, "ping", 4, 0); // ug_socket_recv (client_fd, buf, 5, 0); recv (client_fd, buf, 5, 0); puts ("socket client: get pong"); // ug_socket_close (client_fd); // close (client_fd); closesocket (client_fd); // --- client end --- ug_socket_server_stop (server); ug_socket_server_unref (server); } void test_socket (void) { SOCKET server_fd; SOCKET client_fd; puts ("------------------"); // server_fd = ug_socket_new (AF_INET, SOCK_STREAM, 0); server_fd = socket (AF_INET, SOCK_STREAM, 0); ug_socket_listen (server_fd, "127.0.0.1", "8088", 5); // client_fd = ug_socket_new (AF_INET, SOCK_STREAM, 0); client_fd = socket (AF_INET, SOCK_STREAM, 0); ug_socket_connect (client_fd, "127.0.0.1", "8088"); test_socket_server_client (server_fd, client_fd); ug_sleep (1000); #if !(defined _WIN32 || defined _WIN64) puts ("------------------"); // server_fd = ug_socket_new (AF_INET, SOCK_STREAM, 0); server_fd = socket (AF_UNIX, SOCK_STREAM, 0); ug_socket_listen_unix (server_fd, "/tmp/test-socket-unix", -1, 5); // client_fd = ug_socket_new (AF_INET, SOCK_STREAM, 0); client_fd = socket (AF_UNIX, SOCK_STREAM, 0); ug_socket_connect_unix (client_fd, "/tmp/test-socket-unix", -1); test_socket_server_client (server_fd, client_fd); ug_sleep (1000); #endif } // ---------------------------------------------------------------------------- // test parser & writer void parse_rpc_object (UgJsonrpcObject* jobj, const char* json_string) { UgJson json; int code; ug_json_init (&json); ug_json_begin_parse (&json); ug_json_push (&json, ug_json_parse_entry, jobj, (void*)UgJsonrpcObjectEntry); ug_json_push (&json, ug_json_parse_object, NULL, NULL); code = ug_json_parse (&json, json_string, -1); printf ("ug_json_parse response %d\n", code); code = ug_json_end_parse (&json); printf ("ug_json_end_parse response %d\n", code); ug_json_final (&json); } void print_rpc_object (UgJsonrpcObject* jobj) { UgJson json; UgBuffer buffer; ug_json_init (&json); ug_buffer_init (&buffer, 4096); ug_json_begin_write (&json, UG_JSON_FORMAT_INDENT, &buffer); // ug_json_write_entry (&json, req, requestEntry); ug_json_write_rpc_object (&json, jobj); ug_json_end_write (&json); ug_json_final (&json); ug_buffer_write_char (&buffer, '\0'); puts (buffer.beg); } void test_rpc_parser (void) { UgJsonrpcArray* jarray; UgJsonrpcObject* jobj; const char* json_string1 = // "{\"jsonrpc\": \"2.0\", \"method\": \"update\", \"params\": [1,2,3,4,5], \"id\":1}"; "{\"jsonrpc\": \"2.0\", \"method\": \"foobar\", \"id\":2}"; const char* json_string2 = "{\"jsonrpc\": \"2.0\", \"error\": {\"code\": -32601, \"message\": \"Method not found.\"}, \"id\": 1}"; // "{\"jsonrpc\": \"2.0\", \"result\": 19, \"id\":1}"; const char* json_string3 = "{\"id\":2,\"jsonrpc\":\"2.0\",\"result\":\"fc585c5fec7319bf\"}"; puts ("----- test_rpc_parser()"); jarray = malloc (sizeof (UgJsonrpcArray)); ug_jsonrpc_array_init (jarray, 8); jobj = ug_jsonrpc_array_alloc (jarray); parse_rpc_object (jobj, json_string1); print_rpc_object (jobj); jobj = ug_jsonrpc_array_alloc (jarray); parse_rpc_object (jobj, json_string2); print_rpc_object (jobj); jobj = ug_jsonrpc_array_alloc (jarray); parse_rpc_object (jobj, json_string3); print_rpc_object (jobj); ug_jsonrpc_array_clear (jarray, 1); free (jarray); } void test_rpc_curl_packet (UgJsonrpcCurl* jrcurl) { int error; UgJsonrpcObject* request; UgJsonrpcObject* response; const char* json_string = "{" "\"jsonrpc\": \"2.0\"," "\"method\": \"aria2.addUri\"," "\"params\": [[\"http:\\/\\/localhost\\/file\"], {}]," "\"id\":2" "}"; request = ug_jsonrpc_object_new (); response = ug_jsonrpc_object_new (); parse_rpc_object (request, json_string); print_rpc_object (request); error = ug_jsonrpc_call (&jrcurl->rpc, request, response); if (error == 0) print_rpc_object (response); ug_jsonrpc_object_free (request); ug_jsonrpc_object_free (response); } void test_jsonrpc_curl (void) { // UgJsonrpcHttp* jrhttp; UgJsonrpcCurl* jrcurl; UgJsonrpcArray* jarray; puts ("----- test_jsonrpc_curl()"); // jrhttp = malloc (sizeof (UgJsonrpcHttp)); // ug_jsonrpc_http_init (jrhttp); jrcurl = malloc (sizeof (UgJsonrpcCurl)); ug_jsonrpc_curl_init (jrcurl); jarray = malloc (sizeof (UgJsonrpcArray)); ug_jsonrpc_array_init (jarray, 8); // ug_jsonrpc_http_set_client (jrhttp, "http://localhost:6800/jsonrpc"); // test_rpc_http_packet (jrhttp); ug_jsonrpc_curl_set_url (jrcurl, "http://localhost:6800/jsonrpc"); // test_rpc_curl_packet (jrcurl); // ug_jsonrpc_http_final (jrhttp); // free (jrhttp); ug_jsonrpc_curl_final (jrcurl); free (jrcurl); ug_jsonrpc_array_clear (jarray, 1); free (jarray); } // ---------------------------------------------------------------------------- // test UgJsonrpcSocket static void jsonrpc_accepted (UgJsonrpc* jrpc, void* data, void* data2) { UgJsonrpcObject* request; UgJsonrpcObject* response; int result; request = ug_jsonrpc_object_new (); response = ug_jsonrpc_object_new (); response->result.type = UG_VALUE_STRING; response->result.c.string = "pong"; do { result = ug_jsonrpc_receive (jrpc, request, NULL); if (result == UG_JSON_OBJECT) { print_rpc_object (request); response->id.type = request->id.type; response->id.c = request->id.c; ug_jsonrpc_response (jrpc, response); ug_jsonrpc_object_clear (request); } } while (result != 0); response->id.type = UG_JSON_NULL; response->result.c.string = NULL; ug_jsonrpc_object_free (response); ug_jsonrpc_object_free (request); puts ("server: client connection closed."); } void test_jsonrpc_socket (void) { UgJsonrpcObject* request; UgJsonrpcObject* response; UgJsonrpcSocket* jclient; UgSocketServer* server; #if 0 UgJsonrpcSocket* jserver; #endif puts ("----- test_jsonrpc_socket()"); server = ug_socket_server_new_addr ("127.0.0.1", "14777"); if (server == NULL) { puts ("failed to create UgJsonrpcSocketServer"); return; } #if 0 jserver = ug_malloc (sizeof (UgJsonrpcSocket)); ug_jsonrpc_socket_init (jserver); ug_jsonrpc_socket_use_server (jserver, server, jsonrpc_accepted, NULL, NULL); ug_socket_server_start (server); #else ug_socket_server_run_jsonrpc (server, jsonrpc_accepted, NULL, NULL); #endif ug_sleep (1000); jclient = ug_malloc (sizeof (UgJsonrpcSocket)); ug_jsonrpc_socket_init (jclient); ug_jsonrpc_socket_connect (jclient, "127.0.0.1", "14777"); // ping server request = ug_jsonrpc_object_new (); response = ug_jsonrpc_object_new (); request->method_static = "ping"; ug_jsonrpc_call (&jclient->rpc, request, response); print_rpc_object (response); ug_jsonrpc_object_free (response); ug_jsonrpc_object_free (request); ug_jsonrpc_socket_close (jclient); ug_jsonrpc_socket_final (jclient); ug_free (jclient); ug_sleep (1000); #if 0 ug_jsonrpc_socket_final(jserver); #endif ug_socket_server_stop (server); ug_socket_server_unref (server); } // ---------------------------------------------------------------------------- // test_uget_aria2 void test_uget_aria2_rpc_object (UgetAria2* uaria2) { UgValue* value; UgValue* vobj; UgJsonrpcObject* req1; UgJsonrpcObject* res1; UgJsonrpcObject* req2; UgJsonrpcObject* res2; // request 1 req1 = uget_aria2_alloc (uaria2, TRUE, TRUE); req1->method_static = "aria2.getGlobalStat"; uget_aria2_request (uaria2, req1); // request 2 req2 = uget_aria2_alloc (uaria2, TRUE, TRUE); req2->method_static = "aria2.changeGlobalOption"; ug_value_init_array (&req2->params, 2); vobj = ug_value_alloc (&req2->params, 1); ug_value_init_object (vobj, 2); value = ug_value_alloc (vobj, 1); value->name = "max-overall-download-limit"; value->type = UG_VALUE_STRING; value->c.string = "100k"; value = ug_value_alloc (vobj, 1); value->name = "max-overall-upload-limit"; value->type = UG_VALUE_STRING; value->c.string = "100k"; uget_aria2_request (uaria2, req2); // response 1 res1 = uget_aria2_respond (uaria2, req1); if (res1) { print_rpc_object (res1); ug_value_sort_name (&res1->result); value = ug_value_find_name (&res1->result, "downloadSpeed"); printf ("current downloadSpeed %d\n", ug_value_get_int (value)); } // recycle 1 uget_aria2_recycle (uaria2, req1); uget_aria2_recycle (uaria2, res1); // response 2 res2 = uget_aria2_respond (uaria2, req2); if (res2) { print_rpc_object (res2); } // recycle 2 ug_value_foreach (&req2->params, ug_value_set_name_string, NULL); uget_aria2_recycle (uaria2, req2); uget_aria2_recycle (uaria2, res2); } void test_uget_aria2 (void) { UgetAria2* uaria2; puts ("----- test_uget_aria2()"); uaria2 = uget_aria2_new (); uget_aria2_start_thread (uaria2); #if defined _WIN32 || defined _WIN64 uget_aria2_set_path (uaria2, "C:\\Program Files\\uGet\\bin\\aria2c.exe"); #endif uget_aria2_launch (uaria2); uaria2->shutdown = TRUE; test_uget_aria2_rpc_object (uaria2); // uget_aria2_shutdown (uaria2); uget_aria2_stop_thread (uaria2); uget_aria2_unref (uaria2); ug_sleep (2000); } // ---------------------------------------------------------------------------- // main int main (void) { #if defined _WIN32 || defined _WIN64 WSADATA WSAData; WSAStartup (MAKEWORD (2, 2), &WSAData); #endif // _WIN32 || _WIN64 // libcurl curl_global_init (CURL_GLOBAL_ALL); test_socket (); test_rpc_parser (); test_jsonrpc_socket (); test_jsonrpc_curl (); test_uget_aria2 (); // libcurl curl_global_cleanup (); #if defined _WIN32 || defined _WIN64 WSACleanup (); #endif return 0; } uget-2.2.3/tests/test-plugin+app.c0000664000175000017500000003037313602733704013755 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #include #include #include #if defined _WIN32 || defined _WIN64 #include #define ug_sleep Sleep #else #include // usleep() #define ug_sleep(millisecond) usleep (millisecond * 1000) #endif // _WIN32 || _WIN64 // ---------------------------------------------------------------------------- // test_download void download_by_plugin(UgInfo* info, const UgetPluginInfo* pinfo) { UgetCommon* common; UgetFiles* files; UgetFile* file1; UgetPlugin* plugin; UgetEvent* events; UgetEvent* cur; UgetEvent* next; UgetProgress* progress; int index; int speed_limit[2]; char* string[5]; speed_limit[0] = 1000000; speed_limit[1] = 1000000; plugin = uget_plugin_new(pinfo); uget_plugin_accept(plugin, info); uget_plugin_ctrl(plugin, UGET_PLUGIN_CTRL_SPEED, speed_limit); if (uget_plugin_start(plugin) == FALSE) { uget_plugin_unref(plugin); puts("plug-in failed to start."); return; } while (uget_plugin_sync(plugin, info)) { ug_sleep(1000); // event events = uget_plugin_pop(plugin); for (cur = events; cur; cur = next) { next = cur->next; printf ("\n" "Event type: %d - %s\n", cur->type, cur->string); uget_event_free(cur); } // progress progress = ug_info_get(info, UgetProgressInfo); if (progress == NULL) continue; string[0] = ug_str_from_int_unit(progress->complete, NULL); string[1] = ug_str_from_int_unit(progress->total, NULL); string[2] = ug_str_from_int_unit(progress->uploaded, NULL); string[3] = ug_str_from_int_unit(progress->download_speed, "/s"); string[4] = ug_str_from_int_unit(progress->upload_speed, "/s"); printf("\r" "DL: %s / %s, %d%%, %s | UL: %s, %s" " ", string[0], string[1], progress->percent, string[3], string[2], string[4]); for (index = 0; index < 5; index++) ug_free(string[index]); } // these data may changed, print them. common = ug_info_get(info, UgetCommonInfo); printf("\n" "common->name : %s\n" "common->uri : %s\n" "common->file : %s\n", common->name, common->uri, common->file); // print children files = ug_info_realloc(info, UgetFilesInfo); for (file1 = (UgetFile*)files->list.head; file1; file1 = file1->next) printf("file name : %s\n", file1->path); uget_plugin_unref(plugin); } void test_download(void) { UgetCommon* common; UgetHttp* http; UgInfo* info; char* referrer; char* uri; char* mirrors; uri = "https://mega.nz/#F!i5FXiSoD!TObpvqxETCq8TbEhFevzpg"; // uri = "https://mega.nz/#!MSpjBRhZ!nZBsUQCAnf71842wXuals_ftSkga3fIQypzBsKEZbmk"; // uri = "https://www.youtube.com/watch?v=y2004Xaz2HU"; // uri = "http://download.tuxfamily.org/notepadplus/6.5.3/npp.6.5.3.Installer.exe"; // uri = "http://ftp.gimp.org/pub/gimp/v2.8/windows/gimp-2.8.10-setup.exe"; // mirrors = "ftp://195.220.108.108/linux/fedora/linux/updates/19/x86_64/kernel-3.11.2-201.fc19.x86_64.rpm"; mirrors = NULL; // referrer = "http://code.google.com/p/tortoisegit/wiki/Download?tm=2"; referrer = NULL; info = ug_info_new(8, 0); // commom options common = ug_info_realloc(info, UgetCommonInfo); common->uri = ug_strdup(uri); if (mirrors) common->mirrors = ug_strdup(mirrors); // common->folder = ug_strdup ("D:\\Downloads"); // common->max_connections = 2; common->debug_level = 1; common->retry_limit = 1; common->connect_timeout = 30; // http options http = ug_info_realloc(info, UgetHttpInfo); if (referrer) http->referrer = ug_strdup(referrer); // download_by_plugin(info, UgetPluginCurlInfo); // download_by_plugin(info, UgetPluginAria2Info); // download_by_plugin(info, UgetPluginMediaInfo); download_by_plugin(info, UgetPluginMegaInfo); ug_info_unref(info); } // ---------------------------------------------------------------------------- // test_plugin void test_setup_plugin_aria2 (void) { const UgetPluginInfo* pinfo; pinfo = UgetPluginAria2Info; uget_plugin_global_set(pinfo, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); uget_plugin_global_set(pinfo, UGET_PLUGIN_ARIA2_GLOBAL_URI, "http://localhost/jsonrpc"); #if defined _WIN32 || defined _WIN64 uget_plugin_global_set(pinfo, UGET_PLUGIN_ARIA2_GLOBAL_PATH, "C:\\Program Files\\uGet\\bin\\aria2c.exe"); #endif uget_plugin_global_set(pinfo, UGET_PLUGIN_ARIA2_GLOBAL_ARGUMENT, "--enable-rpc=true -D --check-certificate=false"); uget_plugin_global_set(pinfo, UGET_PLUGIN_ARIA2_GLOBAL_LAUNCH, (void*) TRUE); uget_plugin_global_set(pinfo, UGET_PLUGIN_ARIA2_GLOBAL_SHUTDOWN, (void*) TRUE); ug_sleep (1000); uget_plugin_global_set(pinfo, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); ug_sleep (1000); } // ---------------------------------------------------------------------------- // test_task void print_speed_limit (UgetNode** dnode, int count) { int total[2] = {0,0}; UgetRelation* relation; for (count = 0; count < 7; count++) { relation = ug_info_get (dnode[count]->info, UgetRelationInfo); if (relation->task) { printf ("limit D: %d, U: %d | speed D: %d, U: %d\n", relation->task->limit[0], relation->task->limit[1], relation->task->speed[0], relation->task->speed[1]); total[0] += relation->task->limit[0]; total[1] += relation->task->limit[1]; } } printf ("total limit D: %d, U: %d\n", total[0], total[1]); } void test_task (void) { UgetTask* task; UgetNode* dnode[7]; UgetRelation* relation; int count; task = calloc (1, sizeof (UgetTask)); uget_task_init (task); // task speed control ------------------- for (count = 0; count < 7; count++) { dnode[count] = uget_node_new (NULL); relation = ug_info_realloc (dnode[count]->info, UgetRelationInfo); uget_task_add (task, dnode[count], UgetPluginEmptyInfo); if (relation->task) { relation->task->limit[0] = 2000; relation->task->limit[1] = 1500; relation->task->speed[0] = 2000 - count * 200; relation->task->speed[1] = 1500 - count * 200; } } if (relation->task) { relation->task->limit[0] = 0; relation->task->limit[1] = 0; } uget_task_set_speed (task, 12000, 8000); print_speed_limit(dnode, 7); puts ("---"); uget_task_adjust_speed (task); print_speed_limit(dnode, 7); uget_task_remove_all (task); uget_task_final (task); free (task); for (count = 0; count < 7; count++) uget_node_free (dnode[count]); } // ---------------------------------------------------------------------------- // test_app void setup_app (UgetApp* app) { UgetNode* cnode; UgetCategory* category; UgetCommon* common; cnode = uget_node_new (NULL); category = ug_info_realloc (cnode->info, UgetCategoryInfo); *(char**)ug_array_alloc (&category->schemes, 1) = ug_strdup ("http"); *(char**)ug_array_alloc (&category->schemes, 1) = ug_strdup ("https"); *(char**)ug_array_alloc (&category->schemes, 1) = ug_strdup ("ftp"); common = ug_info_realloc (cnode->info, UgetCommonInfo); common->name = ug_strdup ("Home Category"); common->max_connections = 2; uget_app_add_category (app, cnode, TRUE); uget_app_add_plugin (app, UgetPluginAria2Info); uget_app_add_plugin (app, UgetPluginCurlInfo); uget_app_clear_plugins (app); uget_app_set_default_plugin (app, UgetPluginCurlInfo); } void start_app (UgetApp* app) { UgetNode* dnode; UgetCommon* common; char* string[2]; dnode = uget_node_new (NULL); common = ug_info_realloc (dnode->info, UgetCommonInfo); common->name = ug_strdup ("Download"); common->uri = ug_strdup ("http://www.utorrent.com/scripts/dl.php?track=stable&build=29812&client=utorrent"); common->folder = ug_strdup ("D:\\Downloads"); common->debug_level = 1; // common->keeping.enable = TRUE; // common->keeping.uri = TRUE; // common->keeping.folder = TRUE; // common->keeping.debug_level = TRUE; uget_app_add_download (app, dnode, NULL, FALSE); puts ("uget_app_grow()"); while (uget_app_grow (app, FALSE)) { ug_sleep (1000); string[0] = ug_str_from_int_unit (app->task.speed.download, "/s"); string[1] = ug_str_from_int_unit (app->task.speed.upload, "/s"); printf ("\r" "DL: %s | UL %s" " ", string[0], string[1]); ug_free (string[0]); ug_free (string[1]); } puts ("uget_app_grow() return 0"); puts ("call uget_app_grow() again"); uget_app_grow (app, FALSE); } void close_app (UgetApp* app) { uget_app_clear_plugins (app); } void test_app_node (UgetApp* app) { UgetNode* dnode[7]; UgetNode* cnode; UgetCommon* common; int count; for (count = 0; count < 7; count++) { dnode[count] = uget_node_new (NULL); common = ug_info_realloc (dnode[count]->info, UgetCommonInfo); common->uri = ug_strdup ("ftp://127.0.0.1/"); common->folder = ug_strdup ("D:\\Downloads"); common->keeping.enable = TRUE; common->keeping.uri = FALSE; common->keeping.folder = FALSE; uget_app_add_download (app, dnode[count], NULL, TRUE); } uget_app_move_download (app, dnode[5], NULL); uget_app_delete_download (app, dnode[2], TRUE); uget_app_delete_download (app, dnode[4], FALSE); uget_app_delete_download (app, dnode[6], FALSE); cnode = app->real.children; if (cnode) printf ("%d\n", cnode->n_children); cnode = app->split.children; if (cnode) printf ("%d\n", cnode->n_children); cnode = app->mix.children; if (cnode) printf ("%d\n", cnode->n_children); cnode = app->mix_split.children; if (cnode) printf ("%d\n", cnode->n_children); } void test_app (void) { UgetApp* app; app = calloc (1, sizeof (UgetApp)); uget_app_init (app); setup_app (app); start_app (app); // test_app_node (app); uget_app_save_categories (app, NULL); // uget_app_load_categories (app, NULL); uget_app_final (app); free (app); } // ---------------------------------------------------------------------------- // main int main (void) { // initialize plug-in uget_plugin_global_set(UgetPluginCurlInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); uget_plugin_global_set(UgetPluginMediaInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); uget_plugin_global_set(UgetPluginMegaInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) TRUE); // test_setup_plugin_aria2(); test_download(); // test_task(); // test_app(); // uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_ARIA2_GLOBAL_SHUTDOWN_NOW, (void*) TRUE); // finalize plug-in uget_plugin_global_set(UgetPluginCurlInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); uget_plugin_global_set(UgetPluginAria2Info, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); uget_plugin_global_set(UgetPluginMediaInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); uget_plugin_global_set(UgetPluginMegaInfo, UGET_PLUGIN_GLOBAL_INIT, (void*) FALSE); ug_sleep(1000); return 0; } uget-2.2.3/tests/test-info.c0000664000175000017500000001522713602733704012637 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include // ---------------------------------------------------------------------------- // Test1 typedef struct { UG_DATA_MEMBERS; // const UgDataInfo* info; int type; } Test1; const UgEntry Test1Entry[] = { {"type", offsetof(Test1, type), UG_ENTRY_INT, NULL, NULL}, {NULL} }; void test1_init(Test1* t1); const UgDataInfo Test1Info = { "Test1", sizeof(Test1), (UgInitFunc) test1_init, (UgFinalFunc) NULL, (UgAssignFunc) NULL, Test1Entry, // UgEntry }; void test1_init(Test1* t1) { t1->info = &Test1Info; t1->type = 1; } // ---------------------------------------------------------------------------- // Test2 typedef struct { UG_DATA_MEMBERS; // const UgDataInfo* info; int type; } Test2; const UgEntry Test2Entry[] = { {"type", offsetof(Test2, type), UG_ENTRY_INT, NULL, NULL}, {NULL} }; void test2_init(Test2* t2); const UgDataInfo Test2Info = { "Test2", sizeof(Test2), (UgInitFunc) test2_init, (UgFinalFunc) NULL, (UgAssignFunc) NULL, Test2Entry, // UgEntry }; void test2_init(Test2* t2) { t2->info = &Test2Info; t2->type = 2; } // ---------------------------------------------------------------------------- // Test3 typedef struct { UG_DATA_MEMBERS; // const UgDataInfo* info; int type; } Test3; const UgEntry Test3Entry[] = { {"type", offsetof(Test3, type), UG_ENTRY_INT, NULL, NULL}, {NULL} }; void test3_init(Test3* t3); const UgDataInfo Test3Info = { "Test3", sizeof(Test3), (UgInitFunc) test3_init, (UgFinalFunc) NULL, (UgAssignFunc) NULL, Test3Entry, // UgEntry }; void test3_init(Test3* t3) { t3->info = &Test3Info; t3->type = 3; } // ---------------------------------------------------------------------------- // test UgInfo UgEntry InfoCustomEntry[] = { {NULL, 0, UG_ENTRY_CUSTOM, (UgJsonParseFunc) ug_json_parse_info, (UgJsonWriteFunc) ug_json_write_info}, {NULL} }; void test_info(UgInfo* info) { void* data; puts("\n--- test_info:"); data = ug_info_realloc(info, &Test2Info); printf("ug_info_realloc (Test2Info) : %d\n", ((Test2*)data)->type); data = ug_info_realloc(info, &Test1Info); printf("ug_info_realloc (Test1Info) : %d\n", ((Test1*)data)->type); data = ug_info_realloc(info, &Test3Info); printf("ug_info_realloc (Test3Info) : %d\n", ((Test3*)data)->type); } void parse_info(UgInfo* info) { int code; UgJson json; UgRegistry registry; const char* json_string = { "{" " \"Test1\": {" " \"type\": 1" " }," " \"Test2\": {" " \"type\": 2" " }," " \"Test3\": {" " \"type\": 3" " }" "}" }; // UgRegistry is used by ug_json_parse_info() and ug_json_parse_info_entry() ug_registry_init(®istry); ug_registry_add(®istry, &Test2Info); ug_registry_add(®istry, &Test3Info); ug_registry_add(®istry, &Test1Info); // ug_registry_sort(®istry); // ug_json_parse_info() must use default UgInfoKeys. ug_info_set_registry(®istry); ug_json_init(&json); ug_json_begin_parse(&json); #if 1 // method 1: use UgEntry to parse start of object ug_json_push(&json, ug_json_parse_entry, info, InfoCustomEntry); #else // method 2: push ug_json_parse_info() to parse start of object ug_json_push(&json, ug_json_parse_info, info, ®istry); #endif code = ug_json_parse(&json, json_string, -1); ug_json_end_parse(&json); ug_json_final(&json); printf("ug_json_parse response %d\n", code); ug_info_set_registry(NULL); ug_registry_final(®istry); } void dump_info(UgInfo* info) { UgPair* cur; UgPair* end; for (cur = info->at, end = info->at + info->length; cur < end; cur++) { if (cur->key == NULL) { puts("NULL"); continue; } printf("%s", ((UgDataInfo*)cur->key)->name); if (cur->data) printf(" : %d", ((Test1*)cur->data)->type); puts(""); } } // UgBufferFunc static int buffer_to_file(UgBuffer* buffer) { FILE* file = buffer->data; printf("write %d bytes to file\n", ug_buffer_length(buffer)); fwrite(buffer->beg, 1, ug_buffer_length(buffer), file); buffer->cur = buffer->beg; return 0; } void write_info_to_file(UgInfo* info, char* filename) { UgJson json; FILE* file; UgBuffer buffer; file = fopen(filename, "w"); ug_buffer_init(&buffer, 128); buffer.more = buffer_to_file; buffer.data = file; ug_json_init(&json); ug_json_begin_write(&json, UG_JSON_FORMAT_INDENT, &buffer); #if 1 // method 1: use UgEntry to write start of object ug_json_write_entry(&json, info, InfoCustomEntry); #else // method 2: call ug_json_write_object_head() to write start of object ug_json_write_object_head(&json); ug_json_write_info(&json, info); ug_json_write_object_tail(&json); #endif ug_json_end_write(&json); ug_json_final(&json); ug_buffer_clear(&buffer, 1); fclose(file); } // ---------------------------------------------------------------------------- // main int main(void) { UgInfo info; puts("\n--- test UgInfo functions:"); ug_info_init(&info, 8, 2); #if 0 test_info(&info); #else parse_info(&info); #endif dump_info(&info); write_info_to_file(&info, "test-info.json"); ug_info_final(&info); return 0; } uget-2.2.3/Makefile.am0000664000175000017500000000044313602733703011446 00000000000000# intltool : add "po" in SUBDIRS SUBDIRS = \ uglib \ uget \ ui-gtk \ ui-gtk-1to2 \ pixmaps \ sounds \ tests \ po \ doc \ Windows EXTRA_DIST = \ uget-gtk.desktop \ .snapcraft.yaml appsdir = $(datadir)/applications apps_DATA = uget-gtk.desktop uget-2.2.3/ar-lib0000755000175000017500000001330212676613141010505 00000000000000#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2014 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat < #include #include #ifdef __cplusplus extern "C" { #endif // ---------------------------------------------------------------------------- // Time uint64_t ug_get_time_count (void); // ---------------------------------------------------------------------------- // Unicode int ug_utf8_get_invalid (const char* input, char* ch); uint16_t* ug_utf8_to_utf16 (const char* string, int stringLength, int* utf16len); char* ug_utf16_to_utf8 (const uint16_t* string, int stringLength, int* utf8len); uint32_t* ug_utf8_to_ucs4 (const char* string, int stringLength, int* ucs4len); char* ug_ucs4_to_utf8 (const uint32_t* string, int stringLength, int* utf8len); // ---------------------------------------------------------------------------- // Base64 char* ug_base64_encode (const unsigned char* data, int input_length, int* output_length); unsigned char* ug_base64_decode (const char* data, int input_length, int* output_length); // ---------------------------------------------------------------------------- // filename & path functions char* ug_build_filename (const char* first_element, ...); // ---------------------------------------------------------------------------- // Power Management // Suspend does not turn off your computer. It puts the computer and all peripherals on a low power consumption mode. // Hibernate saves the state of your computer to the hard disk and completely powers off. void ug_reboot (void); void ug_shutdown (void); void ug_suspend (void); void ug_hibernate (void); // ---------------------------------------------------------------------------- // Others char* ug_sys_release (void); #ifdef __cplusplus } #endif #endif // End of UG_UTIL_H uget-2.2.3/uglib/UgList.h0000664000175000017500000001412513602733704012077 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UG_LIST_H #define UG_LIST_H // uintptr_t is an unsigned int that is guaranteed to be the same size as a pointer. #include // uintptr_t, intptr_t #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgLink UgLink; typedef struct UgList UgList; // ---------------------------------------------------------------------------- // UgLink #define UG_LINK_MEMBERS(LinkType, DataType, DataName) \ DataType* DataName; \ LinkType* next; \ LinkType* prev #define UG_LINK_INT_MEMBERS(LinkType, DataName) \ intptr_t DataName; \ LinkType* next; \ LinkType* prev #define UG_LINK_UINT_MEMBERS(LinkType, DataName) \ uintptr_t DataName; \ LinkType* next; \ LinkType* prev struct UgLink { UG_LINK_MEMBERS (UgLink, void, data); // void* data; // uintptr_t size // UgLink* next; // head // UgLink* prev; // tail }; UgLink* ug_link_new (void); void ug_link_free (UgLink* link); // ---------------------------------------------------------------------------- // UgList is used by UgEntry with UG_ENTRY_LIST. // UgList doesn't support UG_ENTRY_INT64, UG_ENTRY_DOUBLE, and UG_ENTRY_OBJECT #define UG_LIST_MEMBERS(LinkType) \ uintptr_t size; \ LinkType* head; \ LinkType* tail struct UgList { UG_LIST_MEMBERS (UgLink); // uintptr_t size; // UgLink* head; // UgLink* tail; }; // if all links in list were created by ug_link_new(), // ug_list_clear (list, TRUE) can free them. void ug_list_init (UgList* list); void ug_list_clear (UgList* list, int free_links); void ug_list_foreach (UgList* list, UgForeachFunc func, void* data); void ug_list_foreach_link (UgList* list, UgForeachFunc func, void* data); void ug_list_prepend (UgList* list, UgLink* link); void ug_list_append (UgList* list, UgLink* link); void ug_list_insert (UgList* list, UgLink* sibling, UgLink* link); void ug_list_remove (UgList* list, UgLink* link); int ug_list_position(UgList* list, UgLink* link); // ---------------------------------------------------------------------------- // UgJsonParseFunc for JSON array elements UgJsonError ug_json_parse_list_bool (UgJson* json, const char* name, const char* value, void* list, void* none); UgJsonError ug_json_parse_list_int (UgJson* json, const char* name, const char* value, void* list, void* none); UgJsonError ug_json_parse_list_uint (UgJson* json, const char* name, const char* value, void* list, void* none); UgJsonError ug_json_parse_list_string (UgJson* json, const char* name, const char* value, void* list, void* none); // ---------------------------------------------------------------------------- // write JSON array elements // If you use these functions in UgEntry, UgEntry.type must be UG_ENTRY_ARRAY void ug_json_write_list_bool (UgJson* json, UgList* list); void ug_json_write_list_int (UgJson* json, UgList* list); void ug_json_write_list_uint (UgJson* json, UgList* list); void ug_json_write_list_string (UgJson* json, UgList* list); #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Ug { // This one is for directly use only. You can NOT derived it. typedef struct UgLink Link; // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout struct ListMethod { inline void init (void) { ug_list_init ((UgList*) this); } inline void clear (bool freeLinks = false) { ug_list_clear ((UgList*) this, (int)freeLinks); } inline void foreach (UgForeachFunc func, void* data) { ug_list_foreach ((UgList*) this, func, data); } inline void prepend (UgLink* link) { ug_list_prepend ((UgList*) this, link); } inline void append (UgLink* link) { ug_list_append ((UgList*) this, link); } inline void insert (UgLink* sibling, UgLink* link) { ug_list_insert ((UgList*) this, sibling, link); } inline void remove (UgLink* link) { ug_list_remove ((UgList*) this, link); } }; // This one is for directly use only. You can NOT derived it. struct List : ListMethod, UgList { inline List (void) { ug_list_init (this); } }; }; // namespace Ug #endif // __cplusplus #endif // UG_LIST_H uget-2.2.3/uglib/UgData.h0000664000175000017500000001302313602733704012031 00000000000000/* * * Copyright (C) 2005-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UG_DATA_H #define UG_DATA_H #include // uintptr_t #include #ifdef __cplusplus extern "C" { #endif typedef struct UgType UgType; typedef struct UgTypeInfo UgTypeInfo; typedef struct UgData UgData; typedef struct UgDataInfo UgDataInfo; typedef int (*UgAssignFunc) (void* instance, void* src); // ---------------------------------------------------------------------------- // UgTypeInfo: a base type info for UgDataInfo and UgetPluginInfo #define UG_TYPE_INFO_MEMBERS \ const char* name; \ uintptr_t size; \ UgInitFunc init; \ UgFinalFunc final struct UgTypeInfo { UG_TYPE_INFO_MEMBERS; /* // ------ UgTypeInfo members ------ const char* name; uintptr_t size; UgInitFunc init; UgFinalFunc final; */ }; // ---------------------------------------------------------------------------- // UgType: a base type for UgData and UgetPlugin #define UG_TYPE_MEMBERS \ const UgTypeInfo* info struct UgType { UG_TYPE_MEMBERS; // const UgTypeInfo* info; // UgType member }; // void* ug_type_new(const UgTypeInfo* typeinfo); void* ug_type_new(const void* typeinfo); void ug_type_free(void* type); void ug_type_init(void* type); void ug_type_final(void* type); /* ---------------------------------------------------------------------------- UgDataInfo UgTypeInfo | `-- UgDataInfo */ #define UG_DATA_INFO_MEMBERS \ UG_TYPE_INFO_MEMBERS; \ UgAssignFunc assign; \ const UgEntry* entry struct UgDataInfo { UG_DATA_INFO_MEMBERS; /* // ------ UgTypeInfo members ------ const char* name; uintptr_t size; UgInitFunc init; UgFinalFunc final; // ------ UgDataInfo members ------ UgAssignFunc assign; const UgEntry* entry; */ }; /* ---------------------------------------------------------------------------- UgData: a group of data that store in UgInfo. UgType | `-- UgData */ #define UG_DATA_MEMBERS \ const UgDataInfo* info struct UgData { UG_DATA_MEMBERS; // const UgDataInfo* info; // UgType member }; // UgData* ug_data_new(const UgDataInfo* dinfo); // void ug_data_free(UgData* data); #define ug_data_new ug_type_new #define ug_data_free ug_type_free // void ug_data_init(void* data); // void ug_data_final(void* data); #define ug_data_init ug_type_new #define ug_data_final ug_type_final // UgData* ug_data_copy(UgData* data); // void ug_data_assign(UgData* data, UgData* src); void* ug_data_copy(void* data); int ug_data_assign(void* data, void* src); // UgJsonParseFunc for UgData, used by UgEntry with UG_ENTRY_CUSTOM UgJsonError ug_json_parse_data(UgJson* json, const char* name, const char* value, void* data, void* none); // write UgData, used by UgEntry with UG_ENTRY_CUSTOM void ug_json_write_data(UgJson* json, const UgData* data); #ifdef __cplusplus } #endif // ---------------------------------------------------------------------------- // C++11 standard-layout #ifdef __cplusplus namespace Ug { typedef struct UgTypeInfo TypeInfo; typedef struct UgDataInfo DataInfo; // This one is for derived use only. No data members here. // Your derived struct/class must be C++11 standard-layout template struct DataMethod { inline void* operator new(size_t size, const UgDataInfo* dinfo) { return ug_data_new(dinfo); } inline void operator delete(void* p) { ug_data_free(p); } /* inline void init() { ug_data_init((void*)this); } inline void final(void) { ug_data_final((void*)this); } */ inline int assign(DataType* src) { return ug_data_assign((void*)this, (void*)src); } inline DataType* copy(void) { return (DataType*)ug_data_copy((void*)this); } }; // This one is for directly use only. You can NOT derived it. struct Data : DataMethod, UgData {}; }; // namespace Ug #endif // __cplusplus #endif // UG_DATA_H uget-2.2.3/uglib/UgUtil.c0000664000175000017500000004204613602733704012077 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef HAVE_CONFIG_H #include #endif #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include #include // strtoul() #include // wcslen() #include #include #include // ug_strdup() #if defined _WIN32 || defined _WIN64 #include //#include // SetSuspendState() #else #include // popen() #include #include #endif // ---------------------------------------------------------------------------- // Time uint64_t ug_get_time_count (void) { #if defined _WIN32 || defined _WIN64 return (uint64_t) GetTickCount (); #else struct timeval tv; gettimeofday(&tv, NULL); return (tv.tv_sec * 1000 + tv.tv_usec / 1000); #endif } // ---------------------------------------------------------------------------- // Unicode int ug_utf8_get_invalid (const char* input, char* ch) { int nb = 0, na; const uint8_t *c; for (c = (uint8_t*) input; *c; c += (nb + 1)) { if (!(*c & 0x80)) nb = 0; else if ((*c & 0xc0) == 0x80) { if (ch) *ch = *c; return (intptr_t)c - (intptr_t)input; } else if ((*c & 0xe0) == 0xc0) nb = 1; else if ((*c & 0xf0) == 0xe0) nb = 2; else if ((*c & 0xf8) == 0xf0) nb = 3; else if ((*c & 0xfc) == 0xf8) nb = 4; else if ((*c & 0xfe) == 0xfc) nb = 5; na = nb; while (na-- > 0) { if ((*(c + nb) & 0xc0) != 0x80) { if (ch) *ch = *(c + nb); return (intptr_t)(c + nb) - (intptr_t)input; } } } return -1; } // 0xC0: Start of a 2-byte sequence static const uint8_t utf8Limits[] = {0xC0, 0xE0, 0xF0, 0xF8, 0xFC}; uint16_t* ug_utf8_to_utf16 (const char* string, int count, int* utf16len) { uint8_t ch; uint16_t* result; uint16_t* dest; uint32_t value; const char* end; if (count == -1) count = strlen (string); end = string + count; result = ug_malloc (sizeof (uint16_t) * (count+1) ); dest = result; while (string < end) { ch = *string++; if(ch < 0x80) { // 0-127, US-ASCII (single byte) *dest++ = (uint16_t)ch; continue; } if(ch < 0xC0) // The first octet for each code point should within 0-191 break; for(count = 1; count < 5; count++) if(ch < utf8Limits[count]) break; value = ch - utf8Limits[count - 1]; do { uint8_t ch2; if (string >= end) // || string[0] == 0 break; ch2 = *string++; if (ch2 == 0) break; if(ch2 < 0x80 || ch2 >= 0xC0) break; value <<= 6; value |= (ch2 - 0x80); } while(--count != 0); if(value < 0x10000) { *dest++ = (uint16_t) value; } else { value -= 0x10000; if(value >= 0x100000) break; *dest++ = (uint16_t) (0xD800 + (value >> 10)); *dest++ = (uint16_t) (0xDC00 + (value & 0x3FF)); } } if (utf16len) *utf16len = dest - result; *dest++ = 0; return result; } char* ug_utf16_to_utf8 (const uint16_t* string, int count, int* utf8len) { uint16_t ch; uint8_t* result; uint8_t* dest; const uint16_t* end; if (count == -1) count = wcslen ((wchar_t*) string); end = string + count; result = ug_malloc (sizeof (uint8_t) * (count+1) * 3); dest = result; while (string < end) { ch = *string++; if (ch >= 1 && ch <= 0x7F) *dest++ = (uint8_t) ch; else if (ch > 0x7FF) { *dest++ = (uint8_t) (0xE0 | ((ch >> 12) & 0x0F)); *dest++ = (uint8_t) (0x80 | ((ch >> 6) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 0) & 0x3F)); } else { *dest++ = (uint8_t) (0xC0 | ((ch >> 6) & 0x1F)); *dest++ = (uint8_t) (0x80 | ((ch >> 0) & 0x3F)); } } if (utf8len) *utf8len = dest - result; *dest++ = 0; return (char*)result; } uint32_t* ug_utf8_to_ucs4 (const char* string, int count, int* ucs4len) { uint8_t ch; uint32_t* result; uint32_t* dest; uint32_t value; const char* end; if (count == -1) count = strlen (string); end = string + count; result = ug_malloc (sizeof (uint32_t) * (count+1) ); dest = result; while (string < end) { ch = *string++; if(ch < 0x80) { // 0-127, US-ASCII (single byte) *dest++ = (uint32_t)ch; continue; } if(ch < 0xC0) // The first octet for each code point should within 0-191 break; for(count = 1; count < 5; count++) if(ch < utf8Limits[count]) break; value = ch - utf8Limits[count - 1]; do { uint8_t ch2; if (string >= end) // || string[0] == 0 break; ch2 = *string++; if (ch2 == 0) break; if(ch2 < 0x80 || ch2 >= 0xC0) break; value <<= 6; value |= (ch2 - 0x80); } while(--count != 0); *dest++ = value; } if (ucs4len) *ucs4len = dest - result; *dest++ = 0; return result; } char* ug_ucs4_to_utf8 (const uint32_t* string, int count, int* utf8len) { uint32_t ch; uint8_t* result; uint8_t* dest; const uint32_t* end; if (count == -1) { for (count = 0; string[count] != 0; count++) ; } end = string + count; result = ug_malloc (sizeof (uint8_t) * (count+1) * 6); dest = result; while (string < end) { ch = *string++; if (ch >= 1 && ch <= 0x7F) *dest++ = (uint8_t) ch; else if (ch > 0x3FFFFFF) { *dest++ = (uint8_t) (0xFC | ((ch >> 30) & 0x01)); *dest++ = (uint8_t) (0x80 | ((ch >> 24) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 18) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 12) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 6) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 0) & 0x3F)); } else if (ch > 0x10FFFF) { *dest++ = (uint8_t) (0xF8 | ((ch >> 24) & 0x03)); *dest++ = (uint8_t) (0x80 | ((ch >> 18) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 12) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 6) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 0) & 0x3F)); } else if (ch > 0xFFFF) { *dest++ = (uint8_t) (0xF0 | ((ch >> 18) & 0x07)); *dest++ = (uint8_t) (0x80 | ((ch >> 12) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 6) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 0) & 0x3F)); } else if (ch > 0x7FF) { *dest++ = (uint8_t) (0xE0 | ((ch >> 12) & 0x0F)); *dest++ = (uint8_t) (0x80 | ((ch >> 6) & 0x3F)); *dest++ = (uint8_t) (0x80 | ((ch >> 0) & 0x3F)); } else { *dest++ = (uint8_t) (0xC0 | ((ch >> 6) & 0x1F)); *dest++ = (uint8_t) (0x80 | ((ch >> 0) & 0x3F)); } } if (utf8len) *utf8len = dest - result; *dest++ = 0; return (char*)result; } // ---------------------------------------------------------------------------- // Base64 static int mod_table[] = {0, 2, 1}; static char encoding_table[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; static char *decoding_table = NULL; static void ug_base64_build_decoding_table() { int i; decoding_table = ug_malloc(256); for (i = 0; i < 64; i++) decoding_table[(unsigned char) encoding_table[i]] = i; } void ug_base64_cleanup() { ug_free (decoding_table); decoding_table = NULL; } char* ug_base64_encode (const unsigned char* data, int input_length, int* output_length) { int i, j; int length; char* encoded_data; length = 4 * ((input_length + 2) / 3); encoded_data = (char*) ug_malloc (length + 1); // + '\0' if (encoded_data == NULL) return NULL; for (i = 0, j = 0; i < input_length;) { uint32_t octet_a = i < input_length ? data[i++] : 0; uint32_t octet_b = i < input_length ? data[i++] : 0; uint32_t octet_c = i < input_length ? data[i++] : 0; uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c; encoded_data[j++] = encoding_table[(triple >> 3 * 6) & 0x3F]; encoded_data[j++] = encoding_table[(triple >> 2 * 6) & 0x3F]; encoded_data[j++] = encoding_table[(triple >> 1 * 6) & 0x3F]; encoded_data[j++] = encoding_table[(triple >> 0 * 6) & 0x3F]; } for (i = 0; i < mod_table[input_length % 3]; i++) encoded_data[length - 1 - i] = '='; if (output_length) *output_length = length; encoded_data[length] = '\0'; return encoded_data; } unsigned char* ug_base64_decode (const char* data, int input_length, int* output_length) { int i, j; int length, pad_len; unsigned char *decoded_data; uint32_t sextet_a, sextet_b, sextet_c, sextet_d, triple; if (decoding_table == NULL) ug_base64_build_decoding_table (); #if 1 // for removed trailing "==" or "=" pad_len = input_length & 3; // pad_len = input_length % 4; if (pad_len > 0) { pad_len = 4 - pad_len; if (pad_len > 2) return NULL; } length = (input_length + pad_len) / 4 * 3; if (pad_len > 0) length -= pad_len; else { if (data[input_length - 1] == '=') length--; if (data[input_length - 2] == '=') length--; } #else if (input_length % 4 != 0) return NULL; length = input_length / 4 * 3; if (data[input_length - 1] == '=') length--; if (data[input_length - 2] == '=') length--; #endif decoded_data = ug_malloc (length + 1); // + '\0' for decoded text data if (decoded_data == NULL) return NULL; for (i = 0, j = 0; i < input_length;) { sextet_a = data[i] == '=' ? 0 & i++ : decoding_table[(uint8_t)data[i++]]; sextet_b = data[i] == '=' ? 0 & i++ : decoding_table[(uint8_t)data[i++]]; if (i == input_length) // for removed trailing "==" sextet_c = 0; else sextet_c = data[i] == '=' ? 0 & i++ : decoding_table[(uint8_t)data[i++]]; if (i == input_length) // for removed trailing "=" sextet_d = 0; else sextet_d = data[i] == '=' ? 0 & i++ : decoding_table[(uint8_t)data[i++]]; triple = (sextet_a << 3 * 6) + (sextet_b << 2 * 6) + (sextet_c << 1 * 6) + (sextet_d << 0 * 6); if (j < length) decoded_data[j++] = (triple >> 2 * 8) & 0xFF; if (j < length) decoded_data[j++] = (triple >> 1 * 8) & 0xFF; if (j < length) decoded_data[j++] = (triple >> 0 * 8) & 0xFF; } if (output_length) *output_length = length; decoded_data[length] = '\0'; // + '\0' for decoded text data return decoded_data; } // ---------------------------------------------------------------------------- // filename and path functions char* ug_build_filename (const char* first_element, ...) { va_list arg_list; int total_len; const char* temp; char* result; // count total length total_len = 0; temp = first_element; va_start (arg_list, first_element); do { total_len += strlen (temp) + 1; // + '/' temp = va_arg (arg_list, char*); } while (temp); va_end (arg_list); // concat path element result = ug_malloc (total_len + 1); // + '\0' result[0] = 0; temp = first_element; va_start (arg_list, first_element); do { if (temp != first_element) { #if defined _WIN32 || defined _WIN64 if (strchr (temp, '\\') == NULL) strcat (result, "\\"); #else if (strchr (temp, '/') == NULL) strcat (result, "/"); #endif // _WIN32 || _WIN64 } strcat (result, temp); temp = va_arg (arg_list, char*); } while (temp); va_end (arg_list); return result; } // ---------------------------------------------------------------------------- // Power Management #if defined _WIN32 || defined _WIN64 static int ug_win32_get_shutdown_privilege () { HANDLE hToken; TOKEN_PRIVILEGES tkp; if (OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)) { LookupPrivilegeValue (NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges (hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); return TRUE; } return FALSE; } void ug_reboot (void) { ug_win32_get_shutdown_privilege (); ExitWindowsEx (EWX_SHUTDOWN | EWX_REBOOT, 0); } void ug_shutdown (void) { ug_win32_get_shutdown_privilege (); ExitWindowsEx (EWX_SHUTDOWN | EWX_POWEROFF, 0); } void ug_suspend (void) { system ("powercfg -hibernate off"); // SetSuspendState (0, 1, 0); system ("rundll32 powrprof.dll,SetSuspendState 0,1,0"); system ("powercfg -hibernate on"); } void ug_hibernate (void) { // SetSuspendState (1, 0, 0); system ("rundll32 powrprof.dll,SetSuspendState 1,0,0"); } #else void ug_reboot (void) { system ("reboot"); // system ("shutdown -r now"); // old system system ("dbus-send --system --print-reply " "--dest=\"org.freedesktop.ConsoleKit\" " "/org/freedesktop/ConsoleKit/Manager " "org.freedesktop.ConsoleKit.Manager.Restart"); system ("dbus-send --system --print-reply " "--dest=org.freedesktop.login1 " "/org/freedesktop/login1 " "org.freedesktop.login1.Manager.Reboot " "boolean:true"); } void ug_shutdown (void) { system ("poweroff"); // system ("shutdown -h -P now"); // old system system ("dbus-send --system --print-reply " "--dest=\"org.freedesktop.ConsoleKit\" " "/org/freedesktop/ConsoleKit/Manager " "org.freedesktop.ConsoleKit.Manager.Stop"); system ("dbus-send --system --print-reply " "--dest=org.freedesktop.login1 " "/org/freedesktop/login1 " "org.freedesktop.login1.Manager.PowerOff " "boolean:true"); } void ug_suspend (void) { system ("pm-suspend"); // old system system ("dbus-send --system --print-reply " "--dest=\"org.freedesktop.UPower\" " "/org/freedesktop/UPower " "org.freedesktop.UPower.Suspend"); system ("dbus-send --system --print-reply " "--dest=org.freedesktop.login1 " "/org/freedesktop/login1 " "org.freedesktop.login1.Manager.Suspend " "boolean:true"); } void ug_hibernate (void) { system ("pm-hibernate"); // old system system ("dbus-send --system --print-reply " "--dest=\"org.freedesktop.UPower\" " "/org/freedesktop/UPower " "org.freedesktop.UPower.Hibernate"); system ("dbus-send --system --print-reply " "--dest=org.freedesktop.login1 " "/org/freedesktop/login1 " "org.freedesktop.login1.Manager.Hibernate " "boolean:true"); // if system can't hibernate, try to suspend ug_suspend (); } #endif // _WIN32 || _WIN64 // ---------------------------------------------------------------------------- // Others #if defined _WIN32 || defined _WIN64 char* ug_sys_release (void) { OSVERSIONINFO info; memset (&info, 0, sizeof (info)); info.dwOSVersionInfoSize = sizeof (info); GetVersionEx (&info); return ug_strdup_printf ("Windows-%u.%u", (unsigned) info.dwMajorVersion, (unsigned) info.dwMinorVersion); } #else // lsb_release -i // Distributor ID: // lsb_release -r // Release: char* ug_sys_release (void) { FILE* file; char* buf; char* dist = NULL; char* release = NULL; file = popen ("lsb_release -a", "r"); if (file == NULL) return ug_strdup ("Unknown"); buf = ug_malloc (80); while (fgets (buf, 80, file) != NULL) { if (strncmp (buf, "Distributor ID:", 15) == 0) { for (dist = buf + 15; dist[0] == '\t'; dist++); dist = ug_strndup (dist, strcspn (dist, "\n")); } else if (strncmp (buf, "Release:", 8) == 0) { for (release = buf + 8; release[0] == '\t'; release++); release = ug_strndup (release, strcspn (release, "\n")); } } ug_free (buf); pclose (file); if (dist && release) buf = ug_strdup_printf ("%s-%s", dist, release); else buf = ug_strdup ("Unknown"); ug_free (dist); ug_free (release); return buf; } #endif // _WIN32 || _WIN64 uget-2.2.3/uglib/UgSocket.c0000664000175000017500000002462713602733704012417 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include #include #include #if defined _WIN32 || defined _WIN64 //#include // socklen_t, XXXXaddrinfo() //static int ws2_init_count = 0; #define ug_sleep Sleep #else #include // struct addrinfo #include #include #include #define ug_sleep(millisecond) usleep (millisecond * 1000) #endif // _WIN32 || _WIN64 int ug_socket_connect (SOCKET fd, const char* addr, const char* port_or_serv) { struct addrinfo hints; struct addrinfo* result; struct addrinfo* cur; socklen_t len; int type; len = sizeof (type); if (getsockopt (fd, SOL_SOCKET, SO_TYPE, (char*) &type, &len) == -1) return SOCKET_ERROR; // AI_PASSIVE // Socket address will be used in bind() call // AI_CANONNAME // Return canonical name in first ai_canonname // AI_NUMERICHOST // Nodename must be a numeric address string // AI_NUMERICSERV // Servicename must be a numeric port number // get addrinfo memset (&hints, 0, sizeof (hints)); // hints.ai_family = AF_INET; hints.ai_socktype = type; // hints.ai_flags = AI_NUMERICSERV | AI_PASSIVE; if (getaddrinfo (addr, port_or_serv, &hints, &result) != 0) return SOCKET_ERROR; /* struct sockaddr_in saddr; saddr.sin_family = family; saddr.sin_port = htons (80); saddr.sin_addr.S_un.S_addr = inet_addr ("127.0.0.1"); connect (fd, (struct sockaddr *) &saddr, sizeof(saddr)); */ for (cur = result; cur; cur = cur->ai_next) { if (connect (fd, cur->ai_addr, cur->ai_addrlen) == 0) break; } freeaddrinfo (result); // free result from getaddrinfo() if (cur == NULL) return SOCKET_ERROR; return fd; } #if !(defined _WIN32 || defined _WIN64) int ug_socket_connect_unix (SOCKET fd, const char* path, int path_len) { struct sockaddr_un saddr; saddr.sun_family = AF_UNIX; saddr.sun_path [sizeof (saddr.sun_path) -1] = 0; if (path_len == -1) { strncpy (saddr.sun_path, path, sizeof (saddr.sun_path) -1); if (connect (fd, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) return SOCKET_ERROR; } else { if (path_len > sizeof (saddr.sun_path) -1) path_len = sizeof (saddr.sun_path) -1; memcpy (saddr.sun_path, path, path_len); // abstract socket names (begin with 0) are not null terminated if (path_len > 0 && path[0] != 0) saddr.sun_path[path_len++] = 0; if (connect (fd, (struct sockaddr *) &saddr, sizeof (saddr.sun_family) + path_len) < 0) return SOCKET_ERROR; } return fd; } #endif // ! (_WIN32 || _WIN64) int ug_socket_set_blocking (SOCKET fd, int is_blocking) { #if defined _WIN32 || defined _WIN64 u_long is_non_blocking = (is_blocking) ? FALSE : TRUE; if (ioctlsocket (fd, FIONBIO, &is_non_blocking) == SOCKET_ERROR) return FALSE; #else long arg; if ( (arg = fcntl (fd, F_GETFL, NULL)) < 0) return FALSE; if (is_blocking) arg &= (~O_NONBLOCK); else arg |= O_NONBLOCK; if (fcntl (fd, F_SETFL, arg) < 0) return FALSE; #endif return TRUE; } // ------------------------------------ // Server API int ug_socket_listen (SOCKET fd, const char* addr, const char* port_or_serv, int backlog) { struct addrinfo hints; struct addrinfo* result; struct addrinfo* cur; socklen_t len; int type; int opt = 1; if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof (int)) == -1) return SOCKET_ERROR; len = sizeof (type); if (getsockopt (fd, SOL_SOCKET, SO_TYPE, (char*) &type, &len) == -1) return SOCKET_ERROR; // AI_PASSIVE // Socket address will be used in bind() call // AI_CANONNAME // Return canonical name in first ai_canonname // AI_NUMERICHOST // Nodename must be a numeric address string // AI_NUMERICSERV // Servicename must be a numeric port number // get addrinfo memset (&hints, 0, sizeof (hints)); // hints.ai_family = AF_INET; hints.ai_socktype = type; // hints.ai_flags = AI_NUMERICSERV | AI_PASSIVE; if (getaddrinfo (addr, port_or_serv, &hints, &result) != 0) return SOCKET_ERROR; /* saddr.sin_family = AF_INET; saddr.sin_port = htons (80); saddr.sin_addr.S_un.S_addr = inet_addr ("127.0.0.1"); bind (fd, (struct sockaddr *)&saddr, sizeof (saddr)); */ for (cur = result; cur; cur = cur->ai_next) { if (bind (fd, cur->ai_addr, cur->ai_addrlen) == 0) break; } freeaddrinfo (result); // free result from getaddrinfo() if (cur == NULL) return SOCKET_ERROR; if (listen (fd, backlog) == -1) return SOCKET_ERROR; return fd; } #if !(defined _WIN32 || defined _WIN64) SOCKET ug_socket_listen_unix (SOCKET fd, const char* path, int path_len, int backlog) { struct sockaddr_un saddr; saddr.sun_family = AF_UNIX; saddr.sun_path [sizeof (saddr.sun_path) -1] = 0; if (path_len == -1) { strncpy (saddr.sun_path, path, sizeof (saddr.sun_path) -1); // delete socket file before server start // ug_unlink (saddr.sun_path); if (bind (fd, (struct sockaddr*) &saddr, sizeof (saddr)) == -1) return SOCKET_ERROR; } else { if (path_len > sizeof (saddr.sun_path) -1) path_len = sizeof (saddr.sun_path) -1; memcpy (saddr.sun_path, path, path_len); // abstract socket names (begin with 0) are not null terminated if (path_len > 0 && path[0] != 0) saddr.sun_path[path_len++] = 0; if (bind (fd, (struct sockaddr*) &saddr, sizeof (saddr.sun_family) + path_len) == -1) return SOCKET_ERROR; } if (listen (fd, backlog) == -1) return SOCKET_ERROR; return fd; } #endif // ! (_WIN32 || _WIN64) // ------------------------------------ // UgSocketServer static UgThreadResult server_thread (UgSocketServer* server); UgSocketServer* ug_socket_server_new (SOCKET server_fd) { UgSocketServer* server; server = ug_malloc0 (sizeof (UgSocketServer)); server->ref_count = 1; server->socket = server_fd; server->stopped = TRUE; server->stopping = FALSE; server->client_addr_len = sizeof (server->client_addr); return server; } UgSocketServer* ug_socket_server_new_addr (const char* addr, const char* port_or_serv) { SOCKET server_fd; server_fd = socket (AF_INET, SOCK_STREAM, 0); if (server_fd == INVALID_SOCKET) return NULL; if (ug_socket_listen (server_fd, addr, port_or_serv, 5) == SOCKET_ERROR) { closesocket (server_fd); return NULL; } return ug_socket_server_new (server_fd); } #if !(defined _WIN32 || defined _WIN64) UgSocketServer* ug_socket_server_new_unix (const char* path, int path_len) { SOCKET server_fd; server_fd = socket (AF_UNIX, SOCK_STREAM, 0); if (server_fd == -1) return NULL; if (ug_socket_listen_unix (server_fd, path, path_len, 5) == -1) { close (server_fd); return NULL; } return ug_socket_server_new (server_fd); } #endif // ! (_WIN32 || _WIN64) void ug_socket_server_ref (UgSocketServer* server) { server->ref_count++; } void ug_socket_server_unref (UgSocketServer* server) { if (--server->ref_count == 0) { if (server->destroy.func) server->destroy.func (server->destroy.data); shutdown (server->socket, 0); closesocket (server->socket); ug_free (server); } } void ug_socket_server_close (UgSocketServer* server) { if (server->socket != -1) { closesocket (server->socket); server->socket = -1; } } void ug_socket_server_set_receiver (UgSocketServer* server, UgSocketServerFunc func, void* data) { server->receiver.func = func; server->receiver.data = data; } int ug_socket_server_start (UgSocketServer* server) { if (server->receiver.func == NULL) return FALSE; if (server->stopped) { server->stopped = FALSE; server->stopping = FALSE; ug_socket_server_ref (server); ug_thread_create (&server->thread, (UgThreadFunc) server_thread, server); ug_thread_unjoin (&server->thread); return TRUE; } return FALSE; } void ug_socket_server_stop (UgSocketServer* server) { if (server->stopped == FALSE) { server->stopping = TRUE; // ug_thread_join (&server->thread); } } static UgThreadResult server_thread (UgSocketServer* server) { struct timeval timeout; int client_fd; int result; while (server->stopping == FALSE) { // reset fd_set and timeout because select() will change them. FD_ZERO (&server->read_fds); FD_SET (server->socket, &server->read_fds); timeout.tv_sec = 1; timeout.tv_usec = 0; // select() will change fd_set and timeout (reduce timeout to 0) result = select (server->socket + 1, &server->read_fds, NULL, NULL, &timeout); // exit thread if user stop server if (server->stopping || result < 0) break; // select() time limit expired if result == 0 if (result == 0) { // ug_sleep (200); continue; } client_fd = accept (server->socket, (struct sockaddr *) &server->client_addr, &server->client_addr_len); server->receiver.func (server, client_fd, server->receiver.data); } server->stopping = FALSE; server->stopped = TRUE; ug_socket_server_unref (server); return UG_THREAD_RESULT; } uget-2.2.3/uglib/UgString.c0000664000175000017500000002046013602733704012424 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include // vsnprintf #include #include #include // ---------------------------------------------------------------------------- // String #if !(defined HAVE_GLIB) char* ug_strdup_printf (const char* format, ...) { va_list arg_list; char* string; int string_len; va_start (arg_list, format); #ifdef _MSC_VER /* for MS C only */ string_len = _vscprintf (format, arg_list); #else /* for C99 standard */ string_len = vsnprintf (NULL, 0, format, arg_list); #endif va_end (arg_list); string = ug_malloc (string_len + 1); va_start (arg_list, format); vsprintf (string, format, arg_list); va_end (arg_list); return string; } char* ug_strndup (const char* string, size_t length) { char* result; result = ug_malloc (length + 1); result[length] = 0; strncpy (result, string, length); return result; } #endif // ! (HAVE_GLIB) // return length of new string int ug_str_remove_crlf (const char* src, char* dest) { return ug_str_remove_chars (src, dest, "\r\n"); } // return length of new string int ug_str_remove_chars (const char* src, char* dest, const char* chars) { const char* cur; int length = 0; if (src) { for (; ; src++) { for (cur = chars; cur[0]; cur++) { if (src[0] == cur[0]) break; } if (cur[0] != 0) continue; if (dest) *dest++ = *src; if (src[0] == 0) break; length++; } } return length; } // return number of characters was replaced by to_char int ug_str_replace_chars (char* str, const char* from_chars, int to_char) { int counts; for (counts = 0; ; counts++) { str = strpbrk (str, from_chars); if (str == NULL) break; str[0] = to_char; } return counts; } /* * convert double to string * If value large than 1024, it will append unit string like "KiB", * "MiB", "GiB", "TiB", or "PiB" to string. */ char* ug_str_from_int_unit (int64_t value, const char* tail) { static const char* unit_array[] = {"", " KiB", " MiB", " GiB", " TiB", " PiB"}; static const int unit_array_len = sizeof (unit_array) / sizeof (char*); int index; for (index=0; index < unit_array_len -1; index++) { // if (value < 1024) if (value < 10000) break; // value /= 1024; value >>= 10; } return ug_strdup_printf ("%d%s%s", (int)value, unit_array[index], (tail) ? tail : ""); } /* * convert seconds to string (hh:mm:ss) */ char* ug_str_from_seconds (int seconds, int limit_99_99_99) { int hour, minute; int day, year; minute = seconds / 60; hour = minute / 60; minute = minute % 60; seconds = seconds % 60; if (hour < 100) return ug_strdup_printf ("%.2d:%.2d:%.2d", hour, minute, seconds); else if (limit_99_99_99) return ug_strdup ("99:99:99"); else { day = hour / 24; year = day / 365; if (year) return ug_strdup ("> 1 year"); else return ug_strdup_printf ("%u days", day); } } /* * convert time_t to string */ char* ug_str_from_time (time_t ptt, int date_only) { struct tm* timem; timem = localtime (&ptt); if (timem == NULL) return NULL; if (date_only) { return ug_strdup_printf ("%.4d-%.2d-%.2d", timem->tm_year + 1900, timem->tm_mon + 1, timem->tm_mday); } else { return ug_strdup_printf ("%.4d-%.2d-%.2d" " %.2d:%.2d:%.2d", timem->tm_year + 1900, timem->tm_mon + 1, timem->tm_mday, timem->tm_hour, timem->tm_min, timem->tm_sec); } } static const char* month_string[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; time_t ug_str_rfc822_to_time (const char* string) { struct tm timem; const char* cur; const char* end; int idx; end = string + strlen (string); // day if ((cur = string + 5) >= end) return -1; timem.tm_mday = strtoul (cur, NULL, 10); // month if ((cur += 3) >= end) return -1; for (idx = 0; idx < 12; idx++) { if (strncmp (cur, month_string[idx], 3) == 0) break; } if (idx == 12) return -1; timem.tm_mon = idx; // year if ((cur += 4) >= end) return -1; timem.tm_year = strtoul (cur, NULL, 10); // if (timem.tm_year < 50) // timem.tm_year += 100; // else if (timem.tm_year > 1000) timem.tm_year -= 1900; if ((cur = strchr (cur, ' ')) == NULL) return -1; cur++; // hour timem.tm_hour = strtoul (cur, NULL, 10); // minute if ((cur += 3) >= end) return -1; timem.tm_min = strtoul (cur, NULL, 10); // second if ((cur += 3) >= end) return -1; timem.tm_sec = strtoul (cur, NULL, 10); // zone // if ((cur += 3) >= end) // return -1; // other timem.tm_wday = 0; timem.tm_yday = 0; timem.tm_isdst = -1; return mktime (&timem); } time_t ug_str_rfc3339_to_time (const char* string) { struct tm timem; const char* cur; const char* end; end = string + strlen (string); // year timem.tm_year = strtoul (string, NULL, 10); timem.tm_year -= 1900; if ((cur = strchr (string, '-')) == NULL) return -1; cur++; // month timem.tm_mon = strtoul (cur, NULL, 10); if (timem.tm_mon > 0) timem.tm_mon -= 1; // day if ((cur += 3) >= end) return -1; timem.tm_mday = strtoul (cur, NULL, 10); // hour if ((cur += 3) >= end) return -1; timem.tm_hour = strtoul (cur, NULL, 10); // minute if ((cur += 3) >= end) return -1; timem.tm_min = strtoul (cur, NULL, 10); // second if ((cur += 3) >= end) return -1; timem.tm_sec = strtoul (cur, NULL, 10); // zone if ((cur = strpbrk (cur, "+-")) == NULL) return -1; // other timem.tm_wday = 0; timem.tm_yday = 0; timem.tm_isdst = -1; return mktime (&timem); } // ------------------------------------ // command-line char** ug_argv_from_cmd (const char* cmd, int* argc, int reserve_len) { int argn; char** argv; char* buf; char* beg; char* cur; char* end; char* quote = NULL; // pointer to '\"' for (argn = 0, cur = (char*)cmd; ; argn++) { if (cur[0] == 0) { end = cur; break; } while (cur[0] != ' ' && cur[0]) cur++; while (cur[0] == ' ') cur++; } // malloc size include buffer and null-terminated argv = ug_malloc (sizeof (char*) * (argn+2+reserve_len)); buf = ug_strdup (cmd); end = buf + (end - cmd); // argv[-1] == buf *argv++ = buf; for (argn = reserve_len, beg = buf, cur = buf; cur[0]; ) { switch (cur[0]) { default: cur++; break; case '\"': // overwrite '\"', must include null-terminated memmove (cur, cur+1, end - cur); if (quote == NULL) quote = cur; else quote = NULL; break; case ' ': if (quote == NULL) { argv[argn++] = beg; while (cur[0] == ' ') *cur++ = 0; beg = cur; } break; } } if (beg[0]) argv[argn++] = beg; if (argc) argc[0] = argn; argv[argn++] = NULL; // null-termainate return argv; } void ug_argv_free (char** ug_argv) { ug_free (ug_argv[-1]); ug_free (ug_argv-1); } uget-2.2.3/uglib/CMakeLists.txt0000664000175000017500000000163613602733704013262 00000000000000cmake_minimum_required(VERSION 3.4.1) project(uglib) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNDEBUG") include_directories( ${CURL_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) add_library( uglib STATIC UgStdio.c UgString.c UgThread.c UgSocket.c UgUtil.c UgFileUtil.c UgArray.c UgList.c UgSLink.c UgOption.c UgUri.c UgNode.c UgData.c UgInfo.c UgRegistry.c UgValue.c UgEntry.c UgBuffer.c UgJson.c UgJson-custom.c UgJsonFile.c UgJsonrpc.c UgJsonrpcSocket.c UgJsonrpcCurl.c UgHtml.c UgHtmlEntry.c UgHtmlFilter.c ) uget-2.2.3/uglib/UgSLink.h0000664000175000017500000000575013602733704012210 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #ifndef UG_SLINK_H #define UG_SLINK_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct UgSLink UgSLink; typedef struct UgSLinks UgSLinks; // ---------------------------------------------------------------------------- // UgSLink : for Singly-Linked List struct UgSLink { void* data; UgSLink* next; }; // ---------------------------------------------------------------------------- // UgSLinks : array of UgSLink #define UG_SLINKS_MEMBERS \ UG_ARRAY_MEMBERS (UgSLink); \ int n_links; \ UgSLink* used; \ UgSLink* freed \ struct UgSLinks { UG_SLINKS_MEMBERS; /* // ------ UgArray members ------ UgSLink* at; int length; int allocated; int element_size // ------ UgSLinks members ------ int n_links; UgSLink* used; UgSLink* freed; */ }; void ug_slinks_init (UgSLinks* slinks, int allocated_len); void ug_slinks_final (UgSLinks* slinks); void ug_slinks_add (UgSLinks* slinks, void* data); void ug_slinks_remove (UgSLinks* slinks, void* data, UgSLink* prev); void ug_slinks_foreach (UgSLinks* ilinks, UgForeachFunc func, void* user_data); // return NULL if not found. UgSLink* ug_slinks_find (UgSLinks* slinks, void* data, UgSLink** prev); #define ug_slinks_index(slinks, link) ((link) - (slinks)->at) #ifdef __cplusplus } #endif #endif // End of UG_SLINK_H uget-2.2.3/uglib/UgHtmlFilter.c0000664000175000017500000001667513602733704013245 00000000000000/* * * Copyright (C) 2012-2020 by C.H. Huang * plushuang.tw@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU Lesser General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. * */ #include #include #include static UgHtmlParser default_parser; static UgHtmlParser script_parser; static UgHtmlParser head_parser; UgHtmlFilter* ug_html_filter_new (void) { UgHtmlFilter* filter; filter = ug_malloc (sizeof (UgHtmlFilter)); ug_html_init ((UgHtml*) filter); filter->base_href = NULL; filter->charset = NULL; ug_list_init (&filter->tags); ug_html_push ((UgHtml*)filter, &default_parser, NULL, NULL); return (UgHtmlFilter*) filter; } void ug_html_filter_free (UgHtmlFilter* filter) { ug_free (filter->base_href); ug_free (filter->charset); ug_list_foreach (&filter->tags, (UgForeachFunc) ug_html_filter_tag_unref, NULL); ug_list_clear (&filter->tags, FALSE); ug_free (filter); } void ug_html_filter_add_tag (UgHtmlFilter* filter, UgHtmlFilterTag* tag) { ug_list_prepend (&filter->tags, (UgLink*) tag); ug_html_filter_tag_ref (tag); tag->filter = filter; } int ug_html_filter_parse_file (UgHtmlFilter* filter, const char* file_utf8) { UgHtml* uhtml; uhtml = (UgHtml*) filter; ug_html_push (uhtml, &default_parser, NULL, NULL); return ug_html_parse_file (uhtml, file_utf8); } // ---------------------------------------------------------------------------- // UgHtmlFilterTag UgHtmlFilterTag* ug_html_filter_tag_new (char* element_name, char* attr_name) { UgHtmlFilterTag* tag; tag = ug_malloc0 (sizeof (UgHtmlFilterTag)); tag->self = tag; tag->tag_name = ug_strdup (element_name); tag->attr_name = ug_strdup (attr_name); ug_list_init (&tag->attr_values); tag->ref_count = 1; return tag; } void ug_html_filter_tag_ref (UgHtmlFilterTag* tag) { tag->ref_count++; } void ug_html_filter_tag_unref (UgHtmlFilterTag* tag) { tag->ref_count--; if (tag->ref_count == 0) { ug_free (tag->tag_name); ug_free (tag->attr_name); ug_list_foreach (&tag->attr_values, (UgForeachFunc) ug_free, NULL); ug_list_clear (&tag->attr_values, TRUE); ug_free (tag); } } // ---------------------------------------------------------------------------- // default parser static void cb_start_element (UgHtml* uhtml, const char* element_name, const char** attribute_names, const char** attribute_values, void* dest) { UgHtmlFilter* filter = (UgHtmlFilter*) uhtml; UgHtmlFilterTag* tag; UgLink* link; UgLink* strlink; if (strcasecmp (element_name, "script") == 0) { ug_html_push (uhtml, &script_parser, NULL, NULL); return; } if (strcasecmp (element_name, "head") == 0) { ug_html_push (uhtml, &head_parser, NULL, NULL); return; } // filter tag for (link = filter->tags.head; link; link = link->next) { tag = link->data; if (strcasecmp (element_name, tag->tag_name) != 0) continue; for (; *attribute_names; attribute_names++, attribute_values++) { if (strcasecmp (*attribute_names, tag->attr_name) != 0) continue; if (tag->callback) tag->callback (tag, *attribute_values, tag->callback_data); else { strlink = ug_link_new (); strlink->data = ug_strdup (*attribute_values); ug_list_prepend (&tag->attr_values, strlink); } } } } static UgHtmlParser default_parser = { (void*) cb_start_element, (void*) NULL, (void*) NULL, }; // ---------------------------------------------------------------------------- // parser -