diff options
author | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-12-07 22:11:10 +0100 |
---|---|---|
committer | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-12-07 22:11:10 +0100 |
commit | c49b777cf17a05713b3c42a3bf0b7cca59d026a4 (patch) | |
tree | a0d69a692cd1a52ddbc8a034992270cbd2a94d1e | |
parent | a519aa027f8fce9c5bc76aa215e56bb3d8ec3880 (diff) | |
parent | 7a455a613fe4bb9d8cd935cc6f670736485d37e5 (diff) |
Merge branch 'develop' of http://gitlab.pmf.kg.ac.rs/BrzoDoLokacije2022/odyssey/brzodolokacije into develop
17 files changed, 109 insertions, 23 deletions
diff --git a/Backend/Api/Api/Models/User.cs b/Backend/Api/Api/Models/User.cs index cf16dbe..52d0f24 100644 --- a/Backend/Api/Api/Models/User.cs +++ b/Backend/Api/Api/Models/User.cs @@ -21,6 +21,7 @@ namespace Api.Models public List<string> following { get; set; } public int followersCount { get; set; } public int followingCount { get; set; } + public List<string>? favourites { get; set; } } public class Login @@ -68,7 +69,8 @@ namespace Api.Models public List<String> following { get; set; } public int followersCount { get; set; } - public int followingCount { get; set; } + public int followingCount { get; set; } + public List<string>? favourites { get; set; } } diff --git a/Backend/Api/Api/Services/PostService.cs b/Backend/Api/Api/Services/PostService.cs index 6d28206..cb59330 100644 --- a/Backend/Api/Api/Services/PostService.cs +++ b/Backend/Api/Api/Services/PostService.cs @@ -557,22 +557,28 @@ namespace Api.Services { string userId = _httpContext.HttpContext.User.FindFirstValue("id"); var result = false; + var user = await _users.Find(x => x._id == userId).FirstOrDefaultAsync(); Post post = await _posts.Find(x => x._id == postId).FirstOrDefaultAsync(); if (userId == null || post==null) return result; if (post.favourites == null) post.favourites = new List<string>(); + if(user.favourites==null) + user.favourites= new List<string>(); if (post.favourites.Contains(userId)) { post.favourites.Remove(userId); + user.favourites.Remove(post._id); result = false; } else { post.favourites.Add(userId); + user.favourites.Add(post._id); result = true; } + await _users.ReplaceOneAsync(x => x._id == user._id, user); await _posts.ReplaceOneAsync(x => x._id == postId, post); return result; diff --git a/Backend/Api/Api/Services/UserService.cs b/Backend/Api/Api/Services/UserService.cs index 781afa8..2b3f0b8 100644 --- a/Backend/Api/Api/Services/UserService.cs +++ b/Backend/Api/Api/Services/UserService.cs @@ -17,9 +17,7 @@ namespace Api.Services private readonly IMongoCollection<Post> _posts; private readonly IJwtService _jwtService; private IConfiguration _configuration; - private readonly IFileService _fileService; - - private readonly IMongoCollection<UserSend> _usersSend; + private readonly IFileService _fileService; public UserService(IDatabaseConnection settings, IMongoClient mongoClient, IJwtService jwtService, IHttpContextAccessor httpContextAccessor, IConfiguration configuration, IFileService fileService) { var database = mongoClient.GetDatabase(settings.DatabaseName); @@ -364,6 +362,7 @@ namespace Api.Services tosend.followingCount = user.followingCount; tosend.followers = user.followers; tosend.following = user.following; + tosend.favourites = user.favourites; var userposts = await _posts.Find(x => x.ownerId == user._id).ToListAsync(); tosend.postcount = userposts.Count(); return tosend; @@ -384,6 +383,7 @@ namespace Api.Services tosend.followingCount = user.followingCount; tosend.followers = user.followers; tosend.following = user.following; + tosend.favourites = user.favourites; var userposts = await _posts.Find(x => x.ownerId == user._id).ToListAsync(); tosend.postcount = userposts.Count(); return tosend; @@ -476,6 +476,7 @@ namespace Api.Services follower.followers = utemp.followers; follower.followersCount = utemp.followersCount; follower.followingCount = utemp.followingCount; + follower.favourites = utemp.favourites; follower._id = utemp._id; @@ -515,6 +516,7 @@ namespace Api.Services follower._id = utemp._id; follower.followersCount = utemp.followersCount; follower.followingCount = utemp.followingCount; + follower.favourites = utemp.favourites; following.Add((UserSend)follower); } @@ -558,6 +560,7 @@ namespace Api.Services following._id = utemp._id; following.followersCount = utemp.followersCount; following.followingCount = utemp.followingCount; + following.favourites=utemp.favourites; myFollowings.Add((UserSend)following); } @@ -672,6 +675,7 @@ namespace Api.Services follower.followersCount = utemp.followersCount; follower.followingCount = utemp.followingCount; follower._id = utemp._id; + follower.favourites = utemp.favourites; myfollowers.Add((UserSend)follower); } return myfollowers; diff --git a/Client/BrzoDoLokacije/app/src/debug/res/drawable-anydpi/add_post_red_image.xml b/Client/BrzoDoLokacije/app/src/debug/res/drawable-anydpi/add_post_red_image.xml new file mode 100644 index 0000000..a7524a9 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/debug/res/drawable-anydpi/add_post_red_image.xml @@ -0,0 +1,16 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="#FC3636" + android:alpha="0.8"> + <group android:scaleX="1.2" + android:scaleY="1.2" + android:translateX="-2.4" + android:translateY="-2.4"> + <path + android:fillColor="@android:color/white" + android:pathData="M13,7h-2v4L7,11v2h4v4h2v-4h4v-2h-4L13,7zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/> + </group> +</vector> diff --git a/Client/BrzoDoLokacije/app/src/debug/res/drawable-hdpi/add_post_red_image.png b/Client/BrzoDoLokacije/app/src/debug/res/drawable-hdpi/add_post_red_image.png Binary files differnew file mode 100644 index 0000000..b4fd600 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/debug/res/drawable-hdpi/add_post_red_image.png diff --git a/Client/BrzoDoLokacije/app/src/debug/res/drawable-mdpi/add_post_red_image.png b/Client/BrzoDoLokacije/app/src/debug/res/drawable-mdpi/add_post_red_image.png Binary files differnew file mode 100644 index 0000000..5cc1ebf --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/debug/res/drawable-mdpi/add_post_red_image.png diff --git a/Client/BrzoDoLokacije/app/src/debug/res/drawable-xhdpi/add_post_red_image.png b/Client/BrzoDoLokacije/app/src/debug/res/drawable-xhdpi/add_post_red_image.png Binary files differnew file mode 100644 index 0000000..8c33142 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/debug/res/drawable-xhdpi/add_post_red_image.png diff --git a/Client/BrzoDoLokacije/app/src/debug/res/drawable-xxhdpi/add_post_red_image.png b/Client/BrzoDoLokacije/app/src/debug/res/drawable-xxhdpi/add_post_red_image.png Binary files differnew file mode 100644 index 0000000..0745c58 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/debug/res/drawable-xxhdpi/add_post_red_image.png diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt index 34a9e6b..2f5b2d2 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt @@ -4,18 +4,20 @@ import android.content.Intent import android.graphics.Color import android.os.Bundle import android.preference.PreferenceManager +import android.util.TypedValue +import android.view.View import android.view.ViewGroup -import android.widget.FrameLayout -import android.widget.ImageView -import android.widget.TextView +import android.widget.* import androidx.appcompat.app.AppCompatActivity import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.core.view.isGone import androidx.core.view.isVisible +import androidx.core.view.setMargins import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.auth0.android.jwt.JWT import com.example.brzodolokacije.Adapters.CommentsAdapter import com.example.brzodolokacije.Adapters.PostImageAdapter import com.example.brzodolokacije.Fragments.FragmentSinglePostComments @@ -48,6 +50,7 @@ class ActivitySinglePost : AppCompatActivity() { private var recyclerViewImages: RecyclerView?=null private var recyclerViewComments: RecyclerView?=null private var favouriteImage: ImageView?=null + private lateinit var tagLayout: LinearLayout public lateinit var post: PostPreview @@ -76,7 +79,6 @@ class ActivitySinglePost : AppCompatActivity() { btnChangeHeightUp.isVisible=true btnChangeHeightUp.isGone=false btnChangeHeightUp.isClickable=true - linearLayout2=findViewById(R.id.linearLayout2) linearLayout2.setOnClickListener { @@ -105,12 +107,16 @@ class ActivitySinglePost : AppCompatActivity() { fm.replace(R.id.flSinglePostFragmentContainer, fragment) fm.commit() - /* + favouriteImage=binding.ivFavourite - // set recyclerView attributes + tagLayout = binding.llTags + loadTags() loadFavourite() - */ + // set recyclerView attributes + + + translateOwnerIdToName(post.ownerId) binding.tvUser.setOnClickListener { @@ -152,10 +158,10 @@ class ActivitySinglePost : AppCompatActivity() { } - /*favouriteImage!!.setOnClickListener{ + favouriteImage!!.setOnClickListener{ addRemoveFavourite() } -*/ + binding.btnActivitySinglePostDescription.setOnClickListener { var fm: FragmentTransaction =supportFragmentManager.beginTransaction() val fragment = FragmentSinglePostDescription() @@ -177,7 +183,27 @@ class ActivitySinglePost : AppCompatActivity() { } - /* + fun loadTags(){ + if(post.tags!=null) + for( item in post.tags!!){ + var newbtn = Button(this) + newbtn.text = item + var layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, + 50 + ) + layoutParams.setMargins(3) + newbtn.layoutParams=layoutParams + newbtn.setBackgroundColor(Color.parseColor("#1C789A")) + newbtn.setTextColor(Color.WHITE) + newbtn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10F) + newbtn.setPadding(3,1,3,1) + newbtn.isClickable=false + tagLayout.addView(newbtn) + } + + } + fun loadFavourite(){ if(post.favourites!=null){ var jwtString=SharedPreferencesHelper.getValue("jwt",this) @@ -212,12 +238,12 @@ class ActivitySinglePost : AppCompatActivity() { } - */ + fun getMap(){ var map: MapView? = null Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this)); - map=findViewById(R.id.MapDialogueMapView) + map=findViewById(R.id.MapDialogueMap) //findViewById(R.id.MapDialogueMapView) as MapView map!!.setTileSource(TileSourceFactory.MAPNIK); map!!.setBuiltInZoomControls(true); diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt index 238c7e8..c6bfe6d 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt @@ -128,6 +128,8 @@ class MapsActivity : AppCompatActivity() { var editText=EditText(this) var dialog=AlertDialog.Builder(this).setTitle("Naziv").setMessage("Unesite naziv") .setView(editText) + if(searchBar.text!=null && searchBar.text.toString().trim()!="") + editText.setText(searchBar.text.toString()) dialog.setPositiveButton("Dodaj") { dialog, which -> uploadLocation(editText.text.toString()) } diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt index 478a8ea..56f7900 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt @@ -70,7 +70,7 @@ class ChatPreviewsAdapter (val items : MutableList<ChatPreview>,val activity:Cha tvUsername.text=user.username if(user.pfp!=null) { Glide.with(activity) - .load(RetrofitHelper.baseUrl + "/api/post/image/" + user.pfp!!._id) + .load(RetrofitHelper.baseUrl + "/api/post/image/compress/" + user.pfp!!._id) .circleCrop() .into(ivUserImage) } diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentBrowse.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentBrowse.kt index a0d6146..cb213bc 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentBrowse.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentBrowse.kt @@ -209,8 +209,10 @@ class FragmentBrowse : Fragment(R.layout.fragment_browse) { for(post in postList){ Log.d("main",post.toString()) val startMarker = Marker(map) + startMarker.setPosition(GeoPoint(post.location.latitude,post.location.longitude)) startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM) + startMarker.icon=ContextCompat.getDrawable(requireContext(), R.drawable.ic_baseline_location_on_24) startMarker.setOnMarkerClickListener(object:OnMarkerClickListener{ override fun onMarkerClick( marker: Marker?, diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/User.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/User.kt index 6e282a9..072be55 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/User.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/User.kt @@ -34,5 +34,6 @@ data class UserReceive( var following:List<String>, var followingCount:Int, var postIds:List<Int>, - var postNumber:Int + var postNumber:Int, + var favourites:List<String>? )
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/UserPostsMapFragment.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/UserPostsMapFragment.kt index 882a1ae..4c4d829 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/UserPostsMapFragment.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/UserPostsMapFragment.kt @@ -10,6 +10,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView +import androidx.core.content.ContextCompat import com.example.brzodolokacije.Activities.ActivitySinglePost import com.example.brzodolokacije.Fragments.FragmentProfile import com.example.brzodolokacije.Models.PostPreview @@ -83,6 +84,7 @@ class UserPostsMapFragment : Fragment() { val startMarker = Marker(map) startMarker.setPosition(GeoPoint(post.location.latitude,post.location.longitude)) startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM) + startMarker.icon= ContextCompat.getDrawable(requireContext(), R.drawable.ic_baseline_location_on_24) if(flag){ flag=false map!!.controller.animateTo(GeoPoint(post.location.latitude,post.location.longitude)) diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_add_post_red_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_add_post_red_24.xml new file mode 100644 index 0000000..111c9a1 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_add_post_red_24.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#FC3636" + android:viewportHeight="24" android:viewportWidth="24" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="@android:color/white" android:pathData="M13,7h-2v4L7,11v2h4v4h2v-4h4v-2h-4L13,7zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/> +</vector> diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml index 9d59e0b..15e81cf 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml @@ -94,6 +94,26 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvLocationType" /> + <LinearLayout + android:id="@+id/llTags" + android:layout_width="match_parent" + android:layout_height="20dp" + android:orientation="horizontal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tvUser"></LinearLayout> + + <ImageView + android:id="@+id/ivFavourite" + android:layout_width="30dp" + android:layout_height="30dp" + android:clickable="true" + android:layout_marginRight="5dp" + android:src="@drawable/ic_baseline_favorite_border_24" + app:layout_constraintBottom_toBottomOf="@+id/tvRating" + app:layout_constraintEnd_toStartOf="@+id/tvRating" + app:layout_constraintTop_toTopOf="@+id/tvRating" /> + <TextView android:id="@+id/tvRating" android:textSize="15dp" @@ -148,7 +168,7 @@ app:cardCornerRadius="10dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/tvUser"> + app:layout_constraintTop_toBottomOf="@+id/llTags"> <org.osmdroid.views.MapView android:id="@+id/MapDialogueMap" diff --git a/Client/BrzoDoLokacije/app/src/main/res/menu/bottom_nav_menu.xml b/Client/BrzoDoLokacije/app/src/main/res/menu/bottom_nav_menu.xml index c024570..405bc3c 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/menu/bottom_nav_menu.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/menu/bottom_nav_menu.xml @@ -9,14 +9,14 @@ android:icon="@drawable/ic_baseline_list_24" android:title="Sve objave" /> <item + android:id="@+id/navAddPost" + android:title="Dodaj" + android:icon="@drawable/add_post_red_image"/> + <item android:id="@+id/navBrowse" android:title="Pretraga" android:icon="@drawable/ic_nav_browse"/> <item - android:id="@+id/navAddPost" - android:title="Dodaj" - android:icon="@drawable/ic_nav_addpost"/> - <item android:id="@+id/navProfile" android:title="Profil" android:icon="@drawable/ic_nav_profile"/> |