Skip to content

Commit

Permalink
Added full parsing of parameters in CLS, TLS, FLS and THUMBNAIL RETRI…
Browse files Browse the repository at this point in the history
…EVE, thanks to @balte’s comments in issue #47

Closes #47
  • Loading branch information
jesperstarkar committed Jan 16, 2017
1 parent ba60a9c commit 8fbc7cf
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 25 deletions.
8 changes: 4 additions & 4 deletions js/lib/AMCP.js
Original file line number Diff line number Diff line change
Expand Up @@ -1196,7 +1196,7 @@ var AMCP;
__extends(ThumbnailListCommand, _super);
function ThumbnailListCommand() {
var _this = _super.apply(this, arguments) || this;
_this.responseProtocol = new ResponseSignature(200, ResponseValidators_1.Response.ListValidator, ResponseParsers_1.Response.PathParser);
_this.responseProtocol = new ResponseSignature(200, ResponseValidators_1.Response.ListValidator, ResponseParsers_1.Response.ContentParser);
return _this;
}
return ThumbnailListCommand;
Expand Down Expand Up @@ -1277,7 +1277,7 @@ var AMCP;
__extends(ClsCommand, _super);
function ClsCommand() {
var _this = _super.apply(this, arguments) || this;
_this.responseProtocol = new ResponseSignature(200, ResponseValidators_1.Response.ListValidator, ResponseParsers_1.Response.PathParser);
_this.responseProtocol = new ResponseSignature(200, ResponseValidators_1.Response.ListValidator, ResponseParsers_1.Response.ContentParser);
return _this;
}
return ClsCommand;
Expand All @@ -1291,7 +1291,7 @@ var AMCP;
__extends(FlsCommand, _super);
function FlsCommand() {
var _this = _super.apply(this, arguments) || this;
_this.responseProtocol = new ResponseSignature(200, ResponseValidators_1.Response.ListValidator, ResponseParsers_1.Response.PathParser);
_this.responseProtocol = new ResponseSignature(200, ResponseValidators_1.Response.ListValidator, ResponseParsers_1.Response.ContentParser);
return _this;
}
return FlsCommand;
Expand All @@ -1305,7 +1305,7 @@ var AMCP;
__extends(TlsCommand, _super);
function TlsCommand() {
var _this = _super.apply(this, arguments) || this;
_this.responseProtocol = new ResponseSignature(200, ResponseValidators_1.Response.ListValidator, ResponseParsers_1.Response.PathParser);
_this.responseProtocol = new ResponseSignature(200, ResponseValidators_1.Response.ListValidator, ResponseParsers_1.Response.ContentParser);
return _this;
}
return TlsCommand;
Expand Down
3 changes: 2 additions & 1 deletion js/lib/ResponseParsers.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ export declare namespace Response {
/**
*
*/
class PathParser extends AbstractParser implements IResponseParser {
class ContentParser extends AbstractParser implements IResponseParser {
static parseTimeString(timeDateString: string): number;
/**
*
*/
Expand Down
63 changes: 53 additions & 10 deletions js/lib/ResponseParsers.js
Original file line number Diff line number Diff line change
Expand Up @@ -324,15 +324,26 @@ var Response;
/**
*
*/
var PathParser = (function (_super) {
__extends(PathParser, _super);
function PathParser() {
var ContentParser = (function (_super) {
__extends(ContentParser, _super);
function ContentParser() {
return _super.apply(this, arguments) || this;
}
ContentParser.parseTimeString = function (timeDateString) {
timeDateString = timeDateString.replace(/[tT]/g, "");
var year = parseInt(timeDateString.slice(0, 4));
var month = parseInt(timeDateString.slice(4, 6));
var date = parseInt(timeDateString.slice(6, 8));
var hours = parseInt(timeDateString.slice(8, 10));
var minutes = parseInt(timeDateString.slice(10, 12));
var seconds = parseInt(timeDateString.slice(12, 14));
console.log(new Date(year, month, date, hours, minutes, seconds));
return new Date(year, month, date, hours, minutes, seconds).getTime();
};
/**
*
*/
PathParser.prototype.parse = function (data) {
ContentParser.prototype.parse = function (data) {
return data.map(function (i) {
var components = i.match(/\"([\s\S]*)\" +([\s\S]*)/);
if (components === null) {
Expand All @@ -342,19 +353,51 @@ var Response;
var typeData = components[2].split(/\s+/);
// is font
if (typeData.length === 1) {
return { name: name, type: "font" };
return { name: name,
type: "font",
fileName: typeData[0].replace(/\"/g, "")
};
}
// is template
if (typeData.length === 3) {
return { name: name, type: "template" };
return { name: name,
type: "template",
size: parseInt(typeData[0]),
changed: ContentParser.parseTimeString(typeData[1]),
format: typeData[2]
};
}
// is thumbnail
if (typeData.length === 2) {
return { name: name,
type: "thumbnail",
changed: ContentParser.parseTimeString(typeData[0]),
size: parseInt(typeData[1]),
};
}
// is media
return { name: name, type: typeData[0].toLowerCase() === "movie" ? "video" : typeData[0].toLowerCase() === "still" ? "image" : typeData[0].toLowerCase() };
var frames = parseInt(typeData[3]);
var frameRate = 0;
var duration = 0;
var frameTimeSegments = typeData[4].split("/");
if (frameTimeSegments[0] !== "0") {
frameRate = +(parseInt(frameTimeSegments[1]) / parseInt(frameTimeSegments[0])).toFixed(2);
duration = frames / frameRate;
}
return { name: name,
type: typeData[0].toLowerCase() === "movie" ? "video" : typeData[0].toLowerCase() === "still" ? "image" : typeData[0].toLowerCase(),
size: parseInt(typeData[1]),
changed: ContentParser.parseTimeString(typeData[2]),
frames: frames,
frameTime: typeData[4],
frameRate: frameRate,
duration: duration
};
});
};
return PathParser;
return ContentParser;
}(AbstractParser));
Response.PathParser = PathParser;
Response.ContentParser = ContentParser;
/**
*
*/
Expand All @@ -374,7 +417,7 @@ var Response;
}
// let name: string = components[1].replace(/\\/g, "/");
var typeData = components[2].split(/\s+/);
return { size: parseInt(typeData[1]), created: typeData[2], duration: parseInt(typeData[3]), fps: typeData[4] };
return { size: parseInt(typeData[1]), changed: typeData[2], duration: parseInt(typeData[3]), fps: typeData[4] };
}
return {};
};
Expand Down
8 changes: 4 additions & 4 deletions src/lib/AMCP.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1004,7 +1004,7 @@ export namespace AMCP {
*/
export class ThumbnailListCommand extends AbstractCommand {
static commandString = "THUMBNAIL LIST";
responseProtocol = new ResponseSignature(200, ResponseValidator.ListValidator, ResponseParser.PathParser);
responseProtocol = new ResponseSignature(200, ResponseValidator.ListValidator, ResponseParser.ContentParser);
}

/**
Expand Down Expand Up @@ -1056,23 +1056,23 @@ export namespace AMCP {
*/
export class ClsCommand extends AbstractCommand {
static commandString = "CLS";
responseProtocol = new ResponseSignature(200, ResponseValidator.ListValidator, ResponseParser.PathParser);
responseProtocol = new ResponseSignature(200, ResponseValidator.ListValidator, ResponseParser.ContentParser);
}

/**
*
*/
export class FlsCommand extends AbstractCommand {
static commandString = "FLS";
responseProtocol = new ResponseSignature(200, ResponseValidator.ListValidator, ResponseParser.PathParser);
responseProtocol = new ResponseSignature(200, ResponseValidator.ListValidator, ResponseParser.ContentParser);
}

/**
*
*/
export class TlsCommand extends AbstractCommand {
static commandString = "TLS";
responseProtocol = new ResponseSignature(200, ResponseValidator.ListValidator, ResponseParser.PathParser);
responseProtocol = new ResponseSignature(200, ResponseValidator.ListValidator, ResponseParser.ContentParser);
}

/**
Expand Down
60 changes: 54 additions & 6 deletions src/lib/ResponseParsers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,21 @@ export namespace Response {
/**
*
*/
export class PathParser extends AbstractParser implements IResponseParser {
export class ContentParser extends AbstractParser implements IResponseParser {

static parseTimeString(timeDateString: string): number {

timeDateString = timeDateString.replace(/[tT]/g, "");

let year: number = parseInt(timeDateString.slice(0, 4));
let month: number = parseInt(timeDateString.slice(4, 6));
let date: number = parseInt(timeDateString.slice(6, 8));
let hours: number = parseInt(timeDateString.slice(8, 10));
let minutes: number = parseInt(timeDateString.slice(10, 12));
let seconds: number = parseInt(timeDateString.slice(12, 14));
console.log(new Date(year, month, date, hours, minutes, seconds));
return new Date(year, month, date, hours, minutes, seconds).getTime();
}

/**
*
Expand All @@ -276,19 +290,53 @@ export namespace Response {
let name: string = components[1].replace(/\\/g, "/");
let typeData: Array<string> = components[2].split(/\s+/);


// is font
if (typeData.length === 1) {
return {name: name, type: "font"};
return {name: name,
type: "font",
fileName: typeData[0].replace(/\"/g, "")
};
 }

// is template
if (typeData.length === 3) {
return {name: name, type: "template"};
return {name: name,
type: "template",
size: parseInt(typeData[0]),
changed: ContentParser.parseTimeString(typeData[1]),
format: typeData[2]
};
}

// is thumbnail
if (typeData.length === 2) {
return {name: name,
type: "thumbnail",
changed: ContentParser.parseTimeString(typeData[0]),
size: parseInt(typeData[1]),
};
}

// is media
return {name: name, type: typeData[0].toLowerCase() === "movie" ? "video" : typeData[0].toLowerCase() === "still" ? "image" : typeData[0].toLowerCase()};

let frames: number = parseInt(typeData[3]);
let frameRate: number = 0;
let duration: number = 0;
let frameTimeSegments: Array<string> = typeData[4].split("/");
if (frameTimeSegments[0] !== "0") {
frameRate = +(parseInt(frameTimeSegments[1]) / parseInt(frameTimeSegments[0])).toFixed(2);
duration = frames / frameRate;
}

return {name: name,
type: typeData[0].toLowerCase() === "movie" ? "video" : typeData[0].toLowerCase() === "still" ? "image" : typeData[0].toLowerCase(),
size: parseInt(typeData[1]),
changed: ContentParser.parseTimeString(typeData[2]),
frames: frames,
frameTime: typeData[4],
frameRate: frameRate,
duration: duration
};
});
}
}
Expand All @@ -311,7 +359,7 @@ export namespace Response {

// let name: string = components[1].replace(/\\/g, "/");
let typeData: Array<string> = components[2].split(/\s+/);
return {size: parseInt(typeData[1]), created: typeData[2], duration: parseInt(typeData[3]), fps: typeData[4]};
return {size: parseInt(typeData[1]), changed: typeData[2], duration: parseInt(typeData[3]), fps: typeData[4]};
}
return {};
}
Expand Down

0 comments on commit 8fbc7cf

Please sign in to comment.