Skip to content

Conversation

@JavierJF
Copy link
Contributor

@JavierJF JavierJF commented Sep 22, 2017

This pull is blocked by this other pull request.

stegru and others added 30 commits July 31, 2017 14:00
Windows. All the action will be triggered by the gpii-app repository.
# Conflicts:
#	gpii/node_modules/WindowsUtilities/WindowsUtilities.js
#	gpii/node_modules/processHandling/processHandling.js
#	gpii/node_modules/processHandling/test/testProcessHandling.js
#	package.json
};

if (options.commandType === "Open") {
gpii.windows.waitForProcessStart(
Copy link
Member

@stegru stegru Jan 15, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These two blocks are exactly the same, apart from the function. I suggest doing something like:

var waitFor = <start> ? gpii.windows.waitForProcessStart : gpii...Termination;
waitFor(...);

and then you don't need the nested function, too.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the idea, should be good to have a style-guide to decide this kind of situations for us, I use to trait function objects in a more classic way. I will try to minimize code with this kind of refactoring since now.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, it's mainly for reducing duplicate code, rather than minimising it.

Another option is putting the return promise into a variable, and call .then on it once after.

}
};

keepTrying(promise, options.retries);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should be ok to use promise and (a copy of) options.retries in the function.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know, that was just because I though it was more clear to follow it in that way.

Copy link
Member

@stegru stegru Jan 16, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fine, I don't have a preference.

preLevels = [];

promise.resolve();
jqUnit.start();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

put this in a .then at the end of closeAppWithMinForce

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay


var promise = fluid.promise();

if (preLevels.length === 0) {
Copy link
Member

@stegru stegru Jan 15, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couldn't these go into an array? Like:

testData[preLevels.length].levelNum
testData[preLevels.length].preLevels
preLevels.push(preLevels.length+1)

Or.. they all seem to match .length (or +1), so it might be nicer to do that instead of the 3 blocks doing almost the same thing.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okay, I see what you mean. Yes it could avoid the repetition, but it was for a test, so I didn't care. I will change it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 Test cases are code too :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Haha sure! I'm working into all suggestions.


for (var i = 0; i < array.length; ++i) {
ref.set(buf, i * size, array[i], windows.types[type]);
if (type === "TCHAR") {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In line 488 of SpiSettingsHandler, this function isn't called if is TCHAR.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing it, was making checks for the function not taking into account the use case. Bad habit, we have talked about it before.


for (var i = 0; i < buffer.length / size; ++i) {
array[i] = ref.get(buffer, i * size, windows.types[type]);
if (type === "TCHAR") {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Like arrayToBuffer, this function isn't called if type is TCHAR.

See SpiSettingsHandler.js:83

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, same as before.


if (payload.options.pvParam.type === "array") {
pvParam = gpii.windows.arrayToBuffer(pvParam, payload.options.pvParam.valueType);
if (payload.options.pvParam.valueType === "TCHAR") {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

An array of TCHARs is technically correct, but I think it might be better to have a new type of "string", and perform the UCS-2/UTF-8 conversion before and after the actual call to SystemParametersInfo

And look at windows.stringToWideChar and windows.stringFromWideChar for the actual conversion.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, having that type will make things easier for the future for sure, in case we need to reuse it. I will look into it and comment the results to you.

/**
* Checks and returns the value for the fWinIni parameter of the SystemParametersInfo function.
*/
gpii.windows.spi.getFWinIni = function (payload) {
Copy link
Member

@stegru stegru Jan 16, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't called. Was this the duplicate of what GPII-1716 provides?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are right, was added but never removed.

return promise;
};

gpii.windows.spi.checkWallpaperPath = function (path) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/** */

*/
function splitInWords(input) {
var result = input.split(/[ ]+/);
if (result[(result.length - 1)] === "") {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

input.trim().split()


gpii.windows.spi.systemParametersInfo = function (pvParamType, action, uiParam, pvParam) {
gpii.windows.spi.systemParametersInfo = function (pvParamType, action, uiParam, pvParam, fWinIni) {
// Linter Workaround: Linter does not accept default parameters from ES6 spec.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So what?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fWinIni = fWinIni || 0 - but I don't think it's needed, ffi will assume undefined is 0.

SELECTED_MODE = %1%
TABLETMODESTATE_DESKTOPMODE := 0x0
TABLETMODESTATE_TABLETMODE := 0x1

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting hack, but I think C# is more appropriate.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I also think it would be more appropriate, also, we have new tools that could give us much more better approaches than this, but the functionality was working and hasn't been touched since it was implemented. I will take a look to it and see how to create a better version for when this needs to reach master.

@@ -0,0 +1,13 @@
<#
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do these scripts only get ran in our vagrant box? Or on the client?

My understanding of the provisioning directory is it contains scripts to provision our VM. They don't get put into the installer. Why not have a top-level directory called data?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you are right, these scripts are copied during provisioning to the GPII data folder, which is the place we decided to keep for the scripts that will be later call in the system, if we don't have other working technique for doing the task.

# Specify the current script path and name as a parameter
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
# Indicate that the process should be elevated
$newProcess.Verb = "runas";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know you know this: Either the UAC prompt will appear when keying in/out, or you'll have to disable the prompt. It's ok for a demo.

A better approach would be using this https://gist.github.com/stegru/7c8126259af943c4f8412710c2b53367 during install time (ran by the installer, as admin). This reduces the need to be administrator to change some registry values.

The best approach, however, is doing this kind of thing through a service (GPII-2338).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this need to change. As you have probably saw, the rest of the script just changes some registry keys and restart a process, so probably this all needs to be rewrited when this pull enter master.

    - Improved closeAppWithMinForce: Now it tries to manually restart the
      process, and wait for the application to shutdown. If that fails,
      then it changes to call closeApplications with "medium" and "high"
      force leves.
    - Improved process detection mechanims, detection by signals node api
      was error prone.

NOTE: Current impl needs to be refactored into one using processReporter
@gpii-bot
Copy link

Could one of the admins verify that these changes are reasonable to test? If so, please reply with "ok to test".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants