Skip to content

Commit 62c8b53

Browse files
committed
1.1.3 update
1 parent 1772df3 commit 62c8b53

File tree

9 files changed

+120
-74
lines changed

9 files changed

+120
-74
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
# Change Log
22
All notable changes to this project will be documented in this file.
33

4+
## 1.1.3 - 2017-05-01
5+
### Added
6+
* Greedy search option which will search for images using both `${title}` and `${fuzzyTitle}`
7+
8+
### Changed
9+
* Added a temporary fix, which should prevent `shortcuts.vdf` corruption
10+
411
## 1.1.2 - 2017-05-01
512
### Added
613
* Additional one time backups will be made with extension `.firstbackup`

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "steam-rom-manager",
3-
"version": "1.1.2",
3+
"version": "1.1.3",
44
"license": "GPL-3.0",
55
"description": "An app for managing ROMs in Steam",
66
"author": {
@@ -68,7 +68,7 @@
6868
"ngx-color-picker": "^4.0.0",
6969
"reflect-metadata": "^0.1.10",
7070
"rxjs": "^5.3.0",
71-
"steam-shortcut-editor": "^2.1.0",
71+
"steam-shortcut-editor": "git+https://github.com/FrogTheFrog/steam-shortcut-editor.git",
7272
"to-css": "^1.2.1",
7373
"vdf": "0.0.2",
7474
"zone.js": "^0.8.5"
@@ -102,4 +102,4 @@
102102
"webpack": "^2.4.1",
103103
"webpack-merge": "^4.1.0"
104104
}
105-
}
105+
}

src/renderer/lib/fuzzy-matcher.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export class FuzzyMatcher {
2222
this.list = list;
2323
let currentTime = new Date().getTime();
2424
if (currentTime - this.fuzzyListTimestamps.download > this.forcedUpdate || this.list.length === 0) {
25-
this.loggerService.info('Title list download for fuzzy matching started.');
25+
this.loggerService.info('Title list for fuzzy matching will be downloaded.');
2626
return this.downloadList().then((list) => {
2727
this.list = list;
2828
this.fuzzyListTimestamps.download = currentTime;
@@ -35,7 +35,7 @@ export class FuzzyMatcher {
3535
this.loggerService.info('Checking if title list is up to date.');
3636
return this.getTotalCount().then((countInDatabase) => {
3737
if (this.list.length !== countInDatabase) {
38-
this.loggerService.info('List is outdated. Title list download for fuzzy matching started.');
38+
this.loggerService.info('List is outdated. Title list for fuzzy matching will be downloaded.');
3939
return this.downloadList().then((list) => {
4040
this.list = list;
4141
this.fuzzyListTimestamps.download = currentTime;

src/renderer/lib/vdfList.ts

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -341,38 +341,46 @@ export class VDFList {
341341

342342
promises.push(new Promise((resolve, reject) => {
343343
fs.readFile(this.listData[steamDirectory][userId].shortcuts.filename, 'utf8', (err, data) => {
344-
if (err && err.code !== 'ENOENT')
345-
reject(err);
346-
else {
347-
if (data)
348-
this.listData[steamDirectory][userId].shortcuts.data = shortcutsParser.parse(data);
349-
else
350-
this.listData[steamDirectory][userId].shortcuts.data = {};
344+
try {
345+
if (err && err.code !== 'ENOENT')
346+
reject(err);
347+
else {
348+
if (data)
349+
this.listData[steamDirectory][userId].shortcuts.data = shortcutsParser.parse(data);
350+
else
351+
this.listData[steamDirectory][userId].shortcuts.data = {};
351352

352-
if (this.listData[steamDirectory][userId].shortcuts.data['shortcuts'] === undefined)
353-
this.listData[steamDirectory][userId].shortcuts.data['shortcuts'] = [];
353+
if (this.listData[steamDirectory][userId].shortcuts.data['shortcuts'] === undefined)
354+
this.listData[steamDirectory][userId].shortcuts.data['shortcuts'] = [];
354355

355-
resolve();
356+
resolve();
357+
}
358+
} catch (error) {
359+
reject(error);
356360
}
357361
});
358362
}));
359363
promises.push(new Promise((resolve, reject) => {
360364
fs.readFile(this.listData[steamDirectory][userId].screenshots.filename, 'utf8', (err, data) => {
361-
if (err && err.code !== 'ENOENT')
362-
reject(err);
363-
else {
364-
if (data)
365-
this.listData[steamDirectory][userId].screenshots.data = screenshotsParser.parse(data);
366-
else
367-
this.listData[steamDirectory][userId].screenshots.data = {};
365+
try {
366+
if (err && err.code !== 'ENOENT')
367+
reject(err);
368+
else {
369+
if (data)
370+
this.listData[steamDirectory][userId].screenshots.data = screenshotsParser.parse(data);
371+
else
372+
this.listData[steamDirectory][userId].screenshots.data = {};
368373

369-
if (this.listData[steamDirectory][userId].screenshots.data['Screenshots'] === undefined) {
370-
this.listData[steamDirectory][userId].screenshots.data['Screenshots'] = { 'shortcutnames': {} };
371-
}
372-
else if (this.listData[steamDirectory][userId].screenshots.data['Screenshots']['shortcutnames'] === undefined) {
373-
this.listData[steamDirectory][userId].screenshots.data['Screenshots']['shortcutnames'] = {};
374+
if (this.listData[steamDirectory][userId].screenshots.data['Screenshots'] === undefined) {
375+
this.listData[steamDirectory][userId].screenshots.data['Screenshots'] = { 'shortcutnames': {} };
376+
}
377+
else if (this.listData[steamDirectory][userId].screenshots.data['Screenshots']['shortcutnames'] === undefined) {
378+
this.listData[steamDirectory][userId].screenshots.data['Screenshots']['shortcutnames'] = {};
379+
}
380+
resolve();
374381
}
375-
resolve();
382+
} catch (error) {
383+
reject(error);
376384
}
377385
});
378386
}));

src/renderer/models/preview.model.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export interface ImageContent {
1313

1414
export interface ImagesStatusAndContent {
1515
status: Urltatus,
16+
searchTitles: string[],
1617
content: ImageContent[]
1718
}
1819

@@ -43,5 +44,6 @@ export interface PreviewStateVariables {
4344
listIsUpdating: boolean,
4445
listIsBeingSaved: boolean,
4546
skipDownloading: boolean,
47+
greedySearch: boolean,
4648
numberOfListItems: number
4749
}

src/renderer/services/preview.service.ts

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Http } from '@angular/http';
33
import { BehaviorSubject, Subject } from 'rxjs';
44
import { ParsersService } from './parsers.service';
55
import { LoggerService } from './logger.service';
6-
import { PreviewData, ImageContent, ParsedUserConfiguration, Images, PreviewStateVariables, LoadStatus, PreferedImages, ImagesStatusAndContent } from '../models';
6+
import { PreviewData, ImageContent, ParsedUserConfiguration, Images, PreviewStateVariables, LoadStatus, PreferedImages, ImagesStatusAndContent, ImageProviderData } from '../models';
77
import { VDFList, Reference, ImageProvider } from "../lib";
88
import { union } from "lodash";
99
import * as fs from 'fs-extra';
@@ -26,6 +26,7 @@ export class PreviewService {
2626
listIsBeingSaved: false,
2727
listIsUpdating: false,
2828
skipDownloading: false,
29+
greedySearch: false,
2930
numberOfListItems: 0
3031
};
3132
this.previewDataChanged = new Subject<boolean>();
@@ -51,8 +52,6 @@ export class PreviewService {
5152
else if (this.stateVariables.listIsBeingSaved)
5253
return this.loggerService.info('Files are being saved. Please wait.', { invokeAlert: true, alertTimeout: 3000 });
5354

54-
this.loggerService.info('Please shutdown Steam if it is running when saving, otherwise it might not save correctly.', { invokeAlert: true, alertTimeout: 10000 });
55-
5655
this.stateVariables.listIsUpdating = true;
5756
this.imageProvider.stopUrlDownload();
5857
this.generatePreviewDataCallback();
@@ -183,15 +182,14 @@ export class PreviewService {
183182
}
184183
else {
185184
this.previewData.next(undefined);
185+
this.loggerService.info('Executing parsers.', { invokeAlert: true });
186186
this.parsersService.executeFileParser().then((data) => {
187187
if (data.parsedData.length > 0) {
188-
let titles = this.getAllTitles(data.parsedData);
188+
this.loggerService.info('Please shutdown Steam if it is running when saving, otherwise it might not save correctly.', { invokeAlert: true, alertTimeout: 5000 });
189+
189190
this.steamDirectories = this.getAllSteamDirectories(data.parsedData);
190191
this.images = {};
191192

192-
for (let i = 0; i < titles.length; i++)
193-
this.images[titles[i]] = { status: this.stateVariables.skipDownloading ? 'retrieved' : 'none', content: [] };
194-
195193
let previewData: { numberOfItems: number, data: PreviewData } = this.createPreviewData(data.parsedData);
196194

197195
if (previewData.numberOfItems > 0) {
@@ -239,17 +237,6 @@ export class PreviewService {
239237
}
240238
}
241239

242-
private getAllTitles(data: ParsedUserConfiguration[]) {
243-
let title: string[] = [];
244-
for (let i = 0; i < data.length; i++) {
245-
for (let j = 0; j < data[i].files.length; j++) {
246-
if (title.indexOf(data[i].files[j].fuzzyTitle) === -1)
247-
title.push(data[i].files[j].fuzzyTitle);
248-
}
249-
}
250-
return title;
251-
}
252-
253240
private getAllSteamDirectories(data: ParsedUserConfiguration[]) {
254241
let title: string[] = [];
255242
for (let i = 0; i < data.length; i++) {
@@ -291,6 +278,14 @@ export class PreviewService {
291278
}
292279
}
293280

281+
if (this.images[data[i].files[j].fuzzyTitle] === undefined)
282+
this.images[data[i].files[j].fuzzyTitle] = { status: this.stateVariables.skipDownloading ? 'retrieved' : 'none', searchTitles: [data[i].files[j].fuzzyTitle], content: [] };
283+
284+
if (this.stateVariables.greedySearch) {
285+
if (this.images[data[i].files[j].fuzzyTitle].searchTitles.indexOf(data[i].files[j].extractedTitle) === -1)
286+
this.images[data[i].files[j].fuzzyTitle].searchTitles.push(data[i].files[j].extractedTitle);
287+
}
288+
294289
if (data[i].files[j].localImages.length) {
295290
for (let k = 0; k < data[i].files[j].localImages.length; k++) {
296291
this.addUniqueImage(data[i].files[j].fuzzyTitle, { imageProvider: 'LocalStorage', imageUrl: data[i].files[j].localImages[k], loadStatus: 'downloaded' })
@@ -315,27 +310,45 @@ export class PreviewService {
315310
let promises: Promise<any>[] = [];
316311
for (let fuzzyTitle in this.images) {
317312
this.images[fuzzyTitle].status = 'retrieving';
318-
promises.push(this.imageProvider.retrieveUrls(fuzzyTitle, ...imageProviders).then((data) => {
313+
promises.push(new Promise((resolve, reject) => {
314+
let searchPromises: Promise<ImageProviderData>[] = [];
315+
for (let i = 0; i < this.images[fuzzyTitle].searchTitles.length; i++) {
316+
searchPromises.push(this.imageProvider.retrieveUrls(this.images[fuzzyTitle].searchTitles[i], ...imageProviders)/*.then((data) => {
317+
return Promise.resolve(data);
318+
})*/);
319+
}
320+
Promise.all(searchPromises).then((dataArray) => {
321+
let data: ImageProviderData = { failed: [], images: [] };
319322

320-
if (data.failed.length) {
321-
this.loggerService.error(`Failed to retrieve some image urls for "${fuzzyTitle}"`, { invokeAlert: true, alertTimeout: 3000 });
322-
for (let i = 0; i < data.failed.length; i++) {
323-
this.loggerService.error(data.failed[i]);
323+
for (let j = 0; j < dataArray.length; j++) {
324+
data.failed = data.failed.concat(dataArray[j].failed);
325+
data.images = data.images.concat(dataArray[j].images);
326+
}
327+
328+
if (data.failed.length) {
329+
this.loggerService.error(`Failed to retrieve some image urls for "${fuzzyTitle}"`, { invokeAlert: true, alertTimeout: 3000 });
330+
for (let i = 0; i < data.failed.length; i++) {
331+
this.loggerService.error(data.failed[i]);
332+
}
324333
}
325-
}
326334

327-
this.addUniqueImage(fuzzyTitle, ...data.images);
335+
this.addUniqueImage(fuzzyTitle, ...data.images);
328336

329-
if (this.preferedImages !== undefined) {
330-
for (let title in this.preferedImages) {
331-
let index = this.images[fuzzyTitle].content.findIndex((image) => this.preferedImages[title] === image.imageUrl);
332-
if (index !== -1 && previewData[title] !== undefined)
333-
previewData[title].currentImageIndex = index;
337+
if (this.preferedImages !== undefined) {
338+
for (let title in this.preferedImages) {
339+
let index = this.images[fuzzyTitle].content.findIndex((image) => this.preferedImages[title] === image.imageUrl);
340+
if (index !== -1 && previewData[title] !== undefined)
341+
previewData[title].currentImageIndex = index;
342+
}
334343
}
335-
}
336344

337-
this.images[fuzzyTitle].status = 'retrieved';
338-
this.previewDataChanged.next();
345+
this.images[fuzzyTitle].status = 'retrieved';
346+
this.previewDataChanged.next();
347+
348+
resolve();
349+
}).catch((error) => {
350+
reject(error);
351+
});
339352
}));
340353
}
341354
Promise.all(promises).then(() => {

src/renderer/styles/global.themes.scss

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,30 @@
271271
--color-preview-generate-button-text: #a0a0a0;
272272
--color-preview-generate-button-text-active: #f0fff0;
273273
--color-preview-generate-button-text-hover: #f0fff0;
274+
/*--color-hacks-background: #121212;
275+
--color-hacks-border: #040404;
276+
--color-hacks-menu-background: #0c0c0c;
277+
--color-hacks-add-button-background: rgba(0,0,0,0);
278+
--color-hacks-add-button-background-active: #179443;
279+
--color-hacks-add-button-background-hover: #1bd85e;
280+
--color-hacks-add-button-border: #1db954;
281+
--color-hacks-add-button-border-active: #179443;
282+
--color-hacks-add-button-border-hover: #1bd85e;
283+
--color-hacks-add-button-text: #a0a0a0;
284+
--color-hacks-add-button-text-active: #f0fff0;
285+
--color-hacks-add-button-text-hover: #f0fff0;*/
286+
--color-preview-greedy-button-background: rgba(0,0,0,0);
287+
--color-preview-greedy-button-background-active: #137c38;
288+
--color-preview-greedy-button-background-active-hover: #16ac4b;
289+
--color-preview-greedy-button-background-hover: #2f2f2f;
290+
--color-preview-greedy-button-border: #1db954;
291+
--color-preview-greedy-button-border-active: #137c38;
292+
--color-preview-greedy-button-border-active-hover: #16ac4b;
293+
--color-preview-greedy-button-border-hover: #1bd85e;
294+
--color-preview-greedy-button-text: #a0a0a0;
295+
--color-preview-greedy-button-text-active: #f0fff0;
296+
--color-preview-greedy-button-text-active-hover: #f0fff0;
297+
--color-preview-greedy-button-text-hover: #f0fff0;
274298
--color-preview-image-arrow-background-active: rgba(0,0,0,0);
275299
--color-preview-image-arrow-background-hover: rgba(0,0,0,0);
276300
--color-preview-image-arrow-color-active: #fff;
@@ -434,17 +458,4 @@
434458
--color-titlebar-minimize-text-active: #a0a0a0;
435459
--color-titlebar-minimize-text-hover: #a0a0a0;
436460
--color-titlebar-title: #a0a0a0;
437-
438-
/*--color-hacks-background: #121212;
439-
--color-hacks-border: #040404;
440-
--color-hacks-menu-background: #0c0c0c;
441-
--color-hacks-add-button-background: rgba(0,0,0,0);
442-
--color-hacks-add-button-background-active: #179443;
443-
--color-hacks-add-button-background-hover: #1bd85e;
444-
--color-hacks-add-button-border: #1db954;
445-
--color-hacks-add-button-border-active: #179443;
446-
--color-hacks-add-button-border-hover: #1bd85e;
447-
--color-hacks-add-button-text: #a0a0a0;
448-
--color-hacks-add-button-text-active: #f0fff0;
449-
--color-hacks-add-button-text-hover: #f0fff0;*/
450461
}

src/renderer/styles/preview.component.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ $item-radio: 430/920;
5252
.offline {
5353
@include toggle-button-color(preview-offline-button);
5454
}
55+
56+
.greedy {
57+
@include toggle-button-color(preview-greedy-button);
58+
}
5559
}
5660
>.items {
5761
display: flex;

src/renderer/templates/preview.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
<div>
6363
<div class="generate clickButton" (click)="generatePreviewData()">Generate list</div>
6464
<div class="offline clickButton" [class.active]="!stateVariables.skipDownloading" (click)="stateVariables.skipDownloading = !stateVariables.skipDownloading">{{stateVariables.skipDownloading ? 'Offline' : 'Online'}} mode</div>
65+
<div class="greedy clickButton" [class.active]="stateVariables.greedySearch" (click)="stateVariables.greedySearch = !stateVariables.greedySearch">{{stateVariables.greedySearch ? 'Greedy search' : 'Normal search'}}</div>
6566
<div *ngIf="stateVariables.numberOfListItems > 0" class="save clickButton" (click)="saveData()">Save list</div>
6667
</div>
6768
</div>

0 commit comments

Comments
 (0)