private void _selectInternal <TKey>(ServerDbs tabName, List <TKey> tuplesGen, bool changeTab) { try { lock (_lock) { IsSelecting = true; if (tabName.AdditionalTable == null) { TabItem item = _tab.Dispatch(() => _tab.Items.Cast <TabItem>().FirstOrDefault(p => p.Header.ToString() == tabName)); if (item is GDbTab) { GDbTab tab = (GDbTab)item; var table = tab.To <TKey>().Table; List <Tuple> tuples = tuplesGen.Select(table.TryGetTuple).Where(p => p != null).Select(p => (Tuple)p).ToList(); if (tuples.Count == 0) { if (changeTab) { ErrorHandler.HandleException((tuplesGen.Count > 1 ? "Items do" : "Item does") + " not exist in [" + tabName.DisplayName + "].", ErrorLevel.NotSpecified); } return; } if (!_containsAny(tab, tuples)) { tab.IgnoreFilterOnce(); tab.Filter(); _waitForFilter(tab); if (!_containsAny(tab, tuples)) { if (changeTab) { ErrorHandler.HandleException((tuplesGen.Count > 1 ? "Items" : "Item") + " not found in [" + tabName.DisplayName + "]. Try clearing the search filter on the specified table.", ErrorLevel.NotSpecified); } return; } } tab.Dispatch(p => p.IsSelected = true); _waitForFilter(tab); tab.Dispatch(p => p.SelectItems(tuples)); } else { if (item == null) { return; } if (changeTab) { item.Dispatch(p => p.IsSelected = true); } } } else { TabItem item = _tab.Dispatch(() => _tab.Items.Cast <TabItem>().FirstOrDefault(p => p.Header.ToString() == tabName)); TabItem item2 = _tab.Dispatch(() => _tab.Items.Cast <TabItem>().FirstOrDefault(p => p.Header.ToString() == tabName.AdditionalTable)); if (item is GDbTab && item2 is GDbTab) { GDbTab tab = (GDbTab)item; GDbTab tab2 = (GDbTab)item2; var table = tab.To <TKey>().Table; var table2 = tab2.To <TKey>().Table; List <Tuple> tuples = tuplesGen.Select(table.TryGetTuple).Where(p => p != null).Select(p => (Tuple)p).ToList(); List <Tuple> tuples2 = tuplesGen.Select(table2.TryGetTuple).Where(p => p != null).Select(p => (Tuple)p).ToList(); if (tuples.Count == 0 && tuples2.Count == 0) { if (changeTab) { ErrorHandler.HandleException((tuplesGen.Count > 1 ? "Items do" : "Item does") + " not exist in either [" + tabName.DisplayName + "] or [" + tabName.AdditionalTable.DisplayName + "].", ErrorLevel.NotSpecified); } return; } if (!_containsAny(tab, tuples)) { tab.IgnoreFilterOnce(); tab.Filter(); _waitForFilter(tab); } if (!_containsAny(tab2, tuples)) { tab2.IgnoreFilterOnce(); tab2.Filter(); _waitForFilter(tab2); } if (!_containsAny(tab, tuples) && !_containsAny(tab2, tuples2)) { if (!_containsAny(tab, tuples) && !_containsAny(tab2, tuples2)) { if (changeTab) { ErrorHandler.HandleException((tuplesGen.Count > 1 ? "Items" : "Item") + " not found in either [" + tabName.DisplayName + "] or [" + tabName.AdditionalTable.DisplayName + "], but . Try clearing the search filter on the specified table.", ErrorLevel.NotSpecified); } return; } } GDbTab tabToSelect = _containsAny(tab2, tuples2) ? tab2 : tab; if (changeTab) { tabToSelect.Dispatch(p => p.IsSelected = true); } _waitForFilter(tabToSelect); tabToSelect.Dispatch(p => p.SelectItems(tabToSelect == tab ? tuples : tuples2)); } else { if (item == null) { return; } if (changeTab) { item.Dispatch(p => p.IsSelected = true); } } } } } catch { } finally { IsSelecting = false; } }
public string Execute(GDbTab core, string code) { MemoryStream stream = new MemoryStream(); string output = ""; _core = core; Script script = new Script(); try { TableHelper.EnableTupleTrace = true; if (_core == null) { throw new Exception("No database tab selected."); } _selected = new ObservableList <Tuple>(); foreach (var tuple in _core._listView.SelectedItems.OfType <Tuple>().OrderBy(p => p)) { _selected.Add(tuple); } _selectionChanged = false; _selected.CollectionChanged += delegate { _selectionChanged = true; }; _mEngine.Runtime.IO.SetOutput(stream, EncodingService.DisplayEncoding); _mEngine.Runtime.IO.SetErrorOutput(stream, EncodingService.DisplayEncoding); _mScope = _mEngine.CreateScope(); List <object> dbs = new List <object>(); foreach (var serverDb in ServerDbs.ListDbs) { var db = _core.DbComponent.TryGetDb(serverDb); if (db != null) { if (db.AttributeList.PrimaryAttribute.DataType == typeof(int)) { var adb = (AbstractDb <int>)db; dbs.Add(adb); TableHelper.Tables.Add(adb.Table); _mScope.SetVariable(serverDb.Filename.ToLower().Replace(" ", "_"), adb.Table); } else if (db.AttributeList.PrimaryAttribute.DataType == typeof(string)) { var adb = (AbstractDb <string>)db; dbs.Add(adb); TableHelper.Tables.Add(adb.Table); _mScope.SetVariable(serverDb.Filename.ToLower().Replace(" ", "_"), adb.Table); } } } _mScope.SetVariable("item_db_m", _core.DbComponent.GetMeta <int>(ServerDbs.Items)); _mScope.SetVariable("mob_db_m", _core.DbComponent.GetMeta <int>(ServerDbs.Mobs)); _mScope.SetVariable("mob_skill_db_m", _core.DbComponent.GetMeta <string>(ServerDbs.MobSkills)); _mScope.SetVariable("selection", _selected); _mScope.SetVariable("database", _core.ProjectDatabase); _mScope.SetVariable("script", script); //_mScope.SetVariable("ServerDbs", DynamicHelpers.GetPythonTypeFromType(typeof(ServerDbs))); _selectedDb = null; _to <int>(_core.DbComponent, p => { _selectedDb = p.Table; _mScope.SetVariable("selected_db", p.Table); }); _to <string>(_core.DbComponent, p => { _selectedDb = p.Table; _mScope.SetVariable("selected_db", p.Table); }); string temp = TemporaryFilesManager.GetTemporaryFilePath("python_script_{0:0000}.py"); byte[] file = File.ReadAllBytes(code); Encoding encoding = EncodingService.DetectEncoding(file); using (StreamWriter writer = new StreamWriter(File.Create(temp), encoding)) using (StreamReader reader = new StreamReader(code)) { writer.WriteLine("#!/usr/bin/env python"); writer.WriteLine("# -*- coding: {0} -*- ", encoding.CodePage); while (!reader.EndOfStream) { string line = reader.ReadLine(); if (line == null) { continue; } writer.WriteLine(EncodingService.FromAnyTo(line, encoding)); } } ScriptSource source = _mEngine.CreateScriptSourceFromFile(temp); foreach (var db in dbs) { _to <int>(db, _onBegin); _to <string>(db, _onBegin); } try { try { source.Execute(_mScope); } catch (OperationCanceledException) { } if (stream.Position > 0) { stream.Seek(0, SeekOrigin.Begin); byte[] data = new byte[stream.Length]; stream.Read(data, 0, data.Length); output = EncodingService.DisplayEncoding.GetString(data); Clipboard.SetDataObject(EncodingService.DisplayEncoding.GetString(data)); } } catch { foreach (var db in dbs) { _to <int>(db, p => p.Table.Commands.CancelEdit()); _to <string>(db, p => p.Table.Commands.CancelEdit()); } throw; } finally { foreach (var db in dbs) { _to <int>(db, _onEnd); _to <string>(db, _onEnd); } stream.Close(); _core.Filter(); _core.Update(); } } catch (Exception err) { ErrorHandler.HandleException(err); } finally { TableHelper.EnableTupleTrace = false; TableHelper.Tables.Clear(); } return(output); }
private void _copy <TKey>() { // Only int tables are allowed... AbstractDb <TKey> db = _destDb.To <TKey>(); AbstractDb <TKey> sourceDb = _sourceDb.To <TKey>(); TKey newKey; TKey firstId = (TKey)(object)Int32.Parse(_tbNewId.Text); Regex aegisNameInput = null; Regex nameInput = null; try { db.Table.Commands.BeginNoDelay(); for (int i = 0; i < _tuples.Count; i++) { var item = _tuples[i]; TKey oldId = item.GetKey <TKey>(); newKey = (TKey)(object)((int)(object)firstId + i); if (!SdeAppConfiguration.CmdCopyToOverwrite) { if (db.Table.ContainsKey(newKey)) { continue; } } if (i == _tuples.Count - 1) { db.Table.Commands.CopyTupleTo(sourceDb.Table, oldId, newKey, (a, b, c, d, e) => _copyToCallback2(db, c, d, e)); } else { db.Table.Commands.CopyTupleTo(sourceDb.Table, oldId, newKey, (a, b, c, d, e) => _copyToCallback3(c, d, e)); } if ((ServerDbs.ServerItems & db.DbSource) != 0) { _autoField(ref aegisNameInput, () => SdeAppConfiguration.CmdCopyToAegisNameEnabled, () => SdeAppConfiguration.CmdCopyToAegisNameFormatInput, () => SdeAppConfiguration.CmdCopyToAegisNameFormatOutput, item, db, newKey, i, ServerItemAttributes.AegisName); _autoField(ref nameInput, () => SdeAppConfiguration.CmdCopyToNameEnabled, () => SdeAppConfiguration.CmdCopyToNameFormatInput, () => SdeAppConfiguration.CmdCopyToNameFormatOutput, item, db, newKey, i, ServerItemAttributes.Name); } } } catch (Exception err) { db.Table.Commands.CancelEdit(); ErrorHandler.HandleException(err); } finally { db.Table.Commands.End(); _tab.Filter(); } if ((ServerDbs.ServerItems & db.DbSource) != 0 && SdeAppConfiguration.CmdCopyToClientItems) { var cDb = db.GetDb <TKey>(ServerDbs.CItems); try { cDb.Table.Commands.Begin(); for (int i = 0; i < _tuples.Count; i++) { newKey = (TKey)(object)((int)(object)firstId + i); cDb.Table.Commands.CopyTupleTo(cDb.Table, _tuples[i].GetKey <TKey>(), newKey, (a, b, c, d, e) => _copyToCallback3(c, d, e)); } } catch (Exception err) { cDb.Table.Commands.CancelEdit(); ErrorHandler.HandleException(err); } finally { cDb.Table.Commands.End(); } } }