diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..206c44af --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2019-12-28) + +* added item evaluation +* added currency conversion +* added ingame search diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..90fac91f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,91 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, +email, or any other method with the owners of this repository before making a change. + +Please note we have a code of conduct, please follow it in all your interactions with the project. + +## Pull Request Process + +1. Ensure any install or build dependencies are removed before the end of the layer when doing a + build. +2. Add your changes to the CHANGELOG.md. +3. Increase the version numbers in any examples files and the README.md to the new version that this + Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). +4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you + do not have permission to do that, you may request the second reviewer to merge it for you. + +## Code of Conduct + +### Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +### Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +### Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +### Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +### Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at [kyusung4698@gmail.com]. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +### Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..b31f0a27 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) [2019] [Nicklas Ronge] + +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 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index d48d6891..edb6bb70 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,156 @@ -# PoeOverlay +# PoE Overlay -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.3.21. +A Overlay for Path of Exile. Providing advanced features like evaluating items. The ***core aspect*** is to blend in game. Built with Electron and Angular. -## Development server + +- [Status](#status) +- [Features](#features) +- [Roadmap](#roadmap) +- [Enduser](#enduser) + - [Getting Started](#getting-started) + - [Prerequisites](#prerequisites) + - [Installing](#installing) + - [Shortcuts](#shortcuts) +- [Developer](#developer) + - [Getting Started](#getting-started-1) + - [Prerequisites](#prerequisites-1) + - [Installing](#installing-1) + - [Running the tests](#running-the-tests) + - [And coding style tests](#and-coding-style-tests) + - [Building](#building) + - [Built With](#built-with) + - [Contributing](#contributing) + - [Versioning](#versioning) +- [Authors](#authors) +- [License](#license) +- [Acknowledgments](#acknowledgments) + -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. +## Status -## Code scaffolding +This project is currently in a ***pilot phase***. If you encounter any bugs or have feature request please open up a issue on github. -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. +## Features -## Build +* Evaluating of item prices from `poe.trade` in `Chaos Orbs` uses the values of the currency market from `poe.ninja` to convert the currencies. +* Modal dialog to open the search result website *in game*. -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. +![ctrl_d_preview](img/ctrl_d_preview.gif) -## Running unit tests +## Roadmap -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). +| Module | Status | Notes | +| ------------- |-------------: | ------- | +| Core | 50% | + overlay
+ global shortcuts
- auto updating
- user settings like league, custom shortcuts etc. +| Shared | 25% | + item frame
+ currency frame
- item parser in all languages
- item parser reliablity improvement +| Evaluate | 33% | + Basic search implemented
- Advanced search with filter on modifiers
- Chart to display values instead of avg | +| Trade | 0% | - Send messages
- Trade UI
- etc. | +| Command | 0% | - bind in-game commmands to shortcuts (like /dnd, /hideout) | -## Running end-to-end tests -Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). +## Enduser -## Further help +### Getting Started -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). +These instructions will get you a executable to run and enjoy the overlay. + +#### Prerequisites + +* Path of Exile ***must be*** in windowed fullscreen mode +* Path of Exile ***must be*** in language englisch +* Path of Exile ***must be*** using the latest league (Metamorph) + +#### Installing + +1. Head over to [Releases](https://github.com/Kyusung4698/PoE-Overlay/releases) and download the latest zip +2. Extract zip +3. Run `poe-overlay.exe` + +#### Shortcuts + +|Shortcut |Description +|--- |--- +| `ctrl+d` | Displays the item in a frame and evaluates the price. You can open poe.trade on click of the currency value. +| `f5` | Exits overlay + +## Developer + +### Getting Started + +These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. + +#### Prerequisites + +Your editor of choice for a node project - like [vscode](https://code.visualstudio.com/). + +The first thing to install is [nodejs](https://nodejs.org/en/). Download your matching executable and follow the instructions. + +Then you need to install the [windows-build-tools](https://github.com/felixrieseberg/windows-build-tools) from an elevated PowerShell or CMD.exe. This may take a while (10-15min). +``` +npm install --global --production windows-build-tools +``` + +#### Installing + +1. Clone the repository. +2. Open up the folder with your editor. +3. Run ```npm install``` to install all required npm packages. +4. Run ```npm run robotjs:rebuild``` to generate a executable [robotjs](https://github.com/octalmage/robotjs) version. + +That's it. Your Project should now be ready to run: +``` +npm run start +``` + +### Running the tests + +These are used to test for eg. the external APIs (poe.trade, poe.ninja, etc.). To run those: +``` +npm run ng:test +``` + +#### And coding style tests + +These will run certain linters to keep the project in a clean state. + +``` +npm run ng:lint +``` + +### Building + +A electron executable can be generate by calling: +``` +npm run electron:windows +``` + +### Built With + +* [Electron](https://electronjs.org/) - The desktop app framework +* [Angular](https://angular.io/) - A component framework + +### Contributing + +Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. + +### Versioning + +We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/Kyusung4698/PoE-Overlay/tags). + +## Authors + +* **Nicklas Ronge** - *Initial work* - [Kyusung4698](https://github.com/Kyusung4698) + +See also the list of [contributors](https://github.com/Kyusung4698/PoE-Overlay/contributors) who participated in this project. + +## License + +This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details + +## Acknowledgments + +* [Grinding Gear Games](https://www.pathofexile.com/) the game +* [PoE TradeMacro](https://github.com/PoE-TradeMacro/POE-TradeMacro) initial inspiration +* [poe.ninja](https://poe.ninja/) currency values +* [poe.trade](https://poe.trade/) item values +* [libggpk](https://github.com/MuxaJIbI4/libggpk) parsing content.ggpk \ No newline at end of file diff --git a/img/ctrl_d_preview.gif b/img/ctrl_d_preview.gif new file mode 100644 index 00000000..1c6bd9cc Binary files /dev/null and b/img/ctrl_d_preview.gif differ diff --git a/package.json b/package.json index 07533c2d..70e9119f 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,12 @@ "author": { "name": "Kyusung4698" }, - "version": "1.0.0", + "version": "0.1.0", "scripts": { "postinstall": "electron-builder install-app-deps", "ng:serve": "ng serve", + "ng:test": "ng test", + "ng:lint": "ng lint --fix", "start": "npm-run-all -p ng:serve electron:serve", "build": "npm run electron:serve-tsc && ng build", "build:dev": "npm run build", @@ -20,7 +22,6 @@ "electron:serve": "wait-on http-get://localhost:4200/ && npm run electron:serve-tsc && electron . --serve", "electron:local": "npm run build:prod && electron .", "electron:windows": "npm run build:prod && electron-builder build --windows", - "electron:windows:fast": "electron-builder build --windows", "electron:version": "electron -v && electron -a", "robotjs:rebuild": "npm rebuild --runtime=electron --target=7.1.7 --disturl=https://atom.io/download/atom-shell --abi=75" }, diff --git a/src/app/core/service/input/window.service.ts b/src/app/core/service/input/window.service.ts index b7fba237..22c63229 100644 --- a/src/app/core/service/input/window.service.ts +++ b/src/app/core/service/input/window.service.ts @@ -31,7 +31,8 @@ export class WindowService { parent: this.electron.getCurrentWindow(), autoHideMenuBar: true, width: 1000, - height: 800 + height: 800, + backgroundColor: '#0F0F0F' }); win.loadURL(url); } diff --git a/src/app/modules/evaluate/component/evaluate-dialog/evaluate-dialog.component.html b/src/app/modules/evaluate/component/evaluate-dialog/evaluate-dialog.component.html index 07bc5978..783ec7d0 100644 --- a/src/app/modules/evaluate/component/evaluate-dialog/evaluate-dialog.component.html +++ b/src/app/modules/evaluate/component/evaluate-dialog/evaluate-dialog.component.html @@ -5,15 +5,18 @@ - +
- + No matching items found. + + An unexpected error occured. +
diff --git a/src/app/modules/evaluate/component/evaluate-dialog/evaluate-dialog.component.ts b/src/app/modules/evaluate/component/evaluate-dialog/evaluate-dialog.component.ts index 6db9b686..9fb8cb12 100644 --- a/src/app/modules/evaluate/component/evaluate-dialog/evaluate-dialog.component.ts +++ b/src/app/modules/evaluate/component/evaluate-dialog/evaluate-dialog.component.ts @@ -1,6 +1,7 @@ import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core'; import { MAT_DIALOG_DATA } from '@angular/material/dialog'; import { WindowService } from '@app/service'; +import { SnackBarService } from '@shared/module/material/service'; import { CurrencyService } from '@shared/module/poe/service/currency/currency-service'; import { ItemSearchEvaluateService } from '@shared/module/poe/service/item/item-search-evaluate.service'; import { ItemSearchService } from '@shared/module/poe/service/item/item-search.service'; @@ -24,7 +25,8 @@ export class EvaluateDialogComponent implements OnInit { private readonly itemSearchService: ItemSearchService, private readonly itemSearchEvaluateService: ItemSearchEvaluateService, private readonly currencyService: CurrencyService, - private readonly window: WindowService) { + private readonly window: WindowService, + private readonly snackbar: SnackBarService) { } @@ -49,6 +51,11 @@ export class EvaluateDialogComponent implements OnInit { }) ).subscribe(result => { this.result$.next(result); + }, () => { + this.result$.next({ + items: null + }); + this.snackbar.error('An unexpected error occured while searching for the item. Please try again later.'); }); } diff --git a/src/app/modules/evaluate/service/evaluate.service.ts b/src/app/modules/evaluate/service/evaluate.service.ts index dc62653b..6c81cf73 100644 --- a/src/app/modules/evaluate/service/evaluate.service.ts +++ b/src/app/modules/evaluate/service/evaluate.service.ts @@ -7,6 +7,7 @@ import { Item } from '@shared/module/poe/type'; import { Observable, of } from 'rxjs'; import { tap } from 'rxjs/operators'; import { EvaluateDialogComponent } from '../component/evaluate-dialog/evaluate-dialog.component'; +import { SnackBarService } from '@shared/module/material/service'; @Injectable({ providedIn: 'root' @@ -18,7 +19,8 @@ export class EvaluateService { private readonly keyboard: KeyboardService, private readonly clipboard: ClipboardService, private readonly itemParser: ItemParserService, - private readonly window: WindowService) { + private readonly window: WindowService, + private readonly snackbar: SnackBarService) { } public evaluate(): Observable { @@ -31,11 +33,11 @@ export class EvaluateService { const text = this.clipboard.readText(); item = this.itemParser.parse(text); } catch (e) { - return of(null); + return this.snackbar.error('An unexpected error occured while parsing the item.'); } if (!item) { - return of(null); + return this.snackbar.warning('Could not parse the copied text into a item.'); } const width = 300; diff --git a/src/app/shared/module/poe/component/item-frame/item-frame.component.html b/src/app/shared/module/poe/component/item-frame/item-frame.component.html index 4be054b9..3c629713 100644 --- a/src/app/shared/module/poe/component/item-frame/item-frame.component.html +++ b/src/app/shared/module/poe/component/item-frame/item-frame.component.html @@ -16,7 +16,7 @@ {{property.text}}  {{property.value}} -
+
@@ -43,37 +43,30 @@ Int -
+
{{item.secondaryDescription}}
-
+
{{implicit.text}}
-
+
{{explicit.text}}
-
+
- -
diff --git a/src/app/shared/module/poe/service/item/parser/item-parser.service.ts b/src/app/shared/module/poe/service/item/parser/item-parser.service.ts index 8e0ddd19..8bc7edf7 100644 --- a/src/app/shared/module/poe/service/item/parser/item-parser.service.ts +++ b/src/app/shared/module/poe/service/item/parser/item-parser.service.ts @@ -32,7 +32,7 @@ export class ItemParserService { itemSectionSocketsParserService, itemSectionImplicitsParserService, itemSectionPropertiesParserService, - itemSectionDescriptonParserService, + // itemSectionDescriptonParserService, TODO: Disable for now ]; } diff --git a/src/index.html b/src/index.html index 58e5c8f5..54dd92b1 100644 --- a/src/index.html +++ b/src/index.html @@ -2,7 +2,7 @@ - PoeOverlay + PoE Overlay