Skip to content

Commit 1592ede

Browse files
K6pkusgit-jr
authored andcommitted
feat: adding story container and metadas on post item
feat: adding metadas on post item fix: pinning appbar in reels top
1 parent d62878e commit 1592ede

38 files changed

+770
-481
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ dependencies {
6969
implementation(libs.material3)
7070
implementation(libs.coil)
7171
implementation(libs.coil.compose)
72+
implementation(libs.coil.gif)
73+
7274
implementation(libs.material.icons.extended)
7375
implementation(libs.viewmodel.compose)
7476
implementation(libs.bundles.retrofit)

app/src/main/java/com/paradoxo/materialgram/data/PostLocalDataSource.kt

Lines changed: 0 additions & 73 deletions
This file was deleted.
Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,31 @@
11
package com.paradoxo.materialgram.data
22

3+
import com.paradoxo.materialgram.data.local.PostLocalDataSource
4+
import com.paradoxo.materialgram.data.network.PostService
35
import com.paradoxo.materialgram.domain.model.Post
46
import kotlinx.coroutines.flow.Flow
5-
import kotlinx.coroutines.flow.flowOf
7+
import kotlinx.coroutines.flow.flow
68
import javax.inject.Inject
79

810
interface PostRepository {
911
suspend fun getPosts(): Flow<List<Post>>
1012
}
1113

1214
class PostRepositoryImpl @Inject constructor(
13-
private val postLocalDataSource: PostLocalDataSource
15+
private val postLocalDataSource: PostLocalDataSource,
16+
private val postService: PostService
1417
) : PostRepository {
1518
override suspend fun getPosts(): Flow<List<Post>> {
16-
return flowOf(postLocalDataSource.posts)
19+
20+
return flow {
21+
val localPosts = postLocalDataSource.posts
22+
23+
if (localPosts.isNotEmpty()) {
24+
emit(localPosts)
25+
}
26+
27+
val remotePosts = postService.getPosts()
28+
emit(localPosts + remotePosts)
29+
}
1730
}
1831
}

app/src/main/java/com/paradoxo/materialgram/data/VideoLocalDataSource.kt

Lines changed: 0 additions & 29 deletions
This file was deleted.

app/src/main/java/com/paradoxo/materialgram/data/VideoRepository.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
package com.paradoxo.materialgram.data
22

3-
import com.paradoxo.materialgram.domain.model.Video
3+
import com.paradoxo.materialgram.data.local.VideoLocalDataSource
4+
import com.paradoxo.materialgram.data.network.VideoService
5+
import com.paradoxo.materialgram.domain.model.Reels
46
import kotlinx.coroutines.flow.Flow
57
import kotlinx.coroutines.flow.flow
68
import javax.inject.Inject
79

810
interface VideoRepository {
9-
suspend fun getVideos(): Flow<List<Video>>
11+
suspend fun getVideos(): Flow<List<Reels>>
1012
}
1113

1214
class VideoRepositoryImpl @Inject constructor(
1315
private val videoLocalDataSource: VideoLocalDataSource,
1416
private val videoService: VideoService
1517
) : VideoRepository {
16-
override suspend fun getVideos(): Flow<List<Video>> {
18+
override suspend fun getVideos(): Flow<List<Reels>> {
1719

1820
return flow {
19-
val localVideos = videoLocalDataSource.videos
21+
val localVideos = videoLocalDataSource.reels
2022

2123
if (localVideos.isNotEmpty()) {
2224
emit(localVideos)

app/src/main/java/com/paradoxo/materialgram/data/VideoService.kt

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
package com.paradoxo.materialgram.data.local
2+
3+
import com.paradoxo.materialgram.domain.model.BasePost
4+
import com.paradoxo.materialgram.domain.model.Media
5+
import com.paradoxo.materialgram.domain.model.Post
6+
import com.paradoxo.materialgram.domain.model.User
7+
8+
class PostLocalDataSource {
9+
10+
private val imageArrayList = arrayListOf(
11+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(1).jpeg",
12+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(1).jpg",
13+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(2).jpg",
14+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(3).jpg",
15+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(4).jpg",
16+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(5).jpeg",
17+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(5).jpg",
18+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(10).jpg",
19+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(6).jpg",
20+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(7).jpg",
21+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(8).jpg",
22+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(9).jpg",
23+
"https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/image%20(4).jpeg"
24+
)
25+
26+
private val medias = listOf(
27+
Media(
28+
imageArrayList[0],
29+
""
30+
), Media(
31+
imageArrayList[1],
32+
""
33+
), Media(
34+
imageArrayList[2],
35+
""
36+
), Media(
37+
imageArrayList[3],
38+
""
39+
), Media(
40+
imageArrayList[4],
41+
""
42+
), Media(
43+
imageArrayList[5],
44+
""
45+
)
46+
)
47+
48+
val posts = listOf(
49+
Post(
50+
basePost = basePosts[0],
51+
medias = medias,
52+
)
53+
)
54+
}
55+
56+
val users = listOf(
57+
User(
58+
name = "Thor",
59+
avatar = "https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/profile-pics/thor.png",
60+
followers = 5000000,
61+
following = 100,
62+
posts = 1000,
63+
description = "God of Thunder",
64+
website = "https://www.example.com/thor",
65+
isFollowing = false,
66+
isMe = false
67+
),
68+
User(
69+
name = "Odin",
70+
avatar = "https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/profile-pics/odin.png",
71+
followers = 10000,
72+
following = 10,
73+
posts = 500,
74+
description = "King of Asgard",
75+
website = "https://www.example.com/odin",
76+
isFollowing = false,
77+
isMe = false
78+
),
79+
User(
80+
name = "Lady Sif",
81+
avatar = "https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/profile-pics/lady-sif.png",
82+
followers = 5000,
83+
following = 20,
84+
posts = 200,
85+
description = "Warrior",
86+
website = "",
87+
isFollowing = false,
88+
isMe = false
89+
),
90+
User(
91+
name = "Mobius",
92+
avatar = "https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/profile-pics/mobius.png",
93+
followers = 100000,
94+
following = 50,
95+
posts = 800,
96+
description = "Time Variance Authority",
97+
website = "https://www.example.com/Mobius",
98+
isFollowing = false,
99+
isMe = false
100+
),
101+
User(
102+
name = "Hela",
103+
avatar = "https://raw.githubusercontent.com/K6pkus/sample-api/main/loki-files/images/profile-pics/hela.png",
104+
followers = 50000,
105+
following = 30,
106+
posts = 600,
107+
description = "Goddess of Death",
108+
website = "",
109+
isFollowing = false,
110+
isMe = false
111+
)
112+
)
113+
114+
val basePosts = listOf(
115+
BasePost(
116+
description = "hj nem Odin na causa",
117+
likes = 616,
118+
comments = 110,
119+
time = "1h",
120+
user = users.last()
121+
),
122+
BasePost(
123+
description = "Plural Strings em ação",
124+
likes = 1,
125+
comments = 10,
126+
time = "1h",
127+
user = users.first()
128+
),
129+
BasePost(
130+
description = "O personagem Loki foi introduzido no Universo Cinematográfico Marvel (MCU) no filme Thor (2011), e Hiddleston foi escalado para o papel depois que o diretor Kenneth Branagh ficou impressionado com sua audição. Hiddleston voltou a interpretar Loki em Thor: The Dark World (2013), Thor: Ragnarok (2017), Avengers: Infinity War (2018) e Avengers: Endgame (2019). Em setembro de 2018, a Marvel Studios estava desenvolvendo uma série limitada centrada em Loki e estrelada por Hiddleston. Waldron foi contratado em fevereiro de 2019, e Herron foi contratada no mês seguinte. A fotografia principal começou em janeiro de 2020, mas foi interrompida em março devido à pandemia COVID-19. A produção foi retomada em setembro e foi concluída em dezembro.",
131+
likes = 5500,
132+
comments = 100,
133+
time = "1h",
134+
user = users[1]
135+
),
136+
BasePost(
137+
description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec euismod, nisl eget ultricies aliquam, nunc nisl aliquet nunc, quis aliquam nisl",
138+
likes = 100,
139+
comments = 10,
140+
time = "1h",
141+
user = users[2]
142+
),
143+
BasePost(
144+
description = "O tempo está acabando para o Deus da Trapaça. ⌛\n Assista ao novo trailer de #Loki, uma série Original da Marvel Studios.",
145+
likes = 5464,
146+
comments = 87,
147+
time = "1h",
148+
user = users[3]
149+
)
150+
)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.paradoxo.materialgram.data.local
2+
3+
import com.paradoxo.materialgram.domain.model.Reels
4+
5+
class VideoLocalDataSource {
6+
val reels = listOf(
7+
Reels(
8+
video ="https://github.com/K6pkus/sample-api/raw/main/loki-files/reels/reels_1.mp4",
9+
thumbnail = "",
10+
basePosts[4]
11+
),
12+
)
13+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.paradoxo.materialgram.data.network
2+
3+
import com.paradoxo.materialgram.domain.model.Post
4+
import retrofit2.http.GET
5+
6+
interface PostService {
7+
8+
@GET("posts.json")
9+
suspend fun getPosts(): List<Post>
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.paradoxo.materialgram.data.network
2+
3+
import com.paradoxo.materialgram.domain.model.Reels
4+
import retrofit2.http.GET
5+
6+
interface VideoService {
7+
8+
@GET("reels.json")
9+
suspend fun getVideos(): List<Reels>
10+
}

0 commit comments

Comments
 (0)