четверг, 21 ноября 2019 г.

UScommander

Давно планировал сделать управляющий софт для ультразвукового генератора. Была задумка по-быстрячку вернуться к забытому LabView. Но, к сожалению, NI давно перестал поддерживать ту старенькую версию, на которой я учился. А современные версии вьюхи во-первых весят непомерно много (гигабайты), и во-вторых поменяли идеологию работы по протоколу ModBus. Так что пришлось изобретать велосипед.

пятница, 8 ноября 2019 г.

Запустить ютуб или страничку в стороннем браузере

Запустить в ютуб-апликухе

Dim Intent1 As Intent
Dim videoid As String
videoid = "klMN44nn44n"
Intent1.Initialize(Intent1.ACTION_VIEW, "vnd.youtube:"&videoid)

Intent1.PutExtra("VIDEO_ID",videoid)
StartActivity(Intent1)

Обработка ошибки загрузки страницы

Code:
Sub Globals
    Private MainWebView As WebView
    Private WVE As WebViewExtras
    Private DWVC As DefaultWebViewClient
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("layout")
   
    DWVC.Initialize("WebViewClient")
    WVE.Initialize(MainWebView)
    WVE.SetWebViewClient(DWVC)

    WVE.LoadUrl("<your link>")
End Sub 
 Sub WebViewClient_ReceivedError(ErrorCode As Int, Description As String, FailingUrl As String
)    
 WVE.LoadHtml(CustomWebviewError.GetErrorPageHtml(Description))/span>

 End Sub

Key "Back" reaction

Вариант с подтверждающим месседжбоксом
Code:
Sub Activity_KeyPress (KeyCode As Int) As Boolean
    If KeyCode = KeyCodes.KEYCODE_BACK Then
        If Msgbox2("Are you sure to exit?""""Yes""""No"Null) = DialogResponse.POSITIVE Then
            Return False
            ExitApplication '...or whatever other previous killing actions.        Else
            Return True
        End If
    Else
        Return False    ' Handle the other presses in the OS    End If
End Sub
Вариант с двойным нажатием в течении 3х секунд
Code:
Sub Globals
Dim closeCounter As Int                    ' For double click exit routineDim closeTimer As Long
end sub
Sub Activity_KeyPress (KeyCode As Int) As Boolean

    Select KeyCode
        Case KeyCodes.KEYCODE_BACK
                                                          
            closeCounter = closeCounter + 1                    ' Handle the user exit request  
            ' First time so start the counter  
            If closeCounter = 1 Then                  
                closeTimer = DateTime.Now
                ToastMessageShow("Press Back again to exit"False)
            End If
  
            ' Second time but not within 3 seconds, reset to "First time"  
            If closeCounter = 2 AND DateTime.Now > closeTimer + 3000 Then
                closeCounter = 1
                closeTimer = DateTime.Now
                ToastMessageShow("Press Back again to exit"False)
            End If
  
            ' Two tries within 3 seconds, we're done  
            If closeCounter = 2 Then
                closeCounter = 0
                Activity.Finish
            End If

            Return True
        Case Else
            Return False
    End Select
  End Sub

понедельник, 4 ноября 2019 г.

Залогинивание вручную

Принимаем запрос по /login?u=username&p=password
Затем загружаем юзера по логину и сравниваем запрошенный и установленный пароли с помощью хешера. Если все совпало, то логиним юзера и возвращаем все его параметры.

   public function login() {
        $data = $this->request->query;

        $this->loadModel('User');
        $user = $this->User->find('first', array('conditions' => array('login' => $data['u'])));
       
        $passwordHasher = new BlowfishPasswordHasher();
        $confirm = $passwordHasher->check($data['p'], $user['User']['password']);
        if ($confirm) { // пароль поравильный
            $this->Auth->login($user['User']);
            $data = $this->Session->read('Auth');
        } else {
            $data = array('Error' => 'Bad password');
        }

        $this->set(compact('data'));
       
    }