Skip to content

Commit

Permalink
Added import and export buttons for shopping list.
Browse files Browse the repository at this point in the history
Currently can't set the file name yet.
  • Loading branch information
lythix committed Jul 14, 2019
1 parent 4ecf2b4 commit ccc564a
Show file tree
Hide file tree
Showing 11 changed files with 299 additions and 19 deletions.
1 change: 1 addition & 0 deletions EDEngineer.sln.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpRenamePlacementToArrangementMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
Expand Down
3 changes: 3 additions & 0 deletions EDEngineer/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@
<setting name="ClearAggregation" serializeAs="String">
<value>False</value>
</setting>
<setting name="ShoppingListDirectory" serializeAs="String">
<value />
</setting>
</EDEngineer.Properties.Settings>
</userSettings>
</configuration>
12 changes: 12 additions & 0 deletions EDEngineer/Properties/Settings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions EDEngineer/Properties/Settings.settings
Original file line number Diff line number Diff line change
Expand Up @@ -104,5 +104,8 @@
<Setting Name="ClearAggregation" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ShoppingListDirectory" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>
2 changes: 1 addition & 1 deletion EDEngineer/Properties/app.manifest
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" />
</applicationRequestMinimum>
</security>
</trustInfo>
Expand Down
32 changes: 18 additions & 14 deletions EDEngineer/Utils/JournalEntryConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -319,23 +319,27 @@ private JournalOperation ExtractCargoDump(JObject data)
DumpOperations = new List<MaterialOperation>()
};

foreach (var jToken in data["Inventory"])
{
dynamic cc = jToken;
if (!converter.TryGet(Kind.Commodity, (string) cc.Name, out var commodityName))
{
continue;
}
int? count = cc.Value ?? cc.Count;
var inventoryData = data["Inventory"];

var operation = new MaterialOperation
if (inventoryData != null)
foreach (var jToken in inventoryData)
{
MaterialName = commodityName,
Size = count ?? 1
};
dynamic cc = jToken;
if (!converter.TryGet(Kind.Commodity, (string) cc.Name, out var commodityName))
{
continue;
}

dump.DumpOperations.Add(operation);
}
int? count = cc.Value ?? cc.Count;

var operation = new MaterialOperation
{
MaterialName = commodityName,
Size = count ?? 1
};

dump.DumpOperations.Add(operation);
}

return dump;
}
Expand Down
167 changes: 167 additions & 0 deletions EDEngineer/Utils/System/Helpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,173 @@ public static string RetrieveLogDirectory(bool forcePickFolder, string currentLo
Properties.Settings.Default.LogDirectory = logDirectory;
Properties.Settings.Default.Save();
return logDirectory;
}

public static string RetrieveShoppingListDirectory(bool forcePickFolder, string currentShoppingListDirectory)
{
var translator = Languages.Instance;
string shoppingListDirectory = null;

if (!forcePickFolder)
{
shoppingListDirectory = Properties.Settings.Default.ShoppingListDirectory;
if (string.IsNullOrEmpty(shoppingListDirectory))
{
var userProfile = Environment.GetEnvironmentVariable("USERPROFILE");
if (userProfile != null)
{
shoppingListDirectory = Path.Combine(userProfile, @"saved games\Frontier Developments\Elite Dangerous Shopping Lists");
}
}
}

if (forcePickFolder || shoppingListDirectory == null || !Directory.Exists(shoppingListDirectory))
{
var dialog = new CommonOpenFileDialog
{
Title = forcePickFolder ?
translator.Translate("Select a new shopping list directory") :
translator.Translate("Couldn't find the shopping list folder, you'll have to specify it"),
AllowNonFileSystemItems = false,
Multiselect = false,
IsFolderPicker = true,
EnsurePathExists = true
};

if (forcePickFolder && !string.IsNullOrEmpty(currentShoppingListDirectory))
{
dialog.InitialDirectory = currentShoppingListDirectory;
}

var pickFolderResult = dialog.ShowDialog();

if (pickFolderResult == CommonFileDialogResult.Ok)
{
if (!Directory.GetFiles(dialog.FileName).Any(f => f != null &&
Path.GetFileName(f).StartsWith("Journal.") &&
Path.GetFileName(f).EndsWith(".log")))
{
var result =
MessageBox.Show(
translator.Translate("Selected directory doesn't seem to contain any log file ; are you sure?"),
translator.Translate("Warning"), MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Warning);

if (result == DialogResult.Retry)
{
RetrieveLogDirectory(forcePickFolder, null);
}

if (result == DialogResult.Abort)
{
if (forcePickFolder)
{
return currentShoppingListDirectory;
}

Application.Current.Shutdown();
}
}

shoppingListDirectory = dialog.FileName;
}
else if (forcePickFolder)
{
return currentShoppingListDirectory;
}
else
{
MessageBox.Show(translator.Translate("You did not select a shopping list directory, EDEngineer won't be able to export shopping lists."),
translator.Translate("Warning"), MessageBoxButtons.OK, MessageBoxIcon.Warning);
shoppingListDirectory = @"\" + translator.Translate("No folder in use ; click to change");
}
}

Properties.Settings.Default.ShoppingListDirectory = shoppingListDirectory;
Properties.Settings.Default.Save();
return shoppingListDirectory;
}

public static string RetrieveShoppingList(string currentShoppingListDirectory)
{
var translator = Languages.Instance;
// string shoppingListDirectory = null;

//if (!forcePickFolder)
//{
// shoppingListDirectory = Properties.Settings.Default.ShoppingListDirectory;
// if (string.IsNullOrEmpty(shoppingListDirectory))
// {
// var userProfile = Environment.GetEnvironmentVariable("USERPROFILE");
// if (userProfile != null)
// {
// shoppingListDirectory = Path.Combine(userProfile, @"saved games\Frontier Developments\Elite Dangerous Shopping Lists");
// }
// }
//}

if (Directory.Exists(currentShoppingListDirectory))
{
var dialog = new CommonOpenFileDialog
{
Title = translator.Translate("Select a shopping list to import"),
AllowNonFileSystemItems = false,
Multiselect = false,
IsFolderPicker = false,
EnsurePathExists = true
};

var pickFileResult = dialog.ShowDialog();

if (pickFileResult == CommonFileDialogResult.Ok)
{
if (File.Exists(dialog.FileName))
{
var contents = File.ReadAllText(dialog.FileName);
return contents;
}

//if (!Directory.GetFiles(dialog.FileName).Any(f => f != null &&
// Path.GetFileName(f).StartsWith("Journal.") &&
// Path.GetFileName(f).EndsWith(".log")))
//{
// var result =
// MessageBox.Show(
// translator.Translate("Selected directory doesn't seem to contain any log file ; are you sure?"),
// translator.Translate("Warning"), MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Warning);

// if (result == DialogResult.Retry)
// {
// RetrieveLogDirectory(forcePickFolder, null);
// }

// if (result == DialogResult.Abort)
// {
// if (forcePickFolder)
// {
// return currentShoppingListDirectory;
// }

// Application.Current.Shutdown();
// }
//}

// shoppingListDirectory = dialog.FileName;
}
//else if (forcePickFolder)
//{
// return currentShoppingListDirectory;
//}
//else
//{
// MessageBox.Show(translator.Translate("You did not select a shopping list directory, EDEngineer won't be able to export shopping lists."),
// translator.Translate("Warning"), MessageBoxButtons.OK, MessageBoxIcon.Warning);
// shoppingListDirectory = @"\" + translator.Translate("No folder in use ; click to change");
//}
}

// Properties.Settings.Default.ShoppingListDirectory = shoppingListDirectory;
// Properties.Settings.Default.Save();
return string.Empty;
}
}
}
58 changes: 55 additions & 3 deletions EDEngineer/Views/CommanderViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Windows;
Expand Down Expand Up @@ -49,7 +50,7 @@ public Instant LastUpdate
OnPropertyChanged();
}
}

public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
Expand All @@ -62,7 +63,7 @@ public void LoadLogs(IEnumerable<string> events)
commanderNotifications?.UnsubscribeNotifications();
State.Cargo.InitLoad();
// Clear state:

State.Cargo.Ingredients.ToList().ForEach(k => State.Cargo.IncrementCargo(k.Value.Data.Name, -1 * k.Value.Count));
LastUpdate = Instant.MinValue;

Expand Down Expand Up @@ -406,6 +407,57 @@ public void ShoppingListChange(Blueprint blueprint, int i)
}
}

public void ImportShoppingList()
{
var saveDirectory = Helpers.RetrieveShoppingListDirectory(false, Settings.Default.ShoppingListDirectory);

var fileContents = Helpers.RetrieveShoppingList(saveDirectory);

// var import = "[{\"Type\":\"\",\"ShortenedType\":\"\",\"BlueprintName\":\"Shopping List\",\"Engineers\":[],\"Ingredients\":[{\"Entry\":{\"Data\":{\"Name\":\"Shielding Sensors\",\"Rarity\":\"Standard\",\"FormattedName\":\"shieldingsensors\",\"Kind\":\"Material\",\"Subkind\":\"Manufactured\",\"KindStringForGui\":\"Manufactured\",\"Group\":\"Shielding\",\"OriginDetails\":[\"Ship salvage (combat ships)\",\"Signal source (high security)\",\"Mission reward\"],\"MaximumCapacity\":200,\"CanBeTraded\":true},\"Count\":12},\"Size\":2},{\"Entry\":{\"Data\":{\"Name\":\"Carbon\",\"Rarity\":\"VeryCommon\",\"FormattedName\":\"carbon\",\"Kind\":\"Material\",\"Subkind\":\"Raw\",\"KindStringForGui\":\"Raw\",\"Group\":\"Category1\",\"OriginDetails\":[\"Surface prospecting\",\"Mining\",\"Mining (ice rings)\"],\"MaximumCapacity\":300,\"CanBeTraded\":true},\"Count\":158},\"Size\":2},{\"Entry\":{\"Data\":{\"Name\":\"Zinc\",\"Rarity\":\"Common\",\"FormattedName\":\"zinc\",\"Kind\":\"Material\",\"Subkind\":\"Raw\",\"KindStringForGui\":\"Raw\",\"Group\":\"Category4\",\"OriginDetails\":[\"Surface prospecting\"],\"MaximumCapacity\":250,\"CanBeTraded\":true},\"Count\":34},\"Size\":2}],\"Grade\":null,\"Effects\":[],\"CoriolisGuid\":null,\"SearchableContent\":\"||shopping list|exp |\",\"ShortString\":\"EXP SL\",\"TranslatedString\":\" Shopping List\",\"GradeString\":\"}]";
//var shoppingList = JsonConvert.DeserializeObject<List<Blueprint>>(fileContents);
var shoppingList = JsonConvert.DeserializeObject<StringCollection>(fileContents);
// Settings.Default.ShoppingList = shoppingList;

// this.shoppingList = new ShoppingListViewModel(State.Cargo, shoppingList, this.shoppingList.Languages);
ClearShoppingList();

var blueprints = State.Blueprints;
foreach (var item in shoppingList)
{
var itemName = item.Split(':');
var bluePrint = blueprints.FirstOrDefault(b => b.ToString() == itemName[1]);
if (bluePrint != null)
{
ShoppingListChange(bluePrint, 1);
}
}

Settings.Default.Save();

RefreshShoppingList();
}

public void ExportShoppingList()
{
//var serialisedShoppingList = JsonConvert.SerializeObject(ShoppingList);
var serialisedShoppingList = JsonConvert.SerializeObject(Settings.Default.ShoppingList);
Console.WriteLine(serialisedShoppingList);

var saveDirectory = Helpers.RetrieveShoppingListDirectory(false, Settings.Default.ShoppingListDirectory);

var path = Path.Combine(saveDirectory, $"shoppingList.json");
try
{
File.WriteAllText(path, serialisedShoppingList);
ClearShoppingList();
Settings.Default.Save();
}
catch
{

}
}

public void ClearShoppingList()
{
foreach (var tuple in ShoppingList.Composition.ToList())
Expand Down Expand Up @@ -464,7 +516,7 @@ var ingredient in

public void HighlightShoppingListBlueprint(List<Tuple<Blueprint, int>> blueprints, BlueprintIngredient ingredient, bool highlighted)
{
foreach(var blueprint in blueprints.Select(i => i.Item1).Where(b => b.Ingredients.Any(i => i.Entry.Data.Name == ingredient.Entry.Data.Name)))
foreach (var blueprint in blueprints.Select(i => i.Item1).Where(b => b.Ingredients.Any(i => i.Entry.Data.Name == ingredient.Entry.Data.Name)))
{
blueprint.ShoppingListHighlighted = highlighted;
}
Expand Down
12 changes: 12 additions & 0 deletions EDEngineer/Views/MainWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,16 @@ private void ClearShoppingListButtonClicked(object sender, RoutedEventArgs e)
viewModel.CurrentCommander.Value.ClearShoppingList();
}

private void ImportShoppingList(object sender, RoutedEventArgs e)
{
viewModel.CurrentCommander.Value.ImportShoppingList();
}

private void ExportShoppingList(object sender, RoutedEventArgs e)
{
viewModel.CurrentCommander.Value.ExportShoppingList();
}

private void CheckAllButtonClicked(object sender, RoutedEventArgs e)
{
viewModel.ChangeAllFilters(true);
Expand Down Expand Up @@ -714,5 +724,7 @@ private void BlueprintsSorting(object sender, DataGridSortingEventArgs e)
private int sortedColumns = 0;
private DataGridColumn lastColumnSorted = null;
private readonly Dictionary<DataGridColumn, string> headers = new Dictionary<DataGridColumn, string>();


}
}
Loading

0 comments on commit ccc564a

Please sign in to comment.