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
cc12e8e8
Commit
cc12e8e8
authored
Jun 28, 2024
by
Aleksandr Tamakov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: отправка страниц на сервер
parent
09ddf787
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
108 additions
and
8 deletions
+108
-8
core/utils/src/main/java/com/isidroid/utils/ExtNotification.kt
+46
-0
feature/job_sender/build.gradle.kts
+1
-1
feature/job_sender/src/main/java/com/isidroid/job_sender/SendJobWorker.kt
+55
-3
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/api/ApiUpload.kt
+1
-1
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepositoryImpl.kt
+0
-3
feature/job_sender/src/main/res/drawable/ic_upload_notification.xml
+5
-0
No files found.
core/utils/src/main/java/com/isidroid/utils/ExtNotification.kt
0 → 100644
View file @
cc12e8e8
package
com.isidroid.utils
import
android.app.NotificationChannel
import
android.content.Context
import
android.os.Build
import
androidx.core.app.NotificationManagerCompat
internal
fun
isNotificationChannelSupported
()
=
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
fun
Context
.
checkIfNotificationChannelExists
(
channelId
:
String
):
String
?
{
if
(!
isNotificationChannelSupported
())
return
null
val
manager
=
NotificationManagerCompat
.
from
(
this
)
return
manager
.
getNotificationChannel
(
channelId
)
?.
id
}
fun
Context
.
removeNotificationChannel
(
channelId
:
String
?)
{
if
(!
isNotificationChannelSupported
()
||
channelId
.
isNullOrBlank
())
return
val
manager
=
NotificationManagerCompat
.
from
(
this
)
manager
.
deleteNotificationChannel
(
channelId
)
}
fun
Context
.
createNotificationChannel
(
channelId
:
String
,
name
:
String
,
importance
:
Int
,
description
:
String
?
=
null
,
hasVibration
:
Boolean
?
=
null
,
hasSound
:
Boolean
=
false
,
)
{
if
(!
isNotificationChannelSupported
())
return
// check whether exists
if
(
checkIfNotificationChannelExists
(
channelId
)
!=
null
)
return
val
channel
=
NotificationChannel
(
channelId
,
name
,
importance
)
description
?.
also
{
channel
.
description
=
it
}
hasVibration
?.
also
{
channel
.
enableVibration
(
it
)
}
if
(!
hasSound
)
channel
.
setSound
(
null
,
null
)
NotificationManagerCompat
.
from
(
this
).
createNotificationChannel
(
channel
)
}
\ No newline at end of file
feature/job_sender/build.gradle.kts
View file @
cc12e8e8
...
@@ -5,7 +5,7 @@ plugins {
...
@@ -5,7 +5,7 @@ plugins {
}
}
android {
android {
namespace = "com.isidroid.job"
namespace = "com.isidroid.job
_sender
"
compileSdk = BuildVersions.COMPILE_SDK
compileSdk = BuildVersions.COMPILE_SDK
defaultConfig {
defaultConfig {
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/SendJobWorker.kt
View file @
cc12e8e8
package
com.isidroid.job_sender
package
com.isidroid.job_sender
import
android.Manifest
import
android.annotation.SuppressLint
import
android.app.Notification
import
android.app.NotificationManager
import
android.content.Context
import
android.content.Context
import
androidx.core.app.NotificationCompat
import
androidx.core.app.NotificationManagerCompat
import
androidx.hilt.work.HiltWorker
import
androidx.hilt.work.HiltWorker
import
androidx.work.Constraints
import
androidx.work.Constraints
import
androidx.work.CoroutineWorker
import
androidx.work.CoroutineWorker
...
@@ -10,7 +16,11 @@ import androidx.work.NetworkType
...
@@ -10,7 +16,11 @@ import androidx.work.NetworkType
import
androidx.work.OneTimeWorkRequestBuilder
import
androidx.work.OneTimeWorkRequestBuilder
import
androidx.work.WorkManager
import
androidx.work.WorkManager
import
androidx.work.WorkerParameters
import
androidx.work.WorkerParameters
import
com.isidroid.job_sender.domain.dto.JobSenderResult
import
com.isidroid.job_sender.domain.use_case.SendPrintJobsUseCase
import
com.isidroid.job_sender.domain.use_case.SendPrintJobsUseCase
import
com.isidroid.utils.checkIfNotificationChannelExists
import
com.isidroid.utils.createNotificationChannel
import
com.isidroid.utils.hasPermission
import
dagger.assisted.Assisted
import
dagger.assisted.Assisted
import
dagger.assisted.AssistedInject
import
dagger.assisted.AssistedInject
import
kotlinx.coroutines.coroutineScope
import
kotlinx.coroutines.coroutineScope
...
@@ -19,6 +29,8 @@ import timber.log.Timber
...
@@ -19,6 +29,8 @@ import timber.log.Timber
import
java.util.UUID
import
java.util.UUID
import
java.util.concurrent.TimeUnit
import
java.util.concurrent.TimeUnit
private
const
val
CHANNEL_ID
=
"UPLOAD_DATA"
@HiltWorker
@HiltWorker
class
SendJobWorker
@AssistedInject
constructor
(
class
SendJobWorker
@AssistedInject
constructor
(
@Assisted
appContext
:
Context
,
@Assisted
appContext
:
Context
,
...
@@ -27,26 +39,66 @@ class SendJobWorker @AssistedInject constructor(
...
@@ -27,26 +39,66 @@ class SendJobWorker @AssistedInject constructor(
private
val
collector
:
SendJobEventCollectorFlow
private
val
collector
:
SendJobEventCollectorFlow
)
:
CoroutineWorker
(
appContext
,
workerParams
)
{
)
:
CoroutineWorker
(
appContext
,
workerParams
)
{
init
{
if
(
appContext
.
checkIfNotificationChannelExists
(
CHANNEL_ID
)
==
null
)
applicationContext
.
createNotificationChannel
(
channelId
=
CHANNEL_ID
,
name
=
"Upload print jobs"
,
importance
=
NotificationManager
.
IMPORTANCE_DEFAULT
)
}
override
suspend
fun
doWork
():
Result
=
coroutineScope
{
override
suspend
fun
doWork
():
Result
=
coroutineScope
{
val
collectorJob
=
launch
{
runCollector
()
}
val
collectorJob
=
launch
{
runCollector
()
}
var
result
:
Result
?
var
notification
:
Notification
?
Timber
.
i
(
"==> 1"
)
try
{
try
{
useCase
.
start
()
useCase
.
start
()
Result
.
success
()
notification
=
createNotification
(
"Upload successfully completed"
)
result
=
Result
.
success
()
}
catch
(
t
:
Throwable
)
{
}
catch
(
t
:
Throwable
)
{
Timber
.
e
(
t
)
Timber
.
e
(
t
)
Result
.
failure
()
notification
=
createNotification
(
"Upload complete with errors"
)
result
=
Result
.
failure
()
}
finally
{
}
finally
{
collectorJob
.
cancel
()
collectorJob
.
cancel
()
}
}
showNotification
(
notification
)
result
?:
Result
.
failure
()
}
}
private
suspend
fun
runCollector
()
{
private
suspend
fun
runCollector
()
{
coroutineScope
{
coroutineScope
{
collector
.
eventsFlow
.
collect
{
collector
.
eventsFlow
.
collect
{
event
->
val
notification
=
when
(
event
)
{
is
JobSenderResult
.
RenderProgress
->
createNotification
(
title
=
"render"
,
event
.
position
,
event
.
total
,
true
)
is
JobSenderResult
.
UploadProgress
->
createNotification
(
title
=
"upload"
,
event
.
position
,
event
.
total
,
true
)
else
->
null
}
showNotification
(
notification
)
}
}
}
}
}
private
fun
createNotification
(
title
:
String
,
position
:
Int
?
=
null
,
total
:
Int
?
=
null
,
isOngoning
:
Boolean
=
false
):
Notification
{
val
builder
=
NotificationCompat
.
Builder
(
applicationContext
,
CHANNEL_ID
)
.
setSmallIcon
(
R
.
drawable
.
ic_upload_notification
)
.
setContentTitle
(
title
)
.
setOngoing
(
isOngoning
)
if
(
position
!=
null
&&
total
!=
null
)
builder
.
setProgress
(
total
,
position
,
false
)
return
builder
.
build
()
}
@SuppressLint
(
"MissingPermission"
)
private
fun
showNotification
(
notification
:
Notification
?)
{
notification
?:
return
if
(
applicationContext
.
hasPermission
(
Manifest
.
permission
.
POST_NOTIFICATIONS
))
NotificationManagerCompat
.
from
(
applicationContext
).
notify
(
100
,
notification
)
}
}
companion
object
{
companion
object
{
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/api/ApiUpload.kt
View file @
cc12e8e8
...
@@ -11,7 +11,7 @@ import retrofit2.http.Path
...
@@ -11,7 +11,7 @@ import retrofit2.http.Path
interface
ApiUpload
{
interface
ApiUpload
{
@Multipart
@Multipart
@POST
(
"api/
job
/{jobId}"
)
@POST
(
"api/
page
/{jobId}"
)
fun
upload
(
fun
upload
(
@Path
(
"jobId"
)
jobId
:
String
,
@Path
(
"jobId"
)
jobId
:
String
,
@Header
(
"X-Access-Token"
)
token
:
String
,
@Header
(
"X-Access-Token"
)
token
:
String
,
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepositoryImpl.kt
View file @
cc12e8e8
...
@@ -57,9 +57,6 @@ internal class JobSendRepositoryImpl(
...
@@ -57,9 +57,6 @@ internal class JobSendRepositoryImpl(
for
((
index
,
item
)
in
items
.
withIndex
())
{
for
((
index
,
item
)
in
items
.
withIndex
())
{
eventCollector
.
updateProgress
(
index
,
total
)
eventCollector
.
updateProgress
(
index
,
total
)
delay
(
10
_000
)
try
{
try
{
val
uploadResult
=
sendJobNetworkSource
.
uploadPage
(
jobId
=
item
.
printJobId
,
token
=
item
.
accessToken
,
filePath
=
item
.
sourceFile
)
val
uploadResult
=
sendJobNetworkSource
.
uploadPage
(
jobId
=
item
.
printJobId
,
token
=
item
.
accessToken
,
filePath
=
item
.
sourceFile
)
if
(!
uploadResult
)
if
(!
uploadResult
)
...
...
feature/job_sender/src/main/res/drawable/ic_upload_notification.xml
0 → 100644
View file @
cc12e8e8
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:height=
"24dp"
android:tint=
"#000000"
android:viewportHeight=
"960"
android:viewportWidth=
"960"
android:width=
"24dp"
>
<path
android:fillColor=
"@android:color/white"
android:pathData=
"M440,593L440,720Q440,737 451.5,748.5Q463,760 480,760Q497,760 508.5,748.5Q520,737 520,720L520,593L556,629Q562,635 569.5,638Q577,641 584.5,640.5Q592,640 599,637Q606,634 612,628Q623,616 623.5,600Q624,584 612,572L508,468Q502,462 495,459.5Q488,457 480,457Q472,457 465,459.5Q458,462 452,468L348,572Q336,584 336.5,600Q337,616 349,628Q361,639 377,639.5Q393,640 405,628L440,593ZM240,880Q207,880 183.5,856.5Q160,833 160,800L160,160Q160,127 183.5,103.5Q207,80 240,80L527,80Q543,80 557.5,86Q572,92 583,103L777,297Q788,308 794,322.5Q800,337 800,353L800,800Q800,833 776.5,856.5Q753,880 720,880L240,880ZM520,320L520,160L240,160Q240,160 240,160Q240,160 240,160L240,800Q240,800 240,800Q240,800 240,800L720,800Q720,800 720,800Q720,800 720,800L720,360L560,360Q543,360 531.5,348.5Q520,337 520,320ZM240,160L240,160L240,320Q240,337 240,348.5Q240,360 240,360L240,360L240,160L240,320Q240,337 240,348.5Q240,360 240,360L240,360L240,800Q240,800 240,800Q240,800 240,800L240,800Q240,800 240,800Q240,800 240,800L240,160Q240,160 240,160Q240,160 240,160Z"
/>
</vector>
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