void GDMonoLog::_delete_old_log_files(const String &p_logs_dir) { static const uint64_t MAX_SECS = 5 * 86400; DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); ERR_FAIL_COND(!da); Error err = da->change_dir(p_logs_dir); ERR_FAIL_COND(err != OK); ERR_FAIL_COND(da->list_dir_begin() != OK); String current; while ((current = da->get_next()).length()) { if (da->current_is_dir()) continue; if (!current.ends_with(".txt")) continue; String name = current.get_basename(); uint64_t unixtime = (uint64_t)name.to_int64(); if (OS::get_singleton()->get_unix_time() - unixtime > MAX_SECS) { da->remove(current); } } da->list_dir_end(); }
MonoAssembly *gdmono_MonoAssemblyPreLoad(MonoAssemblyName *aname, char **assemblies_path, void *user_data) { (void)user_data; // UNUSED MonoAssembly *assembly_loaded = mono_assembly_loaded(aname); if (assembly_loaded) // Already loaded return assembly_loaded; static Vector<String> search_dirs; if (search_dirs.empty()) { search_dirs.push_back(GodotSharpDirs::get_res_temp_assemblies_dir()); search_dirs.push_back(GodotSharpDirs::get_res_assemblies_dir()); search_dirs.push_back(OS::get_singleton()->get_resource_dir()); search_dirs.push_back(OS::get_singleton()->get_executable_path().get_base_dir()); const char *rootdir = mono_assembly_getrootdir(); if (rootdir) { search_dirs.push_back(String(rootdir).plus_file("mono").plus_file("4.5")); } while (assemblies_path) { if (*assemblies_path) search_dirs.push_back(*assemblies_path); ++assemblies_path; } } String name = mono_assembly_name_get_name(aname); bool has_extension = name.ends_with(".dll") || name.ends_with(".exe"); String path; for (int i = 0; i < search_dirs.size(); i++) { const String &search_dir = search_dirs[i]; if (has_extension) { path = search_dir.plus_file(name); if (FileAccess::exists(path)) return gdmono_load_assembly_from(name.get_basename(), path); } else { path = search_dir.plus_file(name + ".dll"); if (FileAccess::exists(path)) return gdmono_load_assembly_from(name, path); path = search_dir.plus_file(name + ".exe"); if (FileAccess::exists(path)) return gdmono_load_assembly_from(name, path); } } return NULL; }
String EditorData::get_scene_title(int p_idx) const { ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), String()); if (!edited_scene[p_idx].root) return TTR("[empty]"); if (edited_scene[p_idx].root->get_filename() == "") return TTR("[unsaved]"); bool show_ext = EDITOR_DEF("interface/scene_tabs/show_extension", false); String name = edited_scene[p_idx].root->get_filename().get_file(); if (!show_ext) { name = name.get_basename(); } return name; }
void ScriptCreateDialog::config(const String &p_base_name, const String &p_base_path) { class_name->set_text(""); parent_name->set_text(p_base_name); if (p_base_path != "") { initial_bp = p_base_path.get_basename(); file_path->set_text(initial_bp + "." + ScriptServer::get_language(language_menu->get_selected())->get_extension()); } else { initial_bp = ""; file_path->set_text(""); } _lang_changed(current_language); _parent_name_changed(parent_name->get_text()); _class_name_changed(""); _path_changed(file_path->get_text()); }
MonoAssembly *GDMonoAssembly::_search_hook(MonoAssemblyName *aname, void *user_data) { (void)user_data; // UNUSED String name = mono_assembly_name_get_name(aname); bool has_extension = name.ends_with(".dll") || name.ends_with(".exe"); if (no_search) return NULL; GDMonoAssembly **loaded_asm = GDMono::get_singleton()->get_loaded_assembly(has_extension ? name.get_basename() : name); if (loaded_asm) return (*loaded_asm)->get_assembly(); no_search = true; // Avoid the recursion madness String path; MonoAssembly *res = NULL; for (int i = 0; i < search_dirs.size(); i++) { const String &search_dir = search_dirs[i]; if (has_extension) { path = search_dir.plus_file(name); if (FileAccess::exists(path)) { res = _load_assembly_from(name.get_basename(), path); break; } } else { path = search_dir.plus_file(name + ".dll"); if (FileAccess::exists(path)) { res = _load_assembly_from(name, path); break; } path = search_dir.plus_file(name + ".exe"); if (FileAccess::exists(path)) { res = _load_assembly_from(name, path); break; } } } no_search = false; return res; }
void ProjectExportDialog::_export_project_to_path(const String &p_path) { // Save this name for use in future exports (but drop the file extension) default_filename = p_path.get_basename().get_file(); EditorSettings::get_singleton()->set_project_metadata("export_options", "default_filename", default_filename); Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); ERR_FAIL_COND(current.is_null()); Ref<EditorExportPlatform> platform = current->get_platform(); ERR_FAIL_COND(platform.is_null()); Error err = platform->export_project(current, export_debug->is_pressed(), p_path, 0); if (err != OK) { error_dialog->set_text(TTR("Export templates for this platform are missing/corrupted: ") + platform->get_name()); error_dialog->show(); error_dialog->popup_centered_minsize(Size2(300, 80)); ERR_PRINT("Failed to export project"); } }
Error ResourceImporterCSVTranslation::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files) { bool compress = p_options["compress"]; String delimiter; switch ((int)p_options["delimiter"]) { case 0: delimiter = ","; break; case 1: delimiter = ";"; break; case 2: delimiter = "\t"; break; } FileAccessRef f = FileAccess::open(p_source_file, FileAccess::READ); ERR_FAIL_COND_V(!f, ERR_INVALID_PARAMETER); Vector<String> line = f->get_csv_line(delimiter); ERR_FAIL_COND_V(line.size() <= 1, ERR_PARSE_ERROR); Vector<String> locales; Vector<Ref<Translation> > translations; for (int i = 1; i < line.size(); i++) { String locale = line[i]; ERR_EXPLAIN("Error importing CSV translation: '" + locale + "' is not a valid locale"); ERR_FAIL_COND_V(!TranslationServer::is_locale_valid(locale), ERR_PARSE_ERROR); locales.push_back(locale); Ref<Translation> translation; translation.instance(); translation->set_locale(locale); translations.push_back(translation); } line = f->get_csv_line(delimiter); while (line.size() == locales.size() + 1) { String key = line[0]; if (key != "") { for (int i = 1; i < line.size(); i++) { translations.write[i - 1]->add_message(key, line[i]); } } line = f->get_csv_line(delimiter); } for (int i = 0; i < translations.size(); i++) { Ref<Translation> xlt = translations[i]; if (compress) { Ref<PHashTranslation> cxl = memnew(PHashTranslation); cxl->generate(xlt); xlt = cxl; } String save_path = p_source_file.get_basename() + "." + translations[i]->get_locale() + ".translation"; ResourceSaver::save(save_path, xlt); if (r_gen_files) { r_gen_files->push_back(save_path); } } return OK; }
MainLoop *test(TestType p_type) { List<String> cmdlargs = OS::get_singleton()->get_cmdline_args(); if (cmdlargs.empty()) { //try editor! return NULL; } String test = cmdlargs.back()->get(); FileAccess *fa = FileAccess::open(test, FileAccess::READ); if (!fa) { ERR_EXPLAIN("Could not open file: " + test); ERR_FAIL_V(NULL); } Vector<uint8_t> buf; int flen = fa->get_len(); buf.resize(fa->get_len() + 1); fa->get_buffer(buf.ptrw(), flen); buf.write[flen] = 0; String code; code.parse_utf8((const char *)&buf[0]); Vector<String> lines; int last = 0; for (int i = 0; i <= code.length(); i++) { if (code[i] == '\n' || code[i] == 0) { lines.push_back(code.substr(last, i - last)); last = i + 1; } } if (p_type == TEST_TOKENIZER) { GDScriptTokenizerText tk; tk.set_code(code); int line = -1; while (tk.get_token() != GDScriptTokenizer::TK_EOF) { String text; if (tk.get_token() == GDScriptTokenizer::TK_IDENTIFIER) text = "'" + tk.get_token_identifier() + "' (identifier)"; else if (tk.get_token() == GDScriptTokenizer::TK_CONSTANT) { Variant c = tk.get_token_constant(); if (c.get_type() == Variant::STRING) text = "\"" + String(c) + "\""; else text = c; text = text + " (" + Variant::get_type_name(c.get_type()) + " constant)"; } else if (tk.get_token() == GDScriptTokenizer::TK_ERROR) text = "ERROR: " + tk.get_token_error(); else if (tk.get_token() == GDScriptTokenizer::TK_NEWLINE) text = "newline (" + itos(tk.get_token_line()) + ") + indent: " + itos(tk.get_token_line_indent()); else if (tk.get_token() == GDScriptTokenizer::TK_BUILT_IN_FUNC) text = "'" + String(GDScriptFunctions::get_func_name(tk.get_token_built_in_func())) + "' (built-in function)"; else text = tk.get_token_name(tk.get_token()); if (tk.get_token_line() != line) { int from = line + 1; line = tk.get_token_line(); for (int i = from; i <= line; i++) { int l = i - 1; if (l >= 0 && l < lines.size()) { print_line("\n" + itos(i) + ": " + lines[l] + "\n"); } } } print_line("\t(" + itos(tk.get_token_column()) + "): " + text); tk.advance(); } } if (p_type == TEST_PARSER) { GDScriptParser parser; Error err = parser.parse(code); if (err) { print_line("Parse Error:\n" + itos(parser.get_error_line()) + ":" + itos(parser.get_error_column()) + ":" + parser.get_error()); memdelete(fa); return NULL; } const GDScriptParser::Node *root = parser.get_parse_tree(); ERR_FAIL_COND_V(root->type != GDScriptParser::Node::TYPE_CLASS, NULL); const GDScriptParser::ClassNode *cnode = static_cast<const GDScriptParser::ClassNode *>(root); _parser_show_class(cnode, 0, lines); } if (p_type == TEST_COMPILER) { GDScriptParser parser; Error err = parser.parse(code); if (err) { print_line("Parse Error:\n" + itos(parser.get_error_line()) + ":" + itos(parser.get_error_column()) + ":" + parser.get_error()); memdelete(fa); return NULL; } GDScript *script = memnew(GDScript); GDScriptCompiler gdc; err = gdc.compile(&parser, script); if (err) { print_line("Compile Error:\n" + itos(gdc.get_error_line()) + ":" + itos(gdc.get_error_column()) + ":" + gdc.get_error()); memdelete(script); return NULL; } Ref<GDScript> gds = Ref<GDScript>(script); Ref<GDScript> current = gds; while (current.is_valid()) { print_line("** CLASS **"); _disassemble_class(current, lines); current = current->get_base(); } } else if (p_type == TEST_BYTECODE) { Vector<uint8_t> buf = GDScriptTokenizerBuffer::parse_code_string(code); String dst = test.get_basename() + ".gdc"; FileAccess *fw = FileAccess::open(dst, FileAccess::WRITE); fw->store_buffer(buf.ptr(), buf.size()); memdelete(fw); } memdelete(fa); return NULL; }
void ScriptCreateDialog::_lang_changed(int l) { l = language_menu->get_selected(); ScriptLanguage *language = ScriptServer::get_language(l); if (language->has_named_classes()) { has_named_classes = true; } else { has_named_classes = false; } if (language->supports_builtin_mode()) { supports_built_in = true; } else { supports_built_in = false; is_built_in = false; } if (ScriptServer::get_language(l)->can_inherit_from_file()) { can_inherit_from_file = true; } else { can_inherit_from_file = false; } String selected_ext = "." + language->get_extension(); String path = file_path->get_text(); String extension = ""; if (path != "") { if (path.find(".") >= 0) { extension = path.get_extension(); } if (extension.length() == 0) { // add extension if none path += selected_ext; _path_changed(path); } else { // change extension by selected language List<String> extensions; // get all possible extensions for script for (int l = 0; l < language_menu->get_item_count(); l++) { ScriptServer::get_language(l)->get_recognized_extensions(&extensions); } for (List<String>::Element *E = extensions.front(); E; E = E->next()) { if (E->get().nocasecmp_to(extension) == 0) { path = path.get_basename() + selected_ext; _path_changed(path); break; } } } } else { path = "class" + selected_ext; _path_changed(path); } file_path->set_text(path); bool use_templates = language->is_using_templates(); template_menu->set_disabled(!use_templates); template_menu->clear(); if (use_templates) { template_list = EditorSettings::get_singleton()->get_script_templates(language->get_extension()); String last_lang = EditorSettings::get_singleton()->get_project_metadata("script_setup", "last_selected_language", ""); String last_template = EditorSettings::get_singleton()->get_project_metadata("script_setup", "last_selected_template", ""); template_menu->add_item(TTR("Default")); for (int i = 0; i < template_list.size(); i++) { String s = template_list[i].capitalize(); template_menu->add_item(s); if (language_menu->get_item_text(language_menu->get_selected()) == last_lang && last_template == s) { template_menu->select(i + 1); } } } else { template_menu->add_item(TTR("N/A")); script_template = ""; } _template_changed(template_menu->get_selected()); EditorSettings::get_singleton()->set_project_metadata("script_setup", "last_selected_language", language_menu->get_item_text(language_menu->get_selected())); _update_dialog(); }