2019-04-30 16:49:02 +02:00
package org.hso.texturesyncclient.controller
2019-06-03 17:33:23 +02:00
import javafx.collections.ObservableList
2019-06-04 18:20:09 +02:00
import javafx.stage.DirectoryChooser
2019-06-03 16:46:57 +02:00
import org.hso.texturesyncclient.controller.net.Connection
2019-06-04 18:20:09 +02:00
import org.hso.texturesyncclient.model.GUIModel
2019-06-04 14:57:54 +02:00
import org.hso.texturesyncclient.model.Sha256
import org.hso.texturesyncclient.model.Texture
import org.hso.texturesyncclient.model.TextureFormat
2019-06-03 16:46:57 +02:00
import org.hso.texturesyncclient.view.importView.ImportViewController
2019-06-04 16:05:47 +02:00
import org.hso.texturesyncclient.view.mainView.MainView
2019-06-03 15:29:01 +02:00
import org.hso.texturesyncclient.view.mainView.MainViewController
2019-06-04 16:05:47 +02:00
import org.hso.texturesyncclient.view.startupView.StartupView
2019-06-03 16:46:57 +02:00
import org.hso.texturesyncclient.view.startupView.StartupViewController
2019-06-03 15:29:01 +02:00
import tornadofx.Controller
2019-06-04 18:20:09 +02:00
import tornadofx.observable
import tornadofx.observableList
2019-06-03 16:46:57 +02:00
import java.net.InetAddress
2019-06-03 20:42:28 +02:00
import java.util.Calendar
2019-06-03 21:40:02 +02:00
import java.io.File
import javax.imageio.ImageIO
2019-06-04 14:57:54 +02:00
import java.util.UUID
import java.nio.file.Files
2019-06-03 17:33:23 +02:00
class RootController : Controller ( ) {
2019-04-30 16:49:02 +02:00
2019-06-03 15:29:01 +02:00
private val mvc : MainViewController by inject ( )
2019-06-03 16:46:57 +02:00
private val svc : StartupViewController by inject ( )
private val ivc : ImportViewController by inject ( )
2019-06-03 15:29:01 +02:00
2019-06-04 16:05:47 +02:00
private lateinit var con : Connection
2019-06-03 17:33:23 +02:00
2019-06-03 15:29:01 +02:00
init {
2019-06-03 16:46:57 +02:00
/ * var data = Texture ( )
var img = con . getTexturePreview ( data . textureHash )
var test = GUIModel ( data , img )
2019-06-03 18:08:48 +02:00
test . exportItem . setOnAction {
}
2019-06-03 16:46:57 +02:00
mvc . addElement ( test )
data = Texture ( )
img = con . getTexturePreview ( data . textureHash )
test = GUIModel ( data , img )
2019-06-03 18:08:48 +02:00
test . exportItem . setOnAction {
}
2019-06-03 16:46:57 +02:00
mvc . addElement ( test ) * /
2019-06-03 15:29:01 +02:00
}
2019-06-03 17:33:23 +02:00
/ * *
* calculate the resolution , get today ' s date -> upload to server
* @param path the absolute path of the file on the client ' s system
* @param name the file name
* @param tags all tags for the file
* /
fun importTexture ( path : String , name : String , tags : ObservableList < String > ) {
2019-06-04 14:57:54 +02:00
val data = Files . readAllBytes ( File ( path ) . toPath ( ) ) // this is the image as byte array
2019-06-03 17:33:23 +02:00
2019-06-04 14:57:54 +02:00
val uuid = UUID . randomUUID ( )
val format = if ( File ( path ) . extension . toLowerCase ( ) == " png " ) TextureFormat . PNG else TextureFormat . JPEG
2019-06-03 21:40:02 +02:00
val bimg = ImageIO . read ( File ( path ) ) //image for obtaining resolution
2019-06-04 14:57:54 +02:00
val resolution = Pair ( bimg . height , bimg . width )
val cal = Calendar . getInstance ( ) //calendar obj with current time
val hash = Sha256 ( data )
//Todo free image
2019-06-03 20:42:28 +02:00
2019-06-04 14:57:54 +02:00
val newTexture = Texture ( uuid , name , tags . toTypedArray ( ) , format , resolution , cal , hash )
2019-06-03 20:42:28 +02:00
2019-06-04 16:05:47 +02:00
try {
con . uploadTexture ( newTexture , data )
println ( " Texture upload successful " )
} catch ( e : Exception ) {
println ( e )
}
}
/ * *
* Initialize connection to server
* @param name server name as IP or domain
* /
fun initConnection ( name : String ) {
try {
con = Connection ( InetAddress . getByName ( name ) )
con . ping ( )
println ( " Connection successful " )
// TODO store server ip for next start
2019-06-04 18:20:09 +02:00
} catch ( e : Exception ) {
println ( e )
}
2019-06-04 16:05:47 +02:00
2019-06-04 18:20:09 +02:00
}
2019-06-04 16:05:47 +02:00
2019-06-04 18:20:09 +02:00
fun search ( tags : ObservableList < String > ) : ArrayList < GUIModel > {
val previewList = arrayListOf < GUIModel > ( )
2019-06-04 16:05:47 +02:00
2019-06-04 18:20:09 +02:00
try {
con . query ( tags . toTypedArray ( ) ) . forEach {
previewList . add ( GUIModel ( it , con . getTexturePreview ( it . textureHash ) ) )
}
2019-06-04 16:05:47 +02:00
} catch ( e : Exception ) {
println ( e )
}
2019-06-04 18:20:09 +02:00
println ( previewList . size )
return previewList
2019-06-03 17:33:23 +02:00
}
2019-06-03 22:24:18 +02:00
2019-06-04 18:20:09 +02:00
fun switchToMainView ( ) {
find ( StartupView :: class ) . replaceWith ( MainView :: class , sizeToScene = true , centerOnScreen = true )
}
fun exportTexture ( data : Texture ) {
val directoryChooser = DirectoryChooser ( )
directoryChooser . title = " Export Verzeichnis wählen "
directoryChooser . initialDirectory = File ( System . getProperty ( " user.home " ) )
val dir = directoryChooser . showDialog ( primaryStage )
if ( dir != null ) {
// TODO copy data (bytesarray) with name and extension to dir
}
}
fun showDetail ( data : Texture ) {
mvc . setPreview3DTexture ( con . getTexturePreview ( data . textureHash ) )
mvc . setMeta ( data . name , data . resolution . toString ( ) , " " )
mvc . setTags ( data . tags . toList ( ) . observable ( ) )
}
2019-04-30 16:49:02 +02:00
}