Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
TeamPrinterV2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Aleksandr
TeamPrinterV2
Commits
46cef878
Commit
46cef878
authored
Jul 08, 2024
by
Aleksandr
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed sending render files
parent
5d8ae7c7
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
85 additions
and
29 deletions
+85
-29
app/src/main/java/com/isidroid/c23/domain/use_case/HomeUseCase.kt
+15
-5
app/src/main/java/com/isidroid/c23/domain/use_case/PrintJobsUseCase.kt
+2
-2
app/src/main/java/com/isidroid/c23/domain/use_case/RenderUseCase.kt
+2
-5
feature/job/src/main/java/com/isidroid/job/constant/JobStatus.kt
+1
-1
feature/job/src/main/java/com/isidroid/job/constant/SendJobStatus.kt
+11
-0
feature/job_sender/src/main/java/com/isidroid/job_sender/SendJobWorker.kt
+0
-2
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/local/SendJobDao.kt
+2
-2
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/local/SendJobLocalSource.kt
+1
-1
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/SendJobNetworkSource.kt
+16
-4
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/api/ApiCommand.kt
+6
-0
feature/job_sender/src/main/java/com/isidroid/job_sender/di/JobSenderModule.kt
+2
-2
feature/job_sender/src/main/java/com/isidroid/job_sender/domain/use_case/SendPrintJobsUseCase.kt
+11
-0
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepository.kt
+2
-2
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepositoryImpl.kt
+14
-3
No files found.
app/src/main/java/com/isidroid/c23/domain/use_case/HomeUseCase.kt
View file @
46cef878
package
com.isidroid.c23.domain.use_case
import
android.content.Context
import
com.isidroid.c23.data.source.local.AppDataBase
import
com.isidroid.job_sender.SendJobWorker
import
com.isidroid.c23.ext.isDebug
import
com.isidroid.c23.ui.screen.home.HomeContract
import
com.isidroid.core.DiMock
import
com.isidroid.core.FlowResult
import
com.isidroid.session.repository.SessionRepository
import
com.isidroid.spot.repository.ActiveSpotRepository
...
...
@@ -17,11 +19,17 @@ import javax.inject.Singleton
class
HomeUseCase
@Inject
constructor
(
@ApplicationContext
private
val
context
:
Context
,
private
val
sessionRepository
:
SessionRepository
,
private
val
activeSpotRepository
:
ActiveSpotRepository
private
val
activeSpotRepository
:
ActiveSpotRepository
,
private
val
appDataBase
:
AppDataBase
)
{
fun
createSession
()
=
flow
{
emit
(
FlowResult
.
Loading
)
// if (isDebug()) {
// appDataBase.clearAllTables()
// }
SendJobWorker
.
create
(
context
)
val
maxDelay
=
if
(
isDebug
())
0
else
3
_000
...
...
@@ -35,13 +43,15 @@ class HomeUseCase @Inject constructor(
val
navigation
=
when
{
!
hasSession
->
HomeContract
.
Effect
.
Navigation
.
ToLogin
!
hasDefaultSpot
->
HomeContract
.
Effect
.
Navigation
.
ToSelectSpot
(
// lat = 37.2451678
,
// lng = -121.9752617
lat
=
38.8870757
,
lng
=
-
94.6933749
lat
=
37.2451678
,
lng
=
-
121.9752617
,
// lat = 37.2451678,
// lng = -121.9752617,
)
else
->
HomeContract
.
Effect
.
Navigation
.
ToSelectContent
}
...
...
app/src/main/java/com/isidroid/c23/domain/use_case/PrintJobsUseCase.kt
View file @
46cef878
...
...
@@ -3,7 +3,7 @@ package com.isidroid.c23.domain.use_case
import
androidx.compose.ui.graphics.Color
import
com.isidroid.c23.domain.dto.PrintJobListItem
import
com.isidroid.core.FlowResult
import
com.isidroid.job.constant.
s
tatusName
import
com.isidroid.job.constant.
jobS
tatusName
import
com.isidroid.job.repository.JobRepository
import
com.isidroid.rendering.constant.printSizeName
import
com.isidroid.spot.repository.SpotRepository
...
...
@@ -36,7 +36,7 @@ class PrintJobsUseCase @Inject constructor(
comment
=
job
.
comment
,
copies
=
job
.
copies
,
cover
=
job
.
sourceFiles
?.
firstOrNull
()
?.
takeIf
{
File
(
it
).
exists
()
},
statusName
=
job
.
status
.
s
tatusName
.
lowercase
(),
statusName
=
job
.
status
.
jobS
tatusName
.
lowercase
(),
accessCode
=
job
.
accessCode
.
orEmpty
(),
createdAt
=
job
.
createdAt
)
...
...
app/src/main/java/com/isidroid/c23/domain/use_case/RenderUseCase.kt
View file @
46cef878
...
...
@@ -35,11 +35,8 @@ class RenderUseCase @Inject constructor(
fun
loadSpot
()
=
flow
{
val
richSpot
=
spotRepository
.
getDefaultSpot
()
if
(
richSpot
?.
printProfiles
.
isNullOrEmpty
())
throw
SpotHasNoPrintProfilesException
(
context
.
getString
(
R
.
string
.
error_spot_has_no_printing_profiles
)
)
if
(
richSpot
?.
printProfiles
.
isNullOrEmpty
())
throw
SpotHasNoPrintProfilesException
(
context
.
getString
(
R
.
string
.
error_spot_has_no_printing_profiles
))
emit
(
richSpot
!!
)
}
...
...
feature/job/src/main/java/com/isidroid/job/constant/JobStatus.kt
View file @
46cef878
...
...
@@ -23,7 +23,7 @@ annotation class JobStatus {
}
@JobStatus
val
Int
.
s
tatusName
val
Int
.
jobS
tatusName
get
()
=
when
(
this
)
{
JobStatus
.
CREATED
->
"CREATED"
JobStatus
.
CANCELED
->
"CANCELED"
...
...
feature/job/src/main/java/com/isidroid/job/constant/SendJobStatus.kt
View file @
46cef878
...
...
@@ -5,5 +5,15 @@ annotation class SendJobStatus {
companion
object
{
const
val
RENDERED
=
0
const
val
SENDING
=
1
const
val
COMPLETE
=
2
}
}
@JobStatus
val
Int
.
sendJobStatusName
get
()
=
when
(
this
)
{
SendJobStatus
.
RENDERED
->
"RENDERED"
SendJobStatus
.
SENDING
->
"SENDING"
SendJobStatus
.
COMPLETE
->
"COMPLETE"
else
->
"Unknown"
}
\ No newline at end of file
feature/job_sender/src/main/java/com/isidroid/job_sender/SendJobWorker.kt
View file @
46cef878
...
...
@@ -49,8 +49,6 @@ class SendJobWorker @AssistedInject constructor(
var
result
:
Result
?
var
notification
:
Notification
?
Timber
.
i
(
"==> 1"
)
try
{
useCase
.
start
()
notification
=
createNotification
(
"Upload successfully completed"
)
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/local/SendJobDao.kt
View file @
46cef878
...
...
@@ -11,8 +11,8 @@ interface SendJobDao {
@Query
(
"SELECT * FROM PrintJobSender WHERE id = :id AND printJobId = :printJobId"
)
fun
find
(
id
:
String
,
printJobId
:
String
):
PrintJobSender
?
@Query
(
"SELECT * FROM PrintJobSender WHERE
status = :status
"
)
fun
findByStatus
(
status
:
Int
):
List
<
PrintJobSender
>
@Query
(
"SELECT * FROM PrintJobSender WHERE
(:status IS NULL OR status = :status)
"
)
fun
findByStatus
(
status
:
Int
?
):
List
<
PrintJobSender
>
@Insert
(
onConflict
=
OnConflictStrategy
.
REPLACE
)
fun
insert
(
vararg
item
:
PrintJobSender
)
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/local/SendJobLocalSource.kt
View file @
46cef878
...
...
@@ -5,7 +5,7 @@ import com.isidroid.job_sender.domain.model.PrintJobSender
class
SendJobLocalSource
(
private
val
dao
:
SendJobDao
)
:
SendJobDao
{
override
fun
find
(
id
:
String
,
printJobId
:
String
):
PrintJobSender
?
=
dao
.
find
(
id
,
printJobId
)
override
fun
findByStatus
(
status
:
Int
)
=
dao
.
findByStatus
(
status
)
override
fun
findByStatus
(
status
:
Int
?
)
=
dao
.
findByStatus
(
status
)
override
fun
insert
(
vararg
item
:
PrintJobSender
)
=
dao
.
insert
(*
item
)
fun
updateStatus
(
item
:
PrintJobSender
,
@SendJobStatus
status
:
Int
)
=
item
.
copy
(
status
=
status
).
also
{
insert
(
it
)
}
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/SendJobNetworkSource.kt
View file @
46cef878
package
com.isidroid.job_sender.data.source.remote
import
com.isidroid.core.DiMock
import
com.isidroid.job_sender.data.source.remote.api.ApiCommand
import
com.isidroid.job_sender.data.source.remote.api.ApiUpload
import
com.isidroid.network.ProgressEmittingRequestBody
import
kotlinx.coroutines.delay
import
okhttp3.MediaType.Companion.toMediaType
import
okhttp3.MediaType.Companion.toMediaTypeOrNull
import
okhttp3.MultipartBody
...
...
@@ -15,17 +17,27 @@ import javax.inject.Singleton
@Singleton
class
SendJobNetworkSource
@Inject
constructor
(
private
val
apiUpload
:
ApiUpload
,
private
val
apiCommand
:
ApiCommand
private
val
apiCommand
:
ApiCommand
,
private
val
isMock
:
Boolean
)
{
fun
uploadPage
(
jobId
:
String
,
token
:
String
,
filePath
:
String
):
Boolean
{
suspend
fun
uploadPage
(
jobId
:
String
,
token
:
String
,
filePath
:
String
):
Boolean
{
// if (isMock) {
// delay(5)
// return true
// }
val
file
=
File
(
filePath
)
val
requestBody
=
file
.
asRequestBody
(
"application/octet-stream"
.
toMediaType
())
val
response
=
apiUpload
.
upload
(
jobId
=
jobId
,
token
=
token
,
requestBody
).
execute
()
return
response
.
isSuccessful
}
fun
complete
(
jobId
:
String
,
token
:
String
):
Boolean
{
suspend
fun
complete
(
jobId
:
String
,
token
:
String
):
Boolean
{
// if (isMock) {
// delay(5)
// return true
// }
apiCommand
.
complete
(
jobId
=
jobId
,
token
=
token
).
execute
()
return
true
}
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/api/ApiCommand.kt
View file @
46cef878
...
...
@@ -2,14 +2,19 @@ package com.isidroid.job_sender.data.source.remote.api
import
okhttp3.ResponseBody
import
retrofit2.Call
import
retrofit2.http.Body
import
retrofit2.http.Field
import
retrofit2.http.FormUrlEncoded
import
retrofit2.http.Header
import
retrofit2.http.PATCH
import
retrofit2.http.Path
interface
ApiCommand
{
@FormUrlEncoded
@PATCH
(
"api/job/{jobId}"
)
fun
complete
(
@Path
(
"jobId"
)
jobId
:
String
,
@Header
(
"X-Access-Token"
)
token
:
String
,
@Field
(
"status"
)
status
:
String
=
"Ready"
):
Call
<
ResponseBody
>
}
\ No newline at end of file
feature/job_sender/src/main/java/com/isidroid/job_sender/di/JobSenderModule.kt
View file @
46cef878
...
...
@@ -37,7 +37,7 @@ object JobSenderModule {
fun
provideSendJobLocalSource
(
dao
:
SendJobDao
)
=
SendJobLocalSource
(
dao
)
@Provides
@Singleton
fun
provideSendJobNetworkSource
(
apiUpload
:
ApiUpload
,
apiCommand
:
ApiCommand
)
=
SendJobNetworkSource
(
apiUpload
,
apiCommand
)
fun
provideSendJobNetworkSource
(
apiUpload
:
ApiUpload
,
apiCommand
:
ApiCommand
,
@DiMock
isMock
:
Boolean
)
=
SendJobNetworkSource
(
apiUpload
,
apiCommand
,
isMock
)
@Provides
@Singleton
fun
provideJobSendRepository
(
...
...
@@ -83,7 +83,7 @@ object JobSenderModule {
)
=
createRetrofitApiClient
(
baseUrl
=
serverUrl
,
cl
=
ApiUpload
::
class
.
java
,
logLevel
=
HttpLoggingInterceptor
.
Level
.
HEADERS
,
logLevel
=
HttpLoggingInterceptor
.
Level
.
BODY
,
gson
=
gson
,
isDebugBuild
=
isDebugBuild
,
interceptors
=
listOf
(
authInterceptor
,
mockInterceptor
,
cacheInterceptor
)
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/domain/use_case/SendPrintJobsUseCase.kt
View file @
46cef878
...
...
@@ -3,7 +3,10 @@ package com.isidroid.job_sender.domain.use_case
import
com.isidroid.core.DiMock
import
com.isidroid.job.constant.JobStatus
import
com.isidroid.job.constant.SendJobStatus
import
com.isidroid.job.constant.jobStatusName
import
com.isidroid.job.constant.sendJobStatusName
import
com.isidroid.job_sender.repository.JobSendRepository
import
timber.log.Timber
import
javax.inject.Inject
import
javax.inject.Singleton
...
...
@@ -16,5 +19,12 @@ class SendPrintJobsUseCase @Inject constructor(
repository
.
checkNotRenderedPrintJobs
(
repository
.
getJobList
(
JobStatus
.
IDLE
))
repository
.
readFilesAndSend
(
repository
.
getJobSenderList
(
SendJobStatus
.
RENDERED
))
repository
.
markJobUploaded
(
repository
.
getJobList
(
JobStatus
.
RENDER_UPLOAD
))
// let's check
val
printJobs
=
repository
.
getJobList
(
status
=
null
)
val
pages
=
repository
.
getJobSenderList
(
status
=
null
)
Timber
.
i
(
"===> printJobs: count=${printJobs.size}, list=${printJobs.map { it.status.jobStatusName }}"
)
Timber
.
i
(
"===> pages: count=${pages.size}, list=${pages.map { it.status.sendJobStatusName }}"
)
}
}
\ No newline at end of file
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepository.kt
View file @
46cef878
...
...
@@ -6,8 +6,8 @@ import com.isidroid.job_sender.domain.model.PrintJobSender
interface
JobSendRepository
{
suspend
fun
completeUpload
(
jobId
:
String
,
token
:
String
):
PrintJob
?
suspend
fun
getJobList
(
status
:
Int
):
Collection
<
PrintJob
>
suspend
fun
getJobSenderList
(
status
:
Int
):
Collection
<
PrintJobSender
>
suspend
fun
getJobList
(
status
:
Int
?
):
Collection
<
PrintJob
>
suspend
fun
getJobSenderList
(
status
:
Int
?
):
Collection
<
PrintJobSender
>
suspend
fun
checkNotRenderedPrintJobs
(
items
:
Collection
<
PrintJob
>):
Collection
<
PrintJobSender
>?
suspend
fun
readFilesAndSend
(
items
:
Collection
<
PrintJobSender
>):
Collection
<
PrintJob
>
suspend
fun
markJobUploaded
(
items
:
Collection
<
PrintJob
>):
Collection
<
PrintJob
>
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepositoryImpl.kt
View file @
46cef878
package
com.isidroid.job_sender.repository
import
com.isidroid.job.constant.JobStatus
import
com.isidroid.job.constant.SendJobStatus
import
com.isidroid.job.constant.jobStatusName
import
com.isidroid.job.model.PrintJob
import
com.isidroid.job.repository.JobRepository
import
com.isidroid.job_sender.SendJobEventCollectorFlow
...
...
@@ -12,7 +14,6 @@ import com.isidroid.job_sender.ext.createRenderItems
import
com.isidroid.job_sender.ext.decreaseCounter
import
com.isidroid.rendering.repository.RenderRepository
import
com.isidroid.spot.repository.SpotRepository
import
kotlinx.coroutines.delay
import
timber.log.Timber
internal
class
JobSendRepositoryImpl
(
...
...
@@ -32,8 +33,8 @@ internal class JobSendRepositoryImpl(
return
printJob
?.
copy
(
status
=
JobStatus
.
READY_TO_PRINT
)
?.
also
{
printJobRepository
.
insert
(
it
)
}
?.
takeIf
{
uploadResult
}
}
override
suspend
fun
getJobList
(
status
:
Int
):
Collection
<
PrintJob
>
=
printJobRepository
.
readLocalList
(
status
=
status
)
override
suspend
fun
getJobSenderList
(
status
:
Int
):
Collection
<
PrintJobSender
>
=
sendJobLocalSource
.
findByStatus
(
status
)
override
suspend
fun
getJobList
(
status
:
Int
?
):
Collection
<
PrintJob
>
=
printJobRepository
.
readLocalList
(
status
=
status
)
override
suspend
fun
getJobSenderList
(
status
:
Int
?
):
Collection
<
PrintJobSender
>
=
sendJobLocalSource
.
findByStatus
(
status
)
// let's check whether there is not rendered print jobs
override
suspend
fun
checkNotRenderedPrintJobs
(
items
:
Collection
<
PrintJob
>):
Collection
<
PrintJobSender
>?
{
...
...
@@ -58,27 +59,37 @@ internal class JobSendRepositoryImpl(
for
((
index
,
item
)
in
items
.
withIndex
())
{
eventCollector
.
updateProgress
(
index
,
total
)
try
{
sendJobLocalSource
.
updateStatus
(
item
,
SendJobStatus
.
SENDING
)
val
uploadResult
=
sendJobNetworkSource
.
uploadPage
(
jobId
=
item
.
printJobId
,
token
=
item
.
accessToken
,
filePath
=
item
.
sourceFile
)
if
(!
uploadResult
)
throw
UploadPageException
()
sendJobResults
.
decreaseCounter
(
item
.
printJobId
)
sendJobLocalSource
.
updateStatus
(
item
,
SendJobStatus
.
COMPLETE
)
}
catch
(
t
:
Throwable
)
{
sendJobLocalSource
.
updateStatus
(
item
,
SendJobStatus
.
RENDERED
)
Timber
.
e
(
t
)
eventCollector
.
jobError
(
jobId
=
item
.
printJobId
,
t
=
t
)
}
}
Timber
.
i
(
"===> readFilesAndSend sendJobResults=${sendJobResults}"
)
eventCollector
.
updateProgress
(
total
,
total
)
// update jobs
val
successJobIds
=
sendJobResults
.
filter
{
it
.
value
==
0
}.
keys
printJobRepository
.
updateJobStatus
(
status
=
JobStatus
.
RENDER_UPLOAD
,
*
successJobIds
.
toTypedArray
())
Timber
.
i
(
"===> readFilesAndSend successJobIds=$successJobIds"
)
val
failedJobIds
=
sendJobResults
.
filter
{
it
.
value
!=
0
}.
keys
printJobRepository
.
updateJobStatus
(
status
=
JobStatus
.
UPLOAD_ERROR
,
*
failedJobIds
.
toTypedArray
())
Timber
.
i
(
"===> readFilesAndSend failedJobIds=$failedJobIds"
)
val
successJobs
=
printJobRepository
.
readLocalList
(
ids
=
successJobIds
.
toList
())
val
failedJobs
=
printJobRepository
.
readLocalList
(
ids
=
failedJobIds
.
toList
())
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment